From c40c0d2114d7800cca8da2d685ad1e49bf4cc7eb Mon Sep 17 00:00:00 2001 From: Bertrand Marron Date: Fri, 9 May 2025 09:01:47 +0200 Subject: [PATCH 01/49] fix(csv-stringify): allow mixed string and object columns typedef (#456) --- packages/csv-stringify/lib/index.d.ts | 2 +- packages/csv-stringify/test/api.types.sync.ts | 2 +- packages/csv-stringify/test/api.types.ts | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/csv-stringify/lib/index.d.ts b/packages/csv-stringify/lib/index.d.ts index 618b7ee6..d4328305 100644 --- a/packages/csv-stringify/lib/index.d.ts +++ b/packages/csv-stringify/lib/index.d.ts @@ -61,7 +61,7 @@ export interface Options extends stream.TransformOptions { * can refer to nested properties of the input JSON * see the "header" option on how to print columns names on the first line */ - columns?: readonly string[] | PlainObject | readonly ColumnOption[] + columns?: ReadonlyArray | PlainObject /** * Set the field delimiter, one character only, defaults to a comma. */ diff --git a/packages/csv-stringify/test/api.types.sync.ts b/packages/csv-stringify/test/api.types.sync.ts index 07dc3c6b..87cf315d 100644 --- a/packages/csv-stringify/test/api.types.sync.ts +++ b/packages/csv-stringify/test/api.types.sync.ts @@ -20,7 +20,7 @@ describe('API Types', () => { const rd: RecordDelimiter | undefined = options.record_delimiter const cast = options.cast const castBoolean : Cast | undefined = cast?.boolean - const columns: readonly string[] | PlainObject | readonly ColumnOption[] | undefined = options.columns + const columns: ReadonlyArray | PlainObject | undefined = options.columns return [ rd, castBoolean, columns ] diff --git a/packages/csv-stringify/test/api.types.ts b/packages/csv-stringify/test/api.types.ts index 9907e65e..8953bb08 100644 --- a/packages/csv-stringify/test/api.types.ts +++ b/packages/csv-stringify/test/api.types.ts @@ -70,6 +70,12 @@ describe('API Types', () => { { key: 'b' }, { key: 'a' } ] + options.columns = [ + { key: "b", header: "B" }, + { key: "a" , header: "A" }, + "c", + { key: "d" }, + ]; options.columns = { field1: 'column1', field3: 'column3' @@ -81,7 +87,7 @@ describe('API Types', () => { options.columns = ["b", "a"]; options.columns = ["b", "a"] as const; }); - + it('delimiter', () => { const options: Options = {} options.delimiter = ':' From 5d4c6c0d31b9d651dc6cfd2c0e3de8ff77f6d065 Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 9 May 2025 12:56:49 +0200 Subject: [PATCH 02/49] test(stream-transform): use timeout to support latest node versions --- packages/stream-transform/test/handler.mode.callback.coffee | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/stream-transform/test/handler.mode.callback.coffee b/packages/stream-transform/test/handler.mode.callback.coffee index 7e805533..d034b9b7 100644 --- a/packages/stream-transform/test/handler.mode.callback.coffee +++ b/packages/stream-transform/test/handler.mode.callback.coffee @@ -37,8 +37,9 @@ describe 'handler.mode.callback', -> generate columns: 10, objectMode: true, length: 1000, seed: true , transform parallel: 2, (chunk, callback) -> - setImmediate -> + setTimeout -> callback null, JSON.stringify(chunk)+'\n' + , 1 , consumer ) From beb3bb363e7899367ea248c5a56b3a8ab95b4143 Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 9 May 2025 12:57:40 +0200 Subject: [PATCH 03/49] build: latest dependencies --- demo/browser/package.json | 2 +- demo/cjs/package.json | 6 +- demo/eslint/package.json | 2 +- demo/esm/package.json | 2 +- demo/issues-cjs/package.json | 2 +- demo/issues-esm/package.json | 6 +- demo/ts-cjs-node16/package.json | 2 +- demo/ts-esm-node16/package.json | 6 +- demo/webpack-ts/package.json | 10 +- demo/webpack/package.json | 4 +- eslint.config.js | 2 +- package-lock.json | 12028 +++++++++++++---------- package.json | 10 +- packages/csv-generate/package.json | 24 +- packages/csv-parse/package.json | 24 +- packages/csv-stringify/package.json | 26 +- packages/csv/package.json | 24 +- packages/stream-transform/package.json | 24 +- 18 files changed, 6733 insertions(+), 5471 deletions(-) diff --git a/demo/browser/package.json b/demo/browser/package.json index d2ad6361..82d474da 100644 --- a/demo/browser/package.json +++ b/demo/browser/package.json @@ -24,7 +24,7 @@ "csv-generate": "^4.4.2", "csv-parse": "^5.6.0", "csv-stringify": "^6.5.2", - "express": "^4.21.1", + "express": "^5.1.0", "stream-transform": "^3.3.3" } } diff --git a/demo/cjs/package.json b/demo/cjs/package.json index 46d76053..95b483d6 100644 --- a/demo/cjs/package.json +++ b/demo/cjs/package.json @@ -11,12 +11,12 @@ "csv-stringify": "^6.5.2" }, "devDependencies": { - "@types/node": "^22.9.1", + "@types/node": "^22.15.17", "coffeescript": "^2.7.0", - "mocha": "^10.8.2", + "mocha": "^11.2.2", "should": "^13.2.3", "ts-node": "^10.9.2", - "typescript": "^5.6.3" + "typescript": "^5.8.3" }, "mocha": { "inline-diffs": true, diff --git a/demo/eslint/package.json b/demo/eslint/package.json index 3d1871f3..b31d68a0 100644 --- a/demo/eslint/package.json +++ b/demo/eslint/package.json @@ -13,7 +13,7 @@ "csv-stringify": "^6.5.2" }, "devDependencies": { - "eslint": "^9.15.0", + "eslint": "^9.26.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-import": "^2.31.0" } diff --git a/demo/esm/package.json b/demo/esm/package.json index 745c0011..d63391c8 100644 --- a/demo/esm/package.json +++ b/demo/esm/package.json @@ -11,7 +11,7 @@ }, "devDependencies": { "coffeescript": "^2.7.0", - "mocha": "^10.8.2", + "mocha": "^11.2.2", "should": "^13.2.3" }, "mocha": { diff --git a/demo/issues-cjs/package.json b/demo/issues-cjs/package.json index a658939e..5038dbfc 100644 --- a/demo/issues-cjs/package.json +++ b/demo/issues-cjs/package.json @@ -10,7 +10,7 @@ }, "devDependencies": { "coffeescript": "^2.7.0", - "mocha": "^10.8.2", + "mocha": "^11.2.2", "should": "^13.2.3" }, "mocha": { diff --git a/demo/issues-esm/package.json b/demo/issues-esm/package.json index c3f93c90..a22c6587 100644 --- a/demo/issues-esm/package.json +++ b/demo/issues-esm/package.json @@ -8,7 +8,7 @@ "devDependencies": { "coffeescript": "^2.7.0", "dirname-filename-esm": "^1.1.2", - "mocha": "^10.8.2", + "mocha": "^11.2.2", "should": "^13.2.3" }, "mocha": { @@ -36,8 +36,8 @@ "csv-generate": "^4.4.2", "csv-parse": "^5.6.0", "csv-stringify": "^6.5.2", - "dedent": "^1.5.3", + "dedent": "^1.6.0", "desm": "^1.3.1", - "duckdb-async": "^1.1.3" + "duckdb-async": "^1.2.1" } } diff --git a/demo/ts-cjs-node16/package.json b/demo/ts-cjs-node16/package.json index 3f727a07..8c736cef 100644 --- a/demo/ts-cjs-node16/package.json +++ b/demo/ts-cjs-node16/package.json @@ -11,7 +11,7 @@ "license": "MIT", "private": true, "devDependencies": { - "typescript": "^5.6.3" + "typescript": "^5.8.3" }, "scripts": { "test": "tsc --noEmit" diff --git a/demo/ts-esm-node16/package.json b/demo/ts-esm-node16/package.json index 70e44a16..cd6ad836 100644 --- a/demo/ts-esm-node16/package.json +++ b/demo/ts-esm-node16/package.json @@ -12,12 +12,12 @@ "stream-transform": "^3.3.3" }, "devDependencies": { - "@types/node": "^22.9.1", + "@types/node": "^22.15.17", "coffeescript": "^2.7.0", - "mocha": "^10.8.2", + "mocha": "^11.2.2", "should": "^13.2.3", "ts-node": "^10.9.2", - "typescript": "^5.6.3" + "typescript": "^5.8.3" }, "mocha": { "inline-diffs": true, diff --git a/demo/webpack-ts/package.json b/demo/webpack-ts/package.json index d86861b3..0bfad4f9 100644 --- a/demo/webpack-ts/package.json +++ b/demo/webpack-ts/package.json @@ -15,12 +15,12 @@ }, "devDependencies": { "buffer-browserify": "^0.2.5", - "node-polyfill-webpack-plugin": "^4.0.0", + "node-polyfill-webpack-plugin": "^4.1.0", "stream-browserify": "^3.0.0", - "ts-loader": "^9.5.1", - "typescript": "^5.6.3", - "webpack": "^5.96.1", - "webpack-cli": "^5.1.4" + "ts-loader": "^9.5.2", + "typescript": "^5.8.3", + "webpack": "^5.99.8", + "webpack-cli": "^6.0.1" }, "scripts": { "build": "npx webpack --config webpack.config.js", diff --git a/demo/webpack/package.json b/demo/webpack/package.json index 8bccab5a..4959ef36 100644 --- a/demo/webpack/package.json +++ b/demo/webpack/package.json @@ -12,8 +12,8 @@ "author": "", "license": "ISC", "devDependencies": { - "webpack": "^5.96.1", - "webpack-cli": "^5.1.4" + "webpack": "^5.99.8", + "webpack-cli": "^6.0.1" }, "dependencies": { "csv": "^6.3.11", diff --git a/eslint.config.js b/eslint.config.js index 6168f8a9..7a5fcb4a 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -11,7 +11,7 @@ export default [ languageOptions: { globals: { ...globals.node } }, }, js.configs.recommended, - mocha.configs.flat.recommended, + mocha.configs.recommended, prettier, { files: ["demo/webpack/**/*.js"], diff --git a/package-lock.json b/package-lock.json index cede1340..8ac31de1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,13 +6,13 @@ "": { "hasInstallScript": true, "devDependencies": { - "@commitlint/cli": "^19.6.0", - "@commitlint/config-conventional": "^19.6.0", + "@commitlint/cli": "^19.8.1", + "@commitlint/config-conventional": "^19.8.1", "cz-conventional-changelog": "^3.3.0", - "glob": "^11.0.0", + "glob": "^11.0.2", "husky": "^9.1.7", - "lerna": "^8.1.9", - "lint-staged": "^15.2.10" + "lerna": "^8.2.2", + "lint-staged": "^15.5.2" }, "workspaces": { "packages": [ @@ -34,7 +34,7 @@ "csv-generate": "^4.4.2", "csv-parse": "^5.6.0", "csv-stringify": "^6.5.2", - "express": "^4.21.1", + "express": "^5.1.0", "stream-transform": "^3.3.3" } }, @@ -48,12 +48,12 @@ "csv-stringify": "^6.5.2" }, "devDependencies": { - "@types/node": "^22.9.1", + "@types/node": "^22.15.17", "coffeescript": "^2.7.0", - "mocha": "^10.8.2", + "mocha": "^11.2.2", "should": "^13.2.3", "ts-node": "^10.9.2", - "typescript": "^5.6.3" + "typescript": "^5.8.3" } }, "demo/eslint": { @@ -64,7 +64,7 @@ "csv-stringify": "^6.5.2" }, "devDependencies": { - "eslint": "^9.15.0", + "eslint": "^9.26.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-import": "^2.31.0" } @@ -79,7 +79,7 @@ }, "devDependencies": { "coffeescript": "^2.7.0", - "mocha": "^10.8.2", + "mocha": "^11.2.2", "should": "^13.2.3" } }, @@ -93,7 +93,7 @@ }, "devDependencies": { "coffeescript": "^2.7.0", - "mocha": "^10.8.2", + "mocha": "^11.2.2", "should": "^13.2.3" } }, @@ -105,19 +105,21 @@ "csv-generate": "^4.4.2", "csv-parse": "^5.6.0", "csv-stringify": "^6.5.2", - "dedent": "^1.5.3", + "dedent": "^1.6.0", "desm": "^1.3.1", - "duckdb-async": "^1.1.3" + "duckdb-async": "^1.2.1" }, "devDependencies": { "coffeescript": "^2.7.0", "dirname-filename-esm": "^1.1.2", - "mocha": "^10.8.2", + "mocha": "^11.2.2", "should": "^13.2.3" } }, "demo/issues-esm/node_modules/dedent": { - "version": "1.5.3", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" @@ -139,7 +141,7 @@ "stream-transform": "^3.3.3" }, "devDependencies": { - "typescript": "^5.6.3" + "typescript": "^5.8.3" } }, "demo/ts-esm-node16": { @@ -153,12 +155,12 @@ "stream-transform": "^3.3.3" }, "devDependencies": { - "@types/node": "^22.9.1", + "@types/node": "^22.15.17", "coffeescript": "^2.7.0", - "mocha": "^10.8.2", + "mocha": "^11.2.2", "should": "^13.2.3", "ts-node": "^10.9.2", - "typescript": "^5.6.3" + "typescript": "^5.8.3" } }, "demo/webpack": { @@ -175,8 +177,8 @@ "stream-transform": "^3.3.3" }, "devDependencies": { - "webpack": "^5.96.1", - "webpack-cli": "^5.1.4" + "webpack": "^5.99.8", + "webpack-cli": "^6.0.1" } }, "demo/webpack-ts": { @@ -192,33 +194,33 @@ }, "devDependencies": { "buffer-browserify": "^0.2.5", - "node-polyfill-webpack-plugin": "^4.0.0", + "node-polyfill-webpack-plugin": "^4.1.0", "stream-browserify": "^3.0.0", - "ts-loader": "^9.5.1", - "typescript": "^5.6.3", - "webpack": "^5.96.1", - "webpack-cli": "^5.1.4" + "ts-loader": "^9.5.2", + "typescript": "^5.8.3", + "webpack": "^5.99.8", + "webpack-cli": "^6.0.1" } }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, "license": "MIT", "engines": { @@ -226,18 +228,18 @@ } }, "node_modules/@commitlint/cli": { - "version": "19.6.0", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.6.0.tgz", - "integrity": "sha512-v17BgGD9w5KnthaKxXnEg6KLq6DYiAxyiN44TpiRtqyW8NSq+Kx99mkEG8Qo6uu6cI5eMzMojW2muJxjmPnF8w==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.8.1.tgz", + "integrity": "sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/format": "^19.5.0", - "@commitlint/lint": "^19.6.0", - "@commitlint/load": "^19.5.0", - "@commitlint/read": "^19.5.0", - "@commitlint/types": "^19.5.0", - "tinyexec": "^0.3.0", + "@commitlint/format": "^19.8.1", + "@commitlint/lint": "^19.8.1", + "@commitlint/load": "^19.8.1", + "@commitlint/read": "^19.8.1", + "@commitlint/types": "^19.8.1", + "tinyexec": "^1.0.0", "yargs": "^17.0.0" }, "bin": { @@ -248,13 +250,13 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "19.6.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.6.0.tgz", - "integrity": "sha512-DJT40iMnTYtBtUfw9ApbsLZFke1zKh6llITVJ+x9mtpHD08gsNXaIRqHTmwTZL3dNX5+WoyK7pCN/5zswvkBCQ==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.8.1.tgz", + "integrity": "sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.5.0", + "@commitlint/types": "^19.8.1", "conventional-changelog-conventionalcommits": "^7.0.2" }, "engines": { @@ -262,13 +264,13 @@ } }, "node_modules/@commitlint/config-validator": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.5.0.tgz", - "integrity": "sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.8.1.tgz", + "integrity": "sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.5.0", + "@commitlint/types": "^19.8.1", "ajv": "^8.11.0" }, "engines": { @@ -276,13 +278,13 @@ } }, "node_modules/@commitlint/ensure": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.5.0.tgz", - "integrity": "sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.8.1.tgz", + "integrity": "sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.5.0", + "@commitlint/types": "^19.8.1", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", @@ -294,9 +296,9 @@ } }, "node_modules/@commitlint/execute-rule": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.5.0.tgz", - "integrity": "sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.8.1.tgz", + "integrity": "sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==", "dev": true, "license": "MIT", "engines": { @@ -304,13 +306,13 @@ } }, "node_modules/@commitlint/format": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.5.0.tgz", - "integrity": "sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.8.1.tgz", + "integrity": "sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.5.0", + "@commitlint/types": "^19.8.1", "chalk": "^5.3.0" }, "engines": { @@ -318,13 +320,13 @@ } }, "node_modules/@commitlint/is-ignored": { - "version": "19.6.0", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.6.0.tgz", - "integrity": "sha512-Ov6iBgxJQFR9koOupDPHvcHU9keFupDgtB3lObdEZDroiG4jj1rzky60fbQozFKVYRTUdrBGICHG0YVmRuAJmw==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.8.1.tgz", + "integrity": "sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.5.0", + "@commitlint/types": "^19.8.1", "semver": "^7.6.0" }, "engines": { @@ -332,35 +334,35 @@ } }, "node_modules/@commitlint/lint": { - "version": "19.6.0", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.6.0.tgz", - "integrity": "sha512-LRo7zDkXtcIrpco9RnfhOKeg8PAnE3oDDoalnrVU/EVaKHYBWYL1DlRR7+3AWn0JiBqD8yKOfetVxJGdEtZ0tg==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.8.1.tgz", + "integrity": "sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/is-ignored": "^19.6.0", - "@commitlint/parse": "^19.5.0", - "@commitlint/rules": "^19.6.0", - "@commitlint/types": "^19.5.0" + "@commitlint/is-ignored": "^19.8.1", + "@commitlint/parse": "^19.8.1", + "@commitlint/rules": "^19.8.1", + "@commitlint/types": "^19.8.1" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/load": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.5.0.tgz", - "integrity": "sha512-INOUhkL/qaKqwcTUvCE8iIUf5XHsEPCLY9looJ/ipzi7jtGhgmtH7OOFiNvwYgH7mA8osUWOUDV8t4E2HAi4xA==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.8.1.tgz", + "integrity": "sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/config-validator": "^19.5.0", - "@commitlint/execute-rule": "^19.5.0", - "@commitlint/resolve-extends": "^19.5.0", - "@commitlint/types": "^19.5.0", + "@commitlint/config-validator": "^19.8.1", + "@commitlint/execute-rule": "^19.8.1", + "@commitlint/resolve-extends": "^19.8.1", + "@commitlint/types": "^19.8.1", "chalk": "^5.3.0", "cosmiconfig": "^9.0.0", - "cosmiconfig-typescript-loader": "^5.0.0", + "cosmiconfig-typescript-loader": "^6.1.0", "lodash.isplainobject": "^4.0.6", "lodash.merge": "^4.6.2", "lodash.uniq": "^4.5.0" @@ -370,9 +372,9 @@ } }, "node_modules/@commitlint/message": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.5.0.tgz", - "integrity": "sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.8.1.tgz", + "integrity": "sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==", "dev": true, "license": "MIT", "engines": { @@ -380,13 +382,13 @@ } }, "node_modules/@commitlint/parse": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.5.0.tgz", - "integrity": "sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.8.1.tgz", + "integrity": "sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^19.5.0", + "@commitlint/types": "^19.8.1", "conventional-changelog-angular": "^7.0.0", "conventional-commits-parser": "^5.0.0" }, @@ -395,31 +397,31 @@ } }, "node_modules/@commitlint/read": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.5.0.tgz", - "integrity": "sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.8.1.tgz", + "integrity": "sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/top-level": "^19.5.0", - "@commitlint/types": "^19.5.0", + "@commitlint/top-level": "^19.8.1", + "@commitlint/types": "^19.8.1", "git-raw-commits": "^4.0.0", "minimist": "^1.2.8", - "tinyexec": "^0.3.0" + "tinyexec": "^1.0.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/resolve-extends": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.5.0.tgz", - "integrity": "sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.8.1.tgz", + "integrity": "sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/config-validator": "^19.5.0", - "@commitlint/types": "^19.5.0", + "@commitlint/config-validator": "^19.8.1", + "@commitlint/types": "^19.8.1", "global-directory": "^4.0.1", "import-meta-resolve": "^4.0.0", "lodash.mergewith": "^4.6.2", @@ -430,25 +432,25 @@ } }, "node_modules/@commitlint/rules": { - "version": "19.6.0", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.6.0.tgz", - "integrity": "sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.8.1.tgz", + "integrity": "sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/ensure": "^19.5.0", - "@commitlint/message": "^19.5.0", - "@commitlint/to-lines": "^19.5.0", - "@commitlint/types": "^19.5.0" + "@commitlint/ensure": "^19.8.1", + "@commitlint/message": "^19.8.1", + "@commitlint/to-lines": "^19.8.1", + "@commitlint/types": "^19.8.1" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/to-lines": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.5.0.tgz", - "integrity": "sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.8.1.tgz", + "integrity": "sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==", "dev": true, "license": "MIT", "engines": { @@ -456,9 +458,9 @@ } }, "node_modules/@commitlint/top-level": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.5.0.tgz", - "integrity": "sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.8.1.tgz", + "integrity": "sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==", "dev": true, "license": "MIT", "dependencies": { @@ -469,9 +471,9 @@ } }, "node_modules/@commitlint/types": { - "version": "19.5.0", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.5.0.tgz", - "integrity": "sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.8.1.tgz", + "integrity": "sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==", "dev": true, "license": "MIT", "dependencies": { @@ -496,30 +498,30 @@ } }, "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=10.0.0" + "node": ">=14.17.0" } }, "node_modules/@emnapi/core": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.1.tgz", - "integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz", + "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==", "dev": true, "license": "MIT", "dependencies": { - "@emnapi/wasi-threads": "1.0.1", + "@emnapi/wasi-threads": "1.0.2", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", - "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", + "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -527,9 +529,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", - "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz", + "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==", "dev": true, "license": "MIT", "dependencies": { @@ -537,9 +539,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, "license": "MIT", "dependencies": { @@ -579,13 +581,13 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.0.tgz", - "integrity": "sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.4", + "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -617,20 +619,33 @@ "node": "*" } }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", + "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/core": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.0.tgz", - "integrity": "sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", + "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/eslintrc": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", - "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -700,9 +715,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.15.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz", - "integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==", + "version": "9.26.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.26.0.tgz", + "integrity": "sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==", "dev": true, "license": "MIT", "engines": { @@ -710,9 +725,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", - "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -720,12 +735,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz", - "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", + "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", "dev": true, "license": "Apache-2.0", "dependencies": { + "@eslint/core": "^0.13.0", "levn": "^0.4.1" }, "engines": { @@ -791,9 +807,9 @@ } }, "node_modules/@humanwhocodes/retry": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", - "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -917,6 +933,18 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", @@ -938,9 +966,9 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, "license": "MIT", "dependencies": { @@ -1024,9 +1052,9 @@ } }, "node_modules/@lerna/create": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.1.9.tgz", - "integrity": "sha512-DPnl5lPX4v49eVxEbJnAizrpMdMTBz1qykZrAbBul9rfgk531v8oAt+Pm6O/rpAleRombNM7FJb5rYGzBJatOQ==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.2.2.tgz", + "integrity": "sha512-1yn1MvWn2Yz0SFgTTQnef2m1YedF7KwqLLVIOrGkgQrkVHzsveAIk1A1RcRa2yyUh+siKI1YcJ7lUZIEt+qQ3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1035,7 +1063,7 @@ "@npmcli/run-script": "8.1.0", "@nx/devkit": ">=17.1.2 < 21", "@octokit/plugin-enterprise-rest": "6.0.1", - "@octokit/rest": "19.0.11", + "@octokit/rest": "20.1.2", "aproba": "2.0.0", "byte-size": "8.1.1", "chalk": "4.1.0", @@ -1088,7 +1116,6 @@ "slash": "^3.0.0", "ssri": "^10.0.6", "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", "strong-log-transformer": "2.1.0", "tar": "6.2.1", "temp-dir": "1.0.0", @@ -1150,6 +1177,16 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/@lerna/create/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "node_modules/@lerna/create/node_modules/dedent": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", @@ -1166,9 +1203,9 @@ } }, "node_modules/@lerna/create/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", "dev": true, "license": "MIT", "dependencies": { @@ -1180,6 +1217,32 @@ "node": ">=14.14" } }, + "node_modules/@lerna/create/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/create/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@lerna/create/node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", @@ -1200,160 +1263,129 @@ "node": "*" } }, - "node_modules/@lerna/create/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "node_modules/@lerna/create/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, - "license": "ISC" - }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "license": "BSD-3-Clause", - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" + "license": "ISC", + "engines": { + "node": ">=8" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "license": "ISC" - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/@lerna/create/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "license": "MIT", - "dependencies": { - "debug": "4" + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "node": ">= 6.0.0" + "node": ">=10" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@lerna/create/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "whatwg-url": "^5.0.0" }, "engines": { - "node": "*" + "node": "4.x || >=6.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" + "peerDependencies": { + "encoding": "^0.1.0" }, - "engines": { - "node": ">= 6" + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/@mapbox/node-pre-gyp/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==", + "node_modules/@lerna/create/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@lerna/create/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/make-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==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@lerna/create/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "license": "ISC", + "node_modules/@mapbox/node-pre-gyp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.0.tgz", + "integrity": "sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==", + "license": "BSD-3-Clause", "dependencies": { - "abbrev": "1" + "consola": "^3.2.3", + "detect-libc": "^2.0.0", + "https-proxy-agent": "^7.0.5", + "node-fetch": "^2.6.7", + "nopt": "^8.0.0", + "semver": "^7.5.3", + "tar": "^7.4.0" }, "bin": { - "nopt": "bin/nopt.js" + "node-pre-gyp": "bin/node-pre-gyp" }, "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.1.tgz", + "integrity": "sha512-9LfmxKTb1v+vUS1/emSk1f5ePmTLkb9Le9AxOB5T0XM59EUumwcS45z05h7aiZx3GI0Bl7mjb3FMEglYj+acuQ==", + "dev": true, + "license": "MIT", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.3", + "eventsource": "^3.0.2", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.24.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=18" } }, "node_modules/@napi-rs/wasm-runtime": { @@ -1423,6 +1455,35 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/@npmcli/agent/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/@npmcli/arborist": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-7.5.4.tgz", @@ -1473,6 +1534,16 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/@npmcli/arborist/node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@npmcli/arborist/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -1489,9 +1560,25 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "node_modules/@npmcli/arborist/node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", "dev": true, "license": "ISC", @@ -1736,6 +1823,18 @@ "node": "*" } }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@npmcli/move-file/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -1941,6 +2040,73 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/@npmcli/run-script/node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/run-script/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/run-script/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@npmcli/run-script/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@npmcli/run-script/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", @@ -1951,6 +2117,179 @@ "node": ">=16" } }, + "node_modules/@npmcli/run-script/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/run-script/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/@npmcli/run-script/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/run-script/node_modules/node-gyp": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.3.1.tgz", + "integrity": "sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5", + "tar": "^6.2.1", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/run-script/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/run-script/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/@npmcli/run-script/node_modules/which": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", @@ -1968,9 +2307,9 @@ } }, "node_modules/@nx/devkit": { - "version": "20.1.2", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.1.2.tgz", - "integrity": "sha512-MTEWiEST7DhzZ2QmrixLnHfYVDZk7QN9omLL8m+5Etcn/3ZKa1aAo9Amd2MkUM+0MPoTKnxoGdw0fQUpAy21Mg==", + "version": "20.8.1", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.8.1.tgz", + "integrity": "sha512-N3nwIg/7RIZeB76iuVo29q+l9WyTtvuBSgDFM2msiIK6Q928ilzoeNPZ/p7w/TE3Gqs5XVhq9ExMvDAOTxdmXA==", "dev": true, "license": "MIT", "dependencies": { @@ -2014,9 +2353,9 @@ } }, "node_modules/@nx/nx-darwin-arm64": { - "version": "20.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.1.2.tgz", - "integrity": "sha512-PJ91TQhd28kitDBubKUOXMYvrtSDrG+rr8MsIe9cHo1CvU9smcGVBwuHBxniq0DXsyOX/5GL6ngq7hjN2nQ3XQ==", + "version": "20.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.8.1.tgz", + "integrity": "sha512-Gat4Io66cV70Oa1CjrMJPsEx5ICpAGayv9hejOtBUEDb6XjR12L2e4wV+4EHliF0UbEcuZAr8/lTROEPk0RGWQ==", "cpu": [ "arm64" ], @@ -2031,9 +2370,9 @@ } }, "node_modules/@nx/nx-darwin-x64": { - "version": "20.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.1.2.tgz", - "integrity": "sha512-1fopau7nxIhTF26vDTIzMxl15AtW4FvUSdy+r1mNRKrKyjjpqnlu00SQBW7JzGV0agDD1B/61yYei5Q2aMOt7Q==", + "version": "20.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.8.1.tgz", + "integrity": "sha512-TB9mZk7neGFKgBr2wSBgY6c4kFF9vvChNSp3TrEeXR3FppFcYG5eK4AaKfzWCpYb0wMtseAm7NMX1Lu74utClQ==", "cpu": [ "x64" ], @@ -2048,9 +2387,9 @@ } }, "node_modules/@nx/nx-freebsd-x64": { - "version": "20.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.1.2.tgz", - "integrity": "sha512-55YgIp3v4zz7xMzJO93dtglbOTER2XdS6jrCt8GbKaWGFl5drRrBoNGONtiGNU7C3hLx1VsorbynCkJT18PjKQ==", + "version": "20.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.8.1.tgz", + "integrity": "sha512-7UQu0/Afna5Af2GagEQ6rbKfUh75NfUn+g66wsoQoUGBvDW0U7B8P3Ph5Bk4Urub0BSfMVcNg2X7CgfypLFN/g==", "cpu": [ "x64" ], @@ -2065,9 +2404,9 @@ } }, "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "20.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.1.2.tgz", - "integrity": "sha512-sMhNA8uAV43UYVEXEa8TZ8Fjpom4CGq1umTptEGOF4TTtdNn2AUBreg+0bVODM8MMSzRWGI1VbkZzHESnAPwqw==", + "version": "20.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.8.1.tgz", + "integrity": "sha512-Tjh8JkTP+x1jSrzx+ofx1pKpkhIbXd7bi0bPdpYt6NI1lZz2HB/dv8vtdzP80jXEDztHf0AeGnEJVgJKsgI6yg==", "cpu": [ "arm" ], @@ -2082,9 +2421,9 @@ } }, "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "20.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.1.2.tgz", - "integrity": "sha512-bsevarNHglaYLmIvPNQOdHrBnBgaW3EOUM0flwaXdWuZbL1bWx8GoVwHp9yJpZOAOfIF/Nhq5iTpaZB2nYFrAA==", + "version": "20.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.8.1.tgz", + "integrity": "sha512-2+qPIwav2vrytH6pe7fukBe8+yN5JGbEDCnDO8wKQsHeeZMLAQJiZ7EJH/+vynRkI7oWf87mihIKNQME19+w6A==", "cpu": [ "arm64" ], @@ -2099,9 +2438,9 @@ } }, "node_modules/@nx/nx-linux-arm64-musl": { - "version": "20.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.1.2.tgz", - "integrity": "sha512-GFZTptkhZPL/iZ3tYDmspIcPEaXyy/L/o59gyp33GoFAAyDhiXIF7J1Lz81Xn8VKrX6TvEY8/9qSh86pb7qzDQ==", + "version": "20.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.8.1.tgz", + "integrity": "sha512-DsKc+DiMsuHqpBWchUUUg6zv4OaexRqpFXys6auZlrpFpn80kSqLQ3S4zZ5AUu+26wxZqEVJs+uxHGwFbhEssQ==", "cpu": [ "arm64" ], @@ -2116,9 +2455,9 @@ } }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "20.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.1.2.tgz", - "integrity": "sha512-yqEW/iglKT4d9lgfnwSNhmDzPxCkRhtdmZqOYpGDM0eZFwYwJF+WRGjW8xIqMj8PA1yrGItzXZOmyFjJqHAF2w==", + "version": "20.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.8.1.tgz", + "integrity": "sha512-Kzru44beVKAmSG84ShuMIIfyu2Uu5r8gsHdtiQPBIOGkZa0Z/e6YtUxcN3w1UZ7yvvzoQ4pQLvqU6UZRSWZtEg==", "cpu": [ "x64" ], @@ -2133,9 +2472,9 @@ } }, "node_modules/@nx/nx-linux-x64-musl": { - "version": "20.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.1.2.tgz", - "integrity": "sha512-SP6PpWT4cQVrC4WJQdpfADrYJQzkbhgmcGleWbpr7II1HJgOsAcvoDwQGpPQX+3Wo+VBiNecvUAOzacMQkXPGw==", + "version": "20.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.8.1.tgz", + "integrity": "sha512-cSVVb7DVMhrxCaj/n55okBZS6lZoP5a5vynOBGIV4z3/OJLev+xI9A+3imn/aXnBl8iS69HogYyrW0YTXv4Xaw==", "cpu": [ "x64" ], @@ -2150,9 +2489,9 @@ } }, "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "20.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.1.2.tgz", - "integrity": "sha512-JZQx9gr39LY3D7uleiXlpxUsavuOrOQNBocwKHkAMnykaT/e1VCxTnm/hk+2b4foWwfURTqoRiFEba70iiCdYg==", + "version": "20.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.8.1.tgz", + "integrity": "sha512-gte5HcvI24CN6b9I6IYTXh/A0CtRfnlAFaJomPpfT8Wcq637aOZzS0arAEZVoU8QZty1350hj6sfu+wSIjoP7A==", "cpu": [ "arm64" ], @@ -2167,9 +2506,9 @@ } }, "node_modules/@nx/nx-win32-x64-msvc": { - "version": "20.1.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.1.2.tgz", - "integrity": "sha512-6GmT8iswDiCvJaCtW9DpWeAQmLS/kfAuRLYBisfzlONuLPaDdjhgVIxZBqqUSFfclwcVz+NhIOGvdr0aGFZCtQ==", + "version": "20.8.1", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.8.1.tgz", + "integrity": "sha512-6c2fVEPdPwJdnRbckBatRDF/g6JAp6p3Mfl90DpuaEF2DZC5pmCXKOsXE0aSIZ+gODom2JIchM++2KmDZPJUoA==", "cpu": [ "x64" ], @@ -2184,68 +2523,67 @@ } }, "node_modules/@octokit/auth-token": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", - "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@octokit/core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", - "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.1.tgz", + "integrity": "sha512-dKYCMuPO1bmrpuogcjQ8z7ICCH3FP6WmxpwC03yjzGfZhj9fTJg6+bS1+UAplekbN2C+M61UNllGOOoAfGCrdQ==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.1.0", + "@octokit/request": "^8.4.1", + "@octokit/request-error": "^5.1.1", + "@octokit/types": "^13.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz", + "integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@octokit/graphql": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", - "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz", + "integrity": "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", + "@octokit/request": "^8.4.1", + "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@octokit/openapi-types": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", - "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==", + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", "dev": true, "license": "MIT" }, @@ -2257,122 +2595,105 @@ "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", - "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", + "version": "11.4.4-cjs.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.4-cjs.2.tgz", + "integrity": "sha512-2dK6z8fhs8lla5PaOTgqfCGBxgAv/le+EhPs27KklPhm1bKObpu6lXzwfUEQ16ajXzqNrKMujsFyo9K2eaoISw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/tsconfig": "^1.0.2", - "@octokit/types": "^9.2.3" + "@octokit/types": "^13.7.0" }, "engines": { - "node": ">= 14" + "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=4" + "@octokit/core": "5" } }, "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", + "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 18" + }, "peerDependencies": { - "@octokit/core": ">=3" + "@octokit/core": "5" } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz", - "integrity": "sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==", + "version": "13.3.2-cjs.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.2-cjs.1.tgz", + "integrity": "sha512-VUjIjOOvF2oELQmiFpWA1aOPdawpyaCUqcEBc/UOUnj3Xp6DJGrJ1+bjUIIDzdHjnFNO6q57ODMfdEZnoBkCwQ==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^10.0.0" + "@octokit/types": "^13.8.0" }, "engines": { - "node": ">= 14" + "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz", - "integrity": "sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" + "@octokit/core": "^5" } }, "node_modules/@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz", + "integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", + "@octokit/endpoint": "^9.0.6", + "@octokit/request-error": "^5.1.1", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz", + "integrity": "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^9.0.0", + "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", "once": "^1.4.0" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@octokit/rest": { - "version": "19.0.11", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz", - "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==", + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.2.tgz", + "integrity": "sha512-GmYiltypkHHtihFwPRxlaorG5R9VAHuk/vbszVoRTGXnAsY60wYLkh/E2XiFmdZmqrisw+9FaazS1i5SbdWYgA==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/core": "^4.2.1", - "@octokit/plugin-paginate-rest": "^6.1.2", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^7.1.2" + "@octokit/core": "^5.0.2", + "@octokit/plugin-paginate-rest": "11.4.4-cjs.2", + "@octokit/plugin-request-log": "^4.0.0", + "@octokit/plugin-rest-endpoint-methods": "13.3.2-cjs.1" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, - "node_modules/@octokit/tsconfig": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", - "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", - "dev": true, - "license": "MIT" - }, "node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/openapi-types": "^18.0.0" + "@octokit/openapi-types": "^24.2.0" } }, "node_modules/@pkgjs/parseargs": { @@ -2387,22 +2708,22 @@ } }, "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.4.tgz", + "integrity": "sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==", "dev": true, "license": "MIT", "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://opencollective.com/pkgr" } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.0.tgz", - "integrity": "sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==", + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz", + "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==", "dev": true, "license": "MIT", "dependencies": { @@ -2425,9 +2746,9 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.3.tgz", - "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2461,9 +2782,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.3.tgz", - "integrity": "sha512-EzxVSkIvCFxUd4Mgm4xR9YXrcp976qVaHnqom/Tgm+vU79k4vV4eYTjmRvGfeoW8m9LVcsAy/lGjcgVegKEhLQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz", + "integrity": "sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==", "cpu": [ "arm" ], @@ -2475,9 +2796,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.3.tgz", - "integrity": "sha512-LJc5pDf1wjlt9o/Giaw9Ofl+k/vLUaYsE2zeQGH85giX2F+wn/Cg8b3c5CDP3qmVmeO5NzwVUzQQxwZvC2eQKw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.2.tgz", + "integrity": "sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==", "cpu": [ "arm64" ], @@ -2489,9 +2810,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.3.tgz", - "integrity": "sha512-OuRysZ1Mt7wpWJ+aYKblVbJWtVn3Cy52h8nLuNSzTqSesYw1EuN6wKp5NW/4eSre3mp12gqFRXOKTcN3AI3LqA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.2.tgz", + "integrity": "sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==", "cpu": [ "arm64" ], @@ -2503,9 +2824,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.3.tgz", - "integrity": "sha512-xW//zjJMlJs2sOrCmXdB4d0uiilZsOdlGQIC/jjmMWT47lkLLoB1nsNhPUcnoqyi5YR6I4h+FjBpILxbEy8JRg==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.2.tgz", + "integrity": "sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==", "cpu": [ "x64" ], @@ -2517,9 +2838,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.3.tgz", - "integrity": "sha512-58E0tIcwZ+12nK1WiLzHOD8I0d0kdrY/+o7yFVPRHuVGY3twBwzwDdTIBGRxLmyjciMYl1B/U515GJy+yn46qw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.2.tgz", + "integrity": "sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==", "cpu": [ "arm64" ], @@ -2531,9 +2852,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.3.tgz", - "integrity": "sha512-78fohrpcVwTLxg1ZzBMlwEimoAJmY6B+5TsyAZ3Vok7YabRBUvjYTsRXPTjGEvv/mfgVBepbW28OlMEz4w8wGA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.2.tgz", + "integrity": "sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==", "cpu": [ "x64" ], @@ -2545,9 +2866,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.3.tgz", - "integrity": "sha512-h2Ay79YFXyQi+QZKo3ISZDyKaVD7uUvukEHTOft7kh00WF9mxAaxZsNs3o/eukbeKuH35jBvQqrT61fzKfAB/Q==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.2.tgz", + "integrity": "sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==", "cpu": [ "arm" ], @@ -2559,9 +2880,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.3.tgz", - "integrity": "sha512-Sv2GWmrJfRY57urktVLQ0VKZjNZGogVtASAgosDZ1aUB+ykPxSi3X1nWORL5Jk0sTIIwQiPH7iE3BMi9zGWfkg==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.2.tgz", + "integrity": "sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==", "cpu": [ "arm" ], @@ -2573,9 +2894,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.3.tgz", - "integrity": "sha512-FPoJBLsPW2bDNWjSrwNuTPUt30VnfM8GPGRoLCYKZpPx0xiIEdFip3dH6CqgoT0RnoGXptaNziM0WlKgBc+OWQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.2.tgz", + "integrity": "sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==", "cpu": [ "arm64" ], @@ -2587,9 +2908,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.3.tgz", - "integrity": "sha512-TKxiOvBorYq4sUpA0JT+Fkh+l+G9DScnG5Dqx7wiiqVMiRSkzTclP35pE6eQQYjP4Gc8yEkJGea6rz4qyWhp3g==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.2.tgz", + "integrity": "sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==", "cpu": [ "arm64" ], @@ -2600,10 +2921,24 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.2.tgz", + "integrity": "sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.3.tgz", - "integrity": "sha512-v2M/mPvVUKVOKITa0oCFksnQQ/TqGrT+yD0184/cWHIu0LoIuYHwox0Pm3ccXEz8cEQDLk6FPKd1CCm+PlsISw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.2.tgz", + "integrity": "sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==", "cpu": [ "ppc64" ], @@ -2615,9 +2950,23 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.3.tgz", - "integrity": "sha512-LdrI4Yocb1a/tFVkzmOE5WyYRgEBOyEhWYJe4gsDWDiwnjYKjNs7PS6SGlTDB7maOHF4kxevsuNBl2iOcj3b4A==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz", + "integrity": "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz", + "integrity": "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==", "cpu": [ "riscv64" ], @@ -2629,9 +2978,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.3.tgz", - "integrity": "sha512-d4wVu6SXij/jyiwPvI6C4KxdGzuZOvJ6y9VfrcleHTwo68fl8vZC5ZYHsCVPUi4tndCfMlFniWgwonQ5CUpQcA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz", + "integrity": "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==", "cpu": [ "s390x" ], @@ -2657,9 +3006,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.3.tgz", - "integrity": "sha512-nBXOfJds8OzUT1qUreT/en3eyOXd2EH5b0wr2bVB5999qHdGKkzGzIyKYaKj02lXk6wpN71ltLIaQpu58YFBoQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz", + "integrity": "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==", "cpu": [ "x64" ], @@ -2671,9 +3020,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.3.tgz", - "integrity": "sha512-ogfbEVQgIZOz5WPWXF2HVb6En+kWzScuxJo/WdQTqEgeyGkaa2ui5sQav9Zkr7bnNCLK48uxmmK0TySm22eiuw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz", + "integrity": "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==", "cpu": [ "arm64" ], @@ -2685,9 +3034,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.3.tgz", - "integrity": "sha512-ecE36ZBMLINqiTtSNQ1vzWc5pXLQHlf/oqGp/bSbi7iedcjcNb6QbCBNG73Euyy2C+l/fn8qKWEwxr+0SSfs3w==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz", + "integrity": "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==", "cpu": [ "ia32" ], @@ -2699,9 +3048,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.3.tgz", - "integrity": "sha512-vliZLrDmYKyaUoMzEbMTg2JkerfBjn03KmAw9CykO0Zzkzoyd7o3iZNam/TpyWNjNT+Cz2iO3P9Smv2wgrR+Eg==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz", + "integrity": "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==", "cpu": [ "x64" ], @@ -2743,13 +3092,13 @@ } }, "node_modules/@sigstore/protobuf-specs": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", - "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz", + "integrity": "sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@sigstore/sign": { @@ -2770,6 +3119,48 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, "node_modules/@sigstore/tuf": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", @@ -2894,9 +3285,9 @@ } }, "node_modules/@types/conventional-commits-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", + "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2926,9 +3317,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", "dev": true, "license": "MIT" }, @@ -2961,20 +3352,20 @@ "license": "MIT" }, "node_modules/@types/mocha": { - "version": "10.0.9", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.9.tgz", - "integrity": "sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==", + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { - "version": "22.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.1.tgz", - "integrity": "sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==", + "version": "22.15.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.17.tgz", + "integrity": "sha512-wIX2aSZL5FE+MR0JlvF87BNVrtFWf6AE6rxSE9X7OwnVvoyCQjpzSRJ+M87se/4QCkCiebQAqrJ0y6fwIyi7nw==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.19.8" + "undici-types": "~6.21.0" } }, "node_modules/@types/normalize-package-data": { @@ -3153,45 +3544,45 @@ } }, "node_modules/@webpack-cli/configtest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", - "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", + "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", "dev": true, "license": "MIT", "engines": { - "node": ">=14.15.0" + "node": ">=18.12.0" }, "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" } }, "node_modules/@webpack-cli/info": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", - "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", + "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=14.15.0" + "node": ">=18.12.0" }, "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" } }, "node_modules/@webpack-cli/serve": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", - "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", + "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", "dev": true, "license": "MIT", "engines": { - "node": ">=14.15.0" + "node": ">=18.12.0" }, "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" }, "peerDependenciesMeta": { "webpack-dev-server": { @@ -3279,32 +3670,19 @@ } }, "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", - "dev": true, + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/abstract-leveldown": { "version": "0.12.4", "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", "integrity": "sha512-TOod9d5RDExo6STLMGa+04HGkl+TlMfbDnTyN93/ETJ9DpQ0DaYLqcMZlbXvdc4W3vVo1Qrl+WhSp8zvDsJ+jA==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dev": true, "license": "MIT", "dependencies": { @@ -3321,31 +3699,52 @@ } }, "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "mime-db": "^1.54.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, "license": "MIT", "bin": { @@ -3386,22 +3785,18 @@ "license": "MIT" }, "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } }, "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", "license": "MIT", "dependencies": { "humanize-ms": "^1.2.1" @@ -3440,14 +3835,35 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, "peerDependencies": { - "ajv": "^6.9.1" + "ajv": "^8.8.2" } }, "node_modules/ansi-colors": { @@ -3498,20 +3914,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/aproba": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", @@ -3519,9 +3921,9 @@ "license": "ISC" }, "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "deprecated": "This package is no longer supported.", "license": "ISC", "dependencies": { @@ -3529,7 +3931,7 @@ "readable-stream": "^3.6.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/arg": { @@ -3547,14 +3949,14 @@ "license": "Python-2.0" }, "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -3573,12 +3975,6 @@ "node": ">=8" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, "node_modules/array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", @@ -3618,18 +4014,19 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.9", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -3639,16 +4036,16 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3658,16 +4055,16 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3677,20 +4074,19 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -3722,9 +4118,9 @@ } }, "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, "license": "MIT" }, @@ -3746,9 +4142,18 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, "license": "MIT" }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -3783,9 +4188,9 @@ } }, "node_modules/axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", + "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", "dev": true, "license": "MIT", "dependencies": { @@ -3862,19 +4267,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -3888,56 +4280,48 @@ } }, "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", "dev": true, "license": "MIT" }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=18" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "dependencies": { - "ms": "2.0.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "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, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -3963,6 +4347,16 @@ "dev": true, "license": "MIT" }, + "node_modules/browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.17.0" + } + }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -4109,9 +4503,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "version": "4.24.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", + "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", "dev": true, "funding": [ { @@ -4129,10 +4523,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.1" + "caniuse-lite": "^1.0.30001716", + "electron-to-chromium": "^1.5.149", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -4258,8 +4652,18 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/cacache/node_modules/glob": { - "version": "10.4.5", + "node_modules/cacache/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, @@ -4311,6 +4715,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/cacache/node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -4328,6 +4745,60 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/cacache/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cacache/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacache/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/cachedir": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", @@ -4339,16 +4810,45 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -4368,13 +4868,16 @@ } }, "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/camelcase-keys": { @@ -4395,10 +4898,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/caniuse-lite": { - "version": "1.0.30001680", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz", - "integrity": "sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==", + "version": "1.0.30001717", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz", + "integrity": "sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==", "dev": true, "funding": [ { @@ -4417,9 +4930,9 @@ "license": "CC-BY-4.0" }, "node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", "dev": true, "license": "MIT", "engines": { @@ -4437,50 +4950,28 @@ "license": "MIT" }, "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 14.16.0" }, "funding": { "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" } }, "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "license": "ISC", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/chrome-trace-event": { @@ -4510,9 +5001,9 @@ } }, "node_modules/cipher-base": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.5.tgz", - "integrity": "sha512-xq7ICKB4TMHUx7Tz1L9O2SGKOhYMOTR32oir45Bq28/AQTpHogKgHcoYFSdRbMtddl+ozNXfXY9jWcgYKmde0w==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", "dev": true, "license": "MIT", "dependencies": { @@ -4679,19 +5170,6 @@ "node": ">=6" } }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cmd-shim": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.3.tgz", @@ -4778,9 +5256,9 @@ } }, "node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", "dev": true, "license": "MIT", "engines": { @@ -4921,6 +5399,15 @@ "dev": true, "license": "MIT" }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", @@ -4941,9 +5428,9 @@ "license": "MIT" }, "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -5988,19 +6475,22 @@ } }, "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } }, "node_modules/core-util-is": { "version": "1.0.3", @@ -6009,6 +6499,20 @@ "dev": true, "license": "MIT" }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/corser": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", @@ -6046,21 +6550,21 @@ } }, "node_modules/cosmiconfig-typescript-loader": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.1.0.tgz", - "integrity": "sha512-7PtBB+6FdsOvZyJtlF3hEPpACq7RQX6BVGsgC7/lfVXnKMvNCu/XY3ykreqG5w/rBNdu2z8LCIKoF3kpHHdHlA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", + "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", "dev": true, "license": "MIT", "dependencies": { - "jiti": "^1.21.6" + "jiti": "^2.4.1" }, "engines": { - "node": ">=v16" + "node": ">=v18" }, "peerDependencies": { "@types/node": "*", - "cosmiconfig": ">=8.2", - "typescript": ">=4" + "cosmiconfig": ">=9", + "typescript": ">=5" } }, "node_modules/create-ecdh": { @@ -6075,9 +6579,9 @@ } }, "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, "license": "MIT" }, @@ -6338,15 +6842,15 @@ } }, "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -6356,31 +6860,31 @@ } }, "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" }, @@ -6402,9 +6906,9 @@ } }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -6419,13 +6923,16 @@ } }, "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==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/decamelize-keys": { @@ -6445,6 +6952,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/decamelize-keys/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, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", @@ -6496,6 +7013,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", "integrity": "sha512-+WCbb4+ez/SZ77Sdy1iadagFiVzMB89IKOBhglgnUkVxOxRWmmFsz8UDSNWh4Rhq+3wr/vMFlYj+rdEwWUDdng==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dev": true, "license": "MIT", "dependencies": { @@ -6506,6 +7024,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -6596,16 +7115,6 @@ "integrity": "sha512-vgTAOosB1aHrmzjGnzFCbjvXbk8QAOC/36JxJhcBkeAuUy8QwRFxAWBHemiDpUB3cbrBruFUdzpUS21aocvaWg==", "license": "MIT" }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", @@ -6627,9 +7136,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", "license": "Apache-2.0", "engines": { "node": ">=8" @@ -6668,9 +7177,9 @@ } }, "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, "license": "MIT" }, @@ -6708,13 +7217,13 @@ } }, "node_modules/domain-browser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-5.7.0.tgz", - "integrity": "sha512-edTFu0M/7wO1pXY6GDxVNVW086uqwWYIHP98txhcPyV995X21JIH2DtYp33sQJOupYoXKe9RwTw2Ya2vWaquTQ==", + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.22.0.tgz", + "integrity": "sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==", "dev": true, - "license": "Artistic-2.0", + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=10" }, "funding": { "url": "https://bevry.me/fund" @@ -6734,9 +7243,9 @@ } }, "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -6763,1886 +7272,1843 @@ } }, "node_modules/duckdb": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/duckdb/-/duckdb-1.1.3.tgz", - "integrity": "sha512-tIpZr2NsSkYmfGC1ETl75RuVsaDyjvR3yAOrECcIyw7bdluzcyzEXOXoiuT+4t54hT+CppZv43gk/HiZdKW9Vw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/duckdb/-/duckdb-1.2.1.tgz", + "integrity": "sha512-gs3KT2J3SOCghai0Q5nw/joYpOs63/gud+RX1hQmJ+ombUn5BEFn/FUqQKa3HSVZ95+otWDDMGsspLVEr4hJzA==", "hasInstallScript": true, "license": "MIT", "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", + "@mapbox/node-pre-gyp": "^2.0.0", "node-addon-api": "^7.0.0", "node-gyp": "^9.3.0" } }, "node_modules/duckdb-async": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/duckdb-async/-/duckdb-async-1.1.3.tgz", - "integrity": "sha512-8Q8BYTjfzjPFJ3J8bafLGUcdxI2ZXPxpw3u8x+SFr7s3T7JM0Nn26LKis4rA0i4TCBSZ9ilhB8NOJ/9HrPGSlw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/duckdb-async/-/duckdb-async-1.2.1.tgz", + "integrity": "sha512-Q48ki2lxIWRmTYUxycnPIWKEOQemsYQuATFIWDrz8l56ymaLao5hm4iFZCzSQ9t4dpNfQgYR+cVunxH3DT3o4A==", "license": "MIT", "dependencies": { - "duckdb": "1.1.3" + "duckdb": "^1.2.1" } }, - "node_modules/duckdb/node_modules/@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", - "license": "ISC", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 0.4" } }, - "node_modules/duckdb/node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "license": "ISC" + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true, + "license": "MIT" }, - "node_modules/duckdb/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", - "dependencies": { - "debug": "4" - }, + "node_modules/each": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/each/-/each-2.7.2.tgz", + "integrity": "sha512-CXO0d3nbNO2e9vPlT0DF3BGXGIrNDWMmXGkXg1Mprex7ipTuppERBM4I5AILwobDEwxEOmaBlRT8gpH5M7yWAw==", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">= 6.0.0" + "node": ">= 0.9.0" } }, - "node_modules/duckdb/node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "deprecated": "This package is no longer supported.", - "license": "ISC", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=0.10.0" } }, - "node_modules/duckdb/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/electron-to-chromium": { + "version": "1.5.151", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.151.tgz", + "integrity": "sha512-Rl6uugut2l9sLojjS4H4SAr3A4IgACMLgpuEMPYCVcKydzfyPrn5absNRju38IhQOf/NwjJY8OGWjlteqYeBCA==", + "dev": true, + "license": "ISC" + }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/duckdb/node_modules/cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 0.8" } }, - "node_modules/duckdb/node_modules/cacache/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==", + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "license": "MIT", + "optional": true, "dependencies": { - "balanced-match": "^1.0.0" + "iconv-lite": "^0.6.2" } }, - "node_modules/duckdb/node_modules/cacache/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "optional": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.10.0" } }, - "node_modules/duckdb/node_modules/cacache/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "license": "ISC", + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" + "once": "^1.4.0" } }, - "node_modules/duckdb/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "license": "ISC", + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">= 8" + "node": ">=10.13.0" } }, - "node_modules/duckdb/node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "deprecated": "This package is no longer supported.", - "license": "ISC", + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "license": "MIT", "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" + "ansi-colors": "^4.1.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8.6" } }, - "node_modules/duckdb/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=6" } }, - "node_modules/duckdb/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "node_modules/envinfo": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "dev": true, "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "bin": { + "envinfo": "dist/cli.js" }, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/duckdb/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, "engines": { - "node": ">= 6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/duckdb/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "license": "ISC", - "engines": { - "node": ">=12" - } + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "license": "MIT" }, - "node_modules/duckdb/node_modules/make-fetch-happen": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", - "license": "ISC", + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" + "prr": "~1.0.1" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "bin": { + "errno": "cli.js" } }, - "node_modules/duckdb/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "is-arrayish": "^0.2.1" } }, - "node_modules/duckdb/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", + "node_modules/es-abstract": { + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" }, "engines": { - "node": ">=8" - } - }, - "node_modules/duckdb/node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" + "node": ">= 0.4" }, - "engines": { - "node": ">= 8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/duckdb/node_modules/minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" + "node": ">= 0.4" } }, - "node_modules/duckdb/node_modules/node-gyp": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", - "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, "engines": { - "node": "^12.13 || ^14.13 || >=16" + "node": ">= 0.4" } }, - "node_modules/duckdb/node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "license": "ISC", - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" }, - "node_modules/duckdb/node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "deprecated": "This package is no longer supported.", - "license": "ISC", + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" + "es-errors": "^1.3.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/duckdb/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.4" } }, - "node_modules/duckdb/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/duckdb/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { - "node": ">= 10" + "node": ">= 0.4" } }, - "node_modules/duckdb/node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "license": "ISC", + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^3.1.1" + "hasown": "^2.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 0.4" } }, - "node_modules/duckdb/node_modules/unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", - "license": "ISC", + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", "dependencies": { - "unique-slug": "^3.0.0" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/duckdb/node_modules/unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, - "node_modules/each": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/each/-/each-2.7.2.tgz", - "integrity": "sha512-CXO0d3nbNO2e9vPlT0DF3BGXGIrNDWMmXGkXg1Mprex7ipTuppERBM4I5AILwobDEwxEOmaBlRT8gpH5M7yWAw==", + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": ">= 0.9.0" + "node": ">=0.8.0" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "node_modules/eslint": { + "version": "9.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.26.0.tgz", + "integrity": "sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==", "dev": true, - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "jake": "^10.8.5" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.13.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.26.0", + "@eslint/plugin-kit": "^0.2.8", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@modelcontextprotocol/sdk": "^1.8.0", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "zod": "^3.24.2" }, "bin": { - "ejs": "bin/cli.js" + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=0.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/electron-to-chromium": { - "version": "1.5.63", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.63.tgz", - "integrity": "sha512-ddeXKuY9BHo/mw145axlyWjlJ1UBt4WK3AlvkT7W2AbqfRQoacVoRUCF6wL3uIx/8wT9oLKXzI+rFqHHscByaA==", - "dev": true, - "license": "ISC" - }, - "node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, "license": "MIT", "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" } }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "node_modules/eslint-config-airbnb-base/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, - "license": "MIT" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" + "node_modules/eslint-config-prettier": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz", + "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "iconv-lite": "^0.6.2" + "ms": "^2.1.1" } }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "debug": "^3.2.7" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { - "once": "^1.4.0" + "ms": "^2.1.1" } }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/envinfo": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", - "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "node_modules/eslint-plugin-import/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "license": "MIT", - "bin": { - "envinfo": "dist/cli.js" + "dependencies": { + "minimist": "^1.2.0" }, - "engines": { - "node": ">=4" + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "node_modules/eslint-plugin-import/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", - "engines": { - "node": ">=18" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "*" } }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "license": "MIT" + "node_modules/eslint-plugin-import/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, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "node_modules/eslint-plugin-import/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" + "engines": { + "node": ">=4" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "license": "MIT", "dependencies": { - "is-arrayish": "^0.2.1" + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "node_modules/es-abstract": { - "version": "1.23.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", - "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", + "node_modules/eslint-plugin-mocha": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-11.0.0.tgz", + "integrity": "sha512-P8zdSu9+avzLozms0kBlWNxqfqABlowidjugdT3AYpvmaKRQjULaM8CXisUiKa5jY5rJYQdd4coehjJ+ICprnw==", "dev": true, "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.3", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, + "@eslint-community/eslint-utils": "^4.4.1", + "globals": "^15.14.0" + } + }, + "node_modules/eslint-plugin-mocha/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "node_modules/eslint-plugin-prettier": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.0.tgz", + "integrity": "sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==", + "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.11.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", + "node_modules/eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">= 0.4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint": { - "version": "9.15.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.15.0.tgz", - "integrity": "sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==", + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.19.0", - "@eslint/core": "^0.9.0", - "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "9.15.0", - "@eslint/plugin-kit": "^0.2.3", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.1", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.5", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.2.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" + "p-locate": "^5.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=10" }, "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-config-airbnb-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "node_modules/eslint/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", + "license": "ISC", "dependencies": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.2" - } - }, - "node_modules/eslint-config-airbnb-base/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, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node": "*" } }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" + "dependencies": { + "yocto-queue": "^0.1.0" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": ">=8" } }, - "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^3.2.7" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "node": ">=8" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/eslint/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", - "tsconfig-paths": "^3.15.0" + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": ">=4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "ms": "^2.1.1" + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/eslint-plugin-import/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "minimist": "^1.2.0" + "estraverse": "^5.2.0" }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">=4.0" } }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "BSD-2-Clause", "engines": { - "node": "*" + "node": ">=4.0" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } + "license": "MIT" }, - "node_modules/eslint-plugin-import/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } + "license": "MIT" }, - "node_modules/eslint-plugin-mocha": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.5.0.tgz", - "integrity": "sha512-F2ALmQVPT1GoP27O1JTZGrV9Pqg8k79OeIuvw63UxMtQKREZtmkK1NFgkZQ2TW7L2JSSFKHFPTtHu5z8R9QNRw==", + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "license": "MIT", - "dependencies": { - "eslint-utils": "^3.0.0", - "globals": "^13.24.0", - "rambda": "^7.4.0" - }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "eslint": ">=7.0.0" + "node": ">=0.8.x" } }, - "node_modules/eslint-plugin-mocha/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/eventsource": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.6.tgz", + "integrity": "sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" + "eventsource-parser": "^3.0.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18.0.0" } }, - "node_modules/eslint-plugin-mocha/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/eventsource-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.1.tgz", + "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18.0.0" } }, - "node_modules/eslint-plugin-prettier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "node_modules/eslint-scope": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", - "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "node_modules/execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "homedir-polyfill": "^1.0.1" }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "license": "Apache-2.0", "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } + "node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "license": "Apache-2.0" }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/express-rate-limit": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", + "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 16" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": "^4.11 || 5 || ^5.0.0-beta.1" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "node_modules/express/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">= 0.6" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/express/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "mime-db": "^1.54.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "license": "MIT" }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.6.0" } }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "is-glob": "^4.0.1" }, "engines": { - "node": "*" + "node": ">= 6" } }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 4.9.1" } }, - "node_modules/eslint/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" } }, - "node_modules/eslint/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "acorn": "^8.14.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=16.0.0" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=0.10" + "node": ">=8" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "license": "MIT", "dependencies": { - "estraverse": "^5.2.0" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { - "node": ">=4.0" + "node": ">= 0.8" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/find-node-modules": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", + "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" + "license": "MIT", + "dependencies": { + "findup-sync": "^4.0.0", + "merge": "^2.1.1" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", "dev": true, "license": "MIT" }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/find-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", + "dependencies": { + "locate-path": "^7.2.0", + "path-exists": "^5.0.0", + "unicorn-magic": "^0.1.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "node_modules/findup-sync": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", "dev": true, "license": "MIT", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^4.0.2", + "resolve-dir": "^1.0.1" + }, "engines": { - "node": ">=6" + "node": ">= 8" } }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "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, - "license": "MIT" + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, "engines": { - "node": ">=0.8.x" + "node": ">=16" } }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, - "license": "MIT", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } + "license": "ISC" }, - "node_modules/execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "is-callable": "^1.2.7" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "node_modules/foreach": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", + "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", "dev": true, "license": "MIT", "dependencies": { - "homedir-polyfill": "^1.0.1" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "license": "Apache-2.0" + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", "engines": { - "node": ">= 0.10.0" + "node": ">= 0.8" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/front-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", + "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "js-yaml": "^3.13.1" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "node_modules/front-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "node_modules/front-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "license": "MIT", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=4" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "node_modules/front-matter/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, - "license": "MIT" + "license": "BSD-3-Clause" }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true, - "license": "Apache-2.0" + "license": "MIT" }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8.6.0" + "node": ">=10" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 6" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", - "dev": true, - "license": "BSD-3-Clause" + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, + "hasInstallScript": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 4.9.1" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { - "escape-string-regexp": "^1.0.5" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/filelist": { + "node_modules/fwd-stream": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", + "integrity": "sha512-q2qaK2B38W07wfPSQDKMiKOD5Nzv2XyuvQlrmh1q0pxyHNanKHq8lwQ6n9zHucAwA5EbzRJKEgds2orn88rYTg==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "minimatch": "^5.0.1" + "readable-stream": "~1.0.26-4" } }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/fwd-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } + "license": "MIT" }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/fwd-stream/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "license": "MIT", + "node_modules/fwd-stream/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "node_modules/gauge/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" }, - "node_modules/find-node-modules": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", - "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "license": "MIT", - "dependencies": { - "findup-sync": "^4.0.0", - "merge": "^2.1.1" + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true, - "license": "MIT" - }, - "node_modules/find-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", - "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^7.2.0", - "path-exists": "^5.0.0", - "unicorn-magic": "^0.1.0" - }, "engines": { "node": ">=18" }, @@ -8650,486 +9116,456 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/findup-sync": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", - "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", - "dev": true, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^4.0.2", - "resolve-dir": "^1.0.1" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { - "node": ">= 8" - } - }, - "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, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "node_modules/get-pkg-repo": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "get-pkg-repo": "src/cli.js" }, "engines": { - "node": ">=16" + "node": ">=6.9.0" } }, - "node_modules/flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "node_modules/get-pkg-repo/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "node_modules/get-pkg-repo/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "is-callable": "^1.1.3" + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/foreach": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", - "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==", - "dev": true, - "license": "MIT" - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "node_modules/get-pkg-repo/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=10" } }, - "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "node_modules/get-pkg-repo/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, "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "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": ">= 6" + "node": ">=10" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", + "node_modules/get-pkg-repo/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", "engines": { - "node": ">= 0.6" + "node": ">=10" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/front-matter": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", - "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", - "dev": true, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { - "js-yaml": "^3.13.1" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/front-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", "dev": true, "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/front-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/front-matter/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true, - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/git-raw-commits": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", + "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", "dev": true, "license": "MIT", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "dargs": "^8.0.0", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.mjs" }, "engines": { - "node": ">=10" + "node": ">=16" } }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minipass": "^7.0.3" + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "node_modules/git-semver-tags": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz", + "integrity": "sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "meow": "^8.1.2", + "semver": "^7.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "git-semver-tags": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=14" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/git-semver-tags/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, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/fwd-stream": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", - "integrity": "sha512-q2qaK2B38W07wfPSQDKMiKOD5Nzv2XyuvQlrmh1q0pxyHNanKHq8lwQ6n9zHucAwA5EbzRJKEgds2orn88rYTg==", + "node_modules/git-semver-tags/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { - "readable-stream": "~1.0.26-4" + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/fwd-stream/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/fwd-stream/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "node_modules/git-semver-tags/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, "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/fwd-stream/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "node_modules/git-semver-tags/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT" - }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "deprecated": "This package is no longer supported.", "license": "ISC", "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" + "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/gauge/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/git-semver-tags/node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-east-asian-width": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", - "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "node_modules/git-semver-tags/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "node_modules/git-semver-tags/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, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-pkg-repo": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", - "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", + "node_modules/git-semver-tags/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, "license": "MIT", "dependencies": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "through2": "^2.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "get-pkg-repo": "src/cli.js" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/get-pkg-repo/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/git-semver-tags/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/get-pkg-repo/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/git-semver-tags/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/get-pkg-repo/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/git-semver-tags/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-pkg-repo/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "node_modules/git-semver-tags/node_modules/read-pkg-up/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, - "license": "MIT", - "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" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/get-pkg-repo/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", - "engines": { - "node": ">=10" + "bin": { + "semver": "bin/semver" } }, - "node_modules/get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "license": "MIT", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "node_modules/git-semver-tags/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, - "license": "MIT", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -9137,1036 +9573,1164 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "node_modules/git-semver-tags/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, + "license": "ISC", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/git-raw-commits": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", - "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", + "node_modules/git-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", + "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", "dev": true, "license": "MIT", "dependencies": { - "dargs": "^8.0.0", - "meow": "^12.0.1", - "split2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.mjs" - }, - "engines": { - "node": ">=16" + "is-ssh": "^1.4.0", + "parse-url": "^8.1.0" } }, - "node_modules/git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", + "node_modules/git-url-parse": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-14.0.0.tgz", + "integrity": "sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==", "dev": true, "license": "MIT", "dependencies": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - }, - "engines": { - "node": ">=4" + "git-up": "^7.0.0" } }, - "node_modules/git-remote-origin-url/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "license": "BSD", + "dependencies": { + "ini": "^1.3.2" } }, - "node_modules/git-semver-tags": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz", - "integrity": "sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==", + "node_modules/gitconfiglocal/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/glob": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz", + "integrity": "sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==", + "dev": true, + "license": "ISC", "dependencies": { - "meow": "^8.1.2", - "semver": "^7.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" }, "bin": { - "git-semver-tags": "cli.js" + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=14" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/git-semver-tags/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==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=8" + "node": ">=10.13.0" } }, - "node_modules/git-semver-tags/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true, - "license": "ISC", + "license": "BSD-2-Clause" + }, + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "ini": "4.1.1" }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-semver-tags/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==", + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/git-semver-tags/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/git-semver-tags/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "node_modules/global-prefix/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "isexe": "^2.0.0" }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-semver-tags/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/git-semver-tags/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==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-semver-tags/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==", + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" }, "engines": { - "node": ">=8" + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/git-semver-tags/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/git-semver-tags/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/git-semver-tags/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" + "es-define-property": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/git-semver-tags/node_modules/read-pkg-up/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, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "license": "ISC" - }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/git-semver-tags/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/git-semver-tags/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC" + }, + "node_modules/hash-base": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, "engines": { - "node": ">=10" + "node": ">= 0.10" } }, - "node_modules/git-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", - "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "license": "MIT", "dependencies": { - "is-ssh": "^1.4.0", - "parse-url": "^8.1.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/git-url-parse": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-14.0.0.tgz", - "integrity": "sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==", - "dev": true, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { - "git-up": "^7.0.0" + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", + "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==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, - "license": "BSD", + "license": "MIT", "dependencies": { - "ini": "^1.3.2" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/gitconfiglocal/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/glob": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", - "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, "license": "ISC", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "lru-cache": "^10.0.1" }, "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "whatwg-encoding": "^2.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=12" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "license": "BSD-2-Clause" }, - "node_modules/global-directory": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", - "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", - "dev": true, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "license": "MIT", "dependencies": { - "ini": "4.1.1" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8" } }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "license": "MIT", "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dev": true, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "license": "MIT", "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/global-prefix/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" + "debug": "4" }, - "bin": { - "which": "bin/which" + "engines": { + "node": ">= 6.0.0" } }, - "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, + "node_modules/http-proxy/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/http-server": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", + "corser": "^2.0.1", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", + "minimist": "^1.2.6", + "opener": "^1.5.1", + "portfinder": "^1.0.28", + "secure-compare": "3.0.1", + "union": "~0.5.0", + "url-join": "^4.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "http-server": "bin/http-server" + }, + "engines": { + "node": ">=12" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, + "node_modules/http-server/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, + "node_modules/http-server/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/http-server/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3" + "has-flag": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", "dev": true, + "license": "MIT" + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "license": "MIT", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" + "agent-base": "^7.1.2", + "debug": "4" }, "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "node": ">= 14" } }, - "node_modules/hard-rejection": { + "node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">=6" + "node": ">=10.17.0" } }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "ms": "^2.0.0" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", + "dev": true, "license": "MIT", + "bin": { + "husky": "bin.js" + }, "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/typicode" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/idb-wrapper": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", + "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 4" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/ignore-walk": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", + "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "has-symbols": "^1.0.3" + "minimatch": "^9.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "license": "ISC" + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "engines": { + "node": ">=4" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">= 0.4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "dev": true, "license": "MIT", - "bin": { - "he": "bin/he" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "license": "MIT", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "engines": { + "node": ">=0.8.19" } }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==", + "dev": true + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "license": "ISC" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", "dependencies": { - "parse-passwd": "^1.0.0" - }, + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "node_modules/init-package-json": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-6.0.3.tgz", + "integrity": "sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w==", "dev": true, "license": "ISC", "dependencies": { - "lru-cache": "^10.0.1" + "@npmcli/package-json": "^5.0.0", + "npm-package-arg": "^11.0.0", + "promzard": "^1.0.0", + "read": "^3.0.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^5.0.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "node_modules/inquirer": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "dev": true, "license": "MIT", "dependencies": { - "whatwg-encoding": "^2.0.0" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=12" + "node": ">=12.0.0" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "license": "BSD-2-Clause" + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { - "node": ">= 14" + "node": ">= 0.4" } }, - "node_modules/http-proxy/node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "license": "MIT" + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } }, - "node_modules/http-server": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", - "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "license": "MIT", "dependencies": { - "basic-auth": "^2.0.1", - "chalk": "^4.1.2", - "corser": "^2.0.1", - "he": "^1.2.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy": "^1.18.1", - "mime": "^1.6.0", - "minimist": "^1.2.6", - "opener": "^1.5.1", - "portfinder": "^1.0.28", - "secure-compare": "3.0.1", - "union": "~0.5.0", - "url-join": "^4.0.1" - }, - "bin": { - "http-server": "bin/http-server" + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" }, "engines": { - "node": ">=12" + "node": ">= 12" } }, - "node_modules/http-server/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", + "integrity": "sha512-ajQCouIvkcSnl2iRdK70Jug9mohIHVX9uKpoWnl115ov0R5mzBvRrXxrnHbsA+8AdwCwc/sfw7HXmd4I5EJBdQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-server/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true, "license": "MIT" }, - "node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">= 14" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "license": "MIT", "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/husky": { - "version": "9.1.7", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", - "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", - "dev": true, - "license": "MIT", - "bin": { - "husky": "bin.js" + "has-bigints": "^1.0.2" }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/typicode" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/idb-wrapper": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", - "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==", - "dev": true, - "license": "MIT" - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "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" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ignore-walk": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", - "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minimatch": "^9.0.0" + "ci-info": "^3.2.0" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "bin": { + "is-ci": "bin.js" } }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, "bin": { - "import-local-fixture": "fixtures/cli.js" + "is-docker": "cli.js" }, "engines": { "node": ">=8" @@ -10175,235 +10739,213 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-meta-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", - "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "license": "MIT", "engines": { - "node": ">=0.8.19" + "node": ">=0.10.0" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==", - "dev": true - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "license": "ISC" - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "license": "ISC", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/init-package-json": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-6.0.3.tgz", - "integrity": "sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w==", + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/package-json": "^5.0.0", - "npm-package-arg": "^11.0.0", - "promzard": "^1.0.0", - "read": "^3.0.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^5.0.0" + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/inquirer": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", - "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=0.10.0" } }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "license": "MIT" + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { - "node": ">=10.13.0" + "node": ">=0.12.0" } }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, "license": "MIT", "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">= 12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/is": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", - "integrity": "sha512-ajQCouIvkcSnl2iRdK70Jug9mohIHVX9uKpoWnl115ov0R5mzBvRrXxrnHbsA+8AdwCwc/sfw7HXmd4I5EJBdQ==", + "node_modules/is-object": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", + "integrity": "sha512-GkfZZlIZtpkFrqyAXPQSRBMsaHAw+CgoKe2HXAkjd/sfoI9+hS8PT4wg2rJxdQyUKr7N2vHJbg7/jQtE5l5vBQ==", + "dev": true + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, + "license": "MIT", "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "isobject": "^3.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -10412,48 +10954,27 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -10462,40 +10983,35 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/is-ssh": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz", + "integrity": "sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "protocols": "^2.0.1" } }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true, "license": "MIT", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" + "engines": { + "node": ">=8" } }, - "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -10504,14 +11020,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { - "is-typed-array": "^1.1.13" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -10520,70 +11038,61 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "node_modules/is-text-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "text-extensions": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", - "bin": { - "is-docker": "cli.js" + "dependencies": { + "which-typed-array": "^1.1.16" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, "engines": { "node": ">= 0.4" }, @@ -10591,51 +11100,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "license": "MIT" - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -10644,12 +11116,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, "engines": { "node": ">= 0.4" }, @@ -10657,295 +11133,96 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "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, "license": "MIT", "engines": { - "node": ">=0.12.0" + "node": ">=0.10.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "is-docker": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/is-object": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", - "integrity": "sha512-GkfZZlIZtpkFrqyAXPQSRBMsaHAw+CgoKe2HXAkjd/sfoI9+hS8PT4wg2rJxdQyUKr7N2vHJbg7/jQtE5l5vBQ==", - "dev": true + "node_modules/isbuffer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", + "integrity": "sha512-xU+NoHp+YtKQkaM2HsQchYn0sltxMxew0HavMfHbjnucBoTSGbw745tL+Z7QBANleWM1eEQMenEpi174mIeS4g==", + "dev": true, + "license": "MIT" }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/isomorphic-timers-promises": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz", + "integrity": "sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/jackspeak": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz", + "integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">= 0.4" + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ssh": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", - "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "protocols": "^2.0.1" - } - }, - "node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-text-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", - "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "text-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "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, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/isbuffer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", - "integrity": "sha512-xU+NoHp+YtKQkaM2HsQchYn0sltxMxew0HavMfHbjnucBoTSGbw745tL+Z7QBANleWM1eEQMenEpi174mIeS4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jackspeak": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz", - "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" }, "bin": { "jake": "bin/cli.js" @@ -11011,6 +11288,19 @@ "node": "*" } }, + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-diff": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", @@ -11060,6 +11350,19 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-get-type": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", @@ -11085,30 +11388,14 @@ "node": ">= 10.13.0" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", "dev": true, "license": "MIT", "bin": { - "jiti": "bin/jiti.js" + "jiti": "lib/jiti-cli.mjs" } }, "node_modules/js-tokens": { @@ -11287,19 +11574,19 @@ } }, "node_modules/lerna": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-8.1.9.tgz", - "integrity": "sha512-ZRFlRUBB2obm+GkbTR7EbgTMuAdni6iwtTQTMy7LIrQ4UInG44LyfRepljtgUxh4HA0ltzsvWfPkd5J1DKGCeQ==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-8.2.2.tgz", + "integrity": "sha512-GkqBELTG4k7rfzAwRok2pKBvhNo046Hfwcj7TuhDah3q58/BBBAqvIFLfqEI5fglnNOs6maMSn6/MWjccQE55A==", "dev": true, "license": "MIT", "dependencies": { - "@lerna/create": "8.1.9", + "@lerna/create": "8.2.2", "@npmcli/arborist": "7.5.4", "@npmcli/package-json": "5.2.0", "@npmcli/run-script": "8.1.0", "@nx/devkit": ">=17.1.2 < 21", "@octokit/plugin-enterprise-rest": "6.0.1", - "@octokit/rest": "19.0.11", + "@octokit/rest": "20.1.2", "aproba": "2.0.0", "byte-size": "8.1.1", "chalk": "4.1.0", @@ -11360,7 +11647,6 @@ "slash": "3.0.0", "ssri": "^10.0.6", "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", "strong-log-transformer": "2.1.0", "tar": "6.2.1", "temp-dir": "1.0.0", @@ -11379,719 +11665,1234 @@ "lerna": "dist/cli.js" }, "engines": { - "node": ">=18.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/lerna/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/lerna/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/lerna/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lerna/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/lerna/node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/lerna/node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/lerna/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/lerna/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/lerna/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/lerna/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lerna/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/lerna/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/lerna/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/level-blobs": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz", + "integrity": "sha512-n0iYYCGozLd36m/Pzm206+brIgXP8mxPZazZ6ZvgKr+8YwOZ8/PPpYC5zMUu2qFygRN8RO6WC/HH3XWMW7RMVg==", + "dev": true, + "dependencies": { + "level-peek": "1.0.6", + "once": "^1.3.0", + "readable-stream": "^1.0.26-4" + } + }, + "node_modules/level-blobs/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/level-blobs/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/level-blobs/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/level-filesystem": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz", + "integrity": "sha512-PhXDuCNYpngpxp3jwMT9AYBMgOvB6zxj3DeuIywNKmZqFj2djj9XfT2XDVslfqmo0Ip79cAd3SBy3FsfOZPJ1g==", + "dev": true, + "dependencies": { + "concat-stream": "^1.4.4", + "errno": "^0.1.1", + "fwd-stream": "^1.0.4", + "level-blobs": "^0.1.7", + "level-peek": "^1.0.6", + "level-sublevel": "^5.2.0", + "octal": "^1.0.0", + "once": "^1.3.0", + "xtend": "^2.2.0" + } + }, + "node_modules/level-filesystem/node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/level-filesystem/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/level-filesystem/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/level-filesystem/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/level-filesystem/node_modules/xtend": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/level-fix-range": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", + "integrity": "sha512-9llaVn6uqBiSlBP+wKiIEoBa01FwEISFgHSZiyec2S0KpyLUkGR4afW/FCZ/X8y+QJvzS0u4PGOlZDdh1/1avQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/level-hooks": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz", + "integrity": "sha512-fxLNny/vL/G4PnkLhWsbHnEaRi+A/k8r5EH/M77npZwYL62RHi2fV0S824z3QdpAk6VTgisJwIRywzBHLK4ZVA==", + "dev": true, + "dependencies": { + "string-range": "~1.2" + } + }, + "node_modules/level-js": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz", + "integrity": "sha512-lZtjt4ZwHE00UMC1vAb271p9qzg8vKlnDeXfIesH3zL0KxhHRDjClQLGLWhyR0nK4XARnd4wc/9eD1ffd4PshQ==", + "deprecated": "Superseded by browser-level (https://github.com/Level/community#faq)", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "abstract-leveldown": "~0.12.0", + "idb-wrapper": "^1.5.0", + "isbuffer": "~0.0.0", + "ltgt": "^2.1.2", + "typedarray-to-buffer": "~1.0.0", + "xtend": "~2.1.2" + } + }, + "node_modules/level-js/node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", + "dev": true, + "license": "MIT" + }, + "node_modules/level-js/node_modules/xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "dev": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/level-peek": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz", + "integrity": "sha512-TKEzH5TxROTjQxWMczt9sizVgnmJ4F3hotBI48xCTYvOKd/4gA/uY0XjKkhJFo6BMic8Tqjf6jFMLWeg3MAbqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "level-fix-range": "~1.0.2" + } + }, + "node_modules/level-sublevel": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz", + "integrity": "sha512-tO8jrFp+QZYrxx/Gnmjawuh1UBiifpvKNAcm4KCogesWr1Nm2+ckARitf+Oo7xg4OHqMW76eAqQ204BoIlscjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "level-fix-range": "2.0", + "level-hooks": ">=4.4.0 <5", + "string-range": "~1.2.1", + "xtend": "~2.0.4" + } + }, + "node_modules/level-sublevel/node_modules/clone": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", + "integrity": "sha512-IO78I0y6JcSpEPHzK4obKdsL7E7oLdRVDVOLwr2Hkbjsb+Eoz0dxW6tef0WizoKu0gLC4oZSZuEF4U2K6w1WQw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/level-sublevel/node_modules/level-fix-range": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz", + "integrity": "sha512-WrLfGWgwWbYPrHsYzJau+5+te89dUbENBg3/lsxOs4p2tYOhCHjbgXxBAj4DFqp3k/XBwitcRXoCh8RoCogASA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "~0.1.9" + } + }, + "node_modules/level-sublevel/node_modules/object-keys": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz", + "integrity": "sha512-XODjdR2pBh/1qrjPcbSeSgEtKbYo7LqYNq64/TPuCf7j9SfDD3i21yatKoIy39yIWNvVM59iutfQQpCv1RfFzA==", + "deprecated": "Please update to the latest object-keys", + "dev": true, + "license": "MIT", + "dependencies": { + "foreach": "~2.0.1", + "indexof": "~0.0.1", + "is": "~0.2.6" + } + }, + "node_modules/level-sublevel/node_modules/xtend": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz", + "integrity": "sha512-fOZg4ECOlrMl+A6Msr7EIFcON1L26mb4NY5rurSkOex/TWhazOrg6eXD/B0XkuiYcYhQDWLXzQxLMVJ7LXwokg==", + "dev": true, + "dependencies": { + "is-object": "~0.1.2", + "object-keys": "~0.2.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/levelup": { + "version": "0.18.6", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz", + "integrity": "sha512-uB0auyRqIVXx+hrpIUtol4VAPhLRcnxcOsd2i2m6rbFIDarO5dnrupLOStYYpEcu8ZT087Z9HEuYw1wjr6RL6Q==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "~0.8.1", + "deferred-leveldown": "~0.2.0", + "errno": "~0.1.1", + "prr": "~0.0.0", + "readable-stream": "~1.0.26", + "semver": "~2.3.1", + "xtend": "~3.0.0" + } + }, + "node_modules/levelup/node_modules/bl": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", + "integrity": "sha512-pfqikmByp+lifZCS0p6j6KreV6kNU6Apzpm2nKOk+94cZb/jvle55+JxWiByUQ0Wo/+XnDXEy5MxxKMb6r0VIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~1.0.26" + } + }, + "node_modules/levelup/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/levelup/node_modules/prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha512-LmUECmrW7RVj6mDWKjTXfKug7TFGdiz9P18HMcO4RHL+RW7MCOGNvpj5j47Rnp6ne6r4fZ2VzyUWEpKbg+tsjQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/levelup/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/levelup/node_modules/semver": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", + "integrity": "sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==", + "dev": true, + "license": "BSD", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/levelup/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/levelup/node_modules/xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libnpmaccess": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-8.0.6.tgz", + "integrity": "sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^11.0.2", + "npm-registry-fetch": "^17.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/lerna/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/libnpmpublish": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-9.0.9.tgz", + "integrity": "sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-convert": "^2.0.1" + "ci-info": "^4.0.0", + "normalize-package-data": "^6.0.1", + "npm-package-arg": "^11.0.2", + "npm-registry-fetch": "^17.0.1", + "proc-log": "^4.2.0", + "semver": "^7.3.7", + "sigstore": "^2.2.0", + "ssri": "^10.0.6" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/lerna/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/libnpmpublish/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=8" } }, - "node_modules/lerna/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/antonk52" } }, - "node_modules/lerna/node_modules/dedent": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", "dev": true, "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/lerna/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "node_modules/lint-staged": { + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.5.2.tgz", + "integrity": "sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "chalk": "^5.4.1", + "commander": "^13.1.0", + "debug": "^4.4.0", + "execa": "^8.0.1", + "lilconfig": "^3.1.3", + "listr2": "^8.2.5", + "micromatch": "^4.0.8", + "pidtree": "^0.6.0", + "string-argv": "^0.3.2", + "yaml": "^2.7.0" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" }, "engines": { - "node": ">=14.14" + "node": ">=18.12.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" } }, - "node_modules/lerna/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, - "node_modules/lerna/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "node_modules/lint-staged/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": "*" - } - }, - "node_modules/lerna/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/level-blobs": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz", - "integrity": "sha512-n0iYYCGozLd36m/Pzm206+brIgXP8mxPZazZ6ZvgKr+8YwOZ8/PPpYC5zMUu2qFygRN8RO6WC/HH3XWMW7RMVg==", - "dev": true, - "dependencies": { - "level-peek": "1.0.6", - "once": "^1.3.0", - "readable-stream": "^1.0.26-4" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/level-blobs/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/level-blobs/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "node_modules/lint-staged/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/level-blobs/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/level-filesystem": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz", - "integrity": "sha512-PhXDuCNYpngpxp3jwMT9AYBMgOvB6zxj3DeuIywNKmZqFj2djj9XfT2XDVslfqmo0Ip79cAd3SBy3FsfOZPJ1g==", + "node_modules/lint-staged/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "dependencies": { - "concat-stream": "^1.4.4", - "errno": "^0.1.1", - "fwd-stream": "^1.0.4", - "level-blobs": "^0.1.7", - "level-peek": "^1.0.6", - "level-sublevel": "^5.2.0", - "octal": "^1.0.0", - "once": "^1.3.0", - "xtend": "^2.2.0" + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" } }, - "node_modules/level-filesystem/node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "node_modules/lint-staged/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "engines": [ - "node >= 0.8" - ], "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/level-filesystem/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/lint-staged/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/level-filesystem/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, - "license": "MIT" - }, - "node_modules/level-filesystem/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/level-filesystem/node_modules/xtend": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", - "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==", + "node_modules/lint-staged/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/level-fix-range": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", - "integrity": "sha512-9llaVn6uqBiSlBP+wKiIEoBa01FwEISFgHSZiyec2S0KpyLUkGR4afW/FCZ/X8y+QJvzS0u4PGOlZDdh1/1avQ==", + "node_modules/lint-staged/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/level-hooks": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz", - "integrity": "sha512-fxLNny/vL/G4PnkLhWsbHnEaRi+A/k8r5EH/M77npZwYL62RHi2fV0S824z3QdpAk6VTgisJwIRywzBHLK4ZVA==", + "node_modules/listr2": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", + "integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==", "dev": true, + "license": "MIT", "dependencies": { - "string-range": "~1.2" + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/level-js": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz", - "integrity": "sha512-lZtjt4ZwHE00UMC1vAb271p9qzg8vKlnDeXfIesH3zL0KxhHRDjClQLGLWhyR0nK4XARnd4wc/9eD1ffd4PshQ==", + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "abstract-leveldown": "~0.12.0", - "idb-wrapper": "^1.5.0", - "isbuffer": "~0.0.0", - "ltgt": "^2.1.2", - "typedarray-to-buffer": "~1.0.0", - "xtend": "~2.1.2" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/level-js/node_modules/object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true, "license": "MIT" }, - "node_modules/level-js/node_modules/xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "node_modules/listr2/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { - "object-keys": "~0.4.0" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=0.4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/level-peek": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz", - "integrity": "sha512-TKEzH5TxROTjQxWMczt9sizVgnmJ4F3hotBI48xCTYvOKd/4gA/uY0XjKkhJFo6BMic8Tqjf6jFMLWeg3MAbqQ==", + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "license": "MIT", "dependencies": { - "level-fix-range": "~1.0.2" + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/level-sublevel": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz", - "integrity": "sha512-tO8jrFp+QZYrxx/Gnmjawuh1UBiifpvKNAcm4KCogesWr1Nm2+ckARitf+Oo7xg4OHqMW76eAqQ204BoIlscjA==", + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, "license": "MIT", "dependencies": { - "level-fix-range": "2.0", - "level-hooks": ">=4.4.0 <5", - "string-range": "~1.2.1", - "xtend": "~2.0.4" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/level-sublevel/node_modules/clone": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", - "integrity": "sha512-IO78I0y6JcSpEPHzK4obKdsL7E7oLdRVDVOLwr2Hkbjsb+Eoz0dxW6tef0WizoKu0gLC4oZSZuEF4U2K6w1WQw==", + "node_modules/load-json-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", "dev": true, "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" + }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/level-sublevel/node_modules/level-fix-range": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz", - "integrity": "sha512-WrLfGWgwWbYPrHsYzJau+5+te89dUbENBg3/lsxOs4p2tYOhCHjbgXxBAj4DFqp3k/XBwitcRXoCh8RoCogASA==", + "node_modules/load-json-file/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "license": "MIT", - "dependencies": { - "clone": "~0.1.9" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" } }, - "node_modules/level-sublevel/node_modules/object-keys": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz", - "integrity": "sha512-XODjdR2pBh/1qrjPcbSeSgEtKbYo7LqYNq64/TPuCf7j9SfDD3i21yatKoIy39yIWNvVM59iutfQQpCv1RfFzA==", - "deprecated": "Please update to the latest object-keys", + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, "license": "MIT", - "dependencies": { - "foreach": "~2.0.1", - "indexof": "~0.0.1", - "is": "~0.2.6" + "engines": { + "node": ">=6.11.5" } }, - "node_modules/level-sublevel/node_modules/xtend": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz", - "integrity": "sha512-fOZg4ECOlrMl+A6Msr7EIFcON1L26mb4NY5rurSkOex/TWhazOrg6eXD/B0XkuiYcYhQDWLXzQxLMVJ7LXwokg==", + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, + "license": "MIT", "dependencies": { - "is-object": "~0.1.2", - "object-keys": "~0.2.0" + "p-locate": "^6.0.0" }, "engines": { - "node": ">=0.4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/levelup": { - "version": "0.18.6", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz", - "integrity": "sha512-uB0auyRqIVXx+hrpIUtol4VAPhLRcnxcOsd2i2m6rbFIDarO5dnrupLOStYYpEcu8ZT087Z9HEuYw1wjr6RL6Q==", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true, - "license": "MIT", - "dependencies": { - "bl": "~0.8.1", - "deferred-leveldown": "~0.2.0", - "errno": "~0.1.1", - "prr": "~0.0.0", - "readable-stream": "~1.0.26", - "semver": "~2.3.1", - "xtend": "~3.0.0" - } + "license": "MIT" }, - "node_modules/levelup/node_modules/bl": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", - "integrity": "sha512-pfqikmByp+lifZCS0p6j6KreV6kNU6Apzpm2nKOk+94cZb/jvle55+JxWiByUQ0Wo/+XnDXEy5MxxKMb6r0VIw==", + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "~1.0.26" - } + "license": "MIT" + }, + "node_modules/lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", + "dev": true, + "license": "MIT" }, - "node_modules/levelup/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", "dev": true, "license": "MIT" }, - "node_modules/levelup/node_modules/prr": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha512-LmUECmrW7RVj6mDWKjTXfKug7TFGdiz9P18HMcO4RHL+RW7MCOGNvpj5j47Rnp6ne6r4fZ2VzyUWEpKbg+tsjQ==", + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", "dev": true, "license": "MIT" }, - "node_modules/levelup/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } + "license": "MIT" }, - "node_modules/levelup/node_modules/semver": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", - "integrity": "sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==", + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, - "license": "BSD", - "bin": { - "semver": "bin/semver" - } + "license": "MIT" }, - "node_modules/levelup/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", "dev": true, "license": "MIT" }, - "node_modules/levelup/node_modules/xtend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==", + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", "dev": true, - "engines": { - "node": ">=0.4" - } + "license": "MIT" }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } + "license": "MIT" }, - "node_modules/libnpmaccess": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-8.0.6.tgz", - "integrity": "sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw==", + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true, - "license": "ISC", - "dependencies": { - "npm-package-arg": "^11.0.2", - "npm-registry-fetch": "^17.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } + "license": "MIT" }, - "node_modules/libnpmpublish": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-9.0.9.tgz", - "integrity": "sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg==", + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", "dev": true, - "license": "ISC", - "dependencies": { - "ci-info": "^4.0.0", - "normalize-package-data": "^6.0.1", - "npm-package-arg": "^11.0.2", - "npm-registry-fetch": "^17.0.1", - "proc-log": "^4.2.0", - "semver": "^7.3.7", - "sigstore": "^2.2.0", - "ssri": "^10.0.6" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } + "license": "MIT" }, - "node_modules/libnpmpublish/node_modules/ci-info": { + "node_modules/log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz", - "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=14" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/antonk52" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/lint-staged": { - "version": "15.2.10", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", - "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "~5.3.0", - "commander": "~12.1.0", - "debug": "~4.3.6", - "execa": "~8.0.1", - "lilconfig": "~3.1.2", - "listr2": "~8.2.4", - "micromatch": "~4.0.8", - "pidtree": "~0.6.0", - "string-argv": "~0.3.2", - "yaml": "~2.5.0" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=18.12.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" + "node": ">=8" } }, - "node_modules/lint-staged/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=16.17" + "node": ">=18" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", "dev": true, "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, "engines": { - "node": ">=16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/lint-staged/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "license": "MIT", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "node_modules/log-update/node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^4.0.0" + "restore-cursor": "^5.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", "dev": true, "license": "MIT", "dependencies": { - "mimic-fn": "^4.0.0" + "get-east-asian-width": "^1.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "node_modules/log-update/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "mimic-function": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "license": "MIT", "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/listr2": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", - "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", + "node_modules/log-update/node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "license": "MIT", "dependencies": { - "cli-truncate": "^4.0.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^6.1.0", - "rfdc": "^1.4.1", - "wrap-ansi": "^9.0.0" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/listr2/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/listr2/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2/node_modules/string-width": { + "node_modules/log-update/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", @@ -12109,7 +12910,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/listr2/node_modules/strip-ansi": { + "node_modules/log-update/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", @@ -12125,7 +12926,7 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/listr2/node_modules/wrap-ansi": { + "node_modules/log-update/node_modules/wrap-ansi": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", @@ -12143,150 +12944,48 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "node_modules/longest": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", + "integrity": "sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==", "dev": true, "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/load-json-file/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } + "license": "ISC" }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "node_modules/ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } + "license": "MIT" }, - "node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "node_modules/magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.mergewith": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", - "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.startcase": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.upperfirst": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", - "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", - "dev": true, - "license": "MIT" + "vlq": "^0.2.2" + } }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "semver": "^7.5.3" }, "engines": { "node": ">=10" @@ -12295,321 +12994,324 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "license": "ISC", "dependencies": { - "color-convert": "^2.0.1" + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", + "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "license": "ISC", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/log-update": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", - "dev": true, + "node_modules/make-fetch-happen/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "license": "MIT", "dependencies": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" + "debug": "4" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6.0.0" } }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", - "dev": true, - "license": "MIT", + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "license": "ISC", "dependencies": { - "environment": "^1.0.0" + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", + "node_modules/make-fetch-happen/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", "engines": { - "node": ">=12" + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "engines": { + "node": ">= 8" } }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", + "node_modules/make-fetch-happen/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/log-update/node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "dev": true, + "node_modules/make-fetch-happen/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "license": "MIT", "dependencies": { - "restore-cursor": "^5.0.0" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6" } }, - "node_modules/log-update/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, - "license": "MIT" + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", - "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", - "dev": true, - "license": "MIT", + "node_modules/make-fetch-happen/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", "dependencies": { - "get-east-asian-width": "^1.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/log-update/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", - "dev": true, - "license": "MIT", + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", "dependencies": { - "mimic-function": "^5.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=8" + } + }, + "node_modules/make-fetch-happen/node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 8" } }, - "node_modules/log-update/node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "dev": true, + "node_modules/make-fetch-happen/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" + "glob": "^7.1.3" }, - "engines": { - "node": ">=18" + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", - "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", - "dev": true, + "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/log-update/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", + "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=18" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", + "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { - "ansi-regex": "^6.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": "*" } }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dev": true, - "license": "MIT", + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "license": "ISC", "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" + "minipass": "^3.1.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/longest": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", - "integrity": "sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==", - "dev": true, - "license": "MIT", + "node_modules/make-fetch-happen/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "dev": true, - "license": "MIT" - }, - "node_modules/magic-string": { - "version": "0.22.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", - "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "vlq": "^0.2.2" + "node_modules/make-fetch-happen/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" } }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "license": "MIT", + "node_modules/make-fetch-happen/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "license": "ISC", "dependencies": { - "semver": "^7.5.3" + "unique-slug": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "license": "ISC" - }, - "node_modules/make-fetch-happen": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", - "dev": true, + "node_modules/make-fetch-happen/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", "license": "ISC", "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" + "imurmurhash": "^0.1.4" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/map-obj": { @@ -12625,6 +13327,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -12638,12 +13349,12 @@ } }, "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/meow": { @@ -12667,10 +13378,13 @@ "license": "MIT" }, "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "license": "MIT", + "engines": { + "node": ">=18" + }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -12692,15 +13406,6 @@ "node": ">= 8" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -12730,9 +13435,9 @@ } }, "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, "license": "MIT" }, @@ -12752,6 +13457,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -12761,6 +13467,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -12870,7 +13577,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -12890,23 +13596,34 @@ } }, "node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", - "dev": true, + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "license": "MIT", "dependencies": { - "minipass": "^7.0.3", + "minipass": "^3.1.6", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, "optionalDependencies": { "encoding": "^0.1.13" } }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", @@ -13005,63 +13722,54 @@ } }, "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "license": "MIT", "bin": { - "mkdirp": "bin/cmd.js" + "mkdirp": "dist/cjs/src/bin.js" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/mocha": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", - "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.2.2.tgz", + "integrity": "sha512-VlSBxrPYHK4YNOEbFdkCxHQbZMoNzBkoPprqtZRW6311EUF/DlSxoycE2e/2NtRk4WKkIXzyrXDTrlikJMWgbw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", + "chokidar": "^4.0.1", "debug": "^4.3.5", "diff": "^5.2.0", "escape-string-regexp": "^4.0.0", "find-up": "^5.0.0", - "glob": "^8.1.0", + "glob": "^10.4.5", "he": "^1.2.0", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", "minimatch": "^5.1.6", "ms": "^2.1.3", + "picocolors": "^1.1.1", "serialize-javascript": "^6.0.2", "strip-json-comments": "^3.1.1", "supports-color": "^8.1.1", "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", "yargs-unparser": "^2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/mocha/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/mocha/node_modules/escape-string-regexp": { @@ -13095,24 +13803,56 @@ } }, "node_modules/mocha/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=12" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" }, "funding": { "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/mocha/node_modules/locate-path": { @@ -13186,49 +13926,21 @@ "node": ">=8" } }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/mocha/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "has-flag": "^4.0.0" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.18" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "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, - "license": "MIT", - "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/mocha/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/mocha/node_modules/yocto-queue": { @@ -13291,11 +14003,174 @@ "concat-map": "0.0.1" } }, - "node_modules/multimatch/node_modules/minimatch": { + "node_modules/multimatch/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": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true, + "license": "ISC" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp/node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "license": "ISC" + }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/node-gyp/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/node-gyp/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-gyp/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/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": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -13304,305 +14179,272 @@ "node": "*" } }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true, - "license": "ISC" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "license": "MIT", + "node_modules/node-gyp/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "license": "MIT" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "node_modules/node-gyp/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "node": ">=10" } }, - "node_modules/node-gyp": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz", - "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==", - "dev": true, - "license": "MIT", + "node_modules/node-gyp/node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "license": "ISC", "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^4.1.0", - "semver": "^7.3.5", - "tar": "^6.2.1", - "which": "^4.0.0" + "abbrev": "^1.0.0" }, "bin": { - "node-gyp": "bin/node-gyp.js" + "nopt": "bin/nopt.js" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/node-gyp/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, + "node_modules/node-gyp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "license": "ISC", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "glob": "^7.1.3" }, "bin": { - "glob": "dist/esm/bin.mjs" + "rimraf": "bin.js" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, + "node_modules/node-gyp/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, "engines": { - "node": ">=16" + "node": ">=10" } }, - "node_modules/node-gyp/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "node_modules/node-machine-id": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } + "license": "MIT" }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/node-polyfill-webpack-plugin": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/node-polyfill-webpack-plugin/-/node-polyfill-webpack-plugin-4.1.0.tgz", + "integrity": "sha512-b4ei444EKkOagG/yFqojrD3QTYM5IOU1f8tn9o6uwrG4qL+brI7oVhjPVd0ZL2xy+Z6CP5bu9w8XTvlWgiXHcw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "node-stdlib-browser": "^1.3.0", + "type-fest": "^4.27.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=14" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "webpack": ">=5" } }, - "node_modules/node-gyp/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "node_modules/node-polyfill-webpack-plugin/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=16 || 14 >=14.18" + "node": ">=16" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-machine-id": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", - "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true, "license": "MIT" }, - "node_modules/node-polyfill-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/node-polyfill-webpack-plugin/-/node-polyfill-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-WLk77vLpbcpmTekRj6s6vYxk30XoyaY5MDZ4+9g8OaKoG3Ij+TjOqhpQjVUlfDZBPBgpNATDltaQkzuXSnnkwg==", + "node_modules/node-stdlib-browser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-stdlib-browser/-/node-stdlib-browser-1.3.1.tgz", + "integrity": "sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw==", "dev": true, "license": "MIT", "dependencies": { - "assert": "^2.1.0", + "assert": "^2.0.0", + "browser-resolve": "^2.0.0", "browserify-zlib": "^0.2.0", - "buffer": "^6.0.3", - "console-browserify": "^1.2.0", + "buffer": "^5.7.1", + "console-browserify": "^1.1.0", "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.12.0", - "domain-browser": "^5.7.0", - "events": "^3.3.0", + "create-require": "^1.1.1", + "crypto-browserify": "^3.12.1", + "domain-browser": "4.22.0", + "events": "^3.0.0", "https-browserify": "^1.0.0", + "isomorphic-timers-promises": "^1.0.1", "os-browserify": "^0.3.0", "path-browserify": "^1.0.1", + "pkg-dir": "^5.0.0", "process": "^0.11.10", - "punycode": "^2.3.1", + "punycode": "^1.4.1", "querystring-es3": "^0.2.1", - "readable-stream": "^4.5.2", + "readable-stream": "^3.6.0", "stream-browserify": "^3.0.0", "stream-http": "^3.2.0", - "string_decoder": "^1.3.0", - "timers-browserify": "^2.0.12", - "tty-browserify": "^0.0.1", - "type-fest": "^4.18.2", - "url": "^0.11.3", - "util": "^0.12.5", - "vm-browserify": "^1.1.2" + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.1", + "url": "^0.11.4", + "util": "^0.12.4", + "vm-browserify": "^1.0.1" }, "engines": { - "node": ">=14" + "node": ">=10" + } + }, + "node_modules/node-stdlib-browser/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, - "peerDependencies": { - "webpack": ">=5" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-polyfill-webpack-plugin/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "node_modules/node-stdlib-browser/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/node-stdlib-browser/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/node-stdlib-browser/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "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" - } - ], "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/node-stdlib-browser/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/node-polyfill-webpack-plugin/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "node_modules/node-stdlib-browser/node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "find-up": "^5.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" } }, - "node_modules/node-polyfill-webpack-plugin/node_modules/type-fest": { - "version": "4.27.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.27.0.tgz", - "integrity": "sha512-3IMSWgP7C5KSQqmo1wjhKrwsvXAtF33jO3QY+Uy++ia7hqvgSK6iXbbg5PbDBc1P2ZbNEDgejOrN4YooXvhwCw==", + "node_modules/node-stdlib-browser/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true, - "license": "MIT" - }, "node_modules/nopt": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", - "dev": true, + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", "license": "ISC", "dependencies": { - "abbrev": "^2.0.0" + "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/normalize-package-data": { @@ -13620,16 +14462,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/npm-bundled": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", @@ -13731,6 +14563,48 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -13745,22 +14619,25 @@ } }, "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "deprecated": "This package is no longer supported.", "license": "ISC", "dependencies": { - "are-we-there-yet": "^2.0.0", + "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", + "gauge": "^4.0.3", "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/nx": { - "version": "20.1.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-20.1.2.tgz", - "integrity": "sha512-CvjmuQmI0RWLYZxRSIgQZmzsQv6dPp9oI0YZE3L1dagBPfTf5Cun65I0GLt7bdkDnVx2PGYkDbIoJSv2/V+83Q==", + "version": "20.8.1", + "resolved": "https://registry.npmjs.org/nx/-/nx-20.8.1.tgz", + "integrity": "sha512-73Uw8YXpsjeLqHSl7NMCmGdCs+8ynPzoNJFWAqVanPETEY9zPd5wevVQmeyzYtNNQU35uj6Os4iUzYunmwnFaA==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -13769,7 +14646,7 @@ "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.2", "@zkochan/js-yaml": "0.0.7", - "axios": "^1.7.4", + "axios": "^1.8.3", "chalk": "^4.1.0", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", @@ -13789,12 +14666,14 @@ "npm-run-path": "^4.0.1", "open": "^8.4.0", "ora": "5.3.0", + "resolve.exports": "2.0.3", "semver": "^7.5.3", "string-width": "^4.2.3", "tar-stream": "~2.2.0", "tmp": "~0.2.1", "tsconfig-paths": "^4.1.2", "tslib": "^2.3.0", + "yaml": "^2.6.0", "yargs": "^17.6.2", "yargs-parser": "21.1.1" }, @@ -13803,16 +14682,16 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "20.1.2", - "@nx/nx-darwin-x64": "20.1.2", - "@nx/nx-freebsd-x64": "20.1.2", - "@nx/nx-linux-arm-gnueabihf": "20.1.2", - "@nx/nx-linux-arm64-gnu": "20.1.2", - "@nx/nx-linux-arm64-musl": "20.1.2", - "@nx/nx-linux-x64-gnu": "20.1.2", - "@nx/nx-linux-x64-musl": "20.1.2", - "@nx/nx-win32-arm64-msvc": "20.1.2", - "@nx/nx-win32-x64-msvc": "20.1.2" + "@nx/nx-darwin-arm64": "20.8.1", + "@nx/nx-darwin-x64": "20.8.1", + "@nx/nx-freebsd-x64": "20.8.1", + "@nx/nx-linux-arm-gnueabihf": "20.8.1", + "@nx/nx-linux-arm64-gnu": "20.8.1", + "@nx/nx-linux-arm64-musl": "20.8.1", + "@nx/nx-linux-x64-gnu": "20.8.1", + "@nx/nx-linux-x64-musl": "20.8.1", + "@nx/nx-win32-arm64-msvc": "20.8.1", + "@nx/nx-win32-x64-msvc": "20.8.1" }, "peerDependencies": { "@swc-node/register": "^1.8.0", @@ -13899,6 +14778,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/nx/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/nx/node_modules/tmp": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", @@ -13913,15 +14805,16 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -13958,15 +14851,17 @@ } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -13977,15 +14872,16 @@ } }, "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "es-object-atoms": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -14026,13 +14922,14 @@ } }, "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, @@ -14189,6 +15086,19 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -14206,6 +15116,24 @@ "node": ">=0.10.0" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -14398,6 +15326,83 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/pacote/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/pacote/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pacote/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/pad": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/pad/-/pad-3.3.0.tgz", @@ -14511,9 +15516,9 @@ } }, "node_modules/parse-path": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", - "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.1.0.tgz", + "integrity": "sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==", "dev": true, "license": "MIT", "dependencies": { @@ -14600,9 +15605,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", - "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", "dev": true, "license": "ISC", "engines": { @@ -14610,10 +15615,13 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", - "license": "MIT" + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } }, "node_modules/path-type": { "version": "4.0.0", @@ -14688,6 +15696,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pkce-challenge": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -14757,64 +15775,33 @@ "node": ">=8" } }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/portfinder": { - "version": "1.0.32", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", - "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", - "license": "MIT", - "dependencies": { - "async": "^2.6.4", - "debug": "^3.2.7", - "mkdirp": "^0.5.6" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": ">=8" } }, - "node_modules/portfinder/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/portfinder": { + "version": "1.0.37", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.37.tgz", + "integrity": "sha512-yuGIEjDAYnnOex9ddMnKZEMFE0CcGo6zbfzDklkmT1m5z734ss6JMzN9rNB3+RR7iS+F10D4/BVIaXOyh8PQKw==", "license": "MIT", "dependencies": { - "minimist": "^1.2.6" + "async": "^3.2.6", + "debug": "^4.3.6" }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">= 10.12" } }, "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, "license": "MIT", "engines": { @@ -14846,9 +15833,9 @@ } }, "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, "license": "MIT", "bin": { @@ -14986,9 +15973,9 @@ } }, "node_modules/protocols": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", - "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz", + "integrity": "sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==", "dev": true, "license": "MIT" }, @@ -15035,29 +16022,26 @@ } }, "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, "license": "MIT" }, "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } + "license": "MIT" }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -15106,13 +16090,6 @@ "node": ">=8" } }, - "node_modules/rambda": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz", - "integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==", - "dev": true, - "license": "MIT" - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -15144,20 +16121,32 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", - "iconv-lite": "0.4.24", + "iconv-lite": "0.6.3", "unpipe": "1.0.0" }, "engines": { "node": ">= 0.8" } }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", @@ -15422,16 +16411,17 @@ } }, "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, "engines": { - "node": ">=8.10.0" + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, "node_modules/rechoir": { @@ -15461,16 +16451,41 @@ "node": ">=8" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexp.prototype.flags": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", - "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", "set-function-name": "^2.0.2" }, "engines": { @@ -15507,19 +16522,22 @@ "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15561,6 +16579,16 @@ "node": ">=8" } }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -15592,9 +16620,9 @@ } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { @@ -15712,13 +16740,13 @@ } }, "node_modules/rollup": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.3.tgz", - "integrity": "sha512-SLsCOnlmGt9VoZ9Ek8yBK8tAdmPHeppkw+Xa7yDlCEhDTvwYei03JlWo1fdc7YTfLZ4tD8riJCUyAgTbszk1fQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.2.tgz", + "integrity": "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.6" + "@types/estree": "1.0.7" }, "bin": { "rollup": "dist/bin/rollup" @@ -15728,24 +16756,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.27.3", - "@rollup/rollup-android-arm64": "4.27.3", - "@rollup/rollup-darwin-arm64": "4.27.3", - "@rollup/rollup-darwin-x64": "4.27.3", - "@rollup/rollup-freebsd-arm64": "4.27.3", - "@rollup/rollup-freebsd-x64": "4.27.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.27.3", - "@rollup/rollup-linux-arm-musleabihf": "4.27.3", - "@rollup/rollup-linux-arm64-gnu": "4.27.3", - "@rollup/rollup-linux-arm64-musl": "4.27.3", - "@rollup/rollup-linux-powerpc64le-gnu": "4.27.3", - "@rollup/rollup-linux-riscv64-gnu": "4.27.3", - "@rollup/rollup-linux-s390x-gnu": "4.27.3", - "@rollup/rollup-linux-x64-gnu": "4.27.3", - "@rollup/rollup-linux-x64-musl": "4.27.3", - "@rollup/rollup-win32-arm64-msvc": "4.27.3", - "@rollup/rollup-win32-ia32-msvc": "4.27.3", - "@rollup/rollup-win32-x64-msvc": "4.27.3", + "@rollup/rollup-android-arm-eabi": "4.40.2", + "@rollup/rollup-android-arm64": "4.40.2", + "@rollup/rollup-darwin-arm64": "4.40.2", + "@rollup/rollup-darwin-x64": "4.40.2", + "@rollup/rollup-freebsd-arm64": "4.40.2", + "@rollup/rollup-freebsd-x64": "4.40.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.40.2", + "@rollup/rollup-linux-arm-musleabihf": "4.40.2", + "@rollup/rollup-linux-arm64-gnu": "4.40.2", + "@rollup/rollup-linux-arm64-musl": "4.40.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.40.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.40.2", + "@rollup/rollup-linux-riscv64-gnu": "4.40.2", + "@rollup/rollup-linux-riscv64-musl": "4.40.2", + "@rollup/rollup-linux-s390x-gnu": "4.40.2", + "@rollup/rollup-linux-x64-gnu": "4.40.2", + "@rollup/rollup-linux-x64-musl": "4.40.2", + "@rollup/rollup-win32-arm64-msvc": "4.40.2", + "@rollup/rollup-win32-ia32-msvc": "4.40.2", + "@rollup/rollup-win32-x64-msvc": "4.40.2", "fsevents": "~2.3.2" } }, @@ -15815,9 +16845,9 @@ "license": "MIT" }, "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.3.tgz", - "integrity": "sha512-/6bn6pp1fsCGEY5n3yajmzZQAh+mW4QPItbiWxs69zskBzJuheb3tNynEjL+mKOsUSFK11X4LYF2BwwXnzWleA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz", + "integrity": "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==", "cpu": [ "x64" ], @@ -15828,6 +16858,22 @@ "linux" ] }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -15863,9 +16909,9 @@ } }, "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -15873,15 +16919,16 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -15918,16 +16965,40 @@ ], "license": "MIT" }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -15943,15 +17014,16 @@ "license": "MIT" }, "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 10.13.0" @@ -15961,30 +17033,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, "node_modules/secure-compare": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", @@ -15992,9 +17040,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -16004,51 +17052,46 @@ } }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/send/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">= 0.6" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/send/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, "node_modules/serialize-javascript": { @@ -16062,18 +17105,18 @@ } }, "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", "license": "MIT", "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" } }, "node_modules/set-blocking": { @@ -16086,6 +17129,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -16115,6 +17159,21 @@ "node": ">= 0.4" } }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -16239,15 +17298,69 @@ "license": "MIT" }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -16338,9 +17451,9 @@ } }, "node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", + "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", "license": "MIT", "dependencies": { "ip-address": "^9.0.5", @@ -16352,18 +17465,29 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", - "dev": true, + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "license": "MIT", "dependencies": { - "agent-base": "^7.1.1", - "debug": "^4.3.4", - "socks": "^2.8.3" + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" }, "engines": { - "node": ">= 14" + "node": ">= 10" + } + }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" } }, "node_modules/sort-keys": { @@ -16430,9 +17554,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.20", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", - "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", + "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", "dev": true, "license": "CC0-1.0" }, @@ -16590,16 +17714,19 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -16609,16 +17736,20 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -16732,15 +17863,19 @@ } }, "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -16757,20 +17892,20 @@ } }, "node_modules/synckit": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", - "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.4.tgz", + "integrity": "sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==", "dev": true, "license": "MIT", "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" + "@pkgr/core": "^0.2.3", + "tslib": "^2.8.1" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://opencollective.com/synckit" } }, "node_modules/tapable": { @@ -16784,20 +17919,20 @@ } }, "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", "license": "ISC", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/tar-stream": { @@ -16817,37 +17952,25 @@ "node": ">=6" } }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", + "node_modules/tar/node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "minipass": "^7.1.2" }, "engines": { - "node": ">=8" + "node": ">= 18" } }, - "node_modules/tar/node_modules/minipass": { + "node_modules/tar/node_modules/yallist": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "license": "ISC", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=8" + "node": ">=18" } }, "node_modules/temp-dir": { @@ -16861,9 +17984,9 @@ } }, "node_modules/terser": { - "version": "5.36.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", - "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -16880,17 +18003,17 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" }, "engines": { "node": ">= 10.13.0" @@ -17010,9 +18133,9 @@ } }, "node_modules/tinyexec": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", - "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", + "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", "dev": true, "license": "MIT" }, @@ -17078,9 +18201,9 @@ } }, "node_modules/ts-loader": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", - "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", + "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", "dev": true, "license": "MIT", "dependencies": { @@ -17141,6 +18264,19 @@ "node": ">= 8" } }, + "node_modules/ts-loader/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -17249,6 +18385,48 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/tuf-js/node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -17276,45 +18454,67 @@ } }, "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "mime-db": "^1.54.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -17324,18 +18524,19 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -17345,18 +18546,18 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -17380,9 +18581,9 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -17408,25 +18609,28 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -17518,9 +18722,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, "funding": [ { @@ -17539,7 +18743,7 @@ "license": "MIT", "dependencies": { "escalade": "^3.2.0", - "picocolors": "^1.1.0" + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -17558,6 +18762,16 @@ "punycode": "^2.1.0" } }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/url": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", @@ -17578,13 +18792,6 @@ "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", "license": "MIT" }, - "node_modules/url/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true, - "license": "MIT" - }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -17605,15 +18812,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/uuid": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", @@ -17717,17 +18915,18 @@ "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.96.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", - "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", + "version": "5.99.8", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz", + "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", "dev": true, "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.14.0", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", @@ -17741,9 +18940,9 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", + "schema-utils": "^4.3.2", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", + "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, @@ -17764,43 +18963,40 @@ } }, "node_modules/webpack-cli": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", - "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", + "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", "dev": true, "license": "MIT", "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^2.1.1", - "@webpack-cli/info": "^2.0.2", - "@webpack-cli/serve": "^2.0.5", + "@discoveryjs/json-ext": "^0.6.1", + "@webpack-cli/configtest": "^3.0.1", + "@webpack-cli/info": "^3.0.1", + "@webpack-cli/serve": "^3.0.1", "colorette": "^2.0.14", - "commander": "^10.0.1", + "commander": "^12.1.0", "cross-spawn": "^7.0.3", - "envinfo": "^7.7.3", + "envinfo": "^7.14.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", "interpret": "^3.1.1", "rechoir": "^0.8.0", - "webpack-merge": "^5.7.3" + "webpack-merge": "^6.0.1" }, "bin": { "webpack-cli": "bin/cli.js" }, "engines": { - "node": ">=14.15.0" + "node": ">=18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "5.x.x" + "webpack": "^5.82.0" }, "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, "webpack-bundle-analyzer": { "optional": true }, @@ -17810,28 +19006,41 @@ } }, "node_modules/webpack-cli/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", "engines": { - "node": ">=14" + "node": ">=18" + } + }, + "node_modules/webpack-cli/node_modules/envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" } }, "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", "dev": true, "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", - "wildcard": "^2.0.0" + "wildcard": "^2.0.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=18.0.0" } }, "node_modules/webpack-sources": { @@ -17925,33 +19134,92 @@ } }, "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { @@ -18223,9 +19491,9 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", - "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", + "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", "dev": true, "license": "ISC", "bin": { @@ -18280,32 +19548,6 @@ "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, - "license": "MIT", - "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, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/yargs-unparser/node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", @@ -18327,9 +19569,9 @@ } }, "node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", "dev": true, "license": "MIT", "engines": { @@ -18339,6 +19581,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zod": { + "version": "3.24.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz", + "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.24.5", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", + "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } + }, "packages/csv": { "version": "6.3.11", "license": "MIT", @@ -18349,24 +19611,24 @@ "stream-transform": "^3.3.3" }, "devDependencies": { - "@eslint/js": "^9.15.0", - "@rollup/plugin-node-resolve": "^15.3.0", - "@types/mocha": "^10.0.9", - "@types/node": "^22.9.1", + "@eslint/js": "^9.26.0", + "@rollup/plugin-node-resolve": "^16.0.1", + "@types/mocha": "^10.0.10", + "@types/node": "^22.15.17", "coffeescript": "~2.7.0", "each": "^2.7.2", - "eslint": "^9.15.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-prettier": "^5.2.1", - "mocha": "~10.8.2", - "prettier": "^3.3.3", - "rollup": "^4.27.3", + "eslint": "^9.26.0", + "eslint-config-prettier": "^10.1.5", + "eslint-plugin-mocha": "^11.0.0", + "eslint-plugin-prettier": "^5.4.0", + "mocha": "~11.2.2", + "prettier": "^3.5.3", + "rollup": "^4.40.2", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "~13.2.3", "ts-node": "^10.9.2", - "typescript": "^5.6.3" + "typescript": "^5.8.3" }, "engines": { "node": ">= 0.1.90" @@ -18376,104 +19638,104 @@ "version": "4.4.2", "license": "MIT", "devDependencies": { - "@eslint/js": "^9.15.0", - "@rollup/plugin-node-resolve": "^15.3.0", - "@types/mocha": "^10.0.9", - "@types/node": "^22.9.1", + "@eslint/js": "^9.26.0", + "@rollup/plugin-node-resolve": "^16.0.1", + "@types/mocha": "^10.0.10", + "@types/node": "^22.15.17", "coffeescript": "~2.7.0", "each": "^2.7.2", - "eslint": "^9.15.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-prettier": "^5.2.1", - "mocha": "~10.8.2", - "prettier": "^3.3.3", - "rollup": "^4.27.3", + "eslint": "^9.26.0", + "eslint-config-prettier": "^10.1.5", + "eslint-plugin-mocha": "^11.0.0", + "eslint-plugin-prettier": "^5.4.0", + "mocha": "~11.2.2", + "prettier": "^3.5.3", + "rollup": "^4.40.2", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "~13.2.3", "ts-node": "^10.9.2", - "typescript": "^5.6.3" + "typescript": "^5.8.3" } }, "packages/csv-parse": { "version": "5.6.0", "license": "MIT", "devDependencies": { - "@eslint/js": "^9.15.0", - "@rollup/plugin-node-resolve": "^15.3.0", - "@types/mocha": "^10.0.9", - "@types/node": "^22.9.1", + "@eslint/js": "^9.26.0", + "@rollup/plugin-node-resolve": "^16.0.1", + "@types/mocha": "^10.0.10", + "@types/node": "^22.15.17", "coffeescript": "^2.7.0", "csv-generate": "^4.4.2", "csv-spectrum": "^2.0.0", "each": "^2.7.2", - "eslint": "^9.15.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-prettier": "^5.2.1", - "mocha": "^10.8.2", + "eslint": "^9.26.0", + "eslint-config-prettier": "^10.1.5", + "eslint-plugin-mocha": "^11.0.0", + "eslint-plugin-prettier": "^5.4.0", + "mocha": "^11.2.2", "pad": "^3.3.0", - "prettier": "^3.3.3", - "rollup": "^4.27.3", + "prettier": "^3.5.3", + "rollup": "^4.40.2", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "^13.2.3", "stream-transform": "^3.3.3", "ts-node": "^10.9.2", - "typescript": "^5.6.3" + "typescript": "^5.8.3" } }, "packages/csv-stringify": { "version": "6.5.2", "license": "MIT", "devDependencies": { - "@eslint/js": "^9.15.0", - "@rollup/plugin-node-resolve": "^15.3.0", - "@types/mocha": "^10.0.9", - "@types/node": "^22.9.1", + "@eslint/js": "^9.26.0", + "@rollup/plugin-node-resolve": "^16.0.1", + "@types/mocha": "^10.0.10", + "@types/node": "^22.15.17", "coffeescript": "~2.7.0", "csv-generate": "^4.4.2", "each": "^2.7.2", - "eslint": "^9.15.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-prettier": "^5.2.1", - "express": "^4.21.1", - "mocha": "~10.8.2", - "prettier": "^3.3.3", - "rollup": "^4.27.3", + "eslint": "^9.26.0", + "eslint-config-prettier": "^10.1.5", + "eslint-plugin-mocha": "^11.0.0", + "eslint-plugin-prettier": "^5.4.0", + "express": "^5.1.0", + "mocha": "~11.2.2", + "prettier": "^3.5.3", + "rollup": "^4.40.2", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "~13.2.3", "ts-node": "^10.9.2", - "typescript": "^5.6.3" + "typescript": "^5.8.3" } }, "packages/stream-transform": { "version": "3.3.3", "license": "MIT", "devDependencies": { - "@eslint/js": "^9.15.0", - "@rollup/plugin-node-resolve": "^15.3.0", - "@types/mocha": "^10.0.9", - "@types/node": "^22.9.1", + "@eslint/js": "^9.26.0", + "@rollup/plugin-node-resolve": "^16.0.1", + "@types/mocha": "^10.0.10", + "@types/node": "^22.15.17", "coffeescript": "~2.7.0", "csv-generate": "^4.4.2", "each": "^2.7.2", - "eslint": "^9.15.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-prettier": "^5.2.1", - "mocha": "~10.8.2", + "eslint": "^9.26.0", + "eslint-config-prettier": "^10.1.5", + "eslint-plugin-mocha": "^11.0.0", + "eslint-plugin-prettier": "^5.4.0", + "mocha": "~11.2.2", "pad": "~3.3.0", - "prettier": "^3.3.3", - "rollup": "^4.27.3", + "prettier": "^3.5.3", + "rollup": "^4.40.2", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "~13.2.3", "ts-node": "^10.9.2", - "typescript": "^5.6.3" + "typescript": "^5.8.3" } } } diff --git a/package.json b/package.json index 31d44aed..cb31a580 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "private": true, "devDependencies": { - "@commitlint/cli": "^19.6.0", - "@commitlint/config-conventional": "^19.6.0", + "@commitlint/cli": "^19.8.1", + "@commitlint/config-conventional": "^19.8.1", "cz-conventional-changelog": "^3.3.0", - "glob": "^11.0.0", + "glob": "^11.0.2", "husky": "^9.1.7", - "lerna": "^8.1.9", - "lint-staged": "^15.2.10" + "lerna": "^8.2.2", + "lint-staged": "^15.5.2" }, "lint-staged": { "*.js": "npm run lint:fix", diff --git a/packages/csv-generate/package.json b/packages/csv-generate/package.json index cf9a0e29..98afe7a6 100644 --- a/packages/csv-generate/package.json +++ b/packages/csv-generate/package.json @@ -13,24 +13,24 @@ "bugs": "https://github.com/adaltas/node-csv-generate/issues", "author": "David Worms (https://www.adaltas.com)", "devDependencies": { - "@eslint/js": "^9.15.0", - "@rollup/plugin-node-resolve": "^15.3.0", - "@types/mocha": "^10.0.9", - "@types/node": "^22.9.1", + "@eslint/js": "^9.26.0", + "@rollup/plugin-node-resolve": "^16.0.1", + "@types/mocha": "^10.0.10", + "@types/node": "^22.15.17", "coffeescript": "~2.7.0", "each": "^2.7.2", - "eslint": "^9.15.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-prettier": "^5.2.1", - "mocha": "~10.8.2", - "prettier": "^3.3.3", - "rollup": "^4.27.3", + "eslint": "^9.26.0", + "eslint-config-prettier": "^10.1.5", + "eslint-plugin-mocha": "^11.0.0", + "eslint-plugin-prettier": "^5.4.0", + "mocha": "~11.2.2", + "prettier": "^3.5.3", + "rollup": "^4.40.2", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "~13.2.3", "ts-node": "^10.9.2", - "typescript": "^5.6.3" + "typescript": "^5.8.3" }, "exports": { ".": { diff --git a/packages/csv-parse/package.json b/packages/csv-parse/package.json index 56308487..c5dbddd8 100644 --- a/packages/csv-parse/package.json +++ b/packages/csv-parse/package.json @@ -72,28 +72,28 @@ } }, "devDependencies": { - "@eslint/js": "^9.15.0", - "@rollup/plugin-node-resolve": "^15.3.0", - "@types/mocha": "^10.0.9", - "@types/node": "^22.9.1", + "@eslint/js": "^9.26.0", + "@rollup/plugin-node-resolve": "^16.0.1", + "@types/mocha": "^10.0.10", + "@types/node": "^22.15.17", "coffeescript": "^2.7.0", "csv-generate": "^4.4.2", "csv-spectrum": "^2.0.0", "each": "^2.7.2", - "eslint": "^9.15.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-prettier": "^5.2.1", - "mocha": "^10.8.2", + "eslint": "^9.26.0", + "eslint-config-prettier": "^10.1.5", + "eslint-plugin-mocha": "^11.0.0", + "eslint-plugin-prettier": "^5.4.0", + "mocha": "^11.2.2", "pad": "^3.3.0", - "prettier": "^3.3.3", - "rollup": "^4.27.3", + "prettier": "^3.5.3", + "rollup": "^4.40.2", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "^13.2.3", "stream-transform": "^3.3.3", "ts-node": "^10.9.2", - "typescript": "^5.6.3" + "typescript": "^5.8.3" }, "files": [ "dist", diff --git a/packages/csv-stringify/package.json b/packages/csv-stringify/package.json index a14a4e3b..9b4d6320 100644 --- a/packages/csv-stringify/package.json +++ b/packages/csv-stringify/package.json @@ -11,26 +11,26 @@ ], "author": "David Worms (https://www.adaltas.com)", "devDependencies": { - "@eslint/js": "^9.15.0", - "@rollup/plugin-node-resolve": "^15.3.0", - "@types/mocha": "^10.0.9", - "@types/node": "^22.9.1", + "@eslint/js": "^9.26.0", + "@rollup/plugin-node-resolve": "^16.0.1", + "@types/mocha": "^10.0.10", + "@types/node": "^22.15.17", "coffeescript": "~2.7.0", "csv-generate": "^4.4.2", "each": "^2.7.2", - "eslint": "^9.15.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-prettier": "^5.2.1", - "express": "^4.21.1", - "mocha": "~10.8.2", - "prettier": "^3.3.3", - "rollup": "^4.27.3", + "eslint": "^9.26.0", + "eslint-config-prettier": "^10.1.5", + "eslint-plugin-mocha": "^11.0.0", + "eslint-plugin-prettier": "^5.4.0", + "express": "^5.1.0", + "mocha": "~11.2.2", + "prettier": "^3.5.3", + "rollup": "^4.40.2", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "~13.2.3", "ts-node": "^10.9.2", - "typescript": "^5.6.3" + "typescript": "^5.8.3" }, "exports": { ".": { diff --git a/packages/csv/package.json b/packages/csv/package.json index b41fef51..dfa55bdf 100644 --- a/packages/csv/package.json +++ b/packages/csv/package.json @@ -29,24 +29,24 @@ "stream-transform": "^3.3.3" }, "devDependencies": { - "@eslint/js": "^9.15.0", - "@rollup/plugin-node-resolve": "^15.3.0", - "@types/mocha": "^10.0.9", - "@types/node": "^22.9.1", + "@eslint/js": "^9.26.0", + "@rollup/plugin-node-resolve": "^16.0.1", + "@types/mocha": "^10.0.10", + "@types/node": "^22.15.17", "coffeescript": "~2.7.0", "each": "^2.7.2", - "eslint": "^9.15.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-prettier": "^5.2.1", - "mocha": "~10.8.2", - "prettier": "^3.3.3", - "rollup": "^4.27.3", + "eslint": "^9.26.0", + "eslint-config-prettier": "^10.1.5", + "eslint-plugin-mocha": "^11.0.0", + "eslint-plugin-prettier": "^5.4.0", + "mocha": "~11.2.2", + "prettier": "^3.5.3", + "rollup": "^4.40.2", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "~13.2.3", "ts-node": "^10.9.2", - "typescript": "^5.6.3" + "typescript": "^5.8.3" }, "engines": { "node": ">= 0.1.90" diff --git a/packages/stream-transform/package.json b/packages/stream-transform/package.json index 875e0e38..e41d10bc 100644 --- a/packages/stream-transform/package.json +++ b/packages/stream-transform/package.json @@ -12,26 +12,26 @@ ], "author": "David Worms (https://www.adaltas.com)", "devDependencies": { - "@eslint/js": "^9.15.0", - "@rollup/plugin-node-resolve": "^15.3.0", - "@types/mocha": "^10.0.9", - "@types/node": "^22.9.1", + "@eslint/js": "^9.26.0", + "@rollup/plugin-node-resolve": "^16.0.1", + "@types/mocha": "^10.0.10", + "@types/node": "^22.15.17", "coffeescript": "~2.7.0", "csv-generate": "^4.4.2", "each": "^2.7.2", - "eslint": "^9.15.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-prettier": "^5.2.1", - "mocha": "~10.8.2", + "eslint": "^9.26.0", + "eslint-config-prettier": "^10.1.5", + "eslint-plugin-mocha": "^11.0.0", + "eslint-plugin-prettier": "^5.4.0", + "mocha": "~11.2.2", "pad": "~3.3.0", - "prettier": "^3.3.3", - "rollup": "^4.27.3", + "prettier": "^3.5.3", + "rollup": "^4.40.2", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "~13.2.3", "ts-node": "^10.9.2", - "typescript": "^5.6.3" + "typescript": "^5.8.3" }, "exports": { ".": { From ad5bc65fd038e28c1bcf1c148b235efb079f712f Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 9 May 2025 16:01:04 +0200 Subject: [PATCH 04/49] build: remove lint-staged conf from packages --- package-lock.json | 511 ++++++++++++++++++++++++- packages/csv-generate/package.json | 4 - packages/csv-parse/package.json | 4 - packages/csv-stringify/package.json | 4 - packages/csv/package.json | 4 - packages/stream-transform/package.json | 4 - 6 files changed, 510 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8ac31de1..d58e6b9e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -538,6 +538,431 @@ "tslib": "^2.4.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", @@ -7671,6 +8096,47 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esbuild": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -9283,6 +9749,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/git-raw-commits": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", @@ -16579,6 +17058,16 @@ "node": ">=8" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/resolve.exports": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", @@ -18363,6 +18852,26 @@ "dev": true, "license": "0BSD" }, + "node_modules/tsx": { + "version": "4.19.4", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", + "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, "node_modules/tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", @@ -19720,7 +20229,6 @@ "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", - "coffeescript": "~2.7.0", "csv-generate": "^4.4.2", "each": "^2.7.2", "eslint": "^9.26.0", @@ -19735,6 +20243,7 @@ "rollup-plugin-node-globals": "^1.4.0", "should": "~13.2.3", "ts-node": "^10.9.2", + "tsx": "^4.19.4", "typescript": "^5.8.3" } } diff --git a/packages/csv-generate/package.json b/packages/csv-generate/package.json index 98afe7a6..037f94a5 100644 --- a/packages/csv-generate/package.json +++ b/packages/csv-generate/package.json @@ -90,10 +90,6 @@ "throw-deprecation": false, "timeout": 40000 }, - "lint-staged": { - "*.js": "npm run lint:fix", - "*.md": "prettier -w" - }, "repository": { "type": "git", "url": "https://github.com/adaltas/node-csv.git", diff --git a/packages/csv-parse/package.json b/packages/csv-parse/package.json index c5dbddd8..cffa1a61 100644 --- a/packages/csv-parse/package.json +++ b/packages/csv-parse/package.json @@ -113,10 +113,6 @@ "throw-deprecation": false, "timeout": 40000 }, - "lint-staged": { - "*.js": "npm run lint:fix", - "*.md": "prettier -w" - }, "repository": { "type": "git", "url": "https://github.com/adaltas/node-csv.git", diff --git a/packages/csv-stringify/package.json b/packages/csv-stringify/package.json index 9b4d6320..afd6745e 100644 --- a/packages/csv-stringify/package.json +++ b/packages/csv-stringify/package.json @@ -80,10 +80,6 @@ "throw-deprecation": false, "timeout": 40000 }, - "lint-staged": { - "*.js": "npm run lint:fix", - "*.md": "prettier -w" - }, "repository": { "type": "git", "url": "https://github.com/adaltas/node-csv.git", diff --git a/packages/csv/package.json b/packages/csv/package.json index dfa55bdf..8d2c30f3 100644 --- a/packages/csv/package.json +++ b/packages/csv/package.json @@ -99,10 +99,6 @@ "throw-deprecation": false, "timeout": 40000 }, - "lint-staged": { - "*.js": "npm run lint:fix", - "*.md": "prettier -w" - }, "repository": { "type": "git", "url": "https://github.com/adaltas/node-csv.git", diff --git a/packages/stream-transform/package.json b/packages/stream-transform/package.json index e41d10bc..49f0eb6f 100644 --- a/packages/stream-transform/package.json +++ b/packages/stream-transform/package.json @@ -81,10 +81,6 @@ "throw-deprecation": false, "timeout": 40000 }, - "lint-staged": { - "*.js": "npm run lint:fix", - "*.md": "prettier -w" - }, "repository": { "type": "git", "url": "https://github.com/adaltas/node-csv.git", From 997f6b51976edac1f7e3e30915625843e61b12a7 Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 9 May 2025 16:01:21 +0200 Subject: [PATCH 05/49] test(stream-transform): js conversion --- packages/stream-transform/package.json | 14 +- .../stream-transform/test/api.callback.coffee | 23 -- .../stream-transform/test/api.callback.js | 44 ++++ .../stream-transform/test/api.pipe.coffee | 69 ------ packages/stream-transform/test/api.pipe.js | 115 ++++++++++ .../stream-transform/test/api.sync.coffee | 42 ---- packages/stream-transform/test/api.sync.js | 66 ++++++ .../stream-transform/test/api.types.sync.ts | 33 ++- packages/stream-transform/test/api.types.ts | 143 ++++++------ .../test/handler.async.coffee | 135 ----------- .../stream-transform/test/handler.async.js | 194 ++++++++++++++++ packages/stream-transform/test/handler.coffee | 24 -- packages/stream-transform/test/handler.js | 32 +++ .../test/handler.mode.callback.coffee | 47 ---- .../test/handler.mode.callback.error.coffee | 56 ----- .../test/handler.mode.callback.error.js | 67 ++++++ .../test/handler.mode.callback.js | 57 +++++ .../test/handler.mode.sync.coffee | 145 ------------ .../test/handler.mode.sync.error.coffee | 38 ---- .../test/handler.mode.sync.error.js | 58 +++++ .../test/handler.mode.sync.js | 212 ++++++++++++++++++ .../test/handler.promise.coffee | 38 ---- .../stream-transform/test/handler.promise.js | 53 +++++ .../test/handler.types.coffee | 43 ---- .../stream-transform/test/handler.types.js | 66 ++++++ packages/stream-transform/test/loaders/all.js | 15 -- .../stream-transform/test/loaders/coffee.js | 20 -- .../test/loaders/legacy/all.js | 36 --- .../test/loaders/legacy/coffee.js | 50 ----- .../test/option.consume.coffee | 62 ----- .../stream-transform/test/option.consume.js | 86 +++++++ .../test/option.parallel.coffee | 53 ----- .../stream-transform/test/option.parallel.js | 70 ++++++ .../test/option.params.coffee | 24 -- .../stream-transform/test/option.params.js | 45 ++++ packages/stream-transform/test/samples.coffee | 30 --- packages/stream-transform/test/samples.js | 44 ++++ .../test/state.finished.coffee | 31 --- .../stream-transform/test/state.finished.js | 48 ++++ .../test/state.running.coffee | 31 --- .../stream-transform/test/state.running.js | 48 ++++ .../test/state.started.coffee | 31 --- .../stream-transform/test/state.started.js | 50 +++++ 43 files changed, 1445 insertions(+), 1143 deletions(-) delete mode 100644 packages/stream-transform/test/api.callback.coffee create mode 100644 packages/stream-transform/test/api.callback.js delete mode 100644 packages/stream-transform/test/api.pipe.coffee create mode 100644 packages/stream-transform/test/api.pipe.js delete mode 100644 packages/stream-transform/test/api.sync.coffee create mode 100644 packages/stream-transform/test/api.sync.js delete mode 100644 packages/stream-transform/test/handler.async.coffee create mode 100644 packages/stream-transform/test/handler.async.js delete mode 100644 packages/stream-transform/test/handler.coffee create mode 100644 packages/stream-transform/test/handler.js delete mode 100644 packages/stream-transform/test/handler.mode.callback.coffee delete mode 100644 packages/stream-transform/test/handler.mode.callback.error.coffee create mode 100644 packages/stream-transform/test/handler.mode.callback.error.js create mode 100644 packages/stream-transform/test/handler.mode.callback.js delete mode 100644 packages/stream-transform/test/handler.mode.sync.coffee delete mode 100644 packages/stream-transform/test/handler.mode.sync.error.coffee create mode 100644 packages/stream-transform/test/handler.mode.sync.error.js create mode 100644 packages/stream-transform/test/handler.mode.sync.js delete mode 100644 packages/stream-transform/test/handler.promise.coffee create mode 100644 packages/stream-transform/test/handler.promise.js delete mode 100644 packages/stream-transform/test/handler.types.coffee create mode 100644 packages/stream-transform/test/handler.types.js delete mode 100644 packages/stream-transform/test/loaders/all.js delete mode 100644 packages/stream-transform/test/loaders/coffee.js delete mode 100644 packages/stream-transform/test/loaders/legacy/all.js delete mode 100644 packages/stream-transform/test/loaders/legacy/coffee.js delete mode 100644 packages/stream-transform/test/option.consume.coffee create mode 100644 packages/stream-transform/test/option.consume.js delete mode 100644 packages/stream-transform/test/option.parallel.coffee create mode 100644 packages/stream-transform/test/option.parallel.js delete mode 100644 packages/stream-transform/test/option.params.coffee create mode 100644 packages/stream-transform/test/option.params.js delete mode 100644 packages/stream-transform/test/samples.coffee create mode 100644 packages/stream-transform/test/samples.js delete mode 100644 packages/stream-transform/test/state.finished.coffee create mode 100644 packages/stream-transform/test/state.finished.js delete mode 100644 packages/stream-transform/test/state.running.coffee create mode 100644 packages/stream-transform/test/state.running.js delete mode 100644 packages/stream-transform/test/state.started.coffee create mode 100644 packages/stream-transform/test/state.started.js diff --git a/packages/stream-transform/package.json b/packages/stream-transform/package.json index 49f0eb6f..98ae93ae 100644 --- a/packages/stream-transform/package.json +++ b/packages/stream-transform/package.json @@ -16,7 +16,6 @@ "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", - "coffeescript": "~2.7.0", "csv-generate": "^4.4.2", "each": "^2.7.2", "eslint": "^9.26.0", @@ -31,6 +30,7 @@ "rollup-plugin-node-globals": "^1.4.0", "should": "~13.2.3", "ts-node": "^10.9.2", + "tsx": "^4.19.4", "typescript": "^5.8.3" }, "exports": { @@ -72,12 +72,9 @@ "main": "./dist/cjs/index.cjs", "mocha": { "inline-diffs": true, - "loader": "./test/loaders/all.js", + "import": "tsx", "recursive": true, "reporter": "spec", - "require": [ - "should" - ], "throw-deprecation": false, "timeout": 40000 }, @@ -92,10 +89,11 @@ "build:ts": "cp lib/index.d.ts dist/cjs/index.d.cts && cp lib/sync.d.ts dist/cjs/sync.d.cts && cp lib/*.ts dist/esm", "postbuild:ts": "find dist/cjs -name '*.d.cts' -exec sh -c \"sed -i \"s/\\.js'/\\.cjs'/g\" {} || sed -i '' \"s/\\.js'/\\.cjs'/g\" {}\" \\;", "lint:check": "eslint && tsc --noEmit true", - "lint:fix": "eslint --fix && tsc --noEmit true", + "lint:fix": "eslint --fix", + "lint:ts": "tsc --noEmit true", "preversion": "npm run build && git add dist", - "test": "mocha 'test/**/*.{coffee,ts}'", - "test:legacy": "mocha --loader=./test/loaders/legacy/all.js --ignore test/handler.mode.callback.coffee --ignore test/handler.mode.callback.error.coffee 'test/**/*.{coffee,ts}'" + "test": "mocha 'test/**/*.{js,ts}'", + "test:legacy": "mocha --loader=./test/loaders/legacy/all.js --ignore test/handler.mode.callback.js --ignore test/handler.mode.callback.error.js 'test/**/*.{js,ts}'" }, "type": "module", "types": "dist/esm/index.d.ts", diff --git a/packages/stream-transform/test/api.callback.coffee b/packages/stream-transform/test/api.callback.coffee deleted file mode 100644 index 49182daf..00000000 --- a/packages/stream-transform/test/api.callback.coffee +++ /dev/null @@ -1,23 +0,0 @@ - -import { generate } from 'csv-generate' -import { transform } from '../lib/index.js' - -describe 'api.callback', -> - - it 'input is data', (next) -> - data = for i in [0...100] then i - transform data, ((record) -> value: record), (err, result) -> - result.length.should.eql 100 unless err - result[0].should.eql value: 0 unless err - next err - - it 'input is a readable stream', (next) -> - generate length: 1000, objectMode: true, seed: 1, columns: 2 - .pipe transform ((record) -> value: record), (err, result) -> - result.length.should.eql 1000 unless err - result[0].should.eql value: [ 'OMH', 'ONKCHhJmjadoA' ] unless err - next err - - - - diff --git a/packages/stream-transform/test/api.callback.js b/packages/stream-transform/test/api.callback.js new file mode 100644 index 00000000..999ca4bc --- /dev/null +++ b/packages/stream-transform/test/api.callback.js @@ -0,0 +1,44 @@ +import "should"; +import { generate } from "csv-generate"; +import { transform } from "../lib/index.js"; + +describe("api.callback", function () { + it("input is data", function (next) { + const data = Array.from({ length: 100 }, (_, i) => i); + transform( + data, + function (record) { + return { value: record }; + }, + function (err, result) { + if (!err) { + result.length.should.eql(100); + result[0].should.eql({ value: 0 }); + } + next(err); + }, + ); + }); + + it("input is a readable stream", function (next) { + generate({ + length: 1000, + objectMode: true, + seed: 1, + columns: 2, + }).pipe( + transform( + function (record) { + return { value: record }; + }, + function (err, result) { + if (!err) { + result.length.should.eql(1000); + result[0].should.eql({ value: ["OMH", "ONKCHhJmjadoA"] }); + } + next(err); + }, + ), + ); + }); +}); diff --git a/packages/stream-transform/test/api.pipe.coffee b/packages/stream-transform/test/api.pipe.coffee deleted file mode 100644 index 0139b7b3..00000000 --- a/packages/stream-transform/test/api.pipe.coffee +++ /dev/null @@ -1,69 +0,0 @@ - -import stream from 'stream' -import { generate } from 'csv-generate' -import { transform } from '../lib/index.js' - -describe 'api.pipe', -> - - describe 'source', -> - - it 'in sync mode', (next) -> - data = [] - generator = generate length: 1000, objectMode: true, seed: 1, columns: 2 - transformer = generator.pipe transform (record) -> - record.push record.shift() - record - transformer.on 'readable', -> - while(d = transformer.read()) - data.push d - transformer.on 'end', -> - data.length.should.eql 1000 - data.slice(0,2).should.eql [ - [ 'ONKCHhJmjadoA', 'OMH' ] - [ 'GeACHiN', 'D' ] - ] - next() - - it 'in async mode', (next) -> - data = [] - generator = generate length: 1000, objectMode: true, seed: 1, columns: 2 - transformer = generator.pipe transform (record, callback) -> - record.push record.shift() - callback null, record - transformer.on 'readable', -> - while(d = transformer.read()) - data.push d - transformer.on 'end', -> - data.slice(0,2).should.eql [ - [ 'ONKCHhJmjadoA', 'OMH' ] - [ 'GeACHiN', 'D' ] - ] - next() - - describe 'source and destination', -> - - it 'in sync mode', (next) -> - @timeout 0 - count = 0 - generator = generate length: 10000, objectMode: true, seed: 1, columns: 2 - destination = new stream.Writable - destination._write = (chunk, encoding, callback) -> - setImmediate callback - destination.on 'finish', next - generator - .pipe transform (record) -> - record.join ',' - .pipe destination - - it 'in async mode', (next) -> - @timeout 0 - generator = generate length: 10000, objectMode: true, seed: 1, columns: 2 - destination = new stream.Writable - destination._write = (chunk, encoding, callback) -> - setImmediate callback - destination.on 'finish', next - generator - .pipe transform (record, callback) -> - setImmediate -> - callback null, record.join ',' - .pipe destination diff --git a/packages/stream-transform/test/api.pipe.js b/packages/stream-transform/test/api.pipe.js new file mode 100644 index 00000000..ba9417cf --- /dev/null +++ b/packages/stream-transform/test/api.pipe.js @@ -0,0 +1,115 @@ +import "should"; +import stream from "stream"; +import { generate } from "csv-generate"; +import { transform } from "../lib/index.js"; + +describe("api.pipe", function () { + describe("source", function () { + it("in sync mode", function (next) { + const data = []; + const generator = generate({ + length: 1000, + objectMode: true, + seed: 1, + columns: 2, + }); + const transformer = generator.pipe( + transform(function (record) { + record.push(record.shift()); + return record; + }), + ); + transformer.on("readable", function () { + let d; + while ((d = transformer.read())) { + data.push(d); + } + }); + transformer.on("end", function () { + data.length.should.eql(1000); + data.slice(0, 2).should.eql([ + ["ONKCHhJmjadoA", "OMH"], + ["GeACHiN", "D"], + ]); + next(); + }); + }); + + it("in async mode", function (next) { + const data = []; + const generator = generate({ + length: 1000, + objectMode: true, + seed: 1, + columns: 2, + }); + const transformer = generator.pipe( + transform(function (record, callback) { + record.push(record.shift()); + callback(null, record); + }), + ); + transformer.on("readable", function () { + let d; + while ((d = transformer.read())) { + data.push(d); + } + }); + transformer.on("end", function () { + data.slice(0, 2).should.eql([ + ["ONKCHhJmjadoA", "OMH"], + ["GeACHiN", "D"], + ]); + next(); + }); + }); + }); + + describe("source and destination", function () { + it("in sync mode", function (next) { + this.timeout(0); + const generator = generate({ + length: 10000, + objectMode: true, + seed: 1, + columns: 2, + }); + const destination = new stream.Writable(); + destination._write = function (chunk, encoding, callback) { + setImmediate(callback); + }; + destination.on("finish", next); + generator + .pipe( + transform(function (record) { + return record.join(","); + }), + ) + .pipe(destination); + }); + + it("in async mode", function (next) { + this.timeout(0); + const generator = generate({ + length: 10000, + objectMode: true, + seed: 1, + columns: 2, + }); + const destination = new stream.Writable(); + destination._write = function (chunk, encoding, callback) { + setImmediate(callback); + }; + destination.on("finish", next); + generator + .pipe( + transform(function (record, callback) { + setImmediate(function () { + callback(null, record.join(",")); + }); + }), + ) + .pipe(destination); + }); + }); +}); diff --git a/packages/stream-transform/test/api.sync.coffee b/packages/stream-transform/test/api.sync.coffee deleted file mode 100644 index 05cbdd42..00000000 --- a/packages/stream-transform/test/api.sync.coffee +++ /dev/null @@ -1,42 +0,0 @@ - -import { transform } from '../lib/sync.js' - -describe 'api.sync', -> - - it 'accept data and handler without options', -> - data = transform [ - ['a', 'b', 'c'] - ['1', '2', '3'] - ], (record) -> - record.join '|' - data.should.eql [ - 'a|b|c' - '1|2|3' - ] - - it 'honors params option', -> - data = transform [ - ['a', 'b', 'c'] - ['1', '2', '3'] - ], params: separator: '|', (record, params) -> - record.join params.separator - data.should.eql [ - 'a|b|c' - '1|2|3' - ] - - it 'only sync handlers are supported', -> - # Without options - (-> - transform [ - ['a', 'b', 'c'] - ['1', '2', '3'] - ], ((record, callback) ->) - ).should.throw 'Invalid Handler: only synchonous handlers are supported' - # With options - (-> - transform [ - ['a', 'b', 'c'] - ['1', '2', '3'] - ], params: a_key: 'a value', ((record, callback, params) ->) - ).should.throw 'Invalid Handler: only synchonous handlers are supported' diff --git a/packages/stream-transform/test/api.sync.js b/packages/stream-transform/test/api.sync.js new file mode 100644 index 00000000..addc5270 --- /dev/null +++ b/packages/stream-transform/test/api.sync.js @@ -0,0 +1,66 @@ +import "should"; +import { transform } from "../lib/sync.js"; + +describe("api.sync", function () { + it("accept data and handler without options", function () { + const data = transform( + [ + ["a", "b", "c"], + ["1", "2", "3"], + ], + function (record) { + return record.join("|"); + }, + ); + data.should.eql(["a|b|c", "1|2|3"]); + }); + + it("honors params option", function () { + const data = transform( + [ + ["a", "b", "c"], + ["1", "2", "3"], + ], + { + params: { separator: "|" }, + }, + function (record, params) { + return record.join(params.separator); + }, + ); + data.should.eql(["a|b|c", "1|2|3"]); + }); + + it("only sync handlers are supported", function () { + // Without options + (function () { + transform( + [ + ["a", "b", "c"], + ["1", "2", "3"], + ], + function (record, callback) { + record; + callback; + }, + ); + }).should.throw("Invalid Handler: only synchonous handlers are supported"); + // With options + (function () { + transform( + [ + ["a", "b", "c"], + ["1", "2", "3"], + ], + { + params: { a_key: "a value" }, + }, + function (record, callback, params) { + record; + callback; + params; + }, + ); + }).should.throw("Invalid Handler: only synchonous handlers are supported"); + }); +}); diff --git a/packages/stream-transform/test/api.types.sync.ts b/packages/stream-transform/test/api.types.sync.ts index 8395c13f..88d2d317 100644 --- a/packages/stream-transform/test/api.types.sync.ts +++ b/packages/stream-transform/test/api.types.sync.ts @@ -1,24 +1,21 @@ +import "should"; +import { transform, Options } from "../lib/sync.js"; -import 'should' -import { transform, Options } from '../lib/sync.js' - -describe('api.types', () => { - - it('sync', () => { +describe("api.types", () => { + it("sync", () => { // With records + handler - const transformer: Array = transform( ['record'], record => record ) - transformer.should.be.an.Array() + const transformer: Array = transform(["record"], (record) => record); + transformer.should.be.an.Array(); // With records + options + handler - transform( ['record'], {consume: true}, record => record ) - }) + transform(["record"], { consume: true }, (record) => record); + }); - it('Options', () => { + it("Options", () => { (options: Options) => { const consume: boolean | undefined = options.consume; - const parallel: number | undefined = options.parallel - const params: number = options.params - return {consume, parallel, params} - } - }) - -}) + const parallel: number | undefined = options.parallel; + const params: number = options.params; + return { consume, parallel, params }; + }; + }); +}); diff --git a/packages/stream-transform/test/api.types.ts b/packages/stream-transform/test/api.types.ts index 6703617e..39aea113 100644 --- a/packages/stream-transform/test/api.types.ts +++ b/packages/stream-transform/test/api.types.ts @@ -1,81 +1,76 @@ +import "should"; +import { transform, Options, Transformer } from "../lib/index.js"; -import 'should' -import { transform, Options, Transformer } from '../lib/index.js' - -describe('api.types', () => { - - describe('Initialisation', () => { - - it('stream', () => { +describe("api.types", () => { + describe("Initialisation", () => { + it("stream", () => { // With handler - const transformer: Transformer = transform( record => record ) - transformer.should.be.an.Object() + const transformer: Transformer = transform((record) => record); + transformer.should.be.an.Object(); // With handler + callback - transform( record => record, (err, records) => err || records ) + transform( + (record) => record, + (err, records) => err || records, + ); // With records + handler - transform( ['record'], record => record ) + transform(["record"], (record) => record); // With options + handler - transform( {consume: true}, record => record ) + transform({ consume: true }, (record) => record); // With records + options + handler - transform( ['record'], {consume: true}, record => record ) + transform(["record"], { consume: true }, (record) => record); // With records + options + handler + callback - transform( ['record'], {consume: true}, record => record, (err, records) => err || records ) - }) - - }) - - describe('Parser', () => { - - it('Expose options', () => { - const transformer: Transformer = transform( record => record ) - const options: Options = transformer.options - const keys: any = Object.keys(options) - keys.sort().should.eql([ - 'consume', 'objectMode', 'parallel', 'params' - ]) - }) - - }) - - describe('Options', () => { - - it('consume', () => { - const options: Options = {} - options.consume = true - }) - - it('parallel', () => { - const options: Options = {} - options.parallel = 100 - }) - - it('params', () => { - const options: Options = {} - options.params = { my_key: 'my value' } - }) - - }) - - describe('State', () => { - - it('finished', () => { - const transformer: Transformer = transform( record => record ) - const finished: number = transformer.state.finished - finished.should.eql(0) - }) - - it('running', () => { - const transformer: Transformer = transform( record => record ) - const running: number = transformer.state.running - running.should.eql(0) - }) - - it('started', () => { - const transformer: Transformer = transform( record => record ) - const started: number = transformer.state.started - started.should.eql(0) - }) - - }) - -}) + transform( + ["record"], + { consume: true }, + (record) => record, + (err, records) => err || records, + ); + }); + }); + + describe("Parser", () => { + it("Expose options", () => { + const transformer: Transformer = transform((record) => record); + const options: Options = transformer.options; + const keys: any = Object.keys(options); + keys.sort().should.eql(["consume", "objectMode", "parallel", "params"]); + }); + }); + + describe("Options", () => { + it("consume", () => { + const options: Options = {}; + options.consume = true; + }); + + it("parallel", () => { + const options: Options = {}; + options.parallel = 100; + }); + + it("params", () => { + const options: Options = {}; + options.params = { my_key: "my value" }; + }); + }); + + describe("State", () => { + it("finished", () => { + const transformer: Transformer = transform((record) => record); + const finished: number = transformer.state.finished; + finished.should.eql(0); + }); + + it("running", () => { + const transformer: Transformer = transform((record) => record); + const running: number = transformer.state.running; + running.should.eql(0); + }); + + it("started", () => { + const transformer: Transformer = transform((record) => record); + const started: number = transformer.state.started; + started.should.eql(0); + }); + }); +}); diff --git a/packages/stream-transform/test/handler.async.coffee b/packages/stream-transform/test/handler.async.coffee deleted file mode 100644 index 5930d9d4..00000000 --- a/packages/stream-transform/test/handler.async.coffee +++ /dev/null @@ -1,135 +0,0 @@ - -import { transform } from '../lib/index.js' - -describe 'handler.async', -> - - it 'modify the received object', (next) -> - transform [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','DEF','23','2050-11-27' ] - [ '83929843999','1944','8.8349294E2','HIJ','17','2060-08-28' ] - ], (record, callback) -> - process.nextTick -> - record.push record.shift() - callback null, record - , (err, data) -> - return next err if err - data.should.eql [ - [ '1979','8.8017226E7','ABC','45','2000-01-01', '20322051544' ] - [ '1974','8.8392926E7','DEF','23','2050-11-27', '28392898392' ] - [ '1944','8.8349294E2','HIJ','17','2060-08-28', '83929843999' ] - ] - next() - - it 'skip lines when undefined is returned', (next) -> - transform [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','DEF','23','2050-11-27' ] - [ '83929843999','1944','8.8349294E2','HIJ','17','2060-08-28' ] - ], (record, callback) -> - process.nextTick callback - , (err, data) -> - return next err if err - data.should.eql [] - next() - - it 'skip lines when undefined is returned', (next) -> - index = 0 - transform [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','DEF','23','2050-11-27' ] - [ '83929843999','1944','8.8349294E2','HIJ','17','2060-08-28' ] - [ '47191084482','1978','8.8392926E7','2FF','23','2064-02-15' ] - ], (record, callback) -> - process.nextTick -> - index++ - callback null, if index % 2 then record else null - , (err, data) -> - return next err if err - data.should.eql [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '83929843999','1944','8.8349294E2','HIJ','17','2060-08-28' ] - ] - next() - - it 'receive an array and return an object', (next) -> - transform [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','DEF','23','2050-11-27' ] - ], (record, callback) -> - process.nextTick -> - callback null, field_1: record[4], field_2: record[3] - , (err, data) -> - return next err if err - data.should.eql [ - { field_1: '45', field_2: 'ABC' } - { field_1: '23', field_2: 'DEF' } - ] - next() - - it 'should accept a returned string', (next) -> - index = -1 - transform [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','DEF','23','2050-11-27' ] - ], (record, callback) -> - process.nextTick -> - index++ - callback null, ( if index > 0 then ',' else '' ) + "#{record[4]}:#{record[3]}" - , (err, data) -> - return next err if err - data.join('').should.eql '45:ABC,23:DEF' - next() - - it 'should accept a returned number', (next) -> - index = 0 - transform [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','DEF','23','2050-11-27' ] - [ '83929843999','1944','8.8349294E2','HIJ','17','2060-08-28' ] - ], (record, callback) -> - process.nextTick -> - callback null, index++ - , (err, data) -> - return next err if err - data.join('').should.eql '012' - next() - - it 'should accept a returned array with different types', (next) -> - transform [ - [ '20322051544','1979','8.8017226E7','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','2050-11-27' ] - [ '83929843999','1944','8.8349294E2','2060-08-28' ] - ], (record, callback) -> - process.nextTick -> - [year, month, day] = record[3].split('-') - callback null, [parseInt(record[0]), parseFloat(record[2]) ,Date.UTC(year, month, day)] - , (err, data) -> - return next err if err - data.should.eql [ - [ 20322051544, 88017226, 949363200000 ] - [ 28392898392, 88392926, 2555712000000 ] - [ 83929843999, 883.49294, 2863555200000 ] - ] - next() - - it 'should accept multiple emit', (next) -> - chunks = [ - [ '28392898392','1974','8.8392926E7','DEF','23','2050-11-27' ] - [ '47191084482','1978','8.8392926E7','2FF','23','2064-02-15' ] - ] - transform [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '83929843999','1944','8.8349294E2','HIJ','17','2060-08-28' ] - ], (record, callback) -> - process.nextTick -> - callback null, record, chunks.shift() - , (err, data) -> - return next err if err - data.should.eql [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','DEF','23','2050-11-27' ] - [ '83929843999','1944','8.8349294E2','HIJ','17','2060-08-28' ] - [ '47191084482','1978','8.8392926E7','2FF','23','2064-02-15' ] - ] - next() diff --git a/packages/stream-transform/test/handler.async.js b/packages/stream-transform/test/handler.async.js new file mode 100644 index 00000000..45388a20 --- /dev/null +++ b/packages/stream-transform/test/handler.async.js @@ -0,0 +1,194 @@ +import "should"; +import { transform } from "../lib/index.js"; + +describe("handler.async", function () { + it("modify the received object", function (next) { + transform( + [ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ["83929843999", "1944", "8.8349294E2", "HIJ", "17", "2060-08-28"], + ], + function (record, callback) { + process.nextTick(function () { + record.push(record.shift()); + callback(null, record); + }); + }, + function (err, data) { + if (err) return next(err); + data.should.eql([ + ["1979", "8.8017226E7", "ABC", "45", "2000-01-01", "20322051544"], + ["1974", "8.8392926E7", "DEF", "23", "2050-11-27", "28392898392"], + ["1944", "8.8349294E2", "HIJ", "17", "2060-08-28", "83929843999"], + ]); + next(); + }, + ); + }); + + it("skip all records when undefined", function (next) { + transform( + [ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ["83929843999", "1944", "8.8349294E2", "HIJ", "17", "2060-08-28"], + ], + function (record, callback) { + process.nextTick(callback); + }, + function (err, data) { + if (err) return next(err); + data.should.eql([]); + next(); + }, + ); + }); + + it("skip individual records when undefined", function (next) { + let index = 0; + transform( + [ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ["83929843999", "1944", "8.8349294E2", "HIJ", "17", "2060-08-28"], + ["47191084482", "1978", "8.8392926E7", "2FF", "23", "2064-02-15"], + ], + function (record, callback) { + process.nextTick(function () { + index++; + callback(null, index % 2 ? record : null); + }); + }, + function (err, data) { + if (err) return next(err); + data.should.eql([ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["83929843999", "1944", "8.8349294E2", "HIJ", "17", "2060-08-28"], + ]); + next(); + }, + ); + }); + + it("receive an array and return an object", function (next) { + transform( + [ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ], + function (record, callback) { + process.nextTick(function () { + callback(null, { field_1: record[4], field_2: record[3] }); + }); + }, + function (err, data) { + if (err) return next(err); + data.should.eql([ + { field_1: "45", field_2: "ABC" }, + { field_1: "23", field_2: "DEF" }, + ]); + next(); + }, + ); + }); + + it("should accept a returned string", function (next) { + let index = -1; + transform( + [ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ], + function (record, callback) { + process.nextTick(function () { + index++; + callback(null, (index > 0 ? "," : "") + `${record[4]}:${record[3]}`); + }); + }, + function (err, data) { + if (err) return next(err); + data.join("").should.eql("45:ABC,23:DEF"); + next(); + }, + ); + }); + + it("should accept a returned number", function (next) { + let index = 0; + transform( + [ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ["83929843999", "1944", "8.8349294E2", "HIJ", "17", "2060-08-28"], + ], + function (record, callback) { + process.nextTick(function () { + callback(null, index++); + }); + }, + function (err, data) { + if (err) return next(err); + data.join("").should.eql("012"); + next(); + }, + ); + }); + + it("should accept a returned array with different types", function (next) { + transform( + [ + ["20322051544", "1979", "8.8017226E7", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "2050-11-27"], + ["83929843999", "1944", "8.8349294E2", "2060-08-28"], + ], + function (record, callback) { + process.nextTick(function () { + const [year, month, day] = record[3].split("-"); + callback(null, [ + parseInt(record[0]), + parseFloat(record[2]), + Date.UTC(year, month, day), + ]); + }); + }, + function (err, data) { + if (err) return next(err); + data.should.eql([ + [20322051544, 88017226, 949363200000], + [28392898392, 88392926, 2555712000000], + [83929843999, 883.49294, 2863555200000], + ]); + next(); + }, + ); + }); + + it("should accept multiple emit", function (next) { + const chunks = [ + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ["47191084482", "1978", "8.8392926E7", "2FF", "23", "2064-02-15"], + ]; + transform( + [ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["83929843999", "1944", "8.8349294E2", "HIJ", "17", "2060-08-28"], + ], + function (record, callback) { + process.nextTick(function () { + callback(null, record, chunks.shift()); + }); + }, + function (err, data) { + if (err) return next(err); + data.should.eql([ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ["83929843999", "1944", "8.8349294E2", "HIJ", "17", "2060-08-28"], + ["47191084482", "1978", "8.8392926E7", "2FF", "23", "2064-02-15"], + ]); + next(); + }, + ); + }); +}); diff --git a/packages/stream-transform/test/handler.coffee b/packages/stream-transform/test/handler.coffee deleted file mode 100644 index 9059e76e..00000000 --- a/packages/stream-transform/test/handler.coffee +++ /dev/null @@ -1,24 +0,0 @@ - -import { transform } from '../lib/index.js' - -describe 'handler', -> - - it 'context sync', (next) -> - transformer = transform [ - [ 'a','b','c' ] - [ '1','2','3' ] - ], (record) -> - transformer.should.eql this - return record - , next - - it 'context async', (next) -> - transformer = transform [ - [ 'a','b','c' ] - [ '1','2','3' ] - ], (record, callback) -> - transformer.should.eql this - callback null, record - , next - - diff --git a/packages/stream-transform/test/handler.js b/packages/stream-transform/test/handler.js new file mode 100644 index 00000000..a2915731 --- /dev/null +++ b/packages/stream-transform/test/handler.js @@ -0,0 +1,32 @@ +import "should"; +import { transform } from "../lib/index.js"; + +describe("handler", function () { + it("context sync", function (next) { + const transformer = transform( + [ + ["a", "b", "c"], + ["1", "2", "3"], + ], + function (record) { + transformer.should.eql(this); + return record; + }, + next, + ); + }); + + it("context async", function (next) { + const transformer = transform( + [ + ["a", "b", "c"], + ["1", "2", "3"], + ], + function (record, callback) { + transformer.should.eql(this); + callback(null, record); + }, + next, + ); + }); +}); diff --git a/packages/stream-transform/test/handler.mode.callback.coffee b/packages/stream-transform/test/handler.mode.callback.coffee deleted file mode 100644 index d034b9b7..00000000 --- a/packages/stream-transform/test/handler.mode.callback.coffee +++ /dev/null @@ -1,47 +0,0 @@ - -import { Writable } from 'node:stream' -import { pipeline } from 'node:stream/promises' -import { generate } from 'csv-generate' -import { transform } from '../lib/index.js' - -describe 'handler.mode.callback', -> - - it 'handler with callback with parallel 1', -> - chunks = [] - consumer = new Writable - write: (chunk, _, callback) -> - chunks.push chunk.toString() - callback() - await pipeline( - generate length: 1000 - , - transform parallel: 1, (chunk, callback) -> - setImmediate -> - callback null, chunk - , - consumer - ) - chunks.join('').split('\n').length.should.eql 1000 - - it 'handler with callback with parallel 2', -> - count = 0 - clear = setInterval -> - count++ - , 10 - chunks = [] - consumer = new Writable - write: (chunk, _, callback) -> - chunks.push chunk.toString() - callback() - await pipeline( - generate columns: 10, objectMode: true, length: 1000, seed: true - , - transform parallel: 2, (chunk, callback) -> - setTimeout -> - callback null, JSON.stringify(chunk)+'\n' - , 1 - , - consumer - ) - clearInterval(clear) - count.should.be.above 1 diff --git a/packages/stream-transform/test/handler.mode.callback.error.coffee b/packages/stream-transform/test/handler.mode.callback.error.coffee deleted file mode 100644 index 152d24f3..00000000 --- a/packages/stream-transform/test/handler.mode.callback.error.coffee +++ /dev/null @@ -1,56 +0,0 @@ - -import { Writable } from 'node:stream' -import { pipeline } from 'node:stream/promises' -import { generate } from 'csv-generate' -import { stringify } from 'csv-stringify' -import { transform } from '../lib/index.js' - -describe 'handler.mode.callback.error', -> - - it 'with parallel 1', -> - count = 0 - consumer = new Writable - write: (_, __, callback) -> - callback() - try - await pipeline( - generate length: 1000, highWaterMark: 1 - , - transform parallel: 1, highWaterMark: 1, (chunk, callback) -> - setImmediate -> - if ++count < 4 - callback null, chunk - else - callback new Error 'Catchme' - , - consumer - ) - throw Error 'Oh no!' - catch err - count.should.eql 4 - err.message.should.eql 'Catchme' - - it 'handler with callback with parallel 10', -> - count = 0 - consumer = new Writable - objectMode: true, - write: (_, __, callback) -> - callback() - try - await pipeline( - generate length: 1000, objectMode: true - , - transform parallel: 10, (record, callback) -> - setTimeout -> - if ++count < 4 - callback null, record - else - callback new Error 'Catchme' - , 10 - , - consumer - ) - throw Error 'Oh no!' - catch err - count.should.eql 4 - err.message.should.eql 'Catchme' diff --git a/packages/stream-transform/test/handler.mode.callback.error.js b/packages/stream-transform/test/handler.mode.callback.error.js new file mode 100644 index 00000000..26d8d03c --- /dev/null +++ b/packages/stream-transform/test/handler.mode.callback.error.js @@ -0,0 +1,67 @@ +import "should"; +import { Writable } from "node:stream"; +import { pipeline } from "node:stream/promises"; +import { generate } from "csv-generate"; +import { transform } from "../lib/index.js"; + +describe("handler.mode.callback.error", function () { + it("with parallel 1", async function () { + let count = 0; + const consumer = new Writable({ + write: function (_, __, callback) { + callback(); + }, + }); + try { + await pipeline( + generate({ length: 1000, highWaterMark: 1 }), + transform( + { parallel: 1, highWaterMark: 1 }, + function (chunk, callback) { + setImmediate(function () { + if (++count < 4) { + callback(null, chunk); + } else { + callback(new Error("Catchme")); + } + }); + }, + ), + consumer, + ); + throw Error("Oh no!"); + } catch (err) { + count.should.eql(4); + err.message.should.eql("Catchme"); + } + }); + + it("handler with callback with parallel 10", async function () { + let count = 0; + const consumer = new Writable({ + objectMode: true, + write: function (_, __, callback) { + callback(); + }, + }); + try { + await pipeline( + generate({ length: 1000, objectMode: true }), + transform({ parallel: 10 }, function (record, callback) { + setTimeout(function () { + if (++count < 4) { + callback(null, record); + } else { + callback(new Error("Catchme")); + } + }, 10); + }), + consumer, + ); + throw Error("Oh no!"); + } catch (err) { + count.should.eql(4); + err.message.should.eql("Catchme"); + } + }); +}); diff --git a/packages/stream-transform/test/handler.mode.callback.js b/packages/stream-transform/test/handler.mode.callback.js new file mode 100644 index 00000000..140a4609 --- /dev/null +++ b/packages/stream-transform/test/handler.mode.callback.js @@ -0,0 +1,57 @@ +import "should"; +import { Writable } from "node:stream"; +import { pipeline } from "node:stream/promises"; +import { generate } from "csv-generate"; +import { transform } from "../lib/index.js"; + +describe("handler.mode.callback", function () { + it("handler with callback with parallel 1", async function () { + const chunks = []; + const consumer = new Writable({ + write: function (chunk, _, callback) { + chunks.push(chunk.toString()); + callback(); + }, + }); + await pipeline( + generate({ length: 1000 }), + transform({ parallel: 1 }, function (chunk, callback) { + setImmediate(function () { + callback(null, chunk); + }); + }), + consumer, + ); + chunks.join("").split("\n").length.should.eql(1000); + }); + + it("handler with callback with parallel 2", async function () { + let count = 0; + const clear = setInterval(function () { + count++; + }, 10); + const chunks = []; + const consumer = new Writable({ + write: function (chunk, _, callback) { + chunks.push(chunk.toString()); + callback(); + }, + }); + await pipeline( + generate({ + columns: 10, + objectMode: true, + length: 1000, + seed: true, + }), + transform({ parallel: 2 }, function (chunk, callback) { + setTimeout(function () { + callback(null, JSON.stringify(chunk) + "\n"); + }, 1); + }), + consumer, + ); + clearInterval(clear); + count.should.be.above(1); + }); +}); diff --git a/packages/stream-transform/test/handler.mode.sync.coffee b/packages/stream-transform/test/handler.mode.sync.coffee deleted file mode 100644 index c35e473b..00000000 --- a/packages/stream-transform/test/handler.mode.sync.coffee +++ /dev/null @@ -1,145 +0,0 @@ - -import { generate } from 'csv-generate' -import { transform } from '../lib/index.js' - -describe 'handler.mode.sync', -> - - describe 'api', -> - - it 'take array, handler and pipe', (next) -> - t = transform [ - ['1','2','3','4'], - ['a','b','c','d'] - ], (data) -> - data.push data.shift() - data.join(',') + '\n' - results = '' - t.on 'readable', -> - while(r = t.read()) then results += r - t.on 'error', next - t.on 'end', -> - results.should.eql '2,3,4,1\nb,c,d,a\n' - next() - - it 'take array, handler, callback', (next) -> - transform [ - [ '1', '2', '3', '4' ] - [ 'a', 'b', 'c', 'd' ] - ], (data) -> - data.push data.shift() - data.join(',') + '\n' - , (err, output) -> - output.should.eql [ '2,3,4,1\n', 'b,c,d,a\n' ] - next() - - it 'modify the recieved object', (next) -> - - transform [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','DEF','23','2050-11-27' ] - [ '83929843999','1944','8.8349294E2','HIJ','17','2060-08-28' ] - ], (record) -> - record.push record.shift() - record - , (err, data) -> - return next err if err - data.should.eql [ - [ '1979','8.8017226E7','ABC','45','2000-01-01', '20322051544' ] - [ '1974','8.8392926E7','DEF','23','2050-11-27', '28392898392' ] - [ '1944','8.8349294E2','HIJ','17','2060-08-28', '83929843999' ] - ] - next() - - it 'skip all lines when undefined is returned', (next) -> - transform [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','DEF','23','2050-11-27' ] - [ '83929843999','1944','8.8349294E2','HIJ','17','2060-08-28' ] - ], (record) -> - null - , (err, data) -> - return next err if err - data.should.eql [] - next() - - it 'skip lines when undefined is returned', (next) -> - index = 0 - transform [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','DEF','23','2050-11-27' ] - [ '83929843999','1944','8.8349294E2','HIJ','17','2060-08-28' ] - [ '47191084482','1978','8.8392926E7','2FF','23','2064-02-15' ] - ], (record) -> - index++ - if index % 2 then record else null - , (err, data) -> - return next err if err - data.should.eql [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '83929843999','1944','8.8349294E2','HIJ','17','2060-08-28' ] - ] - next() - - it 'recieve an array and return an object', (next) -> - transform [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','DEF','23','2050-11-27' ] - ], (record) -> - field_1: record[4], field_2: record[3] - , (err, data) -> - return next err if err - data.should.eql [ - { field_1: '45', field_2: 'ABC' } - { field_1: '23', field_2: 'DEF' } - ] - next() - - it 'should accept a returned string', (next) -> - index = -1 - transform [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','DEF','23','2050-11-27' ] - ], (record) -> - index++ - ( if index > 0 then ',' else '' ) + "#{record[4]}:#{record[3]}" - , (err, data) -> - return next err if err - data.join('').should.eql '45:ABC,23:DEF' - next() - - it 'should accept a returned number', (next) -> - index = 0 - transform [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','DEF','23','2050-11-27' ] - [ '83929843999','1944','8.8349294E2','HIJ','17','2060-08-28' ] - ], (record) -> - index++ - , (err, data) -> - return next err if err - data.join('').should.eql '012' - next() - - it 'should accept a returned array with different types', (next) -> - transform [ - [ '20322051544','1979','8.8017226E7','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','2050-11-27' ] - [ '83929843999','1944','8.8349294E2','2060-08-28' ] - ], (record) -> - [year, month, day] = record[3].split('-') - [parseInt(record[0]), parseFloat(record[2]) ,Date.UTC(year, month, day)] - , (err, data) -> - return next err if err - data.should.eql [ - [ 20322051544, 88017226, 949363200000 ] - [ 28392898392, 88392926, 2555712000000 ] - [ 83929843999, 883.49294, 2863555200000 ] - ] - next() - - describe 'behavior', -> - - it 'respect order', -> - generate length: 1000, objectMode: true, seed: 1, columns: 2, (err, source) -> - transform source, parralel: 1, ((record) -> record), (err, result) -> - result.should.eql source diff --git a/packages/stream-transform/test/handler.mode.sync.error.coffee b/packages/stream-transform/test/handler.mode.sync.error.coffee deleted file mode 100644 index c125ea17..00000000 --- a/packages/stream-transform/test/handler.mode.sync.error.coffee +++ /dev/null @@ -1,38 +0,0 @@ - -import { generate } from 'csv-generate' -import { transform } from '../lib/index.js' - -describe 'handler.mode.sync.error', -> - - it 'catch using stream api', (next) -> - transformer = transform (record) -> - throw new Error 'Custom Error' - transformer.on 'error', (err) -> - err.message.should.eql 'Custom Error' - next() - transformer.on 'finish', -> - next new Error 'Should not be called' - transformer.write [ 'trigger 1', 'trigger 2' ] - - it 'catch using pipe api', (next) -> - generator = generate length: 1000, objectMode: true, seed: 1, headers: 2 - transformer = generator.pipe transform (record) -> - throw new Error 'Custom Error' - transformer.on 'error', (err) -> - err.message.should.eql 'Custom Error' - next() - transformer.on 'finish', -> - next new Error 'Should not be called' - transformer.write [ 'trigger 1', 'trigger 2' ] - - it 'catch using callback api', (next) -> - transform [ - [ 'trigger 1' ] - [ 'trigger 2' ] - [ 'trigger 3' ] - ], (record) -> - throw new Error 'Custom Error' - , (err, data) -> - # thrown multiple times for now - err.message.should.eql 'Custom Error' - next() diff --git a/packages/stream-transform/test/handler.mode.sync.error.js b/packages/stream-transform/test/handler.mode.sync.error.js new file mode 100644 index 00000000..e048c251 --- /dev/null +++ b/packages/stream-transform/test/handler.mode.sync.error.js @@ -0,0 +1,58 @@ +import "should"; +import { generate } from "csv-generate"; +import { transform } from "../lib/index.js"; + +describe("handler.mode.sync.error", function () { + it("catch using stream api", function (next) { + const transformer = transform((record) => { + record; + throw new Error("Custom Error"); + }); + transformer.on("error", (err) => { + err.message.should.eql("Custom Error"); + next(); + }); + transformer.on("finish", () => { + next(new Error("Should not be called")); + }); + transformer.write(["trigger 1", "trigger 2"]); + }); + + it("catch using pipe api", function (next) { + const generator = generate({ + length: 1000, + objectMode: true, + seed: 1, + headers: 2, + }); + const transformer = generator.pipe( + transform((record) => { + record; + throw new Error("Custom Error"); + }), + ); + transformer.on("error", (err) => { + err.message.should.eql("Custom Error"); + next(); + }); + transformer.on("finish", () => { + next(new Error("Should not be called")); + }); + transformer.write(["trigger 1", "trigger 2"]); + }); + + it("catch using callback api", function (next) { + transform( + [["trigger 1"], ["trigger 2"], ["trigger 3"]], + (record) => { + record; + throw new Error("Custom Error"); + }, + (err) => { + // thrown multiple times for now + err.message.should.eql("Custom Error"); + next(); + }, + ); + }); +}); diff --git a/packages/stream-transform/test/handler.mode.sync.js b/packages/stream-transform/test/handler.mode.sync.js new file mode 100644 index 00000000..5cb1c22a --- /dev/null +++ b/packages/stream-transform/test/handler.mode.sync.js @@ -0,0 +1,212 @@ +import "should"; +import { generate } from "csv-generate"; +import { transform } from "../lib/index.js"; + +describe("handler.mode.sync", function () { + describe("api", function () { + it("take array, handler and pipe", function (next) { + const t = transform( + [ + ["1", "2", "3", "4"], + ["a", "b", "c", "d"], + ], + (data) => { + data.push(data.shift()); + return data.join(",") + "\n"; + }, + ); + let results = ""; + t.on("readable", () => { + let r; + while ((r = t.read())) results += r; + }); + t.on("error", next); + t.on("end", () => { + results.should.eql("2,3,4,1\nb,c,d,a\n"); + next(); + }); + }); + + it("take array, handler, callback", function (next) { + transform( + [ + ["1", "2", "3", "4"], + ["a", "b", "c", "d"], + ], + (data) => { + data.push(data.shift()); + return data.join(",") + "\n"; + }, + (err, output) => { + output.should.eql(["2,3,4,1\n", "b,c,d,a\n"]); + next(); + }, + ); + }); + }); + + it("modify the recieved object", function (next) { + transform( + [ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ["83929843999", "1944", "8.8349294E2", "HIJ", "17", "2060-08-28"], + ], + (record) => { + record.push(record.shift()); + return record; + }, + (err, data) => { + if (err) return next(err); + data.should.eql([ + ["1979", "8.8017226E7", "ABC", "45", "2000-01-01", "20322051544"], + ["1974", "8.8392926E7", "DEF", "23", "2050-11-27", "28392898392"], + ["1944", "8.8349294E2", "HIJ", "17", "2060-08-28", "83929843999"], + ]); + next(); + }, + ); + }); + + it("skip all lines when undefined is returned", function (next) { + transform( + [ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ["83929843999", "1944", "8.8349294E2", "HIJ", "17", "2060-08-28"], + ], + (record) => { + record; + }, + (err, data) => { + if (err) return next(err); + data.should.eql([]); + next(); + }, + ); + }); + + it("skip lines when undefined is returned", function (next) { + let index = 0; + transform( + [ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ["83929843999", "1944", "8.8349294E2", "HIJ", "17", "2060-08-28"], + ["47191084482", "1978", "8.8392926E7", "2FF", "23", "2064-02-15"], + ], + (record) => { + index++; + return index % 2 ? record : null; + }, + (err, data) => { + if (err) return next(err); + data.should.eql([ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["83929843999", "1944", "8.8349294E2", "HIJ", "17", "2060-08-28"], + ]); + next(); + }, + ); + }); + + it("recieve an array and return an object", function (next) { + transform( + [ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ], + (record) => ({ field_1: record[4], field_2: record[3] }), + (err, data) => { + if (err) return next(err); + data.should.eql([ + { field_1: "45", field_2: "ABC" }, + { field_1: "23", field_2: "DEF" }, + ]); + next(); + }, + ); + }); + + it("should accept a returned string", function (next) { + let index = -1; + transform( + [ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ], + (record) => { + index++; + return (index > 0 ? "," : "") + `${record[4]}:${record[3]}`; + }, + (err, data) => { + if (err) return next(err); + data.join("").should.eql("45:ABC,23:DEF"); + next(); + }, + ); + }); + + it("should accept a returned number", function (next) { + let index = 0; + transform( + [ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ["83929843999", "1944", "8.8349294E2", "HIJ", "17", "2060-08-28"], + ], + (record) => { + record; + return index++; + }, + (err, data) => { + if (err) return next(err); + data.join("").should.eql("012"); + next(); + }, + ); + }); + + it("should accept a returned array with different types", function (next) { + transform( + [ + ["20322051544", "1979", "8.8017226E7", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "2050-11-27"], + ["83929843999", "1944", "8.8349294E2", "2060-08-28"], + ], + (record) => { + const [year, month, day] = record[3].split("-"); + return [ + parseInt(record[0]), + parseFloat(record[2]), + Date.UTC(year, month, day), + ]; + }, + (err, data) => { + if (err) return next(err); + data.should.eql([ + [20322051544, 88017226, 949363200000], + [28392898392, 88392926, 2555712000000], + [83929843999, 883.49294, 2863555200000], + ]); + next(); + }, + ); + }); + + describe("behavior", function () { + it("respect order", function () { + generate( + { length: 1000, objectMode: true, seed: 1, columns: 2 }, + function (err, source) { + transform( + source, + { parralel: 1 }, + (record) => record, + (err, result) => result.should.eql(source), + ); + }, + ); + }); + }); +}); diff --git a/packages/stream-transform/test/handler.promise.coffee b/packages/stream-transform/test/handler.promise.coffee deleted file mode 100644 index 56c98dbf..00000000 --- a/packages/stream-transform/test/handler.promise.coffee +++ /dev/null @@ -1,38 +0,0 @@ - -import { transform } from '../lib/index.js' - -describe 'handler.promise', -> - - it 'handle records', (next) -> - transform [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','DEF','23','2050-11-27' ] - [ '83929843999','1944','8.8349294E2','HIJ','17','2060-08-28' ] - ], (record) -> - new Promise (resolve) -> - process.nextTick -> - record.push record.shift() - resolve record - , (err, data) -> - return next err if err - data.should.eql [ - [ '1979','8.8017226E7','ABC','45','2000-01-01', '20322051544' ] - [ '1974','8.8392926E7','DEF','23','2050-11-27', '28392898392' ] - [ '1944','8.8349294E2','HIJ','17','2060-08-28', '83929843999' ] - ] - next() - - it 'handle errors', (next) -> - transform [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','DEF','23','2050-11-27' ] - [ '83929843999','1944','8.8349294E2','HIJ','17','2060-08-28' ] - ], (record) -> - new Promise (_, reject) -> - process.nextTick -> - record.push record.shift() - reject new Error('Catchme') - , (err, data) -> - err.message.should.eql 'Catchme' - next() - diff --git a/packages/stream-transform/test/handler.promise.js b/packages/stream-transform/test/handler.promise.js new file mode 100644 index 00000000..e45085a5 --- /dev/null +++ b/packages/stream-transform/test/handler.promise.js @@ -0,0 +1,53 @@ +import "should"; +import { transform } from "../lib/index.js"; + +describe("handler.promise", function () { + it("handle records", function (next) { + transform( + [ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ["83929843999", "1944", "8.8349294E2", "HIJ", "17", "2060-08-28"], + ], + (record) => { + return new Promise((resolve) => { + process.nextTick(() => { + record.push(record.shift()); + resolve(record); + }); + }); + }, + (err, data) => { + if (err) return next(err); + data.should.eql([ + ["1979", "8.8017226E7", "ABC", "45", "2000-01-01", "20322051544"], + ["1974", "8.8392926E7", "DEF", "23", "2050-11-27", "28392898392"], + ["1944", "8.8349294E2", "HIJ", "17", "2060-08-28", "83929843999"], + ]); + next(); + }, + ); + }); + + it("handle errors", function (next) { + transform( + [ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ["83929843999", "1944", "8.8349294E2", "HIJ", "17", "2060-08-28"], + ], + (record) => { + return new Promise((_, reject) => { + process.nextTick(() => { + record.push(record.shift()); + reject(new Error("Catchme")); + }); + }); + }, + (err) => { + err.message.should.eql("Catchme"); + next(); + }, + ); + }); +}); diff --git a/packages/stream-transform/test/handler.types.coffee b/packages/stream-transform/test/handler.types.coffee deleted file mode 100644 index 3976aea6..00000000 --- a/packages/stream-transform/test/handler.types.coffee +++ /dev/null @@ -1,43 +0,0 @@ - -import { transform } from '../lib/index.js' - -describe 'handler.types', -> - - it 'receive object and add new column', (next) -> - transform [ - { FIELD_1: '20322051544', FIELD_2: '1979', FIELD_3: 'ABC' } - { FIELD_1: '28392898392', FIELD_2: '1974', FIELD_3: 'DEF' } - { FIELD_1: '83929843999', FIELD_2: '1944', FIELD_3: 'HIJ' } - ], (record) -> - record.should.not.be.an.Array - record.FIELD_4 = 'new_field' - record - , (err, data) -> - return next err if err - data.should.eql [ - { FIELD_1: '20322051544', FIELD_2: '1979', FIELD_3: 'ABC', FIELD_4: 'new_field' } - { FIELD_1: '28392898392', FIELD_2: '1974', FIELD_3: 'DEF', FIELD_4: 'new_field' } - { FIELD_1: '83929843999', FIELD_2: '1944', FIELD_3: 'HIJ', FIELD_4: 'new_field' } - ] - next() - - it 'receive string and return object', (next) -> - transform [ - '20322-051544' - '28392-898392' - '83929-843999' - ], (record) -> - record.should.not.be.an.Array - [value_1, value_2] = record.split '-' - record = - FIELD_1: value_1 - FIELD_2: value_2 - record - , (err, data) -> - return next err if err - data.should.eql [ - { FIELD_1: '20322', FIELD_2: '051544' } - { FIELD_1: '28392', FIELD_2: '898392' } - { FIELD_1: '83929', FIELD_2: '843999' } - ] - next() diff --git a/packages/stream-transform/test/handler.types.js b/packages/stream-transform/test/handler.types.js new file mode 100644 index 00000000..8f3d696b --- /dev/null +++ b/packages/stream-transform/test/handler.types.js @@ -0,0 +1,66 @@ +import { transform } from "../lib/index.js"; + +describe("handler.types", function () { + it("receive object and add new column", function (next) { + transform( + [ + { FIELD_1: "20322051544", FIELD_2: "1979", FIELD_3: "ABC" }, + { FIELD_1: "28392898392", FIELD_2: "1974", FIELD_3: "DEF" }, + { FIELD_1: "83929843999", FIELD_2: "1944", FIELD_3: "HIJ" }, + ], + (record) => { + record.should.not.be.an.Array; + record.FIELD_4 = "new_field"; + return record; + }, + (err, data) => { + if (err) return next(err); + data.should.eql([ + { + FIELD_1: "20322051544", + FIELD_2: "1979", + FIELD_3: "ABC", + FIELD_4: "new_field", + }, + { + FIELD_1: "28392898392", + FIELD_2: "1974", + FIELD_3: "DEF", + FIELD_4: "new_field", + }, + { + FIELD_1: "83929843999", + FIELD_2: "1944", + FIELD_3: "HIJ", + FIELD_4: "new_field", + }, + ]); + next(); + }, + ); + }); + + it("receive string and return object", function (next) { + transform( + ["20322-051544", "28392-898392", "83929-843999"], + (record) => { + record.should.not.be.an.Array; + const [value_1, value_2] = record.split("-"); + record = { + FIELD_1: value_1, + FIELD_2: value_2, + }; + return record; + }, + (err, data) => { + if (err) return next(err); + data.should.eql([ + { FIELD_1: "20322", FIELD_2: "051544" }, + { FIELD_1: "28392", FIELD_2: "898392" }, + { FIELD_1: "83929", FIELD_2: "843999" }, + ]); + next(); + }, + ); + }); +}); diff --git a/packages/stream-transform/test/loaders/all.js b/packages/stream-transform/test/loaders/all.js deleted file mode 100644 index 4e81c344..00000000 --- a/packages/stream-transform/test/loaders/all.js +++ /dev/null @@ -1,15 +0,0 @@ -import * as coffee from "./coffee.js"; -import * as ts from "ts-node/esm"; - -const coffeeRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; -const tsRegex = /\.ts$/; - -export function load(url, context, next) { - if (coffeeRegex.test(url)) { - return coffee.load.apply(this, arguments); - } - if (tsRegex.test(url)) { - return ts.load.apply(this, arguments); - } - return next(url, context, next); -} diff --git a/packages/stream-transform/test/loaders/coffee.js b/packages/stream-transform/test/loaders/coffee.js deleted file mode 100644 index 75b15abe..00000000 --- a/packages/stream-transform/test/loaders/coffee.js +++ /dev/null @@ -1,20 +0,0 @@ -import CoffeeScript from "coffeescript"; - -// See https://github.com/nodejs/node/issues/36396 -const extensionsRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; - -export async function load(url, context, next) { - if (extensionsRegex.test(url)) { - const format = "module"; - const { source: rawSource } = await next(url, { format }); - const source = CoffeeScript.compile(rawSource.toString(), { - bare: true, - inlineMap: true, - filename: url, - header: false, - sourceMap: false, - }); - return { format, source }; - } - return next(url, context); -} diff --git a/packages/stream-transform/test/loaders/legacy/all.js b/packages/stream-transform/test/loaders/legacy/all.js deleted file mode 100644 index f5e57e54..00000000 --- a/packages/stream-transform/test/loaders/legacy/all.js +++ /dev/null @@ -1,36 +0,0 @@ -import * as coffee from "./coffee.js"; -import * as ts from "ts-node/esm"; - -const coffeeRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; -const tsRegex = /\.ts$/; - -export function resolve(specifier) { - if (coffeeRegex.test(specifier)) { - return coffee.resolve.apply(this, arguments); - } - if (tsRegex.test(specifier)) { - return ts.resolve.apply(this, arguments); - } - return ts.resolve.apply(this, arguments); -} - -export function getFormat(url) { - if (coffeeRegex.test(url)) { - return coffee.getFormat.apply(this, arguments); - } - if (tsRegex.test(url)) { - return ts.getFormat.apply(this, arguments); - } - return ts.getFormat.apply(this, arguments); -} - -export function transformSource(source, context) { - const { url } = context; - if (coffeeRegex.test(url)) { - return coffee.transformSource.apply(this, arguments); - } - if (tsRegex.test(url)) { - return ts.transformSource.apply(this, arguments); - } - return ts.transformSource.apply(this, arguments); -} diff --git a/packages/stream-transform/test/loaders/legacy/coffee.js b/packages/stream-transform/test/loaders/legacy/coffee.js deleted file mode 100644 index 6a9975db..00000000 --- a/packages/stream-transform/test/loaders/legacy/coffee.js +++ /dev/null @@ -1,50 +0,0 @@ -// coffeescript-loader.mjs -import { URL, pathToFileURL } from "url"; -import CoffeeScript from "coffeescript"; -import { cwd } from "process"; - -const baseURL = pathToFileURL(`${cwd()}/`).href; - -// CoffeeScript files end in .coffee, .litcoffee or .coffee.md. -const extensionsRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; - -export function resolve(specifier, context, defaultResolve) { - const { parentURL = baseURL } = context; - // Node.js normally errors on unknown file extensions, so return a URL for - // specifiers ending in the CoffeeScript file extensions. - if (extensionsRegex.test(specifier)) { - return { - url: new URL(specifier, parentURL).href, - stop: true, - }; - } - // Let Node.js handle all other specifiers. - return defaultResolve(specifier, context, defaultResolve); -} - -export function getFormat(url, context, defaultGetFormat) { - // Now that we patched resolve to let CoffeeScript URLs through, we need to - // tell Node.js what format such URLs should be interpreted as. For the - // purposes of this loader, all CoffeeScript URLs are ES modules. - if (extensionsRegex.test(url)) { - return { - format: "module", - stop: true, - }; - } - // Let Node.js handle all other URLs. - return defaultGetFormat(url, context, defaultGetFormat); -} - -export function transformSource(source, context, defaultTransformSource) { - const { url } = context; - - if (extensionsRegex.test(url)) { - return { - source: CoffeeScript.compile(String(source), { bare: true }), - }; - } - - // Let Node.js handle all other sources. - return defaultTransformSource(source, context, defaultTransformSource); -} diff --git a/packages/stream-transform/test/option.consume.coffee b/packages/stream-transform/test/option.consume.coffee deleted file mode 100644 index 6e6f0bd6..00000000 --- a/packages/stream-transform/test/option.consume.coffee +++ /dev/null @@ -1,62 +0,0 @@ - -import { generate } from 'csv-generate' -import { transform } from '../lib/index.js' - -describe 'option.consume', -> - - it 'async', (next) -> - @timeout 0 - data = [] - count = 0 - generator = generate length: 100000, objectMode: true - transformer = generator.pipe transform (record, callback) -> - count++ - setImmediate -> callback null, '' - , parallel: 7, consume: true - transformer.on 'error', next - transformer.on 'finish', -> - count.should.eql 100000 - next() - - it 'sync', (next) -> - @timeout 0 - data = [] - count = 0 - generator = generate length: 100000, objectMode: true - transformer = generator.pipe transform (record) -> - count++ - '' - , parallel: 10, consume: true - transformer.on 'error', next - transformer.on 'end', -> - count.should.eql 100000 - next() - - describe 'sequential', -> - - it 'async', (next) -> - @timeout 0 - data = [] - count = 0 - generator = generate length: 100000, objectMode: true - transformer = generator.pipe transform (record, callback) -> - count++ - setImmediate -> callback null, '' - , parallel: 1, consume: true - transformer.on 'finish', -> - count.should.eql 100000 - next() - - it 'sync', (next) -> - @timeout 0 - data = [] - count = 0 - generator = generate length: 100000, objectMode: true - transformer = generator.pipe transform (record) -> - count++ - '' - , parallel: 1, consume: true - transformer.on 'finish', -> - count.should.eql 100000 - next() - diff --git a/packages/stream-transform/test/option.consume.js b/packages/stream-transform/test/option.consume.js new file mode 100644 index 00000000..395ad3e5 --- /dev/null +++ b/packages/stream-transform/test/option.consume.js @@ -0,0 +1,86 @@ +import { generate } from "csv-generate"; +import { transform } from "../lib/index.js"; + +describe("option.consume", function () { + it("async", function (next) { + this.timeout(0); + let count = 0; + const generator = generate({ length: 100000, objectMode: true }); + const transformer = generator.pipe( + transform( + (record, callback) => { + count++; + setImmediate(() => callback(null, "")); + }, + { parallel: 7, consume: true }, + ), + ); + transformer.on("error", next); + transformer.on("finish", () => { + count.should.eql(100000); + next(); + }); + }); + + it("sync", function (next) { + this.timeout(0); + let count = 0; + const generator = generate({ length: 100000, objectMode: true }); + const transformer = generator.pipe( + transform( + (record) => { + record; + count++; + return ""; + }, + { parallel: 10, consume: true }, + ), + ); + transformer.on("error", next); + transformer.on("end", () => { + count.should.eql(100000); + next(); + }); + }); + + describe("sequential", function () { + it("async", function (next) { + this.timeout(0); + let count = 0; + const generator = generate({ length: 100000, objectMode: true }); + const transformer = generator.pipe( + transform( + (record, callback) => { + count++; + setImmediate(() => callback(null, "")); + }, + { parallel: 1, consume: true }, + ), + ); + transformer.on("finish", () => { + count.should.eql(100000); + next(); + }); + }); + + it("sync", function (next) { + this.timeout(0); + let count = 0; + const generator = generate({ length: 100000, objectMode: true }); + const transformer = generator.pipe( + transform( + (record) => { + record; + count++; + return ""; + }, + { parallel: 1, consume: true }, + ), + ); + transformer.on("finish", () => { + count.should.eql(100000); + next(); + }); + }); + }); +}); diff --git a/packages/stream-transform/test/option.parallel.coffee b/packages/stream-transform/test/option.parallel.coffee deleted file mode 100644 index 55e8c7cb..00000000 --- a/packages/stream-transform/test/option.parallel.coffee +++ /dev/null @@ -1,53 +0,0 @@ - -import pad from 'pad' -import { generate } from 'csv-generate' -import { transform } from '../lib/index.js' - -letters = (number) -> - text = "#{number}" - text = "#{pad 3, text, '0'}" - text = for c in text - 65 - 49 + 1 + c.charCodeAt 0 - String.fromCharCode text... - -describe 'option.parallel', -> - - it 'respect running', (next) -> - @timeout 0 - data = [] - count = 0 - running = 0 - headers = -1 - generator = generate length: 1000, objectMode: true, highWaterMark: 40, headers: 2, seed: 1, columns: [ - (g) -> - letters pad 3, g.state.count_created, '0' - (g) -> pad 3, g.state.count_created-1, '0' - ] - transformer = generator.pipe transform (record, next) -> - count++ - record[1] = letters count-1 - running++ - running.should.be.below 6 - setTimeout -> - running-- - next null, "#{record[0]},#{record[1]}" - , 1 + Math.ceil count % 5 - , parallel: 5 - transformer.on 'readable', -> - while(d = transformer.read()) - data.push d - transformer.on 'error', next - transformer.on 'finish', -> - data = data.sort() - data = data.slice 0, 8 - data.should.eql [ - 'AAA,AAA' - 'AAB,AAB' - 'AAC,AAC' - 'AAD,AAD' - 'AAE,AAE' - 'AAF,AAF' - 'AAG,AAG' - 'AAH,AAH' - ] - next() diff --git a/packages/stream-transform/test/option.parallel.js b/packages/stream-transform/test/option.parallel.js new file mode 100644 index 00000000..b721cd43 --- /dev/null +++ b/packages/stream-transform/test/option.parallel.js @@ -0,0 +1,70 @@ +import pad from "pad"; +import { generate } from "csv-generate"; +import { transform } from "../lib/index.js"; + +const letters = (number) => { + let text = `${number}`; + text = `${pad(3, text, "0")}`; + text = [...text].map((c) => 65 - 49 + 1 + c.charCodeAt(0)); + return String.fromCharCode(...text); +}; + +describe("option.parallel", function () { + it("respect running", function (next) { + this.timeout(0); + let data = []; + let count = 0; + let running = 0; + const generator = generate({ + length: 1000, + objectMode: true, + highWaterMark: 40, + headers: 2, + seed: 1, + columns: [ + (g) => letters(pad(3, g.state.count_created, "0")), + (g) => pad(3, g.state.count_created - 1, "0"), + ], + }); + const transformer = generator.pipe( + transform( + (record, next) => { + count++; + record[1] = letters(count - 1); + running++; + running.should.be.below(6); + setTimeout( + () => { + running--; + next(null, `${record[0]},${record[1]}`); + }, + 1 + Math.ceil(count % 5), + ); + }, + { parallel: 5 }, + ), + ); + transformer.on("readable", () => { + let d; + while ((d = transformer.read())) { + data.push(d); + } + }); + transformer.on("error", next); + transformer.on("finish", () => { + data.sort(); + data = data.slice(0, 8); + data.should.eql([ + "AAA,AAA", + "AAB,AAB", + "AAC,AAC", + "AAD,AAD", + "AAE,AAE", + "AAF,AAF", + "AAG,AAG", + "AAH,AAH", + ]); + next(); + }); + }); +}); diff --git a/packages/stream-transform/test/option.params.coffee b/packages/stream-transform/test/option.params.coffee deleted file mode 100644 index 767dcb6f..00000000 --- a/packages/stream-transform/test/option.params.coffee +++ /dev/null @@ -1,24 +0,0 @@ - -import { generate } from 'csv-generate' -import { transform } from '../lib/index.js' - -describe 'option.params', -> - - it 'sync', (next) -> - generator = generate length: 100, objectMode: true, seed: 1 - transformer = generator.pipe transform (record, params) -> - params.my_key.should.eql 'my value' - , parallel: 10, consume: true, params: my_key: 'my value' - transformer.on 'error', next - transformer.on 'finish', -> - next() - - it 'async', (next) -> - generator = generate length: 100, objectMode: true, seed: 1 - transformer = generator.pipe transform (record, callback, params) -> - params.my_key.should.eql 'my value' - setImmediate -> callback null, '' - , parallel: 10, consume: true, params: my_key: 'my value' - transformer.on 'error', next - transformer.on 'finish', -> - next() diff --git a/packages/stream-transform/test/option.params.js b/packages/stream-transform/test/option.params.js new file mode 100644 index 00000000..17579d9a --- /dev/null +++ b/packages/stream-transform/test/option.params.js @@ -0,0 +1,45 @@ +import { generate } from "csv-generate"; +import { transform } from "../lib/index.js"; + +describe("option.params", function () { + it("sync", function (next) { + const generator = generate({ length: 100, objectMode: true, seed: 1 }); + const transformer = generator.pipe( + transform( + (record, params) => { + params.my_key.should.eql("my value"); + }, + { + parallel: 10, + consume: true, + params: { my_key: "my value" }, + }, + ), + ); + transformer.on("error", next); + transformer.on("finish", () => { + next(); + }); + }); + + it("async", function (next) { + const generator = generate({ length: 100, objectMode: true, seed: 1 }); + const transformer = generator.pipe( + transform( + (record, callback, params) => { + params.my_key.should.eql("my value"); + setImmediate(() => callback(null, "")); + }, + { + parallel: 10, + consume: true, + params: { my_key: "my value" }, + }, + ), + ); + transformer.on("error", next); + transformer.on("finish", () => { + next(); + }); + }); +}); diff --git a/packages/stream-transform/test/samples.coffee b/packages/stream-transform/test/samples.coffee deleted file mode 100644 index 500e7525..00000000 --- a/packages/stream-transform/test/samples.coffee +++ /dev/null @@ -1,30 +0,0 @@ - -import fs from 'node:fs/promises' -import path from 'node:path' -import { spawn } from 'node:child_process' - -__dirname = new URL( '.', import.meta.url).pathname -dir = path.resolve __dirname, '../samples' -samples = await fs.readdir dir - -describe 'Samples', -> - - samples - .filter (sample) -> - return false unless /\.(js|ts)?$/.test sample - true - .map (sample) -> - - it "Sample #{sample}", () -> - data = await fs.readFile path.resolve(dir, sample), 'utf8' - return if /^["|']skip test["|']/.test data - new Promise (resolve, reject) -> - ext = /\.(\w+)?$/.exec(sample)[0] - [cmd, ...args] = switch ext - when '.js' - ['node', path.resolve dir, sample] - when '.ts' - ['node', '--loader', 'ts-node/esm', path.resolve dir, sample] - spawn(cmd, args) - .on 'close', (code) -> if code is 0 then resolve() else reject(new Error 'Failure') - .stdout.on 'data', (->) diff --git a/packages/stream-transform/test/samples.js b/packages/stream-transform/test/samples.js new file mode 100644 index 00000000..5919a551 --- /dev/null +++ b/packages/stream-transform/test/samples.js @@ -0,0 +1,44 @@ +import fs from "node:fs/promises"; +import path from "node:path"; +import { spawn } from "node:child_process"; + +const __dirname = new URL(".", import.meta.url).pathname; +const dir = path.resolve(__dirname, "../samples"); +const samples = await fs.readdir(dir); + +describe("Samples", function () { + /* eslint mocha/no-setup-in-describe: "off" */ + samples + .filter((sample) => { + if (!/\.(js|ts)?$/.test(sample)) return false; + return true; + }) + .map((sample) => { + it(`Sample ${sample}`, async function () { + const data = await fs.readFile(path.resolve(dir, sample), "utf8"); + if (/^["|']skip test["|']/.test(data)) return; + return new Promise((resolve, reject) => { + const ext = /\.(\w+)?$/.exec(sample)[0]; + let cmd, args; + switch (ext) { + case ".js": + [cmd, ...args] = ["node", path.resolve(dir, sample)]; + break; + case ".ts": + [cmd, ...args] = [ + "node", + "--loader", + "ts-node/esm", + path.resolve(dir, sample), + ]; + break; + } + spawn(cmd, args) + .on("close", (code) => + code === 0 ? resolve() : reject(new Error("Failure")), + ) + .stdout.on("data", () => {}); + }); + }); + }); +}); diff --git a/packages/stream-transform/test/state.finished.coffee b/packages/stream-transform/test/state.finished.coffee deleted file mode 100644 index 9ecff2b1..00000000 --- a/packages/stream-transform/test/state.finished.coffee +++ /dev/null @@ -1,31 +0,0 @@ - -import { transform } from '../lib/index.js' - -describe 'state.finished', -> - - it 'start at 0', (next) -> - transformer = transform ( (val) -> val), (err, data) -> - next err - transformer.state.finished.should.eql 0 - transformer.write [i] for i in [1..3] - transformer.end() - - it 'equals parallel', (next) -> - transformer = transform (val, callback) -> - setTimeout => - @state.finished.should.be.within 0, 9 - callback null, val - , 100 - , - parallel: 3 - , (err, data) -> - next err - transformer.write [i] for i in [1..10] - transformer.end() - - it 'end at 0', (next) -> - transformer = transform ( (val) -> val), (err, data) -> - transformer.state.finished.should.eql 3 - next err - transformer.write [i] for i in [1..3] - transformer.end() diff --git a/packages/stream-transform/test/state.finished.js b/packages/stream-transform/test/state.finished.js new file mode 100644 index 00000000..c0892bfa --- /dev/null +++ b/packages/stream-transform/test/state.finished.js @@ -0,0 +1,48 @@ +import { transform } from "../lib/index.js"; + +describe("state.finished", function () { + it("start at 0", function (next) { + const transformer = transform( + (val) => val, + (err) => next(err), + ); + transformer.state.finished.should.eql(0); + for (let i = 1; i <= 3; i++) { + transformer.write([i]); + } + transformer.end(); + }); + + it("equals parallel", function (next) { + const transformer = transform( + function (val, callback) { + setTimeout(() => { + this.state.finished.should.be.within(0, 9); + callback(null, val); + }, 100); + }, + { + parallel: 3, + }, + (err) => next(err), + ); + for (let i = 1; i <= 10; i++) { + transformer.write([i]); + } + transformer.end(); + }); + + it("end at 0", function (next) { + const transformer = transform( + (val) => val, + (err) => { + transformer.state.finished.should.eql(3); + next(err); + }, + ); + for (let i = 1; i <= 3; i++) { + transformer.write([i]); + } + transformer.end(); + }); +}); diff --git a/packages/stream-transform/test/state.running.coffee b/packages/stream-transform/test/state.running.coffee deleted file mode 100644 index f95c44b7..00000000 --- a/packages/stream-transform/test/state.running.coffee +++ /dev/null @@ -1,31 +0,0 @@ - -import { transform } from '../lib/index.js' - -describe 'state.running', -> - - it 'start at 0', (next) -> - transformer = transform ( (val) -> val), (err, data) -> - next err - transformer.state.running.should.eql 0 - transformer.write [i] for i in [1..3] - transformer.end() - - it 'equals parallel', (next) -> - transformer = transform (val, callback) -> - setTimeout => - @state.running.should.be.within 1, 3 - callback null, val - , 100 - , - parallel: 3 - , (err, data) -> - next err - transformer.write [i] for i in [1..10] - transformer.end() - - it 'end at 0', (next) -> - transformer = transform ( (val) -> val), (err, data) -> - transformer.state.running.should.eql 0 - next err - transformer.write [i] for i in [1..3] - transformer.end() diff --git a/packages/stream-transform/test/state.running.js b/packages/stream-transform/test/state.running.js new file mode 100644 index 00000000..8cdbdcf9 --- /dev/null +++ b/packages/stream-transform/test/state.running.js @@ -0,0 +1,48 @@ +import { transform } from "../lib/index.js"; + +describe("state.running", function () { + it("start at 0", function (next) { + const transformer = transform( + (val) => val, + (err) => next(err), + ); + transformer.state.running.should.eql(0); + for (let i = 1; i <= 3; i++) { + transformer.write([i]); + } + transformer.end(); + }); + + it("equals parallel", function (next) { + const transformer = transform( + function (val, callback) { + setTimeout(() => { + this.state.running.should.be.within(1, 3); + callback(null, val); + }, 100); + }, + { + parallel: 3, + }, + (err) => next(err), + ); + for (let i = 1; i <= 10; i++) { + transformer.write([i]); + } + transformer.end(); + }); + + it("end at 0", function (next) { + const transformer = transform( + (val) => val, + (err) => { + transformer.state.running.should.eql(0); + next(err); + }, + ); + for (let i = 1; i <= 3; i++) { + transformer.write([i]); + } + transformer.end(); + }); +}); diff --git a/packages/stream-transform/test/state.started.coffee b/packages/stream-transform/test/state.started.coffee deleted file mode 100644 index 44c14cc2..00000000 --- a/packages/stream-transform/test/state.started.coffee +++ /dev/null @@ -1,31 +0,0 @@ - -import { transform } from '../lib/index.js' - -describe 'state.started', -> - - it 'start at 0', (next) -> - transformer = transform ( (val) -> val), (err, data) -> - next err - transformer.state.started.should.eql 0 - transformer.write [i] for i in [1..3] - transformer.end() - - it 'equals parallel', (next) -> - transformer = transform (val, callback) -> - setTimeout => - @state.started.should.be.within 1, 10 - callback null, val - , 100 - , - parallel: 3 - , (err, data) -> - next err - transformer.write [i] for i in [1..10] - transformer.end() - - it 'end at 0', (next) -> - transformer = transform ( (val) -> val), (err, data) -> - transformer.state.started.should.eql 3 - next err - transformer.write [i] for i in [1..3] - transformer.end() diff --git a/packages/stream-transform/test/state.started.js b/packages/stream-transform/test/state.started.js new file mode 100644 index 00000000..f484a072 --- /dev/null +++ b/packages/stream-transform/test/state.started.js @@ -0,0 +1,50 @@ +import { transform } from "../lib/index.js"; + +describe("state.started", function () { + it("start at 0", function (next) { + const transformer = transform( + (val) => val, + (err) => { + next(err); + }, + ); + transformer.state.started.should.eql(0); + for (let i = 1; i <= 3; i++) { + transformer.write([i]); + } + transformer.end(); + }); + + it("equals parallel", function (next) { + const transformer = transform( + function (val, callback) { + setTimeout(() => { + this.state.started.should.be.within(1, 10); + callback(null, val); + }, 100); + }, + { + parallel: 3, + }, + (err) => next(err), + ); + for (let i = 1; i <= 10; i++) { + transformer.write([i]); + } + transformer.end(); + }); + + it("end at 0", function (next) { + const transformer = transform( + (val) => val, + (err) => { + transformer.state.started.should.eql(3); + next(err); + }, + ); + for (let i = 1; i <= 3; i++) { + transformer.write([i]); + } + transformer.end(); + }); +}); From 2fd0287936857862edfa82d465bbd86c6c026b7e Mon Sep 17 00:00:00 2001 From: David Worms Date: Mon, 12 May 2025 11:15:47 +0200 Subject: [PATCH 06/49] test(csv-parse): test conversion from coffee to js --- CONTRIBUTING.md | 10 +- package-lock.json | 1 + packages/csv-parse/package.json | 11 +- .../csv-parse/test/ResizableBuffer.coffee | 117 ---- packages/csv-parse/test/ResizableBuffer.js | 141 +++++ packages/csv-parse/test/api.arguments.coffee | 133 ----- packages/csv-parse/test/api.arguments.js | 198 +++++++ .../csv-parse/test/api.assert_error.coffee | 112 ---- packages/csv-parse/test/api.assert_error.js | 160 ++++++ packages/csv-parse/test/api.error.coffee | 33 -- packages/csv-parse/test/api.error.js | 39 ++ packages/csv-parse/test/api.info.coffee | 70 --- packages/csv-parse/test/api.info.js | 64 +++ .../csv-parse/test/api.stream.destroy.coffee | 59 -- packages/csv-parse/test/api.stream.destroy.js | 70 +++ .../csv-parse/test/api.stream.events.coffee | 107 ---- packages/csv-parse/test/api.stream.events.js | 113 ++++ .../csv-parse/test/api.stream.finished.coffee | 61 -- .../csv-parse/test/api.stream.finished.js | 77 +++ .../csv-parse/test/api.stream.iterator.coffee | 25 - .../csv-parse/test/api.stream.iterator.js | 30 + .../csv-parse/test/api.stream.pipe.coffee | 59 -- packages/csv-parse/test/api.stream.pipe.js | 89 +++ .../csv-parse/test/api.stream.write.coffee | 51 -- packages/csv-parse/test/api.stream.write.js | 62 +++ packages/csv-parse/test/api.sync.coffee | 46 -- packages/csv-parse/test/api.sync.js | 65 +++ packages/csv-parse/test/api.web_stream.coffee | 54 -- packages/csv-parse/test/api.web_stream.js | 67 +++ .../csv-parse/test/info.comment_lines.coffee | 59 -- packages/csv-parse/test/info.comment_lines.js | 96 ++++ .../csv-parse/test/info.empty_lines.coffee | 54 -- packages/csv-parse/test/info.empty_lines.js | 55 ++ .../test/info.invalid_field_length.coffee | 33 -- .../test/info.invalid_field_length.js | 34 ++ packages/csv-parse/test/info.lines.coffee | 108 ---- packages/csv-parse/test/info.lines.js | 159 ++++++ packages/csv-parse/test/info.records.coffee | 25 - packages/csv-parse/test/info.records.js | 38 ++ packages/csv-parse/test/loaders/all.js | 15 - packages/csv-parse/test/loaders/coffee.js | 20 - packages/csv-parse/test/loaders/legacy/all.js | 36 -- .../csv-parse/test/loaders/legacy/coffee.js | 50 -- packages/csv-parse/test/option.bom.coffee | 110 ---- packages/csv-parse/test/option.bom.js | 136 +++++ packages/csv-parse/test/option.cast.coffee | 289 ---------- packages/csv-parse/test/option.cast.js | 407 ++++++++++++++ .../csv-parse/test/option.cast_date.coffee | 57 -- packages/csv-parse/test/option.cast_date.js | 72 +++ packages/csv-parse/test/option.columns.coffee | 331 ----------- packages/csv-parse/test/option.columns.js | 482 ++++++++++++++++ .../option.columns_duplicates_to_array.coffee | 51 -- .../option.columns_duplicates_to_array.js | 59 ++ packages/csv-parse/test/option.comment.coffee | 105 ---- packages/csv-parse/test/option.comment.js | 150 +++++ .../test/option.comment_no_infix.coffee | 47 -- .../csv-parse/test/option.comment_no_infix.js | 73 +++ .../csv-parse/test/option.delimiter.coffee | 135 ----- packages/csv-parse/test/option.delimiter.js | 178 ++++++ .../csv-parse/test/option.encoding.coffee | 114 ---- packages/csv-parse/test/option.encoding.js | 157 ++++++ packages/csv-parse/test/option.escape.coffee | 157 ------ packages/csv-parse/test/option.escape.js | 211 +++++++ packages/csv-parse/test/option.from.coffee | 69 --- packages/csv-parse/test/option.from.js | 97 ++++ .../csv-parse/test/option.from_line.coffee | 130 ----- packages/csv-parse/test/option.from_line.js | 193 +++++++ .../test/option.ignore_last_delimiters.coffee | 63 --- .../test/option.ignore_last_delimiters.js | 97 ++++ packages/csv-parse/test/option.info.coffee | 88 --- packages/csv-parse/test/option.info.js | 154 ++++++ packages/csv-parse/test/option.ltrim.coffee | 81 --- packages/csv-parse/test/option.ltrim.js | 138 +++++ .../test/option.max_record_size.coffee | 32 -- .../csv-parse/test/option.max_record_size.js | 54 ++ packages/csv-parse/test/option.objname.coffee | 147 ----- packages/csv-parse/test/option.objname.js | 213 +++++++ .../csv-parse/test/option.on_record.coffee | 105 ---- packages/csv-parse/test/option.on_record.js | 212 +++++++ packages/csv-parse/test/option.on_skip.coffee | 36 -- packages/csv-parse/test/option.on_skip.js | 45 ++ packages/csv-parse/test/option.quote.coffee | 224 -------- packages/csv-parse/test/option.quote.js | 345 ++++++++++++ packages/csv-parse/test/option.raw.coffee | 55 -- packages/csv-parse/test/option.raw.js | 74 +++ .../test/option.record_delimiter.coffee | 407 -------------- .../csv-parse/test/option.record_delimiter.js | 523 ++++++++++++++++++ .../test/option.relax_column_count.coffee | 198 ------- .../test/option.relax_column_count.js | 294 ++++++++++ .../csv-parse/test/option.relax_quotes.coffee | 110 ---- .../csv-parse/test/option.relax_quotes.js | 124 +++++ packages/csv-parse/test/option.rtrim.coffee | 73 --- packages/csv-parse/test/option.rtrim.js | 135 +++++ .../test/option.skip_empty_lines.coffee | 92 --- .../csv-parse/test/option.skip_empty_lines.js | 98 ++++ ...tion.skip_records_with_empty_values.coffee | 83 --- .../option.skip_records_with_empty_values.js | 105 ++++ .../option.skip_records_with_error.coffee | 175 ------ .../test/option.skip_records_with_error.js | 231 ++++++++ packages/csv-parse/test/option.to.coffee | 91 --- packages/csv-parse/test/option.to.js | 131 +++++ packages/csv-parse/test/option.to_line.coffee | 101 ---- packages/csv-parse/test/option.to_line.js | 147 +++++ packages/csv-parse/test/option.trim.coffee | 227 -------- packages/csv-parse/test/option.trim.js | 309 +++++++++++ packages/csv-parse/test/options.coffee | 20 - packages/csv-parse/test/options.js | 28 + packages/csv-parse/test/samples.coffee | 31 -- packages/csv-parse/test/samples.js | 47 ++ packages/csv-parse/test/spectrum.coffee | 15 - packages/csv-parse/test/spectrum.js | 20 + 111 files changed, 7306 insertions(+), 5388 deletions(-) delete mode 100644 packages/csv-parse/test/ResizableBuffer.coffee create mode 100644 packages/csv-parse/test/ResizableBuffer.js delete mode 100644 packages/csv-parse/test/api.arguments.coffee create mode 100644 packages/csv-parse/test/api.arguments.js delete mode 100644 packages/csv-parse/test/api.assert_error.coffee create mode 100644 packages/csv-parse/test/api.assert_error.js delete mode 100644 packages/csv-parse/test/api.error.coffee create mode 100644 packages/csv-parse/test/api.error.js delete mode 100644 packages/csv-parse/test/api.info.coffee create mode 100644 packages/csv-parse/test/api.info.js delete mode 100644 packages/csv-parse/test/api.stream.destroy.coffee create mode 100644 packages/csv-parse/test/api.stream.destroy.js delete mode 100644 packages/csv-parse/test/api.stream.events.coffee create mode 100644 packages/csv-parse/test/api.stream.events.js delete mode 100644 packages/csv-parse/test/api.stream.finished.coffee create mode 100644 packages/csv-parse/test/api.stream.finished.js delete mode 100644 packages/csv-parse/test/api.stream.iterator.coffee create mode 100644 packages/csv-parse/test/api.stream.iterator.js delete mode 100644 packages/csv-parse/test/api.stream.pipe.coffee create mode 100644 packages/csv-parse/test/api.stream.pipe.js delete mode 100644 packages/csv-parse/test/api.stream.write.coffee create mode 100644 packages/csv-parse/test/api.stream.write.js delete mode 100644 packages/csv-parse/test/api.sync.coffee create mode 100644 packages/csv-parse/test/api.sync.js delete mode 100644 packages/csv-parse/test/api.web_stream.coffee create mode 100644 packages/csv-parse/test/api.web_stream.js delete mode 100644 packages/csv-parse/test/info.comment_lines.coffee create mode 100644 packages/csv-parse/test/info.comment_lines.js delete mode 100644 packages/csv-parse/test/info.empty_lines.coffee create mode 100644 packages/csv-parse/test/info.empty_lines.js delete mode 100644 packages/csv-parse/test/info.invalid_field_length.coffee create mode 100644 packages/csv-parse/test/info.invalid_field_length.js delete mode 100644 packages/csv-parse/test/info.lines.coffee create mode 100644 packages/csv-parse/test/info.lines.js delete mode 100644 packages/csv-parse/test/info.records.coffee create mode 100644 packages/csv-parse/test/info.records.js delete mode 100644 packages/csv-parse/test/loaders/all.js delete mode 100644 packages/csv-parse/test/loaders/coffee.js delete mode 100644 packages/csv-parse/test/loaders/legacy/all.js delete mode 100644 packages/csv-parse/test/loaders/legacy/coffee.js delete mode 100644 packages/csv-parse/test/option.bom.coffee create mode 100644 packages/csv-parse/test/option.bom.js delete mode 100644 packages/csv-parse/test/option.cast.coffee create mode 100644 packages/csv-parse/test/option.cast.js delete mode 100644 packages/csv-parse/test/option.cast_date.coffee create mode 100644 packages/csv-parse/test/option.cast_date.js delete mode 100644 packages/csv-parse/test/option.columns.coffee create mode 100644 packages/csv-parse/test/option.columns.js delete mode 100644 packages/csv-parse/test/option.columns_duplicates_to_array.coffee create mode 100644 packages/csv-parse/test/option.columns_duplicates_to_array.js delete mode 100644 packages/csv-parse/test/option.comment.coffee create mode 100644 packages/csv-parse/test/option.comment.js delete mode 100644 packages/csv-parse/test/option.comment_no_infix.coffee create mode 100644 packages/csv-parse/test/option.comment_no_infix.js delete mode 100644 packages/csv-parse/test/option.delimiter.coffee create mode 100644 packages/csv-parse/test/option.delimiter.js delete mode 100644 packages/csv-parse/test/option.encoding.coffee create mode 100644 packages/csv-parse/test/option.encoding.js delete mode 100644 packages/csv-parse/test/option.escape.coffee create mode 100644 packages/csv-parse/test/option.escape.js delete mode 100644 packages/csv-parse/test/option.from.coffee create mode 100644 packages/csv-parse/test/option.from.js delete mode 100644 packages/csv-parse/test/option.from_line.coffee create mode 100644 packages/csv-parse/test/option.from_line.js delete mode 100644 packages/csv-parse/test/option.ignore_last_delimiters.coffee create mode 100644 packages/csv-parse/test/option.ignore_last_delimiters.js delete mode 100644 packages/csv-parse/test/option.info.coffee create mode 100644 packages/csv-parse/test/option.info.js delete mode 100644 packages/csv-parse/test/option.ltrim.coffee create mode 100644 packages/csv-parse/test/option.ltrim.js delete mode 100644 packages/csv-parse/test/option.max_record_size.coffee create mode 100644 packages/csv-parse/test/option.max_record_size.js delete mode 100644 packages/csv-parse/test/option.objname.coffee create mode 100644 packages/csv-parse/test/option.objname.js delete mode 100644 packages/csv-parse/test/option.on_record.coffee create mode 100644 packages/csv-parse/test/option.on_record.js delete mode 100644 packages/csv-parse/test/option.on_skip.coffee create mode 100644 packages/csv-parse/test/option.on_skip.js delete mode 100644 packages/csv-parse/test/option.quote.coffee create mode 100644 packages/csv-parse/test/option.quote.js delete mode 100644 packages/csv-parse/test/option.raw.coffee create mode 100644 packages/csv-parse/test/option.raw.js delete mode 100644 packages/csv-parse/test/option.record_delimiter.coffee create mode 100644 packages/csv-parse/test/option.record_delimiter.js delete mode 100644 packages/csv-parse/test/option.relax_column_count.coffee create mode 100644 packages/csv-parse/test/option.relax_column_count.js delete mode 100644 packages/csv-parse/test/option.relax_quotes.coffee create mode 100644 packages/csv-parse/test/option.relax_quotes.js delete mode 100644 packages/csv-parse/test/option.rtrim.coffee create mode 100644 packages/csv-parse/test/option.rtrim.js delete mode 100644 packages/csv-parse/test/option.skip_empty_lines.coffee create mode 100644 packages/csv-parse/test/option.skip_empty_lines.js delete mode 100644 packages/csv-parse/test/option.skip_records_with_empty_values.coffee create mode 100644 packages/csv-parse/test/option.skip_records_with_empty_values.js delete mode 100644 packages/csv-parse/test/option.skip_records_with_error.coffee create mode 100644 packages/csv-parse/test/option.skip_records_with_error.js delete mode 100644 packages/csv-parse/test/option.to.coffee create mode 100644 packages/csv-parse/test/option.to.js delete mode 100644 packages/csv-parse/test/option.to_line.coffee create mode 100644 packages/csv-parse/test/option.to_line.js delete mode 100644 packages/csv-parse/test/option.trim.coffee create mode 100644 packages/csv-parse/test/option.trim.js delete mode 100644 packages/csv-parse/test/options.coffee create mode 100644 packages/csv-parse/test/options.js delete mode 100644 packages/csv-parse/test/samples.coffee create mode 100644 packages/csv-parse/test/samples.js delete mode 100644 packages/csv-parse/test/spectrum.coffee create mode 100644 packages/csv-parse/test/spectrum.js diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 918cb1dd..2190dc23 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,9 +1,9 @@ -## How to contribute to CoffeeScript +## How to contribute to the CSV project -* Before you open a ticket or send a pull request, [search](https://github.com/adaltas/node-csv/issues) for previous discussions about the same feature or issue. Add to the earlier ticket if you find one. +- Before you open a ticket or send a pull request, [search](https://github.com/adaltas/node-csv/issues) for previous discussions about the same feature or issue. Add to the earlier ticket if you find one. -* Before sending a pull request for a feature, be sure to have [tests](https://github.com/adaltas/node-csv/tree/master/packages/csv/test). +- Before sending a pull request for a feature, be sure to have [tests](https://github.com/adaltas/node-csv/tree/master/packages/csv/test). -* Use the same coding style as the rest of the [codebase](https://github.com/adaltas/node-csv/tree/master/packages). If you’re writing a test and if you're just getting started with CoffeeScript, there’s a nice [style guide](https://github.com/polarmobile/coffeescript-style-guide). +- Use the same coding style as the rest of the [codebase](https://github.com/adaltas/node-csv/tree/master/packages). -* Documentation is published on [GitHub](https://github.com/adaltas/node-csv-docs) and you are invited to submit a pull request with your changes. For convenience, you can also browse the website and click on the Edit link present at the top of every page. +- Documentation is published on [GitHub](https://github.com/adaltas/node-csv-docs) and you are invited to submit a pull request with your changes. For convenience, you can also browse the website and click on the Edit link present at the top of every page. diff --git a/package-lock.json b/package-lock.json index d58e6b9e..5d2ff270 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20178,6 +20178,7 @@ "coffeescript": "^2.7.0", "csv-generate": "^4.4.2", "csv-spectrum": "^2.0.0", + "dedent": "^0.7.0", "each": "^2.7.2", "eslint": "^9.26.0", "eslint-config-prettier": "^10.1.5", diff --git a/packages/csv-parse/package.json b/packages/csv-parse/package.json index cffa1a61..5279dfc7 100644 --- a/packages/csv-parse/package.json +++ b/packages/csv-parse/package.json @@ -76,9 +76,9 @@ "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", - "coffeescript": "^2.7.0", "csv-generate": "^4.4.2", "csv-spectrum": "^2.0.0", + "dedent": "^0.7.0", "each": "^2.7.2", "eslint": "^9.26.0", "eslint-config-prettier": "^10.1.5", @@ -104,12 +104,9 @@ "main": "./dist/cjs/index.cjs", "mocha": { "inline-diffs": true, - "loader": "./test/loaders/all.js", + "import": "tsx", "recursive": true, "reporter": "spec", - "require": [ - "should" - ], "throw-deprecation": false, "timeout": 40000 }, @@ -127,8 +124,8 @@ "lint:fix": "eslint --fix", "lint:ts": "tsc --noEmit true", "preversion": "npm run build && git add dist", - "test": "mocha 'test/**/*.{coffee,ts}'", - "test:legacy": "mocha --ignore test/api.web_stream.coffee --ignore test/api.web_stream.ts --ignore test/api.stream.finished.coffee --ignore test/api.stream.iterator.coffee --loader=./test/loaders/legacy/all.js 'test/**/*.{coffee,ts}'" + "test": "mocha 'test/**/*.{js,ts}'", + "test:legacy": "mocha --ignore test/api.web_stream.js --ignore test/api.web_stream.ts --ignore test/api.stream.finished.js --ignore test/api.stream.iterator.js 'test/**/*.{js,ts}'" }, "type": "module", "types": "dist/esm/index.d.ts", diff --git a/packages/csv-parse/test/ResizableBuffer.coffee b/packages/csv-parse/test/ResizableBuffer.coffee deleted file mode 100644 index a6b57eb3..00000000 --- a/packages/csv-parse/test/ResizableBuffer.coffee +++ /dev/null @@ -1,117 +0,0 @@ - -import ResizeableBuffer from '../lib/utils/ResizeableBuffer.js' - -describe 'ResizeableBuffer', -> - - describe 'append', -> - - it 'chars inside boundary', -> - rb = new ResizeableBuffer(5) - buf = Buffer.from 'abc' - for i in [0...buf.length] - rb.append(buf[i]) - rb.length.should.eql 3 - rb.clone().toString().should.eql('abc') - - it 'chars larger than size', -> - rb = new ResizeableBuffer(5) - buf = Buffer.from 'abc,def;hij,klm;' - for i in [0...buf.length] - rb.append(buf[i]) - rb.length.should.eql 16 - rb.clone().toString().should.eql 'abc,def;hij,klm;' - - describe 'prepend', -> - - it 'chars inside boundary', -> - rb = new ResizeableBuffer(5) - buf = Buffer.from 'abc' - for i in [1...buf.length] - rb.append(buf[i]) - rb.prepend(buf[0]) - rb.length.should.eql 3 - rb.clone().toString().should.eql 'abc' - - it 'buffer inside boundary', -> - rb = new ResizeableBuffer(5) - buf = Buffer.from 'abc' - for i in [1...buf.length] - rb.append(buf[i]) - rb.prepend(Buffer.from([buf[0]])) - rb.length.should.eql 3 - rb.clone().toString().should.eql 'abc' - - it 'chars same size as size', -> - rb = new ResizeableBuffer(3) - buf = Buffer.from 'abcd' - for i in [1...buf.length] - rb.append(buf[i]) - rb.prepend(buf[0]) - rb.length.should.eql 4 - rb.clone().toString().should.eql 'abcd' - - it 'chars same size as size', -> - rb = new ResizeableBuffer(3) - buf = Buffer.from 'abcd' - for i in [1...buf.length] - rb.append(buf[i]) - rb.prepend(Buffer.from([buf[0]])) - rb.length.should.eql 4 - rb.clone().toString().should.eql 'abcd' - - it 'chars larger than size', -> - rb = new ResizeableBuffer(5) - buf = Buffer.from 'abc,def;hij,klm;' - for i in [1...buf.length] - rb.append(buf[i]) - rb.prepend(buf[0]) - rb.length.should.eql 16 - rb.clone().toString().should.eql 'abc,def;hij,klm;' - - it 'buffer larger than size', -> - rb = new ResizeableBuffer(5) - buf = Buffer.from 'abc,def;hij,klm;' - for i in [1...buf.length] - rb.append(buf[i]) - rb.prepend(Buffer.from([buf[0]])) - rb.length.should.eql 16 - rb.clone().toString().should.eql 'abc,def;hij,klm;' - - it 'buffer larger than size', -> - rb = new ResizeableBuffer(6) - buf = Buffer.from 'abc,def;hij,klm;' - for chr in 'def' - rb.append(chr.charCodeAt()) - rb.prepend(Buffer.from('abc')) - rb.length.should.eql 6 - rb.toString('utf8').should.eql 'abcdef' - - it 'throw invalid state if size equal buffer size', -> - try - rb = new ResizeableBuffer(3) - buf = Buffer.from 'abc,def;hij,klm;' - for chr in 'def' - rb.append(chr.charCodeAt()) - rb.prepend(Buffer.from('abc')) - catch err - err.message.should.eql 'INVALID_BUFFER_STATE' - - describe 'reset', -> - - it 'reset', -> - rb = new ResizeableBuffer(5) - buf = Buffer.from 'abc,def;' - for i in [0...buf.length] - rb.append(buf[i]) - rb.reset() - buf = Buffer.from 'hij,klm;' - for i in [0...buf.length] - rb.append(buf[i]) - rb.clone().toString().should.eql 'hij,klm;' - - describe 'toJSON', -> - rb = new ResizeableBuffer(5) - buf = Buffer.from 'abc,def;' - for i in [0...buf.length] - rb.append(buf[i]) - rb.toJSON().should.eql 'abc,def;' diff --git a/packages/csv-parse/test/ResizableBuffer.js b/packages/csv-parse/test/ResizableBuffer.js new file mode 100644 index 00000000..d2f9cdc3 --- /dev/null +++ b/packages/csv-parse/test/ResizableBuffer.js @@ -0,0 +1,141 @@ +import "should"; +import ResizeableBuffer from "../lib/utils/ResizeableBuffer.js"; + +describe("ResizeableBuffer", function () { + describe("append", function () { + it("chars inside boundary", function () { + const rb = new ResizeableBuffer(5); + const buf = Buffer.from("abc"); + for (let i = 0; i < buf.length; i++) { + rb.append(buf[i]); + } + rb.length.should.eql(3); + rb.clone().toString().should.eql("abc"); + }); + + it("chars larger than size", function () { + const rb = new ResizeableBuffer(5); + const buf = Buffer.from("abc,def;hij,klm;"); + for (let i = 0; i < buf.length; i++) { + rb.append(buf[i]); + } + rb.length.should.eql(16); + rb.clone().toString().should.eql("abc,def;hij,klm;"); + }); + }); + + describe("prepend", function () { + it("chars inside boundary", function () { + const rb = new ResizeableBuffer(5); + const buf = Buffer.from("abc"); + for (let i = 1; i < buf.length; i++) { + rb.append(buf[i]); + } + rb.prepend(buf[0]); + rb.length.should.eql(3); + rb.clone().toString().should.eql("abc"); + }); + + it("buffer inside boundary", function () { + const rb = new ResizeableBuffer(5); + const buf = Buffer.from("abc"); + for (let i = 1; i < buf.length; i++) { + rb.append(buf[i]); + } + rb.prepend(Buffer.from([buf[0]])); + rb.length.should.eql(3); + rb.clone().toString().should.eql("abc"); + }); + + it("chars same size as size, prepend byte", function () { + const rb = new ResizeableBuffer(3); + const buf = Buffer.from("abcd"); + for (let i = 1; i < buf.length; i++) { + rb.append(buf[i]); + } + rb.prepend(buf[0]); + rb.length.should.eql(4); + rb.clone().toString().should.eql("abcd"); + }); + + it("chars same size as size, prepend buffer", function () { + const rb = new ResizeableBuffer(3); + const buf = Buffer.from("abcd"); + for (let i = 1; i < buf.length; i++) { + rb.append(buf[i]); + } + rb.prepend(Buffer.from([buf[0]])); + rb.length.should.eql(4); + rb.clone().toString().should.eql("abcd"); + }); + + it("chars larger than size", function () { + const rb = new ResizeableBuffer(5); + const buf = Buffer.from("abc,def;hij,klm;"); + for (let i = 1; i < buf.length; i++) { + rb.append(buf[i]); + } + rb.prepend(buf[0]); + rb.length.should.eql(16); + rb.clone().toString().should.eql("abc,def;hij,klm;"); + }); + + it("buffer larger than size", function () { + const rb = new ResizeableBuffer(5); + const buf = Buffer.from("abc,def;hij,klm;"); + for (let i = 1; i < buf.length; i++) { + rb.append(buf[i]); + } + rb.prepend(Buffer.from([buf[0]])); + rb.length.should.eql(16); + rb.clone().toString().should.eql("abc,def;hij,klm;"); + }); + + it("buffer equlas size", function () { + const rb = new ResizeableBuffer(6); + for (const chr of "def") { + rb.append(chr.charCodeAt()); + } + rb.prepend(Buffer.from("abc")); + rb.length.should.eql(6); + rb.toString("utf8").should.eql("abcdef"); + }); + + it("throw invalid state if size equal buffer size", function () { + try { + const rb = new ResizeableBuffer(3); + for (const chr of "def") { + rb.append(chr.charCodeAt()); + } + rb.prepend(Buffer.from("abc")); + } catch (err) { + err.message.should.eql("INVALID_BUFFER_STATE"); + } + }); + }); + + describe("reset", function () { + it("reset", function () { + const rb = new ResizeableBuffer(5); + let buf = Buffer.from("abc,def;"); + for (let i = 0; i < buf.length; i++) { + rb.append(buf[i]); + } + rb.reset(); + buf = Buffer.from("hij,klm;"); + for (let i = 0; i < buf.length; i++) { + rb.append(buf[i]); + } + rb.clone().toString().should.eql("hij,klm;"); + }); + + it("toJSON", function () { + const rb = new ResizeableBuffer(5); + const buf = Buffer.from("abc,def;"); + for (let i = 0; i < buf.length; i++) { + rb.append(buf[i]); + } + rb.toJSON().should.eql("abc,def;"); + }); + }); +}); diff --git a/packages/csv-parse/test/api.arguments.coffee b/packages/csv-parse/test/api.arguments.coffee deleted file mode 100644 index dbc82eac..00000000 --- a/packages/csv-parse/test/api.arguments.coffee +++ /dev/null @@ -1,133 +0,0 @@ - -import { generate } from 'csv-generate' -import { parse, Parser } from '../lib/index.js' -import { assert_error } from './api.assert_error.coffee' - -describe 'API arguments', -> - - it 'exports Parser class', -> - Parser.should.be.a.Function - - describe '0 arg', -> - - it 'no arguments', (next) -> - records = [] - parser = parse() - parser.on 'readable', -> - while d = this.read() - records.push d - parser.on 'err', (err) -> - next err - parser.on 'end', -> - records.should.eql [ [ 'field_1', 'field_2' ], [ 'value 1', 'value 2' ] ] - next() - parser.write 'field_1,field_2\nvalue 1,value 2' - parser.end() - - describe '1 arg', -> - - it 'callback:function; pipe data and get result in callback', (next) -> - generate(length: 2, seed: 1, columns: 2, fixed_size: true) - .pipe parse (err, records) -> - records.should.eql [ [ 'OMH', 'ONKCHhJmjadoA' ], [ 'D', 'GeACHiN' ] ] - next err - - it 'options:object; write data and read stream', (next) -> - records = [] - parser = parse columns: true - parser.on 'readable', -> - while d = parser.read() - records.push d - parser.on 'err', (err) -> - next err - parser.on 'end', -> - records.should.eql [field_1: 'value 1', field_2: 'value 2'] - next() - parser.write 'field_1,field_2\nvalue 1,value 2' - parser.end() - - describe '2 args', -> - - it 'data:string, options:object; read stream', (next) -> - records = [] - parser = parse 'field_1,field_2\nvalue 1,value 2', columns: true - parser.on 'readable', -> - while d = parser.read() - records.push d - parser.on 'err', (err) -> - next err - parser.on 'end', -> - records.should.eql [field_1: 'value 1', field_2: 'value 2'] - next() - - it 'options:object, callback:function; write data and get result in callback', (next) -> - parser = parse columns: true, (err, records) -> - records.should.eql [field_1: 'value 1', field_2: 'value 2'] - next err - parser.write 'field_1,field_2\nvalue 1,value 2' - parser.end() - - it 'data:string, callback:function', (next) -> - parse 'value a,value b\nvalue 1,value 2', (err, records) -> - records.should.eql [ [ 'value a', 'value b' ], [ 'value 1', 'value 2' ] ] - next err - - it 'data:buffer, callback:function', (next) -> - parse Buffer.from('value a,value b\nvalue 1,value 2'), (err, records) -> - records.should.eql [ [ 'value a', 'value b' ], [ 'value 1', 'value 2' ] ] - next err - - it 'data:undefined, options:object', -> - (-> - parse undefined, {} - ).should.throw - message: 'Invalid argument: got undefined at index 0' - code: 'CSV_INVALID_ARGUMENT' - - it 'data:undefined, callback:function', -> - (-> - parse undefined, (->) - ).should.throw - message: 'Invalid argument: got undefined at index 0' - code: 'CSV_INVALID_ARGUMENT' - - it 'data:array, callback:function', -> - (-> - parse ['value a,value b', 'value 1,value 2'], (->) - ).should.throw - message: 'Invalid argument: got ["value a,value b","value 1,value 2"] at index 0' - code: 'CSV_INVALID_ARGUMENT' - - it 'options:object, options:object', -> - (-> - parse {}, {} - ).should.throw - message: 'Invalid argument: got {} at index 1' - code: 'CSV_INVALID_ARGUMENT' - - describe '3 args', -> - - it 'data:string, options:object, callback:function', (next) -> - parse 'field_1,field_2\nvalue 1,value 2', columns: true, (err, records) -> - records.should.eql [field_1: 'value 1', field_2: 'value 2'] - next err - - it 'data:buffer, options:object, callback:function', (next) -> - parse Buffer.from('field_1,field_2\nvalue 1,value 2'), columns: true, (err, records) -> - records.should.eql [field_1: 'value 1', field_2: 'value 2'] - next err - - it 'data:undefined, options:object, callback:function', -> - (-> - parse undefined, columns: true, (->) - ).should.throw - message: 'Invalid argument: got undefined at index 0' - code: 'CSV_INVALID_ARGUMENT' - - it 'data:string, options:object, callback:undefined', -> - (-> - parse 'field_1,field_2\nvalue 1,value 2', columns: true, undefined - ).should.throw - message: 'Invalid argument: got undefined at index 2' - code: 'CSV_INVALID_ARGUMENT' - diff --git a/packages/csv-parse/test/api.arguments.js b/packages/csv-parse/test/api.arguments.js new file mode 100644 index 00000000..f5856364 --- /dev/null +++ b/packages/csv-parse/test/api.arguments.js @@ -0,0 +1,198 @@ +import "should"; +import { generate } from "csv-generate"; +import { parse, Parser } from "../lib/index.js"; + +describe("API arguments", function () { + it("exports Parser class", function () { + Parser.should.be.a.Function; + }); + + describe("0 arg", function () { + it("no arguments", function (next) { + const records = []; + const parser = parse(); + parser.on("readable", function () { + let d; + while ((d = this.read())) { + records.push(d); + } + }); + parser.on("err", (err) => { + next(err); + }); + parser.on("end", () => { + records.should.eql([ + ["field_1", "field_2"], + ["value 1", "value 2"], + ]); + next(); + }); + parser.write("field_1,field_2\nvalue 1,value 2"); + parser.end(); + }); + }); + + describe("1 arg", function () { + it("callback:function; pipe data and get result in callback", function (next) { + generate({ length: 2, seed: 1, columns: 2, fixed_size: true }).pipe( + parse((err, records) => { + records.should.eql([ + ["OMH", "ONKCHhJmjadoA"], + ["D", "GeACHiN"], + ]); + next(err); + }), + ); + }); + + it("options:object; write data and read stream", function (next) { + const records = []; + const parser = parse({ columns: true }); + parser.on("readable", function () { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("err", (err) => { + next(err); + }); + parser.on("end", () => { + records.should.eql([{ field_1: "value 1", field_2: "value 2" }]); + next(); + }); + parser.write("field_1,field_2\nvalue 1,value 2"); + parser.end(); + }); + }); + + describe("2 args", function () { + it("data:string, options:object; read stream", function (next) { + const records = []; + const parser = parse("field_1,field_2\nvalue 1,value 2", { + columns: true, + }); + parser.on("readable", function () { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("err", (err) => { + next(err); + }); + parser.on("end", () => { + records.should.eql([{ field_1: "value 1", field_2: "value 2" }]); + next(); + }); + }); + + it("options:object, callback:function; write data and get result in callback", function (next) { + const parser = parse({ columns: true }, (err, records) => { + records.should.eql([{ field_1: "value 1", field_2: "value 2" }]); + next(err); + }); + parser.write("field_1,field_2\nvalue 1,value 2"); + parser.end(); + }); + + it("data:string, callback:function", function (next) { + parse("value a,value b\nvalue 1,value 2", (err, records) => { + records.should.eql([ + ["value a", "value b"], + ["value 1", "value 2"], + ]); + next(err); + }); + }); + + it("data:buffer, callback:function", function (next) { + parse(Buffer.from("value a,value b\nvalue 1,value 2"), (err, records) => { + records.should.eql([ + ["value a", "value b"], + ["value 1", "value 2"], + ]); + next(err); + }); + }); + + it("data:undefined, options:object", function () { + (() => { + parse(undefined, {}); + }).should.throw({ + message: "Invalid argument: got undefined at index 0", + code: "CSV_INVALID_ARGUMENT", + }); + }); + + it("data:undefined, callback:function", function () { + (() => { + parse(undefined, () => {}); + }).should.throw({ + message: "Invalid argument: got undefined at index 0", + code: "CSV_INVALID_ARGUMENT", + }); + }); + + it("data:array, callback:function", function () { + (() => { + parse(["value a,value b", "value 1,value 2"], () => {}); + }).should.throw({ + message: + 'Invalid argument: got ["value a,value b","value 1,value 2"] at index 0', + code: "CSV_INVALID_ARGUMENT", + }); + }); + + it("options:object, options:object", function () { + (() => { + parse({}, {}); + }).should.throw({ + message: "Invalid argument: got {} at index 1", + code: "CSV_INVALID_ARGUMENT", + }); + }); + }); + + describe("3 args", function () { + it("data:string, options:object, callback:function", function (next) { + parse( + "field_1,field_2\nvalue 1,value 2", + { columns: true }, + (err, records) => { + records.should.eql([{ field_1: "value 1", field_2: "value 2" }]); + next(err); + }, + ); + }); + + it("data:buffer, options:object, callback:function", function (next) { + parse( + Buffer.from("field_1,field_2\nvalue 1,value 2"), + { columns: true }, + (err, records) => { + records.should.eql([{ field_1: "value 1", field_2: "value 2" }]); + next(err); + }, + ); + }); + + it("data:undefined, options:object, callback:function", function () { + (() => { + parse(undefined, { columns: true }, () => {}); + }).should.throw({ + message: "Invalid argument: got undefined at index 0", + code: "CSV_INVALID_ARGUMENT", + }); + }); + + it("data:string, options:object, callback:undefined", function () { + (() => { + parse("field_1,field_2\nvalue 1,value 2", { columns: true }, undefined); + }).should.throw({ + message: "Invalid argument: got undefined at index 2", + code: "CSV_INVALID_ARGUMENT", + }); + }); + }); +}); diff --git a/packages/csv-parse/test/api.assert_error.coffee b/packages/csv-parse/test/api.assert_error.coffee deleted file mode 100644 index 55bd3d73..00000000 --- a/packages/csv-parse/test/api.assert_error.coffee +++ /dev/null @@ -1,112 +0,0 @@ - -import { CsvError } from '../lib/index.js' -import ResizeableBuffer from '../lib/utils/ResizeableBuffer.js' - -export assert_error = (err, assert = {}, exhaustive = false) -> - if Array.isArray err - assert_error e, assert[i] for e, i in err - return - if exhaustive then for key, value of err - assert.should.have.keys(key) - err.should.be.an.Error() - for key, expect of assert - value = err[key] - if typeof expect is 'string' - # eg, convert a buffer - value = value.toString() if value?.toString? - should(value).deepEqual expect - else if expect instanceof RegExp - should(value).match expect - else if expect is undefined - should(value).be.undefined() - else if expect is null - should(value).be.null() - else - should(value).deepEqual expect - -describe 'API assert_error', -> - - it 'work on array', -> - err = new CsvError 'A_MESSAGE', 'A message' - assert_error [err, err], [ - code: 'A_MESSAGE' - message: 'A message' - , - code: 'A_MESSAGE' - message: 'A message' - ] - - it 'exhaustive detect a property not in assert', -> - err = new CsvError 'A_MESSAGE', 'A message', {}, a_key: 'a value' - ( -> - assert_error err, - code: 'A_MESSAGE' - message: 'A message' - , true - ).should.throw /expected Object .* to have key a_key/ - - it 'detect a property not in error', -> - err = new CsvError 'A_MESSAGE', 'A message' - ( -> - assert_error err, - code: 'A_MESSAGE' - message: 'A message' - a_key: 'a value' - ).should.throw "expected undefined to equal 'a value'" - - it 'validate a string value', -> - err = new CsvError 'A_MESSAGE', 'A message' - assert_error err, - code: 'A_MESSAGE' - message: 'A message' - ( -> - assert_error err, - code: 'A_MESSAGE' - message: 'Another mesage' - ).should.throw "expected 'A message' to equal 'Another mesage'" - - it 'validate a null value', -> - err = new CsvError 'A_MESSAGE', 'A message' - ( -> - assert_error err, - code: 'A_MESSAGE' - message: null - ).should.throw "expected 'A message' to be null" - - it 'validate a undefined value', -> - err = new CsvError 'A_MESSAGE', 'A message' - ( -> - assert_error err, - code: 'A_MESSAGE' - message: undefined - ).should.throw "expected 'A message' to be undefined" - - it 'validate a boolean true value', -> - err = new CsvError 'A_MESSAGE', 'A message', {}, a_boolean: true - assert_error err, - a_boolean: true - ( -> - assert_error err, - a_boolean: false - ).should.throw "expected true to equal false" - - it 'validate a boolean true value', -> - err = new CsvError 'A_MESSAGE', 'A message', {}, a_boolean: false - assert_error err, - a_boolean: false - ( -> - assert_error err, - a_boolean: true - ).should.throw "expected false to equal true" - - it 'validate a regexp value', -> - err = new CsvError 'A_MESSAGE', 'A message' - assert_error err, - code: 'A_MESSAGE' - message: /^A.*/ - ( -> - assert_error err, - code: 'A_MESSAGE' - message: /^Another.*/ - ).should.throw "expected 'A message' to match /^Another.*/" - diff --git a/packages/csv-parse/test/api.assert_error.js b/packages/csv-parse/test/api.assert_error.js new file mode 100644 index 00000000..e69ff173 --- /dev/null +++ b/packages/csv-parse/test/api.assert_error.js @@ -0,0 +1,160 @@ +import should from "should"; +import { CsvError } from "../lib/index.js"; + +/* eslint mocha/no-exports: "off" */ +export const assert_error = (err, assert = {}, exhaustive = false) => { + if (Array.isArray(err)) { + err.forEach((e, i) => assert_error(e, assert[i])); + return; + } + if (exhaustive) { + for (const key in err) { + assert.should.have.keys(key); + } + } + err.should.be.an.Error(); + for (const [key, expect] of Object.entries(assert)) { + let value = err[key]; + if (typeof expect === "string") { + // eg, convert a buffer + if (value?.toString) { + value = value.toString(); + } + should(value).deepEqual(expect); + } else if (expect instanceof RegExp) { + should(value).match(expect); + } else if (expect === undefined) { + should(value).be.undefined(); + } else if (expect === null) { + should(value).be.null(); + } else { + should(value).deepEqual(expect); + } + } +}; + +describe("API assert_error", function () { + it("work on array", function () { + const err = new CsvError("A_MESSAGE", "A message"); + assert_error( + [err, err], + [ + { + code: "A_MESSAGE", + message: "A message", + }, + { + code: "A_MESSAGE", + message: "A message", + }, + ], + ); + }); + + it("exhaustive detect a property not in assert", function () { + const err = new CsvError( + "A_MESSAGE", + "A message", + {}, + { a_key: "a value" }, + ); + (() => { + assert_error( + err, + { + code: "A_MESSAGE", + message: "A message", + }, + true, + ); + }).should.throw(/expected Object .* to have key a_key/); + }); + + it("detect a property not in error", function () { + const err = new CsvError("A_MESSAGE", "A message"); + (() => { + assert_error(err, { + code: "A_MESSAGE", + message: "A message", + a_key: "a value", + }); + }).should.throw("expected undefined to equal 'a value'"); + }); + + it("validate a string value", function () { + const err = new CsvError("A_MESSAGE", "A message"); + assert_error(err, { + code: "A_MESSAGE", + message: "A message", + }); + (() => { + assert_error(err, { + code: "A_MESSAGE", + message: "Another mesage", + }); + }).should.throw("expected 'A message' to equal 'Another mesage'"); + }); + + it("validate a null value", function () { + const err = new CsvError("A_MESSAGE", "A message"); + (() => { + assert_error(err, { + code: "A_MESSAGE", + message: null, + }); + }).should.throw("expected 'A message' to be null"); + }); + + it("validate a undefined value", function () { + const err = new CsvError("A_MESSAGE", "A message"); + (() => { + assert_error(err, { + code: "A_MESSAGE", + message: undefined, + }); + }).should.throw("expected 'A message' to be undefined"); + }); + + it("validate a boolean true value", function () { + const err = new CsvError("A_MESSAGE", "A message", {}, { a_boolean: true }); + assert_error(err, { + a_boolean: true, + }); + (() => { + assert_error(err, { + a_boolean: false, + }); + }).should.throw("expected true to equal false"); + }); + + it("validate a boolean false value", function () { + const err = new CsvError( + "A_MESSAGE", + "A message", + {}, + { a_boolean: false }, + ); + assert_error(err, { + a_boolean: false, + }); + (() => { + assert_error(err, { + a_boolean: true, + }); + }).should.throw("expected false to equal true"); + }); + + it("validate a regexp value", function () { + const err = new CsvError("A_MESSAGE", "A message"); + assert_error(err, { + code: "A_MESSAGE", + message: /^A.*/, + }); + (() => { + assert_error(err, { + code: "A_MESSAGE", + message: /^Another.*/, + }); + }).should.throw("expected 'A message' to match /^Another.*/"); + }); +}); diff --git a/packages/csv-parse/test/api.error.coffee b/packages/csv-parse/test/api.error.coffee deleted file mode 100644 index 81e1372a..00000000 --- a/packages/csv-parse/test/api.error.coffee +++ /dev/null @@ -1,33 +0,0 @@ - -import { parse, CsvError } from '../lib/index.js' -import { assert_error } from './api.assert_error.coffee' - -describe 'API error', -> - - it 'set code', -> - err = new CsvError 'MY_CODE', ['a', 'b', 'c'] - err.code.should.eql 'MY_CODE' - - it 'convert array message to string', -> - err = new CsvError 'MY_CODE', ['a', 'b', 'c'] - err.message.should.eql 'a b c' - - it 'set additional context information', -> - err = new CsvError 'MY_CODE', 'msg', {}, a: 1, b: 2 - err.a.should.eql 1 - err.b.should.eql 2 - - it 'errors are enriched by context', -> - parse 'a"b', (err) -> - assert_error err, - message: /Invalid Opening Quote/ - code: 'INVALID_OPENING_QUOTE' - column: 0 - empty_lines: 0 - header: false - index: 0 - invalid_field_length: 0 - quoting: false - lines: 1 - records: 0 - field: 'a' diff --git a/packages/csv-parse/test/api.error.js b/packages/csv-parse/test/api.error.js new file mode 100644 index 00000000..f3520a52 --- /dev/null +++ b/packages/csv-parse/test/api.error.js @@ -0,0 +1,39 @@ +import "should"; +import { parse, CsvError } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("API error", function () { + it("set code", function () { + const err = new CsvError("MY_CODE", ["a", "b", "c"]); + err.code.should.eql("MY_CODE"); + }); + + it("convert array message to string", function () { + const err = new CsvError("MY_CODE", ["a", "b", "c"]); + err.message.should.eql("a b c"); + }); + + it("set additional context information", function () { + const err = new CsvError("MY_CODE", "msg", {}, { a: 1, b: 2 }); + err.a.should.eql(1); + err.b.should.eql(2); + }); + + it("errors are enriched by context", function () { + parse('a"b', (err) => { + assert_error(err, { + message: /Invalid Opening Quote/, + code: "INVALID_OPENING_QUOTE", + column: 0, + empty_lines: 0, + header: false, + index: 0, + invalid_field_length: 0, + quoting: false, + lines: 1, + records: 0, + field: "a", + }); + }); + }); +}); diff --git a/packages/csv-parse/test/api.info.coffee b/packages/csv-parse/test/api.info.coffee deleted file mode 100644 index 45db2de1..00000000 --- a/packages/csv-parse/test/api.info.coffee +++ /dev/null @@ -1,70 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'API info', -> - - it 'is exported in the callback on error', (next) -> - parse ''' - 1,2,3 - a,b, - ''', (err, records, info) -> - info.should.eql - bytes: 10 - columns: false - comment_lines: 0 - empty_lines: 0 - invalid_field_length: 0 - lines: 2 - records: 2 - next() - - it 'is exported in the callback on success', (next) -> - parse ''' - 1,2,3 - a,b,c - ''', (err, records, info) -> - info.should.eql - bytes: 11 - columns: false - comment_lines: 0 - empty_lines: 0 - invalid_field_length: 0 - lines: 2 - records: 2 - next err - - it 'discovered columns are included', (next) -> - parse ''' - a,b,c - 1,2,3 - ''', columns: true, (err, records, info) -> - info.should.eql - bytes: 11 - comment_lines: 0 - columns: [ - { name: 'a' } - { name: 'b' } - { name: 'c' } - ] - empty_lines: 0 - invalid_field_length: 0 - lines: 2 - records: 1 - next err - - it 'with multiline records', (next) -> - parse ''' - a,b,c - d,"e - ",f - g,h,i - ''', (err, records, info) -> - info.should.eql - bytes: 20 - columns: false - comment_lines: 0 - empty_lines: 0 - invalid_field_length: 0 - lines: 4 - records: 3 - next err diff --git a/packages/csv-parse/test/api.info.js b/packages/csv-parse/test/api.info.js new file mode 100644 index 00000000..84bdf8d6 --- /dev/null +++ b/packages/csv-parse/test/api.info.js @@ -0,0 +1,64 @@ +import "should"; +import { parse } from "../lib/index.js"; + +describe("API info", function () { + it("is exported in the callback on error", function (next) { + parse("1,2,3\na,b,", (err, records, info) => { + info.should.eql({ + bytes: 10, + columns: false, + comment_lines: 0, + empty_lines: 0, + invalid_field_length: 0, + lines: 2, + records: 2, + }); + next(); + }); + }); + + it("is exported in the callback on success", function (next) { + parse("1,2,3\na,b,c", (err, records, info) => { + info.should.eql({ + bytes: 11, + columns: false, + comment_lines: 0, + empty_lines: 0, + invalid_field_length: 0, + lines: 2, + records: 2, + }); + next(err); + }); + }); + + it("discovered columns are included", function (next) { + parse("a,b,c\n1,2,3", { columns: true }, (err, records, info) => { + info.should.eql({ + bytes: 11, + comment_lines: 0, + columns: [{ name: "a" }, { name: "b" }, { name: "c" }], + empty_lines: 0, + invalid_field_length: 0, + lines: 2, + records: 1, + }); + next(err); + }); + }); + + it("with multiline records", function (next) { + parse('a,b,c\nd,"e\n",f\ng,h,i', (err, records, info) => { + info.should.eql({ + bytes: 20, + columns: false, + comment_lines: 0, + empty_lines: 0, + invalid_field_length: 0, + lines: 4, + records: 3, + }); + next(err); + }); + }); +}); diff --git a/packages/csv-parse/test/api.stream.destroy.coffee b/packages/csv-parse/test/api.stream.destroy.coffee deleted file mode 100644 index 2ac2310b..00000000 --- a/packages/csv-parse/test/api.stream.destroy.coffee +++ /dev/null @@ -1,59 +0,0 @@ - -import fs from 'fs' -import os from 'os' -import { generate } from 'csv-generate' -import { parse } from '../lib/index.js' - -describe 'API destroy', -> - - it 'inside readable with input string', (next) -> - parser = parse() - parser.on 'readable', -> - while this.read() - parser.destroy(Error 'Catch me') - parser.write """ - "ABC","45" - "DEF","23" - """ - parser.on 'error', (err) -> - err.message.should.eql 'Catch me' - parser._readableState.destroyed.should.be.true() - next() - parser.on 'end', -> - next Error 'End event shouldnt be called' - # Note, removing =nextTick trigger both the error and end events - process.nextTick -> - parser.end() - - it 'inside readable with fs input stream', (next) -> - fs.writeFile "#{os.tmpdir()}/data.csv", "a,b,c\n1,2,3", (err) -> - return next err if err - parser = parse() - parser.on 'readable', -> - while record = this.read() - parser.destroy(Error 'Catch me') - parser.on 'error', (err) -> - err.message.should.eql 'Catch me' - parser._readableState.destroyed.should.be.true() - next() - parser.on 'end', -> - next Error 'End event shouldnt be called' - fs - .createReadStream "#{os.tmpdir()}/data.csv" - .pipe parser - - it 'inside readable with generator input stream', (next) -> - # csv-generate emit data synchronously, it cant detect error on time - parser = parse() - parser.on 'readable', -> - while record = this.read() - parser.destroy(Error 'Catch me') - parser.on 'error', (err) -> - err.message.should.eql 'Catch me' - parser._readableState.destroyed.should.be.true() - version = parseInt /^v(\d+)/.exec(process.version)[1], 10 - next() if version >= 14 - parser.on 'end', -> - next() - generate length: 2, seed: 1, columns: 2, fixed_size: true - .pipe parser diff --git a/packages/csv-parse/test/api.stream.destroy.js b/packages/csv-parse/test/api.stream.destroy.js new file mode 100644 index 00000000..f57e3bc8 --- /dev/null +++ b/packages/csv-parse/test/api.stream.destroy.js @@ -0,0 +1,70 @@ +import fs from "fs"; +import os from "os"; +import "should"; +import { generate } from "csv-generate"; +import { parse } from "../lib/index.js"; + +describe("API destroy", function () { + it("inside readable with input string", function (next) { + const parser = parse(); + parser.on("readable", function () { + while (this.read()) { + parser.destroy(Error("Catch me")); + } + }); + parser.write('"ABC","45"\n"DEF","23"'); + parser.on("error", (err) => { + err.message.should.eql("Catch me"); + parser._readableState.destroyed.should.be.true(); + next(); + }); + parser.on("end", () => { + next(Error("End event shouldnt be called")); + }); + // Note, removing =nextTick trigger both the error and end events + process.nextTick(() => { + parser.end(); + }); + }); + + it("inside readable with fs input stream", function (next) { + fs.writeFile(`${os.tmpdir()}/data.csv`, "a,b,c\n1,2,3", (err) => { + if (err) return next(err); + const parser = parse(); + parser.on("readable", function () { + while (this.read()) { + parser.destroy(Error("Catch me")); + } + }); + parser.on("error", (err) => { + err.message.should.eql("Catch me"); + parser._readableState.destroyed.should.be.true(); + next(); + }); + parser.on("end", () => { + next(Error("End event shouldnt be called")); + }); + fs.createReadStream(`${os.tmpdir()}/data.csv`).pipe(parser); + }); + }); + + it("inside readable with generator input stream", function (next) { + // csv-generate emit data synchronously, it cant detect error on time + const parser = parse(); + parser.on("readable", function () { + while (this.read()) { + parser.destroy(Error("Catch me")); + } + }); + parser.on("error", (err) => { + err.message.should.eql("Catch me"); + parser._readableState.destroyed.should.be.true(); + const version = parseInt(/^v(\d+)/.exec(process.version)[1], 10); + if (version >= 14) next(); + }); + parser.on("end", () => { + next(); + }); + generate({ length: 2, seed: 1, columns: 2, fixed_size: true }).pipe(parser); + }); +}); diff --git a/packages/csv-parse/test/api.stream.events.coffee b/packages/csv-parse/test/api.stream.events.coffee deleted file mode 100644 index 0a469cab..00000000 --- a/packages/csv-parse/test/api.stream.events.coffee +++ /dev/null @@ -1,107 +0,0 @@ - -import { parse } from '../lib/index.js' -import { assert_error } from './api.assert_error.coffee' - -describe 'API events', -> - - it 'emit `readable` event', (next) -> - records = [] - parser = parse() - parser.on 'readable', -> - while record = this.read() - records.push record - parser.write """ - "ABC","45" - "DEF","23" - """ - parser.on 'end', -> - records.should.eql [ - [ 'ABC', '45' ] - [ 'DEF', '23' ] - ] - next() - parser.end() - - it 'emit `data` event', (next) -> - records = [] - parser = parse() - parser.on 'data', (record) -> - records.push record - parser.write """ - "ABC","45" - "DEF","23" - """ - parser.on 'end', -> - records.should.eql [ - [ 'ABC', '45' ] - [ 'DEF', '23' ] - ] - next() - parser.end() - - it 'ensure error in _transform is called once', (next) -> - data = ''' - x " a b",x " c d" - x " e f", x " g h" - ''' - parser = parse (err) -> - assert_error err, - message: 'Invalid Opening Quote: a quote is found on field 0 at line 1, value is " x "' - code: 'INVALID_OPENING_QUOTE' - field: ' x ' - next() - parser.write chr for chr in data - parser.end() - - it 'emit `error`', (next) -> - parser = parse() - parser.on 'readable', -> - while @read() then true - parser.on 'end', -> - next Error 'End should not be fired' - parser.on 'error', (err) -> - err.message.should.eql 'Invalid Record Length: expect 3, got 2 on line 2' - next() - parser.write """ - a,a,a - b,b - """ - parser.end() - - it 'emit `error` with data as argument', (next) -> - parser = parse """ - a,a,a - b,b - c,c,c - """ - parser.on 'end', -> - next Error 'End should not be fired' - parser.on 'error', (err) -> - err.message.should.eql 'Invalid Record Length: expect 3, got 2 on line 2' - next() - - it 'emit `destroy` event', (next) -> - parser = parse """ - a,a,a - b,b,b - c,c,c - """ - parser.on 'readable', (data) -> - while this.read() isnt null then true - parser.on 'close', next - parser.on 'error', -> - next Error 'Event `error` should not be fired' - - it 'emit `destroy` event with `to_line` option', (next) -> - # See https://github.com/adaltas/node-csv/issues/333 - parser = parse """ - a,a,a - b,b,b - c,c,c - """, to_line: 2 - parser.on 'readable', (data) -> - while this.read() isnt null then true - parser.on 'close', next - parser.on 'error', -> - next Error 'Event `error` should not be fired' - diff --git a/packages/csv-parse/test/api.stream.events.js b/packages/csv-parse/test/api.stream.events.js new file mode 100644 index 00000000..f51dd392 --- /dev/null +++ b/packages/csv-parse/test/api.stream.events.js @@ -0,0 +1,113 @@ +import "should"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("API events", function () { + it("emit `readable` event", function (next) { + const records = []; + const parser = parse(); + parser.on("readable", () => { + let record; + while ((record = parser.read())) { + records.push(record); + } + }); + parser.write('"ABC","45"\n"DEF","23"'); + parser.on("end", () => { + records.should.eql([ + ["ABC", "45"], + ["DEF", "23"], + ]); + next(); + }); + parser.end(); + }); + + it("emit `data` event", function (next) { + const records = []; + const parser = parse(); + parser.on("data", (record) => { + records.push(record); + }); + parser.write('"ABC","45"\n"DEF","23"'); + parser.on("end", () => { + records.should.eql([ + ["ABC", "45"], + ["DEF", "23"], + ]); + next(); + }); + parser.end(); + }); + + it("ensure error in _transform is called once", function (next) { + const data = ' x " a b",x " c d"\nx " e f", x " g h"'; + const parser = parse((err) => { + assert_error(err, { + message: + 'Invalid Opening Quote: a quote is found on field 0 at line 1, value is " x "', + code: "INVALID_OPENING_QUOTE", + field: " x ", + }); + next(); + }); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); + + it("emit `error`", function (next) { + const parser = parse(); + parser.on("readable", () => { + while (parser.read()) true; + }); + parser.on("end", () => { + next(Error("End should not be fired")); + }); + parser.on("error", (err) => { + err.message.should.eql( + "Invalid Record Length: expect 3, got 2 on line 2", + ); + next(); + }); + parser.write("a,a,a\nb,b"); + parser.end(); + }); + + it("emit `error` with data as argument", function (next) { + const parser = parse("a,a,a\nb,b\nc,c,c"); + parser.on("end", () => { + next(Error("End should not be fired")); + }); + parser.on("error", (err) => { + err.message.should.eql( + "Invalid Record Length: expect 3, got 2 on line 2", + ); + next(); + }); + }); + + it("emit `destroy` event", function (next) { + const parser = parse("a,a,a\nb,b,b\nc,c,c"); + parser.on("readable", () => { + while (parser.read() !== null) true; + }); + parser.on("close", next); + parser.on("error", () => { + next(Error("Event `error` should not be fired")); + }); + }); + + it("emit `destroy` event with `to_line` option", function (next) { + // See https://github.com/adaltas/node-csv/issues/333 + const parser = parse("a,a,a\nb,b,b\nc,c,c", { to_line: 2 }); + parser.on("readable", () => { + while (parser.read() !== null) true; + }); + parser.on("close", next); + parser.on("error", () => { + next(Error("Event `error` should not be fired")); + }); + }); +}); diff --git a/packages/csv-parse/test/api.stream.finished.coffee b/packages/csv-parse/test/api.stream.finished.coffee deleted file mode 100644 index 23ac98f2..00000000 --- a/packages/csv-parse/test/api.stream.finished.coffee +++ /dev/null @@ -1,61 +0,0 @@ - -import { Readable } from 'node:stream' -import * as stream from 'node:stream/promises' -import { generate } from 'csv-generate' -import { parse } from '../lib/index.js' - -describe 'API stream.finished', -> - - it 'resolved at the end', -> - # See https://github.com/adaltas/node-csv/issues/333 - records = [] - parser = generate(length: 10).pipe parse() - parser.on 'readable', () => - while (record = parser.read()) isnt null - records.push record - await stream.finished parser - records.length.should.eql 10 - - it 'aborted (with generate())', -> - # See https://github.com/adaltas/node-csv/issues/333 - # See https://github.com/adaltas/node-csv/issues/410 - # Prevent `Error [ERR_STREAM_PREMATURE_CLOSE]: Premature close` - records = [] - parser = generate(length: 10).pipe parse to_line: 3 - parser.on 'readable', () => - while (record = parser.read()) isnt null - records.push record - await stream.finished parser - records.length.should.eql 3 - - it.skip 'aborted (with Readable)', -> - # See https://github.com/adaltas/node-csv/issues/333 - # See https://github.com/adaltas/node-csv/issues/410 - # Prevent `Error [ERR_STREAM_PREMATURE_CLOSE]: Premature close` - records = [] - reader = new Readable - highWaterMark: 10 - read: (size) -> - for i in [0...size] - this.push "#{size},#{i}\n" - parser = reader.pipe parse to_line: 3 - parser.on 'readable', () => - while (record = parser.read()) isnt null - records.push record - await stream.finished parser - console.log records - records.length.should.eql 3 - - it 'rejected on error', -> - parser = parse to_line: 3 - parser.write 'a,b,c\n' - parser.write 'd,e,f\n' - parser.write 'h,i,j,ohno\n' - parser.write 'k,l,m\n' - parser.end() - parser.on 'readable', () => - while (record = parser.read()) isnt null then true - stream - .finished parser - .should.be.rejectedWith - code: 'CSV_RECORD_INCONSISTENT_FIELDS_LENGTH' diff --git a/packages/csv-parse/test/api.stream.finished.js b/packages/csv-parse/test/api.stream.finished.js new file mode 100644 index 00000000..6704f030 --- /dev/null +++ b/packages/csv-parse/test/api.stream.finished.js @@ -0,0 +1,77 @@ +import "should"; +import { Readable } from "node:stream"; +import * as stream from "node:stream/promises"; +import { generate } from "csv-generate"; +import { parse } from "../lib/index.js"; + +describe("API stream.finished", function () { + it("resolved at the end", async function () { + // See https://github.com/adaltas/node-csv/issues/333 + const records = []; + const parser = generate({ length: 10 }).pipe(parse()); + parser.on("readable", () => { + let record; + while ((record = parser.read()) !== null) { + records.push(record); + } + }); + await stream.finished(parser); + records.length.should.eql(10); + }); + + it("aborted (with generate())", async function () { + // See https://github.com/adaltas/node-csv/issues/333 + // See https://github.com/adaltas/node-csv/issues/410 + // Prevent `Error [ERR_STREAM_PREMATURE_CLOSE]: Premature close` + const records = []; + const parser = generate({ length: 10 }).pipe(parse({ to_line: 3 })); + parser.on("readable", () => { + let record; + while ((record = parser.read()) !== null) { + records.push(record); + } + }); + await stream.finished(parser); + records.length.should.eql(3); + }); + + it.skip("aborted (with Readable)", async function () { + // See https://github.com/adaltas/node-csv/issues/333 + // See https://github.com/adaltas/node-csv/issues/410 + // Prevent `Error [ERR_STREAM_PREMATURE_CLOSE]: Premature close` + const records = []; + const reader = new Readable({ + highWaterMark: 10, + read: function (size) { + for (let i = 0; i < size; i++) { + this.push(`${size},${i}\n`); + } + }, + }); + const parser = reader.pipe(parse({ to_line: 3 })); + parser.on("readable", () => { + let record; + while ((record = parser.read()) !== null) { + records.push(record); + } + }); + await stream.finished(parser); + console.log(records); + records.length.should.eql(3); + }); + + it("rejected on error", async function () { + const parser = parse({ to_line: 3 }); + parser.write("a,b,c\n"); + parser.write("d,e,f\n"); + parser.write("h,i,j,ohno\n"); + parser.write("k,l,m\n"); + parser.end(); + parser.on("readable", () => { + while (parser.read() !== null) true; + }); + stream.finished(parser).should.be.rejectedWith({ + code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", + }); + }); +}); diff --git a/packages/csv-parse/test/api.stream.iterator.coffee b/packages/csv-parse/test/api.stream.iterator.coffee deleted file mode 100644 index 196b0e12..00000000 --- a/packages/csv-parse/test/api.stream.iterator.coffee +++ /dev/null @@ -1,25 +0,0 @@ - -import * as stream from 'node:stream/promises' -import { generate } from 'csv-generate' -import { parse } from '../lib/index.js' - -describe 'API stream.iterator', -> - - it 'classic', -> - parser = generate(length: 10).pipe parse() - records = [] - for await record from parser - records.push record - records.length.should.eql 10 - - it 'with iteractor stoped in between', -> - # See https://github.com/adaltas/node-csv/issues/333 - # See https://github.com/adaltas/node-csv/issues/410 - # Prevent `Error [ERR_STREAM_PREMATURE_CLOSE]: Premature close` - records = [] - parser = generate(length: 10).pipe parse - to_line: 2 - records = [] - for await record from parser - records.push record - records.length.should.eql 2 diff --git a/packages/csv-parse/test/api.stream.iterator.js b/packages/csv-parse/test/api.stream.iterator.js new file mode 100644 index 00000000..a45a360f --- /dev/null +++ b/packages/csv-parse/test/api.stream.iterator.js @@ -0,0 +1,30 @@ +import "should"; +import { generate } from "csv-generate"; +import { parse } from "../lib/index.js"; + +describe("API stream.iterator", function () { + it("classic", async function () { + const parser = generate({ length: 10 }).pipe(parse()); + const records = []; + for await (const record of parser) { + records.push(record); + } + records.length.should.eql(10); + }); + + it("with iteractor stoped in between", async function () { + // See https://github.com/adaltas/node-csv/issues/333 + // See https://github.com/adaltas/node-csv/issues/410 + // Prevent `Error [ERR_STREAM_PREMATURE_CLOSE]: Premature close` + const records = []; + const parser = generate({ length: 10 }).pipe( + parse({ + to_line: 2, + }), + ); + for await (const record of parser) { + records.push(record); + } + records.length.should.eql(2); + }); +}); diff --git a/packages/csv-parse/test/api.stream.pipe.coffee b/packages/csv-parse/test/api.stream.pipe.coffee deleted file mode 100644 index a2f036eb..00000000 --- a/packages/csv-parse/test/api.stream.pipe.coffee +++ /dev/null @@ -1,59 +0,0 @@ - -import fs from 'fs' -import { Readable } from 'stream' -import { generate } from 'csv-generate' -import { parse } from '../lib/index.js' - -describe 'API pipe', -> - - it 'piping in and reading out', (next) -> - finished = false - parser = parse() - records = [] - generator = generate length: 2, seed: 1, columns: 2, fixed_size: true - parser.on 'readable', -> - while d = parser.read() - records.push d - parser.on 'end', -> - finished = true - parser.on 'end', -> - finished.should.be.ok - records.should.eql [ - [ 'OMH', 'ONKCHhJmjadoA' ] - [ 'D', 'GeACHiN' ] - ] - next() - generator.pipe(parser) - - it 'piping in and callback out', (next) -> - generator = generate length: 2, seed: 1, columns: 2, fixed_size: true - generator.pipe parse (err, records) -> - records.should.eql [ - [ 'OMH', 'ONKCHhJmjadoA' ] - [ 'D', 'GeACHiN' ] - ] - next() - - it 'catch source error', (next) -> - parser = parse() - parser.on 'error', -> - next new Error 'Should not pass here' - parser.on 'end', -> - next new Error 'Should not pass here' - rs = fs.createReadStream('/doesnotexist') - rs.on 'error', (err) -> - err.code.should.eql 'ENOENT' - next() - rs.pipe(parser) - - it 'handle empty string', (next) -> - s = new Readable() - s._read = -> - @push null - s.pipe parse - delimiter: ',' - , (err, records) -> - records.should.eql [] unless err - next err - - diff --git a/packages/csv-parse/test/api.stream.pipe.js b/packages/csv-parse/test/api.stream.pipe.js new file mode 100644 index 00000000..863af3e6 --- /dev/null +++ b/packages/csv-parse/test/api.stream.pipe.js @@ -0,0 +1,89 @@ +import "should"; +import fs from "fs"; +import { Readable } from "stream"; +import { generate } from "csv-generate"; +import { parse } from "../lib/index.js"; + +describe("API pipe", function () { + it("piping in and reading out", function (next) { + let finished = false; + const parser = parse(); + const records = []; + const generator = generate({ + length: 2, + seed: 1, + columns: 2, + fixed_size: true, + }); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + finished = true; + }); + parser.on("end", () => { + finished.should.be.ok; + records.should.eql([ + ["OMH", "ONKCHhJmjadoA"], + ["D", "GeACHiN"], + ]); + next(); + }); + generator.pipe(parser); + }); + + it("piping in and callback out", function (next) { + const generator = generate({ + length: 2, + seed: 1, + columns: 2, + fixed_size: true, + }); + generator.pipe( + parse((err, records) => { + records.should.eql([ + ["OMH", "ONKCHhJmjadoA"], + ["D", "GeACHiN"], + ]); + next(); + }), + ); + }); + + it("catch source error", function (next) { + const parser = parse(); + parser.on("error", () => { + next(new Error("Should not pass here")); + }); + parser.on("end", () => { + next(new Error("Should not pass here")); + }); + const rs = fs.createReadStream("/doesnotexist"); + rs.on("error", (err) => { + err.code.should.eql("ENOENT"); + next(); + }); + rs.pipe(parser); + }); + + it("handle empty string", function (next) { + const s = new Readable(); + s._read = () => { + s.push(null); + }; + s.pipe( + parse( + { + delimiter: ",", + }, + (err, records) => { + if (!err) records.should.eql([]); + next(err); + }, + ), + ); + }); +}); diff --git a/packages/csv-parse/test/api.stream.write.coffee b/packages/csv-parse/test/api.stream.write.coffee deleted file mode 100644 index defb7c4f..00000000 --- a/packages/csv-parse/test/api.stream.write.coffee +++ /dev/null @@ -1,51 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'API write', -> - - it 'string randomly splited', (next) -> - records = [] - parser = parse() - parser.on 'readable', -> - while(d = parser.read()) - records.push d - parser.on 'end', -> - records.should.eql [ - [ 'Test 0', '0', '"' ] - [ 'Test 1', '1', '"' ] - [ 'Test 2', '2', '"' ] - [ 'Test 3', '3', '"' ] - [ 'Test 4', '4', '"' ] - [ 'Test 5', '5', '"' ] - [ 'Test 6', '6', '"' ] - [ 'Test 7', '7', '"' ] - [ 'Test 8', '8', '"' ] - [ 'Test 9', '9', '"' ] - ] - next() - buffer = '' - for i in [0...10] - buffer += ''.concat "Test #{i}", ',', i, ',', '""""', "\n" - if buffer.length > 250 - parser.write buffer.substr 0, 250 - buffer = buffer.substr 250 - parser.write buffer - parser.end() - - it 'throw error if not writable', (next) -> - parser = parse() - parser.on 'error', (err) -> - err.message.should.eql 'write after end' - next() - parser.write 'abc,123' - parser.end() - parser.write 'def,456' - - it 'support multi-bytes utf8 encoded characters', (next) -> - parser = parse (err, records) -> - records[0][0].should.eql '€' - next() - parser.write Buffer.from [0xE2] - parser.write Buffer.from [0x82] - parser.write Buffer.from [0xAC] - parser.end() diff --git a/packages/csv-parse/test/api.stream.write.js b/packages/csv-parse/test/api.stream.write.js new file mode 100644 index 00000000..6e8c5c0c --- /dev/null +++ b/packages/csv-parse/test/api.stream.write.js @@ -0,0 +1,62 @@ +import "should"; +import { parse } from "../lib/index.js"; + +describe("API write", function () { + it("string randomly splited", function (next) { + const records = []; + const parser = parse(); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([ + ["Test 0", "0", '"'], + ["Test 1", "1", '"'], + ["Test 2", "2", '"'], + ["Test 3", "3", '"'], + ["Test 4", "4", '"'], + ["Test 5", "5", '"'], + ["Test 6", "6", '"'], + ["Test 7", "7", '"'], + ["Test 8", "8", '"'], + ["Test 9", "9", '"'], + ]); + next(); + }); + let buffer = ""; + for (let i = 0; i < 10; i++) { + buffer += "".concat(`Test ${i}`, ",", i, ",", '""""', "\n"); + if (buffer.length > 250) { + parser.write(buffer.substr(0, 250)); + buffer = buffer.substr(250); + } + } + parser.write(buffer); + parser.end(); + }); + + it("throw error if not writable", function (next) { + const parser = parse(); + parser.on("error", (err) => { + err.message.should.eql("write after end"); + next(); + }); + parser.write("abc,123"); + parser.end(); + parser.write("def,456"); + }); + + it("support multi-bytes utf8 encoded characters", function (next) { + const parser = parse((err, records) => { + records[0][0].should.eql("€"); + next(); + }); + parser.write(Buffer.from([0xe2])); + parser.write(Buffer.from([0x82])); + parser.write(Buffer.from([0xac])); + parser.end(); + }); +}); diff --git a/packages/csv-parse/test/api.sync.coffee b/packages/csv-parse/test/api.sync.coffee deleted file mode 100644 index ccecfee9..00000000 --- a/packages/csv-parse/test/api.sync.coffee +++ /dev/null @@ -1,46 +0,0 @@ - -import { parse } from '../lib/sync.js' - -describe 'API sync', -> - - it 'take a string and return records', -> - records = parse 'field_1,field_2\nvalue 1,value 2' - records.should.eql [ [ 'field_1', 'field_2' ], [ 'value 1', 'value 2' ] ] - - it 'take a buffer and return records', -> - records = parse Buffer.from 'field_1,field_2\nvalue 1,value 2' - records.should.eql [ [ 'field_1', 'field_2' ], [ 'value 1', 'value 2' ] ] - - it 'honors columns option', -> - records = parse 'field_1,field_2\nvalue 1,value 2', columns: true - records.should.eql [ 'field_1': 'value 1', 'field_2': 'value 2' ] - - it 'honors objname option', -> - records = parse 'field_1,field_2\nname 1,value 1\nname 2,value 2', objname: 'field_1', columns: true - records.should.eql { - 'name 1': {'field_1': 'name 1', 'field_2': 'value 1'}, - 'name 2': {'field_1': 'name 2', 'field_2': 'value 2'} - } - - it 'honors to_line', -> - records = parse '1\n2\n3\n4', to_line: 2 - records.should.eql [ [ '1' ], [ '2' ] ] - - it 'catch errors', -> - try - parse 'A,B\nB\nC,K', trim: true - throw Error 'Error not catched' - catch err - err.message.should.eql 'Invalid Record Length: expect 2, got 1 on line 2' - - it 'catch err in last line while flushing', -> - ( -> - parse """ - headerA, headerB - A2, B2 - A1, B1, C2, D2 - """ - ).should.throw 'Invalid Record Length: expect 2, got 4 on line 3' - - - diff --git a/packages/csv-parse/test/api.sync.js b/packages/csv-parse/test/api.sync.js new file mode 100644 index 00000000..e2f9cb70 --- /dev/null +++ b/packages/csv-parse/test/api.sync.js @@ -0,0 +1,65 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/sync.js"; + +describe("API sync", function () { + it("take a string and return records", function () { + const records = parse("field_1,field_2\nvalue 1,value 2"); + records.should.eql([ + ["field_1", "field_2"], + ["value 1", "value 2"], + ]); + }); + + it("take a buffer and return records", function () { + const records = parse(Buffer.from("field_1,field_2\nvalue 1,value 2")); + records.should.eql([ + ["field_1", "field_2"], + ["value 1", "value 2"], + ]); + }); + + it("honors columns option", function () { + const records = parse("field_1,field_2\nvalue 1,value 2", { + columns: true, + }); + records.should.eql([{ field_1: "value 1", field_2: "value 2" }]); + }); + + it("honors objname option", function () { + const records = parse("field_1,field_2\nname 1,value 1\nname 2,value 2", { + objname: "field_1", + columns: true, + }); + records.should.eql({ + "name 1": { field_1: "name 1", field_2: "value 1" }, + "name 2": { field_1: "name 2", field_2: "value 2" }, + }); + }); + + it("honors to_line", function () { + const records = parse("1\n2\n3\n4", { to_line: 2 }); + records.should.eql([["1"], ["2"]]); + }); + + it("catch errors", function () { + try { + parse("A,B\nB\nC,K", { trim: true }); + throw Error("Error not catched"); + } catch (err) { + err.message.should.eql( + "Invalid Record Length: expect 2, got 1 on line 2", + ); + } + }); + + it("catch err in last line while flushing", function () { + (() => { + parse(dedent` + headerA, headerB + A2, B2 + A1, B1, C2, D2 + `); + }).should.throw("Invalid Record Length: expect 2, got 4 on line 3"); + }); +}); diff --git a/packages/csv-parse/test/api.web_stream.coffee b/packages/csv-parse/test/api.web_stream.coffee deleted file mode 100644 index 5165f877..00000000 --- a/packages/csv-parse/test/api.web_stream.coffee +++ /dev/null @@ -1,54 +0,0 @@ - -import {generate as generateStream} from 'csv-generate/stream' -import {parse as parseStream} from '../lib/stream.js' -import {parse as parseClassic} from '../lib/index.js' - -describe 'api stream', -> - - it.skip 'perf classic', -> - console.time('classic') - generator = generateClassic({ - objectMode: true, - length: 10000000 - }) - for await record from generator - continue - console.timeEnd('classic') - - it.skip 'perf stream', -> - console.time('stream') - generator = generateStream({ - objectMode: true, - length: 10000000 - }) - reader = generator.getReader() - while true - { done, value } = await reader.read() - break if done - # for await chunk from generator.getReader().read() - # console.log(Buffer.from(chunk).toString()); - console.timeEnd('stream') - - it 'perf stream with iterator', -> - generator = generateStream - objectMode: false, - length: 5 - parser = parseStream() - stream = generator.pipeThrough parser - records = [] - for await record from stream - records.push record - records.length.should.eql 5 - - # it 'perf stream with reader', -> - # generator = generateStream({ - # objectMode: true, - # length: 10 - # }); - # records = [] - # reader = generator.getReader() - # while true - # { done, record } = await reader.read() - # break if done - # records.push record - # records.length.should.eql 10 diff --git a/packages/csv-parse/test/api.web_stream.js b/packages/csv-parse/test/api.web_stream.js new file mode 100644 index 00000000..9b79664e --- /dev/null +++ b/packages/csv-parse/test/api.web_stream.js @@ -0,0 +1,67 @@ +import "should"; +import { generate as generateStream } from "csv-generate/stream"; +import { parse as parseStream } from "../lib/stream.js"; + +describe("api stream", function () { + it.skip("perf classic", async function () { + console.time("classic"); + // TODO: implement + const generateClassic = () => {}; + const generator = generateClassic({ + objectMode: true, + length: 10000000, + }); + for await (const record of generator) { + record; + continue; + } + console.timeEnd("classic"); + }); + + it.skip("perf stream", async function () { + console.time("stream"); + const generator = generateStream({ + objectMode: true, + length: 10000000, + }); + const reader = generator.getReader(); + while (true) { + const { done, value } = await reader.read(); + value; + if (done) break; + } + // for await (const chunk of generator.getReader().read()) { + // console.log(Buffer.from(chunk).toString()); + // } + console.timeEnd("stream"); + }); + + it("perf stream with iterator", async function () { + const generator = generateStream({ + objectMode: false, + length: 5, + }); + const parser = parseStream(); + const stream = generator.pipeThrough(parser); + const records = []; + for await (const record of stream) { + records.push(record); + } + records.length.should.eql(5); + }); + + // it('perf stream with reader', async function() { + // const generator = generateStream({ + // objectMode: true, + // length: 10 + // }); + // const records = []; + // const reader = generator.getReader(); + // while (true) { + // const { done, record } = await reader.read(); + // if (done) break; + // records.push(record); + // } + // records.length.should.eql(10); + // }); +}); diff --git a/packages/csv-parse/test/info.comment_lines.coffee b/packages/csv-parse/test/info.comment_lines.coffee deleted file mode 100644 index d6a4974c..00000000 --- a/packages/csv-parse/test/info.comment_lines.coffee +++ /dev/null @@ -1,59 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'info comment_lines', -> - - it 'no empty lines', (next) -> - parse ''' - a,b,c - d,e,f - ''', comment: '#', (err, records, {comment_lines}) -> - comment_lines.should.eql 0 unless err - next err - - it 'comment in the middle of a line', (next) -> - parse ''' - a,b,c - d,e,f # comment - h,i,j - ''', comment: '#', (err, records, {comment_lines}) -> - comment_lines.should.eql 0 unless err - next err - - it 'single comment line', (next) -> - parse '# comment', comment: '#', (err, records, {comment_lines}) -> - comment_lines.should.eql 1 unless err - next err - - it 'single comment line with empty field', (next) -> - parse '""# comment', comment: '#', (err, records, {comment_lines}) -> - comment_lines.should.eql 0 unless err - next err - - it 'two line in the middle of dataset', (next) -> - parse ''' - a,b,c - # comment 1 - # comment 2 - d,e,f - ''', comment: '#', skip_empty_lines: true, (err, records, {comment_lines}) -> - comment_lines.should.eql 2 unless err - next err - - it 'one line at the end of dataset', (next) -> - parse ''' - a,b,c - d,e,f - # comment - ''', comment: '#', (err, records, {comment_lines}) -> - comment_lines.should.eql 1 unless err - next err - - it 'one line a the begining', (next) -> - parse ''' - # comment - a,b,c - d,e,f - ''', comment: '#', (err, records, {comment_lines}) -> - comment_lines.should.eql 1 unless err - next err diff --git a/packages/csv-parse/test/info.comment_lines.js b/packages/csv-parse/test/info.comment_lines.js new file mode 100644 index 00000000..dd307c37 --- /dev/null +++ b/packages/csv-parse/test/info.comment_lines.js @@ -0,0 +1,96 @@ +import "should"; +import { parse } from "../lib/index.js"; + +describe("info comment_lines", function () { + it("no empty lines", function (next) { + parse( + "a,b,c\nd,e,f", + { + comment: "#", + }, + (err, records, { comment_lines }) => { + if (!err) comment_lines.should.eql(0); + next(err); + }, + ); + }); + + it("comment in the middle of a line", function (next) { + parse( + "a,b,c\nd,e,f # comment\nh,i,j", + { + comment: "#", + }, + (err, records, { comment_lines }) => { + if (!err) comment_lines.should.eql(0); + next(err); + }, + ); + }); + + it("single comment line", function (next) { + parse( + "# comment", + { + comment: "#", + }, + (err, records, { comment_lines }) => { + if (!err) comment_lines.should.eql(1); + next(err); + }, + ); + }); + + it("single comment line with empty field", function (next) { + parse( + '""# comment', + { + comment: "#", + }, + (err, records, { comment_lines }) => { + if (!err) comment_lines.should.eql(0); + next(err); + }, + ); + }); + + it("two line in the middle of dataset", function (next) { + parse( + "a,b,c\n# comment 1\n# comment 2\nd,e,f", + { + comment: "#", + skip_empty_lines: true, + }, + (err, records, { comment_lines }) => { + if (!err) comment_lines.should.eql(2); + next(err); + }, + ); + }); + + it("one line at the end of dataset", function (next) { + parse( + "a,b,c\nd,e,f\n# comment", + { + comment: "#", + }, + (err, records, { comment_lines }) => { + if (!err) comment_lines.should.eql(1); + next(err); + }, + ); + }); + + it("one line a the begining", function (next) { + parse( + "# comment\na,b,c\nd,e,f", + { + comment: "#", + }, + (err, records, { comment_lines }) => { + if (!err) comment_lines.should.eql(1); + next(err); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/info.empty_lines.coffee b/packages/csv-parse/test/info.empty_lines.coffee deleted file mode 100644 index 1cb0f496..00000000 --- a/packages/csv-parse/test/info.empty_lines.coffee +++ /dev/null @@ -1,54 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'info empty_lines', -> - - it 'no lines', (next) -> - parse '', (err, records, {empty_lines}) -> - empty_lines.should.eql 0 - next() - - it 'no empty lines', (next) -> - parse ''' - a,b,c - d,e,f - ''', (err, records, {empty_lines}) -> - empty_lines.should.eql 0 - next() - - it 'one line in the middle of dataset', (next) -> - parse ''' - a,b,c - - d,e,f - ''', skip_empty_lines: true, (err, records, {empty_lines}) -> - empty_lines.should.eql 1 - next() - - it 'one line at the end of dataset', (next) -> - parse ''' - a,b,c - d,e,f - - ''', (err, records, {empty_lines}) -> - empty_lines.should.eql 1 - next() - - it 'dont count empty lines when empty and skip_empty_lines disabled', (next) -> - parse ''' - - a,b,c - d,e,f - ''', (err, records, {empty_lines}) -> - err.message.should.eql 'Invalid Record Length: expect 1, got 3 on line 2' - empty_lines.should.eql 0 - next() - - it 'dont count commented lines', (next) -> - parse ''' - a,b,c - d,e,f - # comment - ''', (err, records, {empty_lines}) -> - empty_lines.should.eql 0 - next() diff --git a/packages/csv-parse/test/info.empty_lines.js b/packages/csv-parse/test/info.empty_lines.js new file mode 100644 index 00000000..93d62b6c --- /dev/null +++ b/packages/csv-parse/test/info.empty_lines.js @@ -0,0 +1,55 @@ +import "should"; +import { parse } from "../lib/index.js"; + +describe("info empty_lines", function () { + it("no lines", function (next) { + parse("", (err, records, { empty_lines }) => { + empty_lines.should.eql(0); + next(); + }); + }); + + it("no empty lines", function (next) { + parse("a,b,c\nd,e,f", (err, records, { empty_lines }) => { + empty_lines.should.eql(0); + next(); + }); + }); + + it("one line in the middle of dataset", function (next) { + parse( + "a,b,c\n\nd,e,f", + { + skip_empty_lines: true, + }, + (err, records, { empty_lines }) => { + empty_lines.should.eql(1); + next(); + }, + ); + }); + + it("one line at the end of dataset", function (next) { + parse("a,b,c\nd,e,f\n", (err, records, { empty_lines }) => { + empty_lines.should.eql(1); + next(); + }); + }); + + it("dont count empty lines when empty and skip_empty_lines disabled", function (next) { + parse("\na,b,c\nd,e,f", (err, records, { empty_lines }) => { + err.message.should.eql( + "Invalid Record Length: expect 1, got 3 on line 2", + ); + empty_lines.should.eql(0); + next(); + }); + }); + + it("dont count commented lines", function (next) { + parse("a,b,c\nd,e,f\n# comment", (err, records, { empty_lines }) => { + empty_lines.should.eql(0); + next(); + }); + }); +}); diff --git a/packages/csv-parse/test/info.invalid_field_length.coffee b/packages/csv-parse/test/info.invalid_field_length.coffee deleted file mode 100644 index 334e82d9..00000000 --- a/packages/csv-parse/test/info.invalid_field_length.coffee +++ /dev/null @@ -1,33 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'info invalid_field_length', -> - - it 'with relax_column_count', (next) -> - parse ''' - a,b,c - d,e - f,g,h - i,j - ''', - relax_column_count: true - , (err, records, {invalid_field_length}) -> - records.length.should.eql 4 - invalid_field_length.should.eql 2 - next() - - it 'with relax_column_count and skip_empty_lines', (next) -> - parser = parse ''' - a,b,c - - d,e,f - - h,i - ''', - relax_column_count: true - skip_empty_lines: true - , (err, data, {empty_lines, invalid_field_length, records})-> - empty_lines.should.eql 2 - invalid_field_length.should.eql 1 - records.should.eql 3 - next() diff --git a/packages/csv-parse/test/info.invalid_field_length.js b/packages/csv-parse/test/info.invalid_field_length.js new file mode 100644 index 00000000..f48e594f --- /dev/null +++ b/packages/csv-parse/test/info.invalid_field_length.js @@ -0,0 +1,34 @@ +import "should"; +import { parse } from "../lib/index.js"; + +describe("info invalid_field_length", function () { + it("with relax_column_count", function (next) { + parse( + "a,b,c\nd,e\nf,g,h\ni,j", + { + relax_column_count: true, + }, + (err, records, { invalid_field_length }) => { + records.length.should.eql(4); + invalid_field_length.should.eql(2); + next(); + }, + ); + }); + + it("with relax_column_count and skip_empty_lines", function (next) { + parse( + "a,b,c\n\nd,e,f\n\nh,i", + { + relax_column_count: true, + skip_empty_lines: true, + }, + (err, data, { empty_lines, invalid_field_length, records }) => { + empty_lines.should.eql(2); + invalid_field_length.should.eql(1); + records.should.eql(3); + next(); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/info.lines.coffee b/packages/csv-parse/test/info.lines.coffee deleted file mode 100644 index c836fa46..00000000 --- a/packages/csv-parse/test/info.lines.coffee +++ /dev/null @@ -1,108 +0,0 @@ - -import { parse } from '../lib/index.js' -import { assert_error } from './api.assert_error.coffee' - -describe 'properties lines', -> - - it 'count lines', (next) -> - p = parse """ - a,b,c - d,e,f - h,i,j - """, (err) -> - p.info.lines.should.eql 3 unless err - next err - - it 'count no line', (next) -> - p = parse "", (err) -> - p.info.lines.should.eql 1 unless err - next err - - it 'count empty lines', (next) -> - p = parse "\n\n", (err) -> - p.info.lines.should.eql 3 unless err - next err - - it 'should count sparse empty lines', (next) -> - p = parse """ - - a,b,c - - d,e,f - h,i,j - - """, skip_empty_lines: true, (err) -> - p.info.lines.should.eql 6 unless err - next err - - it 'should display correct line number when invalid opening quotes', (next) -> - parse """ - "this","line","is",valid - "this","line",is,"also,valid" - this,"line",is,"invalid",h"ere" - "and",valid,line,follows... - """, (err, records) -> - assert_error err, - message: 'Invalid Opening Quote: a quote is found on field 4 at line 3, value is "h"' - code: 'INVALID_OPENING_QUOTE' - field: 'h' - (records == undefined).should.be.true - next() - - it 'should count empty lines with "skip_empty_lines" true', (next) -> - parse """ - "this","line","is",valid - - "this","line",is,"also,valid" - this,"line",is,invalid h"ere" - "and",valid,line,follows... - """, skip_empty_lines: true, (err, records) -> - assert_error err, - message: 'Invalid Opening Quote: a quote is found on field 3 at line 4, value is "invalid h"' - code: 'INVALID_OPENING_QUOTE' - field: 'invalid h' - (records == undefined).should.be.true - next() - - it 'should display correct line number when unclosed quotes', (next) -> - parse """ - "",1974,8.8392926E7,"","" - "",1974,8.8392926E7,"","" - "",1974,8.8392926E7,"","" - "",1974,8.8392926E7,""," - "",1974,8.8392926E7,"","" - """, (err, records) -> - assert_error err, - message: 'Quote Not Closed: the parsing is finished with an opening quote at line 5' - code: 'CSV_QUOTE_NOT_CLOSED' - (records == undefined).should.be.true - next() - - it 'should display correct line number when invalid quotes', (next) -> - parse """ - " 1974 8.8392926E7 ""t " - " 1974 8.8392926E7 ""t " - "" 1974 8.8392926E7 ""t "" - " 1974 8.8392926E7 ""t " - " 1974 8.8392926E7 "t "" - """, quote: '"', escape: '"', delimiter: "\t", (err, records) -> - assert_error err, - message: 'Invalid Closing Quote: got " " at line 3 instead of delimiter, record delimiter, trimable character (if activated) or comment' - code: 'CSV_INVALID_CLOSING_QUOTE' - (records == undefined).should.be.true - next() - - it 'should display correct line number when invalid quotes from string', (next) -> - parse """ - "",1974,8.8392926E7,"","" - "",1974,8.8392926E7,""t,"" - "",1974,8.8392926E7,""t,"" - "",1974,8.8392926E7,"","" - "",1974,8.8392926E7,"","" - "",1974,8.8392926E7,""t,"" - """, quote: '"', escape: '"', (err, records) -> - assert_error err, - message: 'Invalid Closing Quote: got "t" at line 2 instead of delimiter, record delimiter, trimable character (if activated) or comment' - code: 'CSV_INVALID_CLOSING_QUOTE' - (records == undefined).should.be.true - next() diff --git a/packages/csv-parse/test/info.lines.js b/packages/csv-parse/test/info.lines.js new file mode 100644 index 00000000..e22ff3f4 --- /dev/null +++ b/packages/csv-parse/test/info.lines.js @@ -0,0 +1,159 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("info lines", function () { + it("count lines", function (next) { + const p = parse("a,b,c\nd,e,f\nh,i,j", (err) => { + if (!err) p.info.lines.should.eql(3); + next(err); + }); + }); + + it("count no line", function (next) { + const p = parse("", (err) => { + if (!err) p.info.lines.should.eql(1); + next(err); + }); + }); + + it("count empty lines", function (next) { + const p = parse("\n\n", (err) => { + if (!err) p.info.lines.should.eql(3); + next(err); + }); + }); + + it("should count sparse empty lines", function (next) { + const p = parse( + "\na,b,c\n\nd,e,f\nh,i,j\n", + { + skip_empty_lines: true, + }, + (err) => { + if (!err) p.info.lines.should.eql(6); + next(err); + }, + ); + }); + + it("should display correct line number when invalid opening quotes", function (next) { + parse( + dedent` + "this","line","is",valid + "this","line",is,"also,valid" + this,"line",is,"invalid",h"ere" + "and",valid,line,follows... + `, + (err, records) => { + assert_error(err, { + message: + 'Invalid Opening Quote: a quote is found on field 4 at line 3, value is "h"', + code: "INVALID_OPENING_QUOTE", + field: "h", + }); + (records == undefined).should.be.true(); + next(); + }, + ); + }); + + it('should count empty lines with "skip_empty_lines" true', function (next) { + parse( + dedent` + "this","line","is",valid + + "this","line",is,"also,valid" + this,"line",is,invalid h"ere" + "and",valid,line,follows... + `, + { + skip_empty_lines: true, + }, + (err, records) => { + assert_error(err, { + message: + 'Invalid Opening Quote: a quote is found on field 3 at line 4, value is "invalid h"', + code: "INVALID_OPENING_QUOTE", + field: "invalid h", + }); + (records == undefined).should.be.true(); + next(); + }, + ); + }); + + it("should display correct line number when unclosed quotes", function (next) { + parse( + dedent` + "",1974,8.8392926E7,"","" + "",1974,8.8392926E7,"","" + "",1974,8.8392926E7,"","" + "",1974,8.8392926E7,""," + "",1974,8.8392926E7,"","" + `, + (err, records) => { + assert_error(err, { + message: + "Quote Not Closed: the parsing is finished with an opening quote at line 5", + code: "CSV_QUOTE_NOT_CLOSED", + }); + (records == undefined).should.be.true(); + next(); + }, + ); + }); + + it("should display correct line number when invalid quotes", function (next) { + parse( + dedent` + " 1974 8.8392926E7 ""t " + " 1974 8.8392926E7 ""t " + "" 1974 8.8392926E7 ""t "" + " 1974 8.8392926E7 ""t " + " 1974 8.8392926E7 "t "" + `, + { + quote: '"', + escape: '"', + delimiter: "\t", + }, + (err, records) => { + assert_error(err, { + message: + 'Invalid Closing Quote: got " " at line 3 instead of delimiter, record delimiter, trimable character (if activated) or comment', + code: "CSV_INVALID_CLOSING_QUOTE", + }); + (records == undefined).should.be.true(); + next(); + }, + ); + }); + + it("should display correct line number when invalid quotes from string", function (next) { + parse( + dedent` + "",1974,8.8392926E7,"","" + "",1974,8.8392926E7,""t,"" + "",1974,8.8392926E7,""t,"" + "",1974,8.8392926E7,"","" + "",1974,8.8392926E7,"","" + "",1974,8.8392926E7,""t,"" + `, + { + quote: '"', + escape: '"', + }, + (err, records) => { + assert_error(err, { + message: + 'Invalid Closing Quote: got "t" at line 2 instead of delimiter, record delimiter, trimable character (if activated) or comment', + code: "CSV_INVALID_CLOSING_QUOTE", + }); + (records == undefined).should.be.true(); + next(); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/info.records.coffee b/packages/csv-parse/test/info.records.coffee deleted file mode 100644 index 9c66903b..00000000 --- a/packages/csv-parse/test/info.records.coffee +++ /dev/null @@ -1,25 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'properties count records', -> - - it 'without any options', (next) -> - parser = parse """ - a,b,c - d,e,f - g,h,i - """, (err) -> - parser.info.records.should.eql 3 unless err - next err - - it 'with "column" option', (next) -> - parser = parse """ - 1,2,3 - d,e,f - g,h,i - j,k,l - m,n,o - """, columns: true, (err) -> - parser.info.records.should.eql 4 unless err - next err - diff --git a/packages/csv-parse/test/info.records.js b/packages/csv-parse/test/info.records.js new file mode 100644 index 00000000..8886ba66 --- /dev/null +++ b/packages/csv-parse/test/info.records.js @@ -0,0 +1,38 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("info count records", function () { + it("without any options", function (next) { + const parser = parse( + dedent` + a,b,c + d,e,f + g,h,i + `, + (err) => { + if (!err) parser.info.records.should.eql(3); + next(err); + }, + ); + }); + + it('with "column" option', function (next) { + const parser = parse( + dedent` + 1,2,3 + d,e,f + g,h,i + j,k,l + m,n,o + `, + { + columns: true, + }, + (err) => { + if (!err) parser.info.records.should.eql(4); + next(err); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/loaders/all.js b/packages/csv-parse/test/loaders/all.js deleted file mode 100644 index 4e81c344..00000000 --- a/packages/csv-parse/test/loaders/all.js +++ /dev/null @@ -1,15 +0,0 @@ -import * as coffee from "./coffee.js"; -import * as ts from "ts-node/esm"; - -const coffeeRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; -const tsRegex = /\.ts$/; - -export function load(url, context, next) { - if (coffeeRegex.test(url)) { - return coffee.load.apply(this, arguments); - } - if (tsRegex.test(url)) { - return ts.load.apply(this, arguments); - } - return next(url, context, next); -} diff --git a/packages/csv-parse/test/loaders/coffee.js b/packages/csv-parse/test/loaders/coffee.js deleted file mode 100644 index 75b15abe..00000000 --- a/packages/csv-parse/test/loaders/coffee.js +++ /dev/null @@ -1,20 +0,0 @@ -import CoffeeScript from "coffeescript"; - -// See https://github.com/nodejs/node/issues/36396 -const extensionsRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; - -export async function load(url, context, next) { - if (extensionsRegex.test(url)) { - const format = "module"; - const { source: rawSource } = await next(url, { format }); - const source = CoffeeScript.compile(rawSource.toString(), { - bare: true, - inlineMap: true, - filename: url, - header: false, - sourceMap: false, - }); - return { format, source }; - } - return next(url, context); -} diff --git a/packages/csv-parse/test/loaders/legacy/all.js b/packages/csv-parse/test/loaders/legacy/all.js deleted file mode 100644 index f5e57e54..00000000 --- a/packages/csv-parse/test/loaders/legacy/all.js +++ /dev/null @@ -1,36 +0,0 @@ -import * as coffee from "./coffee.js"; -import * as ts from "ts-node/esm"; - -const coffeeRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; -const tsRegex = /\.ts$/; - -export function resolve(specifier) { - if (coffeeRegex.test(specifier)) { - return coffee.resolve.apply(this, arguments); - } - if (tsRegex.test(specifier)) { - return ts.resolve.apply(this, arguments); - } - return ts.resolve.apply(this, arguments); -} - -export function getFormat(url) { - if (coffeeRegex.test(url)) { - return coffee.getFormat.apply(this, arguments); - } - if (tsRegex.test(url)) { - return ts.getFormat.apply(this, arguments); - } - return ts.getFormat.apply(this, arguments); -} - -export function transformSource(source, context) { - const { url } = context; - if (coffeeRegex.test(url)) { - return coffee.transformSource.apply(this, arguments); - } - if (tsRegex.test(url)) { - return ts.transformSource.apply(this, arguments); - } - return ts.transformSource.apply(this, arguments); -} diff --git a/packages/csv-parse/test/loaders/legacy/coffee.js b/packages/csv-parse/test/loaders/legacy/coffee.js deleted file mode 100644 index 6a9975db..00000000 --- a/packages/csv-parse/test/loaders/legacy/coffee.js +++ /dev/null @@ -1,50 +0,0 @@ -// coffeescript-loader.mjs -import { URL, pathToFileURL } from "url"; -import CoffeeScript from "coffeescript"; -import { cwd } from "process"; - -const baseURL = pathToFileURL(`${cwd()}/`).href; - -// CoffeeScript files end in .coffee, .litcoffee or .coffee.md. -const extensionsRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; - -export function resolve(specifier, context, defaultResolve) { - const { parentURL = baseURL } = context; - // Node.js normally errors on unknown file extensions, so return a URL for - // specifiers ending in the CoffeeScript file extensions. - if (extensionsRegex.test(specifier)) { - return { - url: new URL(specifier, parentURL).href, - stop: true, - }; - } - // Let Node.js handle all other specifiers. - return defaultResolve(specifier, context, defaultResolve); -} - -export function getFormat(url, context, defaultGetFormat) { - // Now that we patched resolve to let CoffeeScript URLs through, we need to - // tell Node.js what format such URLs should be interpreted as. For the - // purposes of this loader, all CoffeeScript URLs are ES modules. - if (extensionsRegex.test(url)) { - return { - format: "module", - stop: true, - }; - } - // Let Node.js handle all other URLs. - return defaultGetFormat(url, context, defaultGetFormat); -} - -export function transformSource(source, context, defaultTransformSource) { - const { url } = context; - - if (extensionsRegex.test(url)) { - return { - source: CoffeeScript.compile(String(source), { bare: true }), - }; - } - - // Let Node.js handle all other sources. - return defaultTransformSource(source, context, defaultTransformSource); -} diff --git a/packages/csv-parse/test/option.bom.coffee b/packages/csv-parse/test/option.bom.coffee deleted file mode 100644 index 938b3af4..00000000 --- a/packages/csv-parse/test/option.bom.coffee +++ /dev/null @@ -1,110 +0,0 @@ - -import { parse } from '../lib/index.js' -import { assert_error } from './api.assert_error.coffee' - -describe 'Option `bom`', -> - - it 'validate', -> - (-> - parse bom: 'ohno', ( -> ) - ).should.throw - message: 'Invalid option bom: bom must be true, got "ohno"' - code: 'CSV_INVALID_OPTION_BOM' - - it 'preserve bom if not defined', (next) -> - parser = parse (err, records) -> - records.should.eql [ - ['\ufeffa', 'b', 'c'] - ['d', 'e', 'f'] - ] - next() - parser.write Buffer.from "\ufeffa,b,c\n" - parser.write Buffer.from 'd,e,f' - parser.end() - - it 'preserve BOM if false', (next) -> - parser = parse bom: false, (err, records) -> - records.should.eql [ - ['\ufeffa', 'b', 'c'] - ['d', 'e', 'f'] - ] - next() - parser.write Buffer.from "\ufeffa,b,c\n" - parser.write Buffer.from 'd,e,f' - parser.end() - - it 'with column option with bom `true`', (next) -> - parser = parse - columns: true - bom: true - , (err, records) -> - records[0]['key'].should.eql 'value' - next() - parser.write Buffer.from "\ufeffkey\nvalue" - parser.end() - - it 'with column option with bom `false`', (next) -> - parser = parse - columns: true - bom: false - , (err, records) -> - records[0]['\ufeffkey'].should.eql 'value' - next() - parser.write Buffer.from "\ufeffkey\nvalue" - parser.end() - - it 'throw parsing error if quote follow bom', (next) -> - parser = parse (err) -> - assert_error err, - message: 'Invalid Opening Quote: a quote is found on field 0 at line 1, value is "\ufeff" (utf8 bom)' - code: 'INVALID_OPENING_QUOTE' - field: '\ufeff' - next() - parser.write Buffer.from "\ufeff\"a\",b,c\n" - parser.write Buffer.from 'd,e,f' - parser.end() - - it 'handle BOM with utf8 (default)', (next) -> - parser = parse bom: true, (err, records) -> - records.should.eql [ - ['a', 'b', 'c'] - ['d', 'e', 'f'] - ] - next() - parser.write Buffer.from "\ufeffa,b,c\n" - parser.write Buffer.from 'd,e,f' - parser.end() - - it 'preserve data if BOM is true', (next) -> - parser = parse bom: true, (err, records) -> - records.should.eql [ - ['a', 'b', 'c'] - ['d', 'e', 'f'] - ] - next() - parser.write Buffer.from "a,b,c\n" - parser.write Buffer.from 'd,e,f' - parser.end() - - it 'handle BOM even if no enough data in the first package', (next) -> - parser = parse bom: true, (err, records) -> - records.should.eql [ - ['a', 'b', 'c'] - ['d', 'e', 'f'] - ] - next() - parser.write Buffer.from [239] - parser.write Buffer.from [187] - parser.write Buffer.from [191] - parser.write Buffer.from "a,b,c\n" - parser.write Buffer.from "d,e,f" - parser.end() - - it 'preserve data if no enough data to detect BOM', (next) -> - parser = parse bom: true, (err, records) -> - records.should.eql [ - ['\ufffd'] - ] - next() - parser.write Buffer.from [239, 187] - parser.end() diff --git a/packages/csv-parse/test/option.bom.js b/packages/csv-parse/test/option.bom.js new file mode 100644 index 00000000..cb7d3526 --- /dev/null +++ b/packages/csv-parse/test/option.bom.js @@ -0,0 +1,136 @@ +import "should"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `bom`", function () { + it("validate", function () { + (() => { + parse({ bom: "ohno" }, () => {}); + }).should.throw({ + message: 'Invalid option bom: bom must be true, got "ohno"', + code: "CSV_INVALID_OPTION_BOM", + }); + }); + + it("preserve bom if not defined", function (next) { + const parser = parse((err, records) => { + records.should.eql([ + ["\ufeffa", "b", "c"], + ["d", "e", "f"], + ]); + next(); + }); + parser.write(Buffer.from("\ufeffa,b,c\n")); + parser.write(Buffer.from("d,e,f")); + parser.end(); + }); + + it("preserve BOM if false", function (next) { + const parser = parse({ bom: false }, (err, records) => { + records.should.eql([ + ["\ufeffa", "b", "c"], + ["d", "e", "f"], + ]); + next(); + }); + parser.write(Buffer.from("\ufeffa,b,c\n")); + parser.write(Buffer.from("d,e,f")); + parser.end(); + }); + + it("with column option with bom `true`", function (next) { + const parser = parse( + { + columns: true, + bom: true, + }, + (err, records) => { + records[0]["key"].should.eql("value"); + next(); + }, + ); + parser.write(Buffer.from("\ufeffkey\nvalue")); + parser.end(); + }); + + it("with column option with bom `false`", function (next) { + const parser = parse( + { + columns: true, + bom: false, + }, + (err, records) => { + records[0]["\ufeffkey"].should.eql("value"); + next(); + }, + ); + parser.write(Buffer.from("\ufeffkey\nvalue")); + parser.end(); + }); + + it("throw parsing error if quote follow bom", function (next) { + const parser = parse((err) => { + assert_error(err, { + message: + 'Invalid Opening Quote: a quote is found on field 0 at line 1, value is "\ufeff" (utf8 bom)', + code: "INVALID_OPENING_QUOTE", + field: "\ufeff", + }); + next(); + }); + parser.write(Buffer.from('\ufeff"a",b,c\n')); + parser.write(Buffer.from("d,e,f")); + parser.end(); + }); + + it("handle BOM with utf8 (default)", function (next) { + const parser = parse({ bom: true }, (err, records) => { + records.should.eql([ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + next(); + }); + parser.write(Buffer.from("\ufeffa,b,c\n")); + parser.write(Buffer.from("d,e,f")); + parser.end(); + }); + + it("preserve data if BOM is true", function (next) { + const parser = parse({ bom: true }, (err, records) => { + records.should.eql([ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + next(); + }); + parser.write(Buffer.from("a,b,c\n")); + parser.write(Buffer.from("d,e,f")); + parser.end(); + }); + + it("handle BOM even if no enough data in the first package", function (next) { + const parser = parse({ bom: true }, (err, records) => { + records.should.eql([ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + next(); + }); + parser.write(Buffer.from([239])); + parser.write(Buffer.from([187])); + parser.write(Buffer.from([191])); + parser.write(Buffer.from("a,b,c\n")); + parser.write(Buffer.from("d,e,f")); + parser.end(); + }); + + it("preserve data if no enough data to detect BOM", function (next) { + const parser = parse({ bom: true }, (err, records) => { + records.should.eql([["\ufffd"]]); + next(); + }); + parser.write(Buffer.from([239, 187])); + parser.end(); + }); +}); diff --git a/packages/csv-parse/test/option.cast.coffee b/packages/csv-parse/test/option.cast.coffee deleted file mode 100644 index d83c7a33..00000000 --- a/packages/csv-parse/test/option.cast.coffee +++ /dev/null @@ -1,289 +0,0 @@ - -import { parse } from '../lib/index.js' -import { assert_error } from './api.assert_error.coffee' - -describe 'Option `cast`', -> - - it 'validate', -> - (-> - parse cast: 'ohno', ( -> ) - ).should.throw - message: 'Invalid option cast: cast must be true or a function, got "ohno"' - code: 'CSV_INVALID_OPTION_CAST' - - describe 'boolean true', -> - - it 'all columns', (next) -> - parse '1,2,3', cast: true, (err, records) -> - records.should.eql [ [1, 2, 3] ] unless err - next() - - it 'convert numbers', (next) -> - records = [] - parser = parse({ cast: true }) - parser.write """ - 20322051544,1979,8.8017226E7,8e2,ABC,45,2000-01-01 - 28392898392,1974,8.8392926e7,8E2,DEF,23,2050-11-27 - """ - parser.on 'readable', -> - while d = parser.read() - records.push d - parser.on 'error', (err) -> - next err - parser.on 'end', -> - records.should.eql [ - [20322051544, 1979, 8.8017226e7, 800, 'ABC', 45, '2000-01-01'] - [28392898392, 1974, 8.8392926e7, 800, 'DEF', 23, '2050-11-27'] - ] - next() - parser.end() - - it 'ints', (next) -> - parse '123a,123,+123,-123,0123,+0123,-0123,', cast: true, (err, records) -> - records.should.eql [ ['123a', 123, 123, -123, 123, 123, -123, ''] ] - next() - - it 'ints isnt exposed to DOS vulnerabilities, npm security issue 69742', (next) -> - data = Array.from( length: 3000000 ).map( (x) -> '1' ).join('') + '!' - parse data, cast: true, (err, records) -> - records[0][0].length.should.eql 3000001 - next() - - it 'float', (next) -> - parse '123a,1.23,0.123,01.23,.123,123.', cast: true, (err, records) -> - records.should.eql [ ['123a', 1.23, 0.123, 1.23, 0.123, 123] ] - next() - - describe 'function', -> - - it 'custom function', (next) -> - parse """ - hello - """, - cast: (value, context) -> - Object.keys(context).sort() - , (err, records) -> - records.should.eql [ - [[ - 'bytes', - 'column', 'columns', 'comment_lines', 'empty_lines', 'error', - 'header', 'index', 'invalid_field_length', 'lines', 'quoting', - 'raw', 'records' - ]] - ] unless err - next err - - it 'return anything, eg a string or an object', (next) -> - parse """ - 2000-01-01,date1 - 2050-11-27,date2 - """, - cast: (value, context) -> - if context.index is 0 - then "#{value}T05:00:00.000Z" - else {...context} - , (err, records) -> - records.should.eql [ - [ '2000-01-01T05:00:00.000Z', { - bytes: 16, - column: 1, columns: false, comment_lines: 0, empty_lines: 0, error: undefined, - header: false, index: 1, invalid_field_length: 0, lines: 1, - quoting: false, raw: undefined, records: 0 - } ] - [ '2050-11-27T05:00:00.000Z', { - bytes: 33, - column: 1, columns: false, comment_lines: 0, empty_lines: 0, error: undefined, - header: false, index: 1, invalid_field_length: 0, lines: 2, - quoting: false, raw: undefined, records: 1 - } ] - ] unless err - next err - - it 'column is a string', (next) -> - parse """ - 1,2 - 3,4,5 - 6 - """, - columns: ['a', 'b'] - relax_column_count: true - cast: (value, {header, column}) -> - typeof column - , (err, records) -> - records.should.eql [ - {a: 'string', b: 'string'} - {a: 'string', b: 'string'} - {a: 'string'} - ] unless err - next err - - it 'dont call cast on unreferenced columns', (next) -> - # It doesn't make sense to cast value which cannot later be assigned - # to a column name in the returned object - parse """ - 1,2 - 3,4,5,6 - 7 - """, - columns: ['a', 'b'] - relax_column_count: true - cast: (value, {column}) -> - throw Error 'Oh no' if value > 4 and value < 7 - , (err, records) -> - next err - - it 'custom function with quoting context', (next) -> - parse """ - "2000-01-01",date1 - 2025-12-31,"date2" - 2050-11-27,"date3" - """, - cast: (value, {quoting}) -> - quoting - , (err, records) -> - records.should.eql [ - [ true, false ] - [ false, true ] - [ false, true ] - ] unless err - next err - - it 'return undefined', -> - - it 'accept all values', (next) -> - parse """ - 1,2,3 - 4,5,6 - """, - max_record_size: 10 - cast: (value, {index}) -> - switch index - when 0 - undefined - when 1 - false - when 2 - null - , (err, records) -> - records.shift().should.eql [undefined, false, null] - next err - - describe 'columns', -> - - it 'header is true on first line when columns is true', (next) -> - parse """ - a,b,c - 1,2,3 - 4,5,6 - """, - columns: true - cast: (value, {header}) -> - if header then value else parseInt value - , (err, records) -> - records.should.eql [ - {a: 1, b: 2, c: 3} - {a: 4, b: 5, c: 6} - ] unless err - next err - - it 'header is false when columns is an object', (next) -> - parse """ - 1,2,3 - 4,5,6 - """, - columns: ['a', 'b', 'c'] - cast: (value, {header}) -> - header.should.be.false() - parseInt value - , (err, records) -> - records.should.eql [ - {a: 1, b: 2, c: 3} - {a: 4, b: 5, c: 6} - ] unless err - next err - - it 'dont count header line', (next) -> - parse """ - a,b,c - 1,2,3 - 4,5,6 - """, - columns: true - cast: (value) -> - value - , (err, records) -> - next err - - it 'filter columns if value is undefined', (next) -> - parse """ - a,b,c,d - 1,2,3,4 - 5,6,7,8 - """, - columns: true, - cast: (value, context) -> - switch context.index - when 0 then if context.header then value else Number(value) - when 2 then value - else undefined - , (err, records) -> - records.should.eql [ - 'a': 1 - 'c': '3' - , - 'a': 5 - 'c': '7' - ] unless err - next err - - it 'throw error if header is invalid', (next) -> - parse """ - a,b,c,d - 1,2,3,4 - 5,6,7,8 - """, - columns: true, - cast: (value, context) -> - switch context.index - when 0 then if context.header then 'string' else value - when 1 then if context.header then undefined else value - when 2 then if context.header then null else value - when 3 then if context.header then 1234 else value - , (err) -> - assert_error err, - message: 'Invalid column definition: expect a string or a literal object, got 1234 at position 3' - code: 'CSV_INVALID_COLUMN_DEFINITION' - next() - - describe 'group_columns_by_name', -> - - it 'leading zeros are maintained when group_columns_by_name is true', (next) -> - parse """ - FIELD_1,FIELD_1,FIELD_1 - 0,2,3 - 0,0,4 - """, - cast: true - columns: true - group_columns_by_name: true - , (err, records) -> - records.should.eql [ - 'FIELD_1': [0, 2, 3] - , - 'FIELD_1': [0, 0, 4] - ] unless err - next err - - describe 'error', -> - - it 'catch error', (next) -> - parse """ - 1,2,3 - 4,5,6 - """, - cast: (value) -> - if value is '6' then throw Error 'Catchme' - value - , (err, records) -> - err.message.should.eql 'Catchme' - next() diff --git a/packages/csv-parse/test/option.cast.js b/packages/csv-parse/test/option.cast.js new file mode 100644 index 00000000..f6dfe1a6 --- /dev/null +++ b/packages/csv-parse/test/option.cast.js @@ -0,0 +1,407 @@ +import "should"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `cast`", function () { + it("validate", function () { + (() => { + parse({ cast: "ohno" }, () => {}); + }).should.throw({ + message: + 'Invalid option cast: cast must be true or a function, got "ohno"', + code: "CSV_INVALID_OPTION_CAST", + }); + }); + + describe("boolean true", function () { + it("all columns", function (next) { + parse("1,2,3", { cast: true }, (err, records) => { + if (!err) records.should.eql([[1, 2, 3]]); + next(); + }); + }); + + it("convert numbers", function (next) { + const records = []; + const parser = parse({ cast: true }); + parser.write( + "20322051544,1979,8.8017226E7,8e2,ABC,45,2000-01-01\n28392898392,1974,8.8392926e7,8E2,DEF,23,2050-11-27", + ); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("error", (err) => { + next(err); + }); + parser.on("end", () => { + records.should.eql([ + [20322051544, 1979, 8.8017226e7, 800, "ABC", 45, "2000-01-01"], + [28392898392, 1974, 8.8392926e7, 800, "DEF", 23, "2050-11-27"], + ]); + next(); + }); + parser.end(); + }); + + it("ints", function (next) { + parse( + "123a,123,+123,-123,0123,+0123,-0123,", + { cast: true }, + (err, records) => { + records.should.eql([["123a", 123, 123, -123, 123, 123, -123, ""]]); + next(); + }, + ); + }); + + it("ints isnt exposed to DOS vulnerabilities, npm security issue 69742", function (next) { + const data = + Array.from({ length: 3000000 }) + .map(() => "1") + .join("") + "!"; + parse(data, { cast: true }, (err, records) => { + records[0][0].length.should.eql(3000001); + next(); + }); + }); + + it("float", function (next) { + parse( + "123a,1.23,0.123,01.23,.123,123.", + { cast: true }, + (err, records) => { + records.should.eql([["123a", 1.23, 0.123, 1.23, 0.123, 123]]); + next(); + }, + ); + }); + }); + + describe("function", function () { + it("custom function", function (next) { + parse( + "hello", + { + cast: (value, context) => Object.keys(context).sort(), + }, + (err, records) => { + if (!err) { + records.should.eql([ + [ + [ + "bytes", + "column", + "columns", + "comment_lines", + "empty_lines", + "error", + "header", + "index", + "invalid_field_length", + "lines", + "quoting", + "raw", + "records", + ], + ], + ]); + } + next(err); + }, + ); + }); + + it("return anything, eg a string or an object", function (next) { + parse( + "2000-01-01,date1\n2050-11-27,date2", + { + cast: (value, context) => { + if (context.index === 0) { + return `${value}T05:00:00.000Z`; + } else { + return { ...context }; + } + }, + }, + (err, records) => { + if (!err) { + records.should.eql([ + [ + "2000-01-01T05:00:00.000Z", + { + bytes: 16, + column: 1, + columns: false, + comment_lines: 0, + empty_lines: 0, + error: undefined, + header: false, + index: 1, + invalid_field_length: 0, + lines: 1, + quoting: false, + raw: undefined, + records: 0, + }, + ], + [ + "2050-11-27T05:00:00.000Z", + { + bytes: 33, + column: 1, + columns: false, + comment_lines: 0, + empty_lines: 0, + error: undefined, + header: false, + index: 1, + invalid_field_length: 0, + lines: 2, + quoting: false, + raw: undefined, + records: 1, + }, + ], + ]); + } + next(err); + }, + ); + }); + + it("column is a string", function (next) { + parse( + "1,2\n3,4,5\n6", + { + columns: ["a", "b"], + relax_column_count: true, + cast: (value, { column }) => typeof column, + }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "string", b: "string" }, + { a: "string", b: "string" }, + { a: "string" }, + ]); + } + next(err); + }, + ); + }); + + it("dont call cast on unreferenced columns", function (next) { + parse( + "1,2\n3,4,5,6\n7", + { + columns: ["a", "b"], + relax_column_count: true, + cast: (value) => { + if (value > 4 && value < 7) throw Error("Oh no"); + }, + }, + (err) => { + next(err); + }, + ); + }); + + it("custom function with quoting context", function (next) { + parse( + '"2000-01-01",date1\n2025-12-31,"date2"\n2050-11-27,"date3"', + { + cast: (value, { quoting }) => quoting, + }, + (err, records) => { + if (!err) { + records.should.eql([ + [true, false], + [false, true], + [false, true], + ]); + } + next(err); + }, + ); + }); + + it("accept all values", function (next) { + parse( + "1,2,3\n4,5,6", + { + max_record_size: 10, + cast: (value, { index }) => { + switch (index) { + case 0: + return undefined; + case 1: + return false; + case 2: + return null; + } + }, + }, + (err, records) => { + records.shift().should.eql([undefined, false, null]); + next(err); + }, + ); + }); + }); + + describe("columns", function () { + it("header is true on first line when columns is true", function (next) { + parse( + "a,b,c\n1,2,3\n4,5,6", + { + columns: true, + cast: (value, { header }) => (header ? value : parseInt(value)), + }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: 1, b: 2, c: 3 }, + { a: 4, b: 5, c: 6 }, + ]); + } + next(err); + }, + ); + }); + + it("header is false when columns is an object", function (next) { + parse( + "1,2,3\n4,5,6", + { + columns: ["a", "b", "c"], + cast: (value, { header }) => { + header.should.be.false(); + return parseInt(value); + }, + }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: 1, b: 2, c: 3 }, + { a: 4, b: 5, c: 6 }, + ]); + } + next(err); + }, + ); + }); + + it("dont count header line", function (next) { + parse( + "a,b,c\n1,2,3\n4,5,6", + { + columns: true, + cast: (value) => value, + }, + (err) => { + next(err); + }, + ); + }); + + it("filter columns if value is undefined", function (next) { + parse( + "a,b,c,d\n1,2,3,4\n5,6,7,8", + { + columns: true, + cast: (value, context) => { + switch (context.index) { + case 0: + return context.header ? value : Number(value); + case 2: + return value; + default: + return undefined; + } + }, + }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: 1, c: "3" }, + { a: 5, c: "7" }, + ]); + } + next(err); + }, + ); + }); + + it("throw error if header is invalid", function (next) { + parse( + "a,b,c,d\n1,2,3,4\n5,6,7,8", + { + columns: true, + cast: (value, context) => { + switch (context.index) { + case 0: + return context.header ? "string" : value; + case 1: + return context.header ? undefined : value; + case 2: + return context.header ? null : value; + case 3: + return context.header ? 1234 : value; + } + }, + }, + (err) => { + assert_error(err, { + message: + "Invalid column definition: expect a string or a literal object, got 1234 at position 3", + code: "CSV_INVALID_COLUMN_DEFINITION", + }); + next(); + }, + ); + }); + }); + + describe("group_columns_by_name", function () { + it("leading zeros are maintained when group_columns_by_name is true", function (next) { + parse( + "FIELD_1,FIELD_1,FIELD_1\n0,2,3\n0,0,4", + { + cast: true, + columns: true, + group_columns_by_name: true, + }, + (err, records) => { + if (!err) { + records.should.eql([ + { FIELD_1: [0, 2, 3] }, + { FIELD_1: [0, 0, 4] }, + ]); + } + next(err); + }, + ); + }); + }); + + describe("error", function () { + it("catch error", function (next) { + parse( + "1,2,3\n4,5,6", + { + cast: (value) => { + if (value === "6") throw Error("Catchme"); + return value; + }, + }, + (err) => { + err.message.should.eql("Catchme"); + next(); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/option.cast_date.coffee b/packages/csv-parse/test/option.cast_date.coffee deleted file mode 100644 index ccabd850..00000000 --- a/packages/csv-parse/test/option.cast_date.coffee +++ /dev/null @@ -1,57 +0,0 @@ - -import { parse } from '../lib/index.js' -import { assert_error } from './api.assert_error.coffee' - -describe 'Option `cast_date`', -> - - it 'validate', -> - (-> - parse cast: true, cast_date: 'ohno', ( -> ) - ).should.throw - message: 'Invalid option cast_date: cast_date must be true or a function, got "ohno"' - code: 'CSV_INVALID_OPTION_CAST_DATE' - - it 'true', (next) -> - parser = parse """ - 2000-01-01,date1 - 2050-11-27,date2 - """, - cast: true - cast_date: true - , (err, records) -> - records.should.eql [ - [ new Date('2000-01-01T00:00:00.000Z'), 'date1' ], - [ new Date('2050-11-27T00:00:00.000Z'), 'date2' ] - ] - next err - - it 'as a function', (next) -> - # Current implementation rely on `isNaN(Date.parse(value))` - # While it return `NaN` in Firefox, Node.js return a timestamp for - # `Date.parse('Test 1')` - parser = parse """ - 2000-01-01 - 2050-11-27 - """, - cast: true - cast_date: (value, context) -> - new Date( (new Date(value)).getTime() + context.lines*60*60*1000) - , (err, records) -> - records.should.eql [ - [ new Date('2000-01-01T01:00:00.000Z') ], - [ new Date('2050-11-27T02:00:00.000Z') ] - ] - next err - - it 'value end with space and number (issue #342)', (next) -> - # Current implementation rely on `isNaN(Date.parse(value))` - # While it return `NaN` in Firefox, Node.js return a timestamp for - # `node -e 'console.info(Date.parse("Test 1"))'` - parser = parse """ - Test 1 - """, - cast: true - cast_date: true - , (err, [[record]]) -> - record.toISOString().should.match /^\d{4}-\d{2}-\d{2}/ - next err diff --git a/packages/csv-parse/test/option.cast_date.js b/packages/csv-parse/test/option.cast_date.js new file mode 100644 index 00000000..fd1b2cc7 --- /dev/null +++ b/packages/csv-parse/test/option.cast_date.js @@ -0,0 +1,72 @@ +import "should"; +import { parse } from "../lib/index.js"; + +describe("Option `cast_date`", function () { + it("validate", function () { + (() => { + parse({ cast: true, cast_date: "ohno" }, () => {}); + }).should.throw({ + message: + 'Invalid option cast_date: cast_date must be true or a function, got "ohno"', + code: "CSV_INVALID_OPTION_CAST_DATE", + }); + }); + + it("true", function (next) { + parse( + "2000-01-01,date1\n2050-11-27,date2", + { + cast: true, + cast_date: true, + }, + (err, records) => { + records.should.eql([ + [new Date("2000-01-01T00:00:00.000Z"), "date1"], + [new Date("2050-11-27T00:00:00.000Z"), "date2"], + ]); + next(err); + }, + ); + }); + + it("as a function", function (next) { + // Current implementation rely on `isNaN(Date.parse(value))` + // While it return `NaN` in Firefox, Node.js return a timestamp for + // `Date.parse('Test 1')` + parse( + "2000-01-01\n2050-11-27", + { + cast: true, + cast_date: (value, context) => { + return new Date( + new Date(value).getTime() + context.lines * 60 * 60 * 1000, + ); + }, + }, + (err, records) => { + records.should.eql([ + [new Date("2000-01-01T01:00:00.000Z")], + [new Date("2050-11-27T02:00:00.000Z")], + ]); + next(err); + }, + ); + }); + + it("value end with space and number (issue #342)", function (next) { + // Current implementation rely on `isNaN(Date.parse(value))` + // While it return `NaN` in Firefox, Node.js return a timestamp for + // `node -e 'console.info(Date.parse("Test 1"))'` + parse( + "Test 1", + { + cast: true, + cast_date: true, + }, + (err, [[record]]) => { + record.toISOString().should.match(/^\d{4}-\d{2}-\d{2}/); + next(err); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.columns.coffee b/packages/csv-parse/test/option.columns.coffee deleted file mode 100644 index 24840d26..00000000 --- a/packages/csv-parse/test/option.columns.coffee +++ /dev/null @@ -1,331 +0,0 @@ - -import { parse } from '../lib/index.js' -import { assert_error } from './api.assert_error.coffee' - -describe 'Option `columns`', -> - - describe 'validation', -> - - it 'check the columns value', -> - (-> - parse "", columns: [{ - name: 'valid', - },{ - invalid: 'oh no' - }], (->) - ).should.throw - message: 'Option columns missing name: property "name" is required at position 1 when column is an object literal' - code: 'CSV_OPTION_COLUMNS_MISSING_NAME' - - it 'check the columns value', -> - (-> - parse "", columns: [{name: 'valid'}, true], (->) - ).should.throw - message: 'Invalid column definition: expect a string or a literal object, got true at position 1' - code: 'CSV_INVALID_COLUMN_DEFINITION' - - it 'check the columns value', -> - (-> - parse "", columns: {}, (->) - ).should.throw - message: 'Invalid option columns: expect an array, a function or true, got {}' - code: 'CSV_INVALID_OPTION_COLUMNS' - - it 'skip columns with false value', (next) -> - parse """ - 1,2,3,4 - 5,6,7,8 - """, columns: ["a", false, "c", false], (err, records) -> - records.should.eql [ - { a: "1", c: "3" } - { a: "5", c: "7" } - ] unless err - next err - - it 'dont mutate options', (next) -> - columns = ["a", false, "c", false] - parse """ - 1,2,3,4 - 5,6,7,8 - """, columns: columns, (err) -> - columns.should.eql ["a", false, "c", false] unless err - next err - - describe 'duplicate column names', -> - - it 'with true', (next) -> - parse ''' - a,b,a,c - 1,2,3,4 - 5,6,7,8 - ''', columns: true, (err, records) -> - records.should.eql [ - {a: '3', b: '2', c: '4'} - {a: '7', b: '6', c: '8'} - ] unless err - next err - - it 'with array', (next) -> - columns = ['a', 'b', 'a', 'c'] - parse ''' - 1,2,3,4 - 5,6,7,8 - ''', columns: columns, (err, records) -> - records.should.eql [ - {a: '3', b: '2', c: '4'} - {a: '7', b: '6', c: '8'} - ] unless err - next err - - it 'lines with empty column names', (next) -> - parse ''' - ,,, - 1,2,3,4 - 5,6,7,8 - ''', columns: true, (err, records) -> - records.should.eql [ - {'': '4'} - {'': '8'} - ] unless err - next err - - describe 'boolean', -> - - it 'read from first row if true', (next) -> - parse """ - FIELD_1,FIELD_2,FIELD_3,FIELD_4,FIELD_5,FIELD_6 - 20322051544,1979,8.8017226E7,ABC,45,2000-01-01 - 28392898392,1974,8.8392926E7,DEF,23,2050-11-27 - """, columns: true, (err, records) -> - records.should.eql [ - 'FIELD_1': '20322051544' - 'FIELD_2': '1979' - 'FIELD_3': '8.8017226E7' - 'FIELD_4': 'ABC' - 'FIELD_5': '45' - 'FIELD_6': '2000-01-01' - , - 'FIELD_1': '28392898392' - 'FIELD_2': '1974' - 'FIELD_3': '8.8392926E7' - 'FIELD_4': 'DEF' - 'FIELD_5': '23' - 'FIELD_6': '2050-11-27' - ] unless err - next err - - it 'disabled if false', (next) -> - parse """ - a,b,c - d,e,f - """, columns: false, (err, records) -> - records.should.eql [ - ['a', 'b', 'c'] - ['d', 'e', 'f'] - ] unless err - next err - - it 'header detection honors skip_empty_lines', (next) -> - parse """ - - a,b,c - 1,2,3 - """, columns: true, skip_empty_lines: true, (err, records) -> - records.should.eql [ - {a: "1", b: "2", c: "3"} - ] unless err - next err - - it 'header detection honors skip_records_with_empty_values', (next) -> - parse """ - ,, - a,b,c - 1,2,3 - """, columns: true, skip_records_with_empty_values: true, (err, records) -> - records.should.eql [ - {a: "1", b: "2", c: "3"} - ] unless err - next err - - describe 'array', -> - - it 'enforced by user if array', (next) -> - parse """ - 20322051544,1979,8.8017226E7,ABC,45,2000-01-01 - 28392898392,1974,8.8392926E7,DEF,23,2050-11-27 - """, columns: ["FIELD_1", "FIELD_2", "FIELD_3", "FIELD_4", "FIELD_5", "FIELD_6"], (err, records) -> - records.should.eql [ - "FIELD_1":"20322051544" - "FIELD_2":"1979" - "FIELD_3":"8.8017226E7" - "FIELD_4":"ABC" - "FIELD_5":"45" - "FIELD_6":"2000-01-01" - , - "FIELD_1":"28392898392" - "FIELD_2":"1974" - "FIELD_3":"8.8392926E7" - "FIELD_4":"DEF" - "FIELD_5":"23" - "FIELD_6":"2050-11-27" - ] unless err - next err - - it 'validate options column length on first line', (next) -> - parse """ - 1,2,3 - 4,5,6,x - 7,8,9,x - """, columns: ["a", "b", "c", "d"], (err) -> - assert_error err, - message: 'Invalid Record Length: columns length is 4, got 3 on line 1' - code: 'CSV_RECORD_INCONSISTENT_COLUMNS' - next() - - it 'validate options column length on last line', (next) -> - parse """ - 1,2,3,x - 4,5,6,x - 7,8,9 - """, columns: ["a", "b", "c", "d"], (err) -> - assert_error err, - message: 'Invalid Record Length: columns length is 4, got 3 on line 3' - code: 'CSV_RECORD_INCONSISTENT_COLUMNS' - next() - - it 'context column is null when cast force the context creation', (next) -> - # Trigger cast to force the creation of a context - parse "a\nb,\n", - columns: true - cast: (value) -> value - , (err) -> - assert_error err, - message: 'Invalid Record Length: columns length is 1, got 2 on line 2' - code: 'CSV_RECORD_INCONSISTENT_COLUMNS' - column: null - next() - - it 'context column is null when columns number inferieur to record length, fix regression #259', (next) -> - parse "a\nb,\n", columns: true, (err) -> - assert_error err, - message: 'Invalid Record Length: columns length is 1, got 2 on line 2' - code: 'CSV_RECORD_INCONSISTENT_COLUMNS' - column: null - next() - - it 'skips column names defined as undefined', (next) -> - parse """ - 0,1,2,3,4 - 5,6,7,8,9 - """, columns: ['a',,,, 'b'], (err, records) -> - records.should.eql [ - {a: '0', b: '4'} - {a: '5', b: '9'} - ] unless err - next err - - it 'skips column names defined as false', (next) -> - parse """ - 0,1,2,3,4 - 5,6,7,8,9 - """, columns: ['a',false,false,false, 'b'], (err, records) -> - records.should.eql [ - {a: '0', b: '4'} - {a: '5', b: '9'} - ] unless err - next err - - it 'skips column names defined as null and last', (next) -> - # Fix a but where error was not throw if columns empty count was equal to - # the number of column in the dataset plus one. - # It seems the bug is due to to JavaScript as - # `console.log(JSON.stringify([,,]))` - # report only 2 null values - parse """ - 0,1,2 - 3,4,5 - """, columns: ['a',null,null], (err, records) -> - records.should.eql [ - { a: '0' } - { a: '3' } - ] unless err - next err - - it 'illustrate bug with undefined values', (next) -> - # Be careful on how JavaScript handle multiple trailing commas as it - # will discard the last one. - # For exemple, `console.log(JSON.stringify([,,]))` report 2 null values - parse """ - 0,1,2 - 3,4,5 - """, columns: ['a',,,], (err, records) -> - records.should.eql [ - { a: '0' } - { a: '3' } - ] unless err - next err - - it 'last column value ignore when `null`', (next) -> - # Trigger a bug where error is try to stringify and parse an undefined - # value, conjointly triggered by a null column and a - # CSV_RECORD_INCONSISTENT_COLUMNS error - parse """ - col_a,col_b,col_c - foo,bar - foo,bar,baz - """ - , columns: ['a', 'b', null], (err) -> - err.code.should.eql 'CSV_RECORD_INCONSISTENT_COLUMNS' - next() - - describe 'function', -> - - it 'takes first line as argument', (next) -> - parse """ - FIELD_1,FIELD_2,FIELD_3,FIELD_4,FIELD_5,FIELD_6 - 20322051544,1979,8.8017226E7,ABC,45,2000-01-01 - 28392898392,1974,8.8392926E7,DEF,23,2050-11-27 - """, columns: (record) -> - for column in record - column.toLowerCase() - , (err, records) -> - records.should.eql [ - "field_1":"20322051544" - "field_2":"1979" - "field_3":"8.8017226E7" - "field_4":"ABC" - "field_5":"45" - "field_6":"2000-01-01" - , - "field_1":"28392898392" - "field_2":"1974" - "field_3": "8.8392926E7" - "field_4":"DEF" - "field_5":"23" - "field_6":"2050-11-27" - ] unless err - next err - - it 'catch thrown errors', (next) -> - parse """ - FIELD_1,FIELD_2,FIELD_3,FIELD_4 - abc,123,def,456 - hij,789,klm,0 - """, columns: (columns) -> - throw Error 'Catchme' - , (err) -> - err.message.should.eql 'Catchme' - next() - - it 'must return an array of headers', (next) -> - parse """ - FIELD_1 - abc - """, columns: (columns) -> - return {FIELD: true} - , (err) -> - assert_error err, - message: 'Invalid Column Mapping: expect an array from column function, got {"FIELD":true}' - code: 'CSV_INVALID_COLUMN_MAPPING' - headers: FIELD: true - next() diff --git a/packages/csv-parse/test/option.columns.js b/packages/csv-parse/test/option.columns.js new file mode 100644 index 00000000..3958580a --- /dev/null +++ b/packages/csv-parse/test/option.columns.js @@ -0,0 +1,482 @@ +import "should"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `columns`", function () { + describe("validation", function () { + it("check the columns value", function () { + (() => { + parse( + "", + { + columns: [ + { + name: "valid", + }, + { + invalid: "oh no", + }, + ], + }, + () => {}, + ); + }).should.throw({ + message: + 'Option columns missing name: property "name" is required at position 1 when column is an object literal', + code: "CSV_OPTION_COLUMNS_MISSING_NAME", + }); + }); + + it("check the columns is not a boolean", function () { + (() => { + parse("", { columns: [{ name: "valid" }, true] }, () => {}); + }).should.throw({ + message: + "Invalid column definition: expect a string or a literal object, got true at position 1", + code: "CSV_INVALID_COLUMN_DEFINITION", + }); + }); + + it("check the columns options is not empty", function () { + (() => { + parse("", { columns: {} }, () => {}); + }).should.throw({ + message: + "Invalid option columns: expect an array, a function or true, got {}", + code: "CSV_INVALID_OPTION_COLUMNS", + }); + }); + + it("skip columns with false value", function (next) { + parse( + "1,2,3,4\n5,6,7,8", + { + columns: ["a", false, "c", false], + }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "1", c: "3" }, + { a: "5", c: "7" }, + ]); + } + next(err); + }, + ); + }); + + it("dont mutate options", function (next) { + const columns = ["a", false, "c", false]; + parse( + "1,2,3,4\n5,6,7,8", + { + columns: columns, + }, + (err) => { + if (!err) { + columns.should.eql(["a", false, "c", false]); + } + next(err); + }, + ); + }); + }); + + describe("duplicate column names", function () { + it("with true", function (next) { + parse( + "a,b,a,c\n1,2,3,4\n5,6,7,8", + { + columns: true, + }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "3", b: "2", c: "4" }, + { a: "7", b: "6", c: "8" }, + ]); + } + next(err); + }, + ); + }); + + it("with array", function (next) { + const columns = ["a", "b", "a", "c"]; + parse( + "1,2,3,4\n5,6,7,8", + { + columns: columns, + }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "3", b: "2", c: "4" }, + { a: "7", b: "6", c: "8" }, + ]); + } + next(err); + }, + ); + }); + + it("lines with empty column names", function (next) { + parse( + ",,,\n1,2,3,4\n5,6,7,8", + { + columns: true, + }, + (err, records) => { + if (!err) { + records.should.eql([{ "": "4" }, { "": "8" }]); + } + next(err); + }, + ); + }); + }); + + describe("boolean", function () { + it("read from first row if true", function (next) { + parse( + "FIELD_1,FIELD_2,FIELD_3,FIELD_4,FIELD_5,FIELD_6\n20322051544,1979,8.8017226E7,ABC,45,2000-01-01\n28392898392,1974,8.8392926E7,DEF,23,2050-11-27", + { + columns: true, + }, + (err, records) => { + if (!err) { + records.should.eql([ + { + FIELD_1: "20322051544", + FIELD_2: "1979", + FIELD_3: "8.8017226E7", + FIELD_4: "ABC", + FIELD_5: "45", + FIELD_6: "2000-01-01", + }, + { + FIELD_1: "28392898392", + FIELD_2: "1974", + FIELD_3: "8.8392926E7", + FIELD_4: "DEF", + FIELD_5: "23", + FIELD_6: "2050-11-27", + }, + ]); + } + next(err); + }, + ); + }); + + it("disabled if false", function (next) { + parse( + "a,b,c\nd,e,f", + { + columns: false, + }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + } + next(err); + }, + ); + }); + + it("header detection honors skip_empty_lines", function (next) { + parse( + "\na,b,c\n1,2,3", + { + columns: true, + skip_empty_lines: true, + }, + (err, records) => { + if (!err) { + records.should.eql([{ a: "1", b: "2", c: "3" }]); + } + next(err); + }, + ); + }); + + it("header detection honors skip_records_with_empty_values", function (next) { + parse( + ",,\na,b,c\n1,2,3", + { + columns: true, + skip_records_with_empty_values: true, + }, + (err, records) => { + if (!err) { + records.should.eql([{ a: "1", b: "2", c: "3" }]); + } + next(err); + }, + ); + }); + }); + + describe("array", function () { + it("enforced by user if array", function (next) { + parse( + "20322051544,1979,8.8017226E7,ABC,45,2000-01-01\n28392898392,1974,8.8392926E7,DEF,23,2050-11-27", + { + columns: [ + "FIELD_1", + "FIELD_2", + "FIELD_3", + "FIELD_4", + "FIELD_5", + "FIELD_6", + ], + }, + (err, records) => { + if (!err) { + records.should.eql([ + { + FIELD_1: "20322051544", + FIELD_2: "1979", + FIELD_3: "8.8017226E7", + FIELD_4: "ABC", + FIELD_5: "45", + FIELD_6: "2000-01-01", + }, + { + FIELD_1: "28392898392", + FIELD_2: "1974", + FIELD_3: "8.8392926E7", + FIELD_4: "DEF", + FIELD_5: "23", + FIELD_6: "2050-11-27", + }, + ]); + } + next(err); + }, + ); + }); + + it("validate options column length on first line", function (next) { + parse( + "1,2,3\n4,5,6,x\n7,8,9,x", + { + columns: ["a", "b", "c", "d"], + }, + (err) => { + assert_error(err, { + message: + "Invalid Record Length: columns length is 4, got 3 on line 1", + code: "CSV_RECORD_INCONSISTENT_COLUMNS", + }); + next(); + }, + ); + }); + + it("validate options column length on last line", function (next) { + parse( + "1,2,3,x\n4,5,6,x\n7,8,9", + { + columns: ["a", "b", "c", "d"], + }, + (err) => { + assert_error(err, { + message: + "Invalid Record Length: columns length is 4, got 3 on line 3", + code: "CSV_RECORD_INCONSISTENT_COLUMNS", + }); + next(); + }, + ); + }); + + it("context column is null when cast force the context creation", function (next) { + parse( + "a\nb,\n", + { + columns: true, + cast: (value) => value, + }, + (err) => { + assert_error(err, { + message: + "Invalid Record Length: columns length is 1, got 2 on line 2", + code: "CSV_RECORD_INCONSISTENT_COLUMNS", + column: null, + }); + next(); + }, + ); + }); + + it("context column is null when columns number inferieur to record length, fix regression #259", function (next) { + parse( + "a\nb,\n", + { + columns: true, + }, + (err) => { + assert_error(err, { + message: + "Invalid Record Length: columns length is 1, got 2 on line 2", + code: "CSV_RECORD_INCONSISTENT_COLUMNS", + column: null, + }); + next(); + }, + ); + }); + + it("skips column names defined as undefined", function (next) { + parse( + "0,1,2,3,4\n5,6,7,8,9", + { + columns: ["a", undefined, undefined, undefined, "b"], + }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "0", b: "4" }, + { a: "5", b: "9" }, + ]); + } + next(err); + }, + ); + }); + + it("skips column names defined as false", function (next) { + parse( + "0,1,2,3,4\n5,6,7,8,9", + { + columns: ["a", false, false, false, "b"], + }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "0", b: "4" }, + { a: "5", b: "9" }, + ]); + } + next(err); + }, + ); + }); + + it("skips column names defined as null and last", function (next) { + parse( + "0,1,2\n3,4,5", + { + columns: ["a", null, null], + }, + (err, records) => { + if (!err) { + records.should.eql([{ a: "0" }, { a: "3" }]); + } + next(err); + }, + ); + }); + + it("illustrate bug with undefined values", function (next) { + parse( + "0,1,2\n3,4,5", + { + columns: ["a", undefined, undefined], + }, + (err, records) => { + if (!err) { + records.should.eql([{ a: "0" }, { a: "3" }]); + } + next(err); + }, + ); + }); + + it("last column value ignore when `null`", function (next) { + parse( + "col_a,col_b,col_c\nfoo,bar\nfoo,bar,baz", + { + columns: ["a", "b", null], + }, + (err) => { + err.code.should.eql("CSV_RECORD_INCONSISTENT_COLUMNS"); + next(); + }, + ); + }); + }); + + describe("function", function () { + it("takes first line as argument", function (next) { + parse( + "FIELD_1,FIELD_2,FIELD_3,FIELD_4,FIELD_5,FIELD_6\n20322051544,1979,8.8017226E7,ABC,45,2000-01-01\n28392898392,1974,8.8392926E7,DEF,23,2050-11-27", + { + columns: (record) => record.map((column) => column.toLowerCase()), + }, + (err, records) => { + if (!err) { + records.should.eql([ + { + field_1: "20322051544", + field_2: "1979", + field_3: "8.8017226E7", + field_4: "ABC", + field_5: "45", + field_6: "2000-01-01", + }, + { + field_1: "28392898392", + field_2: "1974", + field_3: "8.8392926E7", + field_4: "DEF", + field_5: "23", + field_6: "2050-11-27", + }, + ]); + } + next(err); + }, + ); + }); + + it("catch thrown errors", function (next) { + parse( + "FIELD_1,FIELD_2,FIELD_3,FIELD_4\nabc,123,def,456\nhij,789,klm,0", + { + columns: () => { + throw Error("Catchme"); + }, + }, + (err) => { + err.message.should.eql("Catchme"); + next(); + }, + ); + }); + + it("must return an array of headers", function (next) { + parse( + "FIELD_1\nabc", + { + columns: () => { + return { FIELD: true }; + }, + }, + (err) => { + assert_error(err, { + message: + 'Invalid Column Mapping: expect an array from column function, got {"FIELD":true}', + code: "CSV_INVALID_COLUMN_MAPPING", + headers: { FIELD: true }, + }); + next(); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/option.columns_duplicates_to_array.coffee b/packages/csv-parse/test/option.columns_duplicates_to_array.coffee deleted file mode 100644 index cf9f0c58..00000000 --- a/packages/csv-parse/test/option.columns_duplicates_to_array.coffee +++ /dev/null @@ -1,51 +0,0 @@ - -import { parse } from '../lib/index.js' -import { assert_error } from './api.assert_error.coffee' - -describe 'Option `group_columns_by_name`', -> - - it 'validate', -> - (-> - parse "", group_columns_by_name: 'invalid' - ).should.throw - code: 'CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME' - message: [ - 'Invalid option group_columns_by_name:' - 'expect an boolean, got "invalid"' - ].join ' ' - - it 'require columns to be active', -> - (-> - parse "", group_columns_by_name: true - ).should.throw - code: 'CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME' - message: [ - 'Invalid option group_columns_by_name:' - 'the `columns` mode must be activated.' - ].join ' ' - - it 'when false', (next) -> - parse """ - FIELD_1,FIELD_1 - ABC,DEF - GHI,JKL - """, columns: true, group_columns_by_name: false, (err, records) -> - records.should.eql [ - 'FIELD_1': 'DEF' - , - 'FIELD_1': 'JKL' - ] unless err - next err - - it 'when true', (next) -> - parse """ - FIELD_1,FIELD_1 - ABC,DEF - GHI,JKL - """, columns: true, group_columns_by_name: true, (err, records) -> - records.should.eql [ - 'FIELD_1': ['ABC', 'DEF'] - , - 'FIELD_1': ['GHI', 'JKL'] - ] unless err - next err diff --git a/packages/csv-parse/test/option.columns_duplicates_to_array.js b/packages/csv-parse/test/option.columns_duplicates_to_array.js new file mode 100644 index 00000000..9240ce4e --- /dev/null +++ b/packages/csv-parse/test/option.columns_duplicates_to_array.js @@ -0,0 +1,59 @@ +import "should"; +import { parse } from "../lib/index.js"; + +describe("Option `group_columns_by_name`", function () { + it("validate", function () { + (() => { + parse("", { group_columns_by_name: "invalid" }); + }).should.throw({ + code: "CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME", + message: + 'Invalid option group_columns_by_name: expect an boolean, got "invalid"', + }); + }); + + it("require columns to be active", function () { + (() => { + parse("", { group_columns_by_name: true }); + }).should.throw({ + code: "CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME", + message: + "Invalid option group_columns_by_name: the `columns` mode must be activated.", + }); + }); + + it("when false", function (next) { + parse( + "FIELD_1,FIELD_1\nABC,DEF\nGHI,JKL", + { + columns: true, + group_columns_by_name: false, + }, + (err, records) => { + if (!err) { + records.should.eql([{ FIELD_1: "DEF" }, { FIELD_1: "JKL" }]); + } + next(err); + }, + ); + }); + + it("when true", function (next) { + parse( + "FIELD_1,FIELD_1\nABC,DEF\nGHI,JKL", + { + columns: true, + group_columns_by_name: true, + }, + (err, records) => { + if (!err) { + records.should.eql([ + { FIELD_1: ["ABC", "DEF"] }, + { FIELD_1: ["GHI", "JKL"] }, + ]); + } + next(err); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.comment.coffee b/packages/csv-parse/test/option.comment.coffee deleted file mode 100644 index 82da4f18..00000000 --- a/packages/csv-parse/test/option.comment.coffee +++ /dev/null @@ -1,105 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'Option `comment`', -> - - it 'validation', -> - parse '', comment: undefined, (->) - parse '', comment: null, (->) - parse '', comment: false, (->) - parse '', comment: '', (->) - (-> - parse '', comment: true, (->) - ).should.throw - message: 'Invalid option comment: comment must be a buffer or a string, got true' - code: 'CSV_INVALID_OPTION_COMMENT' - (-> - parse '', comment: 2, (->) - ).should.throw - message: 'Invalid option comment: comment must be a buffer or a string, got 2' - code: 'CSV_INVALID_OPTION_COMMENT' - - it 'single comment line', (next) -> - parse '# comment', comment: '#', (err, records) -> - records.length.should.eql 0 - next err - - it 'single comment line with empty field', (next) -> - parse '""# comment', comment: '#', (err, records) -> - records.should.eql [['']] - next err - - it 'skip line starting by single comment char', (next) -> - parse """ - # skip this - "ABC","45" - "DEF","23" - # and this - "GHI","94" - # as well as that - """, comment: '#', (err, records) -> - records.should.eql [ - [ 'ABC','45' ] - [ 'DEF','23' ] - [ 'GHI','94' ] - ] unless err - next err - - it 'doent apply inside quotes', (next) -> - parse """ - "ABC","45" - "D#noEF","23"#yes - "GHI","94" - """, comment: '#', (err, records) -> - records.should.eql [ - [ 'ABC','45' ] - [ 'D#noEF','23' ] - [ 'GHI','94' ] - ] unless err - next err - - it 'is cancel if empty', (next) -> - parse """ - abc,#,def - 1,2,3 - """, comment: '', (err, records) -> - records.should.eql [ - [ 'abc','#','def' ] - [ '1','2', '3' ] - ] - next() - - it 'is cancel by default', (next) -> - parse """ - abc,#,def - 1,2,3 - """, (err, records) -> - records.should.eql [ - [ 'abc','#','def' ] - [ '1','2', '3' ] - ] - next() - - it 'accept multiple characters', (next) -> - parser = parse comment: '//', (err, records) -> - records.should.eql [ - [ 'abc','def' ] - [ '1','2' ] - ] - next() - data = """ - abc,def - // a comment - 1,2 - """ - parser.write char for char in data - parser.end() - - it 'accept quotes', (next) -> - parse """ - "Alaska","Site1","Rack1","RTU-1","192.168.1.3" - # Contains double-quote: " - """, - comment: "#" - , (err, content) -> - next err diff --git a/packages/csv-parse/test/option.comment.js b/packages/csv-parse/test/option.comment.js new file mode 100644 index 00000000..d193c9e8 --- /dev/null +++ b/packages/csv-parse/test/option.comment.js @@ -0,0 +1,150 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `comment`", function () { + it("validation", function () { + parse("", { comment: undefined }, () => {}); + parse("", { comment: null }, () => {}); + parse("", { comment: false }, () => {}); + parse("", { comment: "" }, () => {}); + (() => { + parse("", { comment: true }, () => {}); + }).should.throw({ + message: + "Invalid option comment: comment must be a buffer or a string, got true", + code: "CSV_INVALID_OPTION_COMMENT", + }); + (() => { + parse("", { comment: 2 }, () => {}); + }).should.throw({ + message: + "Invalid option comment: comment must be a buffer or a string, got 2", + code: "CSV_INVALID_OPTION_COMMENT", + }); + }); + + it("single comment line", function (next) { + parse("# comment", { comment: "#" }, (err, records) => { + records.length.should.eql(0); + next(err); + }); + }); + + it("single comment line with empty field", function (next) { + parse('""# comment', { comment: "#" }, (err, records) => { + records.should.eql([[""]]); + next(err); + }); + }); + + it("skip line starting by single comment char", function (next) { + parse( + dedent` + # skip this + "ABC","45" + "DEF","23" + # and this + "GHI","94" + # as well as that + `, + { + comment: "#", + }, + (err, records) => { + if (!err) { + records.should.eql([ + ["ABC", "45"], + ["DEF", "23"], + ["GHI", "94"], + ]); + } + next(err); + }, + ); + }); + + it("doent apply inside quotes", function (next) { + parse( + dedent` + "ABC","45" + "D#noEF","23"#yes + "GHI","94" + `, + { + comment: "#", + }, + (err, records) => { + if (!err) { + records.should.eql([ + ["ABC", "45"], + ["D#noEF", "23"], + ["GHI", "94"], + ]); + } + next(err); + }, + ); + }); + + it("is cancel if empty", function (next) { + parse( + dedent` + abc,#,def + 1,2,3 + `, + { + comment: "", + }, + (err, records) => { + records.should.eql([ + ["abc", "#", "def"], + ["1", "2", "3"], + ]); + next(); + }, + ); + }); + + it("is cancel by default", function (next) { + parse("abc,#,def\n1,2,3", (err, records) => { + records.should.eql([ + ["abc", "#", "def"], + ["1", "2", "3"], + ]); + next(); + }); + }); + + it("accept multiple characters", function (next) { + const parser = parse({ comment: "//" }, (err, records) => { + records.should.eql([ + ["abc", "def"], + ["1", "2"], + ]); + next(); + }); + const data = dedent` + abc,def + // a comment + 1,2 + `; + for (const char of data) { + parser.write(char); + } + parser.end(); + }); + + it("accept quotes", function (next) { + parse( + dedent` + "Alaska","Site1","Rack1","RTU-1","192.168.1.3" + # Contains double-quote: " + `, + { + comment: "#", + }, + (err) => next(err), + ); + }); +}); diff --git a/packages/csv-parse/test/option.comment_no_infix.coffee b/packages/csv-parse/test/option.comment_no_infix.coffee deleted file mode 100644 index fbdcd03a..00000000 --- a/packages/csv-parse/test/option.comment_no_infix.coffee +++ /dev/null @@ -1,47 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'Option `comment_no_infix`', -> - - it 'validation', -> - parse '', comment_no_infix: undefined, (->) - parse '', comment_no_infix: null, (->) - parse '', comment_no_infix: false, (->) - parse '', comment_no_infix: true, (->) - (-> - parse '', comment_no_infix: '', (->) - ).should.throw - message: 'Invalid option comment_no_infix: value must be a boolean, got ""' - code: 'CSV_INVALID_OPTION_COMMENT' - (-> - parse '', comment_no_infix: 2, (->) - ).should.throw - message: 'Invalid option comment_no_infix: value must be a boolean, got 2' - code: 'CSV_INVALID_OPTION_COMMENT' - - it 'with `true`, field starting with comment', (next) -> - parse ''' - a,#,c - ''', comment: '#', comment_no_infix: true, (err, records) -> - records.should.eql [ - ['a', '#', 'c'] - ] unless err - next err - - it 'with `true`, field not starting with comment', (next) -> - parse ''' - a,b#,c - ''', comment: '#', comment_no_infix: true, (err, records) -> - records.should.eql [ - ['a', 'b#', 'c'] - ] unless err - next err - - it 'with `false`', (next) -> - parse ''' - a,b#,c - ''', comment: '#', comment_no_infix: false, (err, records) -> - records.should.eql [ - ['a', 'b'] - ] unless err - next err diff --git a/packages/csv-parse/test/option.comment_no_infix.js b/packages/csv-parse/test/option.comment_no_infix.js new file mode 100644 index 00000000..e182919c --- /dev/null +++ b/packages/csv-parse/test/option.comment_no_infix.js @@ -0,0 +1,73 @@ +import "should"; +import { parse } from "../lib/index.js"; + +describe("Option `comment_no_infix`", function () { + it("validation", function () { + parse("", { comment_no_infix: undefined }, () => {}); + parse("", { comment_no_infix: null }, () => {}); + parse("", { comment_no_infix: false }, () => {}); + parse("", { comment_no_infix: true }, () => {}); + (() => { + parse("", { comment_no_infix: "" }, () => {}); + }).should.throw({ + message: + 'Invalid option comment_no_infix: value must be a boolean, got ""', + code: "CSV_INVALID_OPTION_COMMENT", + }); + (() => { + parse("", { comment_no_infix: 2 }, () => {}); + }).should.throw({ + message: + "Invalid option comment_no_infix: value must be a boolean, got 2", + code: "CSV_INVALID_OPTION_COMMENT", + }); + }); + + it("with `true`, field starting with comment", function (next) { + parse( + "a,#,c", + { + comment: "#", + comment_no_infix: true, + }, + (err, records) => { + if (!err) { + records.should.eql([["a", "#", "c"]]); + } + next(err); + }, + ); + }); + + it("with `true`, field not starting with comment", function (next) { + parse( + "a,b#,c", + { + comment: "#", + comment_no_infix: true, + }, + (err, records) => { + if (!err) { + records.should.eql([["a", "b#", "c"]]); + } + next(err); + }, + ); + }); + + it("with `false`", function (next) { + parse( + "a,b#,c", + { + comment: "#", + comment_no_infix: false, + }, + (err, records) => { + if (!err) { + records.should.eql([["a", "b"]]); + } + next(err); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.delimiter.coffee b/packages/csv-parse/test/option.delimiter.coffee deleted file mode 100644 index 0789d08e..00000000 --- a/packages/csv-parse/test/option.delimiter.coffee +++ /dev/null @@ -1,135 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'Option `delimiter`', -> - - it 'validation', -> - parse '', delimiter: ',', (->) - parse '', delimiter: Buffer.from(','), (->) - (-> - parse '', delimiter: '', (->) - ).should.throw - message: 'Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got ""' - code: 'CSV_INVALID_OPTION_DELIMITER' - (-> - parse '', delimiter: Buffer.from(''), (->) - ).should.throw - message: 'Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got {"type":"Buffer","data":[]}' - code: 'CSV_INVALID_OPTION_DELIMITER' - (-> - parse '', delimiter: true, (->) - ).should.throw - message: 'Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got true' - code: 'CSV_INVALID_OPTION_DELIMITER' - (-> - parse '', delimiter: [], (->) - ).should.throw - message: 'Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got []' - code: 'CSV_INVALID_OPTION_DELIMITER' - (-> - parse '', delimiter: [''], (->) - ).should.throw - message: 'Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got [""]' - code: 'CSV_INVALID_OPTION_DELIMITER' - (-> - parse '', delimiter: [',',''], (->) - ).should.throw - message: 'Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got [",",""]' - code: 'CSV_INVALID_OPTION_DELIMITER' - - it 'is compatible with buffer size', (next) -> - parser = parse delimiter: [':::'], (err, records) -> - records.should.eql [ - [ '1', '2', '3' ] - [ 'b', 'c', 'd' ] - ] - next err - parser.write c for c in """ - 1:::2:::3 - b:::c:::d - """ - parser.end() - - it 'using default comma', (next) -> - parse """ - abc,,123, - ,def,, - """, (err, records) -> - return next err if err - records.should.eql [ - [ 'abc','','123',''] - [ '','def','',''] - ] - next() - - it 'using tab', (next) -> - parse """ - abc\t\tde\tf\t - \thij\tklm\t\t - """, delimiter: '\t', (err, records) -> - return next err if err - records.should.eql [ - [ 'abc','','de','f',''] - [ '','hij','klm','',''] - ] - next() - - it 'multiple chars empty fields only', (next) -> - parse """ - !# - !# - """, delimiter: '!#', (err, records) -> - return next err if err - records.should.eql [ - [ '', ''] - [ '', ''] - ] - next() - - it 'multiple chars mixed fields', (next) -> - parse """ - 20322051544!#!#8.8017226E7!#45!# - !#1974!#8.8392926E7!#!# - """, delimiter: '!#', (err, records) -> - return next err if err - records.should.eql [ - [ '20322051544','','8.8017226E7','45',''] - [ '','1974','8.8392926E7','',''] - ] - next() - - it 'using array of a single delimiter', (next) -> - parse """ - abc,,123, - ,def,, - """, delimiter: [','], (err, records) -> - return next err if err - records.should.eql [ - [ 'abc','','123',''] - [ '','def','',''] - ] - next() - - it 'using array of a single delimiter of multiple characters', (next) -> - parse """ - !# - !# - """, delimiter: ['!#'], (err, records) -> - return next err if err - records.should.eql [ - [ '', ''] - [ '', ''] - ] - next() - - it 'using array of a multiple delimiters of variable length', (next) -> - parse """ - abc,;;123;; - ;;def;;, - """, delimiter: [',', ';;'], (err, records) -> - return next err if err - records.should.eql [ - [ 'abc','','123',''] - [ '','def','',''] - ] - next() diff --git a/packages/csv-parse/test/option.delimiter.js b/packages/csv-parse/test/option.delimiter.js new file mode 100644 index 00000000..5cd3509e --- /dev/null +++ b/packages/csv-parse/test/option.delimiter.js @@ -0,0 +1,178 @@ +import "should"; +import { parse } from "../lib/index.js"; + +describe("Option `delimiter`", function () { + it("validation", function () { + parse("", { delimiter: "," }, () => {}); + parse("", { delimiter: Buffer.from(",") }, () => {}); + (() => { + parse("", { delimiter: "" }, () => {}); + }).should.throw({ + message: + 'Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got ""', + code: "CSV_INVALID_OPTION_DELIMITER", + }); + (() => { + parse("", { delimiter: Buffer.from("") }, () => {}); + }).should.throw({ + message: + 'Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got {"type":"Buffer","data":[]}', + code: "CSV_INVALID_OPTION_DELIMITER", + }); + (() => { + parse("", { delimiter: true }, () => {}); + }).should.throw({ + message: + "Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got true", + code: "CSV_INVALID_OPTION_DELIMITER", + }); + (() => { + parse("", { delimiter: [] }, () => {}); + }).should.throw({ + message: + "Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got []", + code: "CSV_INVALID_OPTION_DELIMITER", + }); + (() => { + parse("", { delimiter: [""] }, () => {}); + }).should.throw({ + message: + 'Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got [""]', + code: "CSV_INVALID_OPTION_DELIMITER", + }); + (() => { + parse("", { delimiter: [",", ""] }, () => {}); + }).should.throw({ + message: + 'Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got [",",""]', + code: "CSV_INVALID_OPTION_DELIMITER", + }); + }); + + it("is compatible with buffer size", function (next) { + const parser = parse({ delimiter: [":::"] }, (err, records) => { + records.should.eql([ + ["1", "2", "3"], + ["b", "c", "d"], + ]); + next(err); + }); + for (const c of "1:::2:::3\nb:::c:::d") { + parser.write(c); + } + parser.end(); + }); + + it("using default comma", function (next) { + parse("abc,,123,\n,def,,", (err, records) => { + if (err) return next(err); + records.should.eql([ + ["abc", "", "123", ""], + ["", "def", "", ""], + ]); + next(); + }); + }); + + it("using tab", function (next) { + parse( + "abc\t\tde\tf\t\n\thij\tklm\t\t", + { + delimiter: "\t", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["abc", "", "de", "f", ""], + ["", "hij", "klm", "", ""], + ]); + next(); + }, + ); + }); + + it("multiple chars empty fields only", function (next) { + parse( + "!#\n!#", + { + delimiter: "!#", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["", ""], + ["", ""], + ]); + next(); + }, + ); + }); + + it("multiple chars mixed fields", function (next) { + parse( + "20322051544!#!#8.8017226E7!#45!#\n!#1974!#8.8392926E7!#!#", + { + delimiter: "!#", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["20322051544", "", "8.8017226E7", "45", ""], + ["", "1974", "8.8392926E7", "", ""], + ]); + next(); + }, + ); + }); + + it("using array of a single delimiter", function (next) { + parse( + "abc,,123,\n,def,,", + { + delimiter: [","], + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["abc", "", "123", ""], + ["", "def", "", ""], + ]); + next(); + }, + ); + }); + + it("using array of a single delimiter of multiple characters", function (next) { + parse( + "!#\n!#", + { + delimiter: ["!#"], + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["", ""], + ["", ""], + ]); + next(); + }, + ); + }); + + it("using array of a multiple delimiters of variable length", function (next) { + parse( + "abc,;;123;;\n;;def;;,", + { + delimiter: [",", ";;"], + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["abc", "", "123", ""], + ["", "def", "", ""], + ]); + next(); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.encoding.coffee b/packages/csv-parse/test/option.encoding.coffee deleted file mode 100644 index 77cfa954..00000000 --- a/packages/csv-parse/test/option.encoding.coffee +++ /dev/null @@ -1,114 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'Option `encoding`', -> - - describe 'validation & normalization', -> - - it 'boolean true convert to default', -> - parse(encoding: true).options.encoding.should.eql 'utf8' - - it 'boolean false convert to null', -> - (parse(encoding: false).options.encoding is null).should.be.true() - - it 'integer throw invalid encoding', -> - (-> - parse 'whocare', encoding: 666, (->) - ).should.throw - code: 'CSV_INVALID_OPTION_ENCODING' - message: [ - 'Invalid option encoding:', - 'encoding must be a string or null to return a buffer,', - 'got 666' - ].join ' ' - - describe 'definition', -> - - it 'with delimiter', (next) -> - parse Buffer.from('x:x', 'utf16le'), - delimiter: ':' - encoding: 'utf16le' - , (err, records) -> - records.should.eql [['x', 'x']] unless err - next err - - it 'with escape equals quote', (next) -> - parse Buffer.from( """ - a,b,c - 1,"2 ""3"" 4",5 - """, 'utf16le' - ), - encoding: 'utf16le' - , (err, records) -> - records.should.eql [ - [ 'a', 'b', 'c' ] - [ '1', '2 "3" 4', '5' ] - ] unless err - next err - - it 'null return buffer', (next) -> - parse Buffer.from( 'a,b\n1,2' ), - encoding: null - , (err, records) -> - records.should.eql [ - [ Buffer.from('a'), Buffer.from('b') ] - [ Buffer.from('1'), Buffer.from('2') ] - ] unless err - next err - - describe 'with BOM', -> - - it 'utf16le auto detected', (next) -> - parser = parse bom: true, encoding: 'utf16le', (err, records) -> - records.should.eql [ - ['a', 'b', 'c'] - ['d', 'e', 'f'] - ] - next() - parser.write Buffer.from "\ufeffa,b,c\n", 'utf16le' - parser.write Buffer.from 'd,e,f', 'utf16le' - parser.end() - - it 'utf16le auto detected with quote', (next) -> - parser = parse bom: true, (err, records) -> - records.should.eql [ - ['a', 'b', 'c'] - ['d', 'e', 'f'] - ] unless err - next err - parser.write Buffer.from '\ufeffa,"b",c\n', 'utf16le' - parser.write Buffer.from 'd,"e",f', 'utf16le' - parser.end() - - it 'utf16le auto detected with delimiter', (next) -> - parser = parse bom: true, delimiter: 'ф', (err, records) -> - records.should.eql [ - ['a', 'b', 'c'] - ['d', 'e', 'f'] - ] unless err - next err - parser.write Buffer.from '\ufeffaфbфc\n', 'utf16le' - parser.write Buffer.from 'dфeфf', 'utf16le' - parser.end() - - it 'utf16le auto detected with escape', (next) -> - parser = parse bom: true, escape: 'ф', (err, records) -> - records.should.eql [ - ['a', '"b', 'c'] - ['d', '"e', 'f'] - ] unless err - next err - parser.write Buffer.from '\ufeffa,"ф"b",c\n', 'utf16le' - parser.write Buffer.from 'd,"ф"e",f', 'utf16le' - parser.end() - - it 'utf16le auto detected with record_delimiter', (next) -> - parser = parse bom: true, record_delimiter: 'ф', (err, records) -> - records.should.eql [ - ['a', 'b', 'c'] - ['d', 'e', 'f'] - ] unless err - next err - parser.write Buffer.from '\ufeffa,b,cф', 'utf16le' - parser.write Buffer.from 'd,e,f', 'utf16le' - parser.end() diff --git a/packages/csv-parse/test/option.encoding.js b/packages/csv-parse/test/option.encoding.js new file mode 100644 index 00000000..ef3d67f7 --- /dev/null +++ b/packages/csv-parse/test/option.encoding.js @@ -0,0 +1,157 @@ +import "should"; +import { parse } from "../lib/index.js"; + +describe("Option `encoding`", function () { + describe("validation & normalization", function () { + it("boolean true convert to default", function () { + parse({ encoding: true }).options.encoding.should.eql("utf8"); + }); + + it("boolean false convert to null", function () { + (parse({ encoding: false }).options.encoding === null).should.be.true(); + }); + + it("integer throw invalid encoding", function () { + (() => { + parse("whocare", { encoding: 666 }, () => {}); + }).should.throw({ + code: "CSV_INVALID_OPTION_ENCODING", + message: + "Invalid option encoding: encoding must be a string or null to return a buffer, got 666", + }); + }); + }); + + describe("definition", function () { + it("with delimiter", function (next) { + parse( + Buffer.from("x:x", "utf16le"), + { + delimiter: ":", + encoding: "utf16le", + }, + (err, records) => { + if (!err) records.should.eql([["x", "x"]]); + next(err); + }, + ); + }); + + it("with escape equals quote", function (next) { + parse( + Buffer.from('a,b,c\n1,"2 ""3"" 4",5', "utf16le"), + { + encoding: "utf16le", + }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["1", '2 "3" 4', "5"], + ]); + } + next(err); + }, + ); + }); + + it("null return buffer", function (next) { + parse( + Buffer.from("a,b\n1,2"), + { + encoding: null, + }, + (err, records) => { + if (!err) { + records.should.eql([ + [Buffer.from("a"), Buffer.from("b")], + [Buffer.from("1"), Buffer.from("2")], + ]); + } + next(err); + }, + ); + }); + }); + + describe("with BOM", function () { + it("utf16le auto detected", function (next) { + const parser = parse( + { bom: true, encoding: "utf16le" }, + (err, records) => { + records.should.eql([ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + next(); + }, + ); + parser.write(Buffer.from("\ufeffa,b,c\n", "utf16le")); + parser.write(Buffer.from("d,e,f", "utf16le")); + parser.end(); + }); + + it("utf16le auto detected with quote", function (next) { + const parser = parse({ bom: true }, (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + } + next(err); + }); + parser.write(Buffer.from('\ufeffa,"b",c\n', "utf16le")); + parser.write(Buffer.from('d,"e",f', "utf16le")); + parser.end(); + }); + + it("utf16le auto detected with delimiter", function (next) { + const parser = parse({ bom: true, delimiter: "ф" }, (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + } + next(err); + }); + parser.write(Buffer.from("\ufeffaфbфc\n", "utf16le")); + parser.write(Buffer.from("dфeфf", "utf16le")); + parser.end(); + }); + + it("utf16le auto detected with escape", function (next) { + const parser = parse({ bom: true, escape: "ф" }, (err, records) => { + if (!err) { + records.should.eql([ + ["a", '"b', "c"], + ["d", '"e', "f"], + ]); + } + next(err); + }); + parser.write(Buffer.from('\ufeffa,"ф"b",c\n', "utf16le")); + parser.write(Buffer.from('d,"ф"e",f', "utf16le")); + parser.end(); + }); + + it("utf16le auto detected with record_delimiter", function (next) { + const parser = parse( + { bom: true, record_delimiter: "ф" }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + } + next(err); + }, + ); + parser.write(Buffer.from("\ufeffa,b,cф", "utf16le")); + parser.write(Buffer.from("d,e,f", "utf16le")); + parser.end(); + }); + }); +}); diff --git a/packages/csv-parse/test/option.escape.coffee b/packages/csv-parse/test/option.escape.coffee deleted file mode 100644 index 50466560..00000000 --- a/packages/csv-parse/test/option.escape.coffee +++ /dev/null @@ -1,157 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'Option `escape`', -> - - describe 'normalisation, coercion & validation', -> - - it 'default', -> - parse().options.escape.should.eql Buffer.from('"') - parse(escape: undefined).options.escape.should.eql Buffer.from('"') - parse(escape: true).options.escape.should.eql Buffer.from('"') - - it 'custom', -> - parse(escape: '\\').options.escape.should.eql Buffer.from('\\') - parse(escape: Buffer.from('\\')).options.escape.should.eql Buffer.from('\\') - - it 'disabled', -> - (parse(escape: null).options.escape is null).should.be.true() - (parse(escape: false).options.escape is null).should.be.true() - - it 'invalid', -> - (-> - parse escape: 1 - ).should.throw 'Invalid Option: escape must be a buffer, a string or a boolean, got 1' - # (-> - # parse escape: 'abc' - # ).should.throw 'Invalid Option Length: escape must be one character, got 3' - - it 'is compatible with buffer size', (next) -> - parser = parse escape: '::::::', (err, records) -> - records.should.eql [ - [ '1', '2"2', '3' ] - [ '4', '5', '6"' ] - [ 'b', 'c', 'd' ] - ] unless err - next err - parser.write c for c in """ - 1,"2::::::"2",3 - 4,5,"6::::::"" - b,c,d - """ - parser.end() - - describe 'disabled', -> - - it 'when null', (next) -> - parse ''' - a"b - '1"2' - ''', escape: null, quote: '\'', (err, records) -> - return next err if err - records.should.eql [ - [ 'a"b' ],[ '1"2' ] - ] - next() - - describe 'same as quote', -> - - it 'length is 1 char', (next) -> - parse ''' - aa,"b1""b2","c""d""e" - "f""g",h,"i1""i2" - ''', escape: '"', (err, records) -> - return next err if err - records.should.eql [ - [ 'aa','b1"b2','c"d"e' ] - [ 'f"g','h','i1"i2' ] - ] - next() - - it 'length is multiple char', (next) -> - parse ''' - aa,$$b1$$$$b2$$,$$c$$$$d$$$$e$$ - $$f$$$$g$$,h,$$i1$$$$i2$$ - ''', escape: '$$', quote: '$$', (err, records) -> - return next err if err - records.should.eql [ - [ 'aa','b1$$b2','c$$d$$e' ] - [ 'f$$g','h','i1$$i2' ] - ] - next() - - describe 'different than quote', -> - - it 'apply to quote char', (next) -> - parse ''' - aa,"b1\\"b2","c\\"d\\"e" - "f\\"g",h,"i1\\"i2" - ''', escape: '\\', (err, records) -> - return next err if err - records.should.eql [ - [ 'aa','b1"b2','c"d"e' ] - [ 'f"g','h','i1"i2' ] - ] - next() - - it 'apply to quote char', (next) -> - parse ''' - aa,"b1$$"b2","c$$"d$$"e" - "f$$"g",h,"i1$$"i2" - ''', escape: '$$', (err, records) -> - return next err if err - records.should.eql [ - [ 'aa','b1"b2','c"d"e' ] - [ 'f"g','h','i1"i2' ] - ] - next() - - it 'apply to escape char', (next) -> - parse ''' - aa,"b1\\\\b2","c\\\\d\\\\e" - "f\\\\g",h,"i1\\\\i2" - ''', escape: '\\', (err, records) -> - return next err if err - records.should.eql [ - [ 'aa','b1\\b2','c\\d\\e' ] - [ 'f\\g','h','i1\\i2' ] - ] - next() - - it 'does not apply outside quoted field', (next) -> - parse ''' - aa,b1\\\\b2,c\\\\d\\\\e - f\\\\g,h,i1\\\\i2 - ''', escape: '\\', (err, records) -> - return next err if err - records.should.eql [ - [ 'aa','b1\\\\b2','c\\\\d\\\\e' ] - [ 'f\\\\g','h','i1\\\\i2' ] - ] - next() - - it 'does not apply to delimiter', (next) -> - parse ''' - aa\\,bb - ''', escape: '\\', (err, records) -> - return next err if err - records.should.eql [ - [ 'aa\\','bb' ] - ] - next() - - it 'handle non continuous chunks', (next) -> - records = [] - parser = parse escape: '\\' - parser.on 'readable', -> - while d = parser.read() - records.push d - parser.on 'end', -> - records.should.eql [ - [ 'abc " def' ] - ] - next() - parser.write chr for chr in ''' - "abc \\" def" - ''' - parser.end() diff --git a/packages/csv-parse/test/option.escape.js b/packages/csv-parse/test/option.escape.js new file mode 100644 index 00000000..f61af218 --- /dev/null +++ b/packages/csv-parse/test/option.escape.js @@ -0,0 +1,211 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `escape`", function () { + describe("normalisation, coercion & validation", function () { + it("default", function () { + parse().options.escape.should.eql(Buffer.from('"')); + parse({ escape: undefined }).options.escape.should.eql(Buffer.from('"')); + parse({ escape: true }).options.escape.should.eql(Buffer.from('"')); + }); + + it("custom", function () { + parse({ escape: "\\" }).options.escape.should.eql(Buffer.from("\\")); + parse({ escape: Buffer.from("\\") }).options.escape.should.eql( + Buffer.from("\\"), + ); + }); + + it("disabled", function () { + (parse({ escape: null }).options.escape === null).should.be.true(); + (parse({ escape: false }).options.escape === null).should.be.true(); + }); + + it("invalid", function () { + (() => { + parse({ escape: 1 }); + }).should.throw( + "Invalid Option: escape must be a buffer, a string or a boolean, got 1", + ); + }); + + it("is compatible with buffer size", function (next) { + const parser = parse({ escape: "::::::" }, (err, records) => { + if (!err) { + records.should.eql([ + ["1", '2"2', "3"], + ["4", "5", '6"'], + ["b", "c", "d"], + ]); + } + next(err); + }); + for (const c of dedent` + 1,"2::::::"2",3 + 4,5,"6::::::"" + b,c,d + `) { + parser.write(c); + } + parser.end(); + }); + }); + + describe("disabled", function () { + it("when null", function (next) { + parse( + "a\"b\n'1\"2'", + { + escape: null, + quote: "'", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([['a"b'], ['1"2']]); + next(); + }, + ); + }); + }); + + describe("same as quote", function () { + it("length is 1 char", function (next) { + parse( + 'aa,"b1""b2","c""d""e"\n"f""g",h,"i1""i2"', + { + escape: '"', + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["aa", 'b1"b2', 'c"d"e'], + ['f"g', "h", 'i1"i2'], + ]); + next(); + }, + ); + }); + + it("length is multiple char", function (next) { + parse( + "aa,$$b1$$$$b2$$,$$c$$$$d$$$$e$$\n$$f$$$$g$$,h,$$i1$$$$i2$$", + { + escape: "$$", + quote: "$$", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["aa", "b1$$b2", "c$$d$$e"], + ["f$$g", "h", "i1$$i2"], + ]); + next(); + }, + ); + }); + }); + + describe("different than quote", function () { + it("apply to quote char", function (next) { + parse( + 'aa,"b1\\"b2","c\\"d\\"e"\n"f\\"g",h,"i1\\"i2"', + { + escape: "\\", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["aa", 'b1"b2', 'c"d"e'], + ['f"g', "h", 'i1"i2'], + ]); + next(); + }, + ); + }); + + it("apply to quote char with custom char", function (next) { + parse( + 'aa,"b1$$"b2","c$$"d$$"e"\n"f$$"g",h,"i1$$"i2"', + { + escape: "$$", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["aa", 'b1"b2', 'c"d"e'], + ['f"g', "h", 'i1"i2'], + ]); + next(); + }, + ); + }); + + it("apply to escape char with escape", function (next) { + parse( + 'aa,"b1\\\\b2","c\\\\d\\\\e"\n"f\\\\g",h,"i1\\\\i2"', + { + escape: "\\", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["aa", "b1\\b2", "c\\d\\e"], + ["f\\g", "h", "i1\\i2"], + ]); + next(); + }, + ); + }); + + it("does not apply outside quoted field", function (next) { + parse( + "aa,b1\\\\b2,c\\\\d\\\\e\nf\\\\g,h,i1\\\\i2", + { + escape: "\\", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["aa", "b1\\\\b2", "c\\\\d\\\\e"], + ["f\\\\g", "h", "i1\\\\i2"], + ]); + next(); + }, + ); + }); + + it("does not apply to delimiter", function (next) { + parse( + "aa\\,bb", + { + escape: "\\", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([["aa\\", "bb"]]); + next(); + }, + ); + }); + + it("handle non continuous chunks", function (next) { + const records = []; + const parser = parse({ escape: "\\" }); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([['abc " def']]); + next(); + }); + for (const chr of '"abc \\" def"') { + parser.write(chr); + } + parser.end(); + }); + }); +}); diff --git a/packages/csv-parse/test/option.from.coffee b/packages/csv-parse/test/option.from.coffee deleted file mode 100644 index 1382b751..00000000 --- a/packages/csv-parse/test/option.from.coffee +++ /dev/null @@ -1,69 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'Option `from`', -> - - it 'validation', -> - parse '', from: 10, (->) - parse '', from: "10", (->) - (-> - parse '', from: -1, (->) - ).should.throw 'Invalid Option: from must be a positive integer, got -1' - (-> - parse '', from: '-1', (->) - ).should.throw 'Invalid Option: from must be a positive integer, got "-1"' - (-> - parse '', from: true, (->) - ).should.throw 'Invalid Option: from must be an integer, got true' - (-> - parse '', from: false, (->) - ).should.throw 'Invalid Option: from must be an integer, got false' - (-> - parse '', from: 'oh no', (->) - ).should.throw 'Invalid Option: from must be an integer, got "oh no"' - - it 'start at defined position', (next) -> - parse """ - 1,2,3 - 4,5,6 - 7,8,9 - """, from: 3, (err, records) -> - records.should.eql [ - [ '7','8','9' ] - ] unless err - next err - - it 'dont count headers', (next) -> - parse """ - a,b,c - 1,2,3 - 4,5,6 - 7,8,9 - """, columns: true, from: 3, (err, records) -> - records.should.eql [ - {a:'7',b:'8',c:'9'} - ] unless err - next err - - it 'not influenced by lines', (next) -> - parse """ - 1,2," - 3" - 4,5," - 6" - 7,8," - 9" - """, from: 3, (err, records) -> - records.should.eql [ - [ '7','8','\n9' ] - ] unless err - next err - - it 'not influenced by record delimiter', (next) -> - parse """ - 1,2,3:4,5,6:7,8,9 - """, from: 3, record_delimiter: ':', (err, records) -> - records.should.eql [ - [ '7','8','9' ] - ] unless err - next err diff --git a/packages/csv-parse/test/option.from.js b/packages/csv-parse/test/option.from.js new file mode 100644 index 00000000..c10ef7bf --- /dev/null +++ b/packages/csv-parse/test/option.from.js @@ -0,0 +1,97 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `from`", function () { + it("validation", function () { + parse("", { from: 10 }, () => {}); + parse("", { from: "10" }, () => {}); + (() => { + parse("", { from: -1 }, () => {}); + }).should.throw("Invalid Option: from must be a positive integer, got -1"); + (() => { + parse("", { from: "-1" }, () => {}); + }).should.throw( + 'Invalid Option: from must be a positive integer, got "-1"', + ); + (() => { + parse("", { from: true }, () => {}); + }).should.throw("Invalid Option: from must be an integer, got true"); + (() => { + parse("", { from: false }, () => {}); + }).should.throw("Invalid Option: from must be an integer, got false"); + (() => { + parse("", { from: "oh no" }, () => {}); + }).should.throw('Invalid Option: from must be an integer, got "oh no"'); + }); + + it("start at defined position", function (next) { + parse( + dedent` + 1,2,3 + 4,5,6 + 7,8,9 + `, + { from: 3 }, + (err, records) => { + if (!err) { + records.should.eql([["7", "8", "9"]]); + } + next(err); + }, + ); + }); + + it("dont count headers", function (next) { + parse( + dedent` + a,b,c + 1,2,3 + 4,5,6 + 7,8,9 + `, + { columns: true, from: 3 }, + (err, records) => { + if (!err) { + records.should.eql([{ a: "7", b: "8", c: "9" }]); + } + next(err); + }, + ); + }); + + it("not influenced by lines", function (next) { + parse( + dedent` + 1,2," + 3" + 4,5," + 6" + 7,8," + 9" + `, + { from: 3 }, + (err, records) => { + if (!err) { + records.should.eql([["7", "8", "\n9"]]); + } + next(err); + }, + ); + }); + + it("not influenced by record delimiter", function (next) { + parse( + dedent` + 1,2,3:4,5,6:7,8,9 + `, + { from: 3, record_delimiter: ":" }, + (err, records) => { + if (!err) { + records.should.eql([["7", "8", "9"]]); + } + next(err); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.from_line.coffee b/packages/csv-parse/test/option.from_line.coffee deleted file mode 100644 index e93830b7..00000000 --- a/packages/csv-parse/test/option.from_line.coffee +++ /dev/null @@ -1,130 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'Option `from_line`', -> - - it 'validation', -> - parse '', from_line: 10, (->) - parse '', from_line: "10", (->) - parse '', from_line: null, (->) - parse '', from_line: undefined, (->) - (-> - parse '', from_line: -1, (->) - ).should.throw 'Invalid Option: from_line must be a positive integer greater than 0, got -1' - (-> - parse '', from_line: 0, (->) - ).should.throw 'Invalid Option: from_line must be a positive integer greater than 0, got 0' - (-> - parse '', from_line: "0", (->) - ).should.throw 'Invalid Option: from_line must be a positive integer greater than 0, got "0"' - (-> - parse '', from_line: true, (->) - ).should.throw 'Invalid Option: from_line must be an integer, got true' - (-> - parse '', from_line: false, (->) - ).should.throw 'Invalid Option: from_line must be an integer, got false' - (-> - parse '', from_line: 'oh no', (->) - ).should.throw 'Invalid Option: from_line must be an integer, got "oh no"' - - it 'start at defined position', (next) -> - parse """ - 1,2,3 - 4,5,6 - 7,8,9 - """, from_line: 3, (err, records) -> - records.should.eql [ - [ '7','8','9' ] - ] unless err - next err - - it 'handle lines with inconsistent number of fields', (next) -> - parse """ - a - 1,2,3 - """, from_line: 2, (err, records) -> - records.should.eql [ - ['1', '2', '3'] - ] unless err - next err - - it 'records with quoted line at the begining of line', (next) -> - parse """ - 1,2," - - 3" - 4,5," - 6" - 7,8," - 9" - """, from_line: 4, (err, records) -> - records.should.eql [ - [ '4','5','\n6' ] - [ '7','8','\n9' ] - ] unless err - next err - - it 'records with quoted line in the middle of line', (next) -> - parse """ - 1,2," - - 3" - 4,5," - 6" - 7,8," - 9" - """, from_line: 2, (err, records) -> - records.should.eql [ - [ '4','5','\n6' ] - [ '7','8','\n9' ] - ] unless err - next err - - it 'not influenced by `record_delimiter` option', (next) -> - parse """ - a,b,c:1,2, - 3:d,e,f:4,5, - 6:g,h,i:7,8, - 9 - """, from_line: 3, record_delimiter: ':', (err, records) -> - records.should.eql [ - [ 'g','h','i' ] - [ '7','8','\n9' ] - ] unless err - next err - - it 'no influenced by skip_empty_lines option', (next) -> - parse """ - a,b,c - - 1,2,3 - - 4,5,6 - - 7,8,9 - """, from_line: 5, skip_empty_lines: true, (err, records) -> - records.should.eql [ - ['4', '5', '6'] - ['7', '8', '9'] - ] unless err - next err - - it 'handle multiple bytes record delimiters', (next) -> - parse """ - a,b\r\nc,d\r\ne,f - """, from_line: 2, (err, records) -> - records.should.eql [ - [ 'c','d' ] - [ 'e','f' ] - ] unless err - next err - - it 'honors header', (next) -> - parse """ - x,y,z - x,y,z - a,b,c - 4,5,6 - """, from_line: 3, columns: true, (err, records) -> - records.should.eql [{ a: '4', b: '5', c: '6' }] unless err - next err diff --git a/packages/csv-parse/test/option.from_line.js b/packages/csv-parse/test/option.from_line.js new file mode 100644 index 00000000..ce32c0fe --- /dev/null +++ b/packages/csv-parse/test/option.from_line.js @@ -0,0 +1,193 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `from_line`", function () { + it("validation", function () { + parse("", { from_line: 10 }, () => {}); + parse("", { from_line: "10" }, () => {}); + parse("", { from_line: null }, () => {}); + parse("", { from_line: undefined }, () => {}); + (() => { + parse("", { from_line: -1 }, () => {}); + }).should.throw( + "Invalid Option: from_line must be a positive integer greater than 0, got -1", + ); + (() => { + parse("", { from_line: 0 }, () => {}); + }).should.throw( + "Invalid Option: from_line must be a positive integer greater than 0, got 0", + ); + (() => { + parse("", { from_line: "0" }, () => {}); + }).should.throw( + 'Invalid Option: from_line must be a positive integer greater than 0, got "0"', + ); + (() => { + parse("", { from_line: true }, () => {}); + }).should.throw("Invalid Option: from_line must be an integer, got true"); + (() => { + parse("", { from_line: false }, () => {}); + }).should.throw("Invalid Option: from_line must be an integer, got false"); + (() => { + parse("", { from_line: "oh no" }, () => {}); + }).should.throw( + 'Invalid Option: from_line must be an integer, got "oh no"', + ); + }); + + it("start at defined position", function (next) { + parse( + dedent` + 1,2,3 + 4,5,6 + 7,8,9 + `, + { from_line: 3 }, + (err, records) => { + if (!err) { + records.should.eql([["7", "8", "9"]]); + } + next(err); + }, + ); + }); + + it("handle lines with inconsistent number of fields", function (next) { + parse( + dedent` + a + 1,2,3 + `, + { from_line: 2 }, + (err, records) => { + if (!err) { + records.should.eql([["1", "2", "3"]]); + } + next(err); + }, + ); + }); + + it("records with quoted line at the begining of line", function (next) { + parse( + dedent`1,2," + + 3" + 4,5," + 6" + 7,8," + 9" + `, + { from_line: 4 }, + (err, records) => { + if (!err) { + records.should.eql([ + ["4", "5", "\n6"], + ["7", "8", "\n9"], + ]); + } + next(err); + }, + ); + }); + + it("records with quoted line in the middle of line", function (next) { + parse( + dedent` + 1,2," + + 3" + 4,5," + 6" + 7,8," + 9" + `, + { from_line: 2 }, + (err, records) => { + if (!err) { + records.should.eql([ + ["4", "5", "\n6"], + ["7", "8", "\n9"], + ]); + } + next(err); + }, + ); + }); + + it("not influenced by `record_delimiter` option", function (next) { + parse( + dedent` + a,b,c:1,2, + 3:d,e,f:4,5, + 6:g,h,i:7,8, + 9 + `, + { from_line: 3, record_delimiter: ":" }, + (err, records) => { + if (!err) { + records.should.eql([ + ["g", "h", "i"], + ["7", "8", "\n9"], + ]); + } + next(err); + }, + ); + }); + + it("no influenced by skip_empty_lines option", function (next) { + parse( + dedent` + a,b,c + + 1,2,3 + + 4,5,6 + + 7,8,9 + `, + { from_line: 5, skip_empty_lines: true }, + (err, records) => { + if (!err) { + records.should.eql([ + ["4", "5", "6"], + ["7", "8", "9"], + ]); + } + next(err); + }, + ); + }); + + it("handle multiple bytes record delimiters", function (next) { + parse(`a,b\r\nc,d\r\ne,f`, { from_line: 2 }, (err, records) => { + if (!err) { + records.should.eql([ + ["c", "d"], + ["e", "f"], + ]); + } + next(err); + }); + }); + + it("honors header", function (next) { + parse( + dedent` + x,y,z + x,y,z + a,b,c + 4,5,6 + `, + { from_line: 3, columns: true }, + (err, records) => { + if (!err) { + records.should.eql([{ a: "4", b: "5", c: "6" }]); + } + next(err); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.ignore_last_delimiters.coffee b/packages/csv-parse/test/option.ignore_last_delimiters.coffee deleted file mode 100644 index c2683f4b..00000000 --- a/packages/csv-parse/test/option.ignore_last_delimiters.coffee +++ /dev/null @@ -1,63 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'Option `ignore_last_delimiters`', -> - - describe 'validation & normalization', -> - - it 'default to `false`', -> - parse().options.ignore_last_delimiters.should.eql false - - it 'boolean', -> - parse(ignore_last_delimiters: true, columns: true).options.ignore_last_delimiters.should.eql true - parse(ignore_last_delimiters: false, columns: true).options.ignore_last_delimiters.should.eql false - - it 'integer', -> - parse(ignore_last_delimiters: 1).options.ignore_last_delimiters.should.eql 1 - parse(ignore_last_delimiters: 0).options.ignore_last_delimiters.should.eql false - - it 'throw error with invalid type', -> - (-> - parse(ignore_last_delimiters: 'invalid') - ).should.throw - code: 'CSV_INVALID_OPTION_IGNORE_LAST_DELIMITERS' - message: [ - 'Invalid option `ignore_last_delimiters`:' - 'the value must be a boolean value or an integer,' - 'got "invalid"' - ].join ' ' - - it 'requires columns', -> - (-> - parse(ignore_last_delimiters: true) - ).should.throw - code: 'CSV_IGNORE_LAST_DELIMITERS_REQUIRES_COLUMNS' - message: [ - 'The option `ignore_last_delimiters`' - 'requires the activation of the `columns` option' - ].join ' ' - - describe 'usage', -> - - it 'if true, get field number from columns', (next) -> - parse ''' - a,b,c - 1,2,3,4,5 - 11,22,33,44 - ''', ignore_last_delimiters: true, columns: true, (err, records) -> - records.should.eql [ - {a: '1', b: '2', c: '3,4,5'} - {a: '11', b: '22', c: '33,44'} - ] unless err - next err - - it 'if number, no need for columns', (next) -> - parse ''' - 1,2,3,4,5 - 11,22,33,44 - ''', ignore_last_delimiters: 3, (err, records) -> - records.should.eql [ - ['1','2','3,4,5'] - ['11','22','33,44'] - ] unless err - next err diff --git a/packages/csv-parse/test/option.ignore_last_delimiters.js b/packages/csv-parse/test/option.ignore_last_delimiters.js new file mode 100644 index 00000000..2d3b3b4a --- /dev/null +++ b/packages/csv-parse/test/option.ignore_last_delimiters.js @@ -0,0 +1,97 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `ignore_last_delimiters`", function () { + describe("validation & normalization", function () { + it("default to `false`", function () { + parse().options.ignore_last_delimiters.should.eql(false); + }); + + it("boolean", function () { + parse({ + ignore_last_delimiters: true, + columns: true, + }).options.ignore_last_delimiters.should.eql(true); + parse({ + ignore_last_delimiters: false, + columns: true, + }).options.ignore_last_delimiters.should.eql(false); + }); + + it("integer", function () { + parse({ + ignore_last_delimiters: 1, + }).options.ignore_last_delimiters.should.eql(1); + parse({ + ignore_last_delimiters: 0, + }).options.ignore_last_delimiters.should.eql(false); + }); + + it("throw error with invalid type", function () { + (() => { + parse({ ignore_last_delimiters: "invalid" }); + }).should.throw({ + code: "CSV_INVALID_OPTION_IGNORE_LAST_DELIMITERS", + message: [ + "Invalid option `ignore_last_delimiters`:", + "the value must be a boolean value or an integer,", + 'got "invalid"', + ].join(" "), + }); + }); + + it("requires columns", function () { + (() => { + parse({ ignore_last_delimiters: true }); + }).should.throw({ + code: "CSV_IGNORE_LAST_DELIMITERS_REQUIRES_COLUMNS", + message: [ + "The option `ignore_last_delimiters`", + "requires the activation of the `columns` option", + ].join(" "), + }); + }); + }); + + describe("usage", function () { + it("if true, get field number from columns", function (next) { + parse( + dedent` + a,b,c + 1,2,3,4,5 + 11,22,33,44 + `, + { ignore_last_delimiters: true, columns: true }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "1", b: "2", c: "3,4,5" }, + { a: "11", b: "22", c: "33,44" }, + ]); + } + next(err); + }, + ); + }); + + it("if number, no need for columns", function (next) { + parse( + dedent` + 1,2,3,4,5 + 11,22,33,44 + `, + { ignore_last_delimiters: 3 }, + (err, records) => { + if (!err) { + records.should.eql([ + ["1", "2", "3,4,5"], + ["11", "22", "33,44"], + ]); + } + next(err); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/option.info.coffee b/packages/csv-parse/test/option.info.coffee deleted file mode 100644 index 3ab2fbde..00000000 --- a/packages/csv-parse/test/option.info.coffee +++ /dev/null @@ -1,88 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'Option `info`', -> - - describe 'validation', -> - - it 'check the columns value', -> - (-> - parse "", info: 'ok', (->) - ).should.throw 'Invalid Option: info must be true, got "ok"' - - describe 'true', -> - - it 'return info and records', (next) -> - parse ''' - a,b,c - d,e,f - g,h,i - ''', info: true, (err, records) -> - records.map ({record, info}) -> - should(record).be.an.Array() - should(info).be.an.Object() - next err - - it 'info properties', (next) -> - parse ''' - a,b,c - ''', info: true, (err, records) -> - {info} = records[0] - Object.keys(info).sort().should.eql [ - 'bytes', - 'columns', 'comment_lines', 'empty_lines', 'error', 'header', - 'index', 'invalid_field_length', 'lines', 'raw', 'records' - ] - next err - - it 'validate the `lines` and `bytes` properties', (next) -> - parse ''' - a,b,c - d,e,f - g,h,i - ''', info: true, (err, records) -> - records.map( - ({info}) -> [info.lines, info.bytes] - ).should.eql [[1, 6], [2, 12], [3, 17]] unless err - next err - - it 'with skip_empty_lines', (next) -> - parse ''' - - a,b,c - - d,e,f - - g,h,i - ''', info: true, skip_empty_lines: true, (err, records) -> - records.map( - ({info}) -> [info.lines, info.bytes] - ).should.eql [[2, 7], [4, 14], [6, 20]] unless err - next err - - it 'with comment', (next) -> - parse ''' - # line 1 - a,b,c - # line 2 - d,e,f - # line 3 - g,h,i - ''', info: true, comment: '#', (err, records) -> - records.map( - ({info}) -> [info.lines, info.bytes] - ).should.eql [[2, 15], [4, 30], [6, 44]] unless err - next err - - it 'with multiline records', (next) -> - parse ''' - a,b,c - d,"e - ",f - g,h,i - ''', info: true, (err, records) -> - records.map( - ({info}) -> [info.lines, info.bytes] - ).should.eql [[1, 6], [3, 15], [4, 20]] unless err - next err - diff --git a/packages/csv-parse/test/option.info.js b/packages/csv-parse/test/option.info.js new file mode 100644 index 00000000..30a80d9c --- /dev/null +++ b/packages/csv-parse/test/option.info.js @@ -0,0 +1,154 @@ +import should from "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `info`", function () { + describe("validation", function () { + it("check the columns value", function () { + (() => { + parse("", { info: "ok" }, () => {}); + }).should.throw('Invalid Option: info must be true, got "ok"'); + }); + }); + + describe("true", function () { + it("return info and records", function (next) { + parse( + dedent` + a,b,c + d,e,f + g,h,i + `, + { info: true }, + (err, records) => { + records.map(({ record, info }) => { + should(record).be.an.Array(); + should(info).be.an.Object(); + }); + next(err); + }, + ); + }); + + it("info properties", function (next) { + parse(`a,b,c`, { info: true }, (err, records) => { + const { info } = records[0]; + Object.keys(info) + .sort() + .should.eql([ + "bytes", + "columns", + "comment_lines", + "empty_lines", + "error", + "header", + "index", + "invalid_field_length", + "lines", + "raw", + "records", + ]); + next(err); + }); + }); + + it("validate the `lines` and `bytes` properties", function (next) { + parse( + dedent` + a,b,c + d,e,f + g,h,i + `, + { info: true }, + (err, records) => { + if (!err) { + records + .map(({ info }) => [info.lines, info.bytes]) + .should.eql([ + [1, 6], + [2, 12], + [3, 17], + ]); + } + next(err); + }, + ); + }); + + it("with skip_empty_lines", function (next) { + parse( + "\n" + + dedent` + a,b,c + + d,e,f + + g,h,i + `, + { info: true, skip_empty_lines: true }, + (err, records) => { + if (!err) { + records + .map(({ info }) => [info.lines, info.bytes]) + .should.eql([ + [2, 7], + [4, 14], + [6, 20], + ]); + } + next(err); + }, + ); + }); + + it("with comment", function (next) { + parse( + dedent` + # line 1 + a,b,c + # line 2 + d,e,f + # line 3 + g,h,i + `, + { info: true, comment: "#" }, + (err, records) => { + if (!err) { + records + .map(({ info }) => [info.lines, info.bytes]) + .should.eql([ + [2, 15], + [4, 30], + [6, 44], + ]); + } + next(err); + }, + ); + }); + + it("with multiline records", function (next) { + parse( + dedent` + a,b,c + d,"e + ",f + g,h,i + `, + { info: true }, + (err, records) => { + if (!err) { + records + .map(({ info }) => [info.lines, info.bytes]) + .should.eql([ + [1, 6], + [3, 15], + [4, 20], + ]); + } + next(err); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/option.ltrim.coffee b/packages/csv-parse/test/option.ltrim.coffee deleted file mode 100644 index 3c9d2d1e..00000000 --- a/packages/csv-parse/test/option.ltrim.coffee +++ /dev/null @@ -1,81 +0,0 @@ - -import { parse } from '../lib/index.js' -import { assert_error } from './api.assert_error.coffee' - -describe 'Option `ltrim`', -> - - it 'plain text', (next) -> - parse """ - a b, c d - e f, g h - """, quote: "'", escape: "'", trim: true, (err, records) -> - records.should.eql [['a b', 'c d'],['e f', 'g h']] unless err - next err - - it 'before quote', (next) -> - data = ''' - 'a', 'b' - 'c', 'd' - ''' - parser = parse quote: "'", escape: "'", trim: true, (err, records) -> - records.should.eql [["a", "b"],["c", "d"]] unless err - next err - parser.write chr for chr in data - parser.end() - - it 'quote followed by escape', (next) -> - # 1st line: with start of file - # 2nd line: with field delimiter - # 3rd line: with record delimiter - parse """ - '''a','''b' - '''c', '''d' - '''e','''f' - """, quote: "'", escape: "'", trim: true, (err, records) -> - records.should.eql [["'a", "'b"],["'c", "'d"],["'e", "'f"]] unless err - next err - - it 'with whitespaces around quotes', (next) -> - data = ''' - " a b", " c d" - " e f", " g h" - ''' - parser = parse ltrim: true, (err, records) -> - records.should.eql [[' a b', ' c d'],[' e f', ' g h']] unless err - next err - parser.write chr for chr in data - parser.end() - - it 'with char after whitespaces', (next) -> - data = ''' - x " a b",x " c d" - x " e f", x " g h" - ''' - parser = parse ltrim: true, (err) -> - assert_error err, - message: 'Invalid Opening Quote: a quote is found on field 0 at line 1, value is "x "' - code: 'INVALID_OPENING_QUOTE' - field: 'x ' - next() - parser.write chr for chr in data - parser.end() - - it 'should work on last field', (next) -> - records = [] - parser = parse ltrim: true - parser.on 'readable', -> - while d = parser.read() - records.push d - parser.on 'end', -> - records.should.eql [ - [ 'FIELD_1','FIELD_2' ] - [ '20322051544','a' ] - [ '28392898392',' ' ] - ] - next() - parser.write """ - FIELD_1, FIELD_2 - 20322051544, a - 28392898392, " " - """ - parser.end() diff --git a/packages/csv-parse/test/option.ltrim.js b/packages/csv-parse/test/option.ltrim.js new file mode 100644 index 00000000..7b9775f3 --- /dev/null +++ b/packages/csv-parse/test/option.ltrim.js @@ -0,0 +1,138 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `ltrim`", function () { + it("validation", function () { + parse("", { ltrim: true }, () => {}); + parse("", { ltrim: false }, () => {}); + parse("", { ltrim: null }, () => {}); + parse("", { ltrim: undefined }, () => {}); + (() => { + parse("", { ltrim: 1 }, () => {}); + }).should.throw("Invalid Option: ltrim must be a boolean, got 1"); + (() => { + parse("", { ltrim: "true" }, () => {}); + }).should.throw('Invalid Option: ltrim must be a boolean, got "true"'); + }); + + it("plain text", function (next) { + parse( + ` a b, c d\n e f, g h`, + { quote: "'", escape: "'", trim: true }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a b", "c d"], + ["e f", "g h"], + ]); + } + next(err); + }, + ); + }); + + it("before quote", function (next) { + const data = ` 'a', 'b'\n 'c', 'd'`; + const parser = parse( + { quote: "'", escape: "'", trim: true }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b"], + ["c", "d"], + ]); + } + next(err); + }, + ); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); + + it("quote followed by escape", function (next) { + // 1st line: with start of file + // 2nd line: with field delimiter + // 3rd line: with record delimiter + parse( + dedent` + '''a','''b' + '''c', '''d' + '''e','''f' + `, + { quote: "'", escape: "'", trim: true }, + (err, records) => { + if (!err) { + records.should.eql([ + ["'a", "'b"], + ["'c", "'d"], + ["'e", "'f"], + ]); + } + next(err); + }, + ); + }); + + it("with whitespaces around quotes", function (next) { + const data = ` " a b", " c d"\n " e f", " g h"`; + const parser = parse({ ltrim: true }, (err, records) => { + if (!err) { + records.should.eql([ + [" a b", " c d"], + [" e f", " g h"], + ]); + } + next(err); + }); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); + + it("with char after whitespaces", function (next) { + const data = ` x " a b",x " c d"\nx " e f", x " g h"`; + const parser = parse({ ltrim: true }, (err) => { + assert_error(err, { + message: + 'Invalid Opening Quote: a quote is found on field 0 at line 1, value is "x "', + code: "INVALID_OPENING_QUOTE", + field: "x ", + }); + next(); + }); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); + + it("should work on last field", function (next) { + const records = []; + const parser = parse({ ltrim: true }); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([ + ["FIELD_1", "FIELD_2"], + ["20322051544", "a"], + ["28392898392", " "], + ]); + next(); + }); + parser.write(dedent` + FIELD_1, FIELD_2 + 20322051544, a + 28392898392, " " + `); + parser.end(); + }); +}); diff --git a/packages/csv-parse/test/option.max_record_size.coffee b/packages/csv-parse/test/option.max_record_size.coffee deleted file mode 100644 index edd6dd49..00000000 --- a/packages/csv-parse/test/option.max_record_size.coffee +++ /dev/null @@ -1,32 +0,0 @@ - -import { parse } from '../lib/index.js' -import { assert_error } from './api.assert_error.coffee' - -describe 'Option `max_record_size`', -> - - it 'validation', -> - parse '', max_record_size: 10, (->) - parse '', max_record_size: "10", (->) - (-> - parse '', max_record_size: -1, (->) - ).should.throw 'Invalid Option: max_record_size must be a positive integer, got -1' - (-> - parse '', max_record_size: true, (->) - ).should.throw 'Invalid Option: max_record_size must be a positive integer, got true' - (-> - parse '', max_record_size: 'oh no', (->) - ).should.throw 'Invalid Option: max_record_size must be a positive integer, got "oh no"' - - it 'field exceed limit', (next) -> - parse ''' - 12,34,56 - ab,cd,ef - hi,xxxxxxxxxxxxxxx,jk - lm,no,pq - ''', max_record_size: 10, (err) -> - assert_error err, - message: 'Max Record Size: record exceed the maximum number of tolerated bytes of 10 at line 3' - code: 'CSV_MAX_RECORD_SIZE' - column: 1, empty_lines: 0, header: false, index: 1, invalid_field_length: 0, - quoting: false, lines: 3, records: 2 - next() diff --git a/packages/csv-parse/test/option.max_record_size.js b/packages/csv-parse/test/option.max_record_size.js new file mode 100644 index 00000000..648f4837 --- /dev/null +++ b/packages/csv-parse/test/option.max_record_size.js @@ -0,0 +1,54 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `max_record_size`", function () { + it("validation", function () { + parse("", { max_record_size: 10 }, () => {}); + parse("", { max_record_size: "10" }, () => {}); + (() => { + parse("", { max_record_size: -1 }, () => {}); + }).should.throw( + "Invalid Option: max_record_size must be a positive integer, got -1", + ); + (() => { + parse("", { max_record_size: true }, () => {}); + }).should.throw( + "Invalid Option: max_record_size must be a positive integer, got true", + ); + (() => { + parse("", { max_record_size: "oh no" }, () => {}); + }).should.throw( + 'Invalid Option: max_record_size must be a positive integer, got "oh no"', + ); + }); + + it("field exceed limit", function (next) { + parse( + dedent` + 12,34,56 + ab,cd,ef + hi,xxxxxxxxxxxxxxx,jk + lm,no,pq + `, + { max_record_size: 10 }, + (err) => { + assert_error(err, { + message: + "Max Record Size: record exceed the maximum number of tolerated bytes of 10 at line 3", + code: "CSV_MAX_RECORD_SIZE", + column: 1, + empty_lines: 0, + header: false, + index: 1, + invalid_field_length: 0, + quoting: false, + lines: 3, + records: 2, + }); + next(); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.objname.coffee b/packages/csv-parse/test/option.objname.coffee deleted file mode 100644 index a3b914d9..00000000 --- a/packages/csv-parse/test/option.objname.coffee +++ /dev/null @@ -1,147 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'Option `objname`', -> - - describe 'validation', -> - - it 'basic', -> - parse '', objname: 'sth', columns: true, (->) - parse '', objname: Buffer.from('sth'), columns: true, (->) - parse '', objname: 1, (->) - parse '', objname: null, (->) - parse '', objname: undefined, (->) - (-> - parse '', objname: '', (->) - ).should.throw 'Invalid Option: objname must be a non empty string' - (-> - parse '', objname: Buffer.from(''), (->) - ).should.throw 'Invalid Option: objname must be a non empty buffer' - (-> - parse '', objname: true, (->) - ).should.throw 'Invalid Option: objname must be a string or a buffer, got true' - - it 'field require columns', -> - (-> - parse '', objname: 'field', (->) - ).should.throw [ - 'Invalid Option:' - 'objname field must be combined with columns' - 'or be defined as an index' - ].join ' ' - - it 'index incompatible with columns', -> - (-> - parse '', objname: 1, columns: true, (->) - ).should.throw [ - 'Invalid Option:' - 'objname index cannot be combined with columns' - 'or be defined as a field' - ].join ' ' - - describe 'map to a field', -> - - it 'convert a buffer to a column name', (next) -> - parse ''' - a,b,c - ''', objname: Buffer.from('h1'), columns: ['h1', 'h2', 'h3'], (err, records) -> - records.should.eql( - 'a': - 'h1': 'a' - 'h2': 'b' - 'h3': 'c' - ) unless err - next err - - it 'should print object of objects with properties using value of given column from columns', (next) -> - parse ''' - a,b,c - d,e,f - ''', objname: "FIELD_1", columns: ['FIELD_1', 'FIELD_2', 'FIELD_3'], (err, records) -> - return next err if err - records.should.eql - 'a': - 'FIELD_1': 'a' - 'FIELD_2': 'b' - 'FIELD_3': 'c' - 'd': - 'FIELD_1': 'd' - 'FIELD_2': 'e' - 'FIELD_3': 'f' - next err - - it 'should print object of objects with properties using value of given column from header record', (next) -> - parse ''' - FIELD_1,FIELD_2,FIELD_3 - a,b,c - d,e,f - ''', objname: "FIELD_1", columns: true, (err, records) -> - return next err if err - records.should.eql - 'a': - 'FIELD_1': 'a' - 'FIELD_2': 'b' - 'FIELD_3': 'c' - 'd': - 'FIELD_1': 'd' - 'FIELD_2': 'e' - 'FIELD_3': 'f' - next() - - it 'combined with info', (next) -> - parse ''' - FIELD_1,FIELD_2,FIELD_3 - a,b,c - d,e,f - ''', objname: 'FIELD_2', columns: true, info: true, (err, records) -> - return next err if err - records.should.match - 'b': - record: - 'FIELD_1': 'a' - 'FIELD_2': 'b' - 'FIELD_3': 'c' - info: - bytes: 30 - lines: 2 - 'e': - record: - 'FIELD_1': 'd' - 'FIELD_2': 'e' - 'FIELD_3': 'f' - info: - bytes: 35 - lines: 3 - next() - - describe 'map to an index', -> - - it 'get value associated with index', (next) -> - parse ''' - a,b,c - d,e,f - ''', objname: 1, (err, records) -> - return next err if err - records.should.eql - 'b': [ 'a', 'b', 'c' ] - 'e': [ 'd', 'e', 'f' ] - next() - - it 'combined with info', (next) -> - parse ''' - a,b,c - d,e,f - ''', objname: 1, info: true, (err, records) -> - return next err if err - records.should.match - 'b': - record: [ 'a', 'b', 'c' ] - info: - bytes: 6 - lines: 1 - 'e': - record: [ 'd', 'e', 'f' ] - info: - bytes: 11 - lines: 2 - next() diff --git a/packages/csv-parse/test/option.objname.js b/packages/csv-parse/test/option.objname.js new file mode 100644 index 00000000..688bb9d8 --- /dev/null +++ b/packages/csv-parse/test/option.objname.js @@ -0,0 +1,213 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `objname`", function () { + describe("validation", function () { + it("basic", function () { + parse("", { objname: "sth", columns: true }, () => {}); + parse("", { objname: Buffer.from("sth"), columns: true }, () => {}); + parse("", { objname: 1 }, () => {}); + parse("", { objname: null }, () => {}); + parse("", { objname: undefined }, () => {}); + (() => { + parse("", { objname: "" }, () => {}); + }).should.throw("Invalid Option: objname must be a non empty string"); + (() => { + parse("", { objname: Buffer.from("") }, () => {}); + }).should.throw("Invalid Option: objname must be a non empty buffer"); + (() => { + parse("", { objname: true }, () => {}); + }).should.throw( + "Invalid Option: objname must be a string or a buffer, got true", + ); + }); + + it("field require columns", function () { + (() => { + parse("", { objname: "field" }, () => {}); + }).should.throw( + [ + "Invalid Option:", + "objname field must be combined with columns", + "or be defined as an index", + ].join(" "), + ); + }); + + it("index incompatible with columns", function () { + (() => { + parse("", { objname: 1, columns: true }, () => {}); + }).should.throw( + [ + "Invalid Option:", + "objname index cannot be combined with columns", + "or be defined as a field", + ].join(" "), + ); + }); + }); + + describe("map to a field", function () { + it("convert a buffer to a column name", function (next) { + parse( + `a,b,c`, + { objname: Buffer.from("h1"), columns: ["h1", "h2", "h3"] }, + (err, records) => { + if (!err) { + records.should.eql({ + a: { + h1: "a", + h2: "b", + h3: "c", + }, + }); + } + next(err); + }, + ); + }); + + it("should print object of objects with properties using value of given column from columns", function (next) { + parse( + dedent` + a,b,c + d,e,f + `, + { objname: "FIELD_1", columns: ["FIELD_1", "FIELD_2", "FIELD_3"] }, + (err, records) => { + if (err) return next(err); + records.should.eql({ + a: { + FIELD_1: "a", + FIELD_2: "b", + FIELD_3: "c", + }, + d: { + FIELD_1: "d", + FIELD_2: "e", + FIELD_3: "f", + }, + }); + next(err); + }, + ); + }); + + it("should print object of objects with properties using value of given column from header record", function (next) { + parse( + dedent` + FIELD_1,FIELD_2,FIELD_3 + a,b,c + d,e,f + `, + { objname: "FIELD_1", columns: true }, + (err, records) => { + if (err) return next(err); + records.should.eql({ + a: { + FIELD_1: "a", + FIELD_2: "b", + FIELD_3: "c", + }, + d: { + FIELD_1: "d", + FIELD_2: "e", + FIELD_3: "f", + }, + }); + next(); + }, + ); + }); + + it("combined with info", function (next) { + parse( + dedent` + FIELD_1,FIELD_2,FIELD_3 + a,b,c + d,e,f + `, + { objname: "FIELD_2", columns: true, info: true }, + (err, records) => { + if (err) return next(err); + records.should.match({ + b: { + record: { + FIELD_1: "a", + FIELD_2: "b", + FIELD_3: "c", + }, + info: { + bytes: 30, + lines: 2, + }, + }, + e: { + record: { + FIELD_1: "d", + FIELD_2: "e", + FIELD_3: "f", + }, + info: { + bytes: 35, + lines: 3, + }, + }, + }); + next(); + }, + ); + }); + }); + + describe("map to an index", function () { + it("get value associated with index", function (next) { + parse( + dedent` + a,b,c + d,e,f + `, + { objname: 1 }, + (err, records) => { + if (err) return next(err); + records.should.eql({ + b: ["a", "b", "c"], + e: ["d", "e", "f"], + }); + next(); + }, + ); + }); + + it("combined with info", function (next) { + parse( + dedent` + a,b,c + d,e,f + `, + { objname: 1, info: true }, + (err, records) => { + if (err) return next(err); + records.should.match({ + b: { + record: ["a", "b", "c"], + info: { + bytes: 6, + lines: 1, + }, + }, + e: { + record: ["d", "e", "f"], + info: { + bytes: 11, + lines: 2, + }, + }, + }); + next(); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/option.on_record.coffee b/packages/csv-parse/test/option.on_record.coffee deleted file mode 100644 index 18ae6ec3..00000000 --- a/packages/csv-parse/test/option.on_record.coffee +++ /dev/null @@ -1,105 +0,0 @@ - -import { parse } from '../lib/index.js' -import { assert_error } from './api.assert_error.coffee' - -describe 'Option `on_record`', -> - - it 'validate', -> - (-> - parse on_record: true - ).should.throw - message: 'Invalid option `on_record`: expect a function, got true' - code: 'CSV_INVALID_OPTION_ON_RECORD' - - describe 'usage', -> - - it 'alter records', (next) -> - parse "a,b", on_record: (record) -> - [record[1], record[0]] - , (err, records) -> - records.should.eql [ ['b', 'a'] ] unless err - next err - - it 'filter records', (next) -> - parse "a,b\nc,d\ne,f", on_record: (record, {lines}) -> - if lines is 2 then null else record - , (err, records) -> - records.should.eql [ ['a', 'b'], ['e', 'f'] ] unless err - next err - - it 'errors with callback', (next) -> - parse "a,b\nc,d\ne,f", - on_record: (record, {lines}) -> - if lines is 2 then throw Error 'Error thrown on line 2' else record - , (err, records) -> - err.message.should.eql 'Error thrown on line 2' - next() - - it 'errors with events', (next) -> - parser = parse "a,a,a\nc,d\ne,f" - parser.on 'error', (err) -> - err.message.should.eql 'Invalid Record Length: expect 3, got 2 on line 2' - next() - parser.on 'end', () -> - next Error 'Should not be called' - - it 'errors not handled by skip_records_with_error', (next) -> - parse "a,b\nc,d\ne,f", - on_record: (record, {lines}) -> - if lines is 2 then throw Error 'Error thrown on line 2' else record - skip_records_with_error: true - , (err, records) -> - err.message.should.eql 'Error thrown on line 2' - next() - - describe 'context', -> - - it 'properties', (next) -> - parse "a,b", - on_record: (record, context) -> - should(context.raw).be.undefined() - Object.keys(context).sort() - skip_records_with_error: true - , (err, records) -> - records.should.eql [[ - 'bytes', - 'columns', 'comment_lines', 'empty_lines', 'error', 'header', - 'index', 'invalid_field_length', 'lines', 'raw', 'records' - ]] - next() - - it 'properties with `columns: true` and `raw: true`', (next) -> - parse "a,b\n1,2\n3,4", - columns: true - raw: true - on_record: (record, context) -> - if context.lines is 2 - context.raw.should.eql '1,2\n' - else if context.lines is 3 - context.raw.should.eql '3,4' - Object.keys(context).sort() - skip_records_with_error: true - , (err, records) -> - records.shift().should.eql [ - 'bytes', - 'columns', 'comment_lines', 'empty_lines', 'error', 'header', - 'index', 'invalid_field_length', 'lines', 'raw', 'records' - ] - next() - - it 'values', (next) -> - parse "a,b\nc,d", - on_record: (record, context) -> - context - skip_records_with_error: true - , (err, records) -> - records.should.eql [ - bytes: 4, - columns: false, comment_lines: 0, empty_lines: 0, error: undefined, header: false - index: 2, invalid_field_length: 0, lines: 1, raw: undefined, records: 1 - , - bytes: 7, - columns: false, comment_lines: 0, empty_lines: 0, error: undefined, header: false - index: 2, invalid_field_length: 0, lines: 2, raw: undefined, records: 2 - ] - next() diff --git a/packages/csv-parse/test/option.on_record.js b/packages/csv-parse/test/option.on_record.js new file mode 100644 index 00000000..0963179d --- /dev/null +++ b/packages/csv-parse/test/option.on_record.js @@ -0,0 +1,212 @@ +import should from "should"; +import { parse } from "../lib/index.js"; + +describe("Option `on_record`", function () { + it("validate", function () { + (() => { + parse({ on_record: true }); + }).should.throw({ + message: "Invalid option `on_record`: expect a function, got true", + code: "CSV_INVALID_OPTION_ON_RECORD", + }); + }); + + describe("usage", function () { + it("alter records", function (next) { + parse( + "a,b", + { + on_record: (record) => { + return [record[1], record[0]]; + }, + }, + (err, records) => { + if (!err) { + records.should.eql([["b", "a"]]); + } + next(err); + }, + ); + }); + + it("filter records", function (next) { + parse( + "a,b\nc,d\ne,f", + { + on_record: (record, { lines }) => { + if (lines === 2) return null; + else return record; + }, + }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b"], + ["e", "f"], + ]); + } + next(err); + }, + ); + }); + + it("errors with callback", function (next) { + parse( + "a,b\nc,d\ne,f", + { + on_record: (record, { lines }) => { + if (lines === 2) throw Error("Error thrown on line 2"); + else return record; + }, + }, + (err) => { + err.message.should.eql("Error thrown on line 2"); + next(); + }, + ); + }); + + it("errors with events", function (next) { + const parser = parse("a,a,a\nc,d\ne,f"); + parser.on("error", (err) => { + err.message.should.eql( + "Invalid Record Length: expect 3, got 2 on line 2", + ); + next(); + }); + parser.on("end", () => { + next(Error("Should not be called")); + }); + }); + + it("errors not handled by skip_records_with_error", function (next) { + parse( + "a,b\nc,d\ne,f", + { + on_record: (record, { lines }) => { + if (lines === 2) throw Error("Error thrown on line 2"); + else return record; + }, + skip_records_with_error: true, + }, + (err) => { + err.message.should.eql("Error thrown on line 2"); + next(); + }, + ); + }); + }); + + describe("context", function () { + it("properties", function (next) { + parse( + "a,b", + { + on_record: (record, context) => { + should(context.raw).be.undefined(); + return Object.keys(context).sort(); + }, + skip_records_with_error: true, + }, + (err, records) => { + records.should.eql([ + [ + "bytes", + "columns", + "comment_lines", + "empty_lines", + "error", + "header", + "index", + "invalid_field_length", + "lines", + "raw", + "records", + ], + ]); + next(); + }, + ); + }); + + it("properties with `columns: true` and `raw: true`", function (next) { + parse( + "a,b\n1,2\n3,4", + { + columns: true, + raw: true, + on_record: (record, context) => { + if (context.lines === 2) { + context.raw.should.eql("1,2\n"); + } else if (context.lines === 3) { + context.raw.should.eql("3,4"); + } + return Object.keys(context).sort(); + }, + skip_records_with_error: true, + }, + (err, records) => { + records + .shift() + .should.eql([ + "bytes", + "columns", + "comment_lines", + "empty_lines", + "error", + "header", + "index", + "invalid_field_length", + "lines", + "raw", + "records", + ]); + next(); + }, + ); + }); + + it("values", function (next) { + parse( + "a,b\nc,d", + { + on_record: (record, context) => { + return context; + }, + skip_records_with_error: true, + }, + (err, records) => { + records.should.eql([ + { + bytes: 4, + columns: false, + comment_lines: 0, + empty_lines: 0, + error: undefined, + header: false, + index: 2, + invalid_field_length: 0, + lines: 1, + raw: undefined, + records: 1, + }, + { + bytes: 7, + columns: false, + comment_lines: 0, + empty_lines: 0, + error: undefined, + header: false, + index: 2, + invalid_field_length: 0, + lines: 2, + raw: undefined, + records: 2, + }, + ]); + next(); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/option.on_skip.coffee b/packages/csv-parse/test/option.on_skip.coffee deleted file mode 100644 index 2948bc06..00000000 --- a/packages/csv-parse/test/option.on_skip.coffee +++ /dev/null @@ -1,36 +0,0 @@ - -import { parse } from '../lib/index.js' -import { assert_error } from './api.assert_error.coffee' - -describe 'Option `on_skip`', -> - - it 'validation', -> - parse '', on_skip: (->), (->) - (-> - parse '', on_skip: 1, (->) - ).should.throw 'Invalid Option: on_skip must be a function, got 1' - - it 'handle "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH" with bom (fix #411)', (next) -> - errors = 0 - parser = parse - bom: true - skip_records_with_error: true - on_skip: (err) -> - assert_error err, - message: 'Invalid Record Length: expect 4, got 3 on line 2' - code: 'CSV_RECORD_INCONSISTENT_FIELDS_LENGTH' - record: ['1', '2', '3'] - errors++ - , (err, records) -> - records.should.eql [ - ['a', 'b', 'c', 'd'] - ['e', 'f', 'g', 'h'] - ] unless err - errors.should.eql 1 - next err - parser.write ''' - a,b,c,d - 1,2,3 - e,f,g,h - ''' - parser.end() diff --git a/packages/csv-parse/test/option.on_skip.js b/packages/csv-parse/test/option.on_skip.js new file mode 100644 index 00000000..8dd916f4 --- /dev/null +++ b/packages/csv-parse/test/option.on_skip.js @@ -0,0 +1,45 @@ +import "should"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `on_skip`", function () { + it("validation", function () { + parse("", { on_skip: () => {} }, () => {}); + (() => { + parse("", { on_skip: 1 }, () => {}); + }).should.throw("Invalid Option: on_skip must be a function, got 1"); + }); + + it('handle "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH" with bom (fix #411)', function (next) { + let errors = 0; + const parser = parse( + { + bom: true, + skip_records_with_error: true, + on_skip: (err) => { + assert_error(err, { + message: "Invalid Record Length: expect 4, got 3 on line 2", + code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", + record: ["1", "2", "3"], + }); + errors++; + }, + }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c", "d"], + ["e", "f", "g", "h"], + ]); + } + errors.should.eql(1); + next(err); + }, + ); + parser.write(`a,b,c,d +1,2,3 +e,f,g,h +`); + parser.end(); + }); +}); diff --git a/packages/csv-parse/test/option.quote.coffee b/packages/csv-parse/test/option.quote.coffee deleted file mode 100644 index f3b0dc93..00000000 --- a/packages/csv-parse/test/option.quote.coffee +++ /dev/null @@ -1,224 +0,0 @@ - -import { parse } from '../lib/index.js' -import { assert_error } from './api.assert_error.coffee' - -describe 'Option `quote`', -> - - it 'is compatible with buffer size', (next) -> - parser = parse escape: '$', quote: '::::::', (err, data) -> - data.should.eql [ - [ '1', '2::::::2', '3' ] - [ 'b', 'c', 'd' ] - ] - next err - parser.write c for c in """ - 1,::::::2$::::::2::::::,3 - b,c,d - """ - parser.end() - - it 'default', -> - parser = parse() - parser.options.quote.should.eql Buffer.from('"') - - it 'normalize', -> - parser = parse quote: true - parser.options.quote.should.eql Buffer.from('"') - parser = parse quote: false - (parser.options.quote is null).should.be.true() - parser = parse quote: null - (parser.options.quote is null).should.be.true() - - it 'with default', (next) -> - data = ''' - abc,"123",def,"456" - hij,klm,"789",nop - ''' - parser = parse (err, records) -> - return next err if err - records.should.eql [ - [ 'abc','123','def','456' ] - [ 'hij','klm','789','nop' ] - ] - next() - parser.write chr for chr in data - parser.end() - - it 'with fields containing delimiters', (next) -> - parse """ - 20322051544,",1979.0,8.8017226E7,ABC,45,2000-01-01",1,2,3,4 - 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 - "28392898392,1974.0","8.8392926E7","DEF,23,2050-11-27,",4,5,6 - """, (err, records) -> - return next err if err - records.should.eql [ - [ '20322051544',',1979.0,8.8017226E7,ABC,45,2000-01-01','1','2','3','4' ] - [ '28392898392','1974.0','8.8392926E7','DEF','23','2050-11-27' ] - [ '28392898392,1974.0','8.8392926E7','DEF,23,2050-11-27,','4','5','6' ] - ] - next() - - it 'empty value', (next) -> - parse """ - 20322051544,"",8.8017226E7,45,"" - "",1974,8.8392926E7,"","" - """, (err, records) -> - return next err if err - records.should.eql [ - [ '20322051544','','8.8017226E7','45','' ] - [ '','1974','8.8392926E7','','' ] - ] - next() - - it 'values containing quotes and double quotes escape', (next) -> - parse ''' - AB,"""",CD,"""hi""" - "",JK,"","" - ''', (err, records) -> - return next err if err - records.should.eql [ - [ 'AB','"','CD','"hi"' ] - [ '','JK','','' ] - ] - next() - - it 'only containing quotes and double quotes escape', (next) -> - data = ''' - """" - """" - ''' - parser = parse (err, records) -> - return next err if err - records.should.eql [ - [ '"' ] - [ '"' ] - ] - next() - parser.write chr for chr in data - parser.end() - - it 'line breaks inside quotes', (next) -> - parse """ - 20322051544," - ",8.8017226E7,45," - ok - " - " - ",1974,8.8392926E7,""," - " - """, (err, records) -> - records.should.eql [ - [ '20322051544','\n','8.8017226E7','45','\nok\n' ] - [ '\n','1974','8.8392926E7','','\n' ] - ] unless err - next err - - describe 'disabled', -> - - it 'if empty', (next) -> - parse """ - a,b,c - 1,r"2"d"2",3 - """, quote: '', (err, records) -> - records.should.eql [['a','b','c'],['1','r"2"d"2"','3']] unless err - next err - - it 'if null', (next) -> - parse """ - a,b,c - 1,r"2"d"2",3 - """, quote: null, (err, records) -> - records.should.eql [['a','b','c'],['1','r"2"d"2"','3']] unless err - next err - - it 'if false', (next) -> - parse """ - a,b,c - 1,r"2"d"2",3 - """, quote: null, (err, records) -> - records.should.eql [['a','b','c'],['1','r"2"d"2"','3']] unless err - next err - - describe 'options', -> - - it 'with multiple chars', (next) -> - parse """ - $$a$$,b,$$c$$ - 1,$$2$$,3 - """, quote: '$$', (err, records) -> - records.should.eql [['a','b','c'],['1','2','3']] unless err - next err - - it 'with columns', (next) -> - parse """ - a,"b",c - 1,"2",3 - """, quote: true, columns: true, (err, records) -> - records.should.eql [ { a: '1', b: '2', c: '3' } ] unless err - next err - - describe 'error "Quoted field not terminated"', -> - - it 'when unclosed', (next) -> - parse """ - "",1974,8.8392926E7,""," - """, (err) -> - assert_error err, - message: 'Quote Not Closed: the parsing is finished with an opening quote at line 1' - code: 'CSV_QUOTE_NOT_CLOSED' - next() - - describe 'error "Invalid Closing Quote"', -> - - it 'when followed by a character', (next) -> - parse '""!', quote: '"', escape: '"', (err) -> - assert_error err, - message: 'Invalid Closing Quote: got "!" at line 1 instead of delimiter, record delimiter, trimable character (if activated) or comment' - code: 'CSV_INVALID_CLOSING_QUOTE' - next() - - it 'no throw followed by a comment', (next) -> - parse '""# A comment', quote: '"', escape: '"', comment: '#', (err) -> - next err - - it 'no throw followed by a delimiter', (next) -> - parse '""|BB', quote: '"', escape: '"', delimiter: '|', (err) -> - next err - - it 'no throw followed by a record delimiter', (next) -> - parse '""|BB', quote: '"', escape: '"', record_delimiter: '|', (err) -> - next err - - it 'no throw followed by a trimable character', (next) -> - parse '"" ', quote: '"', escape: '"', rtrim: true, (err) -> - next err - - describe 'error "Invalid opening quotes"', -> - - it 'on indexed columns', (next) -> - parse """ - "this","line","is",valid - "this","line",is,"also,valid" - this,"line",is,invalid h"ere" - "and",valid,line,follows... - """, (err, records) -> - assert_error err, - message: 'Invalid Opening Quote: a quote is found on field 3 at line 3, value is "invalid h"' - code: 'INVALID_OPENING_QUOTE' - field: 'invalid h' - (records == undefined).should.be.true - next() - - it 'on indexed columns', (next) -> - parse """ - "a","b","c","d" - "11","12",13,"14" - 21,"22",23,2"4" - """, columns: true, (err, records) -> - assert_error err, - message: 'Invalid Opening Quote: a quote is found on field "d" at line 3, value is "2"' - code: 'INVALID_OPENING_QUOTE' - field: '2' - (records == undefined).should.be.true - next() - diff --git a/packages/csv-parse/test/option.quote.js b/packages/csv-parse/test/option.quote.js new file mode 100644 index 00000000..1b8dd1ff --- /dev/null +++ b/packages/csv-parse/test/option.quote.js @@ -0,0 +1,345 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `quote`", function () { + it("is compatible with buffer size", function (next) { + const parser = parse({ escape: "$", quote: "::::::" }, (err, data) => { + data.should.eql([ + ["1", "2::::::2", "3"], + ["b", "c", "d"], + ]); + next(err); + }); + for (const c of "1,::::::2$::::::2::::::,3\nb,c,d") { + parser.write(c); + } + parser.end(); + }); + + it("default", function () { + const parser = parse(); + parser.options.quote.should.eql(Buffer.from('"')); + }); + + it("normalize", function () { + let parser = parse({ quote: true }); + parser.options.quote.should.eql(Buffer.from('"')); + parser = parse({ quote: false }); + (parser.options.quote === null).should.be.true(); + parser = parse({ quote: null }); + (parser.options.quote === null).should.be.true(); + }); + + it("with default", function (next) { + const data = 'abc,"123",def,"456"\nhij,klm,"789",nop'; + const parser = parse((err, records) => { + if (err) return next(err); + records.should.eql([ + ["abc", "123", "def", "456"], + ["hij", "klm", "789", "nop"], + ]); + next(); + }); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); + + it("with fields containing delimiters", function (next) { + parse( + dedent` + 20322051544,",1979.0,8.8017226E7,ABC,45,2000-01-01",1,2,3,4 + 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 + "28392898392,1974.0","8.8392926E7","DEF,23,2050-11-27,",4,5,6 + `, + (err, records) => { + if (err) return next(err); + records.should.eql([ + [ + "20322051544", + ",1979.0,8.8017226E7,ABC,45,2000-01-01", + "1", + "2", + "3", + "4", + ], + ["28392898392", "1974.0", "8.8392926E7", "DEF", "23", "2050-11-27"], + [ + "28392898392,1974.0", + "8.8392926E7", + "DEF,23,2050-11-27,", + "4", + "5", + "6", + ], + ]); + next(); + }, + ); + }); + + it("empty value", function (next) { + parse( + dedent` + 20322051544,"",8.8017226E7,45,"" + "",1974,8.8392926E7,"","" + `, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["20322051544", "", "8.8017226E7", "45", ""], + ["", "1974", "8.8392926E7", "", ""], + ]); + next(); + }, + ); + }); + + it("values containing quotes and double quotes escape", function (next) { + parse('AB,"""",CD,"""hi"""\n"",JK,"",""\n', (err, records) => { + if (err) return next(err); + records.should.eql([ + ["AB", '"', "CD", '"hi"'], + ["", "JK", "", ""], + ]); + next(); + }); + }); + + it("only containing quotes and double quotes escape", function (next) { + const data = '""""\n""""\n'; + const parser = parse((err, records) => { + if (err) return next(err); + records.should.eql([['"'], ['"']]); + next(); + }); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); + + it("line breaks inside quotes", function (next) { + parse( + dedent` + 20322051544," + ",8.8017226E7,45," + ok + " + " + ",1974,8.8392926E7,""," + " + `, + (err, records) => { + if (!err) { + records.should.eql([ + ["20322051544", "\n", "8.8017226E7", "45", "\nok\n"], + ["\n", "1974", "8.8392926E7", "", "\n"], + ]); + } + next(err); + }, + ); + }); + + describe("disabled", function () { + it("if empty", function (next) { + parse( + dedent` + a,b,c + 1,r"2"d"2",3 + `, + { quote: "" }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["1", 'r"2"d"2"', "3"], + ]); + } + next(err); + }, + ); + }); + + it("if null", function (next) { + parse( + dedent` + a,b,c + 1,r"2"d"2",3 + `, + { quote: null }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["1", 'r"2"d"2"', "3"], + ]); + } + next(err); + }, + ); + }); + + it("if false", function (next) { + parse( + dedent` + a,b,c + 1,r"2"d"2",3 + `, + { quote: null }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["1", 'r"2"d"2"', "3"], + ]); + } + next(err); + }, + ); + }); + }); + + describe("options", function () { + it("with multiple chars", function (next) { + parse( + dedent` + $$a$$,b,$$c$$ + 1,$$2$$,3 + `, + { quote: "$$" }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["1", "2", "3"], + ]); + } + next(err); + }, + ); + }); + + it("with columns", function (next) { + parse( + dedent` + a,"b",c + 1,"2",3 + `, + { quote: true, columns: true }, + (err, records) => { + if (!err) { + records.should.eql([{ a: "1", b: "2", c: "3" }]); + } + next(err); + }, + ); + }); + }); + + describe('error "Quoted field not terminated"', function () { + it("when unclosed", function (next) { + parse(`"",1974,8.8392926E7,"","`, (err) => { + assert_error(err, { + message: + "Quote Not Closed: the parsing is finished with an opening quote at line 1", + code: "CSV_QUOTE_NOT_CLOSED", + }); + next(); + }); + }); + }); + + describe('error "Invalid Closing Quote"', function () { + it("when followed by a character", function (next) { + parse('""!', { quote: '"', escape: '"' }, (err) => { + assert_error(err, { + message: + 'Invalid Closing Quote: got "!" at line 1 instead of delimiter, record delimiter, trimable character (if activated) or comment', + code: "CSV_INVALID_CLOSING_QUOTE", + }); + next(); + }); + }); + + it("no throw followed by a comment", function (next) { + parse( + '""# A comment', + { quote: '"', escape: '"', comment: "#" }, + (err) => { + next(err); + }, + ); + }); + + it("no throw followed by a delimiter", function (next) { + parse('""|BB', { quote: '"', escape: '"', delimiter: "|" }, (err) => { + next(err); + }); + }); + + it("no throw followed by a record delimiter", function (next) { + parse( + '""|BB', + { quote: '"', escape: '"', record_delimiter: "|" }, + (err) => { + next(err); + }, + ); + }); + + it("no throw followed by a trimable character", function (next) { + parse('"" ', { quote: '"', escape: '"', rtrim: true }, (err) => { + next(err); + }); + }); + }); + + describe('error "Invalid opening quotes"', function () { + it("with indexed columns", function (next) { + parse( + dedent` + "this","line","is",valid + "this","line",is,"also,valid" + this,"line",is,invalid h"ere" + "and",valid,line,follows... + `, + (err, records) => { + assert_error(err, { + message: + 'Invalid Opening Quote: a quote is found on field 3 at line 3, value is "invalid h"', + code: "INVALID_OPENING_QUOTE", + field: "invalid h", + }); + (records === undefined).should.be.true; + next(); + }, + ); + }); + + it("with named columns", function (next) { + parse( + dedent` + "a","b","c","d" + "11","12",13,"14" + 21,"22",23,2"4" + `, + { columns: true }, + (err, records) => { + assert_error(err, { + message: + 'Invalid Opening Quote: a quote is found on field "d" at line 3, value is "2"', + code: "INVALID_OPENING_QUOTE", + field: "2", + }); + (records === undefined).should.be.true; + next(); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/option.raw.coffee b/packages/csv-parse/test/option.raw.coffee deleted file mode 100644 index 072777c7..00000000 --- a/packages/csv-parse/test/option.raw.coffee +++ /dev/null @@ -1,55 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'Option `raw`', -> - - it 'validation', -> - parse '', raw: undefined, (->) - parse '', raw: null, (->) - parse '', raw: false, (->) - (-> - parse '', raw: '', (->) - ).should.throw 'Invalid Option: raw must be true, got ""' - (-> - parse '', raw: 2, (->) - ).should.throw 'Invalid Option: raw must be true, got 2' - - it 'includes escape chars', (next) -> - str = """ - "hello""world",LOL - """ - parse str, raw: true, escape: '"', (err, records) -> - records[0].raw.should.eql str unless err - records[0].record.should.eql [ 'hello"world', 'LOL' ] unless err - next err - - it 'includes line breaks', (next) -> - parse """ - hello - my - friend - """, raw: true, escape: '"', (err, records) -> - records[1].raw.should.match /\n$/ unless err - next err - - it 'has the inner line breaks', (next) -> - str = """ - foo,"b - a - r" - """ - parse str, raw: true, escape: '"', (err, records) -> - records[0].raw.should.eql str unless err - next err - - it 'preserve columns', (next) -> - parse """ - name,last name - Boudreau,Jonathan - """, raw: true, columns: ['FIELD_1', false], (err, records) -> - records[0].raw.should.eql 'name,last name\n' unless err - records[0].record.should.eql FIELD_1: 'name' unless err - next err - - - diff --git a/packages/csv-parse/test/option.raw.js b/packages/csv-parse/test/option.raw.js new file mode 100644 index 00000000..3e83fd56 --- /dev/null +++ b/packages/csv-parse/test/option.raw.js @@ -0,0 +1,74 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `raw`", function () { + it("validation", function () { + parse("", { raw: undefined }, () => {}); + parse("", { raw: null }, () => {}); + parse("", { raw: false }, () => {}); + (() => parse("", { raw: "" }, () => {})).should.throw( + 'Invalid Option: raw must be true, got ""', + ); + (() => parse("", { raw: 2 }, () => {})).should.throw( + "Invalid Option: raw must be true, got 2", + ); + }); + + it("includes escape chars", function (next) { + const str = dedent` + "hello""world",LOL + `; + parse(str, { raw: true, escape: '"' }, (err, records) => { + if (err) return next(err); + records[0].raw.should.eql(str); + records[0].record.should.eql(['hello"world', "LOL"]); + next(); + }); + }); + + it("includes line breaks", function (next) { + parse( + dedent` + hello + my + friend + `, + { raw: true, escape: '"' }, + (err, records) => { + if (err) return next(err); + records[1].raw.should.match(/\n$/); + next(); + }, + ); + }); + + it("has the inner line breaks", function (next) { + const str = dedent` + foo,"b + a + r" + `; + parse(str, { raw: true, escape: '"' }, (err, records) => { + if (err) return next(err); + records[0].raw.should.eql(str); + next(); + }); + }); + + it("preserve columns", function (next) { + parse( + dedent` + name,last name + Boudreau,Jonathan + `, + { raw: true, columns: ["FIELD_1", false] }, + (err, records) => { + if (err) return next(err); + records[0].raw.should.eql("name,last name\n"); + records[0].record.should.eql({ FIELD_1: "name" }); + next(); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.record_delimiter.coffee b/packages/csv-parse/test/option.record_delimiter.coffee deleted file mode 100644 index c7609840..00000000 --- a/packages/csv-parse/test/option.record_delimiter.coffee +++ /dev/null @@ -1,407 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'Option `record_delimiter`', -> - - describe 'validation', -> - - it 'accepted types', -> - parse 'a,b,c', record_delimiter: undefined, (->) - parse 'a,b,c', record_delimiter: 'string', (->) - parse 'a,b,c', record_delimiter: ['string'], (->) - parse 'a,b,c', record_delimiter: Buffer.from('string'), (->) - parse 'a,b,c', record_delimiter: [Buffer.from('string')], (->) - - it 'non accepted types', -> - (-> - parse 'a,b,c', record_delimiter: '', (->) - ).should.throw - message: [ - 'Invalid option `record_delimiter`:' - 'value must be a non empty string or buffer,' - 'got ""' - ].join ' ' - code: 'CSV_INVALID_OPTION_RECORD_DELIMITER' - (-> - parse 'a,b,c', record_delimiter: Buffer.from(''), (->) - ).should.throw - message: [ - 'Invalid option `record_delimiter`:' - 'value must be a non empty string or buffer,' - 'got {"type":"Buffer","data":[]}' - ].join ' ' - code: 'CSV_INVALID_OPTION_RECORD_DELIMITER' - (-> - parse 'a,b,c', record_delimiter: null, (->) - ).should.throw - message: [ - 'Invalid option `record_delimiter`:' - 'value must be a string, a buffer or array of string|buffer,' - 'got null' - ].join ' ' - code: 'CSV_INVALID_OPTION_RECORD_DELIMITER' - (-> - parse 'a,b,c', record_delimiter: ['a', '', 'b'], (->) - ).should.throw - message: [ - 'Invalid option `record_delimiter`:' - 'value must be a non empty string or buffer' - 'at index 1,' - 'got ""' - ].join ' ' - code: 'CSV_INVALID_OPTION_RECORD_DELIMITER' - (-> - parse 'a,b,c', record_delimiter: ['a', null, 'b'], (->) - ).should.throw - message: [ - 'Invalid option `record_delimiter`:' - 'value must be a string, a buffer or array of string|buffer' - 'at index 1,' - 'got null' - ].join ' ' - code: 'CSV_INVALID_OPTION_RECORD_DELIMITER' - - describe 'usage', -> - - it 'as a string', (next) -> - parse """ - ABC,45::DEF,23 - """, record_delimiter: '::', (err, records) -> - return next err if err - records.should.eql [ - [ 'ABC','45' ] - [ 'DEF','23' ] - ] - next() - - it 'as an array', (next) -> - parse """ - ABC,45::DEF,23\n50,60 - """, record_delimiter: ['::','\n'], (err, records) -> - return next err if err - records.should.eql [ - [ 'ABC','45' ] - [ 'DEF','23' ] - [ '50', '60'] - ] - next() - - describe 'details', -> - - it 'is compatible with buffer size', (next) -> - parser = parse record_delimiter: ['::::::'], (err, records) -> - records.should.eql [ - [ '1', '2', '3' ] - [ 'b', 'c', 'd' ] - ] - next err - parser.write c for c in """ - 1,2,3::::::b,c,d - """ - parser.end() - - it 'ensure that delimiter and record_delimiter doesnt match', (next) -> - parse """ - a;b - 11;22; - 33;33; - - """, - delimiter: ';' - record_delimiter: [';\n', '\n'] - , (err, records) -> - records.should.eql [ - [ 'a', 'b' ] - [ '11', '22' ] - [ '33', '33' ] - ] unless err - next err - - it 'handle new line preceded by a quote when record_delimiter is a string', (next) -> - parse """ - "ABC","45"::"DEF","23"::"GHI","94" - """, record_delimiter: '::', (err, records) -> - return next err if err - records.should.eql [ - [ 'ABC','45' ] - [ 'DEF','23' ] - [ 'GHI','94' ] - ] - next() - - it 'handle new line preceded by a quote when record_delimiter is an array', (next) -> - parse """ - "ABC","45"::"DEF","23"::"GHI","94"\r\n"JKL","13" - """, record_delimiter: ['::', '\r\n'], (err, records) -> - return next err if err - records.should.eql [ - [ 'ABC','45' ] - [ 'DEF','23' ] - [ 'GHI','94' ] - [ 'JKL','13' ] - ] - next() - - it 'handle chunks of multiple chars when record_delimiter is a string', (next) -> - records = [] - parser = parse record_delimiter: '::' - parser.on 'readable', -> - while d = parser.read() - records.push d - parser.on 'end', -> - records.should.eql [ - [ 'ABC','45' ] - [ 'DEF','23' ] - [ 'GHI','94' ] - [ 'JKL','02' ] - ] - next() - parser.write '"ABC","45"' - parser.write '::"DEF","23":' - parser.write ':"GHI","94"::' - parser.write '"JKL","02"' - parser.end() - - it 'handle chunks of multiple chars when record_delimiter is an array', (next) -> - records = [] - parser = parse record_delimiter: ['::', '\r'] - parser.on 'readable', -> - while d = parser.read() - records.push d - parser.on 'end', -> - records.should.eql [ - [ 'ABC','45' ] - [ 'DEF','23' ] - [ 'GHI','94' ] - [ 'JKL','02' ] - [ 'MNO','13' ] - ] - next() - parser.write '"ABC","45"' - parser.write '::"DEF","23":' - parser.write ':"GHI","94"::' - parser.write '"JKL","02"\r' - parser.write '"MNO","13"' - parser.end() - - it 'handle chunks of multiple chars without quotes when record_delimiter is a string', (next) -> - records = [] - parser = parse record_delimiter: '::' - parser.on 'readable', -> - while d = parser.read() - records.push d - parser.on 'end', -> - records.should.eql [ - [ 'ABC','45' ] - [ 'DEF','23' ] - [ 'GHI','94' ] - [ 'JKL','02' ] - ] - next() - parser.write 'ABC,45' - parser.write '::DEF,23:' - parser.write ':GHI,94::' - parser.write 'JKL,02' - parser.end() - - it 'handle chunks of multiple chars without quotes when record_delimiter is an array', (next) -> - records = [] - parser = parse record_delimiter: ['::','\n','\r\n'] - parser.on 'readable', -> - while d = parser.read() - records.push d - parser.on 'end', -> - records.should.eql [ - [ 'ABC','45' ] - [ 'DEF','23' ] - [ 'GHI','94' ] - [ 'JKL','02' ] - ] - next() - parser.write 'ABC,45\n' - parser.write 'DEF,23:' - parser.write ':GHI,94\r' - parser.write '\nJKL,02' - parser.end() - - describe 'auto', -> - - it 'No record', (next) -> - # not sure if the current behavior is right, - # the new behavior is proposing [['']] - # which kind of look more appropriate - parse "", (err, records) -> - records.should.eql [] unless err - next err - - it 'handle chunks in autodiscovery', (next) -> - records = [] - parser = parse() - parser.on 'readable', -> - while d = parser.read() - records.push d - parser.on 'end', -> - records.should.eql [ - [ 'ABC','45' ] - [ 'DEF','23' ] - [ 'GHI','94' ] - [ 'JKL','02' ] - ] - next() - parser.write '"ABC","45"' - parser.write '\n"DEF","23"\n' - parser.write '"GHI","94"\n' - parser.write '"JKL","02"' - parser.end() - - it 'write aggressively', (next) -> - records = [] - parser = parse() - parser.on 'readable', -> - while(d = parser.read()) - records.push d - parser.on 'end', -> - records.should.eql [ - [ 'abc', '123' ] - [ 'def', '456' ] - ] - next() - parser.write 'abc,123' - parser.write '\n' - parser.write 'def,456' - parser.end() - - it 'Test line ends with field delimiter and without record delimiter', (next) -> - parse '"a","b","c",', delimiter: ',', (err, records) -> - return next err if err - records.should.eql [ - [ 'a','b','c','' ] - ] - next() - - it 'ensure autodiscovery support chunck between lines', (next) -> - records = [] - parser = parse() - parser.on 'readable', -> - while d = parser.read() - records.push d - parser.on 'end', -> - records.should.eql [ - [ 'ABC','45' ] - [ 'DEF','23' ] - [ 'GHI','94' ] - [ 'JKL','02' ] - ] - next() - parser.write 'ABC,45' - parser.write '\r\nDEF,23\r' - parser.write '\nGHI,94\r\n' - parser.write 'JKL,02\r\n' - parser.end() - - it 'skip default record delimiters when quoted', (next) -> - parser = parse (err, records) -> - records.should.eql [ - ['1', '2', '\n'] - ['3', '4', ''] - ] unless err - next err - parser.write c for c in '1,2,"\n"\r\n3,4,' - parser.end() - - it 'with skip empty lines', (next) -> - parse """ - ABC\r\n\r\nDEF\r\n\r\n - """, skip_empty_lines: true, (err, records) -> - records.should.eql [ - [ 'ABC' ] - [ 'DEF' ] - ] unless err - next err - - it 'support utf8 no bom with windows line ending', (next) -> - parser = parse encoding: 'utf8', (err, records) -> - records.should.eql [ - ['a', 'b'] - ['1', '2'] - ] unless err - next err - parser.write Buffer.from([c]) for c in Buffer.from('a,b\r\n1,2', 'utf8') - parser.end() - - it 'support utf8 no bom with mac os 9 line ending', (next) -> - parser = parse encoding: 'utf8', (err, records) -> - records.should.eql [ - ['a', 'b'] - ['1', '2'] - ] unless err - next err - parser.write Buffer.from([c]) for c in Buffer.from('a,b\r1,2', 'utf8') - parser.end() - - it 'support utf8 no bom with unix line ending', (next) -> - parser = parse encoding: 'utf8', (err, records) -> - records.should.eql [ - ['a', 'b'] - ['1', '2'] - ] unless err - next err - parser.write Buffer.from([c]) for c in Buffer.from('a,b\n1,2', 'utf8') - parser.end() - - it 'support utf8 with bom with windows line ending', (next) -> - parser = parse bom: true, (err, records) -> - records.should.eql [ - ['a', 'b'] - ['1', '2'] - ] unless err - next err - parser.write Buffer.from([c]) for c in Buffer.concat([ - Buffer.from([239, 187, 191]), - Buffer.from('a,b\r\n1,2', 'utf8') - ]) - parser.end() - - it 'support utf16le no bom with windows line ending', (next) -> - parser = parse encoding: 'utf16le', (err, records) -> - records.should.eql [ - ['a', 'b'] - ['1', '2'] - ] unless err - next err - parser.write Buffer.from([c]) for c in Buffer.from('a,b\r\n1,2', 'utf16le') - parser.end() - - it 'support utf16le no bom with mac os 9 line ending', (next) -> - parser = parse encoding: 'utf16le', (err, records) -> - records.should.eql [ - ['a', 'b'] - ['1', '2'] - ] unless err - next err - parser.write Buffer.from([c]) for c in Buffer.from('a,b\r1,2', 'utf16le') - parser.end() - - it 'support utf16le no bom with unix line ending', (next) -> - parser = parse encoding: 'utf16le', (err, records) -> - records.should.eql [ - ['a', 'b'] - ['1', '2'] - ] unless err - next err - parser.write Buffer.from([c]) for c in Buffer.from('a,b\n1,2', 'utf16le') - parser.end() - - it 'support utf16le with bom with windows line ending', (next) -> - parser = parse bom: true, (err, records) -> - records.should.eql [ - ['a', 'b'] - ['1', '2'] - ] unless err - next err - parser.write Buffer.from([c]) for c in Buffer.concat([ - Buffer.from([255, 254]), - Buffer.from('a,b\r\n1,2', 'utf16le') - ]) - parser.end() - diff --git a/packages/csv-parse/test/option.record_delimiter.js b/packages/csv-parse/test/option.record_delimiter.js new file mode 100644 index 00000000..f385b7a8 --- /dev/null +++ b/packages/csv-parse/test/option.record_delimiter.js @@ -0,0 +1,523 @@ +import "should"; +import { parse } from "../lib/index.js"; + +describe("Option `record_delimiter`", function () { + describe("validation", function () { + it("accepted types", function () { + parse("a,b,c", { record_delimiter: undefined }, () => {}); + parse("a,b,c", { record_delimiter: "string" }, () => {}); + parse("a,b,c", { record_delimiter: ["string"] }, () => {}); + parse("a,b,c", { record_delimiter: Buffer.from("string") }, () => {}); + parse("a,b,c", { record_delimiter: [Buffer.from("string")] }, () => {}); + }); + + it("non accepted types", function () { + (() => { + parse("a,b,c", { record_delimiter: "" }, () => {}); + }).should.throw({ + message: [ + "Invalid option `record_delimiter`:", + "value must be a non empty string or buffer,", + 'got ""', + ].join(" "), + code: "CSV_INVALID_OPTION_RECORD_DELIMITER", + }); + (() => { + parse("a,b,c", { record_delimiter: Buffer.from("") }, () => {}); + }).should.throw({ + message: [ + "Invalid option `record_delimiter`:", + "value must be a non empty string or buffer,", + 'got {"type":"Buffer","data":[]}', + ].join(" "), + code: "CSV_INVALID_OPTION_RECORD_DELIMITER", + }); + (() => { + parse("a,b,c", { record_delimiter: null }, () => {}); + }).should.throw({ + message: [ + "Invalid option `record_delimiter`:", + "value must be a string, a buffer or array of string|buffer,", + "got null", + ].join(" "), + code: "CSV_INVALID_OPTION_RECORD_DELIMITER", + }); + (() => { + parse("a,b,c", { record_delimiter: ["a", "", "b"] }, () => {}); + }).should.throw({ + message: [ + "Invalid option `record_delimiter`:", + "value must be a non empty string or buffer", + "at index 1,", + 'got ""', + ].join(" "), + code: "CSV_INVALID_OPTION_RECORD_DELIMITER", + }); + (() => { + parse("a,b,c", { record_delimiter: ["a", null, "b"] }, () => {}); + }).should.throw({ + message: [ + "Invalid option `record_delimiter`:", + "value must be a string, a buffer or array of string|buffer", + "at index 1,", + "got null", + ].join(" "), + code: "CSV_INVALID_OPTION_RECORD_DELIMITER", + }); + }); + }); + + describe("usage", function () { + it("as a string", function (next) { + parse("ABC,45::DEF,23", { record_delimiter: "::" }, (err, records) => { + if (err) return next(err); + records.should.eql([ + ["ABC", "45"], + ["DEF", "23"], + ]); + next(); + }); + }); + + it("as an array", function (next) { + parse( + "ABC,45::DEF,23\n50,60", + { record_delimiter: ["::", "\n"] }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["ABC", "45"], + ["DEF", "23"], + ["50", "60"], + ]); + next(); + }, + ); + }); + }); + + describe("details", function () { + it("is compatible with buffer size", function (next) { + const parser = parse({ record_delimiter: ["::::::"] }, (err, records) => { + records.should.eql([ + ["1", "2", "3"], + ["b", "c", "d"], + ]); + next(err); + }); + for (const c of "1,2,3::::::b,c,d") { + parser.write(c); + } + parser.end(); + }); + + it("ensure that delimiter and record_delimiter doesnt match", function (next) { + parse( + "a;b\n11;22;\n33;33;\n", + { + delimiter: ";", + record_delimiter: [";\n", "\n"], + }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b"], + ["11", "22"], + ["33", "33"], + ]); + } + next(err); + }, + ); + }); + + it("handle new line preceded by a quote when record_delimiter is a string", function (next) { + parse( + '"ABC","45"::"DEF","23"::"GHI","94"', + { record_delimiter: "::" }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["ABC", "45"], + ["DEF", "23"], + ["GHI", "94"], + ]); + next(); + }, + ); + }); + + it("handle new line preceded by a quote when record_delimiter is an array", function (next) { + parse( + '"ABC","45"::"DEF","23"::"GHI","94"\r\n"JKL","13"', + { record_delimiter: ["::", "\r\n"] }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["ABC", "45"], + ["DEF", "23"], + ["GHI", "94"], + ["JKL", "13"], + ]); + next(); + }, + ); + }); + + it("handle chunks of multiple chars when record_delimiter is a string", function (next) { + const records = []; + const parser = parse({ record_delimiter: "::" }); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([ + ["ABC", "45"], + ["DEF", "23"], + ["GHI", "94"], + ["JKL", "02"], + ]); + next(); + }); + parser.write('"ABC","45"'); + parser.write('::"DEF","23":'); + parser.write(':"GHI","94"::'); + parser.write('"JKL","02"'); + parser.end(); + }); + + it("handle chunks of multiple chars when record_delimiter is an array", function (next) { + const records = []; + const parser = parse({ record_delimiter: ["::", "\r"] }); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([ + ["ABC", "45"], + ["DEF", "23"], + ["GHI", "94"], + ["JKL", "02"], + ["MNO", "13"], + ]); + next(); + }); + parser.write('"ABC","45"'); + parser.write('::"DEF","23":'); + parser.write(':"GHI","94"::'); + parser.write('"JKL","02"\r'); + parser.write('"MNO","13"'); + parser.end(); + }); + + it("handle chunks of multiple chars without quotes when record_delimiter is a string", function (next) { + const records = []; + const parser = parse({ record_delimiter: "::" }); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([ + ["ABC", "45"], + ["DEF", "23"], + ["GHI", "94"], + ["JKL", "02"], + ]); + next(); + }); + parser.write("ABC,45"); + parser.write("::DEF,23:"); + parser.write(":GHI,94::"); + parser.write("JKL,02"); + parser.end(); + }); + + it("handle chunks of multiple chars without quotes when record_delimiter is an array", function (next) { + const records = []; + const parser = parse({ record_delimiter: ["::", "\n", "\r\n"] }); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([ + ["ABC", "45"], + ["DEF", "23"], + ["GHI", "94"], + ["JKL", "02"], + ]); + next(); + }); + parser.write("ABC,45\n"); + parser.write("DEF,23:"); + parser.write(":GHI,94\r"); + parser.write("\nJKL,02"); + parser.end(); + }); + }); + + describe("auto", function () { + it("No record", function (next) { + parse("", (err, records) => { + if (!err) { + records.should.eql([]); + } + next(err); + }); + }); + + it("handle chunks in autodiscovery", function (next) { + const records = []; + const parser = parse(); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([ + ["ABC", "45"], + ["DEF", "23"], + ["GHI", "94"], + ["JKL", "02"], + ]); + next(); + }); + parser.write('"ABC","45"'); + parser.write('\n"DEF","23"\n'); + parser.write('"GHI","94"\n'); + parser.write('"JKL","02"'); + parser.end(); + }); + + it("write aggressively", function (next) { + const records = []; + const parser = parse(); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([ + ["abc", "123"], + ["def", "456"], + ]); + next(); + }); + parser.write("abc,123"); + parser.write("\n"); + parser.write("def,456"); + parser.end(); + }); + + it("Test line ends with field delimiter and without record delimiter", function (next) { + parse('"a","b","c",', { delimiter: "," }, (err, records) => { + if (err) return next(err); + records.should.eql([["a", "b", "c", ""]]); + next(); + }); + }); + + it("ensure autodiscovery support chunck between lines", function (next) { + const records = []; + const parser = parse(); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([ + ["ABC", "45"], + ["DEF", "23"], + ["GHI", "94"], + ["JKL", "02"], + ]); + next(); + }); + parser.write("ABC,45"); + parser.write("\r\nDEF,23\r"); + parser.write("\nGHI,94\r\n"); + parser.write("JKL,02\r\n"); + parser.end(); + }); + + it("skip default record delimiters when quoted", function (next) { + const parser = parse((err, records) => { + if (!err) { + records.should.eql([ + ["1", "2", "\n"], + ["3", "4", ""], + ]); + } + next(err); + }); + for (const c of '1,2,"\n"\r\n3,4,') { + parser.write(c); + } + parser.end(); + }); + + it("with skip empty lines", function (next) { + parse( + "ABC\r\n\r\nDEF\r\n\r\n", + { skip_empty_lines: true }, + (err, records) => { + if (!err) { + records.should.eql([["ABC"], ["DEF"]]); + } + next(err); + }, + ); + }); + + it("support utf8 no bom with windows line ending", function (next) { + const parser = parse({ encoding: "utf8" }, (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b"], + ["1", "2"], + ]); + } + next(err); + }); + for (const c of Buffer.from("a,b\r\n1,2", "utf8")) { + parser.write(Buffer.from([c])); + } + parser.end(); + }); + + it("support utf8 no bom with mac os 9 line ending", function (next) { + const parser = parse({ encoding: "utf8" }, (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b"], + ["1", "2"], + ]); + } + next(err); + }); + for (const c of Buffer.from("a,b\r1,2", "utf8")) { + parser.write(Buffer.from([c])); + } + parser.end(); + }); + + it("support utf8 no bom with unix line ending", function (next) { + const parser = parse({ encoding: "utf8" }, (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b"], + ["1", "2"], + ]); + } + next(err); + }); + for (const c of Buffer.from("a,b\n1,2", "utf8")) { + parser.write(Buffer.from([c])); + } + parser.end(); + }); + + it("support utf8 with bom with windows line ending", function (next) { + const parser = parse({ bom: true }, (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b"], + ["1", "2"], + ]); + } + next(err); + }); + for (const c of Buffer.concat([ + Buffer.from([239, 187, 191]), + Buffer.from("a,b\r\n1,2", "utf8"), + ])) { + parser.write(Buffer.from([c])); + } + parser.end(); + }); + + it("support utf16le no bom with windows line ending", function (next) { + const parser = parse({ encoding: "utf16le" }, (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b"], + ["1", "2"], + ]); + } + next(err); + }); + for (const c of Buffer.from("a,b\r\n1,2", "utf16le")) { + parser.write(Buffer.from([c])); + } + parser.end(); + }); + + it("support utf16le no bom with mac os 9 line ending", function (next) { + const parser = parse({ encoding: "utf16le" }, (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b"], + ["1", "2"], + ]); + } + next(err); + }); + for (const c of Buffer.from("a,b\r1,2", "utf16le")) { + parser.write(Buffer.from([c])); + } + parser.end(); + }); + + it("support utf16le no bom with unix line ending", function (next) { + const parser = parse({ encoding: "utf16le" }, (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b"], + ["1", "2"], + ]); + } + next(err); + }); + for (const c of Buffer.from("a,b\n1,2", "utf16le")) { + parser.write(Buffer.from([c])); + } + parser.end(); + }); + + it("support utf16le with bom with windows line ending", function (next) { + const parser = parse({ bom: true }, (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b"], + ["1", "2"], + ]); + } + next(err); + }); + for (const c of Buffer.concat([ + Buffer.from([255, 254]), + Buffer.from("a,b\r\n1,2", "utf16le"), + ])) { + parser.write(Buffer.from([c])); + } + parser.end(); + }); + }); +}); diff --git a/packages/csv-parse/test/option.relax_column_count.coffee b/packages/csv-parse/test/option.relax_column_count.coffee deleted file mode 100644 index 7b2fbfc1..00000000 --- a/packages/csv-parse/test/option.relax_column_count.coffee +++ /dev/null @@ -1,198 +0,0 @@ - -import { parse } from '../lib/index.js' -import { assert_error } from './api.assert_error.coffee' - -describe 'Option `relax_column_count`', -> - - it 'validation', -> - parse '', relax_column_count: true, (->) - parse '', relax_column_count: false, (->) - parse '', relax_column_count: null, (->) - parse '', relax_column_count: undefined, (->) - (-> - parse '', relax_column_count: 1, (->) - ).should.throw 'Invalid Option: relax_column_count must be a boolean, got 1' - (-> - parse '', relax_column_count: 'oh no', (->) - ).should.throw 'Invalid Option: relax_column_count must be a boolean, got "oh no"' - - it 'throw error by default', (next) -> - parse """ - 1,2,3 - 4,5 - """, (err) -> - assert_error err, - code: 'CSV_RECORD_INCONSISTENT_FIELDS_LENGTH' - message: 'Invalid Record Length: expect 3, got 2 on line 2' - record: ['4', '5'] - next() - - it 'emit single error when column count is invalid on multiple lines', (next) -> - parse """ - 1,2 - 1 - 3,4 - 5,6,7 - """ - , (err) -> - assert_error err, - code: 'CSV_RECORD_INCONSISTENT_FIELDS_LENGTH' - message: 'Invalid Record Length: expect 2, got 1 on line 2' - record: ['1'] - next() - - it 'dont throw error if true', (next) -> - parse """ - 1,2,3 - 4,5 - """, relax_column_count: true, (err, records) -> - records.should.eql [ - [ '1', '2', '3' ] - [ '4', '5' ] - ] unless err - next err - - it 'with columns bigger than records', (next) -> - parse """ - 1,2,3 - 4,5 - """, columns: ['a','b','c','d'], relax_column_count: true, (err, records) -> - records.should.eql [ - { "a":"1", "b":"2", "c":"3" } - { "a":"4", "b":"5" } - ] unless err - next err - - it 'with columns smaller than records', (next) -> - parse """ - 1,2,3,4 - 5,6,7 - """, columns: ['a','b','c'], relax_column_count: true, (err, records) -> - records.should.eql [ - { a: '1', b: '2', c: '3' } - { a: '5', b: '6', c: '7'} - ] unless err - next err - - it 'with columns and from, doesnt break count and relying options like from', (next) -> - parse """ - 1,2,3 - 4,5 - 6,7,8 - 9,10 - """, relax_column_count: true, columns: ['a','b','c','d'], from: 3, (err, records) -> - records.should.eql [ - { "a":"6", "b":"7", "c":"8" } - { "a":"9", "b":"10" } - ] unless err - next err - - describe 'relax_column_count_more', -> - - it 'when more', (next) -> - parse """ - 1,2,3 - a,b,c,d - """, relax_column_count_more: true, (err, records) -> - records.should.eql [ - ['1', '2', '3'] - ['a', 'b', 'c', 'd'] - ] unless err - next err - - it 'when less', (next) -> - parse """ - 1,2,3 - a,b - """, relax_column_count_more: true, (err) -> - assert_error err, - code: 'CSV_RECORD_INCONSISTENT_FIELDS_LENGTH' - message: 'Invalid Record Length: expect 3, got 2 on line 2' - record: ['a', 'b'] - next() - - describe 'relax_column_count_less', -> - - it 'when less', (next) -> - parse """ - 1,2,3 - a,b - """, relax_column_count_less: true, (err, records) -> - records.should.eql [ - ['1', '2', '3'] - ['a', 'b'] - ] unless err - next err - - it 'when more', (next) -> - parse """ - 1,2,3 - a,b,c,d - """, relax_column_count_less: true, (err) -> - assert_error err, - code: 'CSV_RECORD_INCONSISTENT_FIELDS_LENGTH' - message: 'Invalid Record Length: expect 3, got 4 on line 2' - record: ['a', 'b', 'c', 'd'] - next() - - describe 'with on_record', -> - - it 'and without columns', (next) -> - parse """ - 1,2 - in:va:lid - 3,4 - """, - relax_column_count: true, - raw: true, - on_record: ({raw, record}, {error}) -> - if error?.code is 'CSV_RECORD_INCONSISTENT_FIELDS_LENGTH' - raw.trim().split ':' - else - record - , (err, records) -> - records.should.eql [ - [ '1', '2' ] - [ 'in', 'va', 'lid' ] - [ '3', '4' ] - ] - next() - - it 'and with columns', (next) -> - parse """ - 1,2 - in:va:lid - 3,4 - """, - columns: ['a', 'b'], - relax_column_count: true, - raw: true, - on_record: ({raw, record}, {error}) -> - if error?.code is 'CSV_RECORD_INCONSISTENT_COLUMNS' - raw.trim().split ':' - else - record - , (err, records) -> - records.should.eql [ - { a: '1', b: '2' } - [ 'in', 'va', 'lid' ] - { a: '3', b: '4' } - ] - next() - - describe 'with skip_records_with_error', (next) -> - - it 'dont skip records', -> - parse """ - column_a - a,b - """, - skip_records_with_error: true - relax_column_count: true - , (err, records) -> - records.should.eql [ - [ 'column_a' ] - [ 'a', 'b' ] - ] - - diff --git a/packages/csv-parse/test/option.relax_column_count.js b/packages/csv-parse/test/option.relax_column_count.js new file mode 100644 index 00000000..6119ac2c --- /dev/null +++ b/packages/csv-parse/test/option.relax_column_count.js @@ -0,0 +1,294 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `relax_column_count`", function () { + it("validation", function () { + parse("", { relax_column_count: true }, () => {}); + parse("", { relax_column_count: false }, () => {}); + parse("", { relax_column_count: null }, () => {}); + parse("", { relax_column_count: undefined }, () => {}); + (() => { + parse("", { relax_column_count: 1 }, () => {}); + }).should.throw( + "Invalid Option: relax_column_count must be a boolean, got 1", + ); + (() => { + parse("", { relax_column_count: "oh no" }, () => {}); + }).should.throw( + 'Invalid Option: relax_column_count must be a boolean, got "oh no"', + ); + }); + + it("throw error by default", function (next) { + parse( + dedent` + 1,2,3 + 4,5 + `, + (err) => { + assert_error(err, { + code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", + message: "Invalid Record Length: expect 3, got 2 on line 2", + record: ["4", "5"], + }); + next(); + }, + ); + }); + + it("emit single error when column count is invalid on multiple lines", function (next) { + parse( + dedent` + 1,2 + 1 + 3,4 + 5,6,7 + `, + (err) => { + assert_error(err, { + code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", + message: "Invalid Record Length: expect 2, got 1 on line 2", + record: ["1"], + }); + next(); + }, + ); + }); + + it("dont throw error if true", function (next) { + parse( + dedent` + 1,2,3 + 4,5 + `, + { relax_column_count: true }, + (err, records) => { + if (!err) { + records.should.eql([ + ["1", "2", "3"], + ["4", "5"], + ]); + } + next(err); + }, + ); + }); + + it("with columns bigger than records", function (next) { + parse( + dedent` + 1,2,3 + 4,5 + `, + { columns: ["a", "b", "c", "d"], relax_column_count: true }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "1", b: "2", c: "3" }, + { a: "4", b: "5" }, + ]); + } + next(err); + }, + ); + }); + + it("with columns smaller than records", function (next) { + parse( + dedent` + 1,2,3,4 + 5,6,7 + `, + { columns: ["a", "b", "c"], relax_column_count: true }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "1", b: "2", c: "3" }, + { a: "5", b: "6", c: "7" }, + ]); + } + next(err); + }, + ); + }); + + it("with columns and from, doesnt break count and relying options like from", function (next) { + parse( + dedent` + 1,2,3 + 4,5 + 6,7,8 + 9,10 + `, + { relax_column_count: true, columns: ["a", "b", "c", "d"], from: 3 }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "6", b: "7", c: "8" }, + { a: "9", b: "10" }, + ]); + } + next(err); + }, + ); + }); + + describe("relax_column_count_more", function () { + it("when more", function (next) { + parse( + dedent` + 1,2,3 + a,b,c,d + `, + { relax_column_count_more: true }, + (err, records) => { + if (!err) { + records.should.eql([ + ["1", "2", "3"], + ["a", "b", "c", "d"], + ]); + } + next(err); + }, + ); + }); + + it("when less", function (next) { + parse( + dedent` + 1,2,3 + a,b + `, + { relax_column_count_more: true }, + (err) => { + assert_error(err, { + code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", + message: "Invalid Record Length: expect 3, got 2 on line 2", + record: ["a", "b"], + }); + next(); + }, + ); + }); + }); + + describe("relax_column_count_less", function () { + it("when less", function (next) { + parse( + dedent` + 1,2,3 + a,b + `, + { relax_column_count_less: true }, + (err, records) => { + if (!err) { + records.should.eql([ + ["1", "2", "3"], + ["a", "b"], + ]); + } + next(err); + }, + ); + }); + + it("when more", function (next) { + parse( + dedent` + 1,2,3 + a,b,c,d + `, + { relax_column_count_less: true }, + (err) => { + assert_error(err, { + code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", + message: "Invalid Record Length: expect 3, got 4 on line 2", + record: ["a", "b", "c", "d"], + }); + next(); + }, + ); + }); + }); + + describe("with on_record", function () { + it("and without columns", function (next) { + parse( + dedent` + 1,2 + in:va:lid + 3,4 + `, + { + relax_column_count: true, + raw: true, + on_record: ({ raw, record }, { error }) => { + if (error?.code === "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH") { + return raw.trim().split(":"); + } else { + return record; + } + }, + }, + (err, records) => { + records.should.eql([ + ["1", "2"], + ["in", "va", "lid"], + ["3", "4"], + ]); + next(); + }, + ); + }); + + it("and with columns", function (next) { + parse( + dedent` + 1,2 + in:va:lid + 3,4 + `, + { + columns: ["a", "b"], + relax_column_count: true, + raw: true, + on_record: ({ raw, record }, { error }) => { + if (error?.code === "CSV_RECORD_INCONSISTENT_COLUMNS") { + return raw.trim().split(":"); + } else { + return record; + } + }, + }, + (err, records) => { + records.should.eql([ + { a: "1", b: "2" }, + ["in", "va", "lid"], + { a: "3", b: "4" }, + ]); + next(); + }, + ); + }); + }); + + describe("with skip_records_with_error", function () { + it("dont skip records", function () { + parse( + dedent` + column_a + a,b + `, + { + skip_records_with_error: true, + relax_column_count: true, + }, + (err, records) => { + records.should.eql([["column_a"], ["a", "b"]]); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/option.relax_quotes.coffee b/packages/csv-parse/test/option.relax_quotes.coffee deleted file mode 100644 index 98c2046d..00000000 --- a/packages/csv-parse/test/option.relax_quotes.coffee +++ /dev/null @@ -1,110 +0,0 @@ - -import { parse } from '../lib/index.js' -import { assert_error } from './api.assert_error.coffee' - -describe 'Option `relax_quotes`', -> - - it 'validation', -> - parse '', relax_quotes: true, (->) - parse '', relax_quotes: false, (->) - parse '', relax_quotes: null, (->) - parse '', relax_quotes: undefined, (->) - (-> - parse '', relax_quotes: 1, (->) - ).should.throw 'Invalid Option: relax_quotes must be a boolean, got 1' - (-> - parse '', relax_quotes: 'oh no', (->) - ).should.throw 'Invalid Option: relax_quotes must be a boolean, got "oh no"' - - it 'true with invalid quotes in the middle', (next) -> - # try with relax_quotes true - parse """ - 384682,the "SAMAY" Hostel,Jiron Florida 285 - """, relax_quotes: true, (err, records) -> - return next err if err - records.should.eql [ - [ '384682', 'the "SAMAY" Hostel', 'Jiron Florida 285' ] - ] - next() - - it 'false with invalid quotes in the middle', (next) -> - # try with relax_quotes false - parse """ - 384682,the "SAMAY" Hostel,Jiron Florida 285 - """, relax_quotes: false, (err) -> - assert_error err, - message: 'Invalid Opening Quote: a quote is found on field 1 at line 1, value is "the "' - code: 'INVALID_OPENING_QUOTE' - field: 'the ' - next() - - it 'true with invalid quotes on the left', (next) -> - parse """ - a,"b" c,d - a,""b" c,d - """, relax_quotes: true, (err, records) -> - return next err if err - records.should.eql [ - [ 'a', '"b" c', 'd' ] - [ 'a', '""b" c', 'd' ] - ] - next() - - it 'false with invalid quotes on the left', (next) -> - # transform is throwing instead of emiting error, skipping for now - i = 0 - parse """ - a,"b" c,d - """, relax_quotes: false, (err) -> - assert_error err, - message: 'Invalid Closing Quote: got " " at line 1 instead of delimiter, record delimiter, trimable character (if activated) or comment' - code: 'CSV_INVALID_CLOSING_QUOTE' - next() - - it 'true with two invalid quotes on the left', (next) -> - # try with relax_quotes true - parse """ - a,""b"" c,d - """, relax_quotes: true, (err, records) -> - return next err if err - records.should.eql [ - [ 'a', '""b"" c', 'd' ] - ] unless err - next err - - it 'false with two invalid quotes on the left', (next) -> - # try with relax_quotes false - parse """ - a,""b"" c,d - """, relax_quotes: false, (err) -> - # Change of implementation in version 4, was - # records.should.eql [ - # [ 'a', '"b" c', 'd' ] - # ] unless err - assert_error err, - message: 'Invalid Closing Quote: got "b" at line 1 instead of delimiter, record delimiter, trimable character (if activated) or comment' - code: 'CSV_INVALID_CLOSING_QUOTE' - next() - - it 'true with invalid quotes on the right', (next) -> - # TODO: we need to decide the strategy we want here - parse """ - a,b "c",d - Bob"","23",e - """, relax_quotes: true, (err, records) -> - return next err if err - records.should.eql [ - [ 'a', 'b "c"', 'd' ] - [ 'Bob""', '23','e' ] - ] - next() - - it 'false with invalid quotes on the right', (next) -> - parse """ - a,b "c" - """, relax_quotes: false, (err) -> - assert_error err, - message: 'Invalid Opening Quote: a quote is found on field 1 at line 1, value is "b "' - code: 'INVALID_OPENING_QUOTE' - field: 'b ' - next() diff --git a/packages/csv-parse/test/option.relax_quotes.js b/packages/csv-parse/test/option.relax_quotes.js new file mode 100644 index 00000000..d3b5bceb --- /dev/null +++ b/packages/csv-parse/test/option.relax_quotes.js @@ -0,0 +1,124 @@ +import "should"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `relax_quotes`", function () { + it("validation", function () { + parse("", { relax_quotes: true }, () => {}); + parse("", { relax_quotes: false }, () => {}); + parse("", { relax_quotes: null }, () => {}); + parse("", { relax_quotes: undefined }, () => {}); + (() => { + parse("", { relax_quotes: 1 }, () => {}); + }).should.throw("Invalid Option: relax_quotes must be a boolean, got 1"); + (() => { + parse("", { relax_quotes: "oh no" }, () => {}); + }).should.throw( + 'Invalid Option: relax_quotes must be a boolean, got "oh no"', + ); + }); + + it("true with invalid quotes in the middle", function (next) { + parse( + `384682,the "SAMAY" Hostel,Jiron Florida 285`, + { relax_quotes: true }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["384682", 'the "SAMAY" Hostel', "Jiron Florida 285"], + ]); + next(); + }, + ); + }); + + it("false with invalid quotes in the middle", function (next) { + parse( + `384682,the "SAMAY" Hostel,Jiron Florida 285`, + { relax_quotes: false }, + (err) => { + assert_error(err, { + message: + 'Invalid Opening Quote: a quote is found on field 1 at line 1, value is "the "', + code: "INVALID_OPENING_QUOTE", + field: "the ", + }); + next(); + }, + ); + }); + + it("true with invalid quotes on the left", function (next) { + parse( + `a,"b" c,d +a,""b" c,d`, + { relax_quotes: true }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["a", '"b" c', "d"], + ["a", '""b" c', "d"], + ]); + next(); + }, + ); + }); + + it("false with invalid quotes on the left", function (next) { + parse(`a,"b" c,d`, { relax_quotes: false }, (err) => { + assert_error(err, { + message: + 'Invalid Closing Quote: got " " at line 1 instead of delimiter, record delimiter, trimable character (if activated) or comment', + code: "CSV_INVALID_CLOSING_QUOTE", + }); + next(); + }); + }); + + it("true with two invalid quotes on the left", function (next) { + parse(`a,""b"" c,d`, { relax_quotes: true }, (err, records) => { + if (err) return next(err); + records.should.eql([["a", '""b"" c', "d"]]); + next(err); + }); + }); + + it("false with two invalid quotes on the left", function (next) { + parse(`a,""b"" c,d`, { relax_quotes: false }, (err) => { + assert_error(err, { + message: + 'Invalid Closing Quote: got "b" at line 1 instead of delimiter, record delimiter, trimable character (if activated) or comment', + code: "CSV_INVALID_CLOSING_QUOTE", + }); + next(); + }); + }); + + it("true with invalid quotes on the right", function (next) { + parse( + `a,b "c",d +Bob"","23",e`, + { relax_quotes: true }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["a", 'b "c"', "d"], + ['Bob""', "23", "e"], + ]); + next(); + }, + ); + }); + + it("false with invalid quotes on the right", function (next) { + parse(`a,b "c"`, { relax_quotes: false }, (err) => { + assert_error(err, { + message: + 'Invalid Opening Quote: a quote is found on field 1 at line 1, value is "b "', + code: "INVALID_OPENING_QUOTE", + field: "b ", + }); + next(); + }); + }); +}); diff --git a/packages/csv-parse/test/option.rtrim.coffee b/packages/csv-parse/test/option.rtrim.coffee deleted file mode 100644 index 3e0d091e..00000000 --- a/packages/csv-parse/test/option.rtrim.coffee +++ /dev/null @@ -1,73 +0,0 @@ - -import { parse } from '../lib/index.js' -import { assert_error } from './api.assert_error.coffee' - -describe 'Option `rtrim`', -> - - it 'plain text', (next) -> - parse """ - a b ,c d - e f ,g h - """, quote: "'", escape: "'", trim: true, (err, records) -> - records.should.eql [['a b', 'c d'],['e f', 'g h']] unless err - next err - - it 'after quote', (next) -> - data = ''' - 'a' ,'b' - 'c' ,'d' - ''' - parser = parse quote: "'", escape: "'", trim: true, (err, records) -> - records.should.eql [["a", "b"],["c", "d"]] unless err - next err - parser.write chr for chr in data - parser.end() - - it 'quote followed by escape', (next) -> - # 1st line: with field delimiter - # 2nd line: with record delimiter - # 3rd line: with end of file - parse """ - 'a''' ,'b''' - 'c''','d''' - 'e''','f''' - """, quote: "'", escape: "'", trim: true, (err, records) -> - records.should.eql [["a'", "b'"],["c'", "d'"],["e'", "f'"]] unless err - next err - - it 'with whitespaces around quotes', (next) -> - data = ''' - "a b " ,"c d " - "e f " ,"g h " - ''' - parser = parse rtrim: true, (err, records) -> - records.should.eql [['a b ', 'c d '],['e f ', 'g h ']] unless err - next err - parser.write chr for chr in data - parser.end() - - it 'with tags around quotes', (next) -> - data = ''' - "a\tb\t"\t\t\t,"c\td\t\t\t"\t - "e\tf\t"\t,"g\th\t\t\t"\t\t\t - ''' - parser = parse rtrim: true, (err, records) -> - records.should.eql [['a\tb\t', 'c\td\t\t\t'],['e\tf\t', 'g\th\t\t\t']] unless err - next err - parser.write chr for chr in data - parser.end() - - it 'with char after whitespaces', (next) -> - data = [ - '"a b " x ,"c d " x' - '"e f " x,"g h " x ' - ].join '\n' - parser = parse rtrim: true, (err) -> - assert_error err, - message: 'Invalid Closing Quote: found non trimable byte after quote at line 1' - code: 'CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE' - column: 0, empty_lines: 0, header: false, index: 0, invalid_field_length: 0, - quoting: true, lines: 1, records: 0 - next() - parser.write chr for chr in data - parser.end() diff --git a/packages/csv-parse/test/option.rtrim.js b/packages/csv-parse/test/option.rtrim.js new file mode 100644 index 00000000..46591661 --- /dev/null +++ b/packages/csv-parse/test/option.rtrim.js @@ -0,0 +1,135 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `rtrim`", function () { + it("validation", function () { + parse("", { rtrim: true }, () => {}); + parse("", { rtrim: false }, () => {}); + parse("", { rtrim: null }, () => {}); + parse("", { rtrim: undefined }, () => {}); + (() => { + parse("", { rtrim: 1 }, () => {}); + }).should.throw("Invalid Option: rtrim must be a boolean, got 1"); + (() => { + parse("", { rtrim: "true" }, () => {}); + }).should.throw('Invalid Option: rtrim must be a boolean, got "true"'); + }); + + it("plain text", function (next) { + parse( + dedent` + a b ,c d + e f ,g h + `, + { quote: "'", escape: "'", trim: true }, + (err, records) => { + if (!err) + records.should.eql([ + ["a b", "c d"], + ["e f", "g h"], + ]); + next(err); + }, + ); + }); + + it("after quote", function (next) { + const data = "'a' ,'b'\n'c' ,'d'"; + const parser = parse( + { quote: "'", escape: "'", trim: true }, + (err, records) => { + if (!err) + records.should.eql([ + ["a", "b"], + ["c", "d"], + ]); + next(err); + }, + ); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); + + it("quote followed by escape", function (next) { + parse( + dedent` + 'a''' ,'b''' + 'c''','d''' + 'e''','f''' + `, + { quote: "'", escape: "'", trim: true }, + (err, records) => { + if (!err) + records.should.eql([ + ["a'", "b'"], + ["c'", "d'"], + ["e'", "f'"], + ]); + next(err); + }, + ); + }); + + it("with whitespaces around quotes", function (next) { + const data = '"a b " ,"c d "\n"e f " ,"g h "'; + const parser = parse({ rtrim: true }, (err, records) => { + if (!err) + records.should.eql([ + ["a b ", "c d "], + ["e f ", "g h "], + ]); + next(err); + }); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); + + it("with tags around quotes", function (next) { + const data = [ + `"a\tb\t"\t\t\t,"c\td\t\t\t"\t`, + `"e\tf\t"\t,"g\th\t\t\t"\t\t\t`, + ].join("\n"); + const parser = parse({ rtrim: true }, (err, records) => { + if (!err) + records.should.eql([ + ["a\tb\t", "c\td\t\t\t"], + ["e\tf\t", "g\th\t\t\t"], + ]); + next(err); + }); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); + + it("with char after whitespaces", function (next) { + const data = ['"a b " x ,"c d " x', '"e f " x,"g h " x '].join("\n"); + const parser = parse({ rtrim: true }, (err) => { + assert_error(err, { + message: + "Invalid Closing Quote: found non trimable byte after quote at line 1", + code: "CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE", + column: 0, + empty_lines: 0, + header: false, + index: 0, + invalid_field_length: 0, + quoting: true, + lines: 1, + records: 0, + }); + next(); + }); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); +}); diff --git a/packages/csv-parse/test/option.skip_empty_lines.coffee b/packages/csv-parse/test/option.skip_empty_lines.coffee deleted file mode 100644 index 38185810..00000000 --- a/packages/csv-parse/test/option.skip_empty_lines.coffee +++ /dev/null @@ -1,92 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'Option `skip_empty_lines`', -> - - it 'validation', -> - parse '', skip_empty_lines: true, (->) - parse '', skip_empty_lines: false, (->) - parse '', skip_empty_lines: null, (->) - parse '', skip_empty_lines: undefined, (->) - (-> - parse '', skip_empty_lines: 1, (->) - ).should.throw 'Invalid Option: skip_empty_lines must be a boolean, got 1' - (-> - parse '', skip_empty_lines: 'oh no', (->) - ).should.throw 'Invalid Option: skip_empty_lines must be a boolean, got "oh no"' - - describe 'false', -> - - it 'dont skip by default', (next) -> - parse ''' - ABC\n\nDEF - ''', (err, records) -> - records.should.eql [ - [ 'ABC' ] - [ '' ] - [ 'DEF' ] - ] unless err - next err - - describe 'usage', -> - - it 'skip', (next) -> - parse ''' - ABC\n\nDEF - ''', skip_empty_lines: true, (err, records) -> - records.should.eql [ - [ 'ABC' ] - [ 'DEF' ] - ] unless err - next err - - it 'quoted fields are not interpreted as empty', (next) -> - parse ''' - ABC\n""\nDEF - ''', skip_empty_lines: true, (err, records) -> - records.should.eql [ - [ 'ABC' ] - [ '' ] - [ 'DEF' ] - ] unless err - next err - - it 'skip respect parser.read', (next) -> - records = [] - parser = parse skip_empty_lines: true - parser.write ''' - - 20322051544,1979,8.8017226E7,ABC,45,2000-01-01 - - 28392898392,1974,8.8392926E7,DEF,23,2050-11-27 - - ''' - parser.on 'readable', -> - while(d = parser.read()) - records.push d - parser.on 'error', (err) -> - next err - parser.on 'end', -> - records.should.eql [ - ['20322051544', '1979', '8.8017226E7', 'ABC', '45', '2000-01-01'] - ['28392898392', '1974', '8.8392926E7', 'DEF', '23', '2050-11-27'] - ] - next() - parser.end() - - describe 'with other options', -> - - it 'used conjointly with trim to ignore whitespaces', (next) -> - parse ''' - a,b,c - \t - d,e,f - ''', - skip_empty_lines: true - trim: true - , (err, records) -> - records.should.eql [ - ['a', 'b', 'c'], - ['d', 'e', 'f'] - ] unless err - next err diff --git a/packages/csv-parse/test/option.skip_empty_lines.js b/packages/csv-parse/test/option.skip_empty_lines.js new file mode 100644 index 00000000..13bcb98a --- /dev/null +++ b/packages/csv-parse/test/option.skip_empty_lines.js @@ -0,0 +1,98 @@ +import "should"; +import { parse } from "../lib/index.js"; + +describe("Option `skip_empty_lines`", function () { + it("validation", function () { + parse("", { skip_empty_lines: true }, () => {}); + parse("", { skip_empty_lines: false }, () => {}); + parse("", { skip_empty_lines: null }, () => {}); + parse("", { skip_empty_lines: undefined }, () => {}); + (() => { + parse("", { skip_empty_lines: 1 }, () => {}); + }).should.throw( + "Invalid Option: skip_empty_lines must be a boolean, got 1", + ); + (() => { + parse("", { skip_empty_lines: "oh no" }, () => {}); + }).should.throw( + 'Invalid Option: skip_empty_lines must be a boolean, got "oh no"', + ); + }); + + describe("false", function () { + it("dont skip by default", function (next) { + parse("ABC\n\nDEF", (err, records) => { + if (!err) { + records.should.eql([["ABC"], [""], ["DEF"]]); + } + next(err); + }); + }); + }); + + describe("usage", function () { + it("skip", function (next) { + parse("ABC\n\nDEF", { skip_empty_lines: true }, (err, records) => { + if (!err) { + records.should.eql([["ABC"], ["DEF"]]); + } + next(err); + }); + }); + + it("quoted fields are not interpreted as empty", function (next) { + parse('ABC\n""\nDEF', { skip_empty_lines: true }, (err, records) => { + if (!err) { + records.should.eql([["ABC"], [""], ["DEF"]]); + } + next(err); + }); + }); + + it("skip respect parser.read", function (next) { + const records = []; + const parser = parse({ skip_empty_lines: true }); + parser.write( + "\n20322051544,1979,8.8017226E7,ABC,45,2000-01-01\n\n28392898392,1974,8.8392926E7,DEF,23,2050-11-27\n", + ); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("error", (err) => { + next(err); + }); + parser.on("end", () => { + records.should.eql([ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ]); + next(); + }); + parser.end(); + }); + }); + + describe("with other options", function () { + it("used conjointly with trim to ignore whitespaces", function (next) { + parse( + "a,b,c\n\t\nd,e,f", + { + skip_empty_lines: true, + trim: true, + }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + } + next(err); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/option.skip_records_with_empty_values.coffee b/packages/csv-parse/test/option.skip_records_with_empty_values.coffee deleted file mode 100644 index 763b90b8..00000000 --- a/packages/csv-parse/test/option.skip_records_with_empty_values.coffee +++ /dev/null @@ -1,83 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'Option `skip_records_with_empty_values`', -> - - it 'validation', -> - parse '', skip_records_with_empty_values: true, (->) - parse '', skip_records_with_empty_values: false, (->) - parse '', skip_records_with_empty_values: null, (->) - parse '', skip_records_with_empty_values: undefined, (->) - (-> - parse '', skip_records_with_empty_values: 1, (->) - ).should.throw 'Invalid Option: skip_records_with_empty_values must be a boolean, got 1' - (-> - parse '', skip_records_with_empty_values: 'oh no', (->) - ).should.throw 'Invalid Option: skip_records_with_empty_values must be a boolean, got "oh no"' - - it 'dont skip by default', (next) -> - parse """ - ABC,DEF - , - IJK,LMN - """, (err, records) -> - return next err if err - records.should.eql [ - [ 'ABC', 'DEF' ] - [ '', '' ] - [ 'IJK', 'LMN' ] - ] - next() - - it 'skip', (next) -> - parse """ - ABC,DEF - , - IJK,LMN - , - """, skip_records_with_empty_values: true, (err, records) -> - return next err if err - records.should.eql [ - [ 'ABC', 'DEF' ] - [ 'IJK', 'LMN' ] - ] - next() - - it 'skip space and tabs', (next) -> - parse """ - ABC,DEF - \t , \t - IJK,LMN - \t , \t - """, skip_records_with_empty_values: true, (err, records) -> - return next err if err - records.should.eql [ - [ 'ABC', 'DEF' ] - [ 'IJK', 'LMN' ] - ] - next() - - it 'handle value which are casted to another type than string', (next) -> - parse """ - empty_buffer - boolean - integer - null - undefined - """, - skip_records_with_empty_values: true - cast: (value) -> - switch value - when 'empty_buffer' then Buffer.from '' - when 'boolean' then true - when 'integer' then 0 - when 'null' then null - when 'undefined' then undefined - else value - , (err, records) -> - return next err if err - records.should.eql [ - [ true ] - [ 0 ] - ] - next() diff --git a/packages/csv-parse/test/option.skip_records_with_empty_values.js b/packages/csv-parse/test/option.skip_records_with_empty_values.js new file mode 100644 index 00000000..d312ba5a --- /dev/null +++ b/packages/csv-parse/test/option.skip_records_with_empty_values.js @@ -0,0 +1,105 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `skip_records_with_empty_values`", function () { + it("validation", function () { + parse("", { skip_records_with_empty_values: true }, () => {}); + parse("", { skip_records_with_empty_values: false }, () => {}); + parse("", { skip_records_with_empty_values: null }, () => {}); + parse("", { skip_records_with_empty_values: undefined }, () => {}); + (() => { + parse("", { skip_records_with_empty_values: 1 }, () => {}); + }).should.throw( + "Invalid Option: skip_records_with_empty_values must be a boolean, got 1", + ); + (() => { + parse("", { skip_records_with_empty_values: "oh no" }, () => {}); + }).should.throw( + 'Invalid Option: skip_records_with_empty_values must be a boolean, got "oh no"', + ); + }); + + it("dont skip by default", function (next) { + parse("ABC,DEF\n,\nIJK,LMN", (err, records) => { + if (err) return next(err); + records.should.eql([ + ["ABC", "DEF"], + ["", ""], + ["IJK", "LMN"], + ]); + next(); + }); + }); + + it("skip", function (next) { + parse( + dedent` + ABC,DEF + , + IJK,LMN + , + `, + { skip_records_with_empty_values: true }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["ABC", "DEF"], + ["IJK", "LMN"], + ]); + next(); + }, + ); + }); + + it("skip space and tabs", function (next) { + parse( + "ABC,DEF\n\t , \t\nIJK,LMN\n\t , \t\n", + { skip_records_with_empty_values: true }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["ABC", "DEF"], + ["IJK", "LMN"], + ]); + next(); + }, + ); + }); + + it("handle value which are casted to another type than string", function (next) { + parse( + dedent` + empty_buffer + boolean + integer + null + undefined + `, + { + skip_records_with_empty_values: true, + cast: (value) => { + switch (value) { + case "empty_buffer": + return Buffer.from(""); + case "boolean": + return true; + case "integer": + return 0; + case "null": + return null; + case "undefined": + return undefined; + default: + return value; + } + }, + }, + (err, records) => { + if (err) return next(err); + records.should.eql([[true], [0]]); + next(); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.skip_records_with_error.coffee b/packages/csv-parse/test/option.skip_records_with_error.coffee deleted file mode 100644 index 0599f79d..00000000 --- a/packages/csv-parse/test/option.skip_records_with_error.coffee +++ /dev/null @@ -1,175 +0,0 @@ - -import { parse } from '../lib/index.js' -import { assert_error } from './api.assert_error.coffee' - -describe 'Option `skip_records_with_error`', -> - - it 'validation', -> - parse '', skip_records_with_error: true, (->) - parse '', skip_records_with_error: false, (->) - parse '', skip_records_with_error: null, (->) - parse '', skip_records_with_error: undefined, (->) - (-> - parse '', skip_records_with_error: 1, (->) - ).should.throw 'Invalid Option: skip_records_with_error must be a boolean, got 1' - (-> - parse '', skip_records_with_error: 'oh no', (->) - ).should.throw 'Invalid Option: skip_records_with_error must be a boolean, got "oh no"' - - it 'handle "Invalid closing quote"', (next) -> - errors = 0 - parser = parse skip_records_with_error: true, (err, records) -> - records.should.eql [ - ["a","b","c"] - ["one","two","three"] - ["seven","eight","nine"] - ] unless err - errors.should.eql 1 - next err - parser.on 'skip', (err) -> - assert_error err, - message: 'Invalid Closing Quote: got " " at line 3 instead of delimiter, record delimiter, trimable character (if activated) or comment' - code: 'CSV_INVALID_CLOSING_QUOTE' - errors++ - parser.write ''' - "a","b","c" - "one","two","three" - "four"," " ","six" - "seven","eight","nine" - ''' - parser.end() - - it 'handle "Invalid opening quote"', (next) -> - errors = [] - parser = parse skip_records_with_error: true, (err, records) -> - records.should.eql [ - ["line","1"] - ["line", "3"] - ] unless err - assert_error errors, [ - message: 'Invalid Opening Quote: a quote is found on field 1 at line 2, value is "invalid h"' - code: 'INVALID_OPENING_QUOTE' - field: 'invalid h' - , - message: 'Invalid Opening Quote: a quote is found on field 1 at line 2, value is "invalid h\\"ere"' - code: 'INVALID_OPENING_QUOTE' - field: 'invalid h"ere' - ] - errors.length.should.eql 2 - next err - parser.on 'skip', (err, context) -> - errors.push err - parser.write ''' - "line",1 - "line",invalid h"ere" - line,3 - ''' - parser.end() - - it 'handle "Quoted field not terminated"', (next) -> - errors = 0 - parser = parse skip_records_with_error: true, (err, records) -> - records.should.eql [ - ['a', 'b', 'c', 'd'] - ] unless err - errors.should.eql 1 - next err - parser.on 'skip', (err) -> - assert_error err, - message: 'Quote Not Closed: the parsing is finished with an opening quote at line 2' - code: 'CSV_QUOTE_NOT_CLOSED' - errors++ - parser.write ''' - "a",b,"c",d - "",1974,8.8392926E7,""," - ''' - parser.end() - - it 'handle "CSV_RECORD_INCONSISTENT_COLUMNS"', (next) -> - errors = 0 - parser = parse skip_records_with_error: true, columns: ["a", "b", "c", "d"], (err, records) -> - records.should.eql [ - { a: '4', b: '5', c: '6', d: 'x'} - { a: '7', b: '8', c: '9', d: 'y'} - ] unless err - errors.should.eql 1 - next err - parser.on 'skip', (err) -> - assert_error err, - message: 'Invalid Record Length: columns length is 4, got 3 on line 1' - code: 'CSV_RECORD_INCONSISTENT_COLUMNS' - record: ['1', '2', '3'] - errors++ - parser.write ''' - 1,2,3 - 4,5,6,x - 7,8,9,y - ''' - parser.end() - - it 'handle "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH"', (next) -> - errors = 0 - parser = parse skip_records_with_error: true, (err, records) -> - records.should.eql [ - ['a', 'b', 'c', 'd'] - ['e', 'f', 'g', 'h'] - ] unless err - errors.should.eql 1 - next err - parser.on 'skip', (err) -> - assert_error err, - message: 'Invalid Record Length: expect 4, got 3 on line 2' - code: 'CSV_RECORD_INCONSISTENT_FIELDS_LENGTH' - record: ['1', '2', '3'] - errors++ - parser.write ''' - a,b,c,d - 1,2,3 - e,f,g,h - ''' - parser.end() - - describe 'with `bom` option', -> - - it 'handle "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH" with bom (fix #411)', (next) -> - errors = 0 - parser = parse bom: true, skip_records_with_error: true, (err, records) -> - records.should.eql [ - ['a', 'b', 'c', 'd'] - ['e', 'f', 'g', 'h'] - ] unless err - errors.should.eql 1 - next err - parser.on 'skip', (err) -> - assert_error err, - message: 'Invalid Record Length: expect 4, got 3 on line 2' - code: 'CSV_RECORD_INCONSISTENT_FIELDS_LENGTH' - record: ['1', '2', '3'] - errors++ - parser.write ''' - \ufeffa,b,c,d - 1,2,3 - e,f,g,h - ''' - parser.end() - - describe 'with `raw` option', -> - - it 'print raw record', (next) -> - errors = 0 - parser = parse ''' - "a","b","c" - "one","two","three" - "four"," " ","six" - "seven","eight","nine" - ''' - , - skip_records_with_error: true - raw: true - , (err) -> - errors.should.eql 1 - next err - parser.on 'skip', (err, raw) -> - err.raw.should.eql '"four"," "' - raw.should.eql '"four"," "' - errors++ diff --git a/packages/csv-parse/test/option.skip_records_with_error.js b/packages/csv-parse/test/option.skip_records_with_error.js new file mode 100644 index 00000000..07a52ed0 --- /dev/null +++ b/packages/csv-parse/test/option.skip_records_with_error.js @@ -0,0 +1,231 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `skip_records_with_error`", function () { + it("validation", function () { + parse("", { skip_records_with_error: true }, () => {}); + parse("", { skip_records_with_error: false }, () => {}); + parse("", { skip_records_with_error: null }, () => {}); + parse("", { skip_records_with_error: undefined }, () => {}); + (() => { + parse("", { skip_records_with_error: 1 }, () => {}); + }).should.throw( + "Invalid Option: skip_records_with_error must be a boolean, got 1", + ); + (() => { + parse("", { skip_records_with_error: "oh no" }, () => {}); + }).should.throw( + 'Invalid Option: skip_records_with_error must be a boolean, got "oh no"', + ); + }); + + it('handle "Invalid closing quote"', function (next) { + let errors = 0; + const parser = parse({ skip_records_with_error: true }, (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["one", "two", "three"], + ["seven", "eight", "nine"], + ]); + } + errors.should.eql(1); + next(err); + }); + parser.on("skip", (err) => { + assert_error(err, { + message: + 'Invalid Closing Quote: got " " at line 3 instead of delimiter, record delimiter, trimable character (if activated) or comment', + code: "CSV_INVALID_CLOSING_QUOTE", + }); + errors++; + }); + parser.write( + dedent` + "a","b","c" + "one","two","three" + "four"," " ","six" + "seven","eight","nine" + `, + ); + parser.end(); + }); + + it('handle "Invalid opening quote"', function (next) { + const errors = []; + const parser = parse({ skip_records_with_error: true }, (err, records) => { + if (!err) { + records.should.eql([ + ["line", "1"], + ["line", "3"], + ]); + } + assert_error(errors, [ + { + message: + 'Invalid Opening Quote: a quote is found on field 1 at line 2, value is "invalid h"', + code: "INVALID_OPENING_QUOTE", + field: "invalid h", + }, + { + message: + 'Invalid Opening Quote: a quote is found on field 1 at line 2, value is "invalid h\\"ere"', + code: "INVALID_OPENING_QUOTE", + field: 'invalid h"ere', + }, + ]); + errors.length.should.eql(2); + next(err); + }); + parser.on("skip", (err) => { + errors.push(err); + }); + parser.write(dedent` + "line",1 + "line",invalid h"ere" + line,3 + `); + parser.end(); + }); + + it('handle "Quoted field not terminated"', function (next) { + let errors = 0; + const parser = parse({ skip_records_with_error: true }, (err, records) => { + if (!err) { + records.should.eql([["a", "b", "c", "d"]]); + } + errors.should.eql(1); + next(err); + }); + parser.on("skip", (err) => { + assert_error(err, { + message: + "Quote Not Closed: the parsing is finished with an opening quote at line 2", + code: "CSV_QUOTE_NOT_CLOSED", + }); + errors++; + }); + parser.write(dedent` + "a",b,"c",d + "",1974,8.8392926E7,""," + `); + parser.end(); + }); + + it('handle "CSV_RECORD_INCONSISTENT_COLUMNS"', function (next) { + let errors = 0; + const parser = parse( + { skip_records_with_error: true, columns: ["a", "b", "c", "d"] }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "4", b: "5", c: "6", d: "x" }, + { a: "7", b: "8", c: "9", d: "y" }, + ]); + } + errors.should.eql(1); + next(err); + }, + ); + parser.on("skip", (err) => { + assert_error(err, { + message: "Invalid Record Length: columns length is 4, got 3 on line 1", + code: "CSV_RECORD_INCONSISTENT_COLUMNS", + record: ["1", "2", "3"], + }); + errors++; + }); + parser.write(dedent` + 1,2,3 + 4,5,6,x + 7,8,9,y + `); + parser.end(); + }); + + it('handle "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH"', function (next) { + let errors = 0; + const parser = parse({ skip_records_with_error: true }, (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c", "d"], + ["e", "f", "g", "h"], + ]); + } + errors.should.eql(1); + next(err); + }); + parser.on("skip", (err) => { + assert_error(err, { + message: "Invalid Record Length: expect 4, got 3 on line 2", + code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", + record: ["1", "2", "3"], + }); + errors++; + }); + parser.write(dedent` + a,b,c,d + 1,2,3 + e,f,g,h + `); + parser.end(); + }); + + describe("with `bom` option", function () { + it('handle "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH" with bom (fix #411)', function (next) { + let errors = 0; + const parser = parse( + { bom: true, skip_records_with_error: true }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c", "d"], + ["e", "f", "g", "h"], + ]); + } + errors.should.eql(1); + next(err); + }, + ); + parser.on("skip", (err) => { + assert_error(err, { + message: "Invalid Record Length: expect 4, got 3 on line 2", + code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", + record: ["1", "2", "3"], + }); + errors++; + }); + parser.write("\ufeffa,b,c,d\n1,2,3\ne,f,g,h"); + parser.end(); + }); + }); + + describe("with `raw` option", function () { + it("print raw record", function (next) { + let errors = 0; + const parser = parse( + dedent` + "a","b","c" + "one","two","three" + "four"," " ","six" + "seven","eight","nine" + `, + { + skip_records_with_error: true, + raw: true, + }, + (err) => { + errors.should.eql(1); + next(err); + }, + ); + parser.on("skip", (err, raw) => { + err.raw.should.eql('"four"," "'); + raw.should.eql('"four"," "'); + errors++; + }); + }); + }); +}); diff --git a/packages/csv-parse/test/option.to.coffee b/packages/csv-parse/test/option.to.coffee deleted file mode 100644 index 02f2ccdb..00000000 --- a/packages/csv-parse/test/option.to.coffee +++ /dev/null @@ -1,91 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'Option `to`', -> - - it 'validation', -> - parse '', to: 10, (->) - parse '', to: "10", (->) - (-> - parse '', to: -1, (->) - ).should.throw 'Invalid Option: to must be a positive integer greater than 0, got -1' - (-> - parse '', to: 0, (->) - ).should.throw 'Invalid Option: to must be a positive integer greater than 0, got 0' - (-> - parse '', to: '0', (->) - ).should.throw 'Invalid Option: to must be a positive integer greater than 0, got "0"' - (-> - parse '', to: true, (->) - ).should.throw 'Invalid Option: to must be an integer, got true' - (-> - parse '', to: false, (->) - ).should.throw 'Invalid Option: to must be an integer, got false' - (-> - parse '', to: 'oh no', (->) - ).should.throw 'Invalid Option: to must be an integer, got "oh no"' - - it 'start at defined position', (next) -> - parse """ - 1,2,3 - 4,5,6 - 7,8,9 - """, to: 2, (err, records) -> - return next err if err - records.should.eql [ - [ '1','2','3' ] - [ '4','5','6' ] - ] - next() - - it 'dont count headers', (next) -> - parse """ - a,b,c - 1,2,3 - 4,5,6 - 7,8,9 - """, columns: true, to: 2, (err, records) -> - return next err if err - records.should.eql [ - {a:'1',b:'2',c:'3'} - {a:'4',b:'5',c:'6'} - ] - next() - - it 'end stream when "to" is reached, further lines are not parsed', (next) -> - parse """ - 1,2,3 - 4,5,6 - 7,8 - """, to: 2, (err, records) -> - return next err if err - records.should.eql [ - [ '1','2','3' ] - [ '4','5','6' ] - ] - next() - - it 'not influenced by lines', (next) -> - parse """ - 1,2," - 3" - 4,5," - 6" - 7,8," - 9" - """, to: 2, (err, records) -> - records.should.eql [ - [ '1','2','\n3' ] - [ '4','5','\n6' ] - ] unless err - next err - - it 'not influenced by record delimiter', (next) -> - parse """ - 1,2,3:4,5,6:7,8,9 - """, to: 2, record_delimiter: ':', (err, records) -> - records.should.eql [ - [ '1','2','3' ] - [ '4','5','6' ] - ] unless err - next err diff --git a/packages/csv-parse/test/option.to.js b/packages/csv-parse/test/option.to.js new file mode 100644 index 00000000..f860aaf0 --- /dev/null +++ b/packages/csv-parse/test/option.to.js @@ -0,0 +1,131 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `to`", function () { + it("validation", function () { + parse("", { to: 10 }, () => {}); + parse("", { to: "10" }, () => {}); + (() => { + parse("", { to: -1 }, () => {}); + }).should.throw( + "Invalid Option: to must be a positive integer greater than 0, got -1", + ); + (() => { + parse("", { to: 0 }, () => {}); + }).should.throw( + "Invalid Option: to must be a positive integer greater than 0, got 0", + ); + (() => { + parse("", { to: "0" }, () => {}); + }).should.throw( + 'Invalid Option: to must be a positive integer greater than 0, got "0"', + ); + (() => { + parse("", { to: true }, () => {}); + }).should.throw("Invalid Option: to must be an integer, got true"); + (() => { + parse("", { to: false }, () => {}); + }).should.throw("Invalid Option: to must be an integer, got false"); + (() => { + parse("", { to: "oh no" }, () => {}); + }).should.throw('Invalid Option: to must be an integer, got "oh no"'); + }); + + it("start at defined position", function (next) { + parse( + dedent` + 1,2,3 + 4,5,6 + 7,8,9 + `, + { to: 2 }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["1", "2", "3"], + ["4", "5", "6"], + ]); + next(); + }, + ); + }); + + it("dont count headers", function (next) { + parse( + dedent` + a,b,c + 1,2,3 + 4,5,6 + 7,8,9 + `, + { columns: true, to: 2 }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + { a: "1", b: "2", c: "3" }, + { a: "4", b: "5", c: "6" }, + ]); + next(); + }, + ); + }); + + it('end stream when "to" is reached, further lines are not parsed', function (next) { + parse( + dedent` + 1,2,3\n4,5,6\n7,8 + `, + { to: 2 }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["1", "2", "3"], + ["4", "5", "6"], + ]); + next(); + }, + ); + }); + + it("not influenced by lines", function (next) { + parse( + dedent` + 1,2," + 3" + 4,5," + 6" + 7,8," + 9" + `, + { to: 2 }, + (err, records) => { + if (!err) { + records.should.eql([ + ["1", "2", "\n3"], + ["4", "5", "\n6"], + ]); + } + next(err); + }, + ); + }); + + it("not influenced by record delimiter", function (next) { + parse( + dedent` + 1,2,3:4,5,6:7,8,9 + `, + { to: 2, record_delimiter: ":" }, + (err, records) => { + if (!err) { + records.should.eql([ + ["1", "2", "3"], + ["4", "5", "6"], + ]); + } + next(err); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.to_line.coffee b/packages/csv-parse/test/option.to_line.coffee deleted file mode 100644 index 4337e1d0..00000000 --- a/packages/csv-parse/test/option.to_line.coffee +++ /dev/null @@ -1,101 +0,0 @@ - -import { Readable } from 'node:stream' -import { parse } from '../lib/index.js' -import { generate } from 'csv-generate' - -describe 'Option `to_line`', -> - - it 'validation', -> - parse '', to_line: 10, (->) - parse '', to_line: "10", (->) - parse '', to_line: null, (->) - parse '', to_line: undefined, (->) - (-> - parse '', to_line: -1, (->) - ).should.throw 'Invalid Option: to_line must be a positive integer greater than 0, got -1' - (-> - parse '', to_line: 0, (->) - ).should.throw 'Invalid Option: to_line must be a positive integer greater than 0, got 0' - (-> - parse '', to_line: "0", (->) - ).should.throw 'Invalid Option: to_line must be a positive integer greater than 0, got "0"' - (-> - parse '', to_line: true, (->) - ).should.throw 'Invalid Option: to_line must be an integer, got true' - (-> - parse '', to_line: false, (->) - ).should.throw 'Invalid Option: to_line must be an integer, got false' - (-> - parse '', to_line: 'oh no', (->) - ).should.throw 'Invalid Option: to_line must be an integer, got "oh no"' - - it 'start at defined position', (next) -> - parse """ - 1,2,3 - 4,5,6 - 7,8,9 - """, to_line: 2, (err, records) -> - records.should.eql [ - [ '1','2','3' ] - [ '4','5','6' ] - ] unless err - next err - - it 'count headers', (next) -> - parse """ - a,b,c - 1,2,3 - 4,5,6 - 7,8,9 - """, columns: true, to_line: 3, (err, records) -> - records.should.eql [ - {a: '1',b: '2',c: '3'} - {a: '4',b: '5',c: '6'} - ] unless err - next err - - it 'records with quoted line at the end of line', (next) -> - parse """ - 1,2," - - 3" - 4,5," - 6" - 7,8," - 9" - """, to_line: 5, (err, records) -> - records.should.eql [ - [ '1','2','\n\n3' ] - [ '4','5','\n6' ] - ] unless err - next err - - it 'records with quoted line in the middle of line', (next) -> - parse """ - 1,2," - - 3" - 4,5," - 6" - 7,8," - 9" - """, to_line: 6, (err, records) -> - records.should.eql [ - [ '1','2','\n\n3' ] - [ '4','5','\n6' ] - ] unless err - next err - - it 'not influenced by record delimiter', (next) -> - parse """ - a,b,c:1,2, - 3:d,e,f:4,5, - 6:g,h,i:7,8, - 9 - """, to_line: 2, record_delimiter: ':', (err, records) -> - records.should.eql [ - [ 'a','b','c' ] - [ '1','2','\n3' ] - [ 'd','e','f' ] - ] unless err - next err diff --git a/packages/csv-parse/test/option.to_line.js b/packages/csv-parse/test/option.to_line.js new file mode 100644 index 00000000..1f50c1f5 --- /dev/null +++ b/packages/csv-parse/test/option.to_line.js @@ -0,0 +1,147 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `to_line`", function () { + it("validation", function () { + parse("", { to_line: 10 }, () => {}); + parse("", { to_line: "10" }, () => {}); + parse("", { to_line: null }, () => {}); + parse("", { to_line: undefined }, () => {}); + (() => { + parse("", { to_line: -1 }, () => {}); + }).should.throw( + "Invalid Option: to_line must be a positive integer greater than 0, got -1", + ); + (() => { + parse("", { to_line: 0 }, () => {}); + }).should.throw( + "Invalid Option: to_line must be a positive integer greater than 0, got 0", + ); + (() => { + parse("", { to_line: "0" }, () => {}); + }).should.throw( + 'Invalid Option: to_line must be a positive integer greater than 0, got "0"', + ); + (() => { + parse("", { to_line: true }, () => {}); + }).should.throw("Invalid Option: to_line must be an integer, got true"); + (() => { + parse("", { to_line: false }, () => {}); + }).should.throw("Invalid Option: to_line must be an integer, got false"); + (() => { + parse("", { to_line: "oh no" }, () => {}); + }).should.throw('Invalid Option: to_line must be an integer, got "oh no"'); + }); + + it("start at defined position", function (next) { + parse( + dedent` + 1,2,3 + 4,5,6 + 7,8,9 + `, + { to_line: 2 }, + (err, records) => { + if (!err) { + records.should.eql([ + ["1", "2", "3"], + ["4", "5", "6"], + ]); + } + next(err); + }, + ); + }); + + it("count headers", function (next) { + parse( + dedent` + a,b,c + 1,2,3 + 4,5,6 + 7,8,9 + `, + { columns: true, to_line: 3 }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "1", b: "2", c: "3" }, + { a: "4", b: "5", c: "6" }, + ]); + } + next(err); + }, + ); + }); + + it("records with quoted line at the end of line", function (next) { + parse( + dedent` + 1,2," + + 3" + 4,5," + 6" + 7,8," + 9" + `, + { to_line: 5 }, + (err, records) => { + if (!err) { + records.should.eql([ + ["1", "2", "\n\n3"], + ["4", "5", "\n6"], + ]); + } + next(err); + }, + ); + }); + + it("records with quoted line in the middle of line", function (next) { + parse( + dedent` + 1,2," + + 3" + 4,5," + 6" + 7,8," + 9" + `, + { to_line: 6 }, + (err, records) => { + if (!err) { + records.should.eql([ + ["1", "2", "\n\n3"], + ["4", "5", "\n6"], + ]); + } + next(err); + }, + ); + }); + + it("not influenced by record delimiter", function (next) { + parse( + dedent` + a,b,c:1,2, + 3:d,e,f:4,5, + 6:g,h,i:7,8, + 9 + `, + { to_line: 2, record_delimiter: ":" }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["1", "2", "\n3"], + ["d", "e", "f"], + ]); + } + next(err); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.trim.coffee b/packages/csv-parse/test/option.trim.coffee deleted file mode 100644 index f74c6704..00000000 --- a/packages/csv-parse/test/option.trim.coffee +++ /dev/null @@ -1,227 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'Option `rtrim`', -> - - it 'validation', -> - parse '', rtrim: true, (->) - parse '', rtrim: false, (->) - parse '', rtrim: null, (->) - parse '', rtrim: undefined, (->) - (-> - parse '', rtrim: 1, (->) - ).should.throw 'Invalid Option: rtrim must be a boolean, got 1' - (-> - parse '', rtrim: "true", (->) - ).should.throw 'Invalid Option: rtrim must be a boolean, got "true"' - -describe 'Option `ltrim`', -> - - it 'validation', -> - parse '', ltrim: true, (->) - parse '', ltrim: false, (->) - parse '', ltrim: null, (->) - parse '', ltrim: undefined, (->) - (-> - parse '', ltrim: 1, (->) - ).should.throw 'Invalid Option: ltrim must be a boolean, got 1' - (-> - parse '', ltrim: "true", (->) - ).should.throw 'Invalid Option: ltrim must be a boolean, got "true"' - -describe 'Option `trim`', -> - - it 'validation', -> - parse '', trim: true, (->) - parse '', trim: false, (->) - parse '', trim: null, (->) - parse '', trim: undefined, (->) - (-> - parse '', trim: 1, (->) - ).should.throw 'Invalid Option: trim must be a boolean, got 1' - (-> - parse '', trim: "true", (->) - ).should.throw 'Invalid Option: trim must be a boolean, got "true"' - - it 'set ltrim', -> - parser = parse trim: true - parser.options.ltrim.should.be.true() - - it 'respect ltrim', -> - parser = parse trim: true, ltrim: false - parser.options.ltrim.should.be.false() - - it 'set rtrim', -> - parser = parse trim: true - parser.options.rtrim.should.be.true() - - it 'respect rtrim', -> - parser = parse trim: true, rtrim: false - parser.options.rtrim.should.be.false() - - it 'interpret whitespaces', (next) -> - parse [ - String.fromCharCode 9 # Horizontal tab - String.fromCharCode 10 # NL line feed - String.fromCharCode 12 # NP Form feed - String.fromCharCode 13 # Carriage return - String.fromCharCode 32 # Space - 'sth' - ].join(''), trim: true, record_delimiter: '|', (err, records) -> - records.should.eql [['sth']] - next() - - it 'should ignore the whitespaces immediately preceding and following the delimiter', (next) -> - records = [] - parser = parse trim: true - parser.on 'readable', -> - while d = parser.read() - records.push d - parser.on 'end', -> - records.should.eql [ - [ 'FIELD 1','FIELD 2','FIELD 3','FIELD 4','FIELD 5','FIELD 6' ] - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','DEF','23','2050-11-27' ] - ] - next() - parser.write [ - ' FIELD 1 , FIELD 2 , FIELD 3,FIELD 4 , FIELD 5,FIELD 6 ' - '20322051544,1979 ,8.8017226E7,ABC , 45 , 2000-01-01' - ' 28392898392, 1974,8.8392926E7,DEF , 23 , 2050-11-27' - ].join('\n') - parser.end() - - it 'should preserve whitespace inside text if there are quotes or not', (next) -> - records = [] - parser = parse trim: true - parser.on 'readable', -> - while d = parser.read() - records.push d - parser.on 'end', -> - records.should.eql [ - [ 'FIELD 1','FIELD 2','FIELD 3','FIELD 4','FIELD 5','FIELD 6' ] - [ '20322051544','1979','8.8017226E7','ABC DEF','45','2000-01-01' ] - [ '28392898392','1974','8.8392926E7',' ABC DEF ','23','2050-11-27' ] - ] - next() - parser.write """ - FIELD 1, FIELD 2, FIELD 3, FIELD 4, FIELD 5, FIELD 6 - 20322051544, 1979, 8.8017226E7, ABC DEF , 45, 2000-01-01 - 28392898392, 1974, 8.8392926E7," ABC DEF ", 23, 2050-11-27 - """ - parser.end() - - it 'with columns and last field is a space', (next) -> - parse 'h1,h2,h3, \n1,2,3, \n4,5,6, ', - delimiter: ',' - columns: true - trim: true - , (err, records) -> - records.should.eql [ - { h1: '1', h2: '2', h3: '3', '': '' } - { h1: '4', h2: '5', h3: '6', '': '' } - ] unless err - next err - - it 'last field empty', (next) -> - parse "a,", trim: true, (err, records) -> - records.should.eql [ [ 'a', '' ] ] unless err - next err - - it 'with skip_empty_lines and empty lines at the end', (next) -> - parse "letter,number\na,1\nb,2\nc,3\n", - columns: true - skip_empty_lines: true - trim: true - , (err, records) -> - return next err if err - records.should.eql [ - { letter: 'a', number: '1' } - { letter: 'b', number: '2' } - { letter: 'c', number: '3' } - ] - next() - - it 'write aggressively', (next) -> - records = [] - parser = parse({ trim: true }) - parser.on 'readable', -> - while(d = parser.read()) - records.push d - parser.on 'end', -> - records.should.eql [ - [ 'Test 0', '', ' 0,00 ', '"' ] - [ 'Test 1', '', ' 100000,100000 ', '"' ] - [ 'Test 2', '', ' 200000,200000 ', '"' ] - [ 'Test 3', '', ' 300000,300000 ', '"' ] - [ 'Test 4', '', ' 400000,400000 ', '"' ] - [ 'Test 5', '', ' 500000,500000 ', '"' ] - [ 'Test 6', '', ' 600000,600000 ', '"' ] - [ 'Test 7', '', ' 700000,700000 ', '"' ] - [ 'Test 8', '', ' 800000,800000 ', '"' ] - [ 'Test 9', '', ' 900000,900000 ', '"' ] - ] - next() - data = ''' - Test 0 ,," 0,00 ","""" - Test 1 ,," 100000,100000 ","""" - Test 2 ,," 200000,200000 ","""" - Test 3 ,," 300000,300000 ","""" - Test 4 ,," 400000,400000 ","""" - Test 5 ,," 500000,500000 ","""" - Test 6 ,," 600000,600000 ","""" - Test 7 ,," 700000,700000 ","""" - Test 8 ,," 800000,800000 ","""" - Test 9 ,," 900000,900000 ","""" - ''' - parser.write chr for chr in data - parser.end() - -describe 'no trim', -> - - it 'should preserve surrounding whitespaces', (next) -> - records = [] - parser = parse() - parser.on 'readable', -> - while d = parser.read() - records.push d - parser.on 'end', -> - records.should.eql [ - [ ' FIELD 1 ',' FIELD 2 ',' FIELD 3','FIELD 4 ',' FIELD 5','FIELD 6 ' ] - [ '20322051544','1979 ','8.8017226E7','AB C ',' 45 ',' 2000-01-01' ] - [ ' 28392898392',' 1974','8.8392926E7','D EF ',' 23 ',' 2050-11-27' ] - ] - next() - parser.write [ - ' FIELD 1 , FIELD 2 , FIELD 3,FIELD 4 , FIELD 5,FIELD 6 ' - '20322051544,1979 ,8.8017226E7,AB C , 45 , 2000-01-01' - ' 28392898392, 1974,8.8392926E7,D EF , 23 , 2050-11-27' - ].join('\n') - parser.end() - -describe 'options', -> - - it.skip 'with encoding', (next) -> - parse Buffer.from('a, a', 'utf8'), - encoding: 'utf8' - trim: true - , (err, records) -> - # records[0].map (record) -> console.log Buffer.from(record, 'utf16le') - records.should.eql [['a', 'a']] unless err - next err - - it 'ltrim with encoding', (next) -> - parse Buffer.from('ф, ф', 'utf16le'), - encoding: 'utf16le' - trim: true - , (err, records) -> - records.should.eql [['ф', 'ф']] unless err - next err - - it 'rtrim with encoding', (next) -> - parse Buffer.from('ф ,ф', 'utf16le'), - encoding: 'utf16le' - trim: true - , (err, records) -> - records.should.eql [['ф', 'ф']] unless err - next err diff --git a/packages/csv-parse/test/option.trim.js b/packages/csv-parse/test/option.trim.js new file mode 100644 index 00000000..a15d70d9 --- /dev/null +++ b/packages/csv-parse/test/option.trim.js @@ -0,0 +1,309 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `trim`", function () { + it("validation", function () { + parse("", { trim: true }, () => {}); + parse("", { trim: false }, () => {}); + parse("", { trim: null }, () => {}); + parse("", { trim: undefined }, () => {}); + (() => { + parse("", { trim: 1 }, () => {}); + }).should.throw("Invalid Option: trim must be a boolean, got 1"); + (() => { + parse("", { trim: "true" }, () => {}); + }).should.throw('Invalid Option: trim must be a boolean, got "true"'); + }); + + it("set ltrim", function () { + const parser = parse({ trim: true }); + parser.options.ltrim.should.be.true(); + }); + + it("respect ltrim", function () { + const parser = parse({ trim: true, ltrim: false }); + parser.options.ltrim.should.be.false(); + }); + + it("set rtrim", function () { + const parser = parse({ trim: true }); + parser.options.rtrim.should.be.true(); + }); + + it("respect rtrim", function () { + const parser = parse({ trim: true, rtrim: false }); + parser.options.rtrim.should.be.false(); + }); + + it("interpret whitespaces", function (next) { + parse( + [ + String.fromCharCode(9), // Horizontal tab + String.fromCharCode(10), // NL line feed + String.fromCharCode(12), // NP Form feed + String.fromCharCode(13), // Carriage return + String.fromCharCode(32), // Space + "sth", + ].join(""), + { trim: true, record_delimiter: "|" }, + (err, records) => { + records.should.eql([["sth"]]); + next(); + }, + ); + }); + + it("should ignore the whitespaces immediately preceding and following the delimiter", function (next) { + const records = []; + const parser = parse({ trim: true }); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([ + ["FIELD 1", "FIELD 2", "FIELD 3", "FIELD 4", "FIELD 5", "FIELD 6"], + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ]); + next(); + }); + parser.write( + [ + " FIELD 1 , FIELD 2 , FIELD 3,FIELD 4 , FIELD 5,FIELD 6 ", + "20322051544,1979 ,8.8017226E7,ABC , 45 , 2000-01-01", + " 28392898392, 1974,8.8392926E7,DEF , 23 , 2050-11-27", + ].join("\n"), + ); + parser.end(); + }); + + it("should preserve whitespace inside text if there are quotes or not", function (next) { + const records = []; + const parser = parse({ trim: true }); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([ + ["FIELD 1", "FIELD 2", "FIELD 3", "FIELD 4", "FIELD 5", "FIELD 6"], + ["20322051544", "1979", "8.8017226E7", "ABC DEF", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", " ABC DEF ", "23", "2050-11-27"], + ]); + next(); + }); + parser.write(dedent` + FIELD 1, FIELD 2, FIELD 3, FIELD 4, FIELD 5, FIELD 6 + 20322051544, 1979, 8.8017226E7, ABC DEF , 45, 2000-01-01 + 28392898392, 1974, 8.8392926E7," ABC DEF ", 23, 2050-11-27 + `); + parser.end(); + }); + + it("with columns and last field is a space", function (next) { + parse( + dedent` + h1,h2,h3, + 1,2,3, + 4,5,6, + `, + { + delimiter: ",", + columns: true, + trim: true, + }, + (err, records) => { + if (!err) { + records.should.eql([ + { h1: "1", h2: "2", h3: "3", "": "" }, + { h1: "4", h2: "5", h3: "6", "": "" }, + ]); + } + next(err); + }, + ); + }); + + it("last field empty", function (next) { + parse("a,", { trim: true }, (err, records) => { + if (!err) { + records.should.eql([["a", ""]]); + } + next(err); + }); + }); + + it("with skip_empty_lines and empty lines at the end", function (next) { + parse( + dedent` + letter,number + a,1 + + b,2 + c,3 + ` + "\n\n", + { + columns: true, + skip_empty_lines: true, + trim: true, + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + { letter: "a", number: "1" }, + { letter: "b", number: "2" }, + { letter: "c", number: "3" }, + ]); + next(); + }, + ); + }); + + it("write aggressively", function (next) { + const records = []; + const parser = parse({ trim: true }); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([ + ["Test 0", "", " 0,00 ", '"'], + ["Test 1", "", " 100000,100000 ", '"'], + ["Test 2", "", " 200000,200000 ", '"'], + ["Test 3", "", " 300000,300000 ", '"'], + ["Test 4", "", " 400000,400000 ", '"'], + ["Test 5", "", " 500000,500000 ", '"'], + ["Test 6", "", " 600000,600000 ", '"'], + ["Test 7", "", " 700000,700000 ", '"'], + ["Test 8", "", " 800000,800000 ", '"'], + ["Test 9", "", " 900000,900000 ", '"'], + ]); + next(); + }); + const data = [ + ' Test 0 ,," 0,00 ","""" ', + ' Test 1 ,," 100000,100000 ","""" ', + ' Test 2 ,," 200000,200000 ","""" ', + ' Test 3 ,," 300000,300000 ","""" ', + ' Test 4 ,," 400000,400000 ","""" ', + ' Test 5 ,," 500000,500000 ","""" ', + ' Test 6 ,," 600000,600000 ","""" ', + ' Test 7 ,," 700000,700000 ","""" ', + ' Test 8 ,," 800000,800000 ","""" ', + ' Test 9 ,," 900000,900000 ","""" ', + ].join("\n"); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); + + describe("no trim", function () { + it("should preserve surrounding whitespaces", function (next) { + const records = []; + const parser = parse(); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([ + [ + " FIELD 1 ", + " FIELD 2 ", + " FIELD 3", + "FIELD 4 ", + " FIELD 5", + "FIELD 6 ", + ], + [ + "20322051544", + "1979 ", + "8.8017226E7", + "AB C ", + " 45 ", + " 2000-01-01", + ], + [ + " 28392898392", + " 1974", + "8.8392926E7", + "D EF ", + " 23 ", + " 2050-11-27", + ], + ]); + next(); + }); + parser.write( + [ + " FIELD 1 , FIELD 2 , FIELD 3,FIELD 4 , FIELD 5,FIELD 6 ", + "20322051544,1979 ,8.8017226E7,AB C , 45 , 2000-01-01", + " 28392898392, 1974,8.8392926E7,D EF , 23 , 2050-11-27", + ].join("\n"), + ); + parser.end(); + }); + }); + + describe("options", function () { + it("with encoding", function (next) { + parse( + Buffer.from(" ф , ф ", "utf16le"), + { + encoding: "utf16le", + trim: true, + }, + (err, records) => { + if (!err) { + records.should.eql([["ф", "ф"]]); + } + next(err); + }, + ); + }); + + it("ltrim with encoding", function (next) { + parse( + Buffer.from(" ф , ф ", "utf16le"), + { + encoding: "utf16le", + ltrim: true, + }, + (err, records) => { + if (!err) { + records.should.eql([["ф ", "ф "]]); + } + next(err); + }, + ); + }); + + it("rtrim with encoding", function (next) { + parse( + Buffer.from(" ф , ф ", "utf16le"), + { + encoding: "utf16le", + rtrim: true, + }, + (err, records) => { + if (!err) { + records.should.eql([[" ф", " ф"]]); + } + next(err); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/options.coffee b/packages/csv-parse/test/options.coffee deleted file mode 100644 index 3a0bf24d..00000000 --- a/packages/csv-parse/test/options.coffee +++ /dev/null @@ -1,20 +0,0 @@ - -import { parse } from '../lib/index.js' - -describe 'Options', -> - - it 'are cloned', (next) -> - options = quote: false - parse """ - FIELD_1,FIELD_2 - 20322051544,1979 - 28392898392,1974 - """, options, (err) -> - return next err if err - (options.quote is false).should.be.true() - next() - - it 'underscore options', -> - parser = parse recordDelimiter: ':' - parser.options.record_delimiter.toString().should.eql ':' - (parser.options.recordDelimiter is undefined).should.be.true() diff --git a/packages/csv-parse/test/options.js b/packages/csv-parse/test/options.js new file mode 100644 index 00000000..e2f5fb58 --- /dev/null +++ b/packages/csv-parse/test/options.js @@ -0,0 +1,28 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Options", function () { + it("are cloned", function (next) { + const options = { quote: false }; + parse( + dedent` + FIELD_1,FIELD_2 + 20322051544,1979 + 28392898392,1974 + `, + options, + (err) => { + if (err) return next(err); + (options.quote === false).should.be.true(); + next(); + }, + ); + }); + + it("underscore options", function () { + const parser = parse({ recordDelimiter: ":" }); + parser.options.record_delimiter.toString().should.eql(":"); + (parser.options.recordDelimiter === undefined).should.be.true(); + }); +}); diff --git a/packages/csv-parse/test/samples.coffee b/packages/csv-parse/test/samples.coffee deleted file mode 100644 index 7f52fbf2..00000000 --- a/packages/csv-parse/test/samples.coffee +++ /dev/null @@ -1,31 +0,0 @@ -import fs from 'node:fs/promises' -import path from 'node:path' -import { spawn } from 'node:child_process' - -[_, major] = process.version.match(/(\d+)\.\d+\.\d+/) -__dirname = new URL( '.', import.meta.url).pathname -dir = path.resolve __dirname, '../samples' -samples = await fs.readdir dir - -describe 'Samples', -> - - samples - .filter (sample) -> ! (major < 16 && sample is 'recipe.promises.js') - .filter (sample) -> - return false unless /\.(js|ts)?$/.test sample - true - .map (sample) -> - - it "Sample #{sample}", () -> - data = await fs.readFile path.resolve(dir, sample), 'utf8' - return if /^["|']skip test["|']/.test data - new Promise (resolve, reject) -> - ext = /\.(\w+)?$/.exec(sample)[0] - [cmd, ...args] = switch ext - when '.js' - ['node', path.resolve dir, sample] - when '.ts' - ['node', '--loader', 'ts-node/esm', path.resolve dir, sample] - spawn(cmd, args) - .on 'close', (code) -> if code is 0 then resolve() else reject(new Error 'Failure') - .stdout.on 'data', (->) diff --git a/packages/csv-parse/test/samples.js b/packages/csv-parse/test/samples.js new file mode 100644 index 00000000..8eb8e66e --- /dev/null +++ b/packages/csv-parse/test/samples.js @@ -0,0 +1,47 @@ +import fs from "node:fs/promises"; +import path from "node:path"; +import { spawn } from "node:child_process"; + +const __dirname = new URL(".", import.meta.url).pathname; +const dir = path.resolve(__dirname, "../samples"); +const samples = await fs.readdir(dir); + +const [, major] = process.version.match(/(\d+)\.\d+\.\d+/); + +describe("Samples", function () { + /* eslint mocha/no-setup-in-describe: "off" */ + samples + .filter((sample) => !(major < 16 && sample === "recipe.promises.js")) + .filter((sample) => { + if (!/\.(js|ts)?$/.test(sample)) return false; + return true; + }) + .map((sample) => { + it(`Sample ${sample}`, async function () { + const data = await fs.readFile(path.resolve(dir, sample), "utf8"); + if (/^["|']skip test["|']/.test(data)) return; + return new Promise((resolve, reject) => { + const ext = /\.(\w+)?$/.exec(sample)[0]; + let cmd, args; + switch (ext) { + case ".js": + [cmd, ...args] = ["node", path.resolve(dir, sample)]; + break; + case ".ts": + [cmd, ...args] = [ + "node", + "--loader", + "ts-node/esm", + path.resolve(dir, sample), + ]; + break; + } + spawn(cmd, args) + .on("close", (code) => + code === 0 ? resolve() : reject(new Error("Failure")), + ) + .stdout.on("data", () => {}); + }); + }); + }); +}); diff --git a/packages/csv-parse/test/spectrum.coffee b/packages/csv-parse/test/spectrum.coffee deleted file mode 100644 index 02376f9b..00000000 --- a/packages/csv-parse/test/spectrum.coffee +++ /dev/null @@ -1,15 +0,0 @@ - -import { default as spectrum } from 'csv-spectrum' -import { default as each } from 'each' -import { parse } from '../lib/sync.js' - -describe 'spectrum', -> - - it 'pass all tests', (next) -> - spectrum (err, tests) -> - each tests, (test) -> - return if test.name is 'simple' # See https://github.com/maxogden/csv-spectrum/commit/ec45e96a79661d7bd87f6becbb845b30f11accde - return if test.name is 'location_coordinates'# See https://github.com/max-mapper/csv-spectrum/issues/20 - records = parse test.csv.toString(), columns: true, relax_quotes: true - records.should.eql JSON.parse test.json.toString() - .then (-> next()), next diff --git a/packages/csv-parse/test/spectrum.js b/packages/csv-parse/test/spectrum.js new file mode 100644 index 00000000..2a1e6516 --- /dev/null +++ b/packages/csv-parse/test/spectrum.js @@ -0,0 +1,20 @@ +import "should"; +import { default as spectrum } from "csv-spectrum"; +import { default as each } from "each"; +import { parse } from "../lib/sync.js"; + +describe("spectrum", function () { + it("pass all tests", function (next) { + spectrum((err, tests) => { + each(tests, (test) => { + if (test.name === "simple") return; // See https://github.com/maxogden/csv-spectrum/commit/ec45e96a79661d7bd87f6becbb845b30f11accde + if (test.name === "location_coordinates") return; // See https://github.com/max-mapper/csv-spectrum/issues/20 + const records = parse(test.csv.toString(), { + columns: true, + relax_quotes: true, + }); + records.should.eql(JSON.parse(test.json.toString())); + }).then(() => next(), next); + }); + }); +}); From 11b586c6f0cb1c77a2c79fc5592e09f09c02a647 Mon Sep 17 00:00:00 2001 From: David Worms Date: Mon, 12 May 2025 21:01:15 +0200 Subject: [PATCH 07/49] test(csv-stringify): coffee to js conversion --- package-lock.json | 2 +- packages/csv-stringify/package.json | 11 +- .../csv-stringify/test/api.callback.coffee | 43 --- packages/csv-stringify/test/api.callback.js | 56 +++ packages/csv-stringify/test/api.coffee | 60 --- packages/csv-stringify/test/api.js | 96 +++++ packages/csv-stringify/test/api.pipe.coffee | 47 --- packages/csv-stringify/test/api.pipe.js | 70 ++++ packages/csv-stringify/test/api.sync.coffee | 21 -- packages/csv-stringify/test/api.sync.js | 37 ++ packages/csv-stringify/test/api.types.sync.ts | 82 +++-- packages/csv-stringify/test/api.types.ts | 293 +++++++-------- .../csv-stringify/test/api.web_stream.coffee | 18 - packages/csv-stringify/test/api.web_stream.js | 21 ++ packages/csv-stringify/test/api.write.coffee | 127 ------- packages/csv-stringify/test/api.write.js | 197 ++++++++++ packages/csv-stringify/test/loaders/all.js | 15 - packages/csv-stringify/test/loaders/coffee.js | 20 - .../csv-stringify/test/loaders/legacy/all.js | 36 -- .../test/loaders/legacy/coffee.js | 50 --- packages/csv-stringify/test/option.bom.coffee | 56 --- packages/csv-stringify/test/option.bom.js | 93 +++++ .../csv-stringify/test/option.cast.coffee | 198 ---------- packages/csv-stringify/test/option.cast.js | 344 ++++++++++++++++++ .../csv-stringify/test/option.columns.coffee | 119 ------ packages/csv-stringify/test/option.columns.js | 177 +++++++++ .../test/option.delimiter.coffee | 73 ---- .../csv-stringify/test/option.delimiter.js | 102 ++++++ packages/csv-stringify/test/option.eof.coffee | 22 -- packages/csv-stringify/test/option.eof.js | 34 ++ .../csv-stringify/test/option.escape.coffee | 78 ---- packages/csv-stringify/test/option.escape.js | 105 ++++++ .../test/option.escape_formulas.coffee | 64 ---- .../test/option.escape_formulas.js | 86 +++++ .../csv-stringify/test/option.header.coffee | 140 ------- packages/csv-stringify/test/option.header.js | 269 ++++++++++++++ .../csv-stringify/test/option.quote.coffee | 137 ------- packages/csv-stringify/test/option.quote.js | 233 ++++++++++++ .../csv-stringify/test/option.quoted.coffee | 49 --- packages/csv-stringify/test/option.quoted.js | 72 ++++ .../test/option.quoted_empty.coffee | 76 ---- .../csv-stringify/test/option.quoted_empty.js | 108 ++++++ .../test/option.quoted_match.coffee | 99 ----- .../csv-stringify/test/option.quoted_match.js | 122 +++++++ .../test/option.quoted_string.coffee | 34 -- .../test/option.quoted_string.js | 45 +++ .../test/option.record_delimiter.coffee | 82 ----- .../test/option.record_delimiter.js | 144 ++++++++ packages/csv-stringify/test/options.coffee | 9 - packages/csv-stringify/test/options.js | 9 + packages/csv-stringify/test/samples.coffee | 30 -- packages/csv-stringify/test/samples.js | 44 +++ packages/csv-stringify/test/types.js | 27 ++ 53 files changed, 2686 insertions(+), 1896 deletions(-) delete mode 100644 packages/csv-stringify/test/api.callback.coffee create mode 100644 packages/csv-stringify/test/api.callback.js delete mode 100644 packages/csv-stringify/test/api.coffee create mode 100644 packages/csv-stringify/test/api.js delete mode 100644 packages/csv-stringify/test/api.pipe.coffee create mode 100644 packages/csv-stringify/test/api.pipe.js delete mode 100644 packages/csv-stringify/test/api.sync.coffee create mode 100644 packages/csv-stringify/test/api.sync.js delete mode 100644 packages/csv-stringify/test/api.web_stream.coffee create mode 100644 packages/csv-stringify/test/api.web_stream.js delete mode 100644 packages/csv-stringify/test/api.write.coffee create mode 100644 packages/csv-stringify/test/api.write.js delete mode 100644 packages/csv-stringify/test/loaders/all.js delete mode 100644 packages/csv-stringify/test/loaders/coffee.js delete mode 100644 packages/csv-stringify/test/loaders/legacy/all.js delete mode 100644 packages/csv-stringify/test/loaders/legacy/coffee.js delete mode 100644 packages/csv-stringify/test/option.bom.coffee create mode 100644 packages/csv-stringify/test/option.bom.js delete mode 100644 packages/csv-stringify/test/option.cast.coffee create mode 100644 packages/csv-stringify/test/option.cast.js delete mode 100644 packages/csv-stringify/test/option.columns.coffee create mode 100644 packages/csv-stringify/test/option.columns.js delete mode 100644 packages/csv-stringify/test/option.delimiter.coffee create mode 100644 packages/csv-stringify/test/option.delimiter.js delete mode 100644 packages/csv-stringify/test/option.eof.coffee create mode 100644 packages/csv-stringify/test/option.eof.js delete mode 100644 packages/csv-stringify/test/option.escape.coffee create mode 100644 packages/csv-stringify/test/option.escape.js delete mode 100644 packages/csv-stringify/test/option.escape_formulas.coffee create mode 100644 packages/csv-stringify/test/option.escape_formulas.js delete mode 100644 packages/csv-stringify/test/option.header.coffee create mode 100644 packages/csv-stringify/test/option.header.js delete mode 100644 packages/csv-stringify/test/option.quote.coffee create mode 100644 packages/csv-stringify/test/option.quote.js delete mode 100644 packages/csv-stringify/test/option.quoted.coffee create mode 100644 packages/csv-stringify/test/option.quoted.js delete mode 100644 packages/csv-stringify/test/option.quoted_empty.coffee create mode 100644 packages/csv-stringify/test/option.quoted_empty.js delete mode 100644 packages/csv-stringify/test/option.quoted_match.coffee create mode 100644 packages/csv-stringify/test/option.quoted_match.js delete mode 100644 packages/csv-stringify/test/option.quoted_string.coffee create mode 100644 packages/csv-stringify/test/option.quoted_string.js delete mode 100644 packages/csv-stringify/test/option.record_delimiter.coffee create mode 100644 packages/csv-stringify/test/option.record_delimiter.js delete mode 100644 packages/csv-stringify/test/options.coffee create mode 100644 packages/csv-stringify/test/options.js delete mode 100644 packages/csv-stringify/test/samples.coffee create mode 100644 packages/csv-stringify/test/samples.js create mode 100644 packages/csv-stringify/test/types.js diff --git a/package-lock.json b/package-lock.json index 5d2ff270..a5dcbc19 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20175,7 +20175,6 @@ "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", - "coffeescript": "^2.7.0", "csv-generate": "^4.4.2", "csv-spectrum": "^2.0.0", "dedent": "^0.7.0", @@ -20206,6 +20205,7 @@ "@types/node": "^22.15.17", "coffeescript": "~2.7.0", "csv-generate": "^4.4.2", + "dedent": "^0.7.0", "each": "^2.7.2", "eslint": "^9.26.0", "eslint-config-prettier": "^10.1.5", diff --git a/packages/csv-stringify/package.json b/packages/csv-stringify/package.json index afd6745e..eef6cb9c 100644 --- a/packages/csv-stringify/package.json +++ b/packages/csv-stringify/package.json @@ -15,8 +15,8 @@ "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", - "coffeescript": "~2.7.0", "csv-generate": "^4.4.2", + "dedent": "^0.7.0", "each": "^2.7.2", "eslint": "^9.26.0", "eslint-config-prettier": "^10.1.5", @@ -71,12 +71,9 @@ "main": "./dist/cjs/index.cjs", "mocha": { "inline-diffs": true, - "loader": "./test/loaders/all.js", + "import": "tsx", "recursive": true, "reporter": "spec", - "require": [ - "should" - ], "throw-deprecation": false, "timeout": 40000 }, @@ -94,8 +91,8 @@ "lint:fix": "eslint --fix", "lint:ts": "tsc --noEmit true", "preversion": "npm run build && git add dist", - "test": "mocha 'test/**/*.{coffee,ts}'", - "test:legacy": "mocha --ignore test/api.callback.coffee --ignore test/api.web_stream.coffee --loader=./test/loaders/legacy/all.js 'test/**/*.{coffee,ts}'" + "test": "mocha 'test/**/*.{js,ts}'", + "test:legacy": "mocha --ignore test/api.callback.js --ignore test/api.web_stream.js 'test/**/*.{js,ts}'" }, "type": "module", "types": "dist/esm/index.d.ts", diff --git a/packages/csv-stringify/test/api.callback.coffee b/packages/csv-stringify/test/api.callback.coffee deleted file mode 100644 index e5e6a014..00000000 --- a/packages/csv-stringify/test/api.callback.coffee +++ /dev/null @@ -1,43 +0,0 @@ - -import fs from 'fs' -import { generate } from 'csv-generate' -import { stringify } from '../lib/index.js' - -describe 'api.callback', -> - - it '2 args: data, callback', (next) -> - data = '' - stringifier = stringify [ - ['field_1','field_2'], ['value 1','value 2'] - ], (err, data) -> - data.should.eql 'field_1,field_2\nvalue 1,value 2\n' - next() - - it '2 args: options, callback', (next) -> - data = '' - stringifier = stringify eof: false, (err, data) -> - data.should.eql 'field_1,field_2\nvalue 1,value 2' - next() - stringifier.write ['field_1','field_2'] - stringifier.write ['value 1','value 2'] - stringifier.end() - - it '3 args: data, options, callback', (next) -> - data = '' - stringifier = stringify [ - ['field_1','field_2'], ['value 1','value 2'] - ], eof: false, (err, data) -> - data.should.eql 'field_1,field_2\nvalue 1,value 2' - next() - - it 'catch error in end handler, see #386', (next) -> - input = - Array.from( length: 200000 ).map -> - Array.from( length: 100 ).map -> - 'ABCDEFGHIJKLMNOPQRSTUVXYZ0123456789' - stringify input, (err, res) -> - err.should.match - code: 'ERR_STRING_TOO_LONG' - message: 'Cannot create a string longer than 0x1fffffe8 characters' - next() - \ No newline at end of file diff --git a/packages/csv-stringify/test/api.callback.js b/packages/csv-stringify/test/api.callback.js new file mode 100644 index 00000000..b6a8af32 --- /dev/null +++ b/packages/csv-stringify/test/api.callback.js @@ -0,0 +1,56 @@ +import "should"; +import { stringify } from "../lib/index.js"; + +describe("api.callback", function () { + it("2 args: data, callback", function (next) { + stringify( + [ + ["field_1", "field_2"], + ["value 1", "value 2"], + ], + (err, data) => { + data.should.eql("field_1,field_2\nvalue 1,value 2\n"); + next(); + }, + ); + }); + + it("2 args: options, callback", function (next) { + const stringifier = stringify({ eof: false }, (err, data) => { + data.should.eql("field_1,field_2\nvalue 1,value 2"); + next(); + }); + stringifier.write(["field_1", "field_2"]); + stringifier.write(["value 1", "value 2"]); + stringifier.end(); + }); + + it("3 args: data, options, callback", function (next) { + stringify( + [ + ["field_1", "field_2"], + ["value 1", "value 2"], + ], + { eof: false }, + (err, data) => { + data.should.eql("field_1,field_2\nvalue 1,value 2"); + next(); + }, + ); + }); + + it("catch error in end handler, see #386", function (next) { + const input = Array.from({ length: 200000 }).map(() => + Array.from({ length: 100 }).map( + () => "ABCDEFGHIJKLMNOPQRSTUVXYZ0123456789", + ), + ); + stringify(input, (err) => { + err.should.match({ + code: "ERR_STRING_TOO_LONG", + message: "Cannot create a string longer than 0x1fffffe8 characters", + }); + next(); + }); + }); +}); diff --git a/packages/csv-stringify/test/api.coffee b/packages/csv-stringify/test/api.coffee deleted file mode 100644 index b0a036a4..00000000 --- a/packages/csv-stringify/test/api.coffee +++ /dev/null @@ -1,60 +0,0 @@ - -import fs from 'fs' -import { generate } from 'csv-generate' -import { stringify } from '../lib/index.js' - -describe 'API', -> - - it '0 arg: write input and stream output', (next) -> - data = '' - stringifier = stringify() - stringifier.on 'readable', -> - data += d while d = stringifier.read() - stringifier.on 'err', (err) -> - next err - stringifier.on 'finish', -> - data.should.eql 'field_1,field_2\nvalue 1,value 2\n' - next() - stringifier.write ['field_1','field_2'] - stringifier.write ['value 1','value 2'] - stringifier.end() - - it '1 arg: option; write input and stream output', (next) -> - data = '' - generator = generate length: 2, objectMode: true, seed: 1, columns: 2 - stringifier = stringify eof: false - stringifier.on 'readable', -> - data += d while d = stringifier.read() - generator.on 'error', next - generator.on 'end', (err) -> - stringifier.end() - generator.on 'readable', -> - stringifier.write row while row = generator.read() - stringifier.on 'finish', -> - data.should.eql """ - OMH,ONKCHhJmjadoA - D,GeACHiN - """ - next() - - it '1 arg: data and stream output', (next) -> - data = '' - stringifier = stringify [ - ['field_1','field_2'], ['value 1','value 2'] - ] - stringifier.on 'readable', -> - data += d while d = stringifier.read() - stringifier.on 'finish', -> - data.should.eql 'field_1,field_2\nvalue 1,value 2\n' - next() - - it '2 args: data, option and stream output', (next) -> - data = '' - stringifier = stringify [ - ['field_1','field_2'], ['value 1','value 2'] - ], eof: false - stringifier.on 'readable', -> - data += d while d = stringifier.read() - stringifier.on 'finish', -> - data.should.eql 'field_1,field_2\nvalue 1,value 2' - next() diff --git a/packages/csv-stringify/test/api.js b/packages/csv-stringify/test/api.js new file mode 100644 index 00000000..a3de3d26 --- /dev/null +++ b/packages/csv-stringify/test/api.js @@ -0,0 +1,96 @@ +import "should"; +import { generate } from "csv-generate"; +import { stringify } from "../lib/index.js"; + +describe("API", function () { + it("0 arg: write input and stream output", function (next) { + let data = ""; + const stringifier = stringify(); + stringifier.on("readable", () => { + let d; + while ((d = stringifier.read())) { + data += d; + } + }); + stringifier.on("err", (err) => { + next(err); + }); + stringifier.on("finish", () => { + data.should.eql("field_1,field_2\nvalue 1,value 2\n"); + next(); + }); + stringifier.write(["field_1", "field_2"]); + stringifier.write(["value 1", "value 2"]); + stringifier.end(); + }); + + it("1 arg: option; write input and stream output", function (next) { + let data = ""; + const generator = generate({ + length: 2, + objectMode: true, + seed: 1, + columns: 2, + }); + const stringifier = stringify({ eof: false }); + stringifier.on("readable", () => { + let d; + while ((d = stringifier.read())) { + data += d; + } + }); + generator.on("error", next); + generator.on("end", () => { + stringifier.end(); + }); + generator.on("readable", () => { + let row; + while ((row = generator.read())) { + stringifier.write(row); + } + }); + stringifier.on("finish", () => { + data.should.eql("OMH,ONKCHhJmjadoA\nD,GeACHiN"); + next(); + }); + }); + + it("1 arg: data and stream output", function (next) { + let data = ""; + const stringifier = stringify([ + ["field_1", "field_2"], + ["value 1", "value 2"], + ]); + stringifier.on("readable", () => { + let d; + while ((d = stringifier.read())) { + data += d; + } + }); + stringifier.on("finish", () => { + data.should.eql("field_1,field_2\nvalue 1,value 2\n"); + next(); + }); + }); + + it("2 args: data, option and stream output", function (next) { + let data = ""; + const stringifier = stringify( + [ + ["field_1", "field_2"], + ["value 1", "value 2"], + ], + { eof: false }, + ); + stringifier.on("readable", () => { + let d; + while ((d = stringifier.read())) { + data += d; + } + }); + stringifier.on("finish", () => { + data.should.eql("field_1,field_2\nvalue 1,value 2"); + next(); + }); + }); +}); diff --git a/packages/csv-stringify/test/api.pipe.coffee b/packages/csv-stringify/test/api.pipe.coffee deleted file mode 100644 index 60a27f95..00000000 --- a/packages/csv-stringify/test/api.pipe.coffee +++ /dev/null @@ -1,47 +0,0 @@ - -import fs from 'fs' -import { generate } from 'csv-generate' -import { stringify } from '../lib/index.js' - -describe 'API pipe', -> - - it 'pipe from source to destination', (next) -> - data = '' - generator = generate length: 2, objectMode: true, seed: 1, columns: 2 - stringifier = stringify eof: false - ws = fs.createWriteStream '/tmp/large.out' - generator.pipe(stringifier).pipe(ws).on 'finish', -> - fs.readFile '/tmp/large.out', 'ascii', (err, data) -> - data.should.eql """ - OMH,ONKCHhJmjadoA - D,GeACHiN - """ - fs.unlink '/tmp/large.out', next - - it 'pipe to destination', (next) -> - data = '' - generate length: 1000, objectMode: true, seed: 1, columns: 2, (err, data) -> - stringifier = stringify eof: false - ws = fs.createWriteStream '/tmp/large.out' - stringifier.pipe ws - for row in data - stringifier.write row - stringifier.end() - ws.on 'finish', -> - fs.readFile '/tmp/large.out', 'ascii', (err, data) -> - data.split('\n').length.should.eql 1000 unless err - next err - - it 'pipe from source', (next) -> - data = '' - generator = generate length: 2, objectMode: true, seed: 1, columns: 2 - stringifier = generator.pipe stringify eof: false - stringifier.on 'readable', -> - while(d = stringifier.read()) - data += d - stringifier.on 'finish', -> - data.should.eql """ - OMH,ONKCHhJmjadoA - D,GeACHiN - """ - next() diff --git a/packages/csv-stringify/test/api.pipe.js b/packages/csv-stringify/test/api.pipe.js new file mode 100644 index 00000000..5199f7e2 --- /dev/null +++ b/packages/csv-stringify/test/api.pipe.js @@ -0,0 +1,70 @@ +import "should"; +import fs from "fs"; +import { generate } from "csv-generate"; +import { stringify } from "../lib/index.js"; + +describe("API pipe", function () { + it("pipe from source to destination", function (next) { + const generator = generate({ + length: 2, + objectMode: true, + seed: 1, + columns: 2, + }); + const stringifier = stringify({ eof: false }); + const ws = fs.createWriteStream("/tmp/large.out"); + generator + .pipe(stringifier) + .pipe(ws) + .on("finish", () => { + fs.readFile("/tmp/large.out", "ascii", (err, data) => { + data.should.eql("OMH,ONKCHhJmjadoA\nD,GeACHiN"); + fs.unlink("/tmp/large.out", next); + }); + }); + }); + + it("pipe to destination", function (next) { + generate( + { length: 1000, objectMode: true, seed: 1, columns: 2 }, + (err, data) => { + const stringifier = stringify({ eof: false }); + const ws = fs.createWriteStream("/tmp/large.out"); + stringifier.pipe(ws); + for (const row of data) { + stringifier.write(row); + } + stringifier.end(); + ws.on("finish", () => { + fs.readFile("/tmp/large.out", "ascii", (err, data) => { + if (!err) { + data.split("\n").length.should.eql(1000); + } + next(err); + }); + }); + }, + ); + }); + + it("pipe from source", function (next) { + let data = ""; + const generator = generate({ + length: 2, + objectMode: true, + seed: 1, + columns: 2, + }); + const stringifier = generator.pipe(stringify({ eof: false })); + stringifier.on("readable", () => { + let d; + while ((d = stringifier.read())) { + data += d; + } + }); + stringifier.on("finish", () => { + data.should.eql("OMH,ONKCHhJmjadoA\nD,GeACHiN"); + next(); + }); + }); +}); diff --git a/packages/csv-stringify/test/api.sync.coffee b/packages/csv-stringify/test/api.sync.coffee deleted file mode 100644 index ab7e861e..00000000 --- a/packages/csv-stringify/test/api.sync.coffee +++ /dev/null @@ -1,21 +0,0 @@ - -import { stringify } from '../lib/sync.js' - -describe 'sync', -> - - it 'work on object', -> - data = stringify [ {a: '1', b: '2'}, {a: '3', b: '4'}] - data.should.eql "1,2\n3,4\n" - - it 'work on array', -> - data = stringify [ ['1', '2'], ['3', '4']] - data.should.eql "1,2\n3,4\n" - - it 'pass options', -> - data = stringify [ {a: '1', b: '2'}, {a: '3', b: '4'}], quoted: true, eof: false - data.should.eql '"1","2"\n"3","4"' - - it 'catch error', -> - (-> - stringify([ 1, {a: '3', b: '4'}]) - ).should.throw 'Invalid Record: expect an array or an object, got 1' diff --git a/packages/csv-stringify/test/api.sync.js b/packages/csv-stringify/test/api.sync.js new file mode 100644 index 00000000..2a97b120 --- /dev/null +++ b/packages/csv-stringify/test/api.sync.js @@ -0,0 +1,37 @@ +import "should"; +import { stringify } from "../lib/sync.js"; + +describe("sync", function () { + it("work on object", function () { + const data = stringify([ + { a: "1", b: "2" }, + { a: "3", b: "4" }, + ]); + data.should.eql("1,2\n3,4\n"); + }); + + it("work on array", function () { + const data = stringify([ + ["1", "2"], + ["3", "4"], + ]); + data.should.eql("1,2\n3,4\n"); + }); + + it("pass options", function () { + const data = stringify( + [ + { a: "1", b: "2" }, + { a: "3", b: "4" }, + ], + { quoted: true, eof: false }, + ); + data.should.eql('"1","2"\n"3","4"'); + }); + + it("catch error", function () { + (() => { + stringify([1, { a: "3", b: "4" }]); + }).should.throw("Invalid Record: expect an array or an object, got 1"); + }); +}); diff --git a/packages/csv-stringify/test/api.types.sync.ts b/packages/csv-stringify/test/api.types.sync.ts index 87cf315d..18bb9b15 100644 --- a/packages/csv-stringify/test/api.types.sync.ts +++ b/packages/csv-stringify/test/api.types.sync.ts @@ -1,53 +1,55 @@ - -import 'should' +import "should"; import { stringify, - RecordDelimiter, Cast, PlainObject, Input, - ColumnOption, CastingContext, -Options -} from '../lib/sync.js' - -describe('API Types', () => { + RecordDelimiter, + Cast, + PlainObject, + Input, + ColumnOption, + CastingContext, + Options, +} from "../lib/sync.js"; - it('stringify return string', () => { - const input: Input = [[1,2,3]]; - const stringifier: string = stringify(input) - stringifier - }) +describe("API Types", () => { + it("stringify return string", () => { + const input: Input = [[1, 2, 3]]; + const stringifier: string = stringify(input); + stringifier; + }); - it('Options', () => { + it("Options", () => { (options: Options) => { - const rd: RecordDelimiter | undefined = options.record_delimiter - const cast = options.cast - const castBoolean : Cast | undefined = cast?.boolean - const columns: ReadonlyArray | PlainObject | undefined = options.columns - return [ - rd, castBoolean, columns - ] - } - }) - - it('CastingContext', () => { + const rd: RecordDelimiter | undefined = options.record_delimiter; + const cast = options.cast; + const castBoolean: Cast | undefined = cast?.boolean; + const columns: + | ReadonlyArray + | PlainObject + | undefined = options.columns; + return [rd, castBoolean, columns]; + }; + }); + + it("CastingContext", () => { const options: Options = { cast: { boolean: (value: boolean, context: CastingContext) => { - return `${value} ${context.index}` - } - } - } - return options - }) + return `${value} ${context.index}`; + }, + }, + }; + return options; + }); - it('allows cast to return an object', () => { + it("allows cast to return an object", () => { const options: Options = { cast: { boolean: (value: boolean) => ({ value: value.toString(), - delimiter: ';', - quote: false - }) - } - } - }) - -}) + delimiter: ";", + quote: false, + }), + }, + }; + }); +}); diff --git a/packages/csv-stringify/test/api.types.ts b/packages/csv-stringify/test/api.types.ts index 8953bb08..851b8d0a 100644 --- a/packages/csv-stringify/test/api.types.ts +++ b/packages/csv-stringify/test/api.types.ts @@ -1,172 +1,175 @@ +import "should"; +import { + stringify, + CastingContext, + Options, + Stringifier, +} from "../lib/index.js"; +import { stringify as stringifySync } from "../lib/index.js"; -import 'should' -import { stringify, CastingContext, Options, Stringifier } from '../lib/index.js' -import { stringify as stringifySync } from '../lib/index.js' - -describe('API Types', () => { - - describe('Parser', () => { - - it('Expose options', () => { - const stringifier: Stringifier = stringify() - const options: Options = stringifier.options - const keys: any = Object.keys(options) - keys.sort().should.eql([ - 'bom', 'cast', 'columns', 'delimiter', 'eof', 'escape', - 'escape_formulas', 'header', 'on_record', 'quote', 'quoted', - 'quoted_empty', 'quoted_match', 'quoted_string', 'record_delimiter' - ]) - }) - - it('Receive Callback', (next) => { - stringify([['a'], ['b']], function(err: Error | undefined, output: string){ - if(err !== undefined){ - output.should.eql('a\nb') - } - next(err) - }) - }) - - }) - - describe('Options', () => { - - it('bom', () => { - const options: Options = {} - options.bom = true - }) - - it('cast', () => { - const options: Options = {} +describe("API Types", () => { + describe("Parser", () => { + it("Expose options", () => { + const stringifier: Stringifier = stringify(); + const options: Options = stringifier.options; + const keys: any = Object.keys(options); + keys + .sort() + .should.eql([ + "bom", + "cast", + "columns", + "delimiter", + "eof", + "escape", + "escape_formulas", + "header", + "on_record", + "quote", + "quoted", + "quoted_empty", + "quoted_match", + "quoted_string", + "record_delimiter", + ]); + }); + + it("Receive Callback", (next) => { + stringify( + [["a"], ["b"]], + function (err: Error | undefined, output: string) { + if (err !== undefined) { + output.should.eql("a\nb"); + } + next(err); + }, + ); + }); + }); + + describe("Options", () => { + it("bom", () => { + const options: Options = {}; + options.bom = true; + }); + + it("cast", () => { + const options: Options = {}; options.cast = { boolean: (value: boolean) => { - return value ? 'true': 'false' + return value ? "true" : "false"; }, date: (value: Date) => { - return value ? 'true': 'false' + return value ? "true" : "false"; }, number: (value: number) => { - return value ? 'true': 'false' + return value ? "true" : "false"; }, bigint: (value: bigint) => { - return value ? 'true': 'false' + return value ? "true" : "false"; }, object: (value: object) => { - return value ? 'true': 'false' + return value ? "true" : "false"; }, string: (value: string) => { - return value ? 'true': 'false' + return value ? "true" : "false"; }, - } - }) - - it('columns', () => { - const options: Options = {} - options.columns = [ - 'b', - 'a' - ] - options.columns = [ - { key: 'b' }, - { key: 'a' } - ] + }; + }); + + it("columns", () => { + const options: Options = {}; + options.columns = ["b", "a"]; + options.columns = [{ key: "b" }, { key: "a" }]; options.columns = [ { key: "b", header: "B" }, - { key: "a" , header: "A" }, + { key: "a", header: "A" }, "c", { key: "d" }, ]; options.columns = { - field1: 'column1', - field3: 'column3' - } - }) - + field1: "column1", + field3: "column3", + }; + }); + it("columns as const", () => { const options: Options = {}; options.columns = ["b", "a"]; options.columns = ["b", "a"] as const; }); - it('delimiter', () => { - const options: Options = {} - options.delimiter = ':' - options.delimiter = Buffer.from(':') - }) - - it('escape', () => { - const options: Options = {} - options.escape = '"' - options.escape = Buffer.from('"') - }) - - it('escape_formulas', () => { - const options: Options = {} - options.escape_formulas = true - }) - - it('header', () => { - const options: Options = {} - options.header = true - }) - - it('quote', () => { - const options: Options = {} - options.quote = "\"" - options.quote = Buffer.from("\"") - options.quote = true - options.quote = false - }) - - it('quoted', () => { - const options: Options = {} - options.quoted = true - options.quoted = false - }) - - it('quoted_empty', () => { - const options: Options = {} - options.quoted_empty = true - options.quoted_empty = false - }) - - it('quoted_match', () => { - const options: Options = {} - options.quoted_match = "\"" - options.quoted_match = /\"/ - options.quoted_match = [ - "\"", - /\"/ - ] - }) - - it('quoted_string', () => { - const options: Options = {} - options.quoted_string = true - options.quoted_string = false - }) - - it('record_delimiter', () => { - const options: Options = {} - options.record_delimiter = '|' - options.record_delimiter = Buffer.from('|') - }) - - }) - - describe('CastingContext', () => { - - it('all properties', () => { + it("delimiter", () => { + const options: Options = {}; + options.delimiter = ":"; + options.delimiter = Buffer.from(":"); + }); + + it("escape", () => { + const options: Options = {}; + options.escape = '"'; + options.escape = Buffer.from('"'); + }); + + it("escape_formulas", () => { + const options: Options = {}; + options.escape_formulas = true; + }); + + it("header", () => { + const options: Options = {}; + options.header = true; + }); + + it("quote", () => { + const options: Options = {}; + options.quote = '"'; + options.quote = Buffer.from('"'); + options.quote = true; + options.quote = false; + }); + + it("quoted", () => { + const options: Options = {}; + options.quoted = true; + options.quoted = false; + }); + + it("quoted_empty", () => { + const options: Options = {}; + options.quoted_empty = true; + options.quoted_empty = false; + }); + + it("quoted_match", () => { + const options: Options = {}; + options.quoted_match = '"'; + options.quoted_match = /\"/; + options.quoted_match = ['"', /\"/]; + }); + + it("quoted_string", () => { + const options: Options = {}; + options.quoted_string = true; + options.quoted_string = false; + }); + + it("record_delimiter", () => { + const options: Options = {}; + options.record_delimiter = "|"; + options.record_delimiter = Buffer.from("|"); + }); + }); + + describe("CastingContext", () => { + it("all properties", () => { (context: CastingContext) => { - const column: number|string|undefined = context.column - const header: boolean = context.header - const index: number = context.index - const records: number = context.records - return [ - column, header, index, records - ] - } - }) - }) - -}) + const column: number | string | undefined = context.column; + const header: boolean = context.header; + const index: number = context.index; + const records: number = context.records; + return [column, header, index, records]; + }; + }); + }); +}); diff --git a/packages/csv-stringify/test/api.web_stream.coffee b/packages/csv-stringify/test/api.web_stream.coffee deleted file mode 100644 index d0744f2e..00000000 --- a/packages/csv-stringify/test/api.web_stream.coffee +++ /dev/null @@ -1,18 +0,0 @@ - -# import {generate as generateStream} from 'csv-generate/stream' -# import {stringify as stringifyStream} from '../lib/stream.js' -# import {stringify as stringifyClassic} from '../lib/index.js' -# -# describe 'api stream', -> -# -# it.skip 'perf stream with iterator', -> -# generator = generateStream -# objectMode: true, -# length: 5 -# stringifier = stringifyStream() -# stream = generator.pipeThrough stringifier -# chunks = [] -# for await chunk from stream -# chunks.push chunk -# # records.length.should.eql 5 -# console.log(chunks) diff --git a/packages/csv-stringify/test/api.web_stream.js b/packages/csv-stringify/test/api.web_stream.js new file mode 100644 index 00000000..4a67386a --- /dev/null +++ b/packages/csv-stringify/test/api.web_stream.js @@ -0,0 +1,21 @@ +import "should"; +// import { generate as generateStream } from "csv-generate/stream"; +// import { stringify as stringifyStream } from "../lib/stream.js"; +// import { stringify as stringifyClassic } from "../lib/index.js"; + +describe("api stream", function () { + it.skip("perf stream with iterator", function () { + // const generator = generateStream({ + // objectMode: true, + // length: 5 + // }) + // const stringifier = stringifyStream() + // const stream = generator.pipeThrough(stringifier) + // const chunks = [] + // for await (const chunk of stream) { + // chunks.push(chunk) + // } + // // records.length.should.eql 5 + // console.log(chunks) + }); +}); diff --git a/packages/csv-stringify/test/api.write.coffee b/packages/csv-stringify/test/api.write.coffee deleted file mode 100644 index e241d3e8..00000000 --- a/packages/csv-stringify/test/api.write.coffee +++ /dev/null @@ -1,127 +0,0 @@ - -import { stringify } from '../lib/index.js' - -describe 'API write', -> - - it 'arrays', (next) -> - count = 0 - data = '' - stringifier = stringify eof: false - stringifier.on 'readable', -> - while(d = stringifier.read()) - data += d - stringifier.on 'record', (record, index) -> - record.should.be.an.instanceof Array - count.should.eql index - count++ - stringifier.on 'finish', -> - count.should.eql 10 - data.should.eql """ - Test 0,0,\"\"\"\" - Test 1,1,\"\"\"\" - Test 2,2,\"\"\"\" - Test 3,3,\"\"\"\" - Test 4,4,\"\"\"\" - Test 5,5,\"\"\"\" - Test 6,6,\"\"\"\" - Test 7,7,\"\"\"\" - Test 8,8,\"\"\"\" - Test 9,9,\"\"\"\" - """ - next() - for i in [0...10] - stringifier.write ["Test #{i}", i, '"'] - stringifier.end() - - it 'objects with column options', (next) -> - count = 0 - data = '' - stringifier = stringify(columns: ['name','value','escape'], eof: false) - stringifier.on 'readable', -> - while(d = stringifier.read()) - data += d - stringifier.on 'record', (record, index) -> - record.should.be.an.Object - record.should.not.be.an.instanceOf Array - count.should.eql index - count++ - stringifier.on 'finish', -> - count.should.eql 10 - data.should.eql """ - Test 0,0,\"\"\"\" - Test 1,1,\"\"\"\" - Test 2,2,\"\"\"\" - Test 3,3,\"\"\"\" - Test 4,4,\"\"\"\" - Test 5,5,\"\"\"\" - Test 6,6,\"\"\"\" - Test 7,7,\"\"\"\" - Test 8,8,\"\"\"\" - Test 9,9,\"\"\"\" - """ - next() - for i in [0...10] - stringifier.write {name: "Test #{i}", value:i, escape: '"', ovni: "ET #{i}"} - stringifier.end() - - it 'throw error if not writable', (next) -> - stringifier = stringify() - stringifier.on 'error', (err) -> - err.message.should.eql 'write after end' - next() - stringifier.write ['abc','123'] - stringifier.end() - stringifier.write ['def', '456'] - - it 'accepts full write API', (next) -> - stringifier = stringify() - stringifier.on 'finish', -> - next() - stringifier.write ['abc','123'], 'utf8' , (e,d) -> - stringifier.end() - - it 'write invalid record null', (next) -> - stringifier = stringify() - stringifier.on 'error', (err) -> - # Until Node.js 13 - err.message.should.eql 'May not write null values to stream' - next() - stringifier.on 'end', -> - next Error 'Oh no!' - try - stringifier.write null, 'utf8' , (e,d) -> - stringifier.end() - catch err - # Since Node.js 14 - err.message.should.eql 'May not write null values to stream' - next() - - it 'write invalid record true', (next) -> - stringifier = stringify() - stringifier.on 'error', (err) -> - err.message.should.eql 'Invalid Record: expect an array or an object, got true' - next() - stringifier.on 'end', -> - next Error 'Oh no!' - stringifier.write true, 'utf8' , (e,d) -> - stringifier.end() - - describe 'input', -> - - it 'array are immutable', (next) -> - chunks = [['a', 'b'], ['c', 'd']] - stringify chunks, (err) -> - chunks.should.eql [['a', 'b'], ['c', 'd']] unless err - next err - - it 'object (with columns are immutable', (next) -> - chunks = [{a: 1, b: 2}, {a: 3, b: 4}] - stringify chunks, columns: ['b'], (err, data) -> - chunks.should.eql [{a: 1, b: 2}, {a: 3, b: 4}] unless err - next err - - it 'object (without columns) are immutable', (next) -> - chunks = [{a: 1, b: 2}, {a: 3, b: 4}] - stringify chunks, (err, data) -> - chunks.should.eql [{a: 1, b: 2}, {a: 3, b: 4}] unless err - next err diff --git a/packages/csv-stringify/test/api.write.js b/packages/csv-stringify/test/api.write.js new file mode 100644 index 00000000..fc3665ad --- /dev/null +++ b/packages/csv-stringify/test/api.write.js @@ -0,0 +1,197 @@ +import "should"; +import dedent from "dedent"; +import { stringify } from "../lib/index.js"; + +describe("API write", function () { + it("arrays", function (next) { + let count = 0; + let data = ""; + const stringifier = stringify({ eof: false }); + stringifier.on("readable", () => { + let d; + while ((d = stringifier.read())) { + data += d; + } + }); + stringifier.on("record", (record, index) => { + record.should.be.an.instanceof(Array); + count.should.eql(index); + count++; + }); + stringifier.on("finish", () => { + count.should.eql(10); + data.should.eql( + dedent` + Test 0,0,"""" + Test 1,1,"""" + Test 2,2,"""" + Test 3,3,"""" + Test 4,4,"""" + Test 5,5,"""" + Test 6,6,"""" + Test 7,7,"""" + Test 8,8,"""" + Test 9,9,"""" + `, + ); + next(); + }); + for (let i = 0; i < 10; i++) { + stringifier.write([`Test ${i}`, i, '"']); + } + stringifier.end(); + }); + + it("objects with column options", function (next) { + let count = 0; + let data = ""; + const stringifier = stringify({ + columns: ["name", "value", "escape"], + eof: false, + }); + stringifier.on("readable", () => { + let d; + while ((d = stringifier.read())) { + data += d; + } + }); + stringifier.on("record", (record, index) => { + record.should.be.an.Object(); + record.should.not.be.an.instanceOf(Array); + count.should.eql(index); + count++; + }); + stringifier.on("finish", () => { + count.should.eql(10); + data.should.eql( + dedent` + Test 0,0,"""" + Test 1,1,"""" + Test 2,2,"""" + Test 3,3,"""" + Test 4,4,"""" + Test 5,5,"""" + Test 6,6,"""" + Test 7,7,"""" + Test 8,8,"""" + Test 9,9,"""" + `, + ); + next(); + }); + for (let i = 0; i < 10; i++) { + stringifier.write({ + name: `Test ${i}`, + value: i, + escape: '"', + ovni: `ET ${i}`, + }); + } + stringifier.end(); + }); + + it("throw error if not writable", function (next) { + const stringifier = stringify(); + stringifier.on("error", (err) => { + err.message.should.eql("write after end"); + next(); + }); + stringifier.write(["abc", "123"]); + stringifier.end(); + stringifier.write(["def", "456"]); + }); + + it("accepts full write API", function (next) { + const stringifier = stringify(); + stringifier.on("finish", () => { + next(); + }); + stringifier.write(["abc", "123"], "utf8", () => { + stringifier.end(); + }); + }); + + it("write invalid record null", function (next) { + const stringifier = stringify(); + stringifier.on("error", (err) => { + // Until Node.js 13 + err.message.should.eql("May not write null values to stream"); + next(); + }); + stringifier.on("end", () => { + next(Error("Oh no!")); + }); + try { + stringifier.write(null, "utf8", () => { + stringifier.end(); + }); + } catch (err) { + // Since Node.js 14 + err.message.should.eql("May not write null values to stream"); + next(); + } + }); + + it("write invalid record true", function (next) { + const stringifier = stringify(); + stringifier.on("error", (err) => { + err.message.should.eql( + "Invalid Record: expect an array or an object, got true", + ); + next(); + }); + stringifier.on("end", () => { + next(Error("Oh no!")); + }); + stringifier.write(true, "utf8", () => { + stringifier.end(); + }); + }); + + describe("input", function () { + it("array are immutable", function (next) { + const chunks = [ + ["a", "b"], + ["c", "d"], + ]; + stringify(chunks, (err) => { + if (!err) + chunks.should.eql([ + ["a", "b"], + ["c", "d"], + ]); + next(err); + }); + }); + + it("object (with columns are immutable", function (next) { + const chunks = [ + { a: 1, b: 2 }, + { a: 3, b: 4 }, + ]; + stringify(chunks, { columns: ["b"] }, (err) => { + if (!err) + chunks.should.eql([ + { a: 1, b: 2 }, + { a: 3, b: 4 }, + ]); + next(err); + }); + }); + + it("object (without columns) are immutable", function (next) { + const chunks = [ + { a: 1, b: 2 }, + { a: 3, b: 4 }, + ]; + stringify(chunks, (err) => { + if (!err) + chunks.should.eql([ + { a: 1, b: 2 }, + { a: 3, b: 4 }, + ]); + next(err); + }); + }); + }); +}); diff --git a/packages/csv-stringify/test/loaders/all.js b/packages/csv-stringify/test/loaders/all.js deleted file mode 100644 index 4e81c344..00000000 --- a/packages/csv-stringify/test/loaders/all.js +++ /dev/null @@ -1,15 +0,0 @@ -import * as coffee from "./coffee.js"; -import * as ts from "ts-node/esm"; - -const coffeeRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; -const tsRegex = /\.ts$/; - -export function load(url, context, next) { - if (coffeeRegex.test(url)) { - return coffee.load.apply(this, arguments); - } - if (tsRegex.test(url)) { - return ts.load.apply(this, arguments); - } - return next(url, context, next); -} diff --git a/packages/csv-stringify/test/loaders/coffee.js b/packages/csv-stringify/test/loaders/coffee.js deleted file mode 100644 index 75b15abe..00000000 --- a/packages/csv-stringify/test/loaders/coffee.js +++ /dev/null @@ -1,20 +0,0 @@ -import CoffeeScript from "coffeescript"; - -// See https://github.com/nodejs/node/issues/36396 -const extensionsRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; - -export async function load(url, context, next) { - if (extensionsRegex.test(url)) { - const format = "module"; - const { source: rawSource } = await next(url, { format }); - const source = CoffeeScript.compile(rawSource.toString(), { - bare: true, - inlineMap: true, - filename: url, - header: false, - sourceMap: false, - }); - return { format, source }; - } - return next(url, context); -} diff --git a/packages/csv-stringify/test/loaders/legacy/all.js b/packages/csv-stringify/test/loaders/legacy/all.js deleted file mode 100644 index f5e57e54..00000000 --- a/packages/csv-stringify/test/loaders/legacy/all.js +++ /dev/null @@ -1,36 +0,0 @@ -import * as coffee from "./coffee.js"; -import * as ts from "ts-node/esm"; - -const coffeeRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; -const tsRegex = /\.ts$/; - -export function resolve(specifier) { - if (coffeeRegex.test(specifier)) { - return coffee.resolve.apply(this, arguments); - } - if (tsRegex.test(specifier)) { - return ts.resolve.apply(this, arguments); - } - return ts.resolve.apply(this, arguments); -} - -export function getFormat(url) { - if (coffeeRegex.test(url)) { - return coffee.getFormat.apply(this, arguments); - } - if (tsRegex.test(url)) { - return ts.getFormat.apply(this, arguments); - } - return ts.getFormat.apply(this, arguments); -} - -export function transformSource(source, context) { - const { url } = context; - if (coffeeRegex.test(url)) { - return coffee.transformSource.apply(this, arguments); - } - if (tsRegex.test(url)) { - return ts.transformSource.apply(this, arguments); - } - return ts.transformSource.apply(this, arguments); -} diff --git a/packages/csv-stringify/test/loaders/legacy/coffee.js b/packages/csv-stringify/test/loaders/legacy/coffee.js deleted file mode 100644 index 6a9975db..00000000 --- a/packages/csv-stringify/test/loaders/legacy/coffee.js +++ /dev/null @@ -1,50 +0,0 @@ -// coffeescript-loader.mjs -import { URL, pathToFileURL } from "url"; -import CoffeeScript from "coffeescript"; -import { cwd } from "process"; - -const baseURL = pathToFileURL(`${cwd()}/`).href; - -// CoffeeScript files end in .coffee, .litcoffee or .coffee.md. -const extensionsRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; - -export function resolve(specifier, context, defaultResolve) { - const { parentURL = baseURL } = context; - // Node.js normally errors on unknown file extensions, so return a URL for - // specifiers ending in the CoffeeScript file extensions. - if (extensionsRegex.test(specifier)) { - return { - url: new URL(specifier, parentURL).href, - stop: true, - }; - } - // Let Node.js handle all other specifiers. - return defaultResolve(specifier, context, defaultResolve); -} - -export function getFormat(url, context, defaultGetFormat) { - // Now that we patched resolve to let CoffeeScript URLs through, we need to - // tell Node.js what format such URLs should be interpreted as. For the - // purposes of this loader, all CoffeeScript URLs are ES modules. - if (extensionsRegex.test(url)) { - return { - format: "module", - stop: true, - }; - } - // Let Node.js handle all other URLs. - return defaultGetFormat(url, context, defaultGetFormat); -} - -export function transformSource(source, context, defaultTransformSource) { - const { url } = context; - - if (extensionsRegex.test(url)) { - return { - source: CoffeeScript.compile(String(source), { bare: true }), - }; - } - - // Let Node.js handle all other sources. - return defaultTransformSource(source, context, defaultTransformSource); -} diff --git a/packages/csv-stringify/test/option.bom.coffee b/packages/csv-stringify/test/option.bom.coffee deleted file mode 100644 index 70d90f2a..00000000 --- a/packages/csv-stringify/test/option.bom.coffee +++ /dev/null @@ -1,56 +0,0 @@ - -import { stringify } from '../lib/index.js' -import { stringify as stringifySync } from '../lib/sync.js' - -describe 'Option `bom`', -> - - it 'validate', -> - (-> - stringify [], bom: 'invalid', (->) - ).should.throw - code: 'CSV_OPTION_BOOLEAN_INVALID_TYPE' - message: 'option `bom` is optional and must be a boolean value, got "invalid"' - - it 'empty', (next) -> - stringify [], bom: true, (err, data) -> - data.should.eql Buffer.from([239, 187, 191]).toString() - next() - - it 'value is `true`', (next) -> - stringify [ - value: 'ok' - ], bom: true, (err, data) -> - data.should.eql Buffer.from([239, 187, 191]).toString()+'ok\n' - next() - - it 'value is `false`', (next) -> - stringify [ - value: 'ok' - ], bom: false, (err, data) -> - data.should.eql 'ok\n' - next() - - describe 'sync ', -> - - it 'validate', -> - (-> - stringifySync [], bom: 'invalid' - ).should.throw - code: 'CSV_OPTION_BOOLEAN_INVALID_TYPE' - message: 'option `bom` is optional and must be a boolean value, got "invalid"' - - it 'empty', -> - data = stringifySync [], bom: true - data.should.eql Buffer.from([239, 187, 191]).toString() - - it 'value is `true`', -> - res = stringifySync [ - value: 'ok' - ], bom: true - res.should.eql '\ufeffok\n' - - it 'value is `false`', -> - res = stringifySync [ - value: 'ok' - ], bom: false - res.should.eql 'ok\n' diff --git a/packages/csv-stringify/test/option.bom.js b/packages/csv-stringify/test/option.bom.js new file mode 100644 index 00000000..82e6a882 --- /dev/null +++ b/packages/csv-stringify/test/option.bom.js @@ -0,0 +1,93 @@ +import "should"; +import { stringify } from "../lib/index.js"; +import { stringify as stringifySync } from "../lib/sync.js"; + +describe("Option `bom`", function () { + it("validate", function () { + (() => { + stringify([], { bom: "invalid" }, () => {}); + }).should.throw({ + code: "CSV_OPTION_BOOLEAN_INVALID_TYPE", + message: + 'option `bom` is optional and must be a boolean value, got "invalid"', + }); + }); + + it("empty", function (next) { + stringify([], { bom: true }, (err, data) => { + data.should.eql(Buffer.from([239, 187, 191]).toString()); + next(); + }); + }); + + it("value is `true`", function (next) { + stringify( + [ + { + value: "ok", + }, + ], + { bom: true }, + (err, data) => { + data.should.eql(Buffer.from([239, 187, 191]).toString() + "ok\n"); + next(); + }, + ); + }); + + it("value is `false`", function (next) { + stringify( + [ + { + value: "ok", + }, + ], + { bom: false }, + (err, data) => { + data.should.eql("ok\n"); + next(); + }, + ); + }); + + describe("sync ", function () { + it("validate", function () { + (() => { + stringifySync([], { bom: "invalid" }); + }).should.throw({ + code: "CSV_OPTION_BOOLEAN_INVALID_TYPE", + message: + 'option `bom` is optional and must be a boolean value, got "invalid"', + }); + }); + + it("empty", function () { + const data = stringifySync([], { bom: true }); + data.should.eql(Buffer.from([239, 187, 191]).toString()); + }); + + it("value is `true`", function () { + const res = stringifySync( + [ + { + value: "ok", + }, + ], + { bom: true }, + ); + res.should.eql("\ufeffok\n"); + }); + + it("value is `false`", function () { + const res = stringifySync( + [ + { + value: "ok", + }, + ], + { bom: false }, + ); + res.should.eql("ok\n"); + }); + }); +}); diff --git a/packages/csv-stringify/test/option.cast.coffee b/packages/csv-stringify/test/option.cast.coffee deleted file mode 100644 index afa949c9..00000000 --- a/packages/csv-stringify/test/option.cast.coffee +++ /dev/null @@ -1,198 +0,0 @@ - -import { stringify } from '../lib/index.js' - -describe 'Option `cast`', -> - - describe 'default', -> - - it 'default BigInt formatter', (next) -> - stringify [ - value: BigInt 9007199254740991 - ], (err, data) -> - data.should.eql '9007199254740991\n' unless err - next err - - describe 'udf', -> - - it 'handle string formatter', (next) -> - stringify [ - value: 'ok' - ], {cast: string: -> 'X'}, (err, data) -> - data.should.eql 'X\n' unless err - next err - - it 'handle boolean formatter', (next) -> - stringify [ - value: true - ], {cast: boolean: -> 'X'}, (err, data) -> - data.should.eql 'X\n' unless err - next err - - it 'handle date formatter', (next) -> - stringify [ - value: new Date - ], {cast: date: -> 'X'}, (err, data) -> - data.should.eql 'X\n' unless err - next err - - it 'handle number formatter', (next) -> - stringify [ - value: 3.14 - ], {cast: number: (value) -> '' + value * 2 }, (err, data) -> - data.should.eql '6.28\n' unless err - next err - - it 'handle bigint formatter', (next) -> - stringify [ - value: BigInt(9007199254740991) - ], {cast: bigint: (value) -> '' + value / BigInt(2) }, (err, data) -> - data.should.eql '4503599627370495\n' unless err - next err - - it 'handle object formatter', (next) -> - stringify [ - value: a: 1 - ], {cast: object: -> 'X'}, (err, data) -> - data.should.eql 'X\n' unless err - next err - - it 'catch error', (next) -> - stringify [ - value: true - ], {cast: boolean: (value) -> throw Error 'Catchme'}, (err, data) -> - err.message.should.eql 'Catchme' - next() - - it 'return null', (next) -> - # We might change this behavior in futures version, allowing to skip a field - # if the return value is null or undefined, see #83 - stringify [ - { a: true, b: true } - { a: false, b: true } - { a: true, b: false } - { a: false, b: false } - ], {cast: boolean: (value) -> if value then '1' else null}, (err, data) -> - data.trim().should.eql """ - 1,1 - ,1 - 1, - , - """ - next() - - it 'boolean must return a string', (next) -> - stringify [ - value: true - ], {cast: boolean: (value) -> if value then 1 else 0}, (err, data) -> - err.message.should.eql 'Invalid Casting Value: returned value must return a string, an object, null or undefined, got 1' - next() - - describe 'context', -> - - it 'expose the expected properties', (next) -> - stringify [ - ['a'] - ], cast: string: (value, context) -> - Object.keys(context).sort().should.eql [ - 'column', 'header', 'index', 'records' - ] - null - , next - - it 'index and column on array', (next) -> - stringify [ - [true, false] - ], cast: boolean: (value, context) -> - if value - context.index.should.equal 0 - context.column.should.equal 0 - 'yes' - else - context.index.should.equal 1 - context.column.should.equal 1 - 'no' - , (err, data) -> - data.trim().should.eql 'yes,no' unless err - next err - - it 'index and column on object', (next) -> - stringify [ - is_true: true - is_false: false - ], cast: boolean: (value, context) -> - if value - context.index.should.equal 0 - context.column.should.equal 'is_true' - 'yes' - else - context.index.should.equal 1 - context.column.should.equal 'is_false' - 'no' - , (err, data) -> - data.trim().should.eql 'yes,no' unless err - next err - - it 'header', (next) -> - stringify [ - ['value 1'] - ['value 2'] - ], header: true, columns: ['header'], cast: string: (value, context) -> - "#{value} | #{context.header}" - , (err, data) -> - data.trim().should.eql """ - header | true - value 1 | false - value 2 | false - """ - next err - - describe 'option header', -> - - it 'records with header and columns as array', (next) -> - stringify [ - ['value 1'] - ['value 2'] - ], header: true, columns: ['header'], cast: string: (value, context) -> - "#{context.records}" - , (err, data) -> - data.trim().should.eql '0\n0\n1' unless err - next err - - it 'records without header', (next) -> - stringify [ - ['record 1'] - ['record 2'] - ], cast: string: (value, context) -> - "#{context.records}" - , (err, data) -> - data.trim().should.eql '0\n1' unless err - next err - - describe 'info object', -> - - it 'modify escape', (next) -> - stringify [ - ['record " 1'] - ['record " 2'] - ['record " 3'] - ], eof: false, escape: '#', cast: string: (value, context) -> - return value if context.records is 2 - value: value, escape: ['\\', '"'][context.records] - , (err, data) -> - data.should.eql """ - "record \\" 1" - "record "" 2" - "record #" 3" - """ - next err - - it 'validate and normalize local options', (next) -> - stringify [ - ['invalid cast'] - ], eof: false, escape: '#', cast: string: (value) -> - value: value, quote: NaN - , (err) -> - err.code.should.eql 'CSV_OPTION_QUOTE_INVALID_TYPE' - next() - - diff --git a/packages/csv-stringify/test/option.cast.js b/packages/csv-stringify/test/option.cast.js new file mode 100644 index 00000000..68be293a --- /dev/null +++ b/packages/csv-stringify/test/option.cast.js @@ -0,0 +1,344 @@ +import "should"; +import dedent from "dedent"; +import { stringify } from "../lib/index.js"; + +describe("Option `cast`", function () { + describe("default", function () { + it("default BigInt formatter", function (next) { + stringify( + [ + { + value: BigInt(9007199254740991), + }, + ], + (err, data) => { + if (!err) data.should.eql("9007199254740991\n"); + next(err); + }, + ); + }); + }); + + describe("udf", function () { + it("handle string formatter", function (next) { + stringify( + [ + { + value: "ok", + }, + ], + { cast: { string: () => "X" } }, + (err, data) => { + if (!err) data.should.eql("X\n"); + next(err); + }, + ); + }); + + it("handle boolean formatter", function (next) { + stringify( + [ + { + value: true, + }, + ], + { cast: { boolean: () => "X" } }, + (err, data) => { + if (!err) data.should.eql("X\n"); + next(err); + }, + ); + }); + + it("handle date formatter", function (next) { + stringify( + [ + { + value: new Date(), + }, + ], + { cast: { date: () => "X" } }, + (err, data) => { + if (!err) data.should.eql("X\n"); + next(err); + }, + ); + }); + + it("handle number formatter", function (next) { + stringify( + [ + { + value: 3.14, + }, + ], + { cast: { number: (value) => "" + value * 2 } }, + (err, data) => { + if (!err) data.should.eql("6.28\n"); + next(err); + }, + ); + }); + + it("handle bigint formatter", function (next) { + stringify( + [ + { + value: BigInt(9007199254740991), + }, + ], + { cast: { bigint: (value) => "" + value / BigInt(2) } }, + (err, data) => { + if (!err) data.should.eql("4503599627370495\n"); + next(err); + }, + ); + }); + + it("handle object formatter", function (next) { + stringify( + [ + { + value: { a: 1 }, + }, + ], + { cast: { object: () => "X" } }, + (err, data) => { + if (!err) data.should.eql("X\n"); + next(err); + }, + ); + }); + + it("catch error", function (next) { + stringify( + [ + { + value: true, + }, + ], + { + cast: { + boolean: () => { + throw Error("Catchme"); + }, + }, + }, + (err) => { + err.message.should.eql("Catchme"); + next(); + }, + ); + }); + + it("return null", function (next) { + stringify( + [ + { a: true, b: true }, + { a: false, b: true }, + { a: true, b: false }, + { a: false, b: false }, + ], + { cast: { boolean: (value) => (value ? "1" : null) } }, + (err, data) => { + data.trim().should.eql("1,1\n,1\n1,\n,"); + next(); + }, + ); + }); + + it("boolean must return a string", function (next) { + stringify( + [ + { + value: true, + }, + ], + { cast: { boolean: (value) => (value ? 1 : 0) } }, + (err) => { + err.message.should.eql( + "Invalid Casting Value: returned value must return a string, an object, null or undefined, got 1", + ); + next(); + }, + ); + }); + }); + + describe("context", function () { + it("expose the expected properties", function (next) { + stringify( + [["a"]], + { + cast: { + string: (value, context) => { + Object.keys(context) + .sort() + .should.eql(["column", "header", "index", "records"]); + return null; + }, + }, + }, + next, + ); + }); + + it("index and column on array", function (next) { + stringify( + [[true, false]], + { + cast: { + boolean: (value, context) => { + if (value) { + context.index.should.equal(0); + context.column.should.equal(0); + return "yes"; + } else { + context.index.should.equal(1); + context.column.should.equal(1); + return "no"; + } + }, + }, + }, + (err, data) => { + if (!err) data.trim().should.eql("yes,no"); + next(err); + }, + ); + }); + + it("index and column on object", function (next) { + stringify( + [ + { + is_true: true, + is_false: false, + }, + ], + { + cast: { + boolean: (value, context) => { + if (value) { + context.index.should.equal(0); + context.column.should.equal("is_true"); + return "yes"; + } else { + context.index.should.equal(1); + context.column.should.equal("is_false"); + return "no"; + } + }, + }, + }, + (err, data) => { + if (!err) data.trim().should.eql("yes,no"); + next(err); + }, + ); + }); + + it("header", function (next) { + stringify( + [["value 1"], ["value 2"]], + { + header: true, + columns: ["header"], + cast: { + string: (value, context) => `${value} | ${context.header}`, + }, + }, + (err, data) => { + if (!err) + data + .trim() + .should.eql("header | true\nvalue 1 | false\nvalue 2 | false"); + next(err); + }, + ); + }); + }); + + describe("option header", function () { + it("records with header and columns as array", function (next) { + stringify( + [["value 1"], ["value 2"]], + { + header: true, + columns: ["header"], + cast: { + string: (value, context) => `${context.records}`, + }, + }, + (err, data) => { + if (!err) data.trim().should.eql("0\n0\n1"); + next(err); + }, + ); + }); + + it("records without header", function (next) { + stringify( + [["record 1"], ["record 2"]], + { + cast: { + string: (value, context) => `${context.records}`, + }, + }, + (err, data) => { + if (!err) data.trim().should.eql("0\n1"); + next(err); + }, + ); + }); + }); + + describe("info object", function () { + it("modify escape", function (next) { + stringify( + [['record " 1'], ['record " 2'], ['record " 3']], + { + eof: false, + escape: "#", + cast: { + string: (value, context) => { + if (context.records === 2) return value; + return { + value: value, + escape: ["\\", '"'][context.records], + }; + }, + }, + }, + (err, data) => { + data.should.eql(dedent` + "record \" 1" + "record "" 2" + "record #" 3" + `); + next(err); + }, + ); + }); + + it("validate and normalize local options", function (next) { + stringify( + [["invalid cast"]], + { + eof: false, + escape: "#", + cast: { + string: (value) => ({ + value: value, + quote: NaN, + }), + }, + }, + (err) => { + err.code.should.eql("CSV_OPTION_QUOTE_INVALID_TYPE"); + next(); + }, + ); + }); + }); +}); diff --git a/packages/csv-stringify/test/option.columns.coffee b/packages/csv-stringify/test/option.columns.coffee deleted file mode 100644 index aec2f955..00000000 --- a/packages/csv-stringify/test/option.columns.coffee +++ /dev/null @@ -1,119 +0,0 @@ - -import { stringify } from '../lib/index.js' - -describe 'Option `columns`', -> - - describe 'definition', -> - - it 'validates option types', -> - (-> - stringify [], columns: true, (->) - ).should.throw 'Invalid option "columns": expect an array or an object' - (-> - stringify [], columns: false, (->) - ).should.throw 'Invalid option "columns": expect an array or an object' - (-> - stringify [], columns: '', (->) - ).should.throw 'Invalid option "columns": expect an array or an object' - (-> - stringify [], columns: (->), (->) - ).should.throw 'Invalid option "columns": expect an array or an object' - - it 'validates column definition', -> - (-> - stringify [], columns: [ - key_does_not_exists: 'yes' - ], (->) - ).should.throw 'Invalid column definition: property "key" is required' - (-> - stringify [], columns: [ - true - ], (->) - ).should.throw 'Invalid column definition: expect a string or an object' - - it 'is an array with column object', (next) -> - stringify [ - {a: '11', b: '12'} - {a: '21', b: '22'} - ], columns: [ - { key: 'b' } - { key: 'a' } - ], (err, records) -> - records.should.eql "12,11\n22,21\n" - next err - - it 'is an array of strings', (next) -> - stringify [ - {a: '11', b: '12'} - {a: '21', b: '22'} - ], columns: [ - 'b' - 'a' - ], (err, records) -> - records.should.eql "12,11\n22,21\n" - next err - - it 'is an array of strings matching nested object', (next) -> - stringify [ - {a: {a1: '1a1', a2: '1a2'}, b: '1b'} - {a: {a1: '2a1', a2: '2a2'}, b: '2b'} - ], columns: [ - 'b' - 'a.a2' - ], (err, records) -> - records.should.eql "1b,1a2\n2b,2a2\n" - next err - - it 'is an array of strings matching nested [object]', (next) -> - stringify [ - {a: [{}, {a1: '1a1', a2: '1a2'}], b: '1b'} - {a: [{}, {a1: '2a1', a2: '2a2'}], b: '2b'} - ], columns: [ - 'b' - 'a[1].a2' - ], (err, records) -> - records.should.eql "1b,1a2\n2b,2a2\n" - next err - - it 'is an array of strings with parent key not matching a nested object', (next) -> - stringify [ - {a: undefined, b: '1b'} - {a: null, b: '2b'} - {a: false, b: '3b'} - ], columns: [ - 'b' - 'a.a2' - ], (err, records) -> - records.should.eql "1b,\n2b,\n3b,\n" - next err - - it 'can still access fields with dots', (next) -> - stringify [ - {'foo.bar': '1'} - {'foo.bar': '2'} - ], header: true, (err, records) -> - records.should.eql "foo.bar\n1\n2\n" unless err - next err - - describe 'input', -> - - it 'is an array, should be the same length', (next) -> - # Since there is not columns set in input options, we just expect - # the output stream to contains 2 fields - stringify [ - [ '20322051544','1979','8.8017226E7','ABC','45','2000-01-01' ] - [ '28392898392','1974','8.8392926E7','DEF','23','2050-11-27' ] - ], columns: ["FIELD_1", "FIELD_2"], (err, data) -> - data.should.eql '20322051544,1979\n28392898392,1974\n' unless err - next err - - it 'is a readable stream', (next) -> - ws = stringify - header: true - columns: field1: 'column1', field3: 'column3' - , (err, data) -> - data.should.eql 'column1,column3\nval11,val13\nval21,val23\n' unless err - next err - ws.write {field1: 'val11', field2: 'val12', field3: 'val13'} - ws.write {field1: 'val21', field2: 'val22', field3: 'val23'} - ws.end() diff --git a/packages/csv-stringify/test/option.columns.js b/packages/csv-stringify/test/option.columns.js new file mode 100644 index 00000000..8a12c48d --- /dev/null +++ b/packages/csv-stringify/test/option.columns.js @@ -0,0 +1,177 @@ +import "should"; +import { stringify } from "../lib/index.js"; + +describe("Option `columns`", function () { + describe("definition", function () { + it("validates option types", function () { + (() => { + stringify([], { columns: true }, () => {}); + }).should.throw('Invalid option "columns": expect an array or an object'); + (() => { + stringify([], { columns: false }, () => {}); + }).should.throw('Invalid option "columns": expect an array or an object'); + (() => { + stringify([], { columns: "" }, () => {}); + }).should.throw('Invalid option "columns": expect an array or an object'); + (() => { + stringify([], { columns: () => {} }, () => {}); + }).should.throw('Invalid option "columns": expect an array or an object'); + }); + + it("validates column definition", function () { + (() => { + stringify( + [], + { + columns: [ + { + key_does_not_exists: "yes", + }, + ], + }, + () => {}, + ); + }).should.throw('Invalid column definition: property "key" is required'); + (() => { + stringify( + [], + { + columns: [true], + }, + () => {}, + ); + }).should.throw( + "Invalid column definition: expect a string or an object", + ); + }); + + it("is an array with column object", function (next) { + stringify( + [ + { a: "11", b: "12" }, + { a: "21", b: "22" }, + ], + { + columns: [{ key: "b" }, { key: "a" }], + }, + (err, records) => { + records.should.eql("12,11\n22,21\n"); + next(err); + }, + ); + }); + + it("is an array of strings", function (next) { + stringify( + [ + { a: "11", b: "12" }, + { a: "21", b: "22" }, + ], + { + columns: ["b", "a"], + }, + (err, records) => { + records.should.eql("12,11\n22,21\n"); + next(err); + }, + ); + }); + + it("is an array of strings matching nested object", function (next) { + stringify( + [ + { a: { a1: "1a1", a2: "1a2" }, b: "1b" }, + { a: { a1: "2a1", a2: "2a2" }, b: "2b" }, + ], + { + columns: ["b", "a.a2"], + }, + (err, records) => { + records.should.eql("1b,1a2\n2b,2a2\n"); + next(err); + }, + ); + }); + + it("is an array of strings matching nested [object]", function (next) { + stringify( + [ + { a: [{}, { a1: "1a1", a2: "1a2" }], b: "1b" }, + { a: [{}, { a1: "2a1", a2: "2a2" }], b: "2b" }, + ], + { + columns: ["b", "a[1].a2"], + }, + (err, records) => { + records.should.eql("1b,1a2\n2b,2a2\n"); + next(err); + }, + ); + }); + + it("is an array of strings with parent key not matching a nested object", function (next) { + stringify( + [ + { a: undefined, b: "1b" }, + { a: null, b: "2b" }, + { a: false, b: "3b" }, + ], + { + columns: ["b", "a.a2"], + }, + (err, records) => { + records.should.eql("1b,\n2b,\n3b,\n"); + next(err); + }, + ); + }); + + it("can still access fields with dots", function (next) { + stringify( + [{ "foo.bar": "1" }, { "foo.bar": "2" }], + { + header: true, + }, + (err, records) => { + if (!err) records.should.eql("foo.bar\n1\n2\n"); + next(err); + }, + ); + }); + }); + + describe("input", function () { + it("is an array, should be the same length", function (next) { + stringify( + [ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ], + { + columns: ["FIELD_1", "FIELD_2"], + }, + (err, data) => { + if (!err) data.should.eql("20322051544,1979\n28392898392,1974\n"); + next(err); + }, + ); + }); + + it("is a readable stream", function (next) { + const ws = stringify( + { + header: true, + columns: { field1: "column1", field3: "column3" }, + }, + (err, data) => { + if (!err) + data.should.eql("column1,column3\nval11,val13\nval21,val23\n"); + next(err); + }, + ); + ws.write({ field1: "val11", field2: "val12", field3: "val13" }); + ws.write({ field1: "val21", field2: "val22", field3: "val23" }); + ws.end(); + }); + }); +}); diff --git a/packages/csv-stringify/test/option.delimiter.coffee b/packages/csv-stringify/test/option.delimiter.coffee deleted file mode 100644 index 366a2af3..00000000 --- a/packages/csv-stringify/test/option.delimiter.coffee +++ /dev/null @@ -1,73 +0,0 @@ - -import { stringify } from '../lib/index.js' - -describe 'Option `delimiter`', -> - - it 'validation', -> - stringify [], delimiter: '' - stringify [], delimiter: ',' - stringify [], delimiter: ',,' - stringify [], delimiter: Buffer.from ',' - ( -> - stringify [], delimiter: true - ).should.throw - code: 'CSV_OPTION_DELIMITER_INVALID_TYPE' - message: 'option `delimiter` must be a buffer or a string, got true' - ( -> - stringify [], delimiter: false - ).should.throw - code: 'CSV_OPTION_DELIMITER_INVALID_TYPE' - message: 'option `delimiter` must be a buffer or a string, got false' - ( -> - stringify [], delimiter: 123 - ).should.throw - code: 'CSV_OPTION_DELIMITER_INVALID_TYPE' - message: 'option `delimiter` must be a buffer or a string, got 123' - - it 'with default value', (next) -> - stringify [ - [ '20322051544','','8.8017226E7','45',''] - [ '','1974','8.8392926E7','',''] - ], eof: false, (err, data) -> - return next err if err - data.should.eql """ - 20322051544,,8.8017226E7,45, - ,1974,8.8392926E7,, - """ - next() - - it 'disabled if empty', (next) -> - stringify [ - [ 'a',1] - [ 'b',2] - ], delimiter: '', eof: false, (err, data) -> - return next err if err - data.should.eql """ - a1 - b2 - """ - next() - - it 'with on character', (next) -> - stringify [ - [ '20322051544','','8.8017226E7','45',''] - [ '','1974','8.8392926E7','',''] - ], delimiter: '\t', eof: false, (err, data) -> - return next err if err - data.should.eql """ - 20322051544\t\t8.8017226E7\t45\t - \t1974\t8.8392926E7\t\t - """ - next() - - it 'with multiple character', (next) -> - stringify [ - [ 'a','b'] - [ 'c','d'] - ], delimiter: ':)(:', eof: false, (err, data) -> - return next err if err - data.should.eql """ - a:)(:b - c:)(:d - """ - next() diff --git a/packages/csv-stringify/test/option.delimiter.js b/packages/csv-stringify/test/option.delimiter.js new file mode 100644 index 00000000..10c07c79 --- /dev/null +++ b/packages/csv-stringify/test/option.delimiter.js @@ -0,0 +1,102 @@ +import "should"; +import { stringify } from "../lib/index.js"; + +describe("Option `delimiter`", function () { + it("validation", function () { + stringify([], { delimiter: "" }); + stringify([], { delimiter: "," }); + stringify([], { delimiter: ",," }); + stringify([], { delimiter: Buffer.from(",") }); + (() => { + stringify([], { delimiter: true }); + }).should.throw({ + code: "CSV_OPTION_DELIMITER_INVALID_TYPE", + message: "option `delimiter` must be a buffer or a string, got true", + }); + (() => { + stringify([], { delimiter: false }); + }).should.throw({ + code: "CSV_OPTION_DELIMITER_INVALID_TYPE", + message: "option `delimiter` must be a buffer or a string, got false", + }); + (() => { + stringify([], { delimiter: 123 }); + }).should.throw({ + code: "CSV_OPTION_DELIMITER_INVALID_TYPE", + message: "option `delimiter` must be a buffer or a string, got 123", + }); + }); + + it("with default value", function (next) { + stringify( + [ + ["20322051544", "", "8.8017226E7", "45", ""], + ["", "1974", "8.8392926E7", "", ""], + ], + { + eof: false, + }, + (err, data) => { + if (err) return next(err); + data.should.eql("20322051544,,8.8017226E7,45,\n,1974,8.8392926E7,,"); + next(); + }, + ); + }); + + it("disabled if empty", function (next) { + stringify( + [ + ["a", 1], + ["b", 2], + ], + { + delimiter: "", + eof: false, + }, + (err, data) => { + if (err) return next(err); + data.should.eql("a1\nb2"); + next(); + }, + ); + }); + + it("with on character", function (next) { + stringify( + [ + ["20322051544", "", "8.8017226E7", "45", ""], + ["", "1974", "8.8392926E7", "", ""], + ], + { + delimiter: "\t", + eof: false, + }, + (err, data) => { + if (err) return next(err); + data.should.eql( + "20322051544\t\t8.8017226E7\t45\t\n\t1974\t8.8392926E7\t\t", + ); + next(); + }, + ); + }); + + it("with multiple character", function (next) { + stringify( + [ + ["a", "b"], + ["c", "d"], + ], + { + delimiter: ":)(:", + eof: false, + }, + (err, data) => { + if (err) return next(err); + data.should.eql("a:)(:b\nc:)(:d"); + next(); + }, + ); + }); +}); diff --git a/packages/csv-stringify/test/option.eof.coffee b/packages/csv-stringify/test/option.eof.coffee deleted file mode 100644 index 20380319..00000000 --- a/packages/csv-stringify/test/option.eof.coffee +++ /dev/null @@ -1,22 +0,0 @@ - -import { stringify } from '../lib/index.js' - -describe 'Option `eof`', -> - - it 'print line break when true', (next) -> - stringify [ - ['a','b','c'] - ['1','2','3'] - ], eof: true, (err, data) -> - return next err if err - data.should.eql "a,b,c\n1,2,3\n" - next() - - it 'dont print line break when false', (next) -> - stringify [ - ['a','b','c'] - ['1','2','3'] - ], eof: false, (err, data) -> - return next err if err - data.should.eql "a,b,c\n1,2,3" - next() diff --git a/packages/csv-stringify/test/option.eof.js b/packages/csv-stringify/test/option.eof.js new file mode 100644 index 00000000..64c5be4f --- /dev/null +++ b/packages/csv-stringify/test/option.eof.js @@ -0,0 +1,34 @@ +import "should"; +import { stringify } from "../lib/index.js"; + +describe("Option `eof`", function () { + it("print line break when true", function (next) { + stringify( + [ + ["a", "b", "c"], + ["1", "2", "3"], + ], + { eof: true }, + (err, data) => { + if (err) return next(err); + data.should.eql("a,b,c\n1,2,3\n"); + next(); + }, + ); + }); + + it("dont print line break when false", function (next) { + stringify( + [ + ["a", "b", "c"], + ["1", "2", "3"], + ], + { eof: false }, + (err, data) => { + if (err) return next(err); + data.should.eql("a,b,c\n1,2,3"); + next(); + }, + ); + }); +}); diff --git a/packages/csv-stringify/test/option.escape.coffee b/packages/csv-stringify/test/option.escape.coffee deleted file mode 100644 index 006bfdfe..00000000 --- a/packages/csv-stringify/test/option.escape.coffee +++ /dev/null @@ -1,78 +0,0 @@ - -import { stringify } from '../lib/index.js' - -describe 'Option `escape`', -> - - it 'default', (next) -> - stringifier = stringify [ - ['abc', 'def'] - ], -> - stringifier.options.escape.should.eql('"') - next() - - it 'validation', -> - stringify [], escape: ',' - stringify [], escape: Buffer.from ',' - ( -> - stringify [], escape: true - ).should.throw 'Invalid Option: escape must be a buffer or a string, got true' - ( -> - stringify [], escape: false - ).should.throw 'Invalid Option: escape must be a buffer or a string, got false' - ( -> - stringify [], escape: 123 - ).should.throw 'Invalid Option: escape must be a buffer or a string, got 123' - ( -> - stringify [], escape: 'XX' - ).should.throw 'Invalid Option: escape must be one character, got 2 characters' - - it 'only apply to quote and escape characters', (next) -> - stringify [ - [ '-', '1"2' ] - [ '-', '"' ] - [ '-', '"abc' ] - [ '-', 'def"' ] - ], escape: '"', eof: false, (err, data) -> - return next err if err - data.should.eql """ - -,"1""2" - -,"\"\"" - -,"\""abc" - -,"def\""" - """ - next() - - it 'escape delimiter', (next) -> - stringify [ - [ 'a', 'b,c', 'd' ] - ], escape: '"', delimiter: ',', eof: false, (err, data) -> - return next err if err - data.should.eql """ - a,"b,c",d - """ - next() - - it 'escape record_delimiter', (next) -> - stringify [ - [ 'a', 'b\nc', 'd' ] - ], escape: '"', record_delimiter: '\n', eof: false, (err, data) -> - return next err if err - data.should.eql """ - a,"b\nc",d - """ - next() - - it 'should honor the backslash escape characters', (next) -> - stringify [ - [ '1"2','3"4"5' ] - [ '\\abc', 'def\\' ] - [ 'escape and quote','\\"' ] # actually \" - ], escape: '\\', eof: false, (err, data) -> - return next err if err - data.should.eql """ - "1\\"2","3\\"4\\"5" - \\abc,def\\ - escape and quote,"\\\\\\\"" - """ - # for the "escape char and quote char" value we want: \\\" - next() diff --git a/packages/csv-stringify/test/option.escape.js b/packages/csv-stringify/test/option.escape.js new file mode 100644 index 00000000..0cf19e17 --- /dev/null +++ b/packages/csv-stringify/test/option.escape.js @@ -0,0 +1,105 @@ +import "should"; +import dedent from "dedent"; +import { stringify } from "../lib/index.js"; + +describe("Option `escape`", function () { + it("default", function (next) { + const stringifier = stringify([["abc", "def"]], () => { + stringifier.options.escape.should.eql('"'); + next(); + }); + }); + + it("validation", function () { + stringify([], { escape: "," }); + stringify([], { escape: Buffer.from(",") }); + (() => { + stringify([], { escape: true }); + }).should.throw( + "Invalid Option: escape must be a buffer or a string, got true", + ); + (() => { + stringify([], { escape: false }); + }).should.throw( + "Invalid Option: escape must be a buffer or a string, got false", + ); + (() => { + stringify([], { escape: 123 }); + }).should.throw( + "Invalid Option: escape must be a buffer or a string, got 123", + ); + (() => { + stringify([], { escape: "XX" }); + }).should.throw( + "Invalid Option: escape must be one character, got 2 characters", + ); + }); + + it("only apply to quote and escape characters", function (next) { + stringify( + [ + ["-", '1"2'], + ["-", '"'], + ["-", '"abc'], + ["-", 'def"'], + ], + { escape: '"', eof: false }, + (err, data) => { + if (err) return next(err); + data.should.eql(dedent` + -,"1""2" + -,"""" + -,"""abc" + -,"def""" + `); + next(); + }, + ); + }); + + it("escape delimiter", function (next) { + stringify( + [["a", "b,c", "d"]], + { escape: '"', delimiter: ",", eof: false }, + (err, data) => { + if (err) return next(err); + data.should.eql('a,"b,c",d'); + next(); + }, + ); + }); + + it("escape record_delimiter", function (next) { + stringify( + [["a", "b\nc", "d"]], + { escape: '"', record_delimiter: "\n", eof: false }, + (err, data) => { + if (err) return next(err); + data.should.eql('a,"b\nc",d'); + next(); + }, + ); + }); + + it("should honor the backslash escape characters", function (next) { + stringify( + [ + ['1"2', '3"4"5'], + ["\\abc", "def\\"], + ["escape and quote", '\\"'], + ], + { escape: "\\", eof: false }, + (err, data) => { + if (err) return next(err); + data.should.eql( + [ + '"1\\"2","3\\"4\\"5"', + "\\abc,def\\", + 'escape and quote,"\\\\\\""', + ].join("\n"), + ); + next(); + }, + ); + }); +}); diff --git a/packages/csv-stringify/test/option.escape_formulas.coffee b/packages/csv-stringify/test/option.escape_formulas.coffee deleted file mode 100644 index fd606031..00000000 --- a/packages/csv-stringify/test/option.escape_formulas.coffee +++ /dev/null @@ -1,64 +0,0 @@ - -import { stringify } from '../lib/index.js' - -describe 'Option `escape_formulas`', -> - - it 'default to `false`', (next) -> - stringifier = stringify [ - ['abc', 'def'] - ], -> - stringifier.options.escape_formulas.should.be.false() - next() - - it 'validation', -> - (-> - stringify [ - ['abc', 'def'] - ], escape_formulas: 'invalid' - ).should.throw - code: 'CSV_OPTION_ESCAPE_FORMULAS_INVALID_TYPE' - message: 'option `escape_formulas` must be a boolean, got "invalid"' - - it 'escape =, +, -, @, \\t, \\r and unicode equivalent signs', (next) -> - stringify [ - [ '=a',1] - [ '+b',2] - [ '-c',3] - [ '@d',4] - [ '\te',5] - [ '\rf',6] - [ 'g',7] - [ '\uFF1Dh',8] - [ '\uFF0Bi',9] - [ '\uFF0Dj',10] - [ '\uFF20k',11] - [ '\uFF0Cl',12] # \uFF0C is 'full width comma' and should not be escaped - ], escape_formulas: true, eof: false, (err, data) -> - return next err if err - data.should.eql """ - '=a,1 - '+b,2 - '-c,3 - '@d,4 - '\te,5 - '\rf,6 - g,7 - '\uFF1Dh,8 - '\uFF0Bi,9 - '\uFF0Dj,10 - '\uFF20k,11 - \uFF0Cl,12 - """ - next() - - it 'with `quoted` option', (next) -> - stringify [ - [ '=a',1] - [ 'b',2] - ], escape_formulas: true, quoted: true, eof: false, (err, data) -> - return next err if err - data.should.eql """ - "'=a","1" - "b","2" - """ - next() diff --git a/packages/csv-stringify/test/option.escape_formulas.js b/packages/csv-stringify/test/option.escape_formulas.js new file mode 100644 index 00000000..294ef4af --- /dev/null +++ b/packages/csv-stringify/test/option.escape_formulas.js @@ -0,0 +1,86 @@ +import "should"; +import dedent from "dedent"; +import { stringify } from "../lib/index.js"; + +describe("Option `escape_formulas`", function () { + it("default to `false`", function (next) { + const stringifier = stringify([["abc", "def"]], () => { + stringifier.options.escape_formulas.should.be.false(); + next(); + }); + }); + + it("validation", function () { + (() => { + stringify([["abc", "def"]], { escape_formulas: "invalid" }); + }).should.throw({ + code: "CSV_OPTION_ESCAPE_FORMULAS_INVALID_TYPE", + message: 'option `escape_formulas` must be a boolean, got "invalid"', + }); + }); + + it("escape =, +, -, @, \\t, \\r and unicode equivalent signs", function (next) { + stringify( + [ + ["=a", 1], + ["+b", 2], + ["-c", 3], + ["@d", 4], + ["\te", 5], + ["\rf", 6], + ["g", 7], + ["\uFF1Dh", 8], + ["\uFF0Bi", 9], + ["\uFF0Dj", 10], + ["\uFF20k", 11], + ["\uFF0Cl", 12], // \uFF0C is 'full width comma' and should not be escaped + ], + { + escape_formulas: true, + eof: false, + }, + (err, data) => { + if (err) return next(err); + data.should.eql( + [ + "'=a,1", + "'+b,2", + "'-c,3", + "'@d,4", + "'\te,5", + "'\rf,6", + "g,7", + "'\uFF1Dh,8", + "'\uFF0Bi,9", + "'\uFF0Dj,10", + "'\uFF20k,11", + "\uFF0Cl,12", + ].join("\n"), + ); + next(); + }, + ); + }); + + it("with `quoted` option", function (next) { + stringify( + [ + ["=a", 1], + ["b", 2], + ], + { + escape_formulas: true, + quoted: true, + eof: false, + }, + (err, data) => { + if (err) return next(err); + data.should.eql(dedent` + "'=a","1" + "b","2" + `); + next(); + }, + ); + }); +}); diff --git a/packages/csv-stringify/test/option.header.coffee b/packages/csv-stringify/test/option.header.coffee deleted file mode 100644 index 7f3b88cf..00000000 --- a/packages/csv-stringify/test/option.header.coffee +++ /dev/null @@ -1,140 +0,0 @@ - -import { stringify } from '../lib/index.js' -import { stringify as stringifySync } from '../lib/sync.js' - -describe 'Option `header`', -> - - it 'as "true" and without "column" option with objects', (next) -> - stringify [ - {field1: 'val11', field2: 'val12', field3: 'val13'} - {field1: 'val21', field2: 'val22', field3: 'val23'} - ], header: true, (err, data) -> - return next err if err - data.should.eql 'field1,field2,field3\nval11,val12,val13\nval21,val22,val23\n' - next() - - it 'must get columns from somewhere', (next) -> - stringify [ - ['h1', 'h2', 'h3'] - ['1', '2', '3'] - ['4', '5', '6'] - ], header: true, (err, data) -> - err.message.should.eql 'Undiscoverable Columns: header option requires column option or object records' - next() - - it 'is immutable', (next) -> - options = header: true, quotedEmpty:true, delimiter: "|" - data1 = [ { a:'1', b:'2', c:'3' }, {a: '4', b: '5', c: '6'} ] - data2 = [ { x:'1', y:'2', z:'3' }, {x: '4', y: '5', z: '6' } ] - stringify data1, options, (err, result1) -> - stringify data2, options, (err, result2) -> - result1.should.eql "a|b|c\n1|2|3\n4|5|6\n" unless err - result2.should.eql "x|y|z\n1|2|3\n4|5|6\n" unless err - next err - - describe 'event', -> - - it 'emit header', (next) -> - count = 0 - data = '' - stringifier = stringify(columns: [ 'col1', 'col2' ], header: true) - stringifier.on 'readable', -> - while(d = stringifier.read()) - data += d - stringifier.on 'record', (record, index) -> - count++ - stringifier.on 'finish', -> - count.should.eql 2 - data.should.eql 'col1,col2\nfoo1,goo1\nfoo2,goo2\n' - next() - stringifier.write col1: 'foo1', col2: 'goo1' - stringifier.write col1: 'foo2', col2: 'goo2' - stringifier.end() - - it 'emit header even without a source', (next) -> - count = 0 - data = '' - stringifier = stringify(columns: [ 'col1', 'col2' ], header: true) - stringifier.on 'readable', -> - while(d = stringifier.read()) - data += d - stringifier.on 'end', -> - data.should.eql 'col1,col2\n' - next() - stringifier.end() - - describe 'without records', -> - - it 'print headers if no records to parse', (next) -> - stringify [], header: true, columns: ['some', 'headers'], (err, data) -> - data.should.eql 'some,headers\n' - next() - - it 'print headers if no records to parse in sync mode, fix #343', -> - data = stringifySync [], header: true, columns: ['some', 'headers'] - data.should.eql 'some,headers\n' - - it 'not print headers if no records to parse and no header option', (next) -> - stringify [], header: false, columns: ['some', 'headers'], (err, data) -> - data.should.eql '' - next() - - describe 'with column', -> - - it 'filter records array properties not listed as columns', (next) -> - stringify [ - [ 20322051544, 1979, 'ABC', 45, ] - [ 28392898392, 1974, 'DEF', 23, ] - ], header: true, columns: ["a", "b"], eof: false, (err, data) -> - data.should.eql """ - a,b - 20322051544,1979 - 28392898392,1974 - """ unless err - next err - - it 'filter records object properties not listed as columns', (next) -> - stringify [ - { a: 20322051544, b: '1979', c: '8.8017226E7' } - { a: 28392898392, b: '1974', c: '8.8392926E7' } - ], header: true, columns: ["a", "c"], eof: false, (err, data) -> - data.should.eql """ - a,c - 20322051544,8.8017226E7 - 28392898392,8.8392926E7 - """ - next() - - it 'map the column property name to display name', (next) -> - stringify [ - { field1: 'val11', field2: 'val12', field3: 'val13' } - { field1: 'val21', field2: 'val22', field3: 'val23' } - ], header: true, columns: {field1: 'column1', field3: 'column3'}, (err, data) -> - data.should.eql 'column1,column3\nval11,val13\nval21,val23\n' unless err - next err - - it 'map the column property name to display name', (next) -> - stringify [ - { field1: 'val11', field2: 'val12', field3: 'val13' } - { field1: 'val21', field2: 'val22', field3: 'val23' } - ], header: true, columns: {field1: 'column1', field3: 'column3'}, (err, data) -> - data.should.eql 'column1,column3\nval11,val13\nval21,val23\n' unless err - next err - - describe 'nested columns', -> - - it 'and nested properties', (next) -> - stringify [ - { field1: {nested: 'val11'}, field2: 'val12', field3: 'val13' } - { field1: {}, field2: 'val22', field3: 'val23' } - ], header: true, columns: {'field1.nested': 'column1', field3: 'column3'}, (err, data) -> - data.should.eql 'column1,column3\nval11,val13\n,val23\n' unless err - next err - - it 'also work for nested properties', (next) -> - stringify [ - { field1: {nested: 'val11'}, field2: 'val12', field3: 'val13' } - { field1: {}, field2: 'val22', field3: 'val23' } - ], header: true, columns: {'field1.nested': 'column1', field3: 'column3'}, (err, data) -> - data.should.eql 'column1,column3\nval11,val13\n,val23\n' unless err - next err diff --git a/packages/csv-stringify/test/option.header.js b/packages/csv-stringify/test/option.header.js new file mode 100644 index 00000000..275a51c5 --- /dev/null +++ b/packages/csv-stringify/test/option.header.js @@ -0,0 +1,269 @@ +import "should"; +import dedent from "dedent"; +import { stringify } from "../lib/index.js"; +import { stringify as stringifySync } from "../lib/sync.js"; + +describe("Option `header`", function () { + it('as "true" and without "column" option with objects', function (next) { + stringify( + [ + { field1: "val11", field2: "val12", field3: "val13" }, + { field1: "val21", field2: "val22", field3: "val23" }, + ], + { + header: true, + }, + (err, data) => { + if (err) return next(err); + data.should.eql( + dedent` + field1,field2,field3 + val11,val12,val13 + val21,val22,val23 + ` + "\n", + ); + next(); + }, + ); + }); + + it("must get columns from somewhere", function (next) { + stringify( + [ + ["h1", "h2", "h3"], + ["1", "2", "3"], + ["4", "5", "6"], + ], + { + header: true, + }, + (err) => { + err.message.should.eql( + "Undiscoverable Columns: header option requires column option or object records", + ); + next(); + }, + ); + }); + + it("is immutable", function (next) { + const options = { header: true, quotedEmpty: true, delimiter: "|" }; + const data1 = [ + { a: "1", b: "2", c: "3" }, + { a: "4", b: "5", c: "6" }, + ]; + const data2 = [ + { x: "1", y: "2", z: "3" }, + { x: "4", y: "5", z: "6" }, + ]; + stringify(data1, options, (err, result1) => { + stringify(data2, options, (err, result2) => { + if (!err) { + result1.should.eql("a|b|c\n1|2|3\n4|5|6\n"); + result2.should.eql("x|y|z\n1|2|3\n4|5|6\n"); + } + next(err); + }); + }); + }); + + describe("event", function () { + it("emit header", function (next) { + let count = 0; + let data = ""; + const stringifier = stringify({ + columns: ["col1", "col2"], + header: true, + }); + stringifier.on("readable", () => { + let d; + while ((d = stringifier.read())) { + data += d; + } + }); + stringifier.on("record", () => { + count++; + }); + stringifier.on("finish", () => { + count.should.eql(2); + data.should.eql("col1,col2\nfoo1,goo1\nfoo2,goo2\n"); + next(); + }); + stringifier.write({ col1: "foo1", col2: "goo1" }); + stringifier.write({ col1: "foo2", col2: "goo2" }); + stringifier.end(); + }); + + it("emit header even without a source", function (next) { + let data = ""; + const stringifier = stringify({ + columns: ["col1", "col2"], + header: true, + }); + stringifier.on("readable", () => { + let d; + while ((d = stringifier.read())) { + data += d; + } + }); + stringifier.on("end", () => { + data.should.eql("col1,col2\n"); + next(); + }); + stringifier.end(); + }); + }); + + describe("without records", function () { + it("print headers if no records to parse", function (next) { + stringify( + [], + { + header: true, + columns: ["some", "headers"], + }, + (err, data) => { + data.should.eql("some,headers\n"); + next(); + }, + ); + }); + + it("print headers if no records to parse in sync mode, fix #343", function () { + const data = stringifySync([], { + header: true, + columns: ["some", "headers"], + }); + data.should.eql("some,headers\n"); + }); + + it("not print headers if no records to parse and no header option", function (next) { + stringify( + [], + { + header: false, + columns: ["some", "headers"], + }, + (err, data) => { + data.should.eql(""); + next(); + }, + ); + }); + }); + + describe("with column", function () { + it("filter records array properties not listed as columns", function (next) { + stringify( + [ + [20322051544, 1979, "ABC", 45], + [28392898392, 1974, "DEF", 23], + ], + { + header: true, + columns: ["a", "b"], + eof: false, + }, + (err, data) => { + if (!err) { + data.should.eql( + dedent` + a,b + 20322051544,1979 + 28392898392,1974 + `, + ); + } + next(err); + }, + ); + }); + + it("filter records object properties not listed as columns", function (next) { + stringify( + [ + { a: 20322051544, b: "1979", c: "8.8017226E7" }, + { a: 28392898392, b: "1974", c: "8.8392926E7" }, + ], + { + header: true, + columns: ["a", "c"], + eof: false, + }, + (err, data) => { + data.should.eql( + dedent` + a,c + 20322051544,8.8017226E7 + 28392898392,8.8392926E7 + `, + ); + next(); + }, + ); + }); + + it("map the column property name to display name", function (next) { + stringify( + [ + { field1: "val11", field2: "val12", field3: "val13" }, + { field1: "val21", field2: "val22", field3: "val23" }, + ], + { + header: true, + columns: { field1: "column1", field3: "column3" }, + }, + (err, data) => { + if (!err) { + data.should.eql( + dedent` + column1,column3\nval11,val13\nval21,val23 + ` + "\n", + ); + } + next(err); + }, + ); + }); + }); + + describe("nested columns", function () { + it("and nested properties", function (next) { + stringify( + [ + { field1: { nested: "val11" }, field2: "val12", field3: "val13" }, + { field1: {}, field2: "val22", field3: "val23" }, + ], + { + header: true, + columns: { "field1.nested": "column1", field3: "column3" }, + }, + (err, data) => { + if (!err) { + data.should.eql("column1,column3\nval11,val13\n,val23\n"); + } + next(err); + }, + ); + }); + + it("also work for nested properties", function (next) { + stringify( + [ + { field1: { nested: "val11" }, field2: "val12", field3: "val13" }, + { field1: {}, field2: "val22", field3: "val23" }, + ], + { + header: true, + columns: { "field1.nested": "column1", field3: "column3" }, + }, + (err, data) => { + if (!err) { + data.should.eql("column1,column3\nval11,val13\n,val23\n"); + } + next(err); + }, + ); + }); + }); +}); diff --git a/packages/csv-stringify/test/option.quote.coffee b/packages/csv-stringify/test/option.quote.coffee deleted file mode 100644 index 575265fc..00000000 --- a/packages/csv-stringify/test/option.quote.coffee +++ /dev/null @@ -1,137 +0,0 @@ - -import { stringify } from '../lib/index.js' - -describe 'Option `quote`', -> - - it 'default', (next) -> - stringifier = stringify [], -> - stringifier.options.quote.should.eql('"') - next() - - it 'validation', -> - stringify [], quote: '' - stringify [], quote: '"' - stringify [], quote: '||' - stringify [], quote: Buffer.from '"' - stringify [], quote: true - stringify [], quote: false - ( -> - stringify [], quote: 123 - ).should.throw 'option `quote` must be a boolean, a buffer or a string, got 123' - - it 'disabled if empty', (next) -> - stringify [ - [ '20322051544','"','8.8017226E7',45,'"ok"' ] - [ '','1974','8.8392926E7','','' ] - ], {eof: false, quote: ''}, (err, data) -> - data.should.eql """ - 20322051544,",8.8017226E7,45,"ok" - ,1974,8.8392926E7,, - """ - next() - - it 'custom value with quoted', (next) -> - stringify [ - [ 'a','','b' ] - [ '','c','' ] - ], eof: false, quote: '|', quoted: true, (err, data) -> - data.should.eql """ - |a|,,|b| - ,|c|, - """ - next() - - it 'fields with separator inside fields', (next) -> - stringify [ - [ '20322051544','1979.0','8.8017226E7','ABC,45','2000-01-01' ] - [ '28392898392','1974.0','8.8392926E7','DEF','23','2050-11-27' ] - ], eof: false, (err, data) -> - data.should.eql """ - 20322051544,1979.0,8.8017226E7,"ABC,45",2000-01-01 - 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 - """ - next() - - it 'fields containing delimiters', (next) -> - stringify [ - [ '20322051544',',1979.0,8.8017226E7,ABC,45,2000-01-01' ] - [ '28392898392','1974.0','8.8392926E7','DEF','23','2050-11-27' ] - [ '28392898392,1974.0','8.8392926E7','DEF,23,2050-11-27,' ] - ], eof: false, (err, data) -> - data.should.eql """ - 20322051544,",1979.0,8.8017226E7,ABC,45,2000-01-01" - 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 - "28392898392,1974.0",8.8392926E7,"DEF,23,2050-11-27," - """ - next() - - it 'fields containing quotes', (next) -> - stringify [ - [ '20322051544','1979.0','8.801"7226E7','ABC','45','2000-01-01' ] - [ '28392898392','1974.0','8.8392926E7','DEF','2"3','2050-11-27' ] - ], eof: false, (err, data) -> - data.should.eql """ - 20322051544,1979.0,"8.801""7226E7",ABC,45,2000-01-01 - 28392898392,1974.0,8.8392926E7,DEF,"2""3",2050-11-27 - """ - next() - - it 'empty fields', (next) -> - stringify [ - [ '20322051544','','8.8017226E7','45','' ] - [ '','1974','8.8392926E7','','' ] - ], eof: false, (err, data) -> - data.should.eql """ - 20322051544,,8.8017226E7,45, - ,1974,8.8392926E7,, - """ - next() - - it 'fields containing quotes and double quotes escape', (next) -> - stringify [ - [ '20322051544','"','8.8017226E7',45,'"ok"' ] - [ '','1974','8.8392926E7','','' ] - ], eof: false, (err, data) -> - data.should.eql """ - 20322051544,\"\"\"\",8.8017226E7,45,\"\"\"ok\"\"\" - ,1974,8.8392926E7,, - """ - next() - - it 'fields with line breaks inside quotes', (next) -> - stringify [ - [ '20322051544','\n',',8.8017226E7',45,'\nok\n' ] - [ '\n','1974','8.8392926E7','','\n' ] - ], eof: false, (err, data) -> - data.should.eql """ - 20322051544," - ",",8.8017226E7",45," - ok - " - " - ",1974,8.8392926E7,," - " - """ - next() - - it 'field where quote string is empty', (next) -> - stringify [ - [ '20322051544','"','8.8017226E7',45,'"ok"' ] - [ '','1974','8.8392926E7','','' ] - ], {eof: false, quote: ''}, (err, data) -> - data.should.eql """ - 20322051544,",8.8017226E7,45,"ok" - ,1974,8.8392926E7,, - """ - next() - - it 'fields with linebreaks and different record delimiter', (next) -> - stringify [ - [ '123\n456', 789] - [ '','1974' ] - ], {eof: false, record_delimiter: '__'}, (err, data) -> - data.should.eql """ - 123 - 456,789__,1974 - """ - next() diff --git a/packages/csv-stringify/test/option.quote.js b/packages/csv-stringify/test/option.quote.js new file mode 100644 index 00000000..f29a1e46 --- /dev/null +++ b/packages/csv-stringify/test/option.quote.js @@ -0,0 +1,233 @@ +import "should"; +import dedent from "dedent"; +import { stringify } from "../lib/index.js"; + +describe("Option `quote`", function () { + it("default", function (next) { + const stringifier = stringify([], () => { + stringifier.options.quote.should.eql('"'); + next(); + }); + }); + + it("validation", function () { + stringify([], { quote: "" }); + stringify([], { quote: '"' }); + stringify([], { quote: "||" }); + stringify([], { quote: Buffer.from('"') }); + stringify([], { quote: true }); + stringify([], { quote: false }); + (() => { + stringify([], { quote: 123 }); + }).should.throw( + "option `quote` must be a boolean, a buffer or a string, got 123", + ); + }); + + it("disabled if empty", function (next) { + stringify( + [ + ["20322051544", '"', "8.8017226E7", 45, '"ok"'], + ["", "1974", "8.8392926E7", "", ""], + ], + { + eof: false, + quote: "", + }, + (err, data) => { + data.should.eql( + dedent` + 20322051544,",8.8017226E7,45,"ok" + ,1974,8.8392926E7,, + `, + ); + next(); + }, + ); + }); + + it("custom value with quoted", function (next) { + stringify( + [ + ["a", "", "b"], + ["", "c", ""], + ], + { + eof: false, + quote: "|", + quoted: true, + }, + (err, data) => { + data.should.eql("|a|,,|b|\n,|c|,"); + next(); + }, + ); + }); + + it("fields with separator inside fields", function (next) { + stringify( + [ + ["20322051544", "1979.0", "8.8017226E7", "ABC,45", "2000-01-01"], + ["28392898392", "1974.0", "8.8392926E7", "DEF", "23", "2050-11-27"], + ], + { + eof: false, + }, + (err, data) => { + data.should.eql( + dedent` + 20322051544,1979.0,8.8017226E7,"ABC,45",2000-01-01 + 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 + `, + ); + next(); + }, + ); + }); + + it("fields containing delimiters", function (next) { + stringify( + [ + ["20322051544", ",1979.0,8.8017226E7,ABC,45,2000-01-01"], + ["28392898392", "1974.0", "8.8392926E7", "DEF", "23", "2050-11-27"], + ["28392898392,1974.0", "8.8392926E7", "DEF,23,2050-11-27,"], + ], + { + eof: false, + }, + (err, data) => { + data.should.eql( + dedent` + 20322051544,",1979.0,8.8017226E7,ABC,45,2000-01-01" + 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27\n"28392898392,1974.0",8.8392926E7,"DEF,23,2050-11-27," + `, + ); + next(); + }, + ); + }); + + it("fields containing quotes", function (next) { + stringify( + [ + ["20322051544", "1979.0", '8.801"7226E7', "ABC", "45", "2000-01-01"], + ["28392898392", "1974.0", "8.8392926E7", "DEF", '2"3', "2050-11-27"], + ], + { + eof: false, + }, + (err, data) => { + data.should.eql( + dedent` + 20322051544,1979.0,"8.801""7226E7",ABC,45,2000-01-01 + 28392898392,1974.0,8.8392926E7,DEF,"2""3",2050-11-27 + `, + ); + next(); + }, + ); + }); + + it("empty fields", function (next) { + stringify( + [ + ["20322051544", "", "8.8017226E7", "45", ""], + ["", "1974", "8.8392926E7", "", ""], + ], + { + eof: false, + }, + (err, data) => { + data.should.eql(dedent` + 20322051544,,8.8017226E7,45, + ,1974,8.8392926E7,, + `); + next(); + }, + ); + }); + + it("fields containing quotes and double quotes escape", function (next) { + stringify( + [ + ["20322051544", '"', "8.8017226E7", 45, '"ok"'], + ["", "1974", "8.8392926E7", "", ""], + ], + { + eof: false, + }, + (err, data) => { + data.should.eql( + dedent` + 20322051544,"""",8.8017226E7,45,"""ok""" + ,1974,8.8392926E7,, + `, + ); + next(); + }, + ); + }); + + it("fields with line breaks inside quotes", function (next) { + stringify( + [ + ["20322051544", "\n", ",8.8017226E7", 45, "\nok\n"], + ["\n", "1974", "8.8392926E7", "", "\n"], + ], + { + eof: false, + }, + (err, data) => { + data.should.eql( + dedent` + 20322051544,"\n",",8.8017226E7",45,"\nok\n" + "\n",1974,8.8392926E7,,"\n" + `, + ); + next(); + }, + ); + }); + + it("field where quote string is empty", function (next) { + stringify( + [ + ["20322051544", '"', "8.8017226E7", 45, '"ok"'], + ["", "1974", "8.8392926E7", "", ""], + ], + { + eof: false, + quote: "", + }, + (err, data) => { + data.should.eql( + dedent` + 20322051544,",8.8017226E7,45,"ok" + ,1974,8.8392926E7,, + `, + ); + next(); + }, + ); + }); + + it("fields with linebreaks and different record delimiter", function (next) { + stringify( + [ + ["123\n456", 789], + ["", "1974"], + ], + { + eof: false, + record_delimiter: "__", + }, + (err, data) => { + data.should.eql(dedent` + 123 + 456,789__,1974 + `); + next(); + }, + ); + }); +}); diff --git a/packages/csv-stringify/test/option.quoted.coffee b/packages/csv-stringify/test/option.quoted.coffee deleted file mode 100644 index a4b8b4ed..00000000 --- a/packages/csv-stringify/test/option.quoted.coffee +++ /dev/null @@ -1,49 +0,0 @@ - -import { stringify } from '../lib/index.js' - -describe 'Option `quoted`', -> - - it 'surround fields', (next) -> - count = 0 - data = '' - stringifier = stringify quoted: true, eof: false - stringifier.on 'readable', -> - while(d = stringifier.read()) - data += d - stringifier.on 'record', (record, index) -> - count++ - stringifier.on 'finish', -> - count.should.eql 2 - data.should.eql """ - "20322051544","1979.0","8.801""7226E7","ABC" - "283928""98392","1974.0","8.8392926E7","DEF" - """ - next() - stringifier.write [ '20322051544','1979.0','8.801"7226E7','ABC' ] - stringifier.write [ '283928"98392','1974.0','8.8392926E7','DEF' ] - stringifier.end() - - it 'is executed after cast and apply to numbers', (next) -> - stringify [ - [10.1] - ], - delimiter: ';' - cast: number: (value) -> - value.toString().replace '.', ',' - quoted_match: ',' - , (err, data) -> - data.should.eql '"10,1"\n' unless err - next err - - it 'local option in cast overwriting global', (next) -> - stringify [ - ['10.1', '10.2'] - ], - delimiter: ';' - cast: string: (value, {index}) -> - value: value.replace '.', ',' - quoted_match: if index is 0 then ',' else null - quoted_match: ',' - , (err, data) -> - data.should.eql '"10,1";10,2\n' unless err - next err diff --git a/packages/csv-stringify/test/option.quoted.js b/packages/csv-stringify/test/option.quoted.js new file mode 100644 index 00000000..1358c0c7 --- /dev/null +++ b/packages/csv-stringify/test/option.quoted.js @@ -0,0 +1,72 @@ +import "should"; +import dedent from "dedent"; +import { stringify } from "../lib/index.js"; + +describe("Option `quoted`", function () { + it("surround fields", function (next) { + let count = 0; + let data = ""; + const stringifier = stringify({ quoted: true, eof: false }); + stringifier.on("readable", () => { + let d; + while ((d = stringifier.read())) { + data += d; + } + }); + stringifier.on("record", () => { + count++; + }); + stringifier.on("finish", () => { + count.should.eql(2); + data.should.eql( + dedent` + "20322051544","1979.0","8.801""7226E7","ABC" + "283928""98392","1974.0","8.8392926E7","DEF" + `, + ); + next(); + }); + stringifier.write(["20322051544", "1979.0", '8.801"7226E7', "ABC"]); + stringifier.write(['283928"98392', "1974.0", "8.8392926E7", "DEF"]); + stringifier.end(); + }); + + it("is executed after cast and apply to numbers", function (next) { + stringify( + [[10.1]], + { + delimiter: ";", + cast: { + number: (value) => { + return value.toString().replace(".", ","); + }, + }, + quoted_match: ",", + }, + (err, data) => { + if (!err) data.should.eql('"10,1"\n'); + next(err); + }, + ); + }); + + it("local option in cast overwriting global", function (next) { + stringify( + [["10.1", "10.2"]], + { + delimiter: ";", + cast: { + string: (value, { index }) => ({ + value: value.replace(".", ","), + quoted_match: index === 0 ? "," : null, + }), + }, + quoted_match: ",", + }, + (err, data) => { + if (!err) data.should.eql('"10,1";10,2\n'); + next(err); + }, + ); + }); +}); diff --git a/packages/csv-stringify/test/option.quoted_empty.coffee b/packages/csv-stringify/test/option.quoted_empty.coffee deleted file mode 100644 index d019acbc..00000000 --- a/packages/csv-stringify/test/option.quoted_empty.coffee +++ /dev/null @@ -1,76 +0,0 @@ - -import { stringify } from '../lib/index.js' - -describe 'Option `quoted_empty`', -> - - it 'quotes empty fields (when all not quoted)', (next) -> - count = 0 - data = '' - stringifier = stringify quoted: false, quoted_empty: true, eof: false - stringifier.on 'readable', -> - while(d = stringifier.read()) - data += d - stringifier.on 'record', (record, index) -> - count++ - stringifier.on 'finish', -> - count.should.eql 1 - data.should.eql """ - "","","", ,0,"" - """ - next() - stringifier.write [ undefined,null,'',' ',0,false ] - stringifier.end() - - it 'quotes empty fields (when strings quoted)', (next) -> - count = 0 - data = '' - stringifier = stringify quoted_empty: true, quoted_string: true, eof: false - stringifier.on 'readable', -> - while(d = stringifier.read()) - data += d - stringifier.on 'record', (record, index) -> - count++ - stringifier.on 'finish', -> - count.should.eql 1 - data.should.eql """ - "","",""," ",0,"" - """ - next() - stringifier.write [ undefined,null,'',' ',0,false ] - stringifier.end() - - it 'prevents quoting empty fields (when strings quoted)', (next) -> - count = 0 - data = '' - stringifier = stringify quoted_empty: false, quoted_string: true, eof: false - stringifier.on 'readable', -> - while(d = stringifier.read()) - data += d - stringifier.on 'record', (record, index) -> - count++ - stringifier.on 'finish', -> - count.should.eql 1 - data.should.eql """ - ,,," ",0, - """ - next() - stringifier.write [ undefined,null,'',' ',0,false ] - stringifier.end() - - it 'quotes empty fields (when all quoted)', (next) -> - count = 0 - data = '' - stringifier = stringify quoted: true, quoted_empty: true, eof: false - stringifier.on 'readable', -> - while(d = stringifier.read()) - data += d - stringifier.on 'record', (record, index) -> - count++ - stringifier.on 'finish', -> - count.should.eql 1 - data.should.eql """ - "","",""," ","0","" - """ - next() - stringifier.write [ undefined,null,'',' ',0,false ] - stringifier.end() diff --git a/packages/csv-stringify/test/option.quoted_empty.js b/packages/csv-stringify/test/option.quoted_empty.js new file mode 100644 index 00000000..46647b39 --- /dev/null +++ b/packages/csv-stringify/test/option.quoted_empty.js @@ -0,0 +1,108 @@ +import "should"; +import { stringify } from "../lib/index.js"; + +describe("Option `quoted_empty`", function () { + it("quotes empty fields (when all not quoted)", function (next) { + let count = 0; + let data = ""; + const stringifier = stringify({ + quoted: false, + quoted_empty: true, + eof: false, + }); + stringifier.on("readable", () => { + let d; + while ((d = stringifier.read())) { + data += d; + } + }); + stringifier.on("record", () => { + count++; + }); + stringifier.on("finish", () => { + count.should.eql(1); + data.should.eql('"","","", ,0,""'); + next(); + }); + stringifier.write([undefined, null, "", " ", 0, false]); + stringifier.end(); + }); + + it("quotes empty fields (when strings quoted)", function (next) { + let count = 0; + let data = ""; + const stringifier = stringify({ + quoted_empty: true, + quoted_string: true, + eof: false, + }); + stringifier.on("readable", () => { + let d; + while ((d = stringifier.read())) { + data += d; + } + }); + stringifier.on("record", () => { + count++; + }); + stringifier.on("finish", () => { + count.should.eql(1); + data.should.eql('"","",""," ",0,""'); + next(); + }); + stringifier.write([undefined, null, "", " ", 0, false]); + stringifier.end(); + }); + + it("prevents quoting empty fields (when strings quoted)", function (next) { + let count = 0; + let data = ""; + const stringifier = stringify({ + quoted_empty: false, + quoted_string: true, + eof: false, + }); + stringifier.on("readable", () => { + let d; + while ((d = stringifier.read())) { + data += d; + } + }); + stringifier.on("record", () => { + count++; + }); + stringifier.on("finish", () => { + count.should.eql(1); + data.should.eql(',,," ",0,'); + next(); + }); + stringifier.write([undefined, null, "", " ", 0, false]); + stringifier.end(); + }); + + it("quotes empty fields (when all quoted)", function (next) { + let count = 0; + let data = ""; + const stringifier = stringify({ + quoted: true, + quoted_empty: true, + eof: false, + }); + stringifier.on("readable", () => { + let d; + while ((d = stringifier.read())) { + data += d; + } + }); + stringifier.on("record", () => { + count++; + }); + stringifier.on("finish", () => { + count.should.eql(1); + data.should.eql('"","",""," ","0",""'); + next(); + }); + stringifier.write([undefined, null, "", " ", 0, false]); + stringifier.end(); + }); +}); diff --git a/packages/csv-stringify/test/option.quoted_match.coffee b/packages/csv-stringify/test/option.quoted_match.coffee deleted file mode 100644 index dd4e7d3f..00000000 --- a/packages/csv-stringify/test/option.quoted_match.coffee +++ /dev/null @@ -1,99 +0,0 @@ - -import { stringify } from '../lib/index.js' - -describe 'Option `quoted_match`', -> - - it 'default to `null`', (next) -> - stringifier = stringify [ - ['abc', 'def'] - ], -> - should(stringifier.options.quoted_match).be.null() - next() - - it 'a string', (next) -> - count = 0 - data = '' - stringify [ - ['abc', 'def'] - ], quoted_match: 'e', eof: false, (err, data) -> - data.should.eql ''' - abc,"def" - ''' unless err - next err - - it 'a regex', (next) -> - count = 0 - data = '' - stringify [ - ['abcd', 'efg'] - ], quoted_match: /^\w{3}$/, eof: false, (err, data) -> - data.should.eql ''' - abcd,"efg" - ''' unless err - next err - - it 'an array', (next) -> - count = 0 - data = '' - stringify [ - ['ab', 'cd', 'efg'] - ], quoted_match: ['d', /^\w{3}$/], eof: false, (err, data) -> - data.should.eql ''' - ab,"cd","efg" - ''' unless err - next err - - it 'an empty string regex with no other "quoted" options (#344)', (next) -> - count = 0 - data = '' - stringify [ - ['a', null, undefined, '', 'b'] - ], quoted_match: /^$/, eof: false, (err, data) -> - data.should.eql ''' - a,,,"",b - ''' unless err - next err - - it 'an empty string regex with all other "quoted" options set to false (#344)', (next) -> - count = 0 - data = '' - stringify [ - ['a', null, undefined, '', 'b'] - ], quoted: false, quoted_empty: false, quoted_string: false, quoted_match: /^$/, eof: false, (err, data) -> - data.should.eql ''' - a,,,"",b - ''' unless err - next err - - it 'an empty string regex has higher priority than the "quoted" option', (next) -> - count = 0 - data = '' - stringify [ - ['a', null, undefined, '', 'b'] - ], quoted: true, quoted_match: /^$/, eof: false, (err, data) -> - data.should.eql ''' - "a",,,"","b" - ''' unless err - next err - - it "an empty string regex does not conflict with quoted_string set to true", (next) -> - count = 0 - data = '' - stringify [ - ['a', null, undefined, '', 'b'] - ], quoted_string: true, quoted_match: /^$/, eof: false, (err, data) -> - data.should.eql ''' - "a",,,"","b" - ''' unless err - next err - - it "an empty string regex does not conflict with quoted_empty set to true", (next) -> - count = 0 - data = '' - stringify [ - ['a', null, undefined, '' , 'b'] - ], quoted_empty: true, quoted_match: /^$/, eof: false, (err, data) -> - data.should.eql ''' - a,"","","",b - ''' unless err - next err diff --git a/packages/csv-stringify/test/option.quoted_match.js b/packages/csv-stringify/test/option.quoted_match.js new file mode 100644 index 00000000..6609199f --- /dev/null +++ b/packages/csv-stringify/test/option.quoted_match.js @@ -0,0 +1,122 @@ +import "should"; +import should from "should"; +import { stringify } from "../lib/index.js"; + +describe("Option `quoted_match`", function () { + it("default to `null`", function (next) { + const stringifier = stringify([["abc", "def"]], () => { + should(stringifier.options.quoted_match).be.null(); + next(); + }); + }); + + it("a string", function (next) { + stringify( + [["abc", "def"]], + { quoted_match: "e", eof: false }, + (err, data) => { + if (!err) { + data.should.eql('abc,"def"'); + } + next(err); + }, + ); + }); + + it("a regex", function (next) { + stringify( + [["abcd", "efg"]], + { quoted_match: /^\w{3}$/, eof: false }, + (err, data) => { + if (!err) { + data.should.eql('abcd,"efg"'); + } + next(err); + }, + ); + }); + + it("an array", function (next) { + stringify( + [["ab", "cd", "efg"]], + { quoted_match: ["d", /^\w{3}$/], eof: false }, + (err, data) => { + if (!err) { + data.should.eql('ab,"cd","efg"'); + } + next(err); + }, + ); + }); + + it('an empty string regex with no other "quoted" options (#344)', function (next) { + stringify( + [["a", null, undefined, "", "b"]], + { quoted_match: /^$/, eof: false }, + (err, data) => { + if (!err) { + data.should.eql('a,,,"",b'); + } + next(err); + }, + ); + }); + + it('an empty string regex with all other "quoted" options set to false (#344)', function (next) { + stringify( + [["a", null, undefined, "", "b"]], + { + quoted: false, + quoted_empty: false, + quoted_string: false, + quoted_match: /^$/, + eof: false, + }, + (err, data) => { + if (!err) { + data.should.eql('a,,,"",b'); + } + next(err); + }, + ); + }); + + it('an empty string regex has higher priority than the "quoted" option', function (next) { + stringify( + [["a", null, undefined, "", "b"]], + { quoted: true, quoted_match: /^$/, eof: false }, + (err, data) => { + if (!err) { + data.should.eql('"a",,,"","b"'); + } + next(err); + }, + ); + }); + + it("an empty string regex does not conflict with quoted_string set to true", function (next) { + stringify( + [["a", null, undefined, "", "b"]], + { quoted_string: true, quoted_match: /^$/, eof: false }, + (err, data) => { + if (!err) { + data.should.eql('"a",,,"","b"'); + } + next(err); + }, + ); + }); + + it("an empty string regex does not conflict with quoted_empty set to true", function (next) { + stringify( + [["a", null, undefined, "", "b"]], + { quoted_empty: true, quoted_match: /^$/, eof: false }, + (err, data) => { + if (!err) { + data.should.eql('a,"","","",b'); + } + next(err); + }, + ); + }); +}); diff --git a/packages/csv-stringify/test/option.quoted_string.coffee b/packages/csv-stringify/test/option.quoted_string.coffee deleted file mode 100644 index 99343a7e..00000000 --- a/packages/csv-stringify/test/option.quoted_string.coffee +++ /dev/null @@ -1,34 +0,0 @@ - -import { stringify } from '../lib/index.js' - -describe 'Option `quoted_string`', -> - - it 'quotes string fields', (next) -> - stringify [ - [ undefined,null,'',' ','x',0,false ] - ], - quoted_string: true - eof: false - , (err, data) -> - data.toString().should.eql """ - ,,""," ","x",0, - """ unless err - next err - - it 'quotes empty string fields (when all quoted)', (next) -> - count = 0 - data = '' - stringifier = stringify quoted: true, quoted_string: true, eof: false - stringifier.on 'readable', -> - while(d = stringifier.read()) - data += d - stringifier.on 'record', (record, index) -> - count++ - stringifier.on 'finish', -> - count.should.eql 1 - data.should.eql """ - ,,""," ","x","0", - """ - next() - stringifier.write [ undefined,null,'',' ','x',0,false ] - stringifier.end() diff --git a/packages/csv-stringify/test/option.quoted_string.js b/packages/csv-stringify/test/option.quoted_string.js new file mode 100644 index 00000000..f3ee7ca7 --- /dev/null +++ b/packages/csv-stringify/test/option.quoted_string.js @@ -0,0 +1,45 @@ +import "should"; +import { stringify } from "../lib/index.js"; + +describe("Option `quoted_string`", function () { + it("quotes string fields", function (next) { + stringify( + [[undefined, null, "", " ", "x", 0, false]], + { + quoted_string: true, + eof: false, + }, + (err, data) => { + if (err) return next(err); + data.toString().should.eql(',,""," ","x",0,'); + next(); + }, + ); + }); + + it("quotes empty string fields (when all quoted)", function (next) { + let count = 0; + let data = ""; + const stringifier = stringify({ + quoted: true, + quoted_string: true, + eof: false, + }); + stringifier.on("readable", () => { + let d; + while ((d = stringifier.read())) { + data += d; + } + }); + stringifier.on("record", () => { + count++; + }); + stringifier.on("finish", () => { + count.should.eql(1); + data.should.eql(',,""," ","x","0",'); + next(); + }); + stringifier.write([undefined, null, "", " ", "x", 0, false]); + stringifier.end(); + }); +}); diff --git a/packages/csv-stringify/test/option.record_delimiter.coffee b/packages/csv-stringify/test/option.record_delimiter.coffee deleted file mode 100644 index c6b302a9..00000000 --- a/packages/csv-stringify/test/option.record_delimiter.coffee +++ /dev/null @@ -1,82 +0,0 @@ - -import { stringify } from '../lib/index.js' - -describe 'Option `record_delimiter`', -> - - it 'validation', -> - stringify [], record_delimiter: '' - stringify [], record_delimiter: ',' - stringify [], record_delimiter: ',,' - stringify [], record_delimiter: Buffer.from ',' - ( -> - stringify [], record_delimiter: true - ).should.throw 'Invalid Option: record_delimiter must be a buffer or a string, got true' - ( -> - stringify [], record_delimiter: false - ).should.throw 'Invalid Option: record_delimiter must be a buffer or a string, got false' - ( -> - stringify [], record_delimiter: 123 - ).should.throw 'Invalid Option: record_delimiter must be a buffer or a string, got 123' - - it 'Test line breaks custom string', (next) -> - stringify [ - [ '20322051544','8.8017226E7','ABC' ] - [ '28392898392','8.8392926E7','DEF' ] - ], record_delimiter: '::', (err, result) -> - return next err if err - result.should.eql '20322051544,8.8017226E7,ABC::28392898392,8.8392926E7,DEF::' - next() - - it 'Test line breaks custom buffer', (next) -> - stringify [ - [ '20322051544','8.8017226E7','ABC' ] - [ '28392898392','8.8392926E7','DEF' ] - ], record_delimiter: Buffer.from('::'), (err, result) -> - return next err if err - result.should.eql '20322051544,8.8017226E7,ABC::28392898392,8.8392926E7,DEF::' - next() - - it 'Test line breaks unix', (next) -> - stringify [ - [ '20322051544','8.8017226E7','ABC' ] - [ '28392898392','8.8392926E7','DEF' ] - ], record_delimiter: 'unix', (err, result) -> - return next err if err - result.should.eql '20322051544,8.8017226E7,ABC\n28392898392,8.8392926E7,DEF\n' - next() - - it 'Test line breaks unicode', (next) -> - stringify [ - [ '20322051544','8.8017226E7','ABC' ] - [ '28392898392','8.8392926E7','DEF' ] - ], record_delimiter: 'unicode', (err, result) -> - return next err if err - result.should.eql '20322051544,8.8017226E7,ABC\u202828392898392,8.8392926E7,DEF\u2028' - next() - - it 'Test line breaks mac', (next) -> - stringify [ - [ '20322051544','8.8017226E7','ABC' ] - [ '28392898392','8.8392926E7','DEF' ] - ], record_delimiter: 'mac', (err, result) -> - return next err if err - result.should.eql '20322051544,8.8017226E7,ABC\r28392898392,8.8392926E7,DEF\r' - next() - - it 'Test line breaks windows', (next) -> - stringify [ - [ '20322051544','8.8017226E7','ABC' ] - [ '28392898392','8.8392926E7','DEF' ] - ], record_delimiter: 'windows', (err, result) -> - return next err if err - result.should.eql '20322051544,8.8017226E7,ABC\r\n28392898392,8.8392926E7,DEF\r\n' - next() - - it 'Test line breaks ascii', (next) -> - stringify [ - [ '20322051544','8.8017226E7','ABC' ] - [ '28392898392','8.8392926E7','DEF' ] - ], record_delimiter: 'ascii', delimiter: '\u001f', (err, result) -> - return next err if err - result.should.eql '20322051544\u001f8.8017226E7\u001fABC\u001e28392898392\u001f8.8392926E7\u001fDEF\u001e' - next() diff --git a/packages/csv-stringify/test/option.record_delimiter.js b/packages/csv-stringify/test/option.record_delimiter.js new file mode 100644 index 00000000..fe3fc920 --- /dev/null +++ b/packages/csv-stringify/test/option.record_delimiter.js @@ -0,0 +1,144 @@ +import { stringify } from "../lib/index.js"; + +describe("Option `record_delimiter`", function () { + it("validation", function () { + stringify([], { record_delimiter: "" }); + stringify([], { record_delimiter: "," }); + stringify([], { record_delimiter: ",," }); + stringify([], { record_delimiter: Buffer.from(",") }); + (() => { + stringify([], { record_delimiter: true }); + }).should.throw( + "Invalid Option: record_delimiter must be a buffer or a string, got true", + ); + (() => { + stringify([], { record_delimiter: false }); + }).should.throw( + "Invalid Option: record_delimiter must be a buffer or a string, got false", + ); + (() => { + stringify([], { record_delimiter: 123 }); + }).should.throw( + "Invalid Option: record_delimiter must be a buffer or a string, got 123", + ); + }); + + it("Test line breaks custom string", function (next) { + stringify( + [ + ["20322051544", "8.8017226E7", "ABC"], + ["28392898392", "8.8392926E7", "DEF"], + ], + { record_delimiter: "::" }, + (err, result) => { + if (err) return next(err); + result.should.eql( + "20322051544,8.8017226E7,ABC::28392898392,8.8392926E7,DEF::", + ); + next(); + }, + ); + }); + + it("Test line breaks custom buffer", function (next) { + stringify( + [ + ["20322051544", "8.8017226E7", "ABC"], + ["28392898392", "8.8392926E7", "DEF"], + ], + { record_delimiter: Buffer.from("::") }, + (err, result) => { + if (err) return next(err); + result.should.eql( + "20322051544,8.8017226E7,ABC::28392898392,8.8392926E7,DEF::", + ); + next(); + }, + ); + }); + + it("Test line breaks unix", function (next) { + stringify( + [ + ["20322051544", "8.8017226E7", "ABC"], + ["28392898392", "8.8392926E7", "DEF"], + ], + { record_delimiter: "unix" }, + (err, result) => { + if (err) return next(err); + result.should.eql( + "20322051544,8.8017226E7,ABC\n28392898392,8.8392926E7,DEF\n", + ); + next(); + }, + ); + }); + + it("Test line breaks unicode", function (next) { + stringify( + [ + ["20322051544", "8.8017226E7", "ABC"], + ["28392898392", "8.8392926E7", "DEF"], + ], + { record_delimiter: "unicode" }, + (err, result) => { + if (err) return next(err); + result.should.eql( + "20322051544,8.8017226E7,ABC\u202828392898392,8.8392926E7,DEF\u2028", + ); + next(); + }, + ); + }); + + it("Test line breaks mac", function (next) { + stringify( + [ + ["20322051544", "8.8017226E7", "ABC"], + ["28392898392", "8.8392926E7", "DEF"], + ], + { record_delimiter: "mac" }, + (err, result) => { + if (err) return next(err); + result.should.eql( + "20322051544,8.8017226E7,ABC\r28392898392,8.8392926E7,DEF\r", + ); + next(); + }, + ); + }); + + it("Test line breaks windows", function (next) { + stringify( + [ + ["20322051544", "8.8017226E7", "ABC"], + ["28392898392", "8.8392926E7", "DEF"], + ], + { record_delimiter: "windows" }, + (err, result) => { + if (err) return next(err); + result.should.eql( + "20322051544,8.8017226E7,ABC\r\n28392898392,8.8392926E7,DEF\r\n", + ); + next(); + }, + ); + }); + + it("Test line breaks ascii", function (next) { + stringify( + [ + ["20322051544", "8.8017226E7", "ABC"], + ["28392898392", "8.8392926E7", "DEF"], + ], + { record_delimiter: "ascii", delimiter: "\u001f" }, + (err, result) => { + if (err) return next(err); + result.should.eql( + "20322051544\u001f8.8017226E7\u001fABC\u001e28392898392\u001f8.8392926E7\u001fDEF\u001e", + ); + next(); + }, + ); + }); +}); diff --git a/packages/csv-stringify/test/options.coffee b/packages/csv-stringify/test/options.coffee deleted file mode 100644 index a0910ca6..00000000 --- a/packages/csv-stringify/test/options.coffee +++ /dev/null @@ -1,9 +0,0 @@ - -import { stringify } from '../lib/index.js' - -describe 'Options', -> - - it 'underscore options', -> - stringifier = stringify recordDelimiter: ':' - stringifier.options.record_delimiter.should.eql ':' - (stringifier.options.recordDelimiter is undefined).should.be.true() diff --git a/packages/csv-stringify/test/options.js b/packages/csv-stringify/test/options.js new file mode 100644 index 00000000..f0e9eac1 --- /dev/null +++ b/packages/csv-stringify/test/options.js @@ -0,0 +1,9 @@ +import { stringify } from "../lib/index.js"; + +describe("Options", function () { + it("underscore options", function () { + const stringifier = stringify({ recordDelimiter: ":" }); + stringifier.options.record_delimiter.should.eql(":"); + (stringifier.options.recordDelimiter === undefined).should.be.true(); + }); +}); diff --git a/packages/csv-stringify/test/samples.coffee b/packages/csv-stringify/test/samples.coffee deleted file mode 100644 index 500e7525..00000000 --- a/packages/csv-stringify/test/samples.coffee +++ /dev/null @@ -1,30 +0,0 @@ - -import fs from 'node:fs/promises' -import path from 'node:path' -import { spawn } from 'node:child_process' - -__dirname = new URL( '.', import.meta.url).pathname -dir = path.resolve __dirname, '../samples' -samples = await fs.readdir dir - -describe 'Samples', -> - - samples - .filter (sample) -> - return false unless /\.(js|ts)?$/.test sample - true - .map (sample) -> - - it "Sample #{sample}", () -> - data = await fs.readFile path.resolve(dir, sample), 'utf8' - return if /^["|']skip test["|']/.test data - new Promise (resolve, reject) -> - ext = /\.(\w+)?$/.exec(sample)[0] - [cmd, ...args] = switch ext - when '.js' - ['node', path.resolve dir, sample] - when '.ts' - ['node', '--loader', 'ts-node/esm', path.resolve dir, sample] - spawn(cmd, args) - .on 'close', (code) -> if code is 0 then resolve() else reject(new Error 'Failure') - .stdout.on 'data', (->) diff --git a/packages/csv-stringify/test/samples.js b/packages/csv-stringify/test/samples.js new file mode 100644 index 00000000..5919a551 --- /dev/null +++ b/packages/csv-stringify/test/samples.js @@ -0,0 +1,44 @@ +import fs from "node:fs/promises"; +import path from "node:path"; +import { spawn } from "node:child_process"; + +const __dirname = new URL(".", import.meta.url).pathname; +const dir = path.resolve(__dirname, "../samples"); +const samples = await fs.readdir(dir); + +describe("Samples", function () { + /* eslint mocha/no-setup-in-describe: "off" */ + samples + .filter((sample) => { + if (!/\.(js|ts)?$/.test(sample)) return false; + return true; + }) + .map((sample) => { + it(`Sample ${sample}`, async function () { + const data = await fs.readFile(path.resolve(dir, sample), "utf8"); + if (/^["|']skip test["|']/.test(data)) return; + return new Promise((resolve, reject) => { + const ext = /\.(\w+)?$/.exec(sample)[0]; + let cmd, args; + switch (ext) { + case ".js": + [cmd, ...args] = ["node", path.resolve(dir, sample)]; + break; + case ".ts": + [cmd, ...args] = [ + "node", + "--loader", + "ts-node/esm", + path.resolve(dir, sample), + ]; + break; + } + spawn(cmd, args) + .on("close", (code) => + code === 0 ? resolve() : reject(new Error("Failure")), + ) + .stdout.on("data", () => {}); + }); + }); + }); +}); diff --git a/packages/csv-stringify/test/types.js b/packages/csv-stringify/test/types.js new file mode 100644 index 00000000..ead04c9e --- /dev/null +++ b/packages/csv-stringify/test/types.js @@ -0,0 +1,27 @@ +import { stringify } from "../lib/index.js"; + +describe("types", function () { + describe("defaults", function () { + it("should map date to getTime", function (next) { + const date = new Date(); + stringify([{ value: date }], (err, data) => { + if (!err) data.should.eql(date.getTime() + "\n"); + next(err); + }); + }); + + it("should map true boolean value to 1", function (next) { + stringify([{ value: true }], (err, data) => { + if (!err) data.should.eql("1\n"); + next(err); + }); + }); + + it("should map object to its json representation", function (next) { + stringify([{ value: { a: 1 } }], (err, data) => { + if (!err) data.should.eql('"{""a"":1}"\n'); + next(err); + }); + }); + }); +}); From 7910d40bf0401f9c16aa6523d2d1508e0c8317cf Mon Sep 17 00:00:00 2001 From: David Worms Date: Mon, 12 May 2025 22:48:00 +0200 Subject: [PATCH 08/49] test(csv-generate): coffee to js conversion --- package-lock.json | 3 +- packages/csv-generate/package.json | 11 +- .../csv-generate/test/api.callback.coffee | 18 -- packages/csv-generate/test/api.callback.js | 18 ++ packages/csv-generate/test/api.end.coffee | 48 ---- packages/csv-generate/test/api.end.js | 61 +++++ .../test/api.highWaterMark.coffee | 20 -- .../csv-generate/test/api.highWaterMark.js | 24 ++ packages/csv-generate/test/api.pipe.coffee | 25 -- packages/csv-generate/test/api.pipe.js | 27 ++ packages/csv-generate/test/api.read.coffee | 63 ----- packages/csv-generate/test/api.read.js | 90 +++++++ packages/csv-generate/test/api.sync.coffee | 23 -- packages/csv-generate/test/api.sync.js | 34 +++ packages/csv-generate/test/api.types.sync.ts | 63 +++-- packages/csv-generate/test/api.types.ts | 236 +++++++++--------- .../csv-generate/test/api.web_stream.coffee | 52 ---- packages/csv-generate/test/api.web_stream.js | 59 +++++ packages/csv-generate/test/event.end.coffee | 17 -- packages/csv-generate/test/event.end.js | 21 ++ packages/csv-generate/test/loaders/all.js | 15 -- packages/csv-generate/test/loaders/coffee.js | 20 -- .../csv-generate/test/loaders/legacy/all.js | 36 --- .../test/loaders/legacy/coffee.js | 50 ---- packages/csv-generate/test/options.coffee | 14 -- .../csv-generate/test/options.columns.coffee | 114 --------- packages/csv-generate/test/options.columns.js | 152 +++++++++++ .../test/options.delimiter.coffee | 24 -- .../csv-generate/test/options.delimiter.js | 37 +++ .../csv-generate/test/options.duration.coffee | 13 - .../csv-generate/test/options.duration.js | 17 ++ .../csv-generate/test/options.encoding.coffee | 14 -- .../csv-generate/test/options.encoding.js | 22 ++ packages/csv-generate/test/options.end.coffee | 25 -- packages/csv-generate/test/options.end.js | 34 +++ packages/csv-generate/test/options.eof.coffee | 14 -- packages/csv-generate/test/options.eof.js | 36 +++ .../test/options.fixed_size.coffee | 15 -- .../csv-generate/test/options.fixed_size.js | 24 ++ .../test/options.high_water_mark.coffee | 14 -- .../test/options.high_water_mark.js | 23 ++ packages/csv-generate/test/options.js | 19 ++ .../csv-generate/test/options.length.coffee | 18 -- packages/csv-generate/test/options.length.js | 34 +++ .../test/options.max_word_length.coffee | 22 -- .../test/options.max_word_length.js | 33 +++ .../test/options.object_mode.coffee | 16 -- .../csv-generate/test/options.object_mode.js | 54 ++++ .../test/options.row_delimiter.coffee | 14 -- .../test/options.row_delimiter.js | 25 ++ .../csv-generate/test/options.seed.coffee | 41 --- packages/csv-generate/test/options.seed.js | 57 +++++ .../csv-generate/test/options.sleep.coffee | 26 -- packages/csv-generate/test/options.sleep.js | 36 +++ packages/csv-generate/test/samples.coffee | 30 --- packages/csv-generate/test/samples.js | 44 ++++ 56 files changed, 1136 insertions(+), 959 deletions(-) delete mode 100644 packages/csv-generate/test/api.callback.coffee create mode 100644 packages/csv-generate/test/api.callback.js delete mode 100644 packages/csv-generate/test/api.end.coffee create mode 100644 packages/csv-generate/test/api.end.js delete mode 100644 packages/csv-generate/test/api.highWaterMark.coffee create mode 100644 packages/csv-generate/test/api.highWaterMark.js delete mode 100644 packages/csv-generate/test/api.pipe.coffee create mode 100644 packages/csv-generate/test/api.pipe.js delete mode 100644 packages/csv-generate/test/api.read.coffee create mode 100644 packages/csv-generate/test/api.read.js delete mode 100644 packages/csv-generate/test/api.sync.coffee create mode 100644 packages/csv-generate/test/api.sync.js delete mode 100644 packages/csv-generate/test/api.web_stream.coffee create mode 100644 packages/csv-generate/test/api.web_stream.js delete mode 100644 packages/csv-generate/test/event.end.coffee create mode 100644 packages/csv-generate/test/event.end.js delete mode 100644 packages/csv-generate/test/loaders/all.js delete mode 100644 packages/csv-generate/test/loaders/coffee.js delete mode 100644 packages/csv-generate/test/loaders/legacy/all.js delete mode 100644 packages/csv-generate/test/loaders/legacy/coffee.js delete mode 100644 packages/csv-generate/test/options.coffee delete mode 100644 packages/csv-generate/test/options.columns.coffee create mode 100644 packages/csv-generate/test/options.columns.js delete mode 100644 packages/csv-generate/test/options.delimiter.coffee create mode 100644 packages/csv-generate/test/options.delimiter.js delete mode 100644 packages/csv-generate/test/options.duration.coffee create mode 100644 packages/csv-generate/test/options.duration.js delete mode 100644 packages/csv-generate/test/options.encoding.coffee create mode 100644 packages/csv-generate/test/options.encoding.js delete mode 100644 packages/csv-generate/test/options.end.coffee create mode 100644 packages/csv-generate/test/options.end.js delete mode 100644 packages/csv-generate/test/options.eof.coffee create mode 100644 packages/csv-generate/test/options.eof.js delete mode 100644 packages/csv-generate/test/options.fixed_size.coffee create mode 100644 packages/csv-generate/test/options.fixed_size.js delete mode 100644 packages/csv-generate/test/options.high_water_mark.coffee create mode 100644 packages/csv-generate/test/options.high_water_mark.js create mode 100644 packages/csv-generate/test/options.js delete mode 100644 packages/csv-generate/test/options.length.coffee create mode 100644 packages/csv-generate/test/options.length.js delete mode 100644 packages/csv-generate/test/options.max_word_length.coffee create mode 100644 packages/csv-generate/test/options.max_word_length.js delete mode 100644 packages/csv-generate/test/options.object_mode.coffee create mode 100644 packages/csv-generate/test/options.object_mode.js delete mode 100644 packages/csv-generate/test/options.row_delimiter.coffee create mode 100644 packages/csv-generate/test/options.row_delimiter.js delete mode 100644 packages/csv-generate/test/options.seed.coffee create mode 100644 packages/csv-generate/test/options.seed.js delete mode 100644 packages/csv-generate/test/options.sleep.coffee create mode 100644 packages/csv-generate/test/options.sleep.js delete mode 100644 packages/csv-generate/test/samples.coffee create mode 100644 packages/csv-generate/test/samples.js diff --git a/package-lock.json b/package-lock.json index a5dcbc19..46c2fa1b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20151,7 +20151,7 @@ "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", - "coffeescript": "~2.7.0", + "dedent": "^0.7.0", "each": "^2.7.2", "eslint": "^9.26.0", "eslint-config-prettier": "^10.1.5", @@ -20203,7 +20203,6 @@ "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", - "coffeescript": "~2.7.0", "csv-generate": "^4.4.2", "dedent": "^0.7.0", "each": "^2.7.2", diff --git a/packages/csv-generate/package.json b/packages/csv-generate/package.json index 037f94a5..dd6660e8 100644 --- a/packages/csv-generate/package.json +++ b/packages/csv-generate/package.json @@ -17,7 +17,7 @@ "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", - "coffeescript": "~2.7.0", + "dedent": "^0.7.0", "each": "^2.7.2", "eslint": "^9.26.0", "eslint-config-prettier": "^10.1.5", @@ -81,12 +81,9 @@ "main": "./dist/cjs/index.cjs", "mocha": { "inline-diffs": true, - "loader": "./test/loaders/all.js", + "import": "tsx", "recursive": true, "reporter": "spec", - "require": [ - "should" - ], "throw-deprecation": false, "timeout": 40000 }, @@ -104,8 +101,8 @@ "lint:fix": "eslint --fix", "lint:ts": "tsc --noEmit true", "preversion": "npm run build && git add dist", - "test": "mocha 'test/**/*.{coffee,ts}'", - "test:legacy": "mocha --ignore test/api.web_stream.coffee --loader=./test/loaders/legacy/all.js 'test/**/*.{coffee,ts}'" + "test": "mocha 'test/**/*.{js,ts}'", + "test:legacy": "mocha --ignore test/api.web_stream.js --loader=./test/loaders/legacy/all.js 'test/**/*.{js,ts}'" }, "type": "module", "types": "dist/esm/index.d.ts", diff --git a/packages/csv-generate/test/api.callback.coffee b/packages/csv-generate/test/api.callback.coffee deleted file mode 100644 index 349016aa..00000000 --- a/packages/csv-generate/test/api.callback.coffee +++ /dev/null @@ -1,18 +0,0 @@ - -import { generate } from '../lib/index.js' - -describe 'api callback', -> - - it 'receive a buffer', (next) -> - count = 0 - ended = false - generate length: 3, (err, data) -> - Buffer.isBuffer(data).should.be.true() unless err - next() - - it 'receive a string if encoding is defined', (next) -> - count = 0 - ended = false - generate length: 3, encoding: 'utf8', (err, data) -> - (typeof data is 'string').should.be.true() unless err - next() diff --git a/packages/csv-generate/test/api.callback.js b/packages/csv-generate/test/api.callback.js new file mode 100644 index 00000000..7894fb0c --- /dev/null +++ b/packages/csv-generate/test/api.callback.js @@ -0,0 +1,18 @@ +import "should"; +import { generate } from "../lib/index.js"; + +describe("api callback", function () { + it("receive a buffer", function (next) { + generate({ length: 3 }, (err, data) => { + if (!err) Buffer.isBuffer(data).should.be.true(); + next(); + }); + }); + + it("receive a string if encoding is defined", function (next) { + generate({ length: 3, encoding: "utf8" }, (err, data) => { + if (!err) (typeof data === "string").should.be.true(); + next(); + }); + }); +}); diff --git a/packages/csv-generate/test/api.end.coffee b/packages/csv-generate/test/api.end.coffee deleted file mode 100644 index 93421cb6..00000000 --- a/packages/csv-generate/test/api.end.coffee +++ /dev/null @@ -1,48 +0,0 @@ - -import { generate } from '../lib/index.js' -import { Writable } from 'stream' - -describe 'api end', -> - - it 'no chunk generated after end', (next) -> - count = 0 - generator = generate() - generator.on 'readable', -> - while(generator.read()) - if end - generator.emit 'error', Error 'Record emited after end' - if count++ is 5 - end = true - generator.end() - generator.on 'error', next - generator.on 'end', next - - it 'no record generated after end', (next) -> - count = 0 - generator = generate objectMode: true - generator.on 'readable', -> - while(generator.read()) - if end - generator.emit 'error', Error 'Record emited after end' - if count++ is 5 - end = true - generator.end() - generator.on 'error', next - generator.on 'end', next - - it 'sync read text', (next) -> - # This bug is only reproduced in objectMode, message is - # `Uncaught Error [ERR_STREAM_PUSH_AFTER_EOF]: stream.push() after EOF` - # when the internal data stack contains more than one element - # and the internal `end` property was set before the latest record were send - myReadable = new Writable - objectMode: true - write: (chunk, encoding, callback) -> - callback() - generator = generate length: 2, objectMode: true, highWaterMark: 10, columns: [ - (g) -> 'value' - ] - # generator = generate length: 2, objectMode: true, highWaterMark: 10 - # body... - generator.pipe(myReadable).on 'finish', -> - setTimeout next, 1000 diff --git a/packages/csv-generate/test/api.end.js b/packages/csv-generate/test/api.end.js new file mode 100644 index 00000000..86a65e03 --- /dev/null +++ b/packages/csv-generate/test/api.end.js @@ -0,0 +1,61 @@ +import "should"; +import { generate } from "../lib/index.js"; +import { Writable } from "stream"; + +describe("api end", function () { + it("no chunk generated after end", function (next) { + let count = 0; + let end; + const generator = generate(); + generator.on("readable", () => { + while (generator.read()) { + if (end) { + generator.emit("error", Error("Record emited after end")); + } + if (count++ === 5) { + end = true; + generator.end(); + } + } + }); + generator.on("error", next); + generator.on("end", next); + }); + + it("no record generated after end", function (next) { + let count = 0; + let end; + const generator = generate({ objectMode: true }); + generator.on("readable", () => { + while (generator.read()) { + if (end) { + generator.emit("error", Error("Record emited after end")); + } + if (count++ === 5) { + end = true; + generator.end(); + } + } + }); + generator.on("error", next); + generator.on("end", next); + }); + + it("sync read text", function (next) { + const myReadable = new Writable({ + objectMode: true, + write: (chunk, encoding, callback) => { + callback(); + }, + }); + const generator = generate({ + length: 2, + objectMode: true, + highWaterMark: 10, + columns: [() => "value"], + }); + generator.pipe(myReadable).on("finish", () => { + setTimeout(next, 1000); + }); + }); +}); diff --git a/packages/csv-generate/test/api.highWaterMark.coffee b/packages/csv-generate/test/api.highWaterMark.coffee deleted file mode 100644 index d7c6a292..00000000 --- a/packages/csv-generate/test/api.highWaterMark.coffee +++ /dev/null @@ -1,20 +0,0 @@ - -import { generate } from '../lib/index.js' - -describe 'api highWaterMark', -> - - it 'honors option', (next) -> - values = [] - generator = generate length: 100, highWaterMark: 100 - generator.on 'readable', -> - while row = generator.read() - values.push row.length - generator.on 'error', next - generator.on 'end', -> - # we dont test first and last values: - # First time, length is twice the highWaterMark - # Last time, length is only what's left - values.shift() - values.pop() - for value in values then value.should.be.within 100, 250 - next() diff --git a/packages/csv-generate/test/api.highWaterMark.js b/packages/csv-generate/test/api.highWaterMark.js new file mode 100644 index 00000000..add1a5ac --- /dev/null +++ b/packages/csv-generate/test/api.highWaterMark.js @@ -0,0 +1,24 @@ +import "should"; +import { generate } from "../lib/index.js"; + +describe("api highWaterMark", function () { + it("honors option", function (next) { + const values = []; + const generator = generate({ length: 100, highWaterMark: 100 }); + generator.on("readable", () => { + let row; + while ((row = generator.read())) { + values.push(row.length); + } + }); + generator.on("error", next); + generator.on("end", () => { + values.shift(); + values.pop(); + for (const value of values) { + value.should.be.within(100, 250); + } + next(); + }); + }); +}); diff --git a/packages/csv-generate/test/api.pipe.coffee b/packages/csv-generate/test/api.pipe.coffee deleted file mode 100644 index c4fec26d..00000000 --- a/packages/csv-generate/test/api.pipe.coffee +++ /dev/null @@ -1,25 +0,0 @@ - -import stream from 'stream' -import util from 'util' -import { generate } from '../lib/index.js' - -describe 'api pipe', -> - - it 'to a custom writer', (next) -> - @timeout 1000000 - Writer = -> - stream.Writable.call @ - @_data = '' - @ - util.inherits Writer, stream.Writable - Writer.prototype._write = (chunk, encoding, callback) -> - @_data += chunk.toString() - callback() - writer = new Writer - writer.on 'finish', -> - writer - ._data.split('\n') - .length.should.eql 3 - next() - generator = generate length: 3 - generator.pipe writer diff --git a/packages/csv-generate/test/api.pipe.js b/packages/csv-generate/test/api.pipe.js new file mode 100644 index 00000000..9c453eb3 --- /dev/null +++ b/packages/csv-generate/test/api.pipe.js @@ -0,0 +1,27 @@ +import "should"; +import stream from "stream"; +import util from "util"; +import { generate } from "../lib/index.js"; + +describe("api pipe", function () { + it("to a custom writer", function (next) { + this.timeout(1000000); + const Writer = function () { + stream.Writable.call(this); + this._data = ""; + return this; + }; + util.inherits(Writer, stream.Writable); + Writer.prototype._write = function (chunk, encoding, callback) { + this._data += chunk.toString(); + callback(); + }; + const writer = new Writer(); + writer.on("finish", () => { + writer._data.split("\n").length.should.eql(3); + next(); + }); + const generator = generate({ length: 3 }); + generator.pipe(writer); + }); +}); diff --git a/packages/csv-generate/test/api.read.coffee b/packages/csv-generate/test/api.read.coffee deleted file mode 100644 index f4a969f5..00000000 --- a/packages/csv-generate/test/api.read.coffee +++ /dev/null @@ -1,63 +0,0 @@ - -import { generate } from '../lib/index.js' - -describe 'api read', -> - - it 'sync read text', (next) -> - buffers = [] - generator = generate length: 5, seed: 1, columns: 2 - generator.on 'readable', -> - while buffer = generator.read() - Buffer.isBuffer buffer - buffers.push buffer - generator.on 'error', next - generator.on 'end', -> - Buffer.concat(buffers).toString().should.eql """ - OMH,ONKCHhJmjadoA - D,GeACHiN - nnmiN,CGfDKB - NIl,JnnmjadnmiNL - KB,dmiM - """ - next() - - it 'sync read objects', (next) -> - rows = [] - generator = generate length: 5, objectMode: true, seed: 1, columns: 2 - generator.on 'readable', -> - while row = generator.read() - rows.push row - generator.on 'error', next - generator.on 'end', -> - rows.should.eql [ - [ 'OMH', 'ONKCHhJmjadoA' ] - [ 'D', 'GeACHiN' ] - [ 'nnmiN', 'CGfDKB' ] - [ 'NIl', 'JnnmjadnmiNL' ] - [ 'KB', 'dmiM' ] - ] - next() - - it 'async read', (next) -> - @timeout 0 - rows = [] - generator = generate length: 5, objectMode: true, seed: 1, columns: 2 - generator.on 'readable', -> - length = 0 - run = -> - row = generator.read() - return unless row - length += row.join('').length - rows.push row - setTimeout run, 10 - run() - generator.on 'error', next - generator.on 'end', -> - rows.should.eql [ - [ 'OMH', 'ONKCHhJmjadoA' ] - [ 'D', 'GeACHiN' ] - [ 'nnmiN', 'CGfDKB' ] - [ 'NIl', 'JnnmjadnmiNL' ] - [ 'KB', 'dmiM' ] - ] - next() diff --git a/packages/csv-generate/test/api.read.js b/packages/csv-generate/test/api.read.js new file mode 100644 index 00000000..e8700ec9 --- /dev/null +++ b/packages/csv-generate/test/api.read.js @@ -0,0 +1,90 @@ +import "should"; +import dedent from "dedent"; +import { generate } from "../lib/index.js"; + +describe("api read", function () { + it("sync read text", function (next) { + const buffers = []; + const generator = generate({ length: 5, seed: 1, columns: 2 }); + generator.on("readable", () => { + let buffer; + while ((buffer = generator.read())) { + Buffer.isBuffer(buffer); + buffers.push(buffer); + } + }); + generator.on("error", next); + generator.on("end", () => { + Buffer.concat(buffers) + .toString() + .should.eql( + dedent` + OMH,ONKCHhJmjadoA + D,GeACHiN + nnmiN,CGfDKB + NIl,JnnmjadnmiNL + KB,dmiM + `, + ); + next(); + }); + }); + + it("sync read objects", function (next) { + const rows = []; + const generator = generate({ + length: 5, + objectMode: true, + seed: 1, + columns: 2, + }); + generator.on("readable", () => { + let row; + while ((row = generator.read())) { + rows.push(row); + } + }); + generator.on("error", next); + generator.on("end", () => { + rows.should.eql([ + ["OMH", "ONKCHhJmjadoA"], + ["D", "GeACHiN"], + ["nnmiN", "CGfDKB"], + ["NIl", "JnnmjadnmiNL"], + ["KB", "dmiM"], + ]); + next(); + }); + }); + + it("async read", function (next) { + this.timeout(0); + const rows = []; + const generator = generate({ + length: 5, + objectMode: true, + seed: 1, + columns: 2, + }); + generator.on("readable", () => { + const run = () => { + const row = generator.read(); + if (!row) return; + rows.push(row); + setTimeout(run, 10); + }; + run(); + }); + generator.on("error", next); + generator.on("end", () => { + rows.should.eql([ + ["OMH", "ONKCHhJmjadoA"], + ["D", "GeACHiN"], + ["nnmiN", "CGfDKB"], + ["NIl", "JnnmjadnmiNL"], + ["KB", "dmiM"], + ]); + next(); + }); + }); +}); diff --git a/packages/csv-generate/test/api.sync.coffee b/packages/csv-generate/test/api.sync.coffee deleted file mode 100644 index 264b42d9..00000000 --- a/packages/csv-generate/test/api.sync.coffee +++ /dev/null @@ -1,23 +0,0 @@ - -import {generate} from '../lib/sync.js' - -describe 'api sync', -> - - it 'throw error if options isnt provided', -> - (-> generate()).should.throw 'Invalid Argument: options must be an object or an integer' - (-> generate 3.14).should.throw 'Invalid Argument: options must be an object or an integer' - - it 'throw error if length isnt provided', -> - (-> generate({})).should.throw 'Invalid Argument: length is not defined' - - it 'accept length as an integer', -> - data = generate 1000 - data.split(/\n/).length.should.eql 1000 - - it 'accept length as a string integer', -> - data = generate '1000' - data.split(/\n/).length.should.eql 1000 - - it 'honors objectMode', -> - data = generate length: 1000, objectMode: true - data.length.should.eql 1000 diff --git a/packages/csv-generate/test/api.sync.js b/packages/csv-generate/test/api.sync.js new file mode 100644 index 00000000..c7caf64b --- /dev/null +++ b/packages/csv-generate/test/api.sync.js @@ -0,0 +1,34 @@ +import "should"; +import { generate } from "../lib/sync.js"; + +describe("api sync", function () { + it("throw error if options isnt provided", function () { + (() => generate()).should.throw( + "Invalid Argument: options must be an object or an integer", + ); + (() => generate(3.14)).should.throw( + "Invalid Argument: options must be an object or an integer", + ); + }); + + it("throw error if length isnt provided", function () { + (() => generate({})).should.throw( + "Invalid Argument: length is not defined", + ); + }); + + it("accept length as an integer", function () { + const data = generate(1000); + data.split(/\n/).length.should.eql(1000); + }); + + it("accept length as a string integer", function () { + const data = generate("1000"); + data.split(/\n/).length.should.eql(1000); + }); + + it("honors objectMode", function () { + const data = generate({ length: 1000, objectMode: true }); + data.length.should.eql(1000); + }); +}); diff --git a/packages/csv-generate/test/api.types.sync.ts b/packages/csv-generate/test/api.types.sync.ts index 6c1fc9ac..c9c52129 100644 --- a/packages/csv-generate/test/api.types.sync.ts +++ b/packages/csv-generate/test/api.types.sync.ts @@ -1,38 +1,37 @@ +import "should"; +import { generate, Options } from "../lib/sync.js"; -import 'should' -import { generate, Options } from '../lib/sync.js' +describe("API Types", () => { + describe("usage", () => { + it("sync with options as number", () => { + const generator: string = generate(1); + generator.should.be.a.String(); + }); -describe('API Types', () => { - - describe('usage', () => { - - it('sync with options as number', () => { - const generator: string = generate(1) - generator.should.be.a.String() - }) - - it('sync with options in string mode', () => { - const generator: string = generate({length: 1}) - generator.should.be.a.String() - }) - - it('sync with options in object mode', () => { - const generator: Array> = generate({length: 1, objectMode: true}) - generator.should.be.an.Array() - }) - }) + it("sync with options in string mode", () => { + const generator: string = generate({ length: 1 }); + generator.should.be.a.String(); + }); - describe('types', () => { - it('generate', () => { - const generator: string = generate(1) + it("sync with options in object mode", () => { + const generator: Array> = generate({ + length: 1, + objectMode: true, + }); + generator.should.be.an.Array(); + }); + }); + + describe("types", () => { + it("generate", () => { + const generator: string = generate(1); return generator; - }) - it('Options', () => { + }); + it("Options", () => { const options: Options = { - columns: 1 - } + columns: 1, + }; return options; - }) - }) - -}) + }); + }); +}); diff --git a/packages/csv-generate/test/api.types.ts b/packages/csv-generate/test/api.types.ts index 661ab80d..bc7466f6 100644 --- a/packages/csv-generate/test/api.types.ts +++ b/packages/csv-generate/test/api.types.ts @@ -1,128 +1,130 @@ +import "should"; +import { generate, Options, Generator } from "../lib/index.js"; -import 'should' -import { generate, Options, Generator } from '../lib/index.js' - -describe('API Types', () => { - - describe('Initialisation', () => { - - it('stream', () => { +describe("API Types", () => { + describe("Initialisation", () => { + it("stream", () => { // With callback - const generator: Generator = generate() - generator.destroy() - generator.should.be.an.Object() + const generator: Generator = generate(); + generator.destroy(); + generator.should.be.an.Object(); // With callback - generate( (err, records) => err || records ).destroy() + generate((err, records) => err || records).destroy(); // With options + callback - generate( {length: 1}, (err, records) => err || records ) - }) - - }) - - describe('Generator', () => { - - it('Expose options', () => { - const generator: Generator = generate() - const options: Options = generator.options - const keys: any = Object.keys(options) - keys.sort().should.eql([ - 'columns', 'delimiter', 'duration', 'encoding', 'end', 'eof', - 'fixedSize', 'length', 'maxWordLength', - 'rowDelimiter', 'seed', 'sleep' - ]) - }) - - it('Receive Callback', (next) => { - generate({length: 3}, function(err: Error | undefined, data: object){ - if(err !== undefined){ - data.should.be.an.Object() + generate({ length: 1 }, (err, records) => err || records); + }); + }); + + describe("Generator", () => { + it("Expose options", () => { + const generator: Generator = generate(); + const options: Options = generator.options; + const keys: any = Object.keys(options); + keys + .sort() + .should.eql([ + "columns", + "delimiter", + "duration", + "encoding", + "end", + "eof", + "fixedSize", + "length", + "maxWordLength", + "rowDelimiter", + "seed", + "sleep", + ]); + }); + + it("Receive Callback", (next) => { + generate({ length: 3 }, function (err: Error | undefined, data: object) { + if (err !== undefined) { + data.should.be.an.Object(); } - next(err) - }) - }) - - }) - - describe('Options', () => { - - it('columns', () => { - const options: Options = {} - options.columns = 8 + next(err); + }); + }); + }); + + describe("Options", () => { + it("columns", () => { + const options: Options = {}; + options.columns = 8; options.columns = [ "ascii", "bool", "int", ({ options, state }) => options.delimiter + "ok" + state.start_time, ]; - }) - - it('delimiter', () => { - const options: Options = {} - options.delimiter = '|' - }) - - it('duration', () => { - const options: Options = {} - options.duration = 1000 - }) - - it('encoding', () => { - const options: Options = {} - options.encoding = 'utf8' - }) - - it('end', () => { - const options: Options = {} - options.end = 1000 - options.end = new Date() - }) - - it('eof', () => { - const options: Options = {} - options.eof = true - options.eof = '\n' - }) - - it('fixed_size', () => { - const options: Options = {} - options.fixed_size = true - }) - - it('high_water_mark', () => { - const options: Options = {} - options.high_water_mark = 1024 - }) - - it('length', () => { - const options: Options = {} - options.length = 100 - }) - - it('max_word_length', () => { - const options: Options = {} - options.length = 10 - }) - - it('object_mode', () => { - const options: Options = {} - options.object_mode = true - }) - - it('row_delimiter', () => { - const options: Options = {} - options.row_delimiter = ';' - }) - - it('seed', () => { - const options: Options = {} - options.seed = 10 - }) - - it('sleep', () => { - const options: Options = {} - options.sleep = 1000 - }) - - }) - -}) + }); + + it("delimiter", () => { + const options: Options = {}; + options.delimiter = "|"; + }); + + it("duration", () => { + const options: Options = {}; + options.duration = 1000; + }); + + it("encoding", () => { + const options: Options = {}; + options.encoding = "utf8"; + }); + + it("end", () => { + const options: Options = {}; + options.end = 1000; + options.end = new Date(); + }); + + it("eof", () => { + const options: Options = {}; + options.eof = true; + options.eof = "\n"; + }); + + it("fixed_size", () => { + const options: Options = {}; + options.fixed_size = true; + }); + + it("high_water_mark", () => { + const options: Options = {}; + options.high_water_mark = 1024; + }); + + it("length", () => { + const options: Options = {}; + options.length = 100; + }); + + it("max_word_length", () => { + const options: Options = {}; + options.length = 10; + }); + + it("object_mode", () => { + const options: Options = {}; + options.object_mode = true; + }); + + it("row_delimiter", () => { + const options: Options = {}; + options.row_delimiter = ";"; + }); + + it("seed", () => { + const options: Options = {}; + options.seed = 10; + }); + + it("sleep", () => { + const options: Options = {}; + options.sleep = 1000; + }); + }); +}); diff --git a/packages/csv-generate/test/api.web_stream.coffee b/packages/csv-generate/test/api.web_stream.coffee deleted file mode 100644 index 5a0d979f..00000000 --- a/packages/csv-generate/test/api.web_stream.coffee +++ /dev/null @@ -1,52 +0,0 @@ - -import {generate as generateStream} from '../lib/stream.js' -import {generate as generateClassic} from '../lib/index.js' - -describe 'api stream', -> - - it.skip 'perf classic', -> - console.time('classic') - generator = generateClassic({ - objectMode: true, - length: 10000000 - }) - for await record from generator - continue - console.timeEnd('classic') - - it.skip 'perf stream', -> - console.time('stream') - generator = generateStream({ - objectMode: true, - length: 10000000 - }) - reader = generator.getReader() - while true - { done, value } = await reader.read() - break if done - # for await chunk from generator.getReader().read() - # console.log(Buffer.from(chunk).toString()); - console.timeEnd('stream') - - it 'perf stream with iterator', -> - generator = generateStream({ - objectMode: true, - length: 10 - }) - records = [] - for await record from generator - records.push record - records.length.should.eql 10 - - it 'perf stream with reader', -> - generator = generateStream({ - objectMode: true, - length: 10 - }) - records = [] - reader = generator.getReader() - while true - { done, record } = await reader.read() - break if done - records.push record - records.length.should.eql 10 diff --git a/packages/csv-generate/test/api.web_stream.js b/packages/csv-generate/test/api.web_stream.js new file mode 100644 index 00000000..df49f5db --- /dev/null +++ b/packages/csv-generate/test/api.web_stream.js @@ -0,0 +1,59 @@ +import "should"; +import { generate as generateStream } from "../lib/stream.js"; +import { generate as generateClassic } from "../lib/index.js"; + +describe("api stream", function () { + it.skip("perf classic", async function () { + console.time("classic"); + const generator = generateClassic({ + objectMode: true, + length: 10000000, + }); + for await (const record of generator) { + record; + continue; + } + console.timeEnd("classic"); + }); + + it.skip("perf stream", async function () { + console.time("stream"); + const generator = generateStream({ + objectMode: true, + length: 10000000, + }); + const reader = generator.getReader(); + while (true) { + const { done } = await reader.read(); + if (done) break; + } + console.timeEnd("stream"); + }); + + it("perf stream with iterator", async function () { + const generator = generateStream({ + objectMode: true, + length: 10, + }); + const records = []; + for await (const record of generator) { + records.push(record); + } + records.length.should.eql(10); + }); + + it("perf stream with reader", async function () { + const generator = generateStream({ + objectMode: true, + length: 10, + }); + const records = []; + const reader = generator.getReader(); + while (true) { + const { done, record } = await reader.read(); + if (done) break; + records.push(record); + } + records.length.should.eql(10); + }); +}); diff --git a/packages/csv-generate/test/event.end.coffee b/packages/csv-generate/test/event.end.coffee deleted file mode 100644 index 543417f1..00000000 --- a/packages/csv-generate/test/event.end.coffee +++ /dev/null @@ -1,17 +0,0 @@ - -import { generate } from '../lib/index.js' - -describe 'event end', -> - - it 'with fixed_size', (next) -> - count = 0 - ended = false - generator = generate() - generator.on 'readable', -> - while(data = generator.read()) - ended.should.be.false() - if count++ is 100 - ended = true - generator.end() - generator.on 'error', next - generator.on 'end', next diff --git a/packages/csv-generate/test/event.end.js b/packages/csv-generate/test/event.end.js new file mode 100644 index 00000000..18ce5871 --- /dev/null +++ b/packages/csv-generate/test/event.end.js @@ -0,0 +1,21 @@ +import "should"; +import { generate } from "../lib/index.js"; + +describe("event end", function () { + it("with fixed_size", function (next) { + let count = 0; + let ended = false; + const generator = generate(); + generator.on("readable", () => { + while (generator.read()) { + ended.should.be.false(); + if (count++ === 100) { + ended = true; + generator.end(); + } + } + }); + generator.on("error", next); + generator.on("end", next); + }); +}); diff --git a/packages/csv-generate/test/loaders/all.js b/packages/csv-generate/test/loaders/all.js deleted file mode 100644 index 4e81c344..00000000 --- a/packages/csv-generate/test/loaders/all.js +++ /dev/null @@ -1,15 +0,0 @@ -import * as coffee from "./coffee.js"; -import * as ts from "ts-node/esm"; - -const coffeeRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; -const tsRegex = /\.ts$/; - -export function load(url, context, next) { - if (coffeeRegex.test(url)) { - return coffee.load.apply(this, arguments); - } - if (tsRegex.test(url)) { - return ts.load.apply(this, arguments); - } - return next(url, context, next); -} diff --git a/packages/csv-generate/test/loaders/coffee.js b/packages/csv-generate/test/loaders/coffee.js deleted file mode 100644 index 75b15abe..00000000 --- a/packages/csv-generate/test/loaders/coffee.js +++ /dev/null @@ -1,20 +0,0 @@ -import CoffeeScript from "coffeescript"; - -// See https://github.com/nodejs/node/issues/36396 -const extensionsRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; - -export async function load(url, context, next) { - if (extensionsRegex.test(url)) { - const format = "module"; - const { source: rawSource } = await next(url, { format }); - const source = CoffeeScript.compile(rawSource.toString(), { - bare: true, - inlineMap: true, - filename: url, - header: false, - sourceMap: false, - }); - return { format, source }; - } - return next(url, context); -} diff --git a/packages/csv-generate/test/loaders/legacy/all.js b/packages/csv-generate/test/loaders/legacy/all.js deleted file mode 100644 index f5e57e54..00000000 --- a/packages/csv-generate/test/loaders/legacy/all.js +++ /dev/null @@ -1,36 +0,0 @@ -import * as coffee from "./coffee.js"; -import * as ts from "ts-node/esm"; - -const coffeeRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; -const tsRegex = /\.ts$/; - -export function resolve(specifier) { - if (coffeeRegex.test(specifier)) { - return coffee.resolve.apply(this, arguments); - } - if (tsRegex.test(specifier)) { - return ts.resolve.apply(this, arguments); - } - return ts.resolve.apply(this, arguments); -} - -export function getFormat(url) { - if (coffeeRegex.test(url)) { - return coffee.getFormat.apply(this, arguments); - } - if (tsRegex.test(url)) { - return ts.getFormat.apply(this, arguments); - } - return ts.getFormat.apply(this, arguments); -} - -export function transformSource(source, context) { - const { url } = context; - if (coffeeRegex.test(url)) { - return coffee.transformSource.apply(this, arguments); - } - if (tsRegex.test(url)) { - return ts.transformSource.apply(this, arguments); - } - return ts.transformSource.apply(this, arguments); -} diff --git a/packages/csv-generate/test/loaders/legacy/coffee.js b/packages/csv-generate/test/loaders/legacy/coffee.js deleted file mode 100644 index 6a9975db..00000000 --- a/packages/csv-generate/test/loaders/legacy/coffee.js +++ /dev/null @@ -1,50 +0,0 @@ -// coffeescript-loader.mjs -import { URL, pathToFileURL } from "url"; -import CoffeeScript from "coffeescript"; -import { cwd } from "process"; - -const baseURL = pathToFileURL(`${cwd()}/`).href; - -// CoffeeScript files end in .coffee, .litcoffee or .coffee.md. -const extensionsRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; - -export function resolve(specifier, context, defaultResolve) { - const { parentURL = baseURL } = context; - // Node.js normally errors on unknown file extensions, so return a URL for - // specifiers ending in the CoffeeScript file extensions. - if (extensionsRegex.test(specifier)) { - return { - url: new URL(specifier, parentURL).href, - stop: true, - }; - } - // Let Node.js handle all other specifiers. - return defaultResolve(specifier, context, defaultResolve); -} - -export function getFormat(url, context, defaultGetFormat) { - // Now that we patched resolve to let CoffeeScript URLs through, we need to - // tell Node.js what format such URLs should be interpreted as. For the - // purposes of this loader, all CoffeeScript URLs are ES modules. - if (extensionsRegex.test(url)) { - return { - format: "module", - stop: true, - }; - } - // Let Node.js handle all other URLs. - return defaultGetFormat(url, context, defaultGetFormat); -} - -export function transformSource(source, context, defaultTransformSource) { - const { url } = context; - - if (extensionsRegex.test(url)) { - return { - source: CoffeeScript.compile(String(source), { bare: true }), - }; - } - - // Let Node.js handle all other sources. - return defaultTransformSource(source, context, defaultTransformSource); -} diff --git a/packages/csv-generate/test/options.coffee b/packages/csv-generate/test/options.coffee deleted file mode 100644 index 3e1330f0..00000000 --- a/packages/csv-generate/test/options.coffee +++ /dev/null @@ -1,14 +0,0 @@ - -import { generate } from '../lib/index.js' - -describe 'Options', -> - - it 'no options with default', (next) -> - @timeout 1000000 - count = 0 - generator = generate() - generator.on 'readable', -> - while d = generator.read() - generator.end() if count++ is 100 - generator.on 'error', next - generator.on 'end', next diff --git a/packages/csv-generate/test/options.columns.coffee b/packages/csv-generate/test/options.columns.coffee deleted file mode 100644 index c654dd7d..00000000 --- a/packages/csv-generate/test/options.columns.coffee +++ /dev/null @@ -1,114 +0,0 @@ - -import { generate } from '../lib/index.js' - -describe 'Option `columns`', -> - - it 'as number', (next) -> - @timeout 1000000 - count = 0 - data = [] - generator = generate columns: 3 - generator.on 'readable', -> - while d = generator.read() - data.push d - if count++ is 2 - generator.end() - generator.on 'error', next - generator.on 'end', -> - data - .join('').split('\n')[1].split(',') - .length.should.eql 3 - next() - - it 'as types', (next) -> - @timeout 1000000 - count = 0 - data = [] - generator = generate columns: ['int', 'bool'], seed: 1 - generator.on 'readable', -> - while d = generator.read() - data.push d - if count++ is 2 - generator.end() - generator.on 'error', next - generator.on 'end', -> - data - .join('').split('\n')[1].split(',') - .should.eql ['1790016367053545', '0'] - next() - - it 'validate types', (next) -> - try - generate columns: ['int', 'bool', 'invalid'] - catch err - err.message.should.eql 'Invalid column type: got "invalid", default values are ["ascii","int","bool"]' - next() - - describe 'user function', -> - - it 'accept string or null or number', (next) -> - @timeout 1000000 - data = [] - generator = generate length: 1, columns: [ - -> 'a' - -> null - -> 1 - ] - generator.on 'readable', -> - while d = generator.read() - data.push d.toString() - generator.on 'error', next - generator.on 'end', -> - data.should.eql ['a,,1'] - next() - - it 'validate return argument', (next) -> - @timeout 1000000 - generator = generate objectMode: true, columns: [ - -> {} - ] - generator.on 'readable', -> - while d = generator.read() then true - generator.on 'error', (err) -> - err.message.should.eql [ - 'INVALID_VALUE:' - 'values returned by column function must be' - 'a string, a number or null,' - 'got {}' - ].join ' ' - next() - generator.on 'end', -> next Error('Oh no') - - it 'validate arguments in objectMode', (next) -> - @timeout 1000000 - data = [] - generator = generate objectMode: true, length: 1, columns: [ - ({options}) -> JSON.stringify(options) - ({state}) -> JSON.stringify(state) - ] - generator.on 'readable', -> - while d = generator.read() - data.push JSON.parse(d[0]), JSON.parse(d[1]) - generator.on 'error', next - generator.on 'end', -> - data.should.eql [ - columns: [ null, null ] - delimiter: ',' - duration: null - encoding: null - end: null - eof: false - fixedSize: false - length: 1 - maxWordLength: 16 - objectMode: true - rowDelimiter: '\n' - seed: false - sleep: 0 - , - start_time: null - fixed_size_buffer: '' - count_written: 0 - count_created: 0 - ] - next() diff --git a/packages/csv-generate/test/options.columns.js b/packages/csv-generate/test/options.columns.js new file mode 100644 index 00000000..ccc8e8c4 --- /dev/null +++ b/packages/csv-generate/test/options.columns.js @@ -0,0 +1,152 @@ +import "should"; +import { generate } from "../lib/index.js"; + +describe("Option `columns`", function () { + it("as number", function (next) { + this.timeout(1000000); + let count = 0; + const data = []; + const generator = generate({ columns: 3 }); + generator.on("readable", () => { + let d; + while ((d = generator.read())) { + data.push(d); + if (count++ === 2) { + generator.end(); + } + } + }); + generator.on("error", next); + generator.on("end", () => { + data.join("").split("\n")[1].split(",").length.should.eql(3); + next(); + }); + }); + + it("as types", function (next) { + this.timeout(1000000); + let count = 0; + const data = []; + const generator = generate({ columns: ["int", "bool"], seed: 1 }); + generator.on("readable", () => { + let d; + while ((d = generator.read())) { + data.push(d); + if (count++ === 2) { + generator.end(); + } + } + }); + generator.on("error", next); + generator.on("end", () => { + data + .join("") + .split("\n")[1] + .split(",") + .should.eql(["1790016367053545", "0"]); + next(); + }); + }); + + it("validate types", function (next) { + try { + generate({ columns: ["int", "bool", "invalid"] }); + } catch (err) { + err.message.should.eql( + 'Invalid column type: got "invalid", default values are ["ascii","int","bool"]', + ); + next(); + } + }); + + describe("user function", function () { + it("accept string or null or number", function (next) { + this.timeout(1000000); + const data = []; + const generator = generate({ + length: 1, + columns: [() => "a", () => null, () => 1], + }); + generator.on("readable", () => { + let d; + while ((d = generator.read())) { + data.push(d.toString()); + } + }); + generator.on("error", next); + generator.on("end", () => { + data.should.eql(["a,,1"]); + next(); + }); + }); + + it("validate return argument", function (next) { + this.timeout(1000000); + const generator = generate({ + objectMode: true, + columns: [() => ({})], + }); + generator.on("readable", () => { + while (generator.read()) true; + }); + generator.on("error", (err) => { + err.message.should.eql( + [ + "INVALID_VALUE:", + "values returned by column function must be", + "a string, a number or null,", + "got {}", + ].join(" "), + ); + next(); + }); + generator.on("end", () => next(Error("Oh no"))); + }); + + it("validate arguments in objectMode", function (next) { + this.timeout(1000000); + const data = []; + const generator = generate({ + objectMode: true, + length: 1, + columns: [ + ({ options }) => JSON.stringify(options), + ({ state }) => JSON.stringify(state), + ], + }); + generator.on("readable", () => { + let d; + while ((d = generator.read())) { + data.push(JSON.parse(d[0]), JSON.parse(d[1])); + } + }); + generator.on("error", next); + generator.on("end", () => { + data.should.eql([ + { + columns: [null, null], + delimiter: ",", + duration: null, + encoding: null, + end: null, + eof: false, + fixedSize: false, + length: 1, + maxWordLength: 16, + objectMode: true, + rowDelimiter: "\n", + seed: false, + sleep: 0, + }, + { + start_time: null, + fixed_size_buffer: "", + count_written: 0, + count_created: 0, + }, + ]); + next(); + }); + }); + }); +}); diff --git a/packages/csv-generate/test/options.delimiter.coffee b/packages/csv-generate/test/options.delimiter.coffee deleted file mode 100644 index 94e22a7d..00000000 --- a/packages/csv-generate/test/options.delimiter.coffee +++ /dev/null @@ -1,24 +0,0 @@ - -import { generate } from '../lib/index.js' - -describe 'Option `delimiter`', -> - - it 'one char', (next) -> - generate seed: 1, delimiter: '|', length: 4, encoding: 'ascii', (err, data) -> - return next err if err - data.should.eql """ - OMH|ONKCHhJmjadoA|D|GeACHiN|nnmiN|CGfDKB|NIl|JnnmjadnmiNL - KB|dmiM|fENL|Jn|opEMIkdmiOMFckep|MIj|bgIjadnn|fENLEOMIkbhLDK - B|LF|gGeBFaeAC|iLEO|IkdoAAC|hKpD|opENJ|opDLENLDJoAAABFP - iNJnmjPbhL|Ik|jPbhKCHhJn|fDKCHhIkeAABEM|kdnlh|DKACIl|HgGdoABEMIjP|adlhKCGf - """ - next() - - it 'multiple chars', (next) -> - generate seed: 1, columns: 3, delimiter: '||', length: 2, encoding: 'ascii', (err, data) -> - return next err if err - data.should.eql """ - OMH||ONKCHhJmjadoA||D - GeACHiN||nnmiN||CGfDKB - """ - next() diff --git a/packages/csv-generate/test/options.delimiter.js b/packages/csv-generate/test/options.delimiter.js new file mode 100644 index 00000000..ab8d4ff8 --- /dev/null +++ b/packages/csv-generate/test/options.delimiter.js @@ -0,0 +1,37 @@ +import "should"; +import dedent from "dedent"; +import { generate } from "../lib/index.js"; + +describe("Option `delimiter`", function () { + it("one char", function (next) { + generate( + { seed: 1, delimiter: "|", length: 4, encoding: "ascii" }, + (err, data) => { + if (err) return next(err); + data.should.eql( + dedent` + OMH|ONKCHhJmjadoA|D|GeACHiN|nnmiN|CGfDKB|NIl|JnnmjadnmiNL + KB|dmiM|fENL|Jn|opEMIkdmiOMFckep|MIj|bgIjadnn|fENLEOMIkbhLDK + B|LF|gGeBFaeAC|iLEO|IkdoAAC|hKpD|opENJ|opDLENLDJoAAABFP + iNJnmjPbhL|Ik|jPbhKCHhJn|fDKCHhIkeAABEM|kdnlh|DKACIl|HgGdoABEMIjP|adlhKCGf + `, + ); + next(); + }, + ); + }); + + it("multiple chars", function (next) { + generate( + { seed: 1, columns: 3, delimiter: "||", length: 2, encoding: "ascii" }, + (err, data) => { + if (err) return next(err); + data.should.eql(dedent` + OMH||ONKCHhJmjadoA||D + GeACHiN||nnmiN||CGfDKB + `); + next(); + }, + ); + }); +}); diff --git a/packages/csv-generate/test/options.duration.coffee b/packages/csv-generate/test/options.duration.coffee deleted file mode 100644 index 9d2350b1..00000000 --- a/packages/csv-generate/test/options.duration.coffee +++ /dev/null @@ -1,13 +0,0 @@ - -import { generate } from '../lib/index.js' - -describe 'option `duration`', -> - - it 'as millisecond', (next) -> - @timeout 1000000 - start = Date.now() - generate duration: 1000, encoding: 'ascii', (err, data) -> - end = Date.now() - (end - start).should.be.within(1000, 1100) unless err - data.split('\n').length.should.be.above 10000 unless err - next err diff --git a/packages/csv-generate/test/options.duration.js b/packages/csv-generate/test/options.duration.js new file mode 100644 index 00000000..11aa7ac1 --- /dev/null +++ b/packages/csv-generate/test/options.duration.js @@ -0,0 +1,17 @@ +import "should"; +import { generate } from "../lib/index.js"; + +describe("option `duration`", function () { + it("as millisecond", function (next) { + this.timeout(1000000); + const start = Date.now(); + generate({ duration: 1000, encoding: "ascii" }, (err, data) => { + const end = Date.now(); + if (!err) { + (end - start).should.be.within(1000, 1100); + data.split("\n").length.should.be.above(10000); + } + next(err); + }); + }); +}); diff --git a/packages/csv-generate/test/options.encoding.coffee b/packages/csv-generate/test/options.encoding.coffee deleted file mode 100644 index 52161997..00000000 --- a/packages/csv-generate/test/options.encoding.coffee +++ /dev/null @@ -1,14 +0,0 @@ - -import { generate } from '../lib/index.js' - -describe 'Option `encoding`', -> - - it 'generate buffer by default', (next) -> - generate length: 1, (err, data) -> - Buffer.isBuffer(data).should.be.true() unless err - next err - - it 'generate string if defined', (next) -> - generate length: 1, encoding: 'ascii', (err, data) -> - data.should.be.a.String() unless err - next err diff --git a/packages/csv-generate/test/options.encoding.js b/packages/csv-generate/test/options.encoding.js new file mode 100644 index 00000000..a3da9791 --- /dev/null +++ b/packages/csv-generate/test/options.encoding.js @@ -0,0 +1,22 @@ +import "should"; +import { generate } from "../lib/index.js"; + +describe("Option `encoding`", function () { + it("generate buffer by default", function (next) { + generate({ length: 1 }, (err, data) => { + if (!err) { + Buffer.isBuffer(data).should.be.true(); + } + next(err); + }); + }); + + it("generate string if defined", function (next) { + generate({ length: 1, encoding: "ascii" }, (err, data) => { + if (!err) { + data.should.be.a.String(); + } + next(err); + }); + }); +}); diff --git a/packages/csv-generate/test/options.end.coffee b/packages/csv-generate/test/options.end.coffee deleted file mode 100644 index c3985c77..00000000 --- a/packages/csv-generate/test/options.end.coffee +++ /dev/null @@ -1,25 +0,0 @@ - -import { generate } from '../lib/index.js' - -describe 'Option `end`', -> - - it 'as millisecond', (next) -> - @timeout 1000000 - generate end: Date.now() + 1000, encoding: 'ascii', (err, data) -> - return next err if err - data.split('\n').length.should.be.above 10000 - next() - - it 'as millisecond dont generate record if inferior to now', (next) -> - @timeout 1000000 - generate end: Date.now()-1, encoding: 'ascii', (err, data) -> - return next err if err - data.should.eql "" - next() - - it 'as date', (next) -> - @timeout 1000000 - generate end: new Date(Date.now() + 1000), encoding: 'ascii', (err, data) -> - return next err if err - data.split('\n').length.should.be.above 10000 - next() diff --git a/packages/csv-generate/test/options.end.js b/packages/csv-generate/test/options.end.js new file mode 100644 index 00000000..dc813c52 --- /dev/null +++ b/packages/csv-generate/test/options.end.js @@ -0,0 +1,34 @@ +import "should"; +import { generate } from "../lib/index.js"; + +describe("Option `end`", function () { + it("as millisecond", function (next) { + this.timeout(1000000); + generate({ end: Date.now() + 1000, encoding: "ascii" }, (err, data) => { + if (err) return next(err); + data.split("\n").length.should.be.above(10000); + next(); + }); + }); + + it("as millisecond dont generate record if inferior to now", function (next) { + this.timeout(1000000); + generate({ end: Date.now() - 1, encoding: "ascii" }, (err, data) => { + if (err) return next(err); + data.should.eql(""); + next(); + }); + }); + + it("as date", function (next) { + this.timeout(1000000); + generate( + { end: new Date(Date.now() + 1000), encoding: "ascii" }, + (err, data) => { + if (err) return next(err); + data.split("\n").length.should.be.above(10000); + next(); + }, + ); + }); +}); diff --git a/packages/csv-generate/test/options.eof.coffee b/packages/csv-generate/test/options.eof.coffee deleted file mode 100644 index aac5d037..00000000 --- a/packages/csv-generate/test/options.eof.coffee +++ /dev/null @@ -1,14 +0,0 @@ - -import { generate } from '../lib/index.js' - -describe 'Option `eof`', -> - - it 'default to trailing newline character if true', (next) -> - generator = generate eof: true, length: 10, encoding: 'ascii', (err, data) -> - data.split('\n')[10].should.eql '' unless err - next err - - it 'accept any string', (next) -> - generator = generate eof: 'abcd', length: 10, encoding: 'ascii', (err, data) -> - data.split('abcd')[1].should.eql '' unless err - next err diff --git a/packages/csv-generate/test/options.eof.js b/packages/csv-generate/test/options.eof.js new file mode 100644 index 00000000..904c5e70 --- /dev/null +++ b/packages/csv-generate/test/options.eof.js @@ -0,0 +1,36 @@ +import "should"; +import { generate } from "../lib/index.js"; + +describe("Option `eof`", function () { + it("default to trailing newline character if true", function (next) { + generate( + { + eof: true, + length: 10, + encoding: "ascii", + }, + (err, data) => { + if (!err) { + data.split("\n")[10].should.eql(""); + } + next(err); + }, + ); + }); + + it("accept any string", function (next) { + generate( + { + eof: "abcd", + length: 10, + encoding: "ascii", + }, + (err, data) => { + if (!err) { + data.split("abcd")[1].should.eql(""); + } + next(err); + }, + ); + }); +}); diff --git a/packages/csv-generate/test/options.fixed_size.coffee b/packages/csv-generate/test/options.fixed_size.coffee deleted file mode 100644 index facb1498..00000000 --- a/packages/csv-generate/test/options.fixed_size.coffee +++ /dev/null @@ -1,15 +0,0 @@ - -import { generate } from '../lib/index.js' - -describe 'Option `fixed_size`', -> - - it 'with fixed_size', (next) -> - count = 0 - generator = generate fixed_size: true, highWaterMark: 1024 - generator.on 'readable', -> - while(data = generator.read()) - # First generated data is twice the high water mark, don't know why - data.length.should.eql 1024 - generator.end() if count++ is 100 - generator.on 'error', next - generator.on 'end', next diff --git a/packages/csv-generate/test/options.fixed_size.js b/packages/csv-generate/test/options.fixed_size.js new file mode 100644 index 00000000..16a08934 --- /dev/null +++ b/packages/csv-generate/test/options.fixed_size.js @@ -0,0 +1,24 @@ +import "should"; +import { generate } from "../lib/index.js"; + +describe("Option `fixed_size`", function () { + it("with fixed_size", function (next) { + let count = 0; + const generator = generate({ + fixed_size: true, + highWaterMark: 1024, + }); + generator.on("readable", () => { + let data; + while ((data = generator.read())) { + // First generated data is twice the high water mark, don't know why + data.length.should.eql(1024); + if (count++ === 100) { + generator.end(); + } + } + }); + generator.on("error", next); + generator.on("end", next); + }); +}); diff --git a/packages/csv-generate/test/options.high_water_mark.coffee b/packages/csv-generate/test/options.high_water_mark.coffee deleted file mode 100644 index 59530998..00000000 --- a/packages/csv-generate/test/options.high_water_mark.coffee +++ /dev/null @@ -1,14 +0,0 @@ - -import { generate } from '../lib/index.js' - -describe 'Option `high_water_mark`', -> - - it 'generate slightly larger buffer lengths', (next) -> - count = 0 - generator = generate fixed_size: true, highWaterMark: 64 - generator.on 'readable', -> - while(data = generator.read()) - data.length.should.be.within 64, 64*3 - generator.end() if count++ is 100 - generator.on 'error', next - generator.on 'end', next diff --git a/packages/csv-generate/test/options.high_water_mark.js b/packages/csv-generate/test/options.high_water_mark.js new file mode 100644 index 00000000..5314814a --- /dev/null +++ b/packages/csv-generate/test/options.high_water_mark.js @@ -0,0 +1,23 @@ +import "should"; +import { generate } from "../lib/index.js"; + +describe("Option `high_water_mark`", function () { + it("generate slightly larger buffer lengths", function (next) { + let count = 0; + const generator = generate({ + fixed_size: true, + highWaterMark: 64, + }); + generator.on("readable", () => { + let data; + while ((data = generator.read())) { + data.length.should.be.within(64, 64 * 3); + if (count++ === 100) { + generator.end(); + } + } + }); + generator.on("error", next); + generator.on("end", next); + }); +}); diff --git a/packages/csv-generate/test/options.js b/packages/csv-generate/test/options.js new file mode 100644 index 00000000..2d372249 --- /dev/null +++ b/packages/csv-generate/test/options.js @@ -0,0 +1,19 @@ +import "should"; +import { generate } from "../lib/index.js"; + +describe("Options", function () { + it("no options with default", function (next) { + this.timeout(1000000); + let count = 0; + const generator = generate(); + generator.on("readable", () => { + while (generator.read()) { + if (count++ === 100) { + generator.end(); + } + } + }); + generator.on("error", next); + generator.on("end", next); + }); +}); diff --git a/packages/csv-generate/test/options.length.coffee b/packages/csv-generate/test/options.length.coffee deleted file mode 100644 index f0f20bf9..00000000 --- a/packages/csv-generate/test/options.length.coffee +++ /dev/null @@ -1,18 +0,0 @@ - -import { generate } from '../lib/index.js' - -describe 'Option `length`', -> - - it 'raw text', (next) -> - @timeout 1000000 - generate length: 20, encoding: 'ascii', (err, data) -> - return next err if err - data.split('\n').length.should.eql 20 - next() - - it 'object', (next) -> - @timeout 1000000 - generate objectMode: true, length: 20, (err, data) -> - return next err if err - data.length.should.eql 20 - next() diff --git a/packages/csv-generate/test/options.length.js b/packages/csv-generate/test/options.length.js new file mode 100644 index 00000000..c1865f4e --- /dev/null +++ b/packages/csv-generate/test/options.length.js @@ -0,0 +1,34 @@ +import "should"; +import { generate } from "../lib/index.js"; + +describe("Option `length`", function () { + it("raw text", function (next) { + this.timeout(1000000); + generate( + { + length: 20, + encoding: "ascii", + }, + (err, data) => { + if (err) return next(err); + data.split("\n").length.should.eql(20); + next(); + }, + ); + }); + + it("object", function (next) { + this.timeout(1000000); + generate( + { + objectMode: true, + length: 20, + }, + (err, data) => { + if (err) return next(err); + data.length.should.eql(20); + next(); + }, + ); + }); +}); diff --git a/packages/csv-generate/test/options.max_word_length.coffee b/packages/csv-generate/test/options.max_word_length.coffee deleted file mode 100644 index d72c86d5..00000000 --- a/packages/csv-generate/test/options.max_word_length.coffee +++ /dev/null @@ -1,22 +0,0 @@ - -import { generate } from '../lib/index.js' - -describe 'Option `max_word_length', -> - - it 'default to 16', (next) -> - @timeout 1000000 - generate seed: 1, objectMode: true, length: 10, (err, records) -> - return next err if err - for record in records - for field in record - field.length.should.be.below 17 - next() - - it 'is set to 4', (next) -> - @timeout 1000000 - generate max_word_length: 4, seed: 1, objectMode: true, length: 10, (err, records) -> - return next err if err - for record in records - for field in record - field.length.should.be.below 5 - next() diff --git a/packages/csv-generate/test/options.max_word_length.js b/packages/csv-generate/test/options.max_word_length.js new file mode 100644 index 00000000..66308de1 --- /dev/null +++ b/packages/csv-generate/test/options.max_word_length.js @@ -0,0 +1,33 @@ +import "should"; +import { generate } from "../lib/index.js"; + +describe("Option `max_word_length", function () { + it("default to 16", function (next) { + this.timeout(1000000); + generate({ seed: 1, objectMode: true, length: 10 }, (err, records) => { + if (err) return next(err); + for (const record of records) { + for (const field of record) { + field.length.should.be.below(17); + } + } + next(); + }); + }); + + it("is set to 4", function (next) { + this.timeout(1000000); + generate( + { max_word_length: 4, seed: 1, objectMode: true, length: 10 }, + (err, records) => { + if (err) return next(err); + for (const record of records) { + for (const field of record) { + field.length.should.be.below(5); + } + } + next(); + }, + ); + }); +}); diff --git a/packages/csv-generate/test/options.object_mode.coffee b/packages/csv-generate/test/options.object_mode.coffee deleted file mode 100644 index 2af25c64..00000000 --- a/packages/csv-generate/test/options.object_mode.coffee +++ /dev/null @@ -1,16 +0,0 @@ - -import { generate } from '../lib/index.js' - -describe 'Option `objectMode`', -> - - it 'return an array of array', (next) -> - @timeout 1000000 - generate seed: 1, objectMode: true, length: 4, (err, data) -> - return next err if err - data.should.eql [ - [ 'OMH','ONKCHhJmjadoA','D','GeACHiN','nnmiN','CGfDKB','NIl','JnnmjadnmiNL' ] - [ 'KB','dmiM','fENL','Jn','opEMIkdmiOMFckep','MIj','bgIjadnn','fENLEOMIkbhLDK' ] - [ 'B','LF','gGeBFaeAC','iLEO','IkdoAAC','hKpD','opENJ','opDLENLDJoAAABFP' ] - [ 'iNJnmjPbhL','Ik','jPbhKCHhJn','fDKCHhIkeAABEM','kdnlh','DKACIl','HgGdoABEMIjP','adlhKCGf' ] - ] - next() diff --git a/packages/csv-generate/test/options.object_mode.js b/packages/csv-generate/test/options.object_mode.js new file mode 100644 index 00000000..267f8dc1 --- /dev/null +++ b/packages/csv-generate/test/options.object_mode.js @@ -0,0 +1,54 @@ +import "should"; +import { generate } from "../lib/index.js"; + +describe("Option `objectMode`", function () { + it("return an array of array", function (next) { + this.timeout(1000000); + generate({ seed: 1, objectMode: true, length: 4 }, (err, data) => { + if (err) return next(err); + data.should.eql([ + [ + "OMH", + "ONKCHhJmjadoA", + "D", + "GeACHiN", + "nnmiN", + "CGfDKB", + "NIl", + "JnnmjadnmiNL", + ], + [ + "KB", + "dmiM", + "fENL", + "Jn", + "opEMIkdmiOMFckep", + "MIj", + "bgIjadnn", + "fENLEOMIkbhLDK", + ], + [ + "B", + "LF", + "gGeBFaeAC", + "iLEO", + "IkdoAAC", + "hKpD", + "opENJ", + "opDLENLDJoAAABFP", + ], + [ + "iNJnmjPbhL", + "Ik", + "jPbhKCHhJn", + "fDKCHhIkeAABEM", + "kdnlh", + "DKACIl", + "HgGdoABEMIjP", + "adlhKCGf", + ], + ]); + next(); + }); + }); +}); diff --git a/packages/csv-generate/test/options.row_delimiter.coffee b/packages/csv-generate/test/options.row_delimiter.coffee deleted file mode 100644 index c3b4634b..00000000 --- a/packages/csv-generate/test/options.row_delimiter.coffee +++ /dev/null @@ -1,14 +0,0 @@ - -import { generate } from '../lib/index.js' - -describe 'Option `row_delimiter`', -> - - it 'default to unix style', (next) -> - generator = generate length: 10, encoding: 'ascii', (err, data) -> - data.split('\n').length.should.eql 10 unless err - next err - - it 'accept multiple chars', (next) -> - generator = generate row_delimiter: 'abcd', length: 10, encoding: 'ascii', (err, data) -> - data.split('abcd').length.should.eql 10 unless err - next err diff --git a/packages/csv-generate/test/options.row_delimiter.js b/packages/csv-generate/test/options.row_delimiter.js new file mode 100644 index 00000000..7a84200d --- /dev/null +++ b/packages/csv-generate/test/options.row_delimiter.js @@ -0,0 +1,25 @@ +import "should"; +import { generate } from "../lib/index.js"; + +describe("Option `row_delimiter`", function () { + it("default to unix style", function (next) { + generate({ length: 10, encoding: "ascii" }, (err, data) => { + if (!err) { + data.split("\n").length.should.eql(10); + } + next(err); + }); + }); + + it("accept multiple chars", function (next) { + generate( + { row_delimiter: "abcd", length: 10, encoding: "ascii" }, + (err, data) => { + if (!err) { + data.split("abcd").length.should.eql(10); + } + next(err); + }, + ); + }); +}); diff --git a/packages/csv-generate/test/options.seed.coffee b/packages/csv-generate/test/options.seed.coffee deleted file mode 100644 index 8628b70b..00000000 --- a/packages/csv-generate/test/options.seed.coffee +++ /dev/null @@ -1,41 +0,0 @@ - -import { generate } from '../lib/index.js' -import { random } from '../lib/api/random.js' - -describe 'Option `seed`', -> - - describe 'without seed', -> - - it 'generate different values', -> - random(generate().options).should.not.equal random(generate().options) - - it 'generate between 0 and 1', -> - random(generate().options).should.be.above 0 - random(generate().options).should.be.below 1 - - describe 'with seed', -> - - it 'generate same values', -> - random(generate(seed: 1).options).should.equal random(generate(seed: 1).options) - - it 'generate between 0 and 1', -> - random(generate(seed: 1).options).should.be.above 0 - random(generate(seed: 1).options).should.be.below 1 - - it 'generate data with highWaterMark', (next) -> - @timeout 1000000 - count = 0 - data = [] - generator = generate seed: 1, highWaterMark: 32 - generator.on 'readable', -> - while d = generator.read() - data.push d - generator.end() if count++ is 2 - generator.on 'error', next - generator.on 'end', -> - data.join('').trim().should.eql """ - OMH,ONKCHhJmjadoA,D,GeACHiN,nnmiN,CGfDKB,NIl,JnnmjadnmiNL - KB,dmiM,fENL,Jn,opEMIkdmiOMFckep,MIj,bgIjadnn,fENLEOMIkbhLDK - B,LF,gGeBFaeAC,iLEO,IkdoAAC,hKpD,opENJ,opDLENLDJoAAABFP - """ - next() diff --git a/packages/csv-generate/test/options.seed.js b/packages/csv-generate/test/options.seed.js new file mode 100644 index 00000000..f68142ce --- /dev/null +++ b/packages/csv-generate/test/options.seed.js @@ -0,0 +1,57 @@ +import "should"; +import { generate } from "../lib/index.js"; +import { random } from "../lib/api/random.js"; + +describe("Option `seed`", function () { + describe("without seed", function () { + it("generate different values", function () { + random(generate().options).should.not.equal(random(generate().options)); + }); + + it("generate between 0 and 1", function () { + random(generate().options).should.be.above(0); + random(generate().options).should.be.below(1); + }); + }); + + describe("with seed", function () { + it("generate same values", function () { + random(generate({ seed: 1 }).options).should.equal( + random(generate({ seed: 1 }).options), + ); + }); + + it("generate between 0 and 1", function () { + random(generate({ seed: 1 }).options).should.be.above(0); + random(generate({ seed: 1 }).options).should.be.below(1); + }); + + it("generate data with highWaterMark", function (next) { + this.timeout(1000000); + let count = 0; + const data = []; + const generator = generate({ seed: 1, highWaterMark: 32 }); + generator.on("readable", () => { + let d; + while ((d = generator.read())) { + data.push(d); + if (count++ === 2) { + generator.end(); + } + } + }); + generator.on("error", next); + generator.on("end", () => { + data + .join("") + .trim() + .should.eql( + "OMH,ONKCHhJmjadoA,D,GeACHiN,nnmiN,CGfDKB,NIl,JnnmjadnmiNL\n" + + "KB,dmiM,fENL,Jn,opEMIkdmiOMFckep,MIj,bgIjadnn,fENLEOMIkbhLDK\n" + + "B,LF,gGeBFaeAC,iLEO,IkdoAAC,hKpD,opENJ,opDLENLDJoAAABFP", + ); + next(); + }); + }); + }); +}); diff --git a/packages/csv-generate/test/options.sleep.coffee b/packages/csv-generate/test/options.sleep.coffee deleted file mode 100644 index 533ba69e..00000000 --- a/packages/csv-generate/test/options.sleep.coffee +++ /dev/null @@ -1,26 +0,0 @@ - -import { generate } from '../lib/index.js' - -describe 'Option `sleep`', -> - - it 'as integer above 0', (next) -> - @timeout 10000 - generate duration: 1000, sleep: 100, objectMode: true, (err, data) -> - data.length.should.be.within(8, 12) unless err - next err - - it 'sleep combined with length and objectMode false', (next) -> - # Fix bug where chuncks where emited after end when sleep is activated - @timeout 10000 - records = [] - generate - objectMode: false - length: 2 - sleep: 10 - .on 'readable', -> - while (record = this.read()) isnt null - records.push record.toString() - .on 'error', next - .on 'end', -> - records.join().split('\n').length.should.eql 2 - next() diff --git a/packages/csv-generate/test/options.sleep.js b/packages/csv-generate/test/options.sleep.js new file mode 100644 index 00000000..39676482 --- /dev/null +++ b/packages/csv-generate/test/options.sleep.js @@ -0,0 +1,36 @@ +import "should"; +import { generate } from "../lib/index.js"; + +describe("Option `sleep`", function () { + it("as integer above 0", function (next) { + this.timeout(10000); + generate({ duration: 1000, sleep: 100, objectMode: true }, (err, data) => { + if (!err) { + data.length.should.be.within(8, 12); + } + next(err); + }); + }); + + it("sleep combined with length and objectMode false", function (next) { + // Fix bug where chuncks where emited after end when sleep is activated + this.timeout(10000); + const records = []; + generate({ + objectMode: false, + length: 2, + sleep: 10, + }) + .on("readable", function () { + let record; + while ((record = this.read()) !== null) { + records.push(record.toString()); + } + }) + .on("error", next) + .on("end", () => { + records.join().split("\n").length.should.eql(2); + next(); + }); + }); +}); diff --git a/packages/csv-generate/test/samples.coffee b/packages/csv-generate/test/samples.coffee deleted file mode 100644 index 500e7525..00000000 --- a/packages/csv-generate/test/samples.coffee +++ /dev/null @@ -1,30 +0,0 @@ - -import fs from 'node:fs/promises' -import path from 'node:path' -import { spawn } from 'node:child_process' - -__dirname = new URL( '.', import.meta.url).pathname -dir = path.resolve __dirname, '../samples' -samples = await fs.readdir dir - -describe 'Samples', -> - - samples - .filter (sample) -> - return false unless /\.(js|ts)?$/.test sample - true - .map (sample) -> - - it "Sample #{sample}", () -> - data = await fs.readFile path.resolve(dir, sample), 'utf8' - return if /^["|']skip test["|']/.test data - new Promise (resolve, reject) -> - ext = /\.(\w+)?$/.exec(sample)[0] - [cmd, ...args] = switch ext - when '.js' - ['node', path.resolve dir, sample] - when '.ts' - ['node', '--loader', 'ts-node/esm', path.resolve dir, sample] - spawn(cmd, args) - .on 'close', (code) -> if code is 0 then resolve() else reject(new Error 'Failure') - .stdout.on 'data', (->) diff --git a/packages/csv-generate/test/samples.js b/packages/csv-generate/test/samples.js new file mode 100644 index 00000000..5919a551 --- /dev/null +++ b/packages/csv-generate/test/samples.js @@ -0,0 +1,44 @@ +import fs from "node:fs/promises"; +import path from "node:path"; +import { spawn } from "node:child_process"; + +const __dirname = new URL(".", import.meta.url).pathname; +const dir = path.resolve(__dirname, "../samples"); +const samples = await fs.readdir(dir); + +describe("Samples", function () { + /* eslint mocha/no-setup-in-describe: "off" */ + samples + .filter((sample) => { + if (!/\.(js|ts)?$/.test(sample)) return false; + return true; + }) + .map((sample) => { + it(`Sample ${sample}`, async function () { + const data = await fs.readFile(path.resolve(dir, sample), "utf8"); + if (/^["|']skip test["|']/.test(data)) return; + return new Promise((resolve, reject) => { + const ext = /\.(\w+)?$/.exec(sample)[0]; + let cmd, args; + switch (ext) { + case ".js": + [cmd, ...args] = ["node", path.resolve(dir, sample)]; + break; + case ".ts": + [cmd, ...args] = [ + "node", + "--loader", + "ts-node/esm", + path.resolve(dir, sample), + ]; + break; + } + spawn(cmd, args) + .on("close", (code) => + code === 0 ? resolve() : reject(new Error("Failure")), + ) + .stdout.on("data", () => {}); + }); + }); + }); +}); From 81a949e3657ab1a442d6442534325bd9e787d175 Mon Sep 17 00:00:00 2001 From: David Worms Date: Mon, 12 May 2025 23:00:48 +0200 Subject: [PATCH 09/49] test(csv): coffee to js conversion --- packages/csv/package.json | 10 +-- packages/csv/test/api.coffee | 32 ---------- packages/csv/test/api.js | 42 ++++++++++++ packages/csv/test/api.types.sync.ts | 71 ++++++++++----------- packages/csv/test/api.types.ts | 74 +++++++++++++--------- packages/csv/test/loaders/all.js | 15 ----- packages/csv/test/loaders/coffee.js | 20 ------ packages/csv/test/loaders/legacy/all.js | 36 ----------- packages/csv/test/loaders/legacy/coffee.js | 50 --------------- packages/csv/test/samples.coffee | 30 --------- packages/csv/test/samples.js | 44 +++++++++++++ packages/csv/test/sync.coffee | 25 -------- packages/csv/test/sync.js | 25 ++++++++ 13 files changed, 189 insertions(+), 285 deletions(-) delete mode 100644 packages/csv/test/api.coffee create mode 100644 packages/csv/test/api.js delete mode 100644 packages/csv/test/loaders/all.js delete mode 100644 packages/csv/test/loaders/coffee.js delete mode 100644 packages/csv/test/loaders/legacy/all.js delete mode 100644 packages/csv/test/loaders/legacy/coffee.js delete mode 100644 packages/csv/test/samples.coffee create mode 100644 packages/csv/test/samples.js delete mode 100644 packages/csv/test/sync.coffee create mode 100644 packages/csv/test/sync.js diff --git a/packages/csv/package.json b/packages/csv/package.json index 8d2c30f3..e3f4fdbc 100644 --- a/packages/csv/package.json +++ b/packages/csv/package.json @@ -33,7 +33,6 @@ "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", - "coffeescript": "~2.7.0", "each": "^2.7.2", "eslint": "^9.26.0", "eslint-config-prettier": "^10.1.5", @@ -90,12 +89,9 @@ "main": "./dist/cjs/index.cjs", "mocha": { "inline-diffs": true, - "loader": "./test/loaders/all.js", + "import": "tsx", "recursive": true, "reporter": "spec", - "require": [ - "should" - ], "throw-deprecation": false, "timeout": 40000 }, @@ -113,8 +109,8 @@ "lint:fix": "eslint --fix", "lint:ts": "tsc --noEmit true", "preversion": "npm run build && git add dist", - "test": "mocha 'test/**/*.{coffee,ts}'", - "test:legacy": "mocha --ignore test/samples.coffee --loader=./test/loaders/legacy/all.js 'test/**/*.{coffee,ts}'" + "test": "mocha 'test/**/*.{js,ts}'", + "test:legacy": "mocha --ignore test/samples.js 'test/**/*.{js,ts}'" }, "type": "module", "types": "dist/esm/index.d.ts", diff --git a/packages/csv/test/api.coffee b/packages/csv/test/api.coffee deleted file mode 100644 index f467fc7f..00000000 --- a/packages/csv/test/api.coffee +++ /dev/null @@ -1,32 +0,0 @@ - -import {generate, parse, stringify, transform} from '../lib/index.js' - -describe 'api', -> - - it 'generate', (next) -> - generate length: 1, columns: 1, seed: 1, encoding: 'utf8', (err, data) -> - data.should.eql 'OMH' unless err - next err - - it 'parse', (next) -> - parse 'abc,def', (err, data) -> - data.should.eql [ [ 'abc', 'def' ] ] unless err - next err - - it 'stringify', (next) -> - stringify [ [ 'abc', 'def' ] ], (err, data) -> - data.should.eql 'abc,def\n' unless err - next err - - it 'transform', (next) -> - transform [ - ['abc','def'] - ], (record) -> - record.push(record.shift()) - record - , (err, output) -> - output.should.eql [ - [ 'def', 'abc' ] - ] unless err - next err - diff --git a/packages/csv/test/api.js b/packages/csv/test/api.js new file mode 100644 index 00000000..3e743dc6 --- /dev/null +++ b/packages/csv/test/api.js @@ -0,0 +1,42 @@ +import "should"; +import { generate, parse, stringify, transform } from "../lib/index.js"; + +describe("api", function () { + it("generate", function (next) { + generate( + { length: 1, columns: 1, seed: 1, encoding: "utf8" }, + (err, data) => { + if (!err) data.should.eql("OMH"); + next(err); + }, + ); + }); + + it("parse", function (next) { + parse("abc,def", (err, data) => { + if (!err) data.should.eql([["abc", "def"]]); + next(err); + }); + }); + + it("stringify", function (next) { + stringify([["abc", "def"]], (err, data) => { + if (!err) data.should.eql("abc,def\n"); + next(err); + }); + }); + + it("transform", function (next) { + transform( + [["abc", "def"]], + (record) => { + record.push(record.shift()); + return record; + }, + (err, output) => { + if (!err) output.should.eql([["def", "abc"]]); + next(err); + }, + ); + }); +}); diff --git a/packages/csv/test/api.types.sync.ts b/packages/csv/test/api.types.sync.ts index 66aefcd4..944d1ee0 100644 --- a/packages/csv/test/api.types.sync.ts +++ b/packages/csv/test/api.types.sync.ts @@ -1,56 +1,49 @@ +import "should"; +import csv, { generate, parse, stringify, transform } from "../lib/sync.js"; -import 'should' -import csv, {generate, parse, stringify, transform} from '../lib/sync.js' - -describe('API Types', () => { - - describe('usage', () => { - - it('generate', () => { +describe("API Types", () => { + describe("usage", () => { + it("generate", () => { // with options + handler const output: string = generate(1); return output; - }) + }); - it('parse', () => { - const output: string = parse(''); + it("parse", () => { + const output: string = parse(""); return output; - }) + }); - it('stringify', () => { + it("stringify", () => { const output: string = stringify([]); return output; - }) + }); - it('transform', () => { + it("transform", () => { const output: any = transform([], () => {}); return output; - }) - - }) + }); + }); - describe('usage', () => { - - it('csv.generate', () => { - const options: csv.generator.Options = {} + describe("usage", () => { + it("csv.generate", () => { + const options: csv.generator.Options = {}; return options; - }) - - it('csv.parse', () => { - const options: csv.parser.Options = {} - return options; - }) - - it('csv.stringifier', () => { - const options: csv.stringifier.Options = {} + }); + + it("csv.parse", () => { + const options: csv.parser.Options = {}; return options; - }) - - it('csv.transform', () => { - const options: csv.transformer.Options = {} + }); + + it("csv.stringifier", () => { + const options: csv.stringifier.Options = {}; return options; - }) - - }) + }); -}) + it("csv.transform", () => { + const options: csv.transformer.Options = {}; + return options; + }); + }); +}); diff --git a/packages/csv/test/api.types.ts b/packages/csv/test/api.types.ts index 9bb15c0d..e653b620 100644 --- a/packages/csv/test/api.types.ts +++ b/packages/csv/test/api.types.ts @@ -1,42 +1,54 @@ +import "should"; +import { generate, parse, parser, stringify, transform } from "../lib/index.js"; -import 'should' -import {generate, parse, parser, stringify, transform} from '../lib/index.js' - -describe('API Types', () => { - - describe('Initialisation', () => { - - it('generate', () => { +describe("API Types", () => { + describe("Initialisation", () => { + it("generate", () => { // with options + handler - generate({length: 1}, (err: Error | undefined, records: Array>) => err || records) - }) - - it('parse', () => { + generate( + { length: 1 }, + (err: Error | undefined, records: Array>) => + err || records, + ); + }); + + it("parse", () => { // With input + handler - parse('abc,def', {}, (err: parser.CsvError | undefined, records: Array>) => err?.message || records) - }) - - it('stringify', () => { + parse( + "abc,def", + {}, + (err: parser.CsvError | undefined, records: Array>) => + err?.message || records, + ); + }); + + it("stringify", () => { // With handler - stringify( (err: Error | undefined, output: string) => err || output ) - }) + stringify((err: Error | undefined, output: string) => err || output); + }); - it('transform', () => { + it("transform", () => { // With handler - const transformer = transform( record => record ) - transformer.should.be.an.Object() // Disable unused variable warning + const transformer = transform((record) => record); + transformer.should.be.an.Object(); // Disable unused variable warning // With handler + callback - transform( record => record, (err, records) => err || records ) + transform( + (record) => record, + (err, records) => err || records, + ); // With records + handler - transform( ['record'], record => record ) + transform(["record"], (record) => record); // With options + handler - transform( {consume: true}, record => record ) + transform({ consume: true }, (record) => record); // With records + options + handler - transform( ['record'], {consume: true}, record => record ) + transform(["record"], { consume: true }, (record) => record); // With records + options + handler + callback - transform( ['record'], {consume: true}, record => record, (err, records) => err || records ) - }) - - }) - -}) + transform( + ["record"], + { consume: true }, + (record) => record, + (err, records) => err || records, + ); + }); + }); +}); diff --git a/packages/csv/test/loaders/all.js b/packages/csv/test/loaders/all.js deleted file mode 100644 index 4e81c344..00000000 --- a/packages/csv/test/loaders/all.js +++ /dev/null @@ -1,15 +0,0 @@ -import * as coffee from "./coffee.js"; -import * as ts from "ts-node/esm"; - -const coffeeRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; -const tsRegex = /\.ts$/; - -export function load(url, context, next) { - if (coffeeRegex.test(url)) { - return coffee.load.apply(this, arguments); - } - if (tsRegex.test(url)) { - return ts.load.apply(this, arguments); - } - return next(url, context, next); -} diff --git a/packages/csv/test/loaders/coffee.js b/packages/csv/test/loaders/coffee.js deleted file mode 100644 index 75b15abe..00000000 --- a/packages/csv/test/loaders/coffee.js +++ /dev/null @@ -1,20 +0,0 @@ -import CoffeeScript from "coffeescript"; - -// See https://github.com/nodejs/node/issues/36396 -const extensionsRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; - -export async function load(url, context, next) { - if (extensionsRegex.test(url)) { - const format = "module"; - const { source: rawSource } = await next(url, { format }); - const source = CoffeeScript.compile(rawSource.toString(), { - bare: true, - inlineMap: true, - filename: url, - header: false, - sourceMap: false, - }); - return { format, source }; - } - return next(url, context); -} diff --git a/packages/csv/test/loaders/legacy/all.js b/packages/csv/test/loaders/legacy/all.js deleted file mode 100644 index f5e57e54..00000000 --- a/packages/csv/test/loaders/legacy/all.js +++ /dev/null @@ -1,36 +0,0 @@ -import * as coffee from "./coffee.js"; -import * as ts from "ts-node/esm"; - -const coffeeRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; -const tsRegex = /\.ts$/; - -export function resolve(specifier) { - if (coffeeRegex.test(specifier)) { - return coffee.resolve.apply(this, arguments); - } - if (tsRegex.test(specifier)) { - return ts.resolve.apply(this, arguments); - } - return ts.resolve.apply(this, arguments); -} - -export function getFormat(url) { - if (coffeeRegex.test(url)) { - return coffee.getFormat.apply(this, arguments); - } - if (tsRegex.test(url)) { - return ts.getFormat.apply(this, arguments); - } - return ts.getFormat.apply(this, arguments); -} - -export function transformSource(source, context) { - const { url } = context; - if (coffeeRegex.test(url)) { - return coffee.transformSource.apply(this, arguments); - } - if (tsRegex.test(url)) { - return ts.transformSource.apply(this, arguments); - } - return ts.transformSource.apply(this, arguments); -} diff --git a/packages/csv/test/loaders/legacy/coffee.js b/packages/csv/test/loaders/legacy/coffee.js deleted file mode 100644 index 6a9975db..00000000 --- a/packages/csv/test/loaders/legacy/coffee.js +++ /dev/null @@ -1,50 +0,0 @@ -// coffeescript-loader.mjs -import { URL, pathToFileURL } from "url"; -import CoffeeScript from "coffeescript"; -import { cwd } from "process"; - -const baseURL = pathToFileURL(`${cwd()}/`).href; - -// CoffeeScript files end in .coffee, .litcoffee or .coffee.md. -const extensionsRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/; - -export function resolve(specifier, context, defaultResolve) { - const { parentURL = baseURL } = context; - // Node.js normally errors on unknown file extensions, so return a URL for - // specifiers ending in the CoffeeScript file extensions. - if (extensionsRegex.test(specifier)) { - return { - url: new URL(specifier, parentURL).href, - stop: true, - }; - } - // Let Node.js handle all other specifiers. - return defaultResolve(specifier, context, defaultResolve); -} - -export function getFormat(url, context, defaultGetFormat) { - // Now that we patched resolve to let CoffeeScript URLs through, we need to - // tell Node.js what format such URLs should be interpreted as. For the - // purposes of this loader, all CoffeeScript URLs are ES modules. - if (extensionsRegex.test(url)) { - return { - format: "module", - stop: true, - }; - } - // Let Node.js handle all other URLs. - return defaultGetFormat(url, context, defaultGetFormat); -} - -export function transformSource(source, context, defaultTransformSource) { - const { url } = context; - - if (extensionsRegex.test(url)) { - return { - source: CoffeeScript.compile(String(source), { bare: true }), - }; - } - - // Let Node.js handle all other sources. - return defaultTransformSource(source, context, defaultTransformSource); -} diff --git a/packages/csv/test/samples.coffee b/packages/csv/test/samples.coffee deleted file mode 100644 index 500e7525..00000000 --- a/packages/csv/test/samples.coffee +++ /dev/null @@ -1,30 +0,0 @@ - -import fs from 'node:fs/promises' -import path from 'node:path' -import { spawn } from 'node:child_process' - -__dirname = new URL( '.', import.meta.url).pathname -dir = path.resolve __dirname, '../samples' -samples = await fs.readdir dir - -describe 'Samples', -> - - samples - .filter (sample) -> - return false unless /\.(js|ts)?$/.test sample - true - .map (sample) -> - - it "Sample #{sample}", () -> - data = await fs.readFile path.resolve(dir, sample), 'utf8' - return if /^["|']skip test["|']/.test data - new Promise (resolve, reject) -> - ext = /\.(\w+)?$/.exec(sample)[0] - [cmd, ...args] = switch ext - when '.js' - ['node', path.resolve dir, sample] - when '.ts' - ['node', '--loader', 'ts-node/esm', path.resolve dir, sample] - spawn(cmd, args) - .on 'close', (code) -> if code is 0 then resolve() else reject(new Error 'Failure') - .stdout.on 'data', (->) diff --git a/packages/csv/test/samples.js b/packages/csv/test/samples.js new file mode 100644 index 00000000..5919a551 --- /dev/null +++ b/packages/csv/test/samples.js @@ -0,0 +1,44 @@ +import fs from "node:fs/promises"; +import path from "node:path"; +import { spawn } from "node:child_process"; + +const __dirname = new URL(".", import.meta.url).pathname; +const dir = path.resolve(__dirname, "../samples"); +const samples = await fs.readdir(dir); + +describe("Samples", function () { + /* eslint mocha/no-setup-in-describe: "off" */ + samples + .filter((sample) => { + if (!/\.(js|ts)?$/.test(sample)) return false; + return true; + }) + .map((sample) => { + it(`Sample ${sample}`, async function () { + const data = await fs.readFile(path.resolve(dir, sample), "utf8"); + if (/^["|']skip test["|']/.test(data)) return; + return new Promise((resolve, reject) => { + const ext = /\.(\w+)?$/.exec(sample)[0]; + let cmd, args; + switch (ext) { + case ".js": + [cmd, ...args] = ["node", path.resolve(dir, sample)]; + break; + case ".ts": + [cmd, ...args] = [ + "node", + "--loader", + "ts-node/esm", + path.resolve(dir, sample), + ]; + break; + } + spawn(cmd, args) + .on("close", (code) => + code === 0 ? resolve() : reject(new Error("Failure")), + ) + .stdout.on("data", () => {}); + }); + }); + }); +}); diff --git a/packages/csv/test/sync.coffee b/packages/csv/test/sync.coffee deleted file mode 100644 index 7122fe23..00000000 --- a/packages/csv/test/sync.coffee +++ /dev/null @@ -1,25 +0,0 @@ - -import {generate, parse, transform, stringify} from '../lib/sync.js' - -describe 'api sync', -> - - it 'generate', -> - generate length: 1, columns: 1, seed: 1, objectMode: true - .should.eql [ [ 'OMH' ] ] - - it 'parse', -> - parse 'abc,def' - .should.eql [ [ 'abc', 'def' ] ] - - it 'transform', -> - transform [ - [ 'abc', 'def' ] - ], (record) -> - record.push record.shift() - record - .should.eql [ [ 'def', 'abc' ] ] - - it 'stringify', -> - stringify [ [ 'abc', 'def' ] ] - .should.eql 'abc,def\n' - diff --git a/packages/csv/test/sync.js b/packages/csv/test/sync.js new file mode 100644 index 00000000..6f3ad807 --- /dev/null +++ b/packages/csv/test/sync.js @@ -0,0 +1,25 @@ +import "should"; +import { generate, parse, transform, stringify } from "../lib/sync.js"; + +describe("api sync", function () { + it("generate", function () { + generate({ length: 1, columns: 1, seed: 1, objectMode: true }).should.eql([ + ["OMH"], + ]); + }); + + it("parse", function () { + parse("abc,def").should.eql([["abc", "def"]]); + }); + + it("transform", function () { + transform([["abc", "def"]], (record) => { + record.push(record.shift()); + return record; + }).should.eql([["def", "abc"]]); + }); + + it("stringify", function () { + stringify([["abc", "def"]]).should.eql("abc,def\n"); + }); +}); From 7ec84e2649345af8716c7e03d6de121541e50bfe Mon Sep 17 00:00:00 2001 From: David Worms Date: Tue, 13 May 2025 09:37:50 +0200 Subject: [PATCH 10/49] build: move eslint dependencies into root package.json --- package-lock.json | 1561 +++++++++++++----------- package.json | 7 +- packages/csv-generate/package.json | 5 - packages/csv-stringify/package.json | 5 - packages/csv/package.json | 5 - packages/stream-transform/package.json | 5 - 6 files changed, 832 insertions(+), 756 deletions(-) diff --git a/package-lock.json b/package-lock.json index 46c2fa1b..f09d1e79 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,11 +8,17 @@ "devDependencies": { "@commitlint/cli": "^19.8.1", "@commitlint/config-conventional": "^19.8.1", + "@eslint/js": "^9.26.0", "cz-conventional-changelog": "^3.3.0", + "eslint": "^9.26.0", + "eslint-config-prettier": "^10.1.5", + "eslint-plugin-mocha": "^11.0.0", + "eslint-plugin-prettier": "^5.4.0", "glob": "^11.0.2", "husky": "^9.1.7", "lerna": "^8.2.2", - "lint-staged": "^15.5.2" + "lint-staged": "^16.0.0", + "typescript-eslint": "^8.32.1" }, "workspaces": { "packages": [ @@ -1020,30 +1026,6 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/config-array/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": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@eslint/config-helpers": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", @@ -1108,17 +1090,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -1126,19 +1097,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@eslint/eslintrc/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": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@eslint/js": { "version": "9.26.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.26.0.tgz", @@ -1574,17 +1532,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@lerna/create/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@lerna/create/node_modules/chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", @@ -1792,9 +1739,9 @@ } }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.1.tgz", - "integrity": "sha512-9LfmxKTb1v+vUS1/emSk1f5ePmTLkb9Le9AxOB5T0XM59EUumwcS45z05h7aiZx3GI0Bl7mjb3FMEglYj+acuQ==", + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.2.tgz", + "integrity": "sha512-H9vwztj5OAqHg9GockCQC06k1natgcxWQSRpQcPJf6i5+MWBzfKkRtxGbjQf0X2ihii0ffLZCRGbYV2f2bjNCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1969,6 +1916,16 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@npmcli/arborist/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@npmcli/arborist/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -2104,6 +2061,16 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@npmcli/map-workspaces/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@npmcli/map-workspaces/node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", @@ -2205,16 +2172,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@npmcli/move-file/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@npmcli/move-file/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -2236,18 +2193,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/move-file/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@npmcli/move-file/node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -2315,6 +2260,16 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/@npmcli/package-json/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@npmcli/package-json/node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", @@ -2475,6 +2430,16 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@npmcli/run-script/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@npmcli/run-script/node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -2629,6 +2594,16 @@ "node": ">=10" } }, + "node_modules/@npmcli/run-script/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/@npmcli/run-script/node_modules/node-gyp": { "version": "10.3.1", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.3.1.tgz", @@ -2751,6 +2726,16 @@ "nx": ">= 19 <= 21" } }, + "node_modules/@nx/devkit/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@nx/devkit/node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", @@ -3193,19 +3178,6 @@ } } }, - "node_modules/@rollup/pluginutils/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.40.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz", @@ -3586,6 +3558,16 @@ "encoding": "^0.1.13" } }, + "node_modules/@sigstore/sign/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/@sigstore/tuf": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", @@ -3683,6 +3665,16 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/@tufjs/models/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@tufjs/models/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -3807,82 +3799,298 @@ "dev": true, "license": "MIT" }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.1.tgz", + "integrity": "sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.32.1", + "@typescript-eslint/type-utils": "8.32.1", + "@typescript-eslint/utils": "8.32.1", + "@typescript-eslint/visitor-keys": "8.32.1", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", + "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 4" + } }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "node_modules/@typescript-eslint/parser": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.1.tgz", + "integrity": "sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" + "@typescript-eslint/scope-manager": "8.32.1", + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/typescript-estree": "8.32.1", + "@typescript-eslint/visitor-keys": "8.32.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.1.tgz", + "integrity": "sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/visitor-keys": "8.32.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "node_modules/@typescript-eslint/type-utils": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.1.tgz", + "integrity": "sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==", "dev": true, "license": "MIT", "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "@typescript-eslint/typescript-estree": "8.32.1", + "@typescript-eslint/utils": "8.32.1", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", + "node_modules/@typescript-eslint/types": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.1.tgz", + "integrity": "sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.1.tgz", + "integrity": "sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/visitor-keys": "8.32.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.1.tgz", + "integrity": "sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.32.1", + "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/typescript-estree": "8.32.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz", + "integrity": "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.32.1", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, @@ -4136,36 +4344,6 @@ "node": ">= 0.6" } }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { "version": "8.14.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", @@ -4731,25 +4909,14 @@ "node": ">=18" } }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "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==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/braces": { @@ -5077,6 +5244,16 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/cacache/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/cacache/node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -5721,17 +5898,6 @@ "node": ">= 12" } }, - "node_modules/commitizen/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/commitizen/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -5754,19 +5920,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/commitizen/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": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/commitizen/node_modules/minimist": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", @@ -7230,6 +7383,16 @@ "dev": true, "license": "MIT" }, + "node_modules/cz-conventional-changelog/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/cz-conventional-changelog/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -7491,6 +7654,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/define-properties/node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -7778,9 +7951,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.151", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.151.tgz", - "integrity": "sha512-Rl6uugut2l9sLojjS4H4SAr3A4IgACMLgpuEMPYCVcKydzfyPrn5absNRju38IhQOf/NwjJY8OGWjlteqYeBCA==", + "version": "1.5.152", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.152.tgz", + "integrity": "sha512-xBOfg/EBaIlVsHipHl2VdTPJRSvErNUaqW8ejTq5OlOlIYx1wOllCHsAvAIrr55jD1IYEfdR86miUEt8H5IeJg==", "dev": true, "license": "ISC" }, @@ -7832,24 +8005,11 @@ "iconv-lite": "^0.6.2" } }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "license": "MIT", "dependencies": { "once": "^1.4.0" @@ -8012,6 +8172,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-abstract/node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -8154,13 +8324,16 @@ "license": "MIT" }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { @@ -8356,17 +8529,6 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -8390,19 +8552,6 @@ "json5": "lib/cli.js" } }, - "node_modules/eslint-plugin-import/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": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -8554,17 +8703,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -8582,19 +8720,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -8635,19 +8760,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/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": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/eslint/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -8828,9 +8940,9 @@ } }, "node_modules/eventsource": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.6.tgz", - "integrity": "sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", "dev": true, "license": "MIT", "dependencies": { @@ -8969,27 +9081,6 @@ "express": "^4.11 || 5 || ^5.0.0-beta.1" } }, - "node_modules/express/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -9005,6 +9096,19 @@ "node": ">=4" } }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -9116,6 +9220,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -9139,6 +9253,16 @@ "minimatch": "^5.0.1" } }, + "node_modules/filelist/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", @@ -9341,6 +9465,29 @@ "node": ">= 6" } }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -10144,6 +10291,32 @@ "dev": true, "license": "BSD-2-Clause" }, + "node_modules/glob/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/global-directory": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", @@ -10281,6 +10454,13 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, "node_modules/handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", @@ -10495,9 +10675,9 @@ } }, "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "license": "BSD-2-Clause" }, "node_modules/http-errors": { @@ -10688,13 +10868,12 @@ } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" @@ -10751,6 +10930,16 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/ignore-walk/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/ignore-walk/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -11726,17 +11915,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jake/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/jake/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -11754,19 +11932,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jake/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": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/jake/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -12163,17 +12328,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/lerna/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/lerna/node_modules/chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", @@ -12463,15 +12617,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/level-filesystem/node_modules/xtend": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", - "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/level-fix-range": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", @@ -12504,13 +12649,6 @@ "xtend": "~2.1.2" } }, - "node_modules/level-js/node_modules/object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", - "dev": true, - "license": "MIT" - }, "node_modules/level-js/node_modules/xtend": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", @@ -12760,164 +12898,33 @@ } }, "node_modules/lint-staged": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.5.2.tgz", - "integrity": "sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.0.0.tgz", + "integrity": "sha512-sUCprePs6/rbx4vKC60Hez6X10HPkpDJaGcy3D1NdwR7g1RcNkWL8q9mJMreOqmHBTs+1sNFp+wOiX9fr+hoOQ==", "dev": true, "license": "MIT", "dependencies": { "chalk": "^5.4.1", "commander": "^13.1.0", "debug": "^4.4.0", - "execa": "^8.0.1", "lilconfig": "^3.1.3", - "listr2": "^8.2.5", + "listr2": "^8.3.3", "micromatch": "^4.0.8", + "nano-spawn": "^1.0.0", "pidtree": "^0.6.0", "string-argv": "^0.3.2", - "yaml": "^2.7.0" + "yaml": "^2.7.1" }, "bin": { "lint-staged": "bin/lint-staged.js" }, "engines": { - "node": ">=18.12.0" + "node": ">=20.18" }, "funding": { "url": "https://opencollective.com/lint-staged" } }, - "node_modules/lint-staged/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/listr2": { "version": "8.3.3", "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", @@ -13532,6 +13539,15 @@ "node": ">= 6.0.0" } }, + "node_modules/make-fetch-happen/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==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/make-fetch-happen/node_modules/cacache": { "version": "16.1.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", @@ -13672,6 +13688,15 @@ "node": ">=10" } }, + "node_modules/make-fetch-happen/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/make-fetch-happen/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -13899,6 +13924,19 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", @@ -13933,23 +13971,21 @@ } }, "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "^1.54.0" }, "engines": { "node": ">= 0.6" @@ -14003,19 +14039,15 @@ "license": "MIT" }, "node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", - "dev": true, + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "*" } }, "node_modules/minimist": { @@ -14251,17 +14283,14 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/mocha/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, "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "balanced-match": "^1.0.0" } }, "node_modules/mocha/node_modules/find-up": { @@ -14471,30 +14500,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/multimatch/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/multimatch/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": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", @@ -14502,6 +14507,19 @@ "dev": true, "license": "ISC" }, + "node_modules/nano-spawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-1.0.1.tgz", + "integrity": "sha512-BfcvzBlUTxSDWfT+oH7vd6CbUV+rThLLHCIym/QO6GGLBsyVXleZs00fto2i2jzC/wPiBYk5jyOmpXWg4YopiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18" + }, + "funding": { + "url": "https://github.com/sindresorhus/nano-spawn?sponsor=1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -14510,9 +14528,9 @@ "license": "MIT" }, "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -14582,16 +14600,6 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "license": "ISC" }, - "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/node-gyp/node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -14646,18 +14654,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/node-gyp/node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", @@ -14898,6 +14894,13 @@ "node": ">=10" } }, + "node_modules/node-stdlib-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true, + "license": "MIT" + }, "node_modules/node-stdlib-browser/node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -15084,6 +15087,16 @@ "encoding": "^0.1.13" } }, + "node_modules/npm-registry-fetch/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -15201,6 +15214,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/nx/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/nx/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -15320,14 +15343,11 @@ } }, "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } + "license": "MIT" }, "node_modules/object.assign": { "version": "4.1.7", @@ -15350,6 +15370,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.assign/node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/object.entries": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", @@ -15608,9 +15638,19 @@ }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/own-keys/node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" } }, "node_modules/p-finally": { @@ -16137,13 +16177,13 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -16508,11 +16548,14 @@ "license": "MIT" }, "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=6" + } }, "node_modules/qs": { "version": "6.14.0", @@ -16614,18 +16657,6 @@ "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", @@ -17145,6 +17176,16 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/rimraf/node_modules/glob": { "version": "9.3.5", "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", @@ -17529,9 +17570,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -17562,27 +17603,6 @@ "node": ">= 18" } }, - "node_modules/send/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -18123,6 +18143,16 @@ "xtend": "^4.0.2" } }, + "node_modules/stream-http/node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/stream-transform": { "resolved": "packages/stream-transform", "link": true @@ -18608,6 +18638,16 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/through2/node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/timers-browserify": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", @@ -18689,6 +18729,19 @@ "node": ">=8" } }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, "node_modules/ts-loader": { "version": "9.5.2", "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", @@ -18936,6 +18989,16 @@ "encoding": "^0.1.13" } }, + "node_modules/tuf-js/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -18976,27 +19039,6 @@ "node": ">= 0.6" } }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", @@ -19103,6 +19145,29 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.32.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.32.1.tgz", + "integrity": "sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.32.1", + "@typescript-eslint/parser": "8.32.1", + "@typescript-eslint/utils": "8.32.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, "node_modules/uglify-js": { "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", @@ -19271,16 +19336,6 @@ "punycode": "^2.1.0" } }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/url": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", @@ -19301,6 +19356,13 @@ "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", "license": "MIT" }, + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true, + "license": "MIT" + }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -19593,28 +19655,39 @@ "dev": true, "license": "MIT" }, - "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "node_modules/webpack/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "license": "MIT", "dependencies": { - "iconv-lite": "0.6.3" + "mime-db": "1.52.0" }, "engines": { - "node": ">=12" + "node": ">= 0.6" } }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "iconv-lite": "0.6.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, "node_modules/whatwg-url": { @@ -19974,11 +20047,10 @@ } }, "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4" } @@ -20120,16 +20192,10 @@ "stream-transform": "^3.3.3" }, "devDependencies": { - "@eslint/js": "^9.26.0", "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", - "coffeescript": "~2.7.0", "each": "^2.7.2", - "eslint": "^9.26.0", - "eslint-config-prettier": "^10.1.5", - "eslint-plugin-mocha": "^11.0.0", - "eslint-plugin-prettier": "^5.4.0", "mocha": "~11.2.2", "prettier": "^3.5.3", "rollup": "^4.40.2", @@ -20147,16 +20213,11 @@ "version": "4.4.2", "license": "MIT", "devDependencies": { - "@eslint/js": "^9.26.0", "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", - "dedent": "^0.7.0", + "dedent": "^1.6.0", "each": "^2.7.2", - "eslint": "^9.26.0", - "eslint-config-prettier": "^10.1.5", - "eslint-plugin-mocha": "^11.0.0", - "eslint-plugin-prettier": "^5.4.0", "mocha": "~11.2.2", "prettier": "^3.5.3", "rollup": "^4.40.2", @@ -20167,22 +20228,32 @@ "typescript": "^5.8.3" } }, + "packages/csv-generate/node_modules/dedent": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, "packages/csv-parse": { "version": "5.6.0", "license": "MIT", "devDependencies": { - "@eslint/js": "^9.26.0", "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", "csv-generate": "^4.4.2", "csv-spectrum": "^2.0.0", - "dedent": "^0.7.0", + "dedent": "^1.6.0", "each": "^2.7.2", - "eslint": "^9.26.0", - "eslint-config-prettier": "^10.1.5", - "eslint-plugin-mocha": "^11.0.0", - "eslint-plugin-prettier": "^5.4.0", "mocha": "^11.2.2", "pad": "^3.3.0", "prettier": "^3.5.3", @@ -20195,21 +20266,31 @@ "typescript": "^5.8.3" } }, + "packages/csv-parse/node_modules/dedent": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, "packages/csv-stringify": { "version": "6.5.2", "license": "MIT", "devDependencies": { - "@eslint/js": "^9.26.0", "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", "csv-generate": "^4.4.2", - "dedent": "^0.7.0", + "dedent": "^1.6.0", "each": "^2.7.2", - "eslint": "^9.26.0", - "eslint-config-prettier": "^10.1.5", - "eslint-plugin-mocha": "^11.0.0", - "eslint-plugin-prettier": "^5.4.0", "express": "^5.1.0", "mocha": "~11.2.2", "prettier": "^3.5.3", @@ -20221,20 +20302,30 @@ "typescript": "^5.8.3" } }, + "packages/csv-stringify/node_modules/dedent": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, "packages/stream-transform": { "version": "3.3.3", "license": "MIT", "devDependencies": { - "@eslint/js": "^9.26.0", "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", "csv-generate": "^4.4.2", "each": "^2.7.2", - "eslint": "^9.26.0", - "eslint-config-prettier": "^10.1.5", - "eslint-plugin-mocha": "^11.0.0", - "eslint-plugin-prettier": "^5.4.0", "mocha": "~11.2.2", "pad": "~3.3.0", "prettier": "^3.5.3", diff --git a/package.json b/package.json index cb31a580..140b7ede 100644 --- a/package.json +++ b/package.json @@ -3,11 +3,16 @@ "devDependencies": { "@commitlint/cli": "^19.8.1", "@commitlint/config-conventional": "^19.8.1", + "@eslint/js": "^9.26.0", "cz-conventional-changelog": "^3.3.0", + "eslint": "^9.26.0", + "eslint-config-prettier": "^10.1.5", + "eslint-plugin-mocha": "^11.0.0", + "eslint-plugin-prettier": "^5.4.0", "glob": "^11.0.2", "husky": "^9.1.7", "lerna": "^8.2.2", - "lint-staged": "^15.5.2" + "lint-staged": "^16.0.0", }, "lint-staged": { "*.js": "npm run lint:fix", diff --git a/packages/csv-generate/package.json b/packages/csv-generate/package.json index dd6660e8..81000569 100644 --- a/packages/csv-generate/package.json +++ b/packages/csv-generate/package.json @@ -13,16 +13,11 @@ "bugs": "https://github.com/adaltas/node-csv-generate/issues", "author": "David Worms (https://www.adaltas.com)", "devDependencies": { - "@eslint/js": "^9.26.0", "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", "dedent": "^0.7.0", "each": "^2.7.2", - "eslint": "^9.26.0", - "eslint-config-prettier": "^10.1.5", - "eslint-plugin-mocha": "^11.0.0", - "eslint-plugin-prettier": "^5.4.0", "mocha": "~11.2.2", "prettier": "^3.5.3", "rollup": "^4.40.2", diff --git a/packages/csv-stringify/package.json b/packages/csv-stringify/package.json index eef6cb9c..bf4fa6a5 100644 --- a/packages/csv-stringify/package.json +++ b/packages/csv-stringify/package.json @@ -11,17 +11,12 @@ ], "author": "David Worms (https://www.adaltas.com)", "devDependencies": { - "@eslint/js": "^9.26.0", "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", "csv-generate": "^4.4.2", "dedent": "^0.7.0", "each": "^2.7.2", - "eslint": "^9.26.0", - "eslint-config-prettier": "^10.1.5", - "eslint-plugin-mocha": "^11.0.0", - "eslint-plugin-prettier": "^5.4.0", "express": "^5.1.0", "mocha": "~11.2.2", "prettier": "^3.5.3", diff --git a/packages/csv/package.json b/packages/csv/package.json index e3f4fdbc..5a334691 100644 --- a/packages/csv/package.json +++ b/packages/csv/package.json @@ -29,15 +29,10 @@ "stream-transform": "^3.3.3" }, "devDependencies": { - "@eslint/js": "^9.26.0", "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", "each": "^2.7.2", - "eslint": "^9.26.0", - "eslint-config-prettier": "^10.1.5", - "eslint-plugin-mocha": "^11.0.0", - "eslint-plugin-prettier": "^5.4.0", "mocha": "~11.2.2", "prettier": "^3.5.3", "rollup": "^4.40.2", diff --git a/packages/stream-transform/package.json b/packages/stream-transform/package.json index 98ae93ae..93d548cd 100644 --- a/packages/stream-transform/package.json +++ b/packages/stream-transform/package.json @@ -12,16 +12,11 @@ ], "author": "David Worms (https://www.adaltas.com)", "devDependencies": { - "@eslint/js": "^9.26.0", "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", "csv-generate": "^4.4.2", "each": "^2.7.2", - "eslint": "^9.26.0", - "eslint-config-prettier": "^10.1.5", - "eslint-plugin-mocha": "^11.0.0", - "eslint-plugin-prettier": "^5.4.0", "mocha": "~11.2.2", "pad": "~3.3.0", "prettier": "^3.5.3", From f6e41c51323d50281ccc51be22d54285db3bc553 Mon Sep 17 00:00:00 2001 From: David Worms Date: Tue, 13 May 2025 09:38:14 +0200 Subject: [PATCH 11/49] build: typescript-eslint addition --- eslint.config.js | 2 ++ package.json | 1 + packages/csv-generate/package.json | 2 +- packages/csv-parse/package.json | 7 +------ packages/csv-stringify/package.json | 2 +- 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index 7a5fcb4a..477676c9 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,5 +1,6 @@ import globals from "globals"; import js from "@eslint/js"; +import ts from "typescript-eslint"; import mocha from "eslint-plugin-mocha"; import prettier from "eslint-plugin-prettier/recommended"; @@ -11,6 +12,7 @@ export default [ languageOptions: { globals: { ...globals.node } }, }, js.configs.recommended, + ...ts.configs.recommended, mocha.configs.recommended, prettier, { diff --git a/package.json b/package.json index 140b7ede..64220b5b 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "husky": "^9.1.7", "lerna": "^8.2.2", "lint-staged": "^16.0.0", + "typescript-eslint": "^8.32.1" }, "lint-staged": { "*.js": "npm run lint:fix", diff --git a/packages/csv-generate/package.json b/packages/csv-generate/package.json index 81000569..ed6a6b57 100644 --- a/packages/csv-generate/package.json +++ b/packages/csv-generate/package.json @@ -16,7 +16,7 @@ "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", - "dedent": "^0.7.0", + "dedent": "^1.6.0", "each": "^2.7.2", "mocha": "~11.2.2", "prettier": "^3.5.3", diff --git a/packages/csv-parse/package.json b/packages/csv-parse/package.json index 5279dfc7..eb4bbd86 100644 --- a/packages/csv-parse/package.json +++ b/packages/csv-parse/package.json @@ -72,18 +72,13 @@ } }, "devDependencies": { - "@eslint/js": "^9.26.0", "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", "csv-generate": "^4.4.2", "csv-spectrum": "^2.0.0", - "dedent": "^0.7.0", + "dedent": "^1.6.0", "each": "^2.7.2", - "eslint": "^9.26.0", - "eslint-config-prettier": "^10.1.5", - "eslint-plugin-mocha": "^11.0.0", - "eslint-plugin-prettier": "^5.4.0", "mocha": "^11.2.2", "pad": "^3.3.0", "prettier": "^3.5.3", diff --git a/packages/csv-stringify/package.json b/packages/csv-stringify/package.json index bf4fa6a5..ba5c4d50 100644 --- a/packages/csv-stringify/package.json +++ b/packages/csv-stringify/package.json @@ -15,7 +15,7 @@ "@types/mocha": "^10.0.10", "@types/node": "^22.15.17", "csv-generate": "^4.4.2", - "dedent": "^0.7.0", + "dedent": "^1.6.0", "each": "^2.7.2", "express": "^5.1.0", "mocha": "~11.2.2", From 987a3a9a6873c06c7e2256a2bd83415b3fe0323b Mon Sep 17 00:00:00 2001 From: David Worms Date: Tue, 13 May 2025 10:28:38 +0200 Subject: [PATCH 12/49] feat(csv-parse): on_skip catch thrown error --- packages/csv-parse/lib/api/index.js | 12 ++++++--- packages/csv-parse/test/option.on_skip.js | 33 ++++++++++++++++++++--- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/packages/csv-parse/lib/api/index.js b/packages/csv-parse/lib/api/index.js index a1ba1eb0..83c025f2 100644 --- a/packages/csv-parse/lib/api/index.js +++ b/packages/csv-parse/lib/api/index.js @@ -861,10 +861,14 @@ const transform = function (original_options = {}) { if (skip_records_with_error) { this.state.recordHasError = true; if (this.options.on_skip !== undefined) { - this.options.on_skip( - err, - raw ? this.state.rawBuffer.toString(encoding) : undefined, - ); + try { + this.options.on_skip( + err, + raw ? this.state.rawBuffer.toString(encoding) : undefined, + ); + } catch (err) { + return err; + } } // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined); return undefined; diff --git a/packages/csv-parse/test/option.on_skip.js b/packages/csv-parse/test/option.on_skip.js index 8dd916f4..8c0883b3 100644 --- a/packages/csv-parse/test/option.on_skip.js +++ b/packages/csv-parse/test/option.on_skip.js @@ -1,4 +1,5 @@ import "should"; +import dedent from "dedent"; import { parse } from "../lib/index.js"; import { assert_error } from "./api.assert_error.js"; @@ -10,6 +11,27 @@ describe("Option `on_skip`", function () { }).should.throw("Invalid Option: on_skip must be a function, got 1"); }); + it("catch thrown error", function (next) { + parse( + dedent` + a,b,c,d + invalid + e,f,g,h + `, + { + bom: true, + skip_records_with_error: true, + on_skip: () => { + throw Error("Catchme"); + }, + }, + (err) => { + err.message.should.eql("Catchme"); + next(); + }, + ); + }); + it('handle "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH" with bom (fix #411)', function (next) { let errors = 0; const parser = parse( @@ -36,10 +58,13 @@ describe("Option `on_skip`", function () { next(err); }, ); - parser.write(`a,b,c,d -1,2,3 -e,f,g,h -`); + parser.write( + dedent` + a,b,c,d + 1,2,3 + e,f,g,h + `, + ); parser.end(); }); }); From 74befad20a57d0e6a06a6084733100ba80530153 Mon Sep 17 00:00:00 2001 From: David Worms Date: Tue, 13 May 2025 10:30:27 +0200 Subject: [PATCH 13/49] docs(csv-parse): on_skip sample --- packages/csv-parse/samples/option.on_skip.js | 25 ++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 packages/csv-parse/samples/option.on_skip.js diff --git a/packages/csv-parse/samples/option.on_skip.js b/packages/csv-parse/samples/option.on_skip.js new file mode 100644 index 00000000..101b1acc --- /dev/null +++ b/packages/csv-parse/samples/option.on_skip.js @@ -0,0 +1,25 @@ +import assert from "node:assert"; +import dedent from "dedent"; +import { parse } from "csv-parse"; + +parse( + dedent` + a,b,c + invalid + d,e,f + `, + { + skip_records_with_error: true, + on_skip: ({ message, code, record }) => { + assert.equal(message, "Invalid Record Length: expect 3, got 1 on line 2"); + assert.equal(code, "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH"); + assert.deepStrictEqual(record, ["invalid"]); + }, + }, + function (err, records) { + assert.deepStrictEqual(records, [ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + }, +); From 6ee6ad83c4b150f7f41adf31ae33311f2e361b79 Mon Sep 17 00:00:00 2001 From: David Worms Date: Tue, 13 May 2025 12:57:22 +0200 Subject: [PATCH 14/49] build: use ts-node loader --- packages/csv-generate/package.json | 2 +- packages/csv-parse/package.json | 2 +- packages/csv-stringify/package.json | 2 +- packages/csv/package.json | 2 +- packages/stream-transform/package.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/csv-generate/package.json b/packages/csv-generate/package.json index ed6a6b57..e1025ccd 100644 --- a/packages/csv-generate/package.json +++ b/packages/csv-generate/package.json @@ -76,7 +76,7 @@ "main": "./dist/cjs/index.cjs", "mocha": { "inline-diffs": true, - "import": "tsx", + "loader": "ts-node/esm", "recursive": true, "reporter": "spec", "throw-deprecation": false, diff --git a/packages/csv-parse/package.json b/packages/csv-parse/package.json index eb4bbd86..722b438f 100644 --- a/packages/csv-parse/package.json +++ b/packages/csv-parse/package.json @@ -99,7 +99,7 @@ "main": "./dist/cjs/index.cjs", "mocha": { "inline-diffs": true, - "import": "tsx", + "loader": "ts-node/esm", "recursive": true, "reporter": "spec", "throw-deprecation": false, diff --git a/packages/csv-stringify/package.json b/packages/csv-stringify/package.json index ba5c4d50..fc39f205 100644 --- a/packages/csv-stringify/package.json +++ b/packages/csv-stringify/package.json @@ -66,7 +66,7 @@ "main": "./dist/cjs/index.cjs", "mocha": { "inline-diffs": true, - "import": "tsx", + "loader": "ts-node/esm", "recursive": true, "reporter": "spec", "throw-deprecation": false, diff --git a/packages/csv/package.json b/packages/csv/package.json index 5a334691..9ff14e96 100644 --- a/packages/csv/package.json +++ b/packages/csv/package.json @@ -84,7 +84,7 @@ "main": "./dist/cjs/index.cjs", "mocha": { "inline-diffs": true, - "import": "tsx", + "loader": "ts-node/esm", "recursive": true, "reporter": "spec", "throw-deprecation": false, diff --git a/packages/stream-transform/package.json b/packages/stream-transform/package.json index 93d548cd..4365a7f4 100644 --- a/packages/stream-transform/package.json +++ b/packages/stream-transform/package.json @@ -67,7 +67,7 @@ "main": "./dist/cjs/index.cjs", "mocha": { "inline-diffs": true, - "import": "tsx", + "loader": "ts-node/esm", "recursive": true, "reporter": "spec", "throw-deprecation": false, From e5bc2f4bfcf891c9d587b3f2734137761ee1dca0 Mon Sep 17 00:00:00 2001 From: David Worms Date: Tue, 13 May 2025 13:19:29 +0200 Subject: [PATCH 15/49] build: legacy loader leftover --- packages/csv-generate/package.json | 2 +- packages/stream-transform/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/csv-generate/package.json b/packages/csv-generate/package.json index e1025ccd..50cf8e15 100644 --- a/packages/csv-generate/package.json +++ b/packages/csv-generate/package.json @@ -97,7 +97,7 @@ "lint:ts": "tsc --noEmit true", "preversion": "npm run build && git add dist", "test": "mocha 'test/**/*.{js,ts}'", - "test:legacy": "mocha --ignore test/api.web_stream.js --loader=./test/loaders/legacy/all.js 'test/**/*.{js,ts}'" + "test:legacy": "mocha --ignore test/api.web_stream.js 'test/**/*.{js,ts}'" }, "type": "module", "types": "dist/esm/index.d.ts", diff --git a/packages/stream-transform/package.json b/packages/stream-transform/package.json index 4365a7f4..eea31853 100644 --- a/packages/stream-transform/package.json +++ b/packages/stream-transform/package.json @@ -88,7 +88,7 @@ "lint:ts": "tsc --noEmit true", "preversion": "npm run build && git add dist", "test": "mocha 'test/**/*.{js,ts}'", - "test:legacy": "mocha --loader=./test/loaders/legacy/all.js --ignore test/handler.mode.callback.js --ignore test/handler.mode.callback.error.js 'test/**/*.{js,ts}'" + "test:legacy": "mocha --ignore test/handler.mode.callback.js --ignore test/handler.mode.callback.error.js 'test/**/*.{js,ts}'" }, "type": "module", "types": "dist/esm/index.d.ts", From f40219afb59b56c03e7734725280a6d4d4ca301f Mon Sep 17 00:00:00 2001 From: David Worms Date: Tue, 13 May 2025 15:12:28 +0200 Subject: [PATCH 16/49] docs(csv-parse): use dedent --- packages/csv-parse/samples/api.callback.js | 8 ++++-- packages/csv-parse/samples/comment.js | 7 ++++- .../csv-parse/samples/mixed.output_stream.js | 9 +++--- .../csv-parse/samples/option.cast.context.js | 7 +++-- .../samples/option.cast.header.column.fn.js | 28 ++++++++++++------- .../option.cast.header.columns.true.js | 24 ++++++++++------ packages/csv-parse/samples/option.cast.js | 5 ++-- .../csv-parse/samples/option.cast_date.js | 9 +++--- .../csv-parse/samples/option.columns.array.js | 4 +-- .../samples/option.columns.function.js | 9 +++--- .../csv-parse/samples/option.columns.true.js | 9 +++--- packages/csv-parse/samples/option.comment.js | 11 ++++---- .../samples/option.comment_no_infix.js | 9 +++--- .../samples/option.delimiter.array.js | 6 ++-- packages/csv-parse/samples/option.from.js | 13 +++++---- .../samples/option.on_record.alter.js | 9 +++--- .../samples/option.on_record.filter.js | 11 ++++---- .../csv-parse/samples/option.quote.default.js | 9 +++--- .../csv-parse/samples/option.quote.escape.js | 9 +++--- packages/csv-parse/samples/option.raw.js | 9 +++--- .../option.relax_column_count.columns.js | 11 ++++---- .../samples/option.relax_column_count.js | 11 ++++---- .../samples/option.relax_column_count_less.js | 9 +++--- .../samples/option.relax_column_count_more.js | 9 +++--- .../csv-parse/samples/option.relax_quotes.js | 4 +-- .../samples/option.skip_empty_lines.js | 9 +++--- .../samples/option.skip_empty_lines.trim.js | 14 ++++------ .../option.skip_records_with_empty_values.js | 7 +++-- .../samples/option.skip_records_with_error.js | 13 +++++---- packages/csv-parse/samples/option.to.js | 13 +++++---- packages/csv-parse/samples/option.to_line.js | 11 ++++---- 31 files changed, 180 insertions(+), 136 deletions(-) diff --git a/packages/csv-parse/samples/api.callback.js b/packages/csv-parse/samples/api.callback.js index 30b61d74..c5843a12 100644 --- a/packages/csv-parse/samples/api.callback.js +++ b/packages/csv-parse/samples/api.callback.js @@ -1,9 +1,13 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse"; -const input = '#Welcome\n"1","2","3","4"\n"a","b","c","d"'; parse( - input, + dedent` + # Welcome + "1","2","3","4" + "a","b","c","d" + `, { comment: "#", }, diff --git a/packages/csv-parse/samples/comment.js b/packages/csv-parse/samples/comment.js index 695b4931..4fe3247c 100644 --- a/packages/csv-parse/samples/comment.js +++ b/packages/csv-parse/samples/comment.js @@ -1,8 +1,13 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse"; parse( - '#Welcome\n"1","2","3","4"\n"a","b","c","d"', + dedent` + # Welcome + "1","2","3","4" + "a","b","c","d" + `, { comment: "#" }, function (err, data) { assert.deepStrictEqual(data, [ diff --git a/packages/csv-parse/samples/mixed.output_stream.js b/packages/csv-parse/samples/mixed.output_stream.js index b9dd10d8..3c583d7b 100644 --- a/packages/csv-parse/samples/mixed.output_stream.js +++ b/packages/csv-parse/samples/mixed.output_stream.js @@ -1,12 +1,13 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse"; const records = []; parse( - ` - "1","2","3" - "a","b","c" -`, + dedent` + "1","2","3" + "a","b","c" + `, { trim: true, skip_empty_lines: true, diff --git a/packages/csv-parse/samples/option.cast.context.js b/packages/csv-parse/samples/option.cast.context.js index cae9ef6a..a79bbe0c 100644 --- a/packages/csv-parse/samples/option.cast.context.js +++ b/packages/csv-parse/samples/option.cast.context.js @@ -1,10 +1,11 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse/sync"; -const data = ` +const data = dedent` 2000-01-01,date1 2050-11-27,date2 -`.trim(); +`; const records = parse(data, { // The cast option exect a function which // is called with two arguments, @@ -43,7 +44,7 @@ assert.deepStrictEqual(records, [ [ "2050-11-27T05:00:00.000Z", { - bytes: 35, + bytes: 33, comment_lines: 0, empty_lines: 0, invalid_field_length: 0, diff --git a/packages/csv-parse/samples/option.cast.header.column.fn.js b/packages/csv-parse/samples/option.cast.header.column.fn.js index 1426f5e8..382e8494 100644 --- a/packages/csv-parse/samples/option.cast.header.column.fn.js +++ b/packages/csv-parse/samples/option.cast.header.column.fn.js @@ -1,18 +1,26 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse/sync"; assert.deepEqual( - parse("a,b,c\n1,2,3\n4,5,6", { - cast: (value, context) => { - if (context.header) return value; - if (context.column === "B") return Number(value); - return String(value); + parse( + dedent` + a,b,c + 1,2,3 + 4,5,6 + `, + { + cast: (value, context) => { + if (context.header) return value; + if (context.column === "B") return Number(value); + return String(value); + }, + columns: (header) => { + return header.map((label) => label.toUpperCase()); + }, + trim: true, }, - columns: (header) => { - return header.map((label) => label.toUpperCase()); - }, - trim: true, - }), + ), [ { A: "1", B: 2, C: "3" }, { A: "4", B: 5, C: "6" }, diff --git a/packages/csv-parse/samples/option.cast.header.columns.true.js b/packages/csv-parse/samples/option.cast.header.columns.true.js index c7de0f76..24c6abe4 100644 --- a/packages/csv-parse/samples/option.cast.header.columns.true.js +++ b/packages/csv-parse/samples/option.cast.header.columns.true.js @@ -1,16 +1,24 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse/sync"; assert.deepEqual( - parse("a,b,c\n1,2,3\n4,5,6", { - cast: (value, context) => { - if (context.header) return value.toUpperCase(); - if (context.column === "B") return Number(value); - return String(value); + parse( + dedent` + a,b,c + 1,2,3 + 4,5,6 + `, + { + cast: (value, context) => { + if (context.header) return value.toUpperCase(); + if (context.column === "B") return Number(value); + return String(value); + }, + columns: true, + trim: true, }, - columns: true, - trim: true, - }), + ), [ { A: "1", B: 2, C: "3" }, { A: "4", B: 5, C: "6" }, diff --git a/packages/csv-parse/samples/option.cast.js b/packages/csv-parse/samples/option.cast.js index 482efb34..3ce02be7 100644 --- a/packages/csv-parse/samples/option.cast.js +++ b/packages/csv-parse/samples/option.cast.js @@ -1,10 +1,11 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse/sync"; -const data = ` +const data = dedent` 1,2,3 4,5,6 -`.trim(); +`; const records = parse(data, { // The cast option exect a function which // is called with two arguments, diff --git a/packages/csv-parse/samples/option.cast_date.js b/packages/csv-parse/samples/option.cast_date.js index e3b282f2..5fb59e1e 100644 --- a/packages/csv-parse/samples/option.cast_date.js +++ b/packages/csv-parse/samples/option.cast_date.js @@ -1,10 +1,11 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse/sync"; -const data = ` -2000-01-01,date1 -2020-01-01,date2 -`.trim(); +const data = dedent` + 2000-01-01,date1 + 2020-01-01,date2 +`; const records = parse(data, { cast: true, cast_date: true, diff --git a/packages/csv-parse/samples/option.columns.array.js b/packages/csv-parse/samples/option.columns.array.js index 06ddb71b..49e79b59 100644 --- a/packages/csv-parse/samples/option.columns.array.js +++ b/packages/csv-parse/samples/option.columns.array.js @@ -2,9 +2,7 @@ import assert from "node:assert"; import { parse } from "csv-parse"; parse( - ` -"value 1","value 2" -`.trim(), + '"value 1","value 2"', { columns: ["key_1", "key_2"], }, diff --git a/packages/csv-parse/samples/option.columns.function.js b/packages/csv-parse/samples/option.columns.function.js index a6fa7a87..7328fe54 100644 --- a/packages/csv-parse/samples/option.columns.function.js +++ b/packages/csv-parse/samples/option.columns.function.js @@ -1,11 +1,12 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse"; parse( - ` -"key_1","key_2" -"value 1","value 2" -`.trim(), + dedent` + "key_1","key_2" + "value 1","value 2" + `, { columns: (header) => header.map((column) => column.toUpperCase()), }, diff --git a/packages/csv-parse/samples/option.columns.true.js b/packages/csv-parse/samples/option.columns.true.js index b244d6b0..9656dd3b 100644 --- a/packages/csv-parse/samples/option.columns.true.js +++ b/packages/csv-parse/samples/option.columns.true.js @@ -1,11 +1,12 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse"; parse( - ` -"key_1","key_2" -"value 1","value 2" -`.trim(), + dedent` + "key_1","key_2" + "value 1","value 2" + `, { columns: true, }, diff --git a/packages/csv-parse/samples/option.comment.js b/packages/csv-parse/samples/option.comment.js index 20a2f631..b8e1756b 100644 --- a/packages/csv-parse/samples/option.comment.js +++ b/packages/csv-parse/samples/option.comment.js @@ -1,11 +1,12 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse/sync"; -const data = ` -# At the beginning of a record -"hello" -"world"# At the end of a record -`.trim(); +const data = dedent` + # At the beginning of a record + "hello" + "world"# At the end of a record +`; const records = parse(data, { comment: "#", }); diff --git a/packages/csv-parse/samples/option.comment_no_infix.js b/packages/csv-parse/samples/option.comment_no_infix.js index 24ce92be..75f59fe9 100644 --- a/packages/csv-parse/samples/option.comment_no_infix.js +++ b/packages/csv-parse/samples/option.comment_no_infix.js @@ -1,11 +1,12 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse/sync"; const output = parse( - ` -# Illustrate the usage of comment_no_infix -a,b#,c -`.trim(), + dedent` + # Illustrate the usage of comment_no_infix + a,b#,c + `, { comment: "#", comment_no_infix: true, diff --git a/packages/csv-parse/samples/option.delimiter.array.js b/packages/csv-parse/samples/option.delimiter.array.js index d0bb0c4a..e0d6121f 100644 --- a/packages/csv-parse/samples/option.delimiter.array.js +++ b/packages/csv-parse/samples/option.delimiter.array.js @@ -1,10 +1,12 @@ import assert from "node:assert"; import { parse } from "csv-parse/sync"; -const input = `color name::red::green::blue +const input = ` +color name::red::green::blue Cyan \t "0" :: 255 :: 255 Yellow \t "255" :: "255" ::"0" -Hot Pink \t "255" :: 105 :: "180"`; +Hot Pink \t "255" :: 105 :: "180" +`.trim(); const output = parse(input, { delimiter: ["::", "\t"], diff --git a/packages/csv-parse/samples/option.from.js b/packages/csv-parse/samples/option.from.js index 0da49347..16bbec05 100644 --- a/packages/csv-parse/samples/option.from.js +++ b/packages/csv-parse/samples/option.from.js @@ -1,13 +1,14 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse"; parse( - ` -a,b -1,2 -3,4 -5,6 -`.trim(), + dedent` + a,b + 1,2 + 3,4 + 5,6 + `, { columns: true, from: 2, diff --git a/packages/csv-parse/samples/option.on_record.alter.js b/packages/csv-parse/samples/option.on_record.alter.js index bb07c8aa..44382ec0 100644 --- a/packages/csv-parse/samples/option.on_record.alter.js +++ b/packages/csv-parse/samples/option.on_record.alter.js @@ -1,11 +1,12 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse"; parse( - ` -a.1,a.2,a.3 -b.1,b.2,b.3 -`.trim(), + dedent` + a.1,a.2,a.3 + b.1,b.2,b.3 + `, { on_record: (record, { lines }) => [lines, record[2], record[0]], }, diff --git a/packages/csv-parse/samples/option.on_record.filter.js b/packages/csv-parse/samples/option.on_record.filter.js index 036ca100..5d67704f 100644 --- a/packages/csv-parse/samples/option.on_record.filter.js +++ b/packages/csv-parse/samples/option.on_record.filter.js @@ -1,12 +1,13 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse"; parse( - ` -line 1 -line 2 -line 3 -`.trim(), + dedent` + line 1 + line 2 + line 3 + `, { on_record: (record, { lines }) => (lines === 2 ? null : record), }, diff --git a/packages/csv-parse/samples/option.quote.default.js b/packages/csv-parse/samples/option.quote.default.js index f2ef0ea7..cfc2ffc9 100644 --- a/packages/csv-parse/samples/option.quote.default.js +++ b/packages/csv-parse/samples/option.quote.default.js @@ -1,11 +1,12 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse/sync"; const records = parse( - ` -a,"b",c -"d",e,"f" -`.trim(), + dedent` + a,"b",c + "d",e,"f" + `, ); assert.deepStrictEqual(records, [ diff --git a/packages/csv-parse/samples/option.quote.escape.js b/packages/csv-parse/samples/option.quote.escape.js index bbc09d22..437f2e58 100644 --- a/packages/csv-parse/samples/option.quote.escape.js +++ b/packages/csv-parse/samples/option.quote.escape.js @@ -1,11 +1,12 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse/sync"; const records = parse( - ` -a,"b""b",c -d,"e""e",f -`.trim(), + dedent` + a,"b""b",c + d,"e""e",f + `, ); assert.deepStrictEqual(records, [ diff --git a/packages/csv-parse/samples/option.raw.js b/packages/csv-parse/samples/option.raw.js index 4fa075cb..4069478d 100644 --- a/packages/csv-parse/samples/option.raw.js +++ b/packages/csv-parse/samples/option.raw.js @@ -1,11 +1,12 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse"; parse( - ` -a,b,c -d,e,f -`.trim(), + dedent` + a,b,c + d,e,f + `, { raw: true }, (err, records) => { assert.deepStrictEqual(records, [ diff --git a/packages/csv-parse/samples/option.relax_column_count.columns.js b/packages/csv-parse/samples/option.relax_column_count.columns.js index 9401b033..2ca0940a 100644 --- a/packages/csv-parse/samples/option.relax_column_count.columns.js +++ b/packages/csv-parse/samples/option.relax_column_count.columns.js @@ -1,12 +1,13 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse"; parse( - ` -lastname,firstname,fullname -Ritchie -Lovelace,Ada,"Augusta Ada King, Countess of Lovelace" -`.trim(), + dedent` + lastname,firstname,fullname + Ritchie + Lovelace,Ada,"Augusta Ada King, Countess of Lovelace" + `, { relax_column_count: true, columns: true, diff --git a/packages/csv-parse/samples/option.relax_column_count.js b/packages/csv-parse/samples/option.relax_column_count.js index 4c93369a..8584fc74 100644 --- a/packages/csv-parse/samples/option.relax_column_count.js +++ b/packages/csv-parse/samples/option.relax_column_count.js @@ -1,12 +1,13 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse"; parse( - ` -"a 1","a 2" -"b 1" -"c 1","c 2","c 3" -`.trim(), + dedent` + "a 1","a 2" + "b 1" + "c 1","c 2","c 3" + `, { relax_column_count: true, }, diff --git a/packages/csv-parse/samples/option.relax_column_count_less.js b/packages/csv-parse/samples/option.relax_column_count_less.js index 0f9cd850..fc6a525e 100644 --- a/packages/csv-parse/samples/option.relax_column_count_less.js +++ b/packages/csv-parse/samples/option.relax_column_count_less.js @@ -1,11 +1,12 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse"; parse( - ` -a,b,c -d,e -`.trim(), + dedent` + a,b,c + d,e + `, { relax_column_count_less: true, }, diff --git a/packages/csv-parse/samples/option.relax_column_count_more.js b/packages/csv-parse/samples/option.relax_column_count_more.js index b45cbf99..ab48a0d5 100644 --- a/packages/csv-parse/samples/option.relax_column_count_more.js +++ b/packages/csv-parse/samples/option.relax_column_count_more.js @@ -1,11 +1,12 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse"; parse( - ` -a,b -c,d,e -`.trim(), + dedent` + a,b + c,d,e + `, { relax_column_count_more: true, }, diff --git a/packages/csv-parse/samples/option.relax_quotes.js b/packages/csv-parse/samples/option.relax_quotes.js index 0d7bc946..0f281bd4 100644 --- a/packages/csv-parse/samples/option.relax_quotes.js +++ b/packages/csv-parse/samples/option.relax_quotes.js @@ -2,9 +2,7 @@ import assert from "node:assert"; import { parse } from "csv-parse"; parse( - ` -a,some"text,c -`.trim(), + 'a,some"text,c', { relax_quotes: true, }, diff --git a/packages/csv-parse/samples/option.skip_empty_lines.js b/packages/csv-parse/samples/option.skip_empty_lines.js index fb2a6cd0..ff490050 100644 --- a/packages/csv-parse/samples/option.skip_empty_lines.js +++ b/packages/csv-parse/samples/option.skip_empty_lines.js @@ -1,12 +1,13 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse/sync"; const records = parse( - ` -"a","b","c" + dedent` + "a","b","c" -"d","e","f" -`, + "d","e","f" + `, { skip_empty_lines: true, }, diff --git a/packages/csv-parse/samples/option.skip_empty_lines.trim.js b/packages/csv-parse/samples/option.skip_empty_lines.trim.js index 87b6b019..e67b52fc 100644 --- a/packages/csv-parse/samples/option.skip_empty_lines.trim.js +++ b/packages/csv-parse/samples/option.skip_empty_lines.trim.js @@ -1,17 +1,15 @@ import assert from "node:assert"; import { parse } from "csv-parse/sync"; -const records = parse( - ` +const data = ` "a","b","c" \t "d","e","f" -`, - { - skip_empty_lines: true, - trim: true, - }, -); +`; +const records = parse(data, { + skip_empty_lines: true, + trim: true, +}); assert.deepStrictEqual(records, [ ["a", "b", "c"], diff --git a/packages/csv-parse/samples/option.skip_records_with_empty_values.js b/packages/csv-parse/samples/option.skip_records_with_empty_values.js index 6028dbfb..8468e76f 100644 --- a/packages/csv-parse/samples/option.skip_records_with_empty_values.js +++ b/packages/csv-parse/samples/option.skip_records_with_empty_values.js @@ -1,12 +1,13 @@ import assert from "node:assert"; import { parse } from "csv-parse"; -parse( - ` +const data = ` a,b,c , ,\t d,e,f -`.trim(), +`; +parse( + data, { skip_records_with_empty_values: true, }, diff --git a/packages/csv-parse/samples/option.skip_records_with_error.js b/packages/csv-parse/samples/option.skip_records_with_error.js index 7d2d7a8c..d2175ea6 100644 --- a/packages/csv-parse/samples/option.skip_records_with_error.js +++ b/packages/csv-parse/samples/option.skip_records_with_error.js @@ -1,4 +1,5 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse"; const parser = parse( @@ -17,11 +18,11 @@ parser.on("skip", function (err) { assert(/^Invalid Closing Quote/.test(err.message)); }); parser.write( - ` -"a","b","c" -"d","e","f" -"invalid"," " ","record" -"h","i","j" -`.trim(), + dedent` + "a","b","c" + "d","e","f" + "invalid"," " ","record" + "h","i","j" + `, ); parser.end(); diff --git a/packages/csv-parse/samples/option.to.js b/packages/csv-parse/samples/option.to.js index a2032518..d1f99dfe 100644 --- a/packages/csv-parse/samples/option.to.js +++ b/packages/csv-parse/samples/option.to.js @@ -1,13 +1,14 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse"; parse( - ` -a,b -1,2 -3,4 -5,6 -`.trim(), + dedent` + a,b + 1,2 + 3,4 + 5,6 + `, { columns: true, to: 2, diff --git a/packages/csv-parse/samples/option.to_line.js b/packages/csv-parse/samples/option.to_line.js index 9ea94971..ae6b1951 100644 --- a/packages/csv-parse/samples/option.to_line.js +++ b/packages/csv-parse/samples/option.to_line.js @@ -1,12 +1,13 @@ import assert from "node:assert"; +import dedent from "dedent"; import { parse } from "csv-parse/sync"; const records = parse( - ` -a,1 -b,1 -x,x -`.trim(), + dedent` + a,1 + b,1 + x,x + `, { to_line: 2, }, From db4ad7d3e890bbf777b9ec6caf417a74fed09b07 Mon Sep 17 00:00:00 2001 From: David Worms Date: Mon, 19 May 2025 11:59:35 +0200 Subject: [PATCH 17/49] refactor: apply eslint recommandations --- demo/cjs/lib/csv.ts | 31 +- demo/cjs/lib/csv_sync.ts | 15 +- demo/cjs/lib/parse.ts | 31 +- demo/cjs/lib/parse_sync.ts | 23 +- demo/cjs/lib/stringify.ts | 29 +- demo/esm/lib/csv.ts | 31 +- demo/esm/lib/csv_sync.ts | 15 +- demo/esm/lib/parse.ts | 31 +- demo/esm/lib/parse_sync.ts | 23 +- demo/ts-cjs-node16/lib/index.ts | 40 +- demo/ts-esm-node16/lib/stringify-import.ts | 37 +- demo/ts-esm-node16/lib/stringify.ts | 29 +- demo/webpack-ts/src/generate.ts | 24 +- demo/webpack-ts/src/parse.ts | 11 +- demo/webpack-ts/src/stringify.ts | 21 +- demo/webpack-ts/src/transform.ts | 39 +- eslint.config.js | 29 + packages/csv-generate/lib/index.d.ts | 143 ++- packages/csv-generate/lib/stream.d.ts | 3 +- packages/csv-generate/lib/sync.d.ts | 7 +- packages/csv-generate/test/api.types.sync.ts | 17 +- packages/csv-generate/test/api.types.ts | 44 +- packages/csv-generate/tsconfig.json | 2 +- packages/csv-parse/lib/index.d.ts | 500 ++++++----- packages/csv-parse/lib/stream.d.ts | 15 +- packages/csv-parse/lib/sync.d.ts | 15 +- packages/csv-parse/test/api.types.sync.ts | 126 +-- packages/csv-parse/test/api.types.ts | 824 ++++++++++-------- packages/csv-parse/test/api.web_stream.ts | 6 +- packages/csv-parse/tsconfig.json | 2 +- packages/csv-stringify/lib/index.d.ts | 211 ++--- packages/csv-stringify/lib/sync.d.ts | 16 +- packages/csv-stringify/lib/utils/get.js | 2 +- .../csv-stringify/samples/browser/index.html | 60 -- .../csv-stringify/samples/browser/index.js | 10 - packages/csv-stringify/test/api.types.sync.ts | 11 +- packages/csv-stringify/test/api.types.ts | 49 +- packages/csv-stringify/tsconfig.json | 2 +- packages/csv/lib/index.d.ts | 17 +- packages/csv/lib/sync.d.ts | 19 +- packages/csv/test/api.types.sync.ts | 24 +- packages/csv/test/api.types.ts | 12 +- packages/stream-transform/lib/index.d.ts | 72 +- packages/stream-transform/lib/sync.d.ts | 15 +- .../stream-transform/test/api.types.sync.ts | 8 +- packages/stream-transform/test/api.types.ts | 28 +- packages/stream-transform/tsconfig.json | 2 +- 47 files changed, 1395 insertions(+), 1326 deletions(-) delete mode 100644 packages/csv-stringify/samples/browser/index.html delete mode 100644 packages/csv-stringify/samples/browser/index.js diff --git a/demo/cjs/lib/csv.ts b/demo/cjs/lib/csv.ts index 28540640..efcd4c1e 100644 --- a/demo/cjs/lib/csv.ts +++ b/demo/cjs/lib/csv.ts @@ -1,35 +1,30 @@ - // Import the package main module -import * as csv from 'csv' +import * as csv from "csv"; // Generate 20 records const generator: csv.generator.Generator = csv.generate({ - delimiter: '|', - length: 20 -}) + delimiter: "|", + length: 20, +}); // Transform CSV data into records const parser: csv.parser.Parser = csv.parse({ - delimiter: '|' -}) + delimiter: "|", +}); // Transform each value into uppercase const transformer: csv.transformer.Transformer = csv.transform((record) => { - return record.map((value: string) => { - return value.toUpperCase() - }); -}) + return record.map((value: string) => { + return value.toUpperCase(); + }); +}); // Convert objects into a stream const stringifier: csv.stringifier.Stringifier = csv.stringify({ cast: { string: (value: string, context: csv.stringifier.CastingContext) => { return context.index % 2 ? value.toLowerCase() : value.toUpperCase(); - } + }, }, quoted: true, -}) +}); // Run the pipeline -generator -.pipe(parser) -.pipe(transformer) -.pipe(stringifier) -.pipe(process.stdout) +generator.pipe(parser).pipe(transformer).pipe(stringifier).pipe(process.stdout); diff --git a/demo/cjs/lib/csv_sync.ts b/demo/cjs/lib/csv_sync.ts index 379a71db..51e5abbe 100644 --- a/demo/cjs/lib/csv_sync.ts +++ b/demo/cjs/lib/csv_sync.ts @@ -1,31 +1,30 @@ - // Import the package sync module // Node.js >= 14 -import * as csv from 'csv/sync'; +import * as csv from "csv/sync"; // Node.js < 14 // import * as csv from 'csv/dist/cjs/sync'; // Generate 20 records const input: string = csv.generate({ - delimiter: '|', + delimiter: "|", length: 20, }); // Transform CSV data into records const records: any = csv.parse(input, { - delimiter: '|', + delimiter: "|", }); // Transform each value into uppercase const uppercaseRecords: any = csv.transform(records, (record) => { - return record.map((value: string) => { - return value.toUpperCase() - }); + return record.map((value: string) => { + return value.toUpperCase(); + }); }); // Convert objects into a stream const output: any = csv.stringify(uppercaseRecords, { cast: { string: (value: string, context: csv.stringifier.CastingContext) => { return context.index % 2 ? value.toLowerCase() : value.toUpperCase(); - } + }, }, quoted: true, }); diff --git a/demo/cjs/lib/parse.ts b/demo/cjs/lib/parse.ts index c5a8203b..7c3cb444 100644 --- a/demo/cjs/lib/parse.ts +++ b/demo/cjs/lib/parse.ts @@ -1,31 +1,28 @@ - -import assert from 'node:assert' -import { parse, Parser } from 'csv-parse' +import assert from "node:assert"; +import { parse, Parser } from "csv-parse"; const output: any = []; // Create the parser const parser: Parser = parse({ - delimiter: ':' + delimiter: ":", }); // Use the readable stream api to consume records -parser.on('readable', function(){ - let record; while ((record = parser.read()) !== null) { - output.push(record) +parser.on("readable", function () { + let record; + while ((record = parser.read()) !== null) { + output.push(record); } }); // Catch any error -parser.on('error', function(err){ - console.error(err.message) +parser.on("error", function (err) { + console.error(err.message); }); // Test that the parsed records matched what's expected -parser.on('end', function(){ - assert.deepStrictEqual( - output, - [ - [ 'a','b','c' ], - [ '1','2','3' ] - ] - ) +parser.on("end", function () { + assert.deepStrictEqual(output, [ + ["a", "b", "c"], + ["1", "2", "3"], + ]); }); // Write data to the stream parser.write("a:b:c\n"); diff --git a/demo/cjs/lib/parse_sync.ts b/demo/cjs/lib/parse_sync.ts index f4ace4a2..a3bafd76 100644 --- a/demo/cjs/lib/parse_sync.ts +++ b/demo/cjs/lib/parse_sync.ts @@ -1,22 +1,15 @@ - -import assert from 'node:assert' +import assert from "node:assert"; // Node.js >= 14 -import { parse } from 'csv-parse/sync' +import { parse } from "csv-parse/sync"; // Node.js < 14 // import { parse } from 'csv-parse/dist/cjs/sync' // Create the parser -const records: [] = parse([ - "a:b:c\n", - "1:2:3\n" -].join(''), { - delimiter: ':' +const records: [] = parse(["a:b:c\n", "1:2:3\n"].join(""), { + delimiter: ":", }); // Test that the parsed records matched what's expected -assert.deepStrictEqual( - records, - [ - [ 'a','b','c' ], - [ '1','2','3' ] - ] -); +assert.deepStrictEqual(records, [ + ["a", "b", "c"], + ["1", "2", "3"], +]); diff --git a/demo/cjs/lib/stringify.ts b/demo/cjs/lib/stringify.ts index be595199..2f985f1b 100644 --- a/demo/cjs/lib/stringify.ts +++ b/demo/cjs/lib/stringify.ts @@ -1,29 +1,26 @@ +import assert from "node:assert"; +import { stringify, Stringifier } from "csv-stringify"; -import assert from 'node:assert' -import { stringify, Stringifier } from 'csv-stringify'; - -let output: string = ''; +let output: string = ""; // Create the parser const stringifier: Stringifier = stringify({ - delimiter: ':', - encoding: 'utf8' + delimiter: ":", + encoding: "utf8", }); // Use the readable stream api to consume records -stringifier.on('readable', function(){ - let record; while ((record = stringifier.read()) !== null) { - output += record +stringifier.on("readable", function () { + let record; + while ((record = stringifier.read()) !== null) { + output += record; } }); // Catch any error -stringifier.on('error', function(err){ - console.error(err.message) +stringifier.on("error", function (err) { + console.error(err.message); }); // Test that the parsed records matched what's expected -stringifier.on('end', function(){ - assert.deepStrictEqual( - output, - 'a:b:c\n1:2:3\n' - ) +stringifier.on("end", function () { + assert.deepStrictEqual(output, "a:b:c\n1:2:3\n"); }); // Write data to the stream stringifier.write(["a", "b", "c"]); diff --git a/demo/esm/lib/csv.ts b/demo/esm/lib/csv.ts index 28540640..efcd4c1e 100644 --- a/demo/esm/lib/csv.ts +++ b/demo/esm/lib/csv.ts @@ -1,35 +1,30 @@ - // Import the package main module -import * as csv from 'csv' +import * as csv from "csv"; // Generate 20 records const generator: csv.generator.Generator = csv.generate({ - delimiter: '|', - length: 20 -}) + delimiter: "|", + length: 20, +}); // Transform CSV data into records const parser: csv.parser.Parser = csv.parse({ - delimiter: '|' -}) + delimiter: "|", +}); // Transform each value into uppercase const transformer: csv.transformer.Transformer = csv.transform((record) => { - return record.map((value: string) => { - return value.toUpperCase() - }); -}) + return record.map((value: string) => { + return value.toUpperCase(); + }); +}); // Convert objects into a stream const stringifier: csv.stringifier.Stringifier = csv.stringify({ cast: { string: (value: string, context: csv.stringifier.CastingContext) => { return context.index % 2 ? value.toLowerCase() : value.toUpperCase(); - } + }, }, quoted: true, -}) +}); // Run the pipeline -generator -.pipe(parser) -.pipe(transformer) -.pipe(stringifier) -.pipe(process.stdout) +generator.pipe(parser).pipe(transformer).pipe(stringifier).pipe(process.stdout); diff --git a/demo/esm/lib/csv_sync.ts b/demo/esm/lib/csv_sync.ts index 82a7f75b..09af0ce3 100644 --- a/demo/esm/lib/csv_sync.ts +++ b/demo/esm/lib/csv_sync.ts @@ -1,28 +1,27 @@ - // Import the package sync module -import * as csv from 'csv/sync'; +import * as csv from "csv/sync"; // Generate 20 records const input: string = csv.generate({ - delimiter: '|', + delimiter: "|", length: 20, }); // Transform CSV data into records const records: any = csv.parse(input, { - delimiter: '|', + delimiter: "|", }); // Transform each value into uppercase const uppercaseRecords: any = csv.transform(records, (record) => { - return record.map((value: string) => { - return value.toUpperCase() - }); + return record.map((value: string) => { + return value.toUpperCase(); + }); }); // Convert objects into a stream const output: any = csv.stringify(uppercaseRecords, { cast: { string: (value: string, context: csv.stringifier.CastingContext) => { return context.index % 2 ? value.toLowerCase() : value.toUpperCase(); - } + }, }, quoted: true, }); diff --git a/demo/esm/lib/parse.ts b/demo/esm/lib/parse.ts index 43c02be8..add7876e 100644 --- a/demo/esm/lib/parse.ts +++ b/demo/esm/lib/parse.ts @@ -1,31 +1,28 @@ - -import assert from 'assert' -import { parse, Parser } from 'csv-parse' +import assert from "assert"; +import { parse, Parser } from "csv-parse"; const output: any = []; // Create the parser const parser: Parser = parse({ - delimiter: ':' + delimiter: ":", }); // Use the readable stream api to consume records -parser.on('readable', function(){ - let record; while ((record = parser.read()) !== null) { - output.push(record) +parser.on("readable", function () { + let record; + while ((record = parser.read()) !== null) { + output.push(record); } }); // Catch any error -parser.on('error', function(err){ - console.error(err.message) +parser.on("error", function (err) { + console.error(err.message); }); // Test that the parsed records matched what's expected -parser.on('end', function(){ - assert.deepStrictEqual( - output, - [ - [ 'a','b','c' ], - [ '1','2','3' ] - ] - ) +parser.on("end", function () { + assert.deepStrictEqual(output, [ + ["a", "b", "c"], + ["1", "2", "3"], + ]); }); // Write data to the stream parser.write("a:b:c\n"); diff --git a/demo/esm/lib/parse_sync.ts b/demo/esm/lib/parse_sync.ts index efba9da7..271c3ecc 100644 --- a/demo/esm/lib/parse_sync.ts +++ b/demo/esm/lib/parse_sync.ts @@ -1,19 +1,12 @@ - -import assert from 'assert' -import { parse } from 'csv-parse/sync' +import assert from "assert"; +import { parse } from "csv-parse/sync"; // Create the parser -const records: [] = parse([ - "a:b:c\n", - "1:2:3\n" -].join(''), { - delimiter: ':' +const records: [] = parse(["a:b:c\n", "1:2:3\n"].join(""), { + delimiter: ":", }); // Test that the parsed records matched what's expected -assert.deepStrictEqual( - records, - [ - [ 'a','b','c' ], - [ '1','2','3' ] - ] -); +assert.deepStrictEqual(records, [ + ["a", "b", "c"], + ["1", "2", "3"], +]); diff --git a/demo/ts-cjs-node16/lib/index.ts b/demo/ts-cjs-node16/lib/index.ts index dc885b67..e6e4fd69 100644 --- a/demo/ts-cjs-node16/lib/index.ts +++ b/demo/ts-cjs-node16/lib/index.ts @@ -1,28 +1,30 @@ +import assert from "assert"; +import { generate, Generator } from "csv-generate"; +import { parse, Parser } from "csv-parse"; +import { transform, Transformer } from "stream-transform"; +import { stringify, Stringifier } from "csv-stringify"; -import assert from 'assert' -import { generate, Generator } from 'csv-generate'; -import { parse, Parser } from 'csv-parse'; -import { transform, Transformer } from 'stream-transform'; -import { stringify, Stringifier } from 'csv-stringify'; - -let chunks: string[] = []; +const chunks: string[] = []; // Create the parser -const generator: Generator = generate({length: 2, seed: true}); +const generator: Generator = generate({ length: 2, seed: true }); const parser: Parser = parse(); const transformer: Transformer = transform((record) => record); const stringifier: Stringifier = stringify(); -generator.pipe(parser).pipe(transformer).pipe(stringifier) - .on('data', function(data) { - chunks.push(data.toString()) +generator + .pipe(parser) + .pipe(transformer) + .pipe(stringifier) + .on("data", function (data) { + chunks.push(data.toString()); }) - .on('end', () => { + .on("end", () => { assert.strictEqual( - chunks.join(''), + chunks.join(""), [ - 'OMH,ONKCHhJmjadoA,D,GeACHiN,nnmiN,CGfDKB,NIl,JnnmjadnmiNL', - 'KB,dmiM,fENL,Jn,opEMIkdmiOMFckep,MIj,bgIjadnn,fENLEOMIkbhLDK', - '', - ].join('\n') - ) - }) + "OMH,ONKCHhJmjadoA,D,GeACHiN,nnmiN,CGfDKB,NIl,JnnmjadnmiNL", + "KB,dmiM,fENL,Jn,opEMIkdmiOMFckep,MIj,bgIjadnn,fENLEOMIkbhLDK", + "", + ].join("\n"), + ); + }); diff --git a/demo/ts-esm-node16/lib/stringify-import.ts b/demo/ts-esm-node16/lib/stringify-import.ts index 64a8a2ea..5ad6b09f 100644 --- a/demo/ts-esm-node16/lib/stringify-import.ts +++ b/demo/ts-esm-node16/lib/stringify-import.ts @@ -1,37 +1,34 @@ +import assert from "assert"; +import { Stringifier } from "csv-stringify"; -import assert from 'assert' -import { Stringifier } from 'csv-stringify'; - -(async function(){ - const {stringify} = await import('csv-stringify'); +(async function () { + const { stringify } = await import("csv-stringify"); console.log(stringify); - - let output: string = ''; + + let output: string = ""; // Create the parser const stringifier: Stringifier = stringify({ - delimiter: ':', - encoding: 'utf8' + delimiter: ":", + encoding: "utf8", }); // Use the readable stream api to consume records - stringifier.on('readable', function(){ - let record; while ((record = stringifier.read()) !== null) { - output += record + stringifier.on("readable", function () { + let record; + while ((record = stringifier.read()) !== null) { + output += record; } }); // Catch any error - stringifier.on('error', function(err){ - console.error(err.message) + stringifier.on("error", function (err) { + console.error(err.message); }); // Test that the parsed records matched what's expected - stringifier.on('end', function(){ - assert.deepStrictEqual( - output, - 'a:b:c\n1:2:3\n' - ) + stringifier.on("end", function () { + assert.deepStrictEqual(output, "a:b:c\n1:2:3\n"); }); // Write data to the stream stringifier.write(["a", "b", "c"]); stringifier.write([1, 2, 3]); // Close the readable stream stringifier.end(); -})() +})(); diff --git a/demo/ts-esm-node16/lib/stringify.ts b/demo/ts-esm-node16/lib/stringify.ts index f4cf1db9..bbe4202d 100644 --- a/demo/ts-esm-node16/lib/stringify.ts +++ b/demo/ts-esm-node16/lib/stringify.ts @@ -1,29 +1,26 @@ +import assert from "assert"; +import { stringify, Stringifier } from "csv-stringify"; -import assert from 'assert' -import { stringify, Stringifier } from 'csv-stringify'; - -let output: string = ''; +let output: string = ""; // Create the parser const stringifier: Stringifier = stringify({ - delimiter: ':', - encoding: 'utf8' + delimiter: ":", + encoding: "utf8", }); // Use the readable stream api to consume records -stringifier.on('readable', function(){ - let record; while ((record = stringifier.read()) !== null) { - output += record +stringifier.on("readable", function () { + let record; + while ((record = stringifier.read()) !== null) { + output += record; } }); // Catch any error -stringifier.on('error', function(err){ - console.error(err.message) +stringifier.on("error", function (err) { + console.error(err.message); }); // Test that the parsed records matched what's expected -stringifier.on('end', function(){ - assert.deepStrictEqual( - output, - 'a:b:c\n1:2:3\n' - ) +stringifier.on("end", function () { + assert.deepStrictEqual(output, "a:b:c\n1:2:3\n"); }); // Write data to the stream stringifier.write(["a", "b", "c"]); diff --git a/demo/webpack-ts/src/generate.ts b/demo/webpack-ts/src/generate.ts index 3a5e368e..b6690cd0 100644 --- a/demo/webpack-ts/src/generate.ts +++ b/demo/webpack-ts/src/generate.ts @@ -1,16 +1,18 @@ - -import {generate} from 'csv-generate/browser/esm'; +import { generate } from "csv-generate/browser/esm"; window.onload = () => { - const runEl = document.getElementById('run'); - const outputEl = document.getElementById('output'); - if(!runEl || !outputEl) return; + const runEl = document.getElementById("run"); + const outputEl = document.getElementById("output"); + if (!runEl || !outputEl) return; runEl.onclick = () => { - generate({ - objectMode: true, - length: 2 - }, (err, records) => { - outputEl.innerHTML = JSON.stringify(records, null, 2); - }); + generate( + { + objectMode: true, + length: 2, + }, + (err, records) => { + outputEl.innerHTML = JSON.stringify(records, null, 2); + }, + ); }; }; diff --git a/demo/webpack-ts/src/parse.ts b/demo/webpack-ts/src/parse.ts index 1f0f43af..c750a960 100644 --- a/demo/webpack-ts/src/parse.ts +++ b/demo/webpack-ts/src/parse.ts @@ -1,12 +1,11 @@ - -import { parse, CsvError } from 'csv-parse/browser/esm' +import { parse, CsvError } from "csv-parse/browser/esm"; window.onload = () => { - const runEl = document.getElementById('run'); - const outputEl = document.getElementById('output'); - if(!runEl || !outputEl) return; + const runEl = document.getElementById("run"); + const outputEl = document.getElementById("output"); + if (!runEl || !outputEl) return; runEl.onclick = () => { - parse('a,b,c\n1,2,3', (err: CsvError|undefined, records: any) => { + parse("a,b,c\n1,2,3", (err: CsvError | undefined, records: any) => { outputEl.innerHTML = JSON.stringify(records, null, 2); }); }; diff --git a/demo/webpack-ts/src/stringify.ts b/demo/webpack-ts/src/stringify.ts index 6d2a2f0e..62d8f2cb 100644 --- a/demo/webpack-ts/src/stringify.ts +++ b/demo/webpack-ts/src/stringify.ts @@ -1,13 +1,18 @@ - -import {stringify} from 'csv-stringify/browser/esm'; +import { stringify } from "csv-stringify/browser/esm"; window.onload = () => { - const runEl = document.getElementById('run'); - const outputEl = document.getElementById('output'); - if(!runEl || !outputEl) return; + const runEl = document.getElementById("run"); + const outputEl = document.getElementById("output"); + if (!runEl || !outputEl) return; runEl.onclick = () => { - stringify([['a', 'b', 'c'], [1, 2, 3]], (err, data) => { - outputEl.innerHTML = data; - }); + stringify( + [ + ["a", "b", "c"], + [1, 2, 3], + ], + (err, data) => { + outputEl.innerHTML = data; + }, + ); }; }; diff --git a/demo/webpack-ts/src/transform.ts b/demo/webpack-ts/src/transform.ts index 1d260fde..4ce005f0 100644 --- a/demo/webpack-ts/src/transform.ts +++ b/demo/webpack-ts/src/transform.ts @@ -1,23 +1,26 @@ - -import {transform} from 'stream-transform/browser/esm'; +import { transform } from "stream-transform/browser/esm"; window.onload = () => { - const runEl = document.getElementById('run'); - const outputEl = document.getElementById('output'); - if(!runEl || !outputEl) return; + const runEl = document.getElementById("run"); + const outputEl = document.getElementById("output"); + if (!runEl || !outputEl) return; runEl.onclick = () => { - transform([ - ['a', 'b', 'c'], - [1, 2, 3] - ], (record: string[] | number[]) => { - const el = record.shift(); - // `never` is awkward to me, without it, we got the following error: - // TS2345: Argument of type 'string | number' is not assignable to parameter of type 'never'. - // solution is mentionned here https://stackoverflow.com/questions/52423842/what-is-not-assignable-to-parameter-of-type-never-error-in-typescript - if(el !== undefined) record.push(el as never); - return record; - }, (err, records) => { - outputEl.innerHTML = JSON.stringify(records, null, 2); - }); + transform( + [ + ["a", "b", "c"], + [1, 2, 3], + ], + (record: string[] | number[]) => { + const el = record.shift(); + // `never` is awkward to me, without it, we got the following error: + // TS2345: Argument of type 'string | number' is not assignable to parameter of type 'never'. + // solution is mentionned here https://stackoverflow.com/questions/52423842/what-is-not-assignable-to-parameter-of-type-never-error-in-typescript + if (el !== undefined) record.push(el as never); + return record; + }, + (err, records) => { + outputEl.innerHTML = JSON.stringify(records, null, 2); + }, + ); }; }; diff --git a/eslint.config.js b/eslint.config.js index 477676c9..c2fb11cb 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -3,6 +3,7 @@ import js from "@eslint/js"; import ts from "typescript-eslint"; import mocha from "eslint-plugin-mocha"; import prettier from "eslint-plugin-prettier/recommended"; +// const __dirname = new URL(".", import.meta.url).pathname; export default [ { @@ -15,6 +16,14 @@ export default [ ...ts.configs.recommended, mocha.configs.recommended, prettier, + // { + // files: ["**/*.ts"], + // languageOptions: { + // parserOptions: { + // project: true, + // }, + // }, + // }, { files: ["demo/webpack/**/*.js"], languageOptions: { @@ -23,4 +32,24 @@ export default [ }, }, }, + { + files: ["**/test/**/*.js", "**/test/**/*.ts"], + languageOptions: { + // globals: { + // ...globals.mocha, + // }, + // https://typescript-eslint.io/blog/parser-options-project-true/ + // parserOptions: { + // project: ["./packages/csv/tsconfig.json"], + // tsconfigRootDir: __dirname, + // }, + // parserOptions: { + // project: true, + // tsconfigRootDir: __dirname, + // }, + }, + rules: { + "@typescript-eslint/no-unused-expressions": 0, // Applies to both js and ts + }, + }, ]; diff --git a/packages/csv-generate/lib/index.d.ts b/packages/csv-generate/lib/index.d.ts index c5528cfc..86f12688 100644 --- a/packages/csv-generate/lib/index.d.ts +++ b/packages/csv-generate/lib/index.d.ts @@ -1,4 +1,3 @@ - /// import * as stream from "stream"; @@ -6,89 +5,89 @@ import * as stream from "stream"; type Callback = (err?: Error, records?: any) => void; export class Generator extends stream.Readable { - constructor(options?: Options); - - readonly options: Options; + constructor(options?: Options); + + readonly options: Options; } export type ColumnsFunctionArgs = { - options: Options; - state: State; + options: Options; + state: State; }; export type ColumnsFunction = (args: ColumnsFunctionArgs) => string; export type State = { - start_time: number, - fixed_size_buffer: number, - count_written: number, - count_created: number, -} + start_time: number; + fixed_size_buffer: number; + count_written: number; + count_created: number; +}; export interface Options extends stream.ReadableOptions { - /** - * Define the number of generated fields and the generation method. - */ - columns?: number | (string | ColumnsFunction)[]; - /** - * Set the field delimiter. - */ - delimiter?: string; - /** - * Period to run in milliseconds. - */ - duration?: number; - /** - * If specified, then buffers will be decoded to strings using the specified encoding. - */ - encoding?: BufferEncoding | undefined; - /** - * When to stop the generation. - */ - end?: number | Date; - /** - * One or multiple characters to print at the end of the file; only apply when objectMode is disabled. - */ - eof?: boolean | string; - /** - * Generate buffers equals length as defined by the `highWaterMark` option. - */ - fixed_size?: boolean; - fixedSize?: boolean; - /** - * The maximum number of bytes to store in the internal buffer before ceasing to read from the underlying resource. - */ - high_water_mark?: number; - highWaterMark?: number; - /** - * Number of lines or records to generate. - */ - length?: number; - /** - * Maximum number of characters per word. - */ - max_word_length?: number; - maxWordLength?: number; - /** - * Whether this stream should behave as a stream of objects. - */ - object_mode?: boolean - objectMode?: boolean; - /** - * One or multiple characters used to delimit records. - */ - row_delimiter?: string; - /** - * Generate idempotent random characters if a number provided. - */ - seed?: boolean | number; - /** - * The time to wait between the generation of each records - */ - sleep?: number; + /** + * Define the number of generated fields and the generation method. + */ + columns?: number | (string | ColumnsFunction)[]; + /** + * Set the field delimiter. + */ + delimiter?: string; + /** + * Period to run in milliseconds. + */ + duration?: number; + /** + * If specified, then buffers will be decoded to strings using the specified encoding. + */ + encoding?: BufferEncoding | undefined; + /** + * When to stop the generation. + */ + end?: number | Date; + /** + * One or multiple characters to print at the end of the file; only apply when objectMode is disabled. + */ + eof?: boolean | string; + /** + * Generate buffers equals length as defined by the `highWaterMark` option. + */ + fixed_size?: boolean; + fixedSize?: boolean; + /** + * The maximum number of bytes to store in the internal buffer before ceasing to read from the underlying resource. + */ + high_water_mark?: number; + highWaterMark?: number; + /** + * Number of lines or records to generate. + */ + length?: number; + /** + * Maximum number of characters per word. + */ + max_word_length?: number; + maxWordLength?: number; + /** + * Whether this stream should behave as a stream of objects. + */ + object_mode?: boolean; + objectMode?: boolean; + /** + * One or multiple characters used to delimit records. + */ + row_delimiter?: string; + /** + * Generate idempotent random characters if a number provided. + */ + seed?: boolean | number; + /** + * The time to wait between the generation of each records + */ + sleep?: number; } declare function generate(options?: Options, callback?: Callback): Generator; declare function generate(callback?: Callback): Generator; // export default generate; -export {generate}; +export { generate }; diff --git a/packages/csv-generate/lib/stream.d.ts b/packages/csv-generate/lib/stream.d.ts index d53894a7..79188667 100644 --- a/packages/csv-generate/lib/stream.d.ts +++ b/packages/csv-generate/lib/stream.d.ts @@ -1,5 +1,4 @@ - -import { Options } from './index.js'; +import { Options } from "./index.js"; declare function generate(options?: Options): ReadableStream; // export default generate; diff --git a/packages/csv-generate/lib/sync.d.ts b/packages/csv-generate/lib/sync.d.ts index 965ad634..a93ff8c4 100644 --- a/packages/csv-generate/lib/sync.d.ts +++ b/packages/csv-generate/lib/sync.d.ts @@ -1,6 +1,7 @@ +import { Options } from "./index.js"; -import { Options } from './index.js'; - -declare function generate(options: number | Options): string & Array; +declare function generate( + options: number | Options, +): string & Array; // export default generate; export { generate, Options }; diff --git a/packages/csv-generate/test/api.types.sync.ts b/packages/csv-generate/test/api.types.sync.ts index c9c52129..900a2df1 100644 --- a/packages/csv-generate/test/api.types.sync.ts +++ b/packages/csv-generate/test/api.types.sync.ts @@ -1,19 +1,19 @@ import "should"; import { generate, Options } from "../lib/sync.js"; -describe("API Types", () => { - describe("usage", () => { - it("sync with options as number", () => { +describe("API Types", function () { + describe("usage", function () { + it("sync with options as number", function () { const generator: string = generate(1); generator.should.be.a.String(); }); - it("sync with options in string mode", () => { + it("sync with options in string mode", function () { const generator: string = generate({ length: 1 }); generator.should.be.a.String(); }); - it("sync with options in object mode", () => { + it("sync with options in object mode", function () { const generator: Array> = generate({ length: 1, objectMode: true, @@ -22,12 +22,13 @@ describe("API Types", () => { }); }); - describe("types", () => { - it("generate", () => { + describe("types", function () { + it("generate", function () { const generator: string = generate(1); return generator; }); - it("Options", () => { + + it("Options", function () { const options: Options = { columns: 1, }; diff --git a/packages/csv-generate/test/api.types.ts b/packages/csv-generate/test/api.types.ts index bc7466f6..b70ab344 100644 --- a/packages/csv-generate/test/api.types.ts +++ b/packages/csv-generate/test/api.types.ts @@ -1,9 +1,9 @@ import "should"; import { generate, Options, Generator } from "../lib/index.js"; -describe("API Types", () => { - describe("Initialisation", () => { - it("stream", () => { +describe("API Types", function () { + describe("Initialisation", function () { + it("stream", function () { // With callback const generator: Generator = generate(); generator.destroy(); @@ -15,11 +15,11 @@ describe("API Types", () => { }); }); - describe("Generator", () => { - it("Expose options", () => { + describe("Generator", function () { + it("Expose options", function () { const generator: Generator = generate(); const options: Options = generator.options; - const keys: any = Object.keys(options); + const keys = Object.keys(options); keys .sort() .should.eql([ @@ -38,7 +38,7 @@ describe("API Types", () => { ]); }); - it("Receive Callback", (next) => { + it("Receive Callback", function (next) { generate({ length: 3 }, function (err: Error | undefined, data: object) { if (err !== undefined) { data.should.be.an.Object(); @@ -48,8 +48,8 @@ describe("API Types", () => { }); }); - describe("Options", () => { - it("columns", () => { + describe("Options", function () { + it("columns", function () { const options: Options = {}; options.columns = 8; options.columns = [ @@ -60,69 +60,69 @@ describe("API Types", () => { ]; }); - it("delimiter", () => { + it("delimiter", function () { const options: Options = {}; options.delimiter = "|"; }); - it("duration", () => { + it("duration", function () { const options: Options = {}; options.duration = 1000; }); - it("encoding", () => { + it("encoding", function () { const options: Options = {}; options.encoding = "utf8"; }); - it("end", () => { + it("end", function () { const options: Options = {}; options.end = 1000; options.end = new Date(); }); - it("eof", () => { + it("eof", function () { const options: Options = {}; options.eof = true; options.eof = "\n"; }); - it("fixed_size", () => { + it("fixed_size", function () { const options: Options = {}; options.fixed_size = true; }); - it("high_water_mark", () => { + it("high_water_mark", function () { const options: Options = {}; options.high_water_mark = 1024; }); - it("length", () => { + it("length", function () { const options: Options = {}; options.length = 100; }); - it("max_word_length", () => { + it("max_word_length", function () { const options: Options = {}; options.length = 10; }); - it("object_mode", () => { + it("object_mode", function () { const options: Options = {}; options.object_mode = true; }); - it("row_delimiter", () => { + it("row_delimiter", function () { const options: Options = {}; options.row_delimiter = ";"; }); - it("seed", () => { + it("seed", function () { const options: Options = {}; options.seed = 10; }); - it("sleep", () => { + it("sleep", function () { const options: Options = {}; options.sleep = 1000; }); diff --git a/packages/csv-generate/tsconfig.json b/packages/csv-generate/tsconfig.json index 4db508a7..5da38148 100644 --- a/packages/csv-generate/tsconfig.json +++ b/packages/csv-generate/tsconfig.json @@ -4,6 +4,6 @@ "esModuleInterop": true, "module": "ES2020", "moduleResolution": "node", - "strict": true, + "strict": true } } diff --git a/packages/csv-parse/lib/index.d.ts b/packages/csv-parse/lib/index.d.ts index ec8aa027..f5100150 100644 --- a/packages/csv-parse/lib/index.d.ts +++ b/packages/csv-parse/lib/index.d.ts @@ -4,37 +4,44 @@ import * as stream from "stream"; -export type Callback = (err: CsvError | undefined, records: any | undefined, info: Info) => void; +export type Callback = ( + err: CsvError | undefined, + records: any | undefined, + info: Info, +) => void; export interface Parser extends stream.Transform {} export class Parser { - constructor(options: Options); - - __push(line: any): any; - - __write(chars: any, end: any, callback: any): any; - - readonly options: Options - - readonly info: Info; + constructor(options: Options); + + __push(line: any): any; + + __write(chars: any, end: any, callback: any): any; + + readonly options: Options; + + readonly info: Info; } export interface CastingContext { - readonly column: number | string; - readonly empty_lines: number; - readonly error: CsvError; - readonly header: boolean; - readonly index: number; - readonly quoting: boolean; - readonly lines: number; - readonly records: number; - readonly invalid_field_length: number; + readonly column: number | string; + readonly empty_lines: number; + readonly error: CsvError; + readonly header: boolean; + readonly index: number; + readonly quoting: boolean; + readonly lines: number; + readonly records: number; + readonly invalid_field_length: number; } export type CastingFunction = (value: string, context: CastingContext) => any; -export type CastingDateFunction = (value: string, context: CastingContext) => Date; +export type CastingDateFunction = ( + value: string, + context: CastingContext, +) => Date; export type ColumnOption = string | undefined | null | false | { name: string }; @@ -44,240 +51,249 @@ BufferEncoding and undefined as well as null which is not defined in the extended type. */ export interface Options { - /** - * If true, the parser will attempt to convert read data types to native types. - * @deprecated Use {@link cast} - */ - auto_parse?: boolean | CastingFunction; - autoParse?: boolean | CastingFunction; - /** - * If true, the parser will attempt to convert read data types to dates. It requires the "auto_parse" option. - * @deprecated Use {@link cast_date} - */ - auto_parse_date?: boolean | CastingDateFunction; - autoParseDate?: boolean | CastingDateFunction; - /** - * If true, detect and exclude the byte order mark (BOM) from the CSV input if present. - */ - bom?: boolean; - /** - * If true, the parser will attempt to convert input string to native types. - * If a function, receive the value as first argument, a context as second argument and return a new value. More information about the context properties is available below. - */ - cast?: boolean | CastingFunction; - /** - * If true, the parser will attempt to convert input string to dates. - * If a function, receive the value as argument and return a new value. It requires the "auto_parse" option. Be careful, it relies on Date.parse. - */ - cast_date?: boolean | CastingDateFunction; - castDate?: boolean | CastingDateFunction; - /** - * List of fields as an array, - * a user defined callback accepting the first line and returning the column names or true if autodiscovered in the first CSV line, - * default to null, - * affect the result data set in the sense that records will be objects instead of arrays. - */ - columns?: ColumnOption[] | boolean | ((record: any) => ColumnOption[]); - /** - * Convert values into an array of values when columns are activated and - * when multiple columns of the same name are found. - */ - group_columns_by_name?: boolean; - groupColumnsByName?: boolean; - /** - * Treat all the characters after this one as a comment, default to '' (disabled). - */ - comment?: string; - /** - * Restrict the definition of comments to a full line. Comment characters - * defined in the middle of the line are not interpreted as such. The - * option require the activation of comments. - */ - comment_no_infix?: boolean; - /** - * Set the field delimiter. One character only, defaults to comma. - */ - delimiter?: string | string[] | Buffer; - /** - * Set the source and destination encoding, a value of `null` returns buffer instead of strings. - */ - encoding?: BufferEncoding | undefined; - /** - * Set the escape character, one character only, defaults to double quotes. - */ - escape?: string | null | false | Buffer; - /** - * Start handling records from the requested number of records. - */ - from?: number; - /** - * Start handling records from the requested line number. - */ - from_line?: number; - fromLine?: number; - /** - * Don't interpret delimiters as such in the last field according to the number of fields calculated from the number of columns, the option require the presence of the `column` option when `true`. - */ - ignore_last_delimiters?: boolean | number; - /** - * Generate two properties `info` and `record` where `info` is a snapshot of the info object at the time the record was created and `record` is the parsed array or object. - */ - info?: boolean; - /** - * If true, ignore whitespace immediately following the delimiter (i.e. left-trim all fields), defaults to false. - * Does not remove whitespace in a quoted field. - */ - ltrim?: boolean; - /** - * Maximum numer of characters to be contained in the field and line buffers before an exception is raised, - * used to guard against a wrong delimiter or record_delimiter, - * default to 128000 characters. - */ - max_record_size?: number; - maxRecordSize?: number; - /** - * Name of header-record title to name objects by. - */ - objname?: string; - /** - * Alter and filter records by executing a user defined function. - */ - on_record?: (record: any, context: CastingContext) => any; - onRecord?: (record: any, context: CastingContext) => any; - /** - * Optional character surrounding a field, one character only, defaults to double quotes. - */ - quote?: string | boolean | Buffer | null; - /** - * Generate two properties raw and row where raw is the original CSV row content and row is the parsed array or object. - */ - raw?: boolean; - /** - * Discard inconsistent columns count, default to false. - */ - relax_column_count?: boolean; - relaxColumnCount?: boolean; - /** - * Discard inconsistent columns count when the record contains less fields than expected, default to false. - */ - relax_column_count_less?: boolean; - relaxColumnCountLess?: boolean; - /** - * Discard inconsistent columns count when the record contains more fields than expected, default to false. - */ - relax_column_count_more?: boolean; - relaxColumnCountMore?: boolean; - /** - * Preserve quotes inside unquoted field. - */ - relax_quotes?: boolean; - relaxQuotes?: boolean; - /** - * One or multiple characters used to delimit record rows; defaults to auto discovery if not provided. - * Supported auto discovery method are Linux ("\n"), Apple ("\r") and Windows ("\r\n") row delimiters. - */ - record_delimiter?: string | string[] | Buffer | Buffer[]; - recordDelimiter?: string | string[] | Buffer | Buffer[]; - /** - * If true, ignore whitespace immediately preceding the delimiter (i.e. right-trim all fields), defaults to false. - * Does not remove whitespace in a quoted field. - */ - rtrim?: boolean; - /** - * Dont generate empty values for empty lines. - * Defaults to false - */ - skip_empty_lines?: boolean; - skipEmptyLines?: boolean; - /** - * Skip a line with error found inside and directly go process the next line. - */ - skip_records_with_error?: boolean; - skipRecordsWithError?: boolean; - /** - * Don't generate records for lines containing empty column values (column matching /\s*\/), defaults to false. - */ - skip_records_with_empty_values?: boolean; - skipRecordsWithEmptyValues?: boolean; - /** - * Stop handling records after the requested number of records. - */ - to?: number; - /** - * Stop handling records after the requested line number. - */ - to_line?: number; - toLine?: number; - /** - * If true, ignore whitespace immediately around the delimiter, defaults to false. - * Does not remove whitespace in a quoted field. - */ - trim?: boolean; + /** + * If true, the parser will attempt to convert read data types to native types. + * @deprecated Use {@link cast} + */ + auto_parse?: boolean | CastingFunction; + autoParse?: boolean | CastingFunction; + /** + * If true, the parser will attempt to convert read data types to dates. It requires the "auto_parse" option. + * @deprecated Use {@link cast_date} + */ + auto_parse_date?: boolean | CastingDateFunction; + autoParseDate?: boolean | CastingDateFunction; + /** + * If true, detect and exclude the byte order mark (BOM) from the CSV input if present. + */ + bom?: boolean; + /** + * If true, the parser will attempt to convert input string to native types. + * If a function, receive the value as first argument, a context as second argument and return a new value. More information about the context properties is available below. + */ + cast?: boolean | CastingFunction; + /** + * If true, the parser will attempt to convert input string to dates. + * If a function, receive the value as argument and return a new value. It requires the "auto_parse" option. Be careful, it relies on Date.parse. + */ + cast_date?: boolean | CastingDateFunction; + castDate?: boolean | CastingDateFunction; + /** + * List of fields as an array, + * a user defined callback accepting the first line and returning the column names or true if autodiscovered in the first CSV line, + * default to null, + * affect the result data set in the sense that records will be objects instead of arrays. + */ + columns?: ColumnOption[] | boolean | ((record: any) => ColumnOption[]); + /** + * Convert values into an array of values when columns are activated and + * when multiple columns of the same name are found. + */ + group_columns_by_name?: boolean; + groupColumnsByName?: boolean; + /** + * Treat all the characters after this one as a comment, default to '' (disabled). + */ + comment?: string; + /** + * Restrict the definition of comments to a full line. Comment characters + * defined in the middle of the line are not interpreted as such. The + * option require the activation of comments. + */ + comment_no_infix?: boolean; + /** + * Set the field delimiter. One character only, defaults to comma. + */ + delimiter?: string | string[] | Buffer; + /** + * Set the source and destination encoding, a value of `null` returns buffer instead of strings. + */ + encoding?: BufferEncoding | undefined; + /** + * Set the escape character, one character only, defaults to double quotes. + */ + escape?: string | null | false | Buffer; + /** + * Start handling records from the requested number of records. + */ + from?: number; + /** + * Start handling records from the requested line number. + */ + from_line?: number; + fromLine?: number; + /** + * Don't interpret delimiters as such in the last field according to the number of fields calculated from the number of columns, the option require the presence of the `column` option when `true`. + */ + ignore_last_delimiters?: boolean | number; + /** + * Generate two properties `info` and `record` where `info` is a snapshot of the info object at the time the record was created and `record` is the parsed array or object. + */ + info?: boolean; + /** + * If true, ignore whitespace immediately following the delimiter (i.e. left-trim all fields), defaults to false. + * Does not remove whitespace in a quoted field. + */ + ltrim?: boolean; + /** + * Maximum numer of characters to be contained in the field and line buffers before an exception is raised, + * used to guard against a wrong delimiter or record_delimiter, + * default to 128000 characters. + */ + max_record_size?: number; + maxRecordSize?: number; + /** + * Name of header-record title to name objects by. + */ + objname?: string; + /** + * Alter and filter records by executing a user defined function. + */ + on_record?: (record: any, context: CastingContext) => any; + onRecord?: (record: any, context: CastingContext) => any; + /** + * Optional character surrounding a field, one character only, defaults to double quotes. + */ + quote?: string | boolean | Buffer | null; + /** + * Generate two properties raw and row where raw is the original CSV row content and row is the parsed array or object. + */ + raw?: boolean; + /** + * Discard inconsistent columns count, default to false. + */ + relax_column_count?: boolean; + relaxColumnCount?: boolean; + /** + * Discard inconsistent columns count when the record contains less fields than expected, default to false. + */ + relax_column_count_less?: boolean; + relaxColumnCountLess?: boolean; + /** + * Discard inconsistent columns count when the record contains more fields than expected, default to false. + */ + relax_column_count_more?: boolean; + relaxColumnCountMore?: boolean; + /** + * Preserve quotes inside unquoted field. + */ + relax_quotes?: boolean; + relaxQuotes?: boolean; + /** + * One or multiple characters used to delimit record rows; defaults to auto discovery if not provided. + * Supported auto discovery method are Linux ("\n"), Apple ("\r") and Windows ("\r\n") row delimiters. + */ + record_delimiter?: string | string[] | Buffer | Buffer[]; + recordDelimiter?: string | string[] | Buffer | Buffer[]; + /** + * If true, ignore whitespace immediately preceding the delimiter (i.e. right-trim all fields), defaults to false. + * Does not remove whitespace in a quoted field. + */ + rtrim?: boolean; + /** + * Dont generate empty values for empty lines. + * Defaults to false + */ + skip_empty_lines?: boolean; + skipEmptyLines?: boolean; + /** + * Skip a line with error found inside and directly go process the next line. + */ + skip_records_with_error?: boolean; + skipRecordsWithError?: boolean; + /** + * Don't generate records for lines containing empty column values (column matching /\s*\/), defaults to false. + */ + skip_records_with_empty_values?: boolean; + skipRecordsWithEmptyValues?: boolean; + /** + * Stop handling records after the requested number of records. + */ + to?: number; + /** + * Stop handling records after the requested line number. + */ + to_line?: number; + toLine?: number; + /** + * If true, ignore whitespace immediately around the delimiter, defaults to false. + * Does not remove whitespace in a quoted field. + */ + trim?: boolean; } export interface Info { - /** - * Count the number of lines being fully commented. - */ - readonly comment_lines: number; - /** - * Count the number of processed empty lines. - */ - readonly empty_lines: number; - /** - * The number of lines encountered in the source dataset, start at 1 for the first line. - */ - readonly lines: number; - /** - * Count the number of processed records. - */ - readonly records: number; - /** - * Count of the number of processed bytes. - */ - readonly bytes: number; - /** - * Number of non uniform records when `relax_column_count` is true. - */ - readonly invalid_field_length: number; - /** - * Normalized verion of `options.columns` when `options.columns` is true, boolean otherwise. - */ - readonly columns: boolean | { name: string }[] | { disabled: true }[]; + /** + * Count the number of lines being fully commented. + */ + readonly comment_lines: number; + /** + * Count the number of processed empty lines. + */ + readonly empty_lines: number; + /** + * The number of lines encountered in the source dataset, start at 1 for the first line. + */ + readonly lines: number; + /** + * Count the number of processed records. + */ + readonly records: number; + /** + * Count of the number of processed bytes. + */ + readonly bytes: number; + /** + * Number of non uniform records when `relax_column_count` is true. + */ + readonly invalid_field_length: number; + /** + * Normalized verion of `options.columns` when `options.columns` is true, boolean otherwise. + */ + readonly columns: boolean | { name: string }[] | { disabled: true }[]; } -export type CsvErrorCode = - 'CSV_INVALID_OPTION_BOM' - | 'CSV_INVALID_OPTION_CAST' - | 'CSV_INVALID_OPTION_CAST_DATE' - | 'CSV_INVALID_OPTION_COLUMNS' - | 'CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME' - | 'CSV_INVALID_OPTION_COMMENT' - | 'CSV_INVALID_OPTION_DELIMITER' - | 'CSV_INVALID_OPTION_ON_RECORD' - | 'CSV_INVALID_CLOSING_QUOTE' - | 'INVALID_OPENING_QUOTE' - | 'CSV_INVALID_COLUMN_MAPPING' - | 'CSV_INVALID_ARGUMENT' - | 'CSV_INVALID_COLUMN_DEFINITION' - | 'CSV_MAX_RECORD_SIZE' - | 'CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE' - | 'CSV_QUOTE_NOT_CLOSED' - | 'CSV_RECORD_INCONSISTENT_FIELDS_LENGTH' - | 'CSV_RECORD_INCONSISTENT_COLUMNS' - | 'CSV_OPTION_COLUMNS_MISSING_NAME' +export type CsvErrorCode = + | "CSV_INVALID_OPTION_BOM" + | "CSV_INVALID_OPTION_CAST" + | "CSV_INVALID_OPTION_CAST_DATE" + | "CSV_INVALID_OPTION_COLUMNS" + | "CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME" + | "CSV_INVALID_OPTION_COMMENT" + | "CSV_INVALID_OPTION_DELIMITER" + | "CSV_INVALID_OPTION_ON_RECORD" + | "CSV_INVALID_CLOSING_QUOTE" + | "INVALID_OPENING_QUOTE" + | "CSV_INVALID_COLUMN_MAPPING" + | "CSV_INVALID_ARGUMENT" + | "CSV_INVALID_COLUMN_DEFINITION" + | "CSV_MAX_RECORD_SIZE" + | "CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE" + | "CSV_QUOTE_NOT_CLOSED" + | "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH" + | "CSV_RECORD_INCONSISTENT_COLUMNS" + | "CSV_OPTION_COLUMNS_MISSING_NAME"; export class CsvError extends Error { - readonly code: CsvErrorCode; - [key: string]: any; + readonly code: CsvErrorCode; + [key: string]: any; - constructor(code: CsvErrorCode, message: string | string[], options?: Options, ...contexts: any[]); + constructor( + code: CsvErrorCode, + message: string | string[], + options?: Options, + ...contexts: any[] + ); } -declare function parse(input: Buffer | string, options?: Options, callback?: Callback): Parser; +declare function parse( + input: Buffer | string, + options?: Options, + callback?: Callback, +): Parser; declare function parse(input: Buffer | string, callback?: Callback): Parser; declare function parse(options?: Options, callback?: Callback): Parser; declare function parse(callback?: Callback): Parser; // export default parse; -export { parse } +export { parse }; diff --git a/packages/csv-parse/lib/stream.d.ts b/packages/csv-parse/lib/stream.d.ts index f3b4068f..03e86991 100644 --- a/packages/csv-parse/lib/stream.d.ts +++ b/packages/csv-parse/lib/stream.d.ts @@ -1,11 +1,16 @@ - -import { Options } from './index.js'; +import { Options } from "./index.js"; declare function parse(options?: Options): TransformStream; // export default parse; export { parse }; export { - CastingContext, CastingFunction, CastingDateFunction, - ColumnOption, Options, Info, CsvErrorCode, CsvError -} from './index.js'; + CastingContext, + CastingFunction, + CastingDateFunction, + ColumnOption, + Options, + Info, + CsvErrorCode, + CsvError, +} from "./index.js"; diff --git a/packages/csv-parse/lib/sync.d.ts b/packages/csv-parse/lib/sync.d.ts index b507e8b9..97f70da0 100644 --- a/packages/csv-parse/lib/sync.d.ts +++ b/packages/csv-parse/lib/sync.d.ts @@ -1,11 +1,16 @@ - -import { Options } from './index.js'; +import { Options } from "./index.js"; declare function parse(input: Buffer | string, options?: Options): any; // export default parse; export { parse }; export { - CastingContext, CastingFunction, CastingDateFunction, - ColumnOption, Options, Info, CsvErrorCode, CsvError -} from './index.js'; + CastingContext, + CastingFunction, + CastingDateFunction, + ColumnOption, + Options, + Info, + CsvErrorCode, + CsvError, +} from "./index.js"; diff --git a/packages/csv-parse/test/api.types.sync.ts b/packages/csv-parse/test/api.types.sync.ts index afccfd19..11bc912f 100644 --- a/packages/csv-parse/test/api.types.sync.ts +++ b/packages/csv-parse/test/api.types.sync.ts @@ -1,83 +1,90 @@ - -import 'should' +import "should"; import { parse, - CastingContext, CastingFunction, CastingDateFunction, - ColumnOption, Options, Info, CsvErrorCode, CsvError -} from '../lib/sync.js' + CastingContext, + CastingFunction, + CastingDateFunction, + ColumnOption, + Options, + Info, + CsvErrorCode, + CsvError, +} from "../lib/sync.js"; -describe('API Types', () => { - - it('respect parse signature', () => { +describe("API Types", function () { + it("respect parse signature", function () { // No argument - parse("") - parse("", {}) - parse(Buffer.from("")) - parse(Buffer.from(""), {}) - }) - - it('return records', () => { + parse(""); + parse("", {}); + parse(Buffer.from("")); + parse(Buffer.from(""), {}); + }); + + it("return records", function () { try { - const records: object = parse("") - typeof records - }catch (err){ - if (err instanceof CsvError){ - err.message + const records: object = parse(""); + typeof records; + } catch (err) { + if (err instanceof CsvError) { + err.message; } } - }) - - it('Options', () => { + }); + + it("Options", function () { (options: Options) => { const bom: boolean | undefined = options.bom; - return [bom] - } - }) - - it('CastingContext', () => { + return [bom]; + }; + }); + + it("CastingContext", function () { const options: Options = { cast: (value: string, context: CastingContext) => { - return `${value} ${context.index}` - } - } + return `${value} ${context.index}`; + }, + }; return options; - }) - - it('CastingDateFunction', () => { - const castDate: CastingDateFunction = (value: string, context: CastingContext) => { - return new Date(`${value} ${context.index}`) - } + }); + + it("CastingDateFunction", function () { + const castDate: CastingDateFunction = ( + value: string, + context: CastingContext, + ) => { + return new Date(`${value} ${context.index}`); + }; const options: Options = { - cast_date: castDate - } + cast_date: castDate, + }; return options; - }) - - it('CastingFunction', () => { + }); + + it("CastingFunction", function () { const cast: CastingFunction = (value: string, context: CastingContext) => { - return `${value} ${context.index}` + return `${value} ${context.index}`; }; const options: Options = { - cast: cast + cast: cast, }; return options; - }) - - it('ColumnOption', () => { - const column: ColumnOption = {name: 'sth'}; + }); + + it("ColumnOption", function () { + const column: ColumnOption = { name: "sth" }; const options: Options = { - columns: [column] - } + columns: [column], + }; return options; - }) - - it('CsvErrorCode', () => { - const err = new CsvError('CSV_RECORD_INCONSISTENT_FIELDS_LENGTH', 'error'); + }); + + it("CsvErrorCode", function () { + const err = new CsvError("CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", "error"); const code: CsvErrorCode = err.code; return code; - }) - - it('Info', () => { + }); + + it("Info", function () { const info: Info = { bytes: 1, columns: true, @@ -88,6 +95,5 @@ describe('API Types', () => { records: 1, }; return info; - }) - -}) + }); +}); diff --git a/packages/csv-parse/test/api.types.ts b/packages/csv-parse/test/api.types.ts index c57c34f2..3d77c11b 100644 --- a/packages/csv-parse/test/api.types.ts +++ b/packages/csv-parse/test/api.types.ts @@ -1,398 +1,466 @@ +import "should"; +import { + parse, + CastingContext, + Info, + Options, + Parser, + CsvError, +} from "../lib/index.js"; +import { parse as parse_sync } from "../lib/sync.js"; -import 'should' -import { parse, CastingContext, Info, Options, Parser, CsvError } from '../lib/index.js' -import { parse as parse_sync } from '../lib/sync.js' - -describe('API Types', () => { - - describe('stream/callback API', () => { - - it('respect parse signature', () => { +describe("API Types", function () { + describe("stream/callback API", function () { + it("respect parse signature", function () { // No argument - parse() - parse("") - parse("", () => {}) - parse("", {}) - parse("", {}, () => {}) - parse(Buffer.from("")) - parse(Buffer.from(""), () => {}) - parse(Buffer.from(""), {}) - parse(Buffer.from(""), {}, () => {}) - parse(() => {}) - parse({}) - parse({}, () => {}) - }) - - it('Expose options', () => { - const parser: Parser = parse() - const options: Options = parser.options - const keys: string[] = Object.keys(options) - keys.sort().should.eql([ - 'bom', 'cast', 'cast_date', 'cast_first_line_to_header', - 'cast_function', 'columns', 'comment', 'comment_no_infix', 'delimiter', - 'encoding', 'escape', 'from', 'from_line', 'group_columns_by_name', - 'ignore_last_delimiters', 'info', 'ltrim', 'max_record_size', 'objname', - 'on_record', 'on_skip', 'quote', 'raw', 'record_delimiter', - 'relax_column_count', 'relax_column_count_less', - 'relax_column_count_more', 'relax_quotes', 'rtrim', 'skip_empty_lines', - 'skip_records_with_empty_values', 'skip_records_with_error', 'to', - 'to_line', 'trim' - ]) - }) - - it('Expose info', () => { - const parser: Parser = parse() - const info: Info = parser.info - const keys: string[] = Object.keys(info) - keys.sort().should.eql([ - 'bytes', - 'comment_lines', 'empty_lines', - 'invalid_field_length', 'lines', 'records' - ]) - }) - - it('Receive Callback', (next) => { - parse('a\nb', function(err: Error|undefined, records: object, info: Info){ - if(err !== undefined){ - records.should.eql([['a'], ['b']]) - info.records.should.eql(2) - } - next(err) - }) - }) - - }) - - describe('sync api', () => { - - it('respect parse signature', () => { + parse(); + parse(""); + parse("", () => {}); + parse("", {}); + parse("", {}, () => {}); + parse(Buffer.from("")); + parse(Buffer.from(""), () => {}); + parse(Buffer.from(""), {}); + parse(Buffer.from(""), {}, () => {}); + parse(() => {}); + parse({}); + parse({}, () => {}); + }); + + it("Expose options", function () { + const parser: Parser = parse(); + const options: Options = parser.options; + const keys: string[] = Object.keys(options); + keys + .sort() + .should.eql([ + "bom", + "cast", + "cast_date", + "cast_first_line_to_header", + "cast_function", + "columns", + "comment", + "comment_no_infix", + "delimiter", + "encoding", + "escape", + "from", + "from_line", + "group_columns_by_name", + "ignore_last_delimiters", + "info", + "ltrim", + "max_record_size", + "objname", + "on_record", + "on_skip", + "quote", + "raw", + "record_delimiter", + "relax_column_count", + "relax_column_count_less", + "relax_column_count_more", + "relax_quotes", + "rtrim", + "skip_empty_lines", + "skip_records_with_empty_values", + "skip_records_with_error", + "to", + "to_line", + "trim", + ]); + }); + + it("Expose info", function () { + const parser: Parser = parse(); + const info: Info = parser.info; + const keys: string[] = Object.keys(info); + keys + .sort() + .should.eql([ + "bytes", + "comment_lines", + "empty_lines", + "invalid_field_length", + "lines", + "records", + ]); + }); + + it("Receive Callback", function (next) { + parse( + "a\nb", + function (err: Error | undefined, records: object, info: Info) { + if (err !== undefined) { + records.should.eql([["a"], ["b"]]); + info.records.should.eql(2); + } + next(err); + }, + ); + }); + }); + + describe("sync api", function () { + it("respect parse signature", function () { // No argument - parse_sync("") - parse_sync("", {}) - parse_sync(Buffer.from("")) - parse_sync(Buffer.from(""), {}) - }) - - it('return records', () => { + parse_sync(""); + parse_sync("", {}); + parse_sync(Buffer.from("")); + parse_sync(Buffer.from(""), {}); + }); + + it("return records", function () { try { - const records: object = parse_sync("") - typeof records - }catch (err){ - if (err instanceof CsvError){ - err.message + const records: object = parse_sync(""); + typeof records; + } catch (err) { + if (err instanceof CsvError) { + err.message; } } - }) - - }) - - describe('Info', () => { - + }); + }); + + describe("Info", function () { const fakeinfo = { - bytes: 1, columns: true, - comment_lines: 1, empty_lines: 1, - invalid_field_length: 1, lines: 1, records: 1 - } - - it('bytes', () => { - const info: Info = fakeinfo - const bytes: number = info.bytes - bytes - }) - - it('comment_lines', () => { - const info: Info = fakeinfo - const comment_lines: number = info.comment_lines - comment_lines - }) - - it('empty_lines', () => { - const info: Info = fakeinfo - const empty_lines: number = info.empty_lines - empty_lines - }) - - it('lines', () => { - const info: Info = fakeinfo - const lines: number = info.lines - lines - }) - - it('records', () => { - const info: Info = fakeinfo - const records: number = info.records - records - }) - - it('invalid_field_length', () => { - const info: Info = fakeinfo - const invalid_field_length: number = info.invalid_field_length - invalid_field_length - }) - - it('columns may be a boolean or an array', () => { + bytes: 1, + columns: true, + comment_lines: 1, + empty_lines: 1, + invalid_field_length: 1, + lines: 1, + records: 1, + }; + + it("bytes", function () { + const info: Info = fakeinfo; + const bytes: number = info.bytes; + bytes; + }); + + it("comment_lines", function () { + const info: Info = fakeinfo; + const comment_lines: number = info.comment_lines; + comment_lines; + }); + + it("empty_lines", function () { + const info: Info = fakeinfo; + const empty_lines: number = info.empty_lines; + empty_lines; + }); + + it("lines", function () { + const info: Info = fakeinfo; + const lines: number = info.lines; + lines; + }); + + it("records", function () { + const info: Info = fakeinfo; + const records: number = info.records; + records; + }); + + it("invalid_field_length", function () { + const info: Info = fakeinfo; + const invalid_field_length: number = info.invalid_field_length; + invalid_field_length; + }); + + it("columns may be a boolean or an array", function () { // Boolean const infoBoolean: Info = { - bytes: 1, columns: true, - comment_lines: 1, empty_lines: 1, - invalid_field_length: 1, lines: 1, records: 1 - } + bytes: 1, + columns: true, + comment_lines: 1, + empty_lines: 1, + invalid_field_length: 1, + lines: 1, + records: 1, + }; + infoBoolean; // Array with name = const infoName: Info = { - bytes: 1, columns: [{name: 'a column'}], - comment_lines: 1, empty_lines: 1, - invalid_field_length: 1, lines: 1, records: 1 - } + bytes: 1, + columns: [{ name: "a column" }], + comment_lines: 1, + empty_lines: 1, + invalid_field_length: 1, + lines: 1, + records: 1, + }; + infoName; // Array with disabled = true const infoDisabled: Info = { - bytes: 1, columns: [{disabled: true}], - comment_lines: 1, empty_lines: 1, - invalid_field_length: 1, lines: 1, records: 1 - } - }) - - }) - - describe('Options', () => { - - it('cast', () => { - const options: Options = {} - options.cast = true - options.cast = () => {} - }) - - it('cast_date', () => { - const options: Options = {} - options.cast_date = true - options.castDate = true + bytes: 1, + columns: [{ disabled: true }], + comment_lines: 1, + empty_lines: 1, + invalid_field_length: 1, + lines: 1, + records: 1, + }; + infoDisabled; + }); + }); + + describe("Options", function () { + it("cast", function () { + const options: Options = {}; + options.cast = true; + options.cast = () => {}; + }); + + it("cast_date", function () { + const options: Options = {}; + options.cast_date = true; + options.castDate = true; options.cast_date = (value: string, context: CastingContext) => { - return new Date(`${value} ${context.index}`) - } - }) - - it('columns', () => { - const options: Options = {} - options.columns = true - options.columns = [] - options.columns = ['string', undefined, null, false, {name: 'column-name'}] + return new Date(`${value} ${context.index}`); + }; + }); + + it("columns", function () { + const options: Options = {}; + options.columns = true; + options.columns = []; + options.columns = [ + "string", + undefined, + null, + false, + { name: "column-name" }, + ]; options.columns = (record: string[]) => { - const fields: string[] = record.map( (field: string) => { - return field.toUpperCase() - }) - return fields - } + const fields: string[] = record.map((field: string) => { + return field.toUpperCase(); + }); + return fields; + }; options.columns = (record: string[]) => { - record - return ['string', undefined, null, false, {name: 'column-name'}] - } - }) - - it('group_columns_by_name', () => { - const options: Options = {} - options.group_columns_by_name = true - options.groupColumnsByName = true - }) - - it('comment', () => { - const options: Options = {} - options.comment = '\\' - }) - - it('delimiter', () => { - const options: Options = {} - options.delimiter = ':' - options.delimiter = [':', ')'] - options.delimiter = Buffer.from(':') - }) - - it('escape', () => { - const options: Options = {} - options.escape = ':' - options.escape = Buffer.from('"') - }) - - it('from', () => { - const options: Options = {} - options.from = 10 - }) - - it('from_line', () => { - const options: Options = {} - options.from_line = 10 - options.fromLine = 10 - }) - - it('ignore_last_delimiters', () => { - const options: Options = {} - options.ignore_last_delimiters = true - options.ignore_last_delimiters = 1 - }) - - it('info', () => { - const options: Options = {} - options.info = true - }) - - it('ltrim', () => { - const options: Options = {} - options.ltrim = true - }) - - it('max_record_size', () => { - const options: Options = {} - options.max_record_size = 100 - options.maxRecordSize = 100 - }) - - it('objname', () => { - const options: Options = {} - options.objname = 'name' - }) - - it('on_record', () => { - const options: Options = {} - options.on_record = (record, {lines}) => - [lines, record[0]] - options.onRecord = (record, {lines}) => - [lines, record[0]] - }) - - it('quote', () => { - const options: Options = {} - options.quote = '"' - options.quote = true - options.quote = Buffer.from('"') - options.quote = null - }) - - it('raw', () => { - const options: Options = {} - options.raw = true - }) - - it('relax_column_count', () => { - const options: Options = {} - options.relax_column_count = true - options.relaxColumnCount = true - options.relax_column_count_less = true - options.relaxColumnCountLess = true - options.relax_column_count_more = true - options.relaxColumnCountMore = true - }) - - it('relax_quotes', () => { - const options: Options = {} - options.relax_quotes = true - options.relaxQuotes = true - }) - - it('record_delimiter', () => { - const options: Options = {} - options.record_delimiter = '\n' - options.record_delimiter = ['\n'] - options.record_delimiter = Buffer.from('\n') - options.record_delimiter = [Buffer.from('\n')] - options.recordDelimiter = '\n' - }) - - it('rtrim', () => { - const options: Options = {} - options.rtrim = true - }) - - it('skip_empty_lines', () => { - const options: Options = {} - options.skip_empty_lines = true - options.skipEmptyLines = true - }) - - it('skip_empty_lines', () => { - const options: Options = {} - options.skip_empty_lines = true - options.skipEmptyLines = true - }) - - it('skip_records_with_empty_values', () => { - const options: Options = {} - options.skip_records_with_empty_values = true - options.skipRecordsWithEmptyValues = true - }) - - it('skip_records_with_error', () => { - const options: Options = {} - options.skip_records_with_error = true - options.skipRecordsWithError = true - }) - - it('to', () => { - const options: Options = {} - options.to = 10 - }) - - it('to_line', () => { - const options: Options = {} - options.to_line = 10 - options.toLine = 10 - }) - - it('trim', () => { - const options: Options = {} - options.trim = true - }) - - }) - - describe('CastingContext', () => { - - it('all properties', () => { + record; + return ["string", undefined, null, false, { name: "column-name" }]; + }; + }); + + it("group_columns_by_name", function () { + const options: Options = {}; + options.group_columns_by_name = true; + options.groupColumnsByName = true; + }); + + it("comment", function () { + const options: Options = {}; + options.comment = "\\"; + }); + + it("delimiter", function () { + const options: Options = {}; + options.delimiter = ":"; + options.delimiter = [":", ")"]; + options.delimiter = Buffer.from(":"); + }); + + it("escape", function () { + const options: Options = {}; + options.escape = ":"; + options.escape = Buffer.from('"'); + }); + + it("from", function () { + const options: Options = {}; + options.from = 10; + }); + + it("from_line", function () { + const options: Options = {}; + options.from_line = 10; + options.fromLine = 10; + }); + + it("ignore_last_delimiters", function () { + const options: Options = {}; + options.ignore_last_delimiters = true; + options.ignore_last_delimiters = 1; + }); + + it("info", function () { + const options: Options = {}; + options.info = true; + }); + + it("ltrim", function () { + const options: Options = {}; + options.ltrim = true; + }); + + it("max_record_size", function () { + const options: Options = {}; + options.max_record_size = 100; + options.maxRecordSize = 100; + }); + + it("objname", function () { + const options: Options = {}; + options.objname = "name"; + }); + + it("on_record", function () { + const options: Options = {}; + options.on_record = (record, { lines }) => [lines, record[0]]; + options.onRecord = (record, { lines }) => [lines, record[0]]; + }); + + it("quote", function () { + const options: Options = {}; + options.quote = '"'; + options.quote = true; + options.quote = Buffer.from('"'); + options.quote = null; + }); + + it("raw", function () { + const options: Options = {}; + options.raw = true; + }); + + it("relax_column_count", function () { + const options: Options = {}; + options.relax_column_count = true; + options.relaxColumnCount = true; + options.relax_column_count_less = true; + options.relaxColumnCountLess = true; + options.relax_column_count_more = true; + options.relaxColumnCountMore = true; + }); + + it("relax_quotes", function () { + const options: Options = {}; + options.relax_quotes = true; + options.relaxQuotes = true; + }); + + it("record_delimiter", function () { + const options: Options = {}; + options.record_delimiter = "\n"; + options.record_delimiter = ["\n"]; + options.record_delimiter = Buffer.from("\n"); + options.record_delimiter = [Buffer.from("\n")]; + options.recordDelimiter = "\n"; + }); + + it("rtrim", function () { + const options: Options = {}; + options.rtrim = true; + }); + + it("skip_empty_lines", function () { + const options: Options = {}; + options.skip_empty_lines = true; + options.skipEmptyLines = true; + }); + + it("skip_records_with_empty_values", function () { + const options: Options = {}; + options.skip_records_with_empty_values = true; + options.skipRecordsWithEmptyValues = true; + }); + + it("skip_records_with_error", function () { + const options: Options = {}; + options.skip_records_with_error = true; + options.skipRecordsWithError = true; + }); + + it("to", function () { + const options: Options = {}; + options.to = 10; + }); + + it("to_line", function () { + const options: Options = {}; + options.to_line = 10; + options.toLine = 10; + }); + + it("trim", function () { + const options: Options = {}; + options.trim = true; + }); + }); + + describe("CastingContext", function () { + it("all properties", function () { (context: CastingContext) => { - const column: number|string = context.column - const empty_lines: number = context.empty_lines - const header: boolean = context.header - const index: number = context.index - const quoting: boolean = context.quoting - const lines: number = context.lines - const records: number = context.records - const invalid_field_length: number = context.invalid_field_length + const column: number | string = context.column; + const empty_lines: number = context.empty_lines; + const header: boolean = context.header; + const index: number = context.index; + const quoting: boolean = context.quoting; + const lines: number = context.lines; + const records: number = context.records; + const invalid_field_length: number = context.invalid_field_length; return [ - column, empty_lines, header, index, - quoting, lines, records, invalid_field_length - ] - } - }) - }) - - describe('CsvError', () => { - describe('Typescript definition is accurate', () => { - it('Minimum', () => { - const error = new CsvError("CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", "MESSAGE"); - - error.code.should.eql("CSV_RECORD_INCONSISTENT_FIELDS_LENGTH") - error.message.should.eql("MESSAGE") - }) - - it('Multiple messages', () => { - const error = new CsvError("CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", ["MESSAGE1", "MESSAGE2"]) - - error.code.should.eql("CSV_RECORD_INCONSISTENT_FIELDS_LENGTH") - error.message.should.eql("MESSAGE1 MESSAGE2") - }) - - it('Supports contexts', () => { - const error = new CsvError("CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", "MESSAGE", {}, { testContext: { testProp: "testValue" } }) - - error.code.should.eql("CSV_RECORD_INCONSISTENT_FIELDS_LENGTH") - error.message.should.eql("MESSAGE") - error.should.have.key("testContext").and.eql({ testProp: "testValue" }) - }) - }) - - it('Proper type is thrown when an error is encountered', () => { - parse(`a,b\nc`, function (e: Error|undefined) { + column, + empty_lines, + header, + index, + quoting, + lines, + records, + invalid_field_length, + ]; + }; + }); + }); + + describe("CsvError", function () { + describe("Typescript definition is accurate", function () { + it("Minimum", function () { + const error = new CsvError( + "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", + "MESSAGE", + ); + + error.code.should.eql("CSV_RECORD_INCONSISTENT_FIELDS_LENGTH"); + error.message.should.eql("MESSAGE"); + }); + + it("Multiple messages", function () { + const error = new CsvError("CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", [ + "MESSAGE1", + "MESSAGE2", + ]); + + error.code.should.eql("CSV_RECORD_INCONSISTENT_FIELDS_LENGTH"); + error.message.should.eql("MESSAGE1 MESSAGE2"); + }); + + it("Supports contexts", function () { + const error = new CsvError( + "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", + "MESSAGE", + {}, + { testContext: { testProp: "testValue" } }, + ); + + error.code.should.eql("CSV_RECORD_INCONSISTENT_FIELDS_LENGTH"); + error.message.should.eql("MESSAGE"); + error.should.have.key("testContext").and.eql({ testProp: "testValue" }); + }); + }); + + it("Proper type is thrown when an error is encountered", function () { + parse(`a,b\nc`, function (e: Error | undefined) { const isCsvError = e instanceof CsvError; isCsvError.should.be.true(); - (e as CsvError).code.should.eql('CSV_RECORD_INCONSISTENT_FIELDS_LENGTH'); - }) - }) - }) -}) + (e as CsvError).code.should.eql( + "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", + ); + }); + }); + }); +}); diff --git a/packages/csv-parse/test/api.web_stream.ts b/packages/csv-parse/test/api.web_stream.ts index c328d1ef..38a724a8 100644 --- a/packages/csv-parse/test/api.web_stream.ts +++ b/packages/csv-parse/test/api.web_stream.ts @@ -2,9 +2,9 @@ import "should"; import { parse as parseStream } from "../lib/stream.js"; import { CsvError } from "../lib/index.js"; -describe("API Web Stream", () => { - describe("stream/web/TransformStream", () => { - it("simple parse", async () => { +describe("API Web Stream", function () { + describe("stream/web/TransformStream", function () { + it("simple parse", async function () { const stream = parseStream(); const writer = stream.writable.getWriter(); const reader = stream.readable.getReader(); diff --git a/packages/csv-parse/tsconfig.json b/packages/csv-parse/tsconfig.json index 4db508a7..5da38148 100644 --- a/packages/csv-parse/tsconfig.json +++ b/packages/csv-parse/tsconfig.json @@ -4,6 +4,6 @@ "esModuleInterop": true, "module": "ES2020", "moduleResolution": "node", - "strict": true, + "strict": true } } diff --git a/packages/csv-stringify/lib/index.d.ts b/packages/csv-stringify/lib/index.d.ts index d4328305..82dab660 100644 --- a/packages/csv-stringify/lib/index.d.ts +++ b/packages/csv-stringify/lib/index.d.ts @@ -2,124 +2,135 @@ import * as stream from "stream"; -export type Callback = (err: Error | undefined, output: string) => void -export type RecordDelimiter = string | Buffer | 'unix' | 'mac' | 'windows' | 'ascii' | 'unicode' +export type Callback = (err: Error | undefined, output: string) => void; +export type RecordDelimiter = + | string + | Buffer + | "unix" + | "mac" + | "windows" + | "ascii" + | "unicode"; export type CastReturnObject = { value: string } & Pick< - Options, - | 'delimiter' - | 'escape' - | 'quote' - | 'quoted' - | 'quoted_empty' - | 'quoted_string' - | 'quoted_match' - | 'record_delimiter' -> + Options, + | "delimiter" + | "escape" + | "quote" + | "quoted" + | "quoted_empty" + | "quoted_string" + | "quoted_match" + | "record_delimiter" +>; export type Cast = ( - value: T, - context: CastingContext + value: T, + context: CastingContext, ) => string | CastReturnObject; -export type PlainObject = Record -export type Input = any[] +export type PlainObject = Record; +export type Input = any[]; export interface ColumnOption { - key: string - header?: string + key: string; + header?: string; } export interface CastingContext { - readonly column?: number | string; - readonly header: boolean; - readonly index: number; - readonly records: number; + readonly column?: number | string; + readonly header: boolean; + readonly index: number; + readonly records: number; } export interface Options extends stream.TransformOptions { + /** + * Prepend the byte order mark (BOM) to the output stream. + */ + bom?: boolean; + /** + * Key-value object which defines custom cast for certain data types + */ + cast?: { + boolean?: Cast; + date?: Cast; + number?: Cast; + bigint?: Cast; /** - * Prepend the byte order mark (BOM) to the output stream. + * Custom formatter for generic object values */ - bom?: boolean - /** - * Key-value object which defines custom cast for certain data types - */ - cast?: { - boolean?: Cast - date?: Cast - number?: Cast - bigint?: Cast - /** - * Custom formatter for generic object values - */ - object?: Cast> - string?: Cast - } - /** - * List of fields, applied when `transform` returns an object - * order matters - * read the transformer documentation for additionnal information - * columns are auto discovered in the first record when the user write objects - * can refer to nested properties of the input JSON - * see the "header" option on how to print columns names on the first line - */ - columns?: ReadonlyArray | PlainObject - /** - * Set the field delimiter, one character only, defaults to a comma. - */ - delimiter?: string | Buffer - /** - * Add the value of "options.RecordDelimiter" on the last line, default to true. - */ - eof?: boolean - /** - * Defaults to the escape read option. - */ - escape?: string | Buffer - /** - * Display the column names on the first line if the columns option is provided or discovered. - */ - header?: boolean - /** - * The quote characters, defaults to the ", an empty quote value will preserve the original field. - */ - quote?: string | Buffer | boolean - /** - * Boolean, default to false, quote all the non-empty fields even if not required. - */ - quoted?: boolean + object?: Cast>; + string?: Cast; + }; + /** + * List of fields, applied when `transform` returns an object + * order matters + * read the transformer documentation for additionnal information + * columns are auto discovered in the first record when the user write objects + * can refer to nested properties of the input JSON + * see the "header" option on how to print columns names on the first line + */ + columns?: ReadonlyArray | PlainObject; + /** + * Set the field delimiter, one character only, defaults to a comma. + */ + delimiter?: string | Buffer; + /** + * Add the value of "options.RecordDelimiter" on the last line, default to true. + */ + eof?: boolean; + /** + * Defaults to the escape read option. + */ + escape?: string | Buffer; + /** + * Display the column names on the first line if the columns option is provided or discovered. + */ + header?: boolean; + /** + * The quote characters, defaults to the ", an empty quote value will preserve the original field. + */ + quote?: string | Buffer | boolean; + /** + * Boolean, default to false, quote all the non-empty fields even if not required. + */ + quoted?: boolean; - /** - * Boolean, no default, quote empty fields and overrides `quoted_string` on empty strings when defined. - */ - quoted_empty?: boolean - /** - * String or RegExp, no default, quote all fields matching a regular expression. - */ - quoted_match?: string | RegExp | (string | RegExp)[] - /** - * Boolean, default to false, quote all fields of type string even if not required. - */ - quoted_string?: boolean - /** - * String used to delimit record rows or a special value - * special values are 'unix', 'mac', 'windows', 'ascii', 'unicode' - * defaults to '\n'. - */ - record_delimiter?: RecordDelimiter - /** - * Boolean, default to false, if true, fields that begin with `=`, `+`, `-`, `@`, `\t`, or `\r` will be prepended with a `'` to protected agains csv injection attacks - */ - escape_formulas?: boolean + /** + * Boolean, no default, quote empty fields and overrides `quoted_string` on empty strings when defined. + */ + quoted_empty?: boolean; + /** + * String or RegExp, no default, quote all fields matching a regular expression. + */ + quoted_match?: string | RegExp | (string | RegExp)[]; + /** + * Boolean, default to false, quote all fields of type string even if not required. + */ + quoted_string?: boolean; + /** + * String used to delimit record rows or a special value + * special values are 'unix', 'mac', 'windows', 'ascii', 'unicode' + * defaults to '\n'. + */ + record_delimiter?: RecordDelimiter; + /** + * Boolean, default to false, if true, fields that begin with `=`, `+`, `-`, `@`, `\t`, or `\r` will be prepended with a `'` to protected agains csv injection attacks + */ + escape_formulas?: boolean; } export class Stringifier extends stream.Transform { - constructor(options: Options) - readonly options: Options + constructor(options: Options); + readonly options: Options; } -declare function stringify(callback?: Callback): Stringifier -declare function stringify(options: Options, callback?: Callback): Stringifier -declare function stringify(input: Input, callback?: Callback): Stringifier -declare function stringify(input: Input, options?: Options, callback?: Callback): Stringifier +declare function stringify(callback?: Callback): Stringifier; +declare function stringify(options: Options, callback?: Callback): Stringifier; +declare function stringify(input: Input, callback?: Callback): Stringifier; +declare function stringify( + input: Input, + options?: Options, + callback?: Callback, +): Stringifier; // export default stringify -export { stringify } +export { stringify }; diff --git a/packages/csv-stringify/lib/sync.d.ts b/packages/csv-stringify/lib/sync.d.ts index 3814c21d..097e2774 100644 --- a/packages/csv-stringify/lib/sync.d.ts +++ b/packages/csv-stringify/lib/sync.d.ts @@ -1,12 +1,16 @@ +import { Input, Options } from "./index.js"; -import { Input, Options } from './index.js' - -declare function stringify(input: Input, options?: Options): string +declare function stringify(input: Input, options?: Options): string; // export default stringify; export { stringify }; export { - RecordDelimiter, Cast, PlainObject, Input, ColumnOption, CastingContext, - Options -} from './index.js'; + RecordDelimiter, + Cast, + PlainObject, + Input, + ColumnOption, + CastingContext, + Options, +} from "./index.js"; diff --git a/packages/csv-stringify/lib/utils/get.js b/packages/csv-stringify/lib/utils/get.js index f5913225..9b46ed43 100644 --- a/packages/csv-stringify/lib/utils/get.js +++ b/packages/csv-stringify/lib/utils/get.js @@ -23,7 +23,7 @@ const reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/; const reIsPlainProp = /^\w*$/; const getTag = function (value) { - if (!value) value === undefined ? "[object Undefined]" : "[object Null]"; + // if (!value) value === undefined ? "[object Undefined]" : "[object Null]"; return Object.prototype.toString.call(value); }; diff --git a/packages/csv-stringify/samples/browser/index.html b/packages/csv-stringify/samples/browser/index.html deleted file mode 100644 index d80a6c18..00000000 --- a/packages/csv-stringify/samples/browser/index.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - Page Title - - - - -
-

CSV stringify demo

- - - -
- -
- - diff --git a/packages/csv-stringify/samples/browser/index.js b/packages/csv-stringify/samples/browser/index.js deleted file mode 100644 index 72c52eb7..00000000 --- a/packages/csv-stringify/samples/browser/index.js +++ /dev/null @@ -1,10 +0,0 @@ -const express = require("express"); -const app = express(); -const port = 3000; - -app.use(express.static(__dirname)); -app.use("/lib", express.static(`${__dirname}/../../lib/browser`)); - -app.listen(port, () => { - console.log(`Example app listening at http://localhost:${port}`); -}); diff --git a/packages/csv-stringify/test/api.types.sync.ts b/packages/csv-stringify/test/api.types.sync.ts index 18bb9b15..73ecbf2d 100644 --- a/packages/csv-stringify/test/api.types.sync.ts +++ b/packages/csv-stringify/test/api.types.sync.ts @@ -10,14 +10,14 @@ import { Options, } from "../lib/sync.js"; -describe("API Types", () => { - it("stringify return string", () => { +describe("API Types", function () { + it("stringify return string", function () { const input: Input = [[1, 2, 3]]; const stringifier: string = stringify(input); stringifier; }); - it("Options", () => { + it("Options", function () { (options: Options) => { const rd: RecordDelimiter | undefined = options.record_delimiter; const cast = options.cast; @@ -30,7 +30,7 @@ describe("API Types", () => { }; }); - it("CastingContext", () => { + it("CastingContext", function () { const options: Options = { cast: { boolean: (value: boolean, context: CastingContext) => { @@ -41,7 +41,7 @@ describe("API Types", () => { return options; }); - it("allows cast to return an object", () => { + it("allows cast to return an object", function () { const options: Options = { cast: { boolean: (value: boolean) => ({ @@ -51,5 +51,6 @@ describe("API Types", () => { }), }, }; + options; }); }); diff --git a/packages/csv-stringify/test/api.types.ts b/packages/csv-stringify/test/api.types.ts index 851b8d0a..3e18e1d5 100644 --- a/packages/csv-stringify/test/api.types.ts +++ b/packages/csv-stringify/test/api.types.ts @@ -5,14 +5,13 @@ import { Options, Stringifier, } from "../lib/index.js"; -import { stringify as stringifySync } from "../lib/index.js"; -describe("API Types", () => { - describe("Parser", () => { - it("Expose options", () => { +describe("API Types", function () { + describe("Parser", function () { + it("Expose options", function () { const stringifier: Stringifier = stringify(); const options: Options = stringifier.options; - const keys: any = Object.keys(options); + const keys = Object.keys(options); keys .sort() .should.eql([ @@ -34,7 +33,7 @@ describe("API Types", () => { ]); }); - it("Receive Callback", (next) => { + it("Receive Callback", function (next) { stringify( [["a"], ["b"]], function (err: Error | undefined, output: string) { @@ -47,13 +46,13 @@ describe("API Types", () => { }); }); - describe("Options", () => { - it("bom", () => { + describe("Options", function () { + it("bom", function () { const options: Options = {}; options.bom = true; }); - it("cast", () => { + it("cast", function () { const options: Options = {}; options.cast = { boolean: (value: boolean) => { @@ -77,7 +76,7 @@ describe("API Types", () => { }; }); - it("columns", () => { + it("columns", function () { const options: Options = {}; options.columns = ["b", "a"]; options.columns = [{ key: "b" }, { key: "a" }]; @@ -93,35 +92,35 @@ describe("API Types", () => { }; }); - it("columns as const", () => { + it("columns as const", function () { const options: Options = {}; options.columns = ["b", "a"]; options.columns = ["b", "a"] as const; }); - it("delimiter", () => { + it("delimiter", function () { const options: Options = {}; options.delimiter = ":"; options.delimiter = Buffer.from(":"); }); - it("escape", () => { + it("escape", function () { const options: Options = {}; options.escape = '"'; options.escape = Buffer.from('"'); }); - it("escape_formulas", () => { + it("escape_formulas", function () { const options: Options = {}; options.escape_formulas = true; }); - it("header", () => { + it("header", function () { const options: Options = {}; options.header = true; }); - it("quote", () => { + it("quote", function () { const options: Options = {}; options.quote = '"'; options.quote = Buffer.from('"'); @@ -129,40 +128,40 @@ describe("API Types", () => { options.quote = false; }); - it("quoted", () => { + it("quoted", function () { const options: Options = {}; options.quoted = true; options.quoted = false; }); - it("quoted_empty", () => { + it("quoted_empty", function () { const options: Options = {}; options.quoted_empty = true; options.quoted_empty = false; }); - it("quoted_match", () => { + it("quoted_match", function () { const options: Options = {}; options.quoted_match = '"'; - options.quoted_match = /\"/; - options.quoted_match = ['"', /\"/]; + options.quoted_match = /"/; + options.quoted_match = ['"', /"/]; }); - it("quoted_string", () => { + it("quoted_string", function () { const options: Options = {}; options.quoted_string = true; options.quoted_string = false; }); - it("record_delimiter", () => { + it("record_delimiter", function () { const options: Options = {}; options.record_delimiter = "|"; options.record_delimiter = Buffer.from("|"); }); }); - describe("CastingContext", () => { - it("all properties", () => { + describe("CastingContext", function () { + it("all properties", function () { (context: CastingContext) => { const column: number | string | undefined = context.column; const header: boolean = context.header; diff --git a/packages/csv-stringify/tsconfig.json b/packages/csv-stringify/tsconfig.json index 4db508a7..5da38148 100644 --- a/packages/csv-stringify/tsconfig.json +++ b/packages/csv-stringify/tsconfig.json @@ -4,6 +4,6 @@ "esModuleInterop": true, "module": "ES2020", "moduleResolution": "node", - "strict": true, + "strict": true } } diff --git a/packages/csv/lib/index.d.ts b/packages/csv/lib/index.d.ts index c9770f8d..9dc9a1ee 100644 --- a/packages/csv/lib/index.d.ts +++ b/packages/csv/lib/index.d.ts @@ -1,14 +1,13 @@ - // Alias to the modules exposing the stream and callback APIs -import { generate } from 'csv-generate'; -import { parse } from 'csv-parse'; -import { transform } from 'stream-transform'; -import { stringify } from 'csv-stringify'; +import { generate } from "csv-generate"; +import { parse } from "csv-parse"; +import { transform } from "stream-transform"; +import { stringify } from "csv-stringify"; export { generate, parse, transform, stringify }; -export * as generator from 'csv-generate'; -export * as parser from 'csv-parse'; -export * as transformer from 'stream-transform'; -export * as stringifier from 'csv-stringify'; +export * as generator from "csv-generate"; +export * as parser from "csv-parse"; +export * as transformer from "stream-transform"; +export * as stringifier from "csv-stringify"; diff --git a/packages/csv/lib/sync.d.ts b/packages/csv/lib/sync.d.ts index b1812592..8bdf6763 100644 --- a/packages/csv/lib/sync.d.ts +++ b/packages/csv/lib/sync.d.ts @@ -1,14 +1,13 @@ - // Alias to the modules exposing the sync APIs -import { generate } from 'csv-generate/sync' -import { parse } from 'csv-parse/sync'; -import { transform } from 'stream-transform/sync'; -import { stringify } from 'csv-stringify/sync'; +import { generate } from "csv-generate/sync"; +import { parse } from "csv-parse/sync"; +import { transform } from "stream-transform/sync"; +import { stringify } from "csv-stringify/sync"; -export { generate, parse, transform, stringify } +export { generate, parse, transform, stringify }; -export * as generator from 'csv-generate/sync'; -export * as parser from 'csv-parse/sync'; -export * as transformer from 'stream-transform/sync'; -export * as stringifier from 'csv-stringify/sync'; +export * as generator from "csv-generate/sync"; +export * as parser from "csv-parse/sync"; +export * as transformer from "stream-transform/sync"; +export * as stringifier from "csv-stringify/sync"; diff --git a/packages/csv/test/api.types.sync.ts b/packages/csv/test/api.types.sync.ts index 944d1ee0..225bcf1c 100644 --- a/packages/csv/test/api.types.sync.ts +++ b/packages/csv/test/api.types.sync.ts @@ -1,47 +1,47 @@ import "should"; import csv, { generate, parse, stringify, transform } from "../lib/sync.js"; -describe("API Types", () => { - describe("usage", () => { - it("generate", () => { +describe("API Types", function () { + describe("usage with named export", function () { + it("generate", function () { // with options + handler const output: string = generate(1); return output; }); - it("parse", () => { + it("parse", function () { const output: string = parse(""); return output; }); - it("stringify", () => { + it("stringify", function () { const output: string = stringify([]); return output; }); - it("transform", () => { - const output: any = transform([], () => {}); + it("transform", function () { + const output: void[] = transform([], () => {}); return output; }); }); - describe("usage", () => { - it("csv.generate", () => { + describe("usage with default export", function () { + it("csv.generate", function () { const options: csv.generator.Options = {}; return options; }); - it("csv.parse", () => { + it("csv.parse", function () { const options: csv.parser.Options = {}; return options; }); - it("csv.stringifier", () => { + it("csv.stringifier", function () { const options: csv.stringifier.Options = {}; return options; }); - it("csv.transform", () => { + it("csv.transform", function () { const options: csv.transformer.Options = {}; return options; }); diff --git a/packages/csv/test/api.types.ts b/packages/csv/test/api.types.ts index e653b620..4bd4f742 100644 --- a/packages/csv/test/api.types.ts +++ b/packages/csv/test/api.types.ts @@ -1,9 +1,9 @@ import "should"; import { generate, parse, parser, stringify, transform } from "../lib/index.js"; -describe("API Types", () => { - describe("Initialisation", () => { - it("generate", () => { +describe("API Types", function () { + describe("Initialisation", function () { + it("generate", function () { // with options + handler generate( { length: 1 }, @@ -12,7 +12,7 @@ describe("API Types", () => { ); }); - it("parse", () => { + it("parse", function () { // With input + handler parse( "abc,def", @@ -22,12 +22,12 @@ describe("API Types", () => { ); }); - it("stringify", () => { + it("stringify", function () { // With handler stringify((err: Error | undefined, output: string) => err || output); }); - it("transform", () => { + it("transform", function () { // With handler const transformer = transform((record) => record); transformer.should.be.an.Object(); // Disable unused variable warning diff --git a/packages/stream-transform/lib/index.d.ts b/packages/stream-transform/lib/index.d.ts index 39662986..fb703dbd 100644 --- a/packages/stream-transform/lib/index.d.ts +++ b/packages/stream-transform/lib/index.d.ts @@ -2,39 +2,59 @@ import * as stream from "stream"; -export type Handler = (record: T, callback: HandlerCallback, params?: any) => U -export type HandlerCallback = (err?: null | Error, record?: T) => void -export type Callback = (err?: null | Error, output?: string) => void +export type Handler = ( + record: T, + callback: HandlerCallback, + params?: any, +) => U; +export type HandlerCallback = (err?: null | Error, record?: T) => void; +export type Callback = (err?: null | Error, output?: string) => void; export interface Options extends stream.TransformOptions { - /** - * In the absence of a consumer, like a `stream.Readable`, trigger the consumption of the stream. - */ - consume?: boolean - /** - * The number of transformation callbacks to run in parallel; only apply with asynchronous handlers; default to "100". - */ - parallel?: number - /** - * Pass user defined parameters to the user handler as last argument. - */ - params?: any + /** + * In the absence of a consumer, like a `stream.Readable`, trigger the consumption of the stream. + */ + consume?: boolean; + /** + * The number of transformation callbacks to run in parallel; only apply with asynchronous handlers; default to "100". + */ + parallel?: number; + /** + * Pass user defined parameters to the user handler as last argument. + */ + params?: any; } export interface State { - finished: number - running: number - started: number + finished: number; + running: number; + started: number; } export class Transformer extends stream.Transform { - constructor(options: Options) - readonly options: Options - readonly state: State + constructor(options: Options); + readonly options: Options; + readonly state: State; } -declare function transform(handler: Handler, callback?: Callback): Transformer -declare function transform(records: Array, handler: Handler, callback?: Callback): Transformer -declare function transform(options: Options, handler: Handler, callback?: Callback): Transformer -declare function transform(records: Array, options: Options, handler: Handler, callback?: Callback): Transformer +declare function transform( + handler: Handler, + callback?: Callback, +): Transformer; +declare function transform( + records: Array, + handler: Handler, + callback?: Callback, +): Transformer; +declare function transform( + options: Options, + handler: Handler, + callback?: Callback, +): Transformer; +declare function transform( + records: Array, + options: Options, + handler: Handler, + callback?: Callback, +): Transformer; export default transform; -export { transform } +export { transform }; diff --git a/packages/stream-transform/lib/sync.d.ts b/packages/stream-transform/lib/sync.d.ts index 538c3e5f..1e7bd798 100644 --- a/packages/stream-transform/lib/sync.d.ts +++ b/packages/stream-transform/lib/sync.d.ts @@ -1,10 +1,17 @@ /// -import { Options } from './index.js'; +import { Options } from "./index.js"; -export type Handler = (record: T) => U +export type Handler = (record: T) => U; // export default transform; -export function transform(records: Array, handler: Handler): Array -export function transform(records: Array, options: Options, handler: Handler): Array +export function transform( + records: Array, + handler: Handler, +): Array; +export function transform( + records: Array, + options: Options, + handler: Handler, +): Array; export { Options }; diff --git a/packages/stream-transform/test/api.types.sync.ts b/packages/stream-transform/test/api.types.sync.ts index 88d2d317..50d24419 100644 --- a/packages/stream-transform/test/api.types.sync.ts +++ b/packages/stream-transform/test/api.types.sync.ts @@ -1,16 +1,16 @@ import "should"; import { transform, Options } from "../lib/sync.js"; -describe("api.types", () => { - it("sync", () => { +describe("api.types", function () { + it("sync", function () { // With records + handler - const transformer: Array = transform(["record"], (record) => record); + const transformer: string[] = transform(["record"], (record) => record); transformer.should.be.an.Array(); // With records + options + handler transform(["record"], { consume: true }, (record) => record); }); - it("Options", () => { + it("Options", function () { (options: Options) => { const consume: boolean | undefined = options.consume; const parallel: number | undefined = options.parallel; diff --git a/packages/stream-transform/test/api.types.ts b/packages/stream-transform/test/api.types.ts index 39aea113..40571f69 100644 --- a/packages/stream-transform/test/api.types.ts +++ b/packages/stream-transform/test/api.types.ts @@ -1,9 +1,9 @@ import "should"; import { transform, Options, Transformer } from "../lib/index.js"; -describe("api.types", () => { - describe("Initialisation", () => { - it("stream", () => { +describe("api.types", function () { + describe("Initialisation", function () { + it("stream", function () { // With handler const transformer: Transformer = transform((record) => record); transformer.should.be.an.Object(); @@ -28,46 +28,46 @@ describe("api.types", () => { }); }); - describe("Parser", () => { - it("Expose options", () => { + describe("Parser", function () { + it("Expose options", function () { const transformer: Transformer = transform((record) => record); const options: Options = transformer.options; - const keys: any = Object.keys(options); + const keys = Object.keys(options); keys.sort().should.eql(["consume", "objectMode", "parallel", "params"]); }); }); - describe("Options", () => { - it("consume", () => { + describe("Options", function () { + it("consume", function () { const options: Options = {}; options.consume = true; }); - it("parallel", () => { + it("parallel", function () { const options: Options = {}; options.parallel = 100; }); - it("params", () => { + it("params", function () { const options: Options = {}; options.params = { my_key: "my value" }; }); }); - describe("State", () => { - it("finished", () => { + describe("State", function () { + it("finished", function () { const transformer: Transformer = transform((record) => record); const finished: number = transformer.state.finished; finished.should.eql(0); }); - it("running", () => { + it("running", function () { const transformer: Transformer = transform((record) => record); const running: number = transformer.state.running; running.should.eql(0); }); - it("started", () => { + it("started", function () { const transformer: Transformer = transform((record) => record); const started: number = transformer.state.started; started.should.eql(0); diff --git a/packages/stream-transform/tsconfig.json b/packages/stream-transform/tsconfig.json index 4db508a7..5da38148 100644 --- a/packages/stream-transform/tsconfig.json +++ b/packages/stream-transform/tsconfig.json @@ -4,6 +4,6 @@ "esModuleInterop": true, "module": "ES2020", "moduleResolution": "node", - "strict": true, + "strict": true } } From 3503c1ebaa5fa994764f82ad4639e5a2ef62d05c Mon Sep 17 00:00:00 2001 From: David Worms Date: Mon, 19 May 2025 11:59:54 +0200 Subject: [PATCH 18/49] chore: update eslint versions --- package-lock.json | 3911 +-------------------------------------------- package.json | 6 +- 2 files changed, 30 insertions(+), 3887 deletions(-) diff --git a/package-lock.json b/package-lock.json index f09d1e79..7ac9759e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,9 +8,9 @@ "devDependencies": { "@commitlint/cli": "^19.8.1", "@commitlint/config-conventional": "^19.8.1", - "@eslint/js": "^9.26.0", + "@eslint/js": "^9.27.0", "cz-conventional-changelog": "^3.3.0", - "eslint": "^9.26.0", + "eslint": "^9.27.0", "eslint-config-prettier": "^10.1.5", "eslint-plugin-mocha": "^11.0.0", "eslint-plugin-prettier": "^5.4.0", @@ -210,8 +210,6 @@ }, "node_modules/@babel/code-frame": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { @@ -225,8 +223,6 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, "license": "MIT", "engines": { @@ -235,8 +231,6 @@ }, "node_modules/@commitlint/cli": { "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.8.1.tgz", - "integrity": "sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==", "dev": true, "license": "MIT", "dependencies": { @@ -257,8 +251,6 @@ }, "node_modules/@commitlint/config-conventional": { "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.8.1.tgz", - "integrity": "sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ==", "dev": true, "license": "MIT", "dependencies": { @@ -271,8 +263,6 @@ }, "node_modules/@commitlint/config-validator": { "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.8.1.tgz", - "integrity": "sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -285,8 +275,6 @@ }, "node_modules/@commitlint/ensure": { "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.8.1.tgz", - "integrity": "sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==", "dev": true, "license": "MIT", "dependencies": { @@ -303,8 +291,6 @@ }, "node_modules/@commitlint/execute-rule": { "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.8.1.tgz", - "integrity": "sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==", "dev": true, "license": "MIT", "engines": { @@ -313,8 +299,6 @@ }, "node_modules/@commitlint/format": { "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.8.1.tgz", - "integrity": "sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==", "dev": true, "license": "MIT", "dependencies": { @@ -327,8 +311,6 @@ }, "node_modules/@commitlint/is-ignored": { "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.8.1.tgz", - "integrity": "sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==", "dev": true, "license": "MIT", "dependencies": { @@ -341,8 +323,6 @@ }, "node_modules/@commitlint/lint": { "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.8.1.tgz", - "integrity": "sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==", "dev": true, "license": "MIT", "dependencies": { @@ -357,8 +337,6 @@ }, "node_modules/@commitlint/load": { "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.8.1.tgz", - "integrity": "sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==", "dev": true, "license": "MIT", "dependencies": { @@ -379,8 +357,6 @@ }, "node_modules/@commitlint/message": { "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.8.1.tgz", - "integrity": "sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==", "dev": true, "license": "MIT", "engines": { @@ -389,8 +365,6 @@ }, "node_modules/@commitlint/parse": { "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.8.1.tgz", - "integrity": "sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==", "dev": true, "license": "MIT", "dependencies": { @@ -404,8 +378,6 @@ }, "node_modules/@commitlint/read": { "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.8.1.tgz", - "integrity": "sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -421,8 +393,6 @@ }, "node_modules/@commitlint/resolve-extends": { "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.8.1.tgz", - "integrity": "sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==", "dev": true, "license": "MIT", "dependencies": { @@ -439,8 +409,6 @@ }, "node_modules/@commitlint/rules": { "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.8.1.tgz", - "integrity": "sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==", "dev": true, "license": "MIT", "dependencies": { @@ -455,8 +423,6 @@ }, "node_modules/@commitlint/to-lines": { "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.8.1.tgz", - "integrity": "sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==", "dev": true, "license": "MIT", "engines": { @@ -465,8 +431,6 @@ }, "node_modules/@commitlint/top-level": { "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.8.1.tgz", - "integrity": "sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==", "dev": true, "license": "MIT", "dependencies": { @@ -478,8 +442,6 @@ }, "node_modules/@commitlint/types": { "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.8.1.tgz", - "integrity": "sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==", "dev": true, "license": "MIT", "dependencies": { @@ -492,8 +454,6 @@ }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "license": "MIT", "dependencies": { @@ -505,8 +465,6 @@ }, "node_modules/@discoveryjs/json-ext": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", - "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", "dev": true, "license": "MIT", "engines": { @@ -515,8 +473,6 @@ }, "node_modules/@emnapi/core": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz", - "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==", "dev": true, "license": "MIT", "dependencies": { @@ -526,8 +482,6 @@ }, "node_modules/@emnapi/runtime": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", - "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -536,290 +490,14 @@ }, "node_modules/@emnapi/wasi-threads": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz", - "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==", "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.4.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", - "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", - "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", - "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", - "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", - "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", - "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", - "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", - "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", - "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", - "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", - "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", - "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", - "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", - "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", - "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", - "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@esbuild/linux-x64": { "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", - "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", "cpu": [ "x64" ], @@ -833,146 +511,8 @@ "node": ">=18" } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", - "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", - "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", - "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", - "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", - "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", - "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", - "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", - "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, "license": "MIT", "dependencies": { @@ -990,8 +530,6 @@ }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1003,8 +541,6 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { @@ -1013,8 +549,6 @@ }, "node_modules/@eslint/config-array": { "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", - "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1028,8 +562,6 @@ }, "node_modules/@eslint/config-helpers": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", - "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1037,9 +569,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", - "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1051,8 +583,6 @@ }, "node_modules/@eslint/eslintrc": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1075,8 +605,6 @@ }, "node_modules/@eslint/eslintrc/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -1092,25 +620,24 @@ }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, "node_modules/@eslint/js": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.26.0.tgz", - "integrity": "sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz", + "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==", "dev": true, "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, "node_modules/@eslint/object-schema": { "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1118,13 +645,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", - "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", + "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.13.0", + "@eslint/core": "^0.14.0", "levn": "^0.4.1" }, "engines": { @@ -1133,14 +660,10 @@ }, "node_modules/@gar/promisify": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "license": "MIT" }, "node_modules/@humanfs/core": { "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1149,8 +672,6 @@ }, "node_modules/@humanfs/node": { "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1163,8 +684,6 @@ }, "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1177,8 +696,6 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1191,8 +708,6 @@ }, "node_modules/@humanwhocodes/retry": { "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1205,8 +720,6 @@ }, "node_modules/@hutson/parse-repository-url": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1215,8 +728,6 @@ }, "node_modules/@isaacs/cliui": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "license": "ISC", "dependencies": { @@ -1233,8 +744,6 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "license": "MIT", "engines": { @@ -1246,8 +755,6 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "license": "MIT", "engines": { @@ -1259,15 +766,11 @@ }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { @@ -1284,8 +787,6 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1300,8 +801,6 @@ }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1318,8 +817,6 @@ }, "node_modules/@isaacs/fs-minipass": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "license": "ISC", "dependencies": { "minipass": "^7.0.4" @@ -1330,15 +827,11 @@ }, "node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", "dev": true, "license": "ISC" }, "node_modules/@jest/schemas": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "license": "MIT", "dependencies": { @@ -1350,8 +843,6 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, "license": "MIT", "dependencies": { @@ -1365,8 +856,6 @@ }, "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1376,8 +865,6 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "license": "MIT", "engines": { @@ -1386,8 +873,6 @@ }, "node_modules/@jridgewell/set-array": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "license": "MIT", "engines": { @@ -1396,8 +881,6 @@ }, "node_modules/@jridgewell/source-map": { "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1407,8 +890,6 @@ }, "node_modules/@jridgewell/source-map/node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1418,15 +899,11 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1436,8 +913,6 @@ }, "node_modules/@lerna/create": { "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.2.2.tgz", - "integrity": "sha512-1yn1MvWn2Yz0SFgTTQnef2m1YedF7KwqLLVIOrGkgQrkVHzsveAIk1A1RcRa2yyUh+siKI1YcJ7lUZIEt+qQ3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1518,8 +993,6 @@ }, "node_modules/@lerna/create/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -1534,8 +1007,6 @@ }, "node_modules/@lerna/create/node_modules/chalk": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "license": "MIT", "dependencies": { @@ -1551,8 +1022,6 @@ }, "node_modules/@lerna/create/node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, "license": "ISC", "engines": { @@ -1561,8 +1030,6 @@ }, "node_modules/@lerna/create/node_modules/dedent": { "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -1576,8 +1043,6 @@ }, "node_modules/@lerna/create/node_modules/fs-extra": { "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", "dev": true, "license": "MIT", "dependencies": { @@ -1591,8 +1056,6 @@ }, "node_modules/@lerna/create/node_modules/fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "license": "ISC", "dependencies": { @@ -1604,8 +1067,6 @@ }, "node_modules/@lerna/create/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "license": "ISC", "dependencies": { @@ -1617,15 +1078,11 @@ }, "node_modules/@lerna/create/node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "license": "ISC" }, "node_modules/@lerna/create/node_modules/minimatch": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "license": "ISC", "dependencies": { @@ -1637,8 +1094,6 @@ }, "node_modules/@lerna/create/node_modules/minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, "license": "ISC", "engines": { @@ -1647,8 +1102,6 @@ }, "node_modules/@lerna/create/node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, "license": "MIT", "bin": { @@ -1660,8 +1113,6 @@ }, "node_modules/@lerna/create/node_modules/node-fetch": { "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1681,15 +1132,11 @@ }, "node_modules/@lerna/create/node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/@lerna/create/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -1701,8 +1148,6 @@ }, "node_modules/@lerna/create/node_modules/tar": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, "license": "ISC", "dependencies": { @@ -1719,8 +1164,6 @@ }, "node_modules/@mapbox/node-pre-gyp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.0.tgz", - "integrity": "sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==", "license": "BSD-3-Clause", "dependencies": { "consola": "^3.2.3", @@ -1738,32 +1181,8 @@ "node": ">=18" } }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.2.tgz", - "integrity": "sha512-H9vwztj5OAqHg9GockCQC06k1natgcxWQSRpQcPJf6i5+MWBzfKkRtxGbjQf0X2ihii0ffLZCRGbYV2f2bjNCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.3", - "eventsource": "^3.0.2", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.24.1" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/@napi-rs/wasm-runtime": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", - "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1774,8 +1193,6 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -1788,8 +1205,6 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -1798,8 +1213,6 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -1812,8 +1225,6 @@ }, "node_modules/@npmcli/agent": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", - "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", "dev": true, "license": "ISC", "dependencies": { @@ -1829,8 +1240,6 @@ }, "node_modules/@npmcli/agent/node_modules/http-proxy-agent": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "license": "MIT", "dependencies": { @@ -1843,8 +1252,6 @@ }, "node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { "version": "8.0.5", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", - "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, "license": "MIT", "dependencies": { @@ -1858,8 +1265,6 @@ }, "node_modules/@npmcli/arborist": { "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-7.5.4.tgz", - "integrity": "sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g==", "dev": true, "license": "ISC", "dependencies": { @@ -1908,8 +1313,6 @@ }, "node_modules/@npmcli/arborist/node_modules/abbrev": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", "dev": true, "license": "ISC", "engines": { @@ -1918,8 +1321,6 @@ }, "node_modules/@npmcli/arborist/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, "license": "MIT", "dependencies": { @@ -1928,8 +1329,6 @@ }, "node_modules/@npmcli/arborist/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -1944,8 +1343,6 @@ }, "node_modules/@npmcli/arborist/node_modules/nopt": { "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", "dev": true, "license": "ISC", "dependencies": { @@ -1960,8 +1357,6 @@ }, "node_modules/@npmcli/fs": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", "dev": true, "license": "ISC", "dependencies": { @@ -1973,8 +1368,6 @@ }, "node_modules/@npmcli/git": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", - "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", "dev": true, "license": "ISC", "dependencies": { @@ -1994,8 +1387,6 @@ }, "node_modules/@npmcli/git/node_modules/ini": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", "dev": true, "license": "ISC", "engines": { @@ -2004,8 +1395,6 @@ }, "node_modules/@npmcli/git/node_modules/isexe": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, "license": "ISC", "engines": { @@ -2014,8 +1403,6 @@ }, "node_modules/@npmcli/git/node_modules/which": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, "license": "ISC", "dependencies": { @@ -2030,8 +1417,6 @@ }, "node_modules/@npmcli/installed-package-contents": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", - "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", "dev": true, "license": "ISC", "dependencies": { @@ -2047,8 +1432,6 @@ }, "node_modules/@npmcli/map-workspaces": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz", - "integrity": "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==", "dev": true, "license": "ISC", "dependencies": { @@ -2063,8 +1446,6 @@ }, "node_modules/@npmcli/map-workspaces/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, "license": "MIT", "dependencies": { @@ -2073,8 +1454,6 @@ }, "node_modules/@npmcli/map-workspaces/node_modules/glob": { "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { @@ -2094,8 +1473,6 @@ }, "node_modules/@npmcli/map-workspaces/node_modules/jackspeak": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -2110,8 +1487,6 @@ }, "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -2126,8 +1501,6 @@ }, "node_modules/@npmcli/map-workspaces/node_modules/path-scurry": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -2143,8 +1516,6 @@ }, "node_modules/@npmcli/metavuln-calculator": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz", - "integrity": "sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g==", "dev": true, "license": "ISC", "dependencies": { @@ -2160,9 +1531,6 @@ }, "node_modules/@npmcli/move-file": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", - "deprecated": "This functionality has been moved to @npmcli/fs", "license": "MIT", "dependencies": { "mkdirp": "^1.0.4", @@ -2174,9 +1542,6 @@ }, "node_modules/@npmcli/move-file/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -2195,8 +1560,6 @@ }, "node_modules/@npmcli/move-file/node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" @@ -2207,9 +1570,6 @@ }, "node_modules/@npmcli/move-file/node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", "license": "ISC", "dependencies": { "glob": "^7.1.3" @@ -2223,8 +1583,6 @@ }, "node_modules/@npmcli/name-from-folder": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", - "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", "dev": true, "license": "ISC", "engines": { @@ -2233,8 +1591,6 @@ }, "node_modules/@npmcli/node-gyp": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true, "license": "ISC", "engines": { @@ -2243,8 +1599,6 @@ }, "node_modules/@npmcli/package-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", - "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", "dev": true, "license": "ISC", "dependencies": { @@ -2262,8 +1616,6 @@ }, "node_modules/@npmcli/package-json/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, "license": "MIT", "dependencies": { @@ -2272,8 +1624,6 @@ }, "node_modules/@npmcli/package-json/node_modules/glob": { "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { @@ -2293,8 +1643,6 @@ }, "node_modules/@npmcli/package-json/node_modules/jackspeak": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -2309,8 +1657,6 @@ }, "node_modules/@npmcli/package-json/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -2325,8 +1671,6 @@ }, "node_modules/@npmcli/package-json/node_modules/path-scurry": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -2342,8 +1686,6 @@ }, "node_modules/@npmcli/promise-spawn": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", - "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", "dev": true, "license": "ISC", "dependencies": { @@ -2355,8 +1697,6 @@ }, "node_modules/@npmcli/promise-spawn/node_modules/isexe": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, "license": "ISC", "engines": { @@ -2365,8 +1705,6 @@ }, "node_modules/@npmcli/promise-spawn/node_modules/which": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, "license": "ISC", "dependencies": { @@ -2381,8 +1719,6 @@ }, "node_modules/@npmcli/query": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-3.1.0.tgz", - "integrity": "sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ==", "dev": true, "license": "ISC", "dependencies": { @@ -2394,8 +1730,6 @@ }, "node_modules/@npmcli/redact": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", - "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", "dev": true, "license": "ISC", "engines": { @@ -2404,8 +1738,6 @@ }, "node_modules/@npmcli/run-script": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz", - "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", "dev": true, "license": "ISC", "dependencies": { @@ -2422,8 +1754,6 @@ }, "node_modules/@npmcli/run-script/node_modules/abbrev": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", "dev": true, "license": "ISC", "engines": { @@ -2432,8 +1762,6 @@ }, "node_modules/@npmcli/run-script/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, "license": "MIT", "dependencies": { @@ -2442,8 +1770,6 @@ }, "node_modules/@npmcli/run-script/node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, "license": "ISC", "engines": { @@ -2452,8 +1778,6 @@ }, "node_modules/@npmcli/run-script/node_modules/fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "license": "ISC", "dependencies": { @@ -2465,8 +1789,6 @@ }, "node_modules/@npmcli/run-script/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "license": "ISC", "dependencies": { @@ -2478,8 +1800,6 @@ }, "node_modules/@npmcli/run-script/node_modules/glob": { "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { @@ -2499,8 +1819,6 @@ }, "node_modules/@npmcli/run-script/node_modules/isexe": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, "license": "ISC", "engines": { @@ -2509,8 +1827,6 @@ }, "node_modules/@npmcli/run-script/node_modules/jackspeak": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -2525,8 +1841,6 @@ }, "node_modules/@npmcli/run-script/node_modules/make-fetch-happen": { "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", "dev": true, "license": "ISC", "dependencies": { @@ -2549,8 +1863,6 @@ }, "node_modules/@npmcli/run-script/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -2565,8 +1877,6 @@ }, "node_modules/@npmcli/run-script/node_modules/minipass-fetch": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", "dev": true, "license": "MIT", "dependencies": { @@ -2583,8 +1893,6 @@ }, "node_modules/@npmcli/run-script/node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, "license": "MIT", "bin": { @@ -2596,8 +1904,6 @@ }, "node_modules/@npmcli/run-script/node_modules/negotiator": { "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "dev": true, "license": "MIT", "engines": { @@ -2606,8 +1912,6 @@ }, "node_modules/@npmcli/run-script/node_modules/node-gyp": { "version": "10.3.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.3.1.tgz", - "integrity": "sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2631,8 +1935,6 @@ }, "node_modules/@npmcli/run-script/node_modules/nopt": { "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", "dev": true, "license": "ISC", "dependencies": { @@ -2647,8 +1949,6 @@ }, "node_modules/@npmcli/run-script/node_modules/path-scurry": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -2664,8 +1964,6 @@ }, "node_modules/@npmcli/run-script/node_modules/tar": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, "license": "ISC", "dependencies": { @@ -2682,8 +1980,6 @@ }, "node_modules/@npmcli/run-script/node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, "license": "ISC", "engines": { @@ -2692,8 +1988,6 @@ }, "node_modules/@npmcli/run-script/node_modules/which": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, "license": "ISC", "dependencies": { @@ -2708,8 +2002,6 @@ }, "node_modules/@nx/devkit": { "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.8.1.tgz", - "integrity": "sha512-N3nwIg/7RIZeB76iuVo29q+l9WyTtvuBSgDFM2msiIK6Q928ilzoeNPZ/p7w/TE3Gqs5XVhq9ExMvDAOTxdmXA==", "dev": true, "license": "MIT", "dependencies": { @@ -2728,8 +2020,6 @@ }, "node_modules/@nx/devkit/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, "license": "MIT", "dependencies": { @@ -2738,8 +2028,6 @@ }, "node_modules/@nx/devkit/node_modules/minimatch": { "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "license": "ISC", "dependencies": { @@ -2754,171 +2042,14 @@ }, "node_modules/@nx/devkit/node_modules/tmp": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@nx/nx-darwin-arm64": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.8.1.tgz", - "integrity": "sha512-Gat4Io66cV70Oa1CjrMJPsEx5ICpAGayv9hejOtBUEDb6XjR12L2e4wV+4EHliF0UbEcuZAr8/lTROEPk0RGWQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-darwin-x64": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.8.1.tgz", - "integrity": "sha512-TB9mZk7neGFKgBr2wSBgY6c4kFF9vvChNSp3TrEeXR3FppFcYG5eK4AaKfzWCpYb0wMtseAm7NMX1Lu74utClQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-freebsd-x64": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.8.1.tgz", - "integrity": "sha512-7UQu0/Afna5Af2GagEQ6rbKfUh75NfUn+g66wsoQoUGBvDW0U7B8P3Ph5Bk4Urub0BSfMVcNg2X7CgfypLFN/g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.8.1.tgz", - "integrity": "sha512-Tjh8JkTP+x1jSrzx+ofx1pKpkhIbXd7bi0bPdpYt6NI1lZz2HB/dv8vtdzP80jXEDztHf0AeGnEJVgJKsgI6yg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.8.1.tgz", - "integrity": "sha512-2+qPIwav2vrytH6pe7fukBe8+yN5JGbEDCnDO8wKQsHeeZMLAQJiZ7EJH/+vynRkI7oWf87mihIKNQME19+w6A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm64-musl": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.8.1.tgz", - "integrity": "sha512-DsKc+DiMsuHqpBWchUUUg6zv4OaexRqpFXys6auZlrpFpn80kSqLQ3S4zZ5AUu+26wxZqEVJs+uxHGwFbhEssQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-x64-gnu": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.8.1.tgz", - "integrity": "sha512-Kzru44beVKAmSG84ShuMIIfyu2Uu5r8gsHdtiQPBIOGkZa0Z/e6YtUxcN3w1UZ7yvvzoQ4pQLvqU6UZRSWZtEg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-x64-musl": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.8.1.tgz", - "integrity": "sha512-cSVVb7DVMhrxCaj/n55okBZS6lZoP5a5vynOBGIV4z3/OJLev+xI9A+3imn/aXnBl8iS69HogYyrW0YTXv4Xaw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.8.1.tgz", - "integrity": "sha512-gte5HcvI24CN6b9I6IYTXh/A0CtRfnlAFaJomPpfT8Wcq637aOZzS0arAEZVoU8QZty1350hj6sfu+wSIjoP7A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dev": true, + "license": "MIT", "engines": { - "node": ">= 10" + "node": ">=14.14" } }, - "node_modules/@nx/nx-win32-x64-msvc": { + "node_modules/@nx/nx-linux-x64-gnu": { "version": "20.8.1", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.8.1.tgz", - "integrity": "sha512-6c2fVEPdPwJdnRbckBatRDF/g6JAp6p3Mfl90DpuaEF2DZC5pmCXKOsXE0aSIZ+gODom2JIchM++2KmDZPJUoA==", "cpu": [ "x64" ], @@ -2926,7 +2057,7 @@ "license": "MIT", "optional": true, "os": [ - "win32" + "linux" ], "engines": { "node": ">= 10" @@ -2934,8 +2065,6 @@ }, "node_modules/@octokit/auth-token": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", "dev": true, "license": "MIT", "engines": { @@ -2944,8 +2073,6 @@ }, "node_modules/@octokit/core": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.1.tgz", - "integrity": "sha512-dKYCMuPO1bmrpuogcjQ8z7ICCH3FP6WmxpwC03yjzGfZhj9fTJg6+bS1+UAplekbN2C+M61UNllGOOoAfGCrdQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2963,8 +2090,6 @@ }, "node_modules/@octokit/endpoint": { "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz", - "integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==", "dev": true, "license": "MIT", "dependencies": { @@ -2977,8 +2102,6 @@ }, "node_modules/@octokit/graphql": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz", - "integrity": "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==", "dev": true, "license": "MIT", "dependencies": { @@ -2992,22 +2115,16 @@ }, "node_modules/@octokit/openapi-types": { "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", "dev": true, "license": "MIT" }, "node_modules/@octokit/plugin-enterprise-rest": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", - "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", "dev": true, "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { "version": "11.4.4-cjs.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.4-cjs.2.tgz", - "integrity": "sha512-2dK6z8fhs8lla5PaOTgqfCGBxgAv/le+EhPs27KklPhm1bKObpu6lXzwfUEQ16ajXzqNrKMujsFyo9K2eaoISw==", "dev": true, "license": "MIT", "dependencies": { @@ -3022,8 +2139,6 @@ }, "node_modules/@octokit/plugin-request-log": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", - "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", "dev": true, "license": "MIT", "engines": { @@ -3035,8 +2150,6 @@ }, "node_modules/@octokit/plugin-rest-endpoint-methods": { "version": "13.3.2-cjs.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.2-cjs.1.tgz", - "integrity": "sha512-VUjIjOOvF2oELQmiFpWA1aOPdawpyaCUqcEBc/UOUnj3Xp6DJGrJ1+bjUIIDzdHjnFNO6q57ODMfdEZnoBkCwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3051,8 +2164,6 @@ }, "node_modules/@octokit/request": { "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz", - "integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==", "dev": true, "license": "MIT", "dependencies": { @@ -3067,8 +2178,6 @@ }, "node_modules/@octokit/request-error": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz", - "integrity": "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==", "dev": true, "license": "MIT", "dependencies": { @@ -3082,8 +2191,6 @@ }, "node_modules/@octokit/rest": { "version": "20.1.2", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.2.tgz", - "integrity": "sha512-GmYiltypkHHtihFwPRxlaorG5R9VAHuk/vbszVoRTGXnAsY60wYLkh/E2XiFmdZmqrisw+9FaazS1i5SbdWYgA==", "dev": true, "license": "MIT", "dependencies": { @@ -3098,8 +2205,6 @@ }, "node_modules/@octokit/types": { "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", "dev": true, "license": "MIT", "dependencies": { @@ -3108,8 +2213,6 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "license": "MIT", "optional": true, @@ -3119,8 +2222,6 @@ }, "node_modules/@pkgr/core": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.4.tgz", - "integrity": "sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==", "dev": true, "license": "MIT", "engines": { @@ -3132,8 +2233,6 @@ }, "node_modules/@rollup/plugin-node-resolve": { "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz", - "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==", "dev": true, "license": "MIT", "dependencies": { @@ -3157,8 +2256,6 @@ }, "node_modules/@rollup/pluginutils": { "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", - "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3178,234 +2275,8 @@ } } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz", - "integrity": "sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.2.tgz", - "integrity": "sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.2.tgz", - "integrity": "sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.2.tgz", - "integrity": "sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.2.tgz", - "integrity": "sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.2.tgz", - "integrity": "sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.2.tgz", - "integrity": "sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.2.tgz", - "integrity": "sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.2.tgz", - "integrity": "sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.2.tgz", - "integrity": "sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.2.tgz", - "integrity": "sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.2.tgz", - "integrity": "sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz", - "integrity": "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz", - "integrity": "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz", - "integrity": "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz", - "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz", - "integrity": "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==", "cpu": [ "x64" ], @@ -3416,59 +2287,13 @@ "linux" ] }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz", - "integrity": "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz", - "integrity": "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz", - "integrity": "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@rtsao/scc": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true, "license": "MIT" }, "node_modules/@sigstore/bundle": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", - "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3480,8 +2305,6 @@ }, "node_modules/@sigstore/core": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", - "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3490,8 +2313,6 @@ }, "node_modules/@sigstore/protobuf-specs": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz", - "integrity": "sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3500,8 +2321,6 @@ }, "node_modules/@sigstore/sign": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", - "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3518,8 +2337,6 @@ }, "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", "dev": true, "license": "ISC", "dependencies": { @@ -3542,8 +2359,6 @@ }, "node_modules/@sigstore/sign/node_modules/minipass-fetch": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", "dev": true, "license": "MIT", "dependencies": { @@ -3560,8 +2375,6 @@ }, "node_modules/@sigstore/sign/node_modules/negotiator": { "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "dev": true, "license": "MIT", "engines": { @@ -3570,8 +2383,6 @@ }, "node_modules/@sigstore/tuf": { "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", - "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3584,8 +2395,6 @@ }, "node_modules/@sigstore/verify": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", - "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3599,15 +2408,11 @@ }, "node_modules/@sinclair/typebox": { "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true, "license": "MIT" }, "node_modules/@tootallnate/once": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "license": "MIT", "engines": { "node": ">= 10" @@ -3615,36 +2420,26 @@ }, "node_modules/@tsconfig/node10": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true, "license": "MIT" }, "node_modules/@tufjs/canonical-json": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", "dev": true, "license": "MIT", "engines": { @@ -3653,8 +2448,6 @@ }, "node_modules/@tufjs/models": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", - "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", "dev": true, "license": "MIT", "dependencies": { @@ -3667,8 +2460,6 @@ }, "node_modules/@tufjs/models/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, "license": "MIT", "dependencies": { @@ -3677,8 +2468,6 @@ }, "node_modules/@tufjs/models/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -3693,8 +2482,6 @@ }, "node_modules/@tybys/wasm-util": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", - "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", "dev": true, "license": "MIT", "dependencies": { @@ -3703,8 +2490,6 @@ }, "node_modules/@types/conventional-commits-parser": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", - "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3713,8 +2498,6 @@ }, "node_modules/@types/eslint": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, "license": "MIT", "dependencies": { @@ -3724,8 +2507,6 @@ }, "node_modules/@types/eslint-scope": { "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, "license": "MIT", "dependencies": { @@ -3735,50 +2516,36 @@ }, "node_modules/@types/estree": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/json5": { "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, "license": "MIT" }, "node_modules/@types/minimatch": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true, "license": "MIT" }, "node_modules/@types/minimist": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true, "license": "MIT" }, "node_modules/@types/mocha": { "version": "10.0.10", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", - "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { "version": "22.15.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.17.tgz", - "integrity": "sha512-wIX2aSZL5FE+MR0JlvF87BNVrtFWf6AE6rxSE9X7OwnVvoyCQjpzSRJ+M87se/4QCkCiebQAqrJ0y6fwIyi7nw==", "dev": true, "license": "MIT", "dependencies": { @@ -3787,22 +2554,16 @@ }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true, "license": "MIT" }, "node_modules/@types/resolve": { "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "dev": true, "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.32.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.1.tgz", - "integrity": "sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==", "dev": true, "license": "MIT", "dependencies": { @@ -3831,8 +2592,6 @@ }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", - "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", "dev": true, "license": "MIT", "engines": { @@ -3841,8 +2600,6 @@ }, "node_modules/@typescript-eslint/parser": { "version": "8.32.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.1.tgz", - "integrity": "sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==", "dev": true, "license": "MIT", "dependencies": { @@ -3866,8 +2623,6 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.32.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.1.tgz", - "integrity": "sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==", "dev": true, "license": "MIT", "dependencies": { @@ -3884,8 +2639,6 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "8.32.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.1.tgz", - "integrity": "sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==", "dev": true, "license": "MIT", "dependencies": { @@ -3908,8 +2661,6 @@ }, "node_modules/@typescript-eslint/types": { "version": "8.32.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.1.tgz", - "integrity": "sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==", "dev": true, "license": "MIT", "engines": { @@ -3922,8 +2673,6 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "8.32.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.1.tgz", - "integrity": "sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==", "dev": true, "license": "MIT", "dependencies": { @@ -3949,8 +2698,6 @@ }, "node_modules/@typescript-eslint/typescript-estree/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, "license": "MIT", "dependencies": { @@ -3959,8 +2706,6 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -3975,8 +2720,6 @@ }, "node_modules/@typescript-eslint/utils": { "version": "8.32.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.1.tgz", - "integrity": "sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==", "dev": true, "license": "MIT", "dependencies": { @@ -3999,8 +2742,6 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "8.32.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz", - "integrity": "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==", "dev": true, "license": "MIT", "dependencies": { @@ -4017,8 +2758,6 @@ }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4028,29 +2767,21 @@ }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, "license": "MIT", "dependencies": { @@ -4061,15 +2792,11 @@ }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -4081,8 +2808,6 @@ }, "node_modules/@webassemblyjs/ieee754": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, "license": "MIT", "dependencies": { @@ -4091,8 +2816,6 @@ }, "node_modules/@webassemblyjs/leb128": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -4101,15 +2824,11 @@ }, "node_modules/@webassemblyjs/utf8": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4125,8 +2844,6 @@ }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, "license": "MIT", "dependencies": { @@ -4139,8 +2856,6 @@ }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, "license": "MIT", "dependencies": { @@ -4152,8 +2867,6 @@ }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4167,8 +2880,6 @@ }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, "license": "MIT", "dependencies": { @@ -4178,8 +2889,6 @@ }, "node_modules/@webpack-cli/configtest": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", - "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", "dev": true, "license": "MIT", "engines": { @@ -4192,8 +2901,6 @@ }, "node_modules/@webpack-cli/info": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", - "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", "dev": true, "license": "MIT", "engines": { @@ -4206,8 +2913,6 @@ }, "node_modules/@webpack-cli/serve": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", - "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", "dev": true, "license": "MIT", "engines": { @@ -4225,29 +2930,21 @@ }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/@yarnpkg/parsers": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz", - "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4260,8 +2957,6 @@ }, "node_modules/@yarnpkg/parsers/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", "dependencies": { @@ -4270,8 +2965,6 @@ }, "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "license": "MIT", "dependencies": { @@ -4284,15 +2977,11 @@ }, "node_modules/@yarnpkg/parsers/node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@zkochan/js-yaml": { "version": "0.0.7", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", - "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4304,8 +2993,6 @@ }, "node_modules/abbrev": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", - "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", "license": "ISC", "engines": { "node": "^18.17.0 || >=20.5.0" @@ -4313,9 +3000,6 @@ }, "node_modules/abstract-leveldown": { "version": "0.12.4", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", - "integrity": "sha512-TOod9d5RDExo6STLMGa+04HGkl+TlMfbDnTyN93/ETJ9DpQ0DaYLqcMZlbXvdc4W3vVo1Qrl+WhSp8zvDsJ+jA==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dev": true, "license": "MIT", "dependencies": { @@ -4324,8 +3008,6 @@ }, "node_modules/abstract-leveldown/node_modules/xtend": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==", "dev": true, "engines": { "node": ">=0.4" @@ -4333,8 +3015,6 @@ }, "node_modules/accepts": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "license": "MIT", "dependencies": { "mime-types": "^3.0.0", @@ -4346,8 +3026,6 @@ }, "node_modules/acorn": { "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, "license": "MIT", "bin": { @@ -4359,8 +3037,6 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -4369,8 +3045,6 @@ }, "node_modules/acorn-walk": { "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, "license": "MIT", "dependencies": { @@ -4382,15 +3056,11 @@ }, "node_modules/add-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", "dev": true, "license": "MIT" }, "node_modules/agent-base": { "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "license": "MIT", "engines": { "node": ">= 14" @@ -4398,8 +3068,6 @@ }, "node_modules/agentkeepalive": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", "license": "MIT", "dependencies": { "humanize-ms": "^1.2.1" @@ -4410,8 +3078,6 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", @@ -4423,8 +3089,6 @@ }, "node_modules/ajv": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", "dependencies": { @@ -4440,8 +3104,6 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "license": "MIT", "dependencies": { @@ -4458,8 +3120,6 @@ }, "node_modules/ajv-keywords": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "license": "MIT", "dependencies": { @@ -4471,8 +3131,6 @@ }, "node_modules/ansi-colors": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, "license": "MIT", "engines": { @@ -4481,8 +3139,6 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4497,8 +3153,6 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -4506,8 +3160,6 @@ }, "node_modules/ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", "engines": { @@ -4519,15 +3171,10 @@ }, "node_modules/aproba": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "license": "ISC" }, "node_modules/are-we-there-yet": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "deprecated": "This package is no longer supported.", "license": "ISC", "dependencies": { "delegates": "^1.0.0", @@ -4539,22 +3186,16 @@ }, "node_modules/arg": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true, "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { @@ -4570,8 +3211,6 @@ }, "node_modules/array-differ": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true, "license": "MIT", "engines": { @@ -4580,15 +3219,11 @@ }, "node_modules/array-ify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", "dev": true, "license": "MIT" }, "node_modules/array-includes": { "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4608,8 +3243,6 @@ }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "license": "MIT", "engines": { @@ -4618,8 +3251,6 @@ }, "node_modules/array.prototype.findlastindex": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4640,8 +3271,6 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", "dependencies": { @@ -4659,8 +3288,6 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { @@ -4678,8 +3305,6 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4700,8 +3325,6 @@ }, "node_modules/arrify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true, "license": "MIT", "engines": { @@ -4710,8 +3333,6 @@ }, "node_modules/asn1.js": { "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "license": "MIT", "dependencies": { @@ -4722,15 +3343,11 @@ }, "node_modules/asn1.js/node_modules/bn.js": { "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, "license": "MIT" }, "node_modules/assert": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", - "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", "dev": true, "license": "MIT", "dependencies": { @@ -4743,14 +3360,10 @@ }, "node_modules/async": { "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "license": "MIT" }, "node_modules/async-function": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", "engines": { @@ -4759,15 +3372,11 @@ }, "node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true, "license": "MIT" }, "node_modules/at-least-node": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true, "license": "ISC", "engines": { @@ -4776,8 +3385,6 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4792,8 +3399,6 @@ }, "node_modules/axios": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", - "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", "dev": true, "license": "MIT", "dependencies": { @@ -4804,14 +3409,10 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { @@ -4831,8 +3432,6 @@ }, "node_modules/basic-auth": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", "license": "MIT", "dependencies": { "safe-buffer": "5.1.2" @@ -4843,21 +3442,15 @@ }, "node_modules/basic-auth/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "license": "MIT" }, "node_modules/before-after-hook": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/bin-links": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.4.tgz", - "integrity": "sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA==", "dev": true, "license": "ISC", "dependencies": { @@ -4872,8 +3465,6 @@ }, "node_modules/bl": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "license": "MIT", "dependencies": { @@ -4884,15 +3475,11 @@ }, "node_modules/bn.js": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", - "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", "dev": true, "license": "MIT" }, "node_modules/body-parser": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", @@ -4911,8 +3498,6 @@ }, "node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -4921,8 +3506,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { @@ -4934,15 +3517,11 @@ }, "node_modules/brorand": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "dev": true, "license": "MIT" }, "node_modules/browser-resolve": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", - "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4951,15 +3530,11 @@ }, "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, "license": "ISC" }, "node_modules/browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "license": "MIT", "dependencies": { @@ -4973,8 +3548,6 @@ }, "node_modules/browserify-cipher": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "license": "MIT", "dependencies": { @@ -4985,8 +3558,6 @@ }, "node_modules/browserify-des": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "license": "MIT", "dependencies": { @@ -4998,8 +3569,6 @@ }, "node_modules/browserify-fs": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-fs/-/browserify-fs-1.0.0.tgz", - "integrity": "sha512-8LqHRPuAEKvyTX34R6tsw4bO2ro6j9DmlYBhiYWHRM26Zv2cBw1fJOU0NeUQ0RkXkPn/PFBjhA0dm4AgaBurTg==", "dev": true, "dependencies": { "level-filesystem": "^1.0.1", @@ -5009,8 +3578,6 @@ }, "node_modules/browserify-rsa": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", - "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5024,8 +3591,6 @@ }, "node_modules/browserify-sign": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", - "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", "dev": true, "license": "ISC", "dependencies": { @@ -5046,8 +3611,6 @@ }, "node_modules/browserify-sign/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { @@ -5062,15 +3625,11 @@ }, "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/browserify-sign/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", "dependencies": { @@ -5079,15 +3638,11 @@ }, "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/browserify-zlib": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "license": "MIT", "dependencies": { @@ -5096,8 +3651,6 @@ }, "node_modules/browserslist": { "version": "4.24.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", - "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", "dev": true, "funding": [ { @@ -5129,8 +3682,6 @@ }, "node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -5154,9 +3705,6 @@ }, "node_modules/buffer-browserify": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/buffer-browserify/-/buffer-browserify-0.2.5.tgz", - "integrity": "sha512-3ko6TTBwXb15w2OgZuyAzLJwUFClBMvcKcmhF+iQ79G71K8Fc3RqKzroCN0a0DbZw2GM3q9lNoqfYYCTq6w7QA==", - "deprecated": "Package not maintained. Recent browserify uses https://github.com/feross/buffer", "dev": true, "license": "MIT/X11", "dependencies": { @@ -5165,8 +3713,6 @@ }, "node_modules/buffer-browserify/node_modules/base64-js": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", - "integrity": "sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==", "dev": true, "license": "MIT", "engines": { @@ -5175,36 +3721,26 @@ }, "node_modules/buffer-es6": { "version": "4.9.3", - "resolved": "https://registry.npmjs.org/buffer-es6/-/buffer-es6-4.9.3.tgz", - "integrity": "sha512-Ibt+oXxhmeYJSsCkODPqNpPmyegefiD8rfutH1NYGhMZQhSp95Rz7haemgnJ6dxa6LT+JLLbtgOMORRluwKktw==", "dev": true, "license": "MIT" }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true, "license": "MIT" }, "node_modules/buffer-xor": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "dev": true, "license": "MIT" }, "node_modules/builtin-status-codes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", "dev": true, "license": "MIT" }, "node_modules/byte-size": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz", - "integrity": "sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==", "dev": true, "license": "MIT", "engines": { @@ -5213,8 +3749,6 @@ }, "node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -5222,8 +3756,6 @@ }, "node_modules/cacache": { "version": "18.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", - "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", "dev": true, "license": "ISC", "dependencies": { @@ -5246,8 +3778,6 @@ }, "node_modules/cacache/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, "license": "MIT", "dependencies": { @@ -5256,8 +3786,6 @@ }, "node_modules/cacache/node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, "license": "ISC", "engines": { @@ -5266,8 +3794,6 @@ }, "node_modules/cacache/node_modules/glob": { "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { @@ -5287,8 +3813,6 @@ }, "node_modules/cacache/node_modules/jackspeak": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -5303,8 +3827,6 @@ }, "node_modules/cacache/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -5319,8 +3841,6 @@ }, "node_modules/cacache/node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, "license": "MIT", "bin": { @@ -5332,8 +3852,6 @@ }, "node_modules/cacache/node_modules/path-scurry": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -5349,8 +3867,6 @@ }, "node_modules/cacache/node_modules/tar": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, "license": "ISC", "dependencies": { @@ -5367,8 +3883,6 @@ }, "node_modules/cacache/node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "license": "ISC", "dependencies": { @@ -5380,8 +3894,6 @@ }, "node_modules/cacache/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "license": "ISC", "dependencies": { @@ -5393,8 +3905,6 @@ }, "node_modules/cacache/node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, "license": "ISC", "engines": { @@ -5403,8 +3913,6 @@ }, "node_modules/cachedir": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", "dev": true, "license": "MIT", "engines": { @@ -5413,8 +3921,6 @@ }, "node_modules/call-bind": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { @@ -5432,8 +3938,6 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -5445,8 +3949,6 @@ }, "node_modules/call-bound": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -5461,8 +3963,6 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", "engines": { @@ -5471,8 +3971,6 @@ }, "node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", "engines": { @@ -5484,8 +3982,6 @@ }, "node_modules/camelcase-keys": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "license": "MIT", "dependencies": { @@ -5502,8 +3998,6 @@ }, "node_modules/camelcase-keys/node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "license": "MIT", "engines": { @@ -5512,8 +4006,6 @@ }, "node_modules/caniuse-lite": { "version": "1.0.30001717", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz", - "integrity": "sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==", "dev": true, "funding": [ { @@ -5533,8 +4025,6 @@ }, "node_modules/chalk": { "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", "dev": true, "license": "MIT", "engines": { @@ -5546,15 +4036,11 @@ }, "node_modules/chardet": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true, "license": "MIT" }, "node_modules/chokidar": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, "license": "MIT", "dependencies": { @@ -5569,8 +4055,6 @@ }, "node_modules/chownr": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "license": "BlueOak-1.0.0", "engines": { "node": ">=18" @@ -5578,8 +4062,6 @@ }, "node_modules/chrome-trace-event": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, "license": "MIT", "engines": { @@ -5588,8 +4070,6 @@ }, "node_modules/ci-info": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -5604,8 +4084,6 @@ }, "node_modules/cipher-base": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", - "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", "dev": true, "license": "MIT", "dependencies": { @@ -5618,8 +4096,6 @@ }, "node_modules/clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "license": "MIT", "engines": { "node": ">=6" @@ -5627,8 +4103,6 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "license": "MIT", "dependencies": { @@ -5640,8 +4114,6 @@ }, "node_modules/cli-spinners": { "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", "dev": true, "license": "MIT", "engines": { @@ -5653,8 +4125,6 @@ }, "node_modules/cli-truncate": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, "license": "MIT", "dependencies": { @@ -5670,8 +4140,6 @@ }, "node_modules/cli-truncate/node_modules/ansi-regex": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "license": "MIT", "engines": { @@ -5683,15 +4151,11 @@ }, "node_modules/cli-truncate/node_modules/emoji-regex": { "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true, "license": "MIT" }, "node_modules/cli-truncate/node_modules/string-width": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5708,8 +4172,6 @@ }, "node_modules/cli-truncate/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5724,8 +4186,6 @@ }, "node_modules/cli-width": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, "license": "ISC", "engines": { @@ -5734,8 +4194,6 @@ }, "node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "license": "ISC", "dependencies": { @@ -5749,8 +4207,6 @@ }, "node_modules/clone": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "license": "MIT", "engines": { @@ -5759,8 +4215,6 @@ }, "node_modules/clone-deep": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5774,8 +4228,6 @@ }, "node_modules/cmd-shim": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.3.tgz", - "integrity": "sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==", "dev": true, "license": "ISC", "engines": { @@ -5784,8 +4236,6 @@ }, "node_modules/coffeescript": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.7.0.tgz", - "integrity": "sha512-hzWp6TUE2d/jCcN67LrW1eh5b/rSDKQK6oD6VMLlggYVUUFexgTH9z3dNYihzX4RMhze5FTUsUmOXViJKFQR/A==", "dev": true, "license": "MIT", "bin": { @@ -5798,8 +4248,6 @@ }, "node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -5810,14 +4258,10 @@ }, "node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/color-support": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "license": "ISC", "bin": { "color-support": "bin.js" @@ -5825,15 +4269,11 @@ }, "node_modules/colorette": { "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true, "license": "MIT" }, "node_modules/columnify": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5846,8 +4286,6 @@ }, "node_modules/combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "license": "MIT", "dependencies": { @@ -5859,8 +4297,6 @@ }, "node_modules/commander": { "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", "dev": true, "license": "MIT", "engines": { @@ -5869,8 +4305,6 @@ }, "node_modules/commitizen": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.1.tgz", - "integrity": "sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw==", "dev": true, "license": "MIT", "dependencies": { @@ -5900,9 +4334,6 @@ }, "node_modules/commitizen/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -5922,8 +4353,6 @@ }, "node_modules/commitizen/node_modules/minimist": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true, "license": "MIT", "funding": { @@ -5932,15 +4361,11 @@ }, "node_modules/common-ancestor-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", "dev": true, "license": "ISC" }, "node_modules/compare-func": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, "license": "MIT", "dependencies": { @@ -5950,14 +4375,10 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "license": "MIT" }, "node_modules/concat-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "dev": true, "engines": [ "node >= 6.0" @@ -5972,15 +4393,11 @@ }, "node_modules/confusing-browser-globals": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true, "license": "MIT" }, "node_modules/consola": { "version": "3.4.2", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", - "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", "license": "MIT", "engines": { "node": "^14.18.0 || >=16.10.0" @@ -5988,27 +4405,19 @@ }, "node_modules/console-browserify": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, "node_modules/console-control-strings": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "license": "ISC" }, "node_modules/constants-browserify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", "dev": true, "license": "MIT" }, "node_modules/content-disposition": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -6019,8 +4428,6 @@ }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -6028,8 +4435,6 @@ }, "node_modules/conventional-changelog-angular": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", - "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", "dev": true, "license": "ISC", "dependencies": { @@ -6041,8 +4446,6 @@ }, "node_modules/conventional-changelog-conventionalcommits": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", - "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", "dev": true, "license": "ISC", "dependencies": { @@ -6054,8 +4457,6 @@ }, "node_modules/conventional-changelog-core": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz", - "integrity": "sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==", "dev": true, "license": "MIT", "dependencies": { @@ -6077,8 +4478,6 @@ }, "node_modules/conventional-changelog-core/node_modules/conventional-commits-parser": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", - "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", "dev": true, "license": "MIT", "dependencies": { @@ -6096,8 +4495,6 @@ }, "node_modules/conventional-changelog-core/node_modules/dargs": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, "license": "MIT", "engines": { @@ -6106,8 +4503,6 @@ }, "node_modules/conventional-changelog-core/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, "license": "MIT", "dependencies": { @@ -6120,8 +4515,6 @@ }, "node_modules/conventional-changelog-core/node_modules/git-raw-commits": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz", - "integrity": "sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==", "dev": true, "license": "MIT", "dependencies": { @@ -6138,8 +4531,6 @@ }, "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "license": "ISC", "dependencies": { @@ -6151,8 +4542,6 @@ }, "node_modules/conventional-changelog-core/node_modules/is-text-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, "license": "MIT", "dependencies": { @@ -6164,8 +4553,6 @@ }, "node_modules/conventional-changelog-core/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, "license": "MIT", "dependencies": { @@ -6177,8 +4564,6 @@ }, "node_modules/conventional-changelog-core/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { @@ -6190,8 +4575,6 @@ }, "node_modules/conventional-changelog-core/node_modules/meow": { "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6216,15 +4599,11 @@ }, "node_modules/conventional-changelog-core/node_modules/meow/node_modules/hosted-git-info": { "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", "dependencies": { @@ -6239,8 +4618,6 @@ }, "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg-up": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", "dependencies": { @@ -6257,8 +4634,6 @@ }, "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg-up/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, "license": "(MIT OR CC0-1.0)", "engines": { @@ -6267,8 +4642,6 @@ }, "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6280,8 +4653,6 @@ }, "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -6290,8 +4661,6 @@ }, "node_modules/conventional-changelog-core/node_modules/meow/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -6300,8 +4669,6 @@ }, "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6316,8 +4683,6 @@ }, "node_modules/conventional-changelog-core/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, "license": "MIT", "dependencies": { @@ -6332,8 +4697,6 @@ }, "node_modules/conventional-changelog-core/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, "license": "MIT", "dependencies": { @@ -6345,8 +4708,6 @@ }, "node_modules/conventional-changelog-core/node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -6355,8 +4716,6 @@ }, "node_modules/conventional-changelog-core/node_modules/split2": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "license": "ISC", "dependencies": { @@ -6365,8 +4724,6 @@ }, "node_modules/conventional-changelog-core/node_modules/text-extensions": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, "license": "MIT", "engines": { @@ -6375,8 +4732,6 @@ }, "node_modules/conventional-changelog-core/node_modules/type-fest": { "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -6388,8 +4743,6 @@ }, "node_modules/conventional-changelog-core/node_modules/yargs-parser": { "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { @@ -6398,8 +4751,6 @@ }, "node_modules/conventional-changelog-preset-loader": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz", - "integrity": "sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA==", "dev": true, "license": "MIT", "engines": { @@ -6408,8 +4759,6 @@ }, "node_modules/conventional-changelog-writer": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz", - "integrity": "sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6430,8 +4779,6 @@ }, "node_modules/conventional-changelog-writer/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, "license": "MIT", "dependencies": { @@ -6444,8 +4791,6 @@ }, "node_modules/conventional-changelog-writer/node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "license": "ISC", "dependencies": { @@ -6457,8 +4802,6 @@ }, "node_modules/conventional-changelog-writer/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, "license": "MIT", "dependencies": { @@ -6470,8 +4813,6 @@ }, "node_modules/conventional-changelog-writer/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { @@ -6483,8 +4824,6 @@ }, "node_modules/conventional-changelog-writer/node_modules/meow": { "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6509,8 +4848,6 @@ }, "node_modules/conventional-changelog-writer/node_modules/normalize-package-data": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6525,8 +4862,6 @@ }, "node_modules/conventional-changelog-writer/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, "license": "MIT", "dependencies": { @@ -6541,8 +4876,6 @@ }, "node_modules/conventional-changelog-writer/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, "license": "MIT", "dependencies": { @@ -6554,8 +4887,6 @@ }, "node_modules/conventional-changelog-writer/node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -6564,8 +4895,6 @@ }, "node_modules/conventional-changelog-writer/node_modules/read-pkg": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", "dependencies": { @@ -6580,8 +4909,6 @@ }, "node_modules/conventional-changelog-writer/node_modules/read-pkg-up": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", "dependencies": { @@ -6598,8 +4925,6 @@ }, "node_modules/conventional-changelog-writer/node_modules/read-pkg-up/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, "license": "(MIT OR CC0-1.0)", "engines": { @@ -6608,15 +4933,11 @@ }, "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6628,8 +4949,6 @@ }, "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -6638,8 +4957,6 @@ }, "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -6648,8 +4965,6 @@ }, "node_modules/conventional-changelog-writer/node_modules/type-fest": { "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -6661,8 +4976,6 @@ }, "node_modules/conventional-changelog-writer/node_modules/yargs-parser": { "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { @@ -6671,15 +4984,11 @@ }, "node_modules/conventional-commit-types": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz", - "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==", "dev": true, "license": "ISC" }, "node_modules/conventional-commits-filter": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz", - "integrity": "sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6692,8 +5001,6 @@ }, "node_modules/conventional-commits-parser": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", "dev": true, "license": "MIT", "dependencies": { @@ -6711,8 +5018,6 @@ }, "node_modules/conventional-recommended-bump": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz", - "integrity": "sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==", "dev": true, "license": "MIT", "dependencies": { @@ -6733,8 +5038,6 @@ }, "node_modules/conventional-recommended-bump/node_modules/conventional-commits-parser": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", - "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", "dev": true, "license": "MIT", "dependencies": { @@ -6752,8 +5055,6 @@ }, "node_modules/conventional-recommended-bump/node_modules/dargs": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, "license": "MIT", "engines": { @@ -6762,8 +5063,6 @@ }, "node_modules/conventional-recommended-bump/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, "license": "MIT", "dependencies": { @@ -6776,8 +5075,6 @@ }, "node_modules/conventional-recommended-bump/node_modules/git-raw-commits": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz", - "integrity": "sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==", "dev": true, "license": "MIT", "dependencies": { @@ -6794,8 +5091,6 @@ }, "node_modules/conventional-recommended-bump/node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "license": "ISC", "dependencies": { @@ -6807,8 +5102,6 @@ }, "node_modules/conventional-recommended-bump/node_modules/is-text-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, "license": "MIT", "dependencies": { @@ -6820,8 +5113,6 @@ }, "node_modules/conventional-recommended-bump/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, "license": "MIT", "dependencies": { @@ -6833,8 +5124,6 @@ }, "node_modules/conventional-recommended-bump/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { @@ -6846,8 +5135,6 @@ }, "node_modules/conventional-recommended-bump/node_modules/meow": { "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6872,8 +5159,6 @@ }, "node_modules/conventional-recommended-bump/node_modules/normalize-package-data": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6888,8 +5173,6 @@ }, "node_modules/conventional-recommended-bump/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, "license": "MIT", "dependencies": { @@ -6904,8 +5187,6 @@ }, "node_modules/conventional-recommended-bump/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, "license": "MIT", "dependencies": { @@ -6917,8 +5198,6 @@ }, "node_modules/conventional-recommended-bump/node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -6927,8 +5206,6 @@ }, "node_modules/conventional-recommended-bump/node_modules/read-pkg": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", "dependencies": { @@ -6943,8 +5220,6 @@ }, "node_modules/conventional-recommended-bump/node_modules/read-pkg-up": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", "dependencies": { @@ -6961,8 +5236,6 @@ }, "node_modules/conventional-recommended-bump/node_modules/read-pkg-up/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, "license": "(MIT OR CC0-1.0)", "engines": { @@ -6971,15 +5244,11 @@ }, "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6991,8 +5260,6 @@ }, "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -7001,8 +5268,6 @@ }, "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -7011,8 +5276,6 @@ }, "node_modules/conventional-recommended-bump/node_modules/split2": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "license": "ISC", "dependencies": { @@ -7021,8 +5284,6 @@ }, "node_modules/conventional-recommended-bump/node_modules/text-extensions": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, "license": "MIT", "engines": { @@ -7031,8 +5292,6 @@ }, "node_modules/conventional-recommended-bump/node_modules/type-fest": { "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -7044,8 +5303,6 @@ }, "node_modules/conventional-recommended-bump/node_modules/yargs-parser": { "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { @@ -7054,8 +5311,6 @@ }, "node_modules/cookie": { "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -7063,8 +5318,6 @@ }, "node_modules/cookie-signature": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "license": "MIT", "engines": { "node": ">=6.6.0" @@ -7072,29 +5325,11 @@ }, "node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true, "license": "MIT" }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/corser": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", - "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", "license": "MIT", "engines": { "node": ">= 0.4.0" @@ -7102,8 +5337,6 @@ }, "node_modules/cosmiconfig": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "license": "MIT", "dependencies": { @@ -7129,8 +5362,6 @@ }, "node_modules/cosmiconfig-typescript-loader": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", - "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", "dev": true, "license": "MIT", "dependencies": { @@ -7147,8 +5378,6 @@ }, "node_modules/create-ecdh": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "license": "MIT", "dependencies": { @@ -7158,15 +5387,11 @@ }, "node_modules/create-ecdh/node_modules/bn.js": { "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, "license": "MIT" }, "node_modules/create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "license": "MIT", "dependencies": { @@ -7179,8 +5404,6 @@ }, "node_modules/create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "license": "MIT", "dependencies": { @@ -7194,15 +5417,11 @@ }, "node_modules/create-require": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true, "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -7216,8 +5435,6 @@ }, "node_modules/crypto-browserify": { "version": "3.12.1", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", - "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7243,8 +5460,6 @@ }, "node_modules/cssesc": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, "license": "MIT", "bin": { @@ -7308,8 +5523,6 @@ }, "node_modules/csv-spectrum": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/csv-spectrum/-/csv-spectrum-2.0.0.tgz", - "integrity": "sha512-gjW9YEAkcrJo4AEdrV9+4lkUXlOyYyC+1Ap3efzMiUUs1OTdZ29VraBZNBBKZK7iiUkbMNkUmfKp/jnayzHxAA==", "dev": true, "license": "BSD-2-Clause" }, @@ -7319,8 +5532,6 @@ }, "node_modules/cz-conventional-changelog": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", - "integrity": "sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==", "dev": true, "license": "MIT", "dependencies": { @@ -7340,8 +5551,6 @@ }, "node_modules/cz-conventional-changelog/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "license": "MIT", "dependencies": { @@ -7353,8 +5562,6 @@ }, "node_modules/cz-conventional-changelog/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7368,8 +5575,6 @@ }, "node_modules/cz-conventional-changelog/node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "license": "MIT", "dependencies": { @@ -7378,15 +5583,11 @@ }, "node_modules/cz-conventional-changelog/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true, "license": "MIT" }, "node_modules/cz-conventional-changelog/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", "engines": { @@ -7395,8 +5596,6 @@ }, "node_modules/cz-conventional-changelog/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "license": "MIT", "engines": { @@ -7405,8 +5604,6 @@ }, "node_modules/cz-conventional-changelog/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", "dependencies": { @@ -7418,8 +5615,6 @@ }, "node_modules/dargs": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", - "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", "dev": true, "license": "MIT", "engines": { @@ -7431,8 +5626,6 @@ }, "node_modules/data-view-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7449,8 +5642,6 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7467,8 +5658,6 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7485,8 +5674,6 @@ }, "node_modules/dateformat": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, "license": "MIT", "engines": { @@ -7495,8 +5682,6 @@ }, "node_modules/debug": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -7512,8 +5697,6 @@ }, "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, "license": "MIT", "engines": { @@ -7525,8 +5708,6 @@ }, "node_modules/decamelize-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "license": "MIT", "dependencies": { @@ -7542,8 +5723,6 @@ }, "node_modules/decamelize-keys/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, "license": "MIT", "engines": { @@ -7552,8 +5731,6 @@ }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, "license": "MIT", "engines": { @@ -7562,22 +5739,16 @@ }, "node_modules/dedent": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true, "license": "MIT" }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, "license": "MIT", "engines": { @@ -7586,8 +5757,6 @@ }, "node_modules/defaults": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "license": "MIT", "dependencies": { @@ -7599,9 +5768,6 @@ }, "node_modules/deferred-leveldown": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", - "integrity": "sha512-+WCbb4+ez/SZ77Sdy1iadagFiVzMB89IKOBhglgnUkVxOxRWmmFsz8UDSNWh4Rhq+3wr/vMFlYj+rdEwWUDdng==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dev": true, "license": "MIT", "dependencies": { @@ -7610,8 +5776,6 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { @@ -7628,8 +5792,6 @@ }, "node_modules/define-lazy-prop": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, "license": "MIT", "engines": { @@ -7638,8 +5800,6 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -7656,8 +5816,6 @@ }, "node_modules/define-properties/node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -7666,8 +5824,6 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, "license": "MIT", "engines": { @@ -7676,14 +5832,10 @@ }, "node_modules/delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "license": "MIT" }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -7691,15 +5843,11 @@ }, "node_modules/deprecation": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dev": true, "license": "ISC" }, "node_modules/des.js": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dev": true, "license": "MIT", "dependencies": { @@ -7709,14 +5857,10 @@ }, "node_modules/desm": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/desm/-/desm-1.3.1.tgz", - "integrity": "sha512-vgTAOosB1aHrmzjGnzFCbjvXbk8QAOC/36JxJhcBkeAuUy8QwRFxAWBHemiDpUB3cbrBruFUdzpUS21aocvaWg==", "license": "MIT" }, "node_modules/detect-file": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "dev": true, "license": "MIT", "engines": { @@ -7725,8 +5869,6 @@ }, "node_modules/detect-indent": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, "license": "MIT", "engines": { @@ -7735,8 +5877,6 @@ }, "node_modules/detect-libc": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", "license": "Apache-2.0", "engines": { "node": ">=8" @@ -7744,8 +5884,6 @@ }, "node_modules/diff": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -7754,8 +5892,6 @@ }, "node_modules/diff-sequences": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, "license": "MIT", "engines": { @@ -7764,8 +5900,6 @@ }, "node_modules/diffie-hellman": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "license": "MIT", "dependencies": { @@ -7776,15 +5910,11 @@ }, "node_modules/diffie-hellman/node_modules/bn.js": { "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, "license": "MIT" }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", "dependencies": { @@ -7796,15 +5926,11 @@ }, "node_modules/dirname-filename-esm": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/dirname-filename-esm/-/dirname-filename-esm-1.1.2.tgz", - "integrity": "sha512-mMhH2imzJN95KnX/iDAhC0QDG0VU833c88U3SXCaQzATu7YlO9YTFD/CF9Nn2xhSwFlV9iWEKb/YyGJ4TwCcPg==", "dev": true, "license": "MIT" }, "node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7816,8 +5942,6 @@ }, "node_modules/domain-browser": { "version": "4.22.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.22.0.tgz", - "integrity": "sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==", "dev": true, "license": "MIT", "engines": { @@ -7829,8 +5953,6 @@ }, "node_modules/dot-prop": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7842,8 +5964,6 @@ }, "node_modules/dotenv": { "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -7855,8 +5975,6 @@ }, "node_modules/dotenv-expand": { "version": "11.0.7", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", - "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -7871,8 +5989,6 @@ }, "node_modules/duckdb": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/duckdb/-/duckdb-1.2.1.tgz", - "integrity": "sha512-gs3KT2J3SOCghai0Q5nw/joYpOs63/gud+RX1hQmJ+ombUn5BEFn/FUqQKa3HSVZ95+otWDDMGsspLVEr4hJzA==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -7883,8 +5999,6 @@ }, "node_modules/duckdb-async": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/duckdb-async/-/duckdb-async-1.2.1.tgz", - "integrity": "sha512-Q48ki2lxIWRmTYUxycnPIWKEOQemsYQuATFIWDrz8l56ymaLao5hm4iFZCzSQ9t4dpNfQgYR+cVunxH3DT3o4A==", "license": "MIT", "dependencies": { "duckdb": "^1.2.1" @@ -7892,8 +6006,6 @@ }, "node_modules/dunder-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -7906,15 +6018,11 @@ }, "node_modules/duplexer": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true, "license": "MIT" }, "node_modules/each": { "version": "2.7.2", - "resolved": "https://registry.npmjs.org/each/-/each-2.7.2.tgz", - "integrity": "sha512-CXO0d3nbNO2e9vPlT0DF3BGXGIrNDWMmXGkXg1Mprex7ipTuppERBM4I5AILwobDEwxEOmaBlRT8gpH5M7yWAw==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -7923,21 +6031,15 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, "license": "MIT" }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, "node_modules/ejs": { "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7952,15 +6054,11 @@ }, "node_modules/electron-to-chromium": { "version": "1.5.152", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.152.tgz", - "integrity": "sha512-xBOfg/EBaIlVsHipHl2VdTPJRSvErNUaqW8ejTq5OlOlIYx1wOllCHsAvAIrr55jD1IYEfdR86miUEt8H5IeJg==", "dev": true, "license": "ISC" }, "node_modules/elliptic": { "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dev": true, "license": "MIT", "dependencies": { @@ -7975,21 +6073,15 @@ }, "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, "license": "MIT" }, "node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/encodeurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -7997,8 +6089,6 @@ }, "node_modules/encoding": { "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "license": "MIT", "optional": true, "dependencies": { @@ -8007,8 +6097,6 @@ }, "node_modules/end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -8017,8 +6105,6 @@ }, "node_modules/enhanced-resolve": { "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", "dev": true, "license": "MIT", "dependencies": { @@ -8031,8 +6117,6 @@ }, "node_modules/enquirer": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "license": "MIT", "dependencies": { @@ -8044,8 +6128,6 @@ }, "node_modules/env-paths": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "license": "MIT", "engines": { "node": ">=6" @@ -8053,8 +6135,6 @@ }, "node_modules/envinfo": { "version": "7.13.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", - "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", "dev": true, "license": "MIT", "bin": { @@ -8066,8 +6146,6 @@ }, "node_modules/environment": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, "license": "MIT", "engines": { @@ -8079,14 +6157,10 @@ }, "node_modules/err-code": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "license": "MIT" }, "node_modules/errno": { "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, "license": "MIT", "dependencies": { @@ -8098,8 +6172,6 @@ }, "node_modules/error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "license": "MIT", "dependencies": { @@ -8108,8 +6180,6 @@ }, "node_modules/es-abstract": { "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", "dev": true, "license": "MIT", "dependencies": { @@ -8174,8 +6244,6 @@ }, "node_modules/es-abstract/node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -8184,8 +6252,6 @@ }, "node_modules/es-define-property": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -8193,8 +6259,6 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -8202,15 +6266,11 @@ }, "node_modules/es-module-lexer": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true, "license": "MIT" }, "node_modules/es-object-atoms": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -8221,8 +6281,6 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "license": "MIT", "dependencies": { @@ -8237,8 +6295,6 @@ }, "node_modules/es-shim-unscopables": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, "license": "MIT", "dependencies": { @@ -8250,8 +6306,6 @@ }, "node_modules/es-to-primitive": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { @@ -8268,8 +6322,6 @@ }, "node_modules/esbuild": { "version": "0.25.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", - "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -8309,8 +6361,6 @@ }, "node_modules/escalade": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "engines": { @@ -8319,14 +6369,10 @@ }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { @@ -8337,9 +6383,9 @@ } }, "node_modules/eslint": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.26.0.tgz", - "integrity": "sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz", + "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -8347,14 +6393,13 @@ "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.20.0", "@eslint/config-helpers": "^0.2.1", - "@eslint/core": "^0.13.0", + "@eslint/core": "^0.14.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.26.0", - "@eslint/plugin-kit": "^0.2.8", + "@eslint/js": "9.27.0", + "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", - "@modelcontextprotocol/sdk": "^1.8.0", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", @@ -8378,8 +6423,7 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "zod": "^3.24.2" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" @@ -8401,8 +6445,6 @@ }, "node_modules/eslint-config-airbnb-base": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, "license": "MIT", "dependencies": { @@ -8421,8 +6463,6 @@ }, "node_modules/eslint-config-airbnb-base/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, "license": "ISC", "bin": { @@ -8431,8 +6471,6 @@ }, "node_modules/eslint-config-prettier": { "version": "10.1.5", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz", - "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==", "dev": true, "license": "MIT", "bin": { @@ -8447,8 +6485,6 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "license": "MIT", "dependencies": { @@ -8459,8 +6495,6 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8469,8 +6503,6 @@ }, "node_modules/eslint-module-utils": { "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "license": "MIT", "dependencies": { @@ -8487,8 +6519,6 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8497,8 +6527,6 @@ }, "node_modules/eslint-plugin-import": { "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "license": "MIT", "dependencies": { @@ -8531,8 +6559,6 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8541,8 +6567,6 @@ }, "node_modules/eslint-plugin-import/node_modules/json5": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "license": "MIT", "dependencies": { @@ -8554,8 +6578,6 @@ }, "node_modules/eslint-plugin-import/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, "license": "ISC", "bin": { @@ -8564,8 +6586,6 @@ }, "node_modules/eslint-plugin-import/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -8574,8 +6594,6 @@ }, "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "license": "MIT", "dependencies": { @@ -8587,8 +6605,6 @@ }, "node_modules/eslint-plugin-mocha": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-11.0.0.tgz", - "integrity": "sha512-P8zdSu9+avzLozms0kBlWNxqfqABlowidjugdT3AYpvmaKRQjULaM8CXisUiKa5jY5rJYQdd4coehjJ+ICprnw==", "dev": true, "license": "MIT", "dependencies": { @@ -8598,8 +6614,6 @@ }, "node_modules/eslint-plugin-mocha/node_modules/globals": { "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, "license": "MIT", "engines": { @@ -8611,8 +6625,6 @@ }, "node_modules/eslint-plugin-prettier": { "version": "5.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.0.tgz", - "integrity": "sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==", "dev": true, "license": "MIT", "dependencies": { @@ -8642,8 +6654,6 @@ }, "node_modules/eslint-scope": { "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", - "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -8659,8 +6669,6 @@ }, "node_modules/eslint-visitor-keys": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -8672,8 +6680,6 @@ }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -8689,8 +6695,6 @@ }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -8705,8 +6709,6 @@ }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -8722,8 +6724,6 @@ }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -8739,15 +6739,11 @@ }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, "node_modules/eslint/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -8762,8 +6758,6 @@ }, "node_modules/eslint/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8778,8 +6772,6 @@ }, "node_modules/eslint/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -8794,8 +6786,6 @@ }, "node_modules/eslint/node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -8804,8 +6794,6 @@ }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -8817,8 +6805,6 @@ }, "node_modules/eslint/node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { @@ -8830,8 +6816,6 @@ }, "node_modules/espree": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -8848,8 +6832,6 @@ }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "license": "BSD-2-Clause", "bin": { @@ -8862,8 +6844,6 @@ }, "node_modules/esquery": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8875,8 +6855,6 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -8888,8 +6866,6 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -8898,15 +6874,11 @@ }, "node_modules/estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -8915,8 +6887,6 @@ }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -8924,48 +6894,19 @@ }, "node_modules/eventemitter3": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "dev": true, "license": "MIT" }, "node_modules/events": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "license": "MIT", "engines": { "node": ">=0.8.x" } }, - "node_modules/eventsource": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventsource-parser": "^3.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/eventsource-parser": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.1.tgz", - "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/evp_bytestokey": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "license": "MIT", "dependencies": { @@ -8975,8 +6916,6 @@ }, "node_modules/execa": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8999,15 +6938,11 @@ }, "node_modules/execa/node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/expand-tilde": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, "license": "MIT", "dependencies": { @@ -9019,14 +6954,10 @@ }, "node_modules/exponential-backoff": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", - "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", "license": "Apache-2.0" }, "node_modules/express": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "license": "MIT", "dependencies": { "accepts": "^2.0.0", @@ -9065,26 +6996,8 @@ "url": "https://opencollective.com/express" } }, - "node_modules/express-rate-limit": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", - "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/express-rate-limit" - }, - "peerDependencies": { - "express": "^4.11 || 5 || ^5.0.0-beta.1" - } - }, "node_modules/external-editor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "license": "MIT", "dependencies": { @@ -9098,8 +7011,6 @@ }, "node_modules/external-editor/node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "license": "MIT", "dependencies": { @@ -9111,22 +7022,16 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true, "license": "Apache-2.0" }, "node_modules/fast-glob": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -9142,8 +7047,6 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -9155,22 +7058,16 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, "license": "MIT" }, "node_modules/fast-uri": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", "dev": true, "funding": [ { @@ -9186,8 +7083,6 @@ }, "node_modules/fastest-levenshtein": { "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, "license": "MIT", "engines": { @@ -9196,8 +7091,6 @@ }, "node_modules/fastq": { "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, "license": "ISC", "dependencies": { @@ -9206,8 +7099,6 @@ }, "node_modules/figures": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "license": "MIT", "dependencies": { @@ -9222,8 +7113,6 @@ }, "node_modules/figures/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", "engines": { @@ -9232,8 +7121,6 @@ }, "node_modules/file-entry-cache": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9245,8 +7132,6 @@ }, "node_modules/filelist": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9255,8 +7140,6 @@ }, "node_modules/filelist/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, "license": "MIT", "dependencies": { @@ -9265,8 +7148,6 @@ }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "license": "ISC", "dependencies": { @@ -9278,8 +7159,6 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { @@ -9291,8 +7170,6 @@ }, "node_modules/finalhandler": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -9308,8 +7185,6 @@ }, "node_modules/find-node-modules": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", - "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", "dev": true, "license": "MIT", "dependencies": { @@ -9319,15 +7194,11 @@ }, "node_modules/find-root": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", "dev": true, "license": "MIT" }, "node_modules/find-up": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", - "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", "dev": true, "license": "MIT", "dependencies": { @@ -9344,8 +7215,6 @@ }, "node_modules/findup-sync": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", - "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9360,8 +7229,6 @@ }, "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, "license": "BSD-3-Clause", "bin": { @@ -9370,8 +7237,6 @@ }, "node_modules/flat-cache": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { @@ -9384,15 +7249,11 @@ }, "node_modules/flatted": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, "license": "ISC" }, "node_modules/follow-redirects": { "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", @@ -9411,8 +7272,6 @@ }, "node_modules/for-each": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { @@ -9427,15 +7286,11 @@ }, "node_modules/foreach": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", - "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==", "dev": true, "license": "MIT" }, "node_modules/foreground-child": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, "license": "ISC", "dependencies": { @@ -9451,8 +7306,6 @@ }, "node_modules/form-data": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", "dev": true, "license": "MIT", "dependencies": { @@ -9467,8 +7320,6 @@ }, "node_modules/form-data/node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", "engines": { @@ -9477,8 +7328,6 @@ }, "node_modules/form-data/node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", "dependencies": { @@ -9490,8 +7339,6 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -9499,8 +7346,6 @@ }, "node_modules/fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -9508,8 +7353,6 @@ }, "node_modules/front-matter": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", - "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", "dev": true, "license": "MIT", "dependencies": { @@ -9518,8 +7361,6 @@ }, "node_modules/front-matter/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", "dependencies": { @@ -9528,8 +7369,6 @@ }, "node_modules/front-matter/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "license": "MIT", "dependencies": { @@ -9542,22 +7381,16 @@ }, "node_modules/front-matter/node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true, "license": "MIT" }, "node_modules/fs-extra": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9572,8 +7405,6 @@ }, "node_modules/fs-minipass": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, "license": "ISC", "dependencies": { @@ -9585,29 +7416,10 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "license": "ISC" }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9615,8 +7427,6 @@ }, "node_modules/function.prototype.name": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9636,8 +7446,6 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", "funding": { @@ -9646,8 +7454,6 @@ }, "node_modules/fwd-stream": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", - "integrity": "sha512-q2qaK2B38W07wfPSQDKMiKOD5Nzv2XyuvQlrmh1q0pxyHNanKHq8lwQ6n9zHucAwA5EbzRJKEgds2orn88rYTg==", "dev": true, "dependencies": { "readable-stream": "~1.0.26-4" @@ -9655,15 +7461,11 @@ }, "node_modules/fwd-stream/node_modules/isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true, "license": "MIT" }, "node_modules/fwd-stream/node_modules/readable-stream": { "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "license": "MIT", "dependencies": { @@ -9675,16 +7477,11 @@ }, "node_modules/fwd-stream/node_modules/string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "dev": true, "license": "MIT" }, "node_modules/gauge": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "deprecated": "This package is no longer supported.", "license": "ISC", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", @@ -9702,14 +7499,10 @@ }, "node_modules/gauge/node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "license": "ISC" }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "license": "ISC", "engines": { @@ -9718,8 +7511,6 @@ }, "node_modules/get-east-asian-width": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", - "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", "dev": true, "license": "MIT", "engines": { @@ -9731,8 +7522,6 @@ }, "node_modules/get-intrinsic": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -9755,8 +7544,6 @@ }, "node_modules/get-pkg-repo": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", - "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, "license": "MIT", "dependencies": { @@ -9774,8 +7561,6 @@ }, "node_modules/get-pkg-repo/node_modules/cliui": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "license": "ISC", "dependencies": { @@ -9786,8 +7571,6 @@ }, "node_modules/get-pkg-repo/node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "license": "ISC", "dependencies": { @@ -9799,8 +7582,6 @@ }, "node_modules/get-pkg-repo/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { @@ -9812,8 +7593,6 @@ }, "node_modules/get-pkg-repo/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, "license": "MIT", "dependencies": { @@ -9831,8 +7610,6 @@ }, "node_modules/get-pkg-repo/node_modules/yargs-parser": { "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { @@ -9841,8 +7618,6 @@ }, "node_modules/get-port": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", "dev": true, "license": "MIT", "engines": { @@ -9854,8 +7629,6 @@ }, "node_modules/get-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -9867,8 +7640,6 @@ }, "node_modules/get-stream": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", "dev": true, "license": "MIT", "engines": { @@ -9880,8 +7651,6 @@ }, "node_modules/get-symbol-description": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { @@ -9898,8 +7667,6 @@ }, "node_modules/get-tsconfig": { "version": "4.10.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", - "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", "dev": true, "license": "MIT", "dependencies": { @@ -9911,8 +7678,6 @@ }, "node_modules/git-raw-commits": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", - "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9929,8 +7694,6 @@ }, "node_modules/git-remote-origin-url": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", "dev": true, "license": "MIT", "dependencies": { @@ -9943,8 +7706,6 @@ }, "node_modules/git-remote-origin-url/node_modules/pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "license": "MIT", "engines": { @@ -9953,8 +7714,6 @@ }, "node_modules/git-semver-tags": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz", - "integrity": "sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==", "dev": true, "license": "MIT", "dependencies": { @@ -9970,8 +7729,6 @@ }, "node_modules/git-semver-tags/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, "license": "MIT", "dependencies": { @@ -9984,8 +7741,6 @@ }, "node_modules/git-semver-tags/node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "license": "ISC", "dependencies": { @@ -9997,8 +7752,6 @@ }, "node_modules/git-semver-tags/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, "license": "MIT", "dependencies": { @@ -10010,8 +7763,6 @@ }, "node_modules/git-semver-tags/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { @@ -10023,8 +7774,6 @@ }, "node_modules/git-semver-tags/node_modules/meow": { "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10049,8 +7798,6 @@ }, "node_modules/git-semver-tags/node_modules/normalize-package-data": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -10065,8 +7812,6 @@ }, "node_modules/git-semver-tags/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, "license": "MIT", "dependencies": { @@ -10081,8 +7826,6 @@ }, "node_modules/git-semver-tags/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, "license": "MIT", "dependencies": { @@ -10094,8 +7837,6 @@ }, "node_modules/git-semver-tags/node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -10104,8 +7845,6 @@ }, "node_modules/git-semver-tags/node_modules/read-pkg": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", "dependencies": { @@ -10120,8 +7859,6 @@ }, "node_modules/git-semver-tags/node_modules/read-pkg-up": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", "dependencies": { @@ -10138,8 +7875,6 @@ }, "node_modules/git-semver-tags/node_modules/read-pkg-up/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, "license": "(MIT OR CC0-1.0)", "engines": { @@ -10148,15 +7883,11 @@ }, "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -10168,8 +7899,6 @@ }, "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -10178,8 +7907,6 @@ }, "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -10188,8 +7915,6 @@ }, "node_modules/git-semver-tags/node_modules/type-fest": { "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -10201,8 +7926,6 @@ }, "node_modules/git-semver-tags/node_modules/yargs-parser": { "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { @@ -10211,8 +7934,6 @@ }, "node_modules/git-up": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", - "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10222,8 +7943,6 @@ }, "node_modules/git-url-parse": { "version": "14.0.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-14.0.0.tgz", - "integrity": "sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10232,8 +7951,6 @@ }, "node_modules/gitconfiglocal": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", "dev": true, "license": "BSD", "dependencies": { @@ -10242,15 +7959,11 @@ }, "node_modules/gitconfiglocal/node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "license": "ISC" }, "node_modules/glob": { "version": "11.0.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz", - "integrity": "sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==", "dev": true, "license": "ISC", "dependencies": { @@ -10273,8 +7986,6 @@ }, "node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { @@ -10286,15 +7997,11 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/glob/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, "license": "MIT", "dependencies": { @@ -10303,8 +8010,6 @@ }, "node_modules/glob/node_modules/minimatch": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", "dev": true, "license": "ISC", "dependencies": { @@ -10319,8 +8024,6 @@ }, "node_modules/global-directory": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", - "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10335,8 +8038,6 @@ }, "node_modules/global-modules": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "license": "MIT", "dependencies": { @@ -10350,8 +8051,6 @@ }, "node_modules/global-prefix": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, "license": "MIT", "dependencies": { @@ -10367,15 +8066,11 @@ }, "node_modules/global-prefix/node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "license": "ISC" }, "node_modules/global-prefix/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "license": "ISC", "dependencies": { @@ -10387,8 +8082,6 @@ }, "node_modules/globals": { "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", "engines": { @@ -10400,8 +8093,6 @@ }, "node_modules/globalthis": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10417,8 +8108,6 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", "dependencies": { @@ -10438,8 +8127,6 @@ }, "node_modules/gopd": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -10450,21 +8137,15 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT" }, "node_modules/handlebars": { "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10485,8 +8166,6 @@ }, "node_modules/hard-rejection": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "license": "MIT", "engines": { @@ -10495,8 +8174,6 @@ }, "node_modules/has-bigints": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", "engines": { @@ -10508,8 +8185,6 @@ }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "license": "MIT", "engines": { "node": ">=8" @@ -10517,8 +8192,6 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { @@ -10530,8 +8203,6 @@ }, "node_modules/has-proto": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10546,8 +8217,6 @@ }, "node_modules/has-symbols": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -10558,8 +8227,6 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { @@ -10574,14 +8241,10 @@ }, "node_modules/has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "license": "ISC" }, "node_modules/hash-base": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", - "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", "dev": true, "license": "MIT", "dependencies": { @@ -10594,8 +8257,6 @@ }, "node_modules/hash.js": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "license": "MIT", "dependencies": { @@ -10605,8 +8266,6 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -10617,8 +8276,6 @@ }, "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==", "license": "MIT", "bin": { "he": "bin/he" @@ -10626,8 +8283,6 @@ }, "node_modules/hmac-drbg": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, "license": "MIT", "dependencies": { @@ -10638,8 +8293,6 @@ }, "node_modules/homedir-polyfill": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, "license": "MIT", "dependencies": { @@ -10651,8 +8304,6 @@ }, "node_modules/hosted-git-info": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, "license": "ISC", "dependencies": { @@ -10664,8 +8315,6 @@ }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "license": "MIT", "dependencies": { "whatwg-encoding": "^2.0.0" @@ -10676,14 +8325,10 @@ }, "node_modules/http-cache-semantics": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "license": "BSD-2-Clause" }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "license": "MIT", "dependencies": { "depd": "2.0.0", @@ -10698,8 +8343,6 @@ }, "node_modules/http-proxy": { "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "license": "MIT", "dependencies": { "eventemitter3": "^4.0.0", @@ -10712,8 +8355,6 @@ }, "node_modules/http-proxy-agent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "license": "MIT", "dependencies": { "@tootallnate/once": "2", @@ -10726,8 +8367,6 @@ }, "node_modules/http-proxy-agent/node_modules/agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "license": "MIT", "dependencies": { "debug": "4" @@ -10738,14 +8377,10 @@ }, "node_modules/http-proxy/node_modules/eventemitter3": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "license": "MIT" }, "node_modules/http-server": { "version": "14.1.1", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", - "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", "license": "MIT", "dependencies": { "basic-auth": "^2.0.1", @@ -10771,8 +8406,6 @@ }, "node_modules/http-server/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -10786,8 +8419,6 @@ }, "node_modules/http-server/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -10802,8 +8433,6 @@ }, "node_modules/http-server/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -10814,15 +8443,11 @@ }, "node_modules/https-browserify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", "dev": true, "license": "MIT" }, "node_modules/https-proxy-agent": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "license": "MIT", "dependencies": { "agent-base": "^7.1.2", @@ -10834,8 +8459,6 @@ }, "node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -10844,8 +8467,6 @@ }, "node_modules/humanize-ms": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "license": "MIT", "dependencies": { "ms": "^2.0.0" @@ -10853,8 +8474,6 @@ }, "node_modules/husky": { "version": "9.1.7", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", - "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, "license": "MIT", "bin": { @@ -10869,8 +8488,6 @@ }, "node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -10881,15 +8498,11 @@ }, "node_modules/idb-wrapper": { "version": "1.7.2", - "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", - "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==", "dev": true, "license": "MIT" }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { @@ -10909,8 +8522,6 @@ }, "node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -10919,8 +8530,6 @@ }, "node_modules/ignore-walk": { "version": "6.0.5", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", - "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", "dev": true, "license": "ISC", "dependencies": { @@ -10932,8 +8541,6 @@ }, "node_modules/ignore-walk/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, "license": "MIT", "dependencies": { @@ -10942,8 +8549,6 @@ }, "node_modules/ignore-walk/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -10958,8 +8563,6 @@ }, "node_modules/import-fresh": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10975,8 +8578,6 @@ }, "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", "engines": { @@ -10985,8 +8586,6 @@ }, "node_modules/import-local": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "license": "MIT", "dependencies": { @@ -11005,8 +8604,6 @@ }, "node_modules/import-meta-resolve": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", - "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", "dev": true, "license": "MIT", "funding": { @@ -11016,8 +8613,6 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "license": "MIT", "engines": { "node": ">=0.8.19" @@ -11025,8 +8620,6 @@ }, "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "license": "MIT", "engines": { "node": ">=8" @@ -11034,21 +8627,14 @@ }, "node_modules/indexof": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==", "dev": true }, "node_modules/infer-owner": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", "license": "ISC" }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -11057,14 +8643,10 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, "node_modules/ini": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", "dev": true, "license": "ISC", "engines": { @@ -11073,8 +8655,6 @@ }, "node_modules/init-package-json": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-6.0.3.tgz", - "integrity": "sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w==", "dev": true, "license": "ISC", "dependencies": { @@ -11092,8 +8672,6 @@ }, "node_modules/inquirer": { "version": "8.2.5", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", - "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11119,8 +8697,6 @@ }, "node_modules/inquirer/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -11135,8 +8711,6 @@ }, "node_modules/inquirer/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -11152,8 +8726,6 @@ }, "node_modules/inquirer/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -11165,8 +8737,6 @@ }, "node_modules/internal-slot": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { @@ -11180,8 +8750,6 @@ }, "node_modules/interpret": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, "license": "MIT", "engines": { @@ -11190,8 +8758,6 @@ }, "node_modules/ip-address": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "license": "MIT", "dependencies": { "jsbn": "1.1.0", @@ -11203,8 +8769,6 @@ }, "node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -11212,8 +8776,6 @@ }, "node_modules/is": { "version": "0.2.7", - "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", - "integrity": "sha512-ajQCouIvkcSnl2iRdK70Jug9mohIHVX9uKpoWnl115ov0R5mzBvRrXxrnHbsA+8AdwCwc/sfw7HXmd4I5EJBdQ==", "dev": true, "engines": { "node": "*" @@ -11221,8 +8783,6 @@ }, "node_modules/is-arguments": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "dev": true, "license": "MIT", "dependencies": { @@ -11238,8 +8798,6 @@ }, "node_modules/is-array-buffer": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { @@ -11256,15 +8814,11 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true, "license": "MIT" }, "node_modules/is-async-function": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11283,8 +8837,6 @@ }, "node_modules/is-bigint": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11299,8 +8851,6 @@ }, "node_modules/is-boolean-object": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { @@ -11316,8 +8866,6 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", "engines": { @@ -11329,8 +8877,6 @@ }, "node_modules/is-ci": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11342,8 +8888,6 @@ }, "node_modules/is-core-module": { "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", "dependencies": { @@ -11358,8 +8902,6 @@ }, "node_modules/is-data-view": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { @@ -11376,8 +8918,6 @@ }, "node_modules/is-date-object": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { @@ -11393,8 +8933,6 @@ }, "node_modules/is-docker": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, "license": "MIT", "bin": { @@ -11409,8 +8947,6 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", "engines": { @@ -11419,8 +8955,6 @@ }, "node_modules/is-finalizationregistry": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { @@ -11435,8 +8969,6 @@ }, "node_modules/is-fullwidth-code-point": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, "license": "MIT", "engines": { @@ -11448,8 +8980,6 @@ }, "node_modules/is-generator-function": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11467,8 +8997,6 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { @@ -11480,8 +9008,6 @@ }, "node_modules/is-interactive": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, "license": "MIT", "engines": { @@ -11490,14 +9016,10 @@ }, "node_modules/is-lambda": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "license": "MIT" }, "node_modules/is-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", "engines": { @@ -11509,15 +9031,11 @@ }, "node_modules/is-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", "dev": true, "license": "MIT" }, "node_modules/is-nan": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", "dev": true, "license": "MIT", "dependencies": { @@ -11533,8 +9051,6 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { @@ -11543,8 +9059,6 @@ }, "node_modules/is-number-object": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { @@ -11560,8 +9074,6 @@ }, "node_modules/is-obj": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, "license": "MIT", "engines": { @@ -11570,14 +9082,10 @@ }, "node_modules/is-object": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", - "integrity": "sha512-GkfZZlIZtpkFrqyAXPQSRBMsaHAw+CgoKe2HXAkjd/sfoI9+hS8PT4wg2rJxdQyUKr7N2vHJbg7/jQtE5l5vBQ==", "dev": true }, "node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "license": "MIT", "engines": { @@ -11586,8 +9094,6 @@ }, "node_modules/is-plain-object": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "license": "MIT", "dependencies": { @@ -11599,14 +9105,10 @@ }, "node_modules/is-promise": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, "node_modules/is-regex": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { @@ -11624,8 +9126,6 @@ }, "node_modules/is-set": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", "engines": { @@ -11637,8 +9137,6 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { @@ -11653,8 +9151,6 @@ }, "node_modules/is-ssh": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz", - "integrity": "sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==", "dev": true, "license": "MIT", "dependencies": { @@ -11663,8 +9159,6 @@ }, "node_modules/is-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true, "license": "MIT", "engines": { @@ -11673,8 +9167,6 @@ }, "node_modules/is-string": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { @@ -11690,8 +9182,6 @@ }, "node_modules/is-symbol": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { @@ -11708,8 +9198,6 @@ }, "node_modules/is-text-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", - "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", "dev": true, "license": "MIT", "dependencies": { @@ -11721,8 +9209,6 @@ }, "node_modules/is-typed-array": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11737,8 +9223,6 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "license": "MIT", "engines": { @@ -11750,15 +9234,11 @@ }, "node_modules/is-utf8": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "dev": true, "license": "MIT" }, "node_modules/is-weakmap": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", "engines": { @@ -11770,8 +9250,6 @@ }, "node_modules/is-weakref": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { @@ -11786,8 +9264,6 @@ }, "node_modules/is-weakset": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11803,8 +9279,6 @@ }, "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, "license": "MIT", "engines": { @@ -11813,8 +9287,6 @@ }, "node_modules/is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "license": "MIT", "dependencies": { @@ -11826,28 +9298,20 @@ }, "node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "license": "MIT" }, "node_modules/isbuffer": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", - "integrity": "sha512-xU+NoHp+YtKQkaM2HsQchYn0sltxMxew0HavMfHbjnucBoTSGbw745tL+Z7QBANleWM1eEQMenEpi174mIeS4g==", "dev": true, "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "license": "MIT", "engines": { @@ -11856,8 +9320,6 @@ }, "node_modules/isomorphic-timers-promises": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz", - "integrity": "sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==", "dev": true, "license": "MIT", "engines": { @@ -11866,8 +9328,6 @@ }, "node_modules/jackspeak": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz", - "integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -11882,8 +9342,6 @@ }, "node_modules/jake": { "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11901,8 +9359,6 @@ }, "node_modules/jake/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -11917,8 +9373,6 @@ }, "node_modules/jake/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -11934,8 +9388,6 @@ }, "node_modules/jake/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -11947,8 +9399,6 @@ }, "node_modules/jest-diff": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "license": "MIT", "dependencies": { @@ -11963,8 +9413,6 @@ }, "node_modules/jest-diff/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -11979,8 +9427,6 @@ }, "node_modules/jest-diff/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -11996,8 +9442,6 @@ }, "node_modules/jest-diff/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -12009,8 +9453,6 @@ }, "node_modules/jest-get-type": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, "license": "MIT", "engines": { @@ -12019,8 +9461,6 @@ }, "node_modules/jest-worker": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "license": "MIT", "dependencies": { @@ -12034,8 +9474,6 @@ }, "node_modules/jiti": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", "dev": true, "license": "MIT", "bin": { @@ -12044,15 +9482,11 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -12064,28 +9498,20 @@ }, "node_modules/jsbn": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", "license": "MIT" }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true, "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", - "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", "dev": true, "license": "MIT", "engines": { @@ -12094,22 +9520,16 @@ }, "node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, "license": "MIT" }, "node_modules/json-stringify-nice": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", - "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", "dev": true, "license": "ISC", "funding": { @@ -12118,15 +9538,11 @@ }, "node_modules/json-stringify-safe": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true, "license": "ISC" }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", "bin": { @@ -12138,15 +9554,11 @@ }, "node_modules/jsonc-parser": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true, "license": "MIT" }, "node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12158,8 +9570,6 @@ }, "node_modules/jsonparse": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" @@ -12168,8 +9578,6 @@ }, "node_modules/JSONStream": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "license": "(MIT OR Apache-2.0)", "dependencies": { @@ -12185,22 +9593,16 @@ }, "node_modules/just-diff": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", - "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", "dev": true, "license": "MIT" }, "node_modules/just-diff-apply": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", - "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", "dev": true, "license": "MIT" }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { @@ -12209,8 +9611,6 @@ }, "node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "license": "MIT", "engines": { @@ -12219,8 +9619,6 @@ }, "node_modules/lerna": { "version": "8.2.2", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-8.2.2.tgz", - "integrity": "sha512-GkqBELTG4k7rfzAwRok2pKBvhNo046Hfwcj7TuhDah3q58/BBBAqvIFLfqEI5fglnNOs6maMSn6/MWjccQE55A==", "dev": true, "license": "MIT", "dependencies": { @@ -12314,8 +9712,6 @@ }, "node_modules/lerna/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -12330,8 +9726,6 @@ }, "node_modules/lerna/node_modules/chalk": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "license": "MIT", "dependencies": { @@ -12347,8 +9741,6 @@ }, "node_modules/lerna/node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, "license": "ISC", "engines": { @@ -12357,8 +9749,6 @@ }, "node_modules/lerna/node_modules/dedent": { "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -12372,8 +9762,6 @@ }, "node_modules/lerna/node_modules/fs-extra": { "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", "dev": true, "license": "MIT", "dependencies": { @@ -12387,8 +9775,6 @@ }, "node_modules/lerna/node_modules/fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "license": "ISC", "dependencies": { @@ -12400,8 +9786,6 @@ }, "node_modules/lerna/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "license": "ISC", "dependencies": { @@ -12413,15 +9797,11 @@ }, "node_modules/lerna/node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "license": "ISC" }, "node_modules/lerna/node_modules/minimatch": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "license": "ISC", "dependencies": { @@ -12433,8 +9813,6 @@ }, "node_modules/lerna/node_modules/minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, "license": "ISC", "engines": { @@ -12443,8 +9821,6 @@ }, "node_modules/lerna/node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, "license": "MIT", "bin": { @@ -12456,8 +9832,6 @@ }, "node_modules/lerna/node_modules/node-fetch": { "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12477,15 +9851,11 @@ }, "node_modules/lerna/node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/lerna/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -12497,8 +9867,6 @@ }, "node_modules/lerna/node_modules/tar": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, "license": "ISC", "dependencies": { @@ -12515,8 +9883,6 @@ }, "node_modules/level-blobs": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz", - "integrity": "sha512-n0iYYCGozLd36m/Pzm206+brIgXP8mxPZazZ6ZvgKr+8YwOZ8/PPpYC5zMUu2qFygRN8RO6WC/HH3XWMW7RMVg==", "dev": true, "dependencies": { "level-peek": "1.0.6", @@ -12526,15 +9892,11 @@ }, "node_modules/level-blobs/node_modules/isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true, "license": "MIT" }, "node_modules/level-blobs/node_modules/readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12546,15 +9908,11 @@ }, "node_modules/level-blobs/node_modules/string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "dev": true, "license": "MIT" }, "node_modules/level-filesystem": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz", - "integrity": "sha512-PhXDuCNYpngpxp3jwMT9AYBMgOvB6zxj3DeuIywNKmZqFj2djj9XfT2XDVslfqmo0Ip79cAd3SBy3FsfOZPJ1g==", "dev": true, "dependencies": { "concat-stream": "^1.4.4", @@ -12570,8 +9928,6 @@ }, "node_modules/level-filesystem/node_modules/concat-stream": { "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "engines": [ "node >= 0.8" @@ -12586,8 +9942,6 @@ }, "node_modules/level-filesystem/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { @@ -12602,15 +9956,11 @@ }, "node_modules/level-filesystem/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/level-filesystem/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", "dependencies": { @@ -12619,15 +9969,11 @@ }, "node_modules/level-fix-range": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", - "integrity": "sha512-9llaVn6uqBiSlBP+wKiIEoBa01FwEISFgHSZiyec2S0KpyLUkGR4afW/FCZ/X8y+QJvzS0u4PGOlZDdh1/1avQ==", "dev": true, "license": "MIT" }, "node_modules/level-hooks": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz", - "integrity": "sha512-fxLNny/vL/G4PnkLhWsbHnEaRi+A/k8r5EH/M77npZwYL62RHi2fV0S824z3QdpAk6VTgisJwIRywzBHLK4ZVA==", "dev": true, "dependencies": { "string-range": "~1.2" @@ -12635,9 +9981,6 @@ }, "node_modules/level-js": { "version": "2.2.4", - "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz", - "integrity": "sha512-lZtjt4ZwHE00UMC1vAb271p9qzg8vKlnDeXfIesH3zL0KxhHRDjClQLGLWhyR0nK4XARnd4wc/9eD1ffd4PshQ==", - "deprecated": "Superseded by browser-level (https://github.com/Level/community#faq)", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -12651,8 +9994,6 @@ }, "node_modules/level-js/node_modules/xtend": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", "dev": true, "dependencies": { "object-keys": "~0.4.0" @@ -12663,8 +10004,6 @@ }, "node_modules/level-peek": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz", - "integrity": "sha512-TKEzH5TxROTjQxWMczt9sizVgnmJ4F3hotBI48xCTYvOKd/4gA/uY0XjKkhJFo6BMic8Tqjf6jFMLWeg3MAbqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12673,8 +10012,6 @@ }, "node_modules/level-sublevel": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz", - "integrity": "sha512-tO8jrFp+QZYrxx/Gnmjawuh1UBiifpvKNAcm4KCogesWr1Nm2+ckARitf+Oo7xg4OHqMW76eAqQ204BoIlscjA==", "dev": true, "license": "MIT", "dependencies": { @@ -12686,8 +10023,6 @@ }, "node_modules/level-sublevel/node_modules/clone": { "version": "0.1.19", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", - "integrity": "sha512-IO78I0y6JcSpEPHzK4obKdsL7E7oLdRVDVOLwr2Hkbjsb+Eoz0dxW6tef0WizoKu0gLC4oZSZuEF4U2K6w1WQw==", "dev": true, "license": "MIT", "engines": { @@ -12696,8 +10031,6 @@ }, "node_modules/level-sublevel/node_modules/level-fix-range": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz", - "integrity": "sha512-WrLfGWgwWbYPrHsYzJau+5+te89dUbENBg3/lsxOs4p2tYOhCHjbgXxBAj4DFqp3k/XBwitcRXoCh8RoCogASA==", "dev": true, "license": "MIT", "dependencies": { @@ -12706,9 +10039,6 @@ }, "node_modules/level-sublevel/node_modules/object-keys": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz", - "integrity": "sha512-XODjdR2pBh/1qrjPcbSeSgEtKbYo7LqYNq64/TPuCf7j9SfDD3i21yatKoIy39yIWNvVM59iutfQQpCv1RfFzA==", - "deprecated": "Please update to the latest object-keys", "dev": true, "license": "MIT", "dependencies": { @@ -12719,8 +10049,6 @@ }, "node_modules/level-sublevel/node_modules/xtend": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz", - "integrity": "sha512-fOZg4ECOlrMl+A6Msr7EIFcON1L26mb4NY5rurSkOex/TWhazOrg6eXD/B0XkuiYcYhQDWLXzQxLMVJ7LXwokg==", "dev": true, "dependencies": { "is-object": "~0.1.2", @@ -12732,9 +10060,6 @@ }, "node_modules/levelup": { "version": "0.18.6", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz", - "integrity": "sha512-uB0auyRqIVXx+hrpIUtol4VAPhLRcnxcOsd2i2m6rbFIDarO5dnrupLOStYYpEcu8ZT087Z9HEuYw1wjr6RL6Q==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dev": true, "license": "MIT", "dependencies": { @@ -12749,8 +10074,6 @@ }, "node_modules/levelup/node_modules/bl": { "version": "0.8.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", - "integrity": "sha512-pfqikmByp+lifZCS0p6j6KreV6kNU6Apzpm2nKOk+94cZb/jvle55+JxWiByUQ0Wo/+XnDXEy5MxxKMb6r0VIw==", "dev": true, "license": "MIT", "dependencies": { @@ -12759,22 +10082,16 @@ }, "node_modules/levelup/node_modules/isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true, "license": "MIT" }, "node_modules/levelup/node_modules/prr": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha512-LmUECmrW7RVj6mDWKjTXfKug7TFGdiz9P18HMcO4RHL+RW7MCOGNvpj5j47Rnp6ne6r4fZ2VzyUWEpKbg+tsjQ==", "dev": true, "license": "MIT" }, "node_modules/levelup/node_modules/readable-stream": { "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "license": "MIT", "dependencies": { @@ -12786,8 +10103,6 @@ }, "node_modules/levelup/node_modules/semver": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", - "integrity": "sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==", "dev": true, "license": "BSD", "bin": { @@ -12796,15 +10111,11 @@ }, "node_modules/levelup/node_modules/string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "dev": true, "license": "MIT" }, "node_modules/levelup/node_modules/xtend": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==", "dev": true, "engines": { "node": ">=0.4" @@ -12812,8 +10123,6 @@ }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12826,8 +10135,6 @@ }, "node_modules/libnpmaccess": { "version": "8.0.6", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-8.0.6.tgz", - "integrity": "sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw==", "dev": true, "license": "ISC", "dependencies": { @@ -12840,8 +10147,6 @@ }, "node_modules/libnpmpublish": { "version": "9.0.9", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-9.0.9.tgz", - "integrity": "sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg==", "dev": true, "license": "ISC", "dependencies": { @@ -12860,8 +10165,6 @@ }, "node_modules/libnpmpublish/node_modules/ci-info": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", "dev": true, "funding": [ { @@ -12876,8 +10179,6 @@ }, "node_modules/lilconfig": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, "license": "MIT", "engines": { @@ -12889,8 +10190,6 @@ }, "node_modules/lines-and-columns": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", "dev": true, "license": "MIT", "engines": { @@ -12899,8 +10198,6 @@ }, "node_modules/lint-staged": { "version": "16.0.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.0.0.tgz", - "integrity": "sha512-sUCprePs6/rbx4vKC60Hez6X10HPkpDJaGcy3D1NdwR7g1RcNkWL8q9mJMreOqmHBTs+1sNFp+wOiX9fr+hoOQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12927,8 +10224,6 @@ }, "node_modules/listr2": { "version": "8.3.3", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", - "integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12945,8 +10240,6 @@ }, "node_modules/listr2/node_modules/ansi-regex": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "license": "MIT", "engines": { @@ -12958,8 +10251,6 @@ }, "node_modules/listr2/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "license": "MIT", "engines": { @@ -12971,15 +10262,11 @@ }, "node_modules/listr2/node_modules/emoji-regex": { "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true, "license": "MIT" }, "node_modules/listr2/node_modules/string-width": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12996,8 +10283,6 @@ }, "node_modules/listr2/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13012,8 +10297,6 @@ }, "node_modules/listr2/node_modules/wrap-ansi": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -13030,8 +10313,6 @@ }, "node_modules/load-json-file": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13046,8 +10327,6 @@ }, "node_modules/load-json-file/node_modules/type-fest": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -13056,8 +10335,6 @@ }, "node_modules/loader-runner": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, "license": "MIT", "engines": { @@ -13066,8 +10343,6 @@ }, "node_modules/locate-path": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, "license": "MIT", "dependencies": { @@ -13082,92 +10357,66 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true, "license": "MIT" }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "dev": true, "license": "MIT" }, "node_modules/lodash.ismatch": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", "dev": true, "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", "dev": true, "license": "MIT" }, "node_modules/lodash.kebabcase": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", "dev": true, "license": "MIT" }, "node_modules/lodash.map": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", "dev": true, "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, "license": "MIT" }, "node_modules/lodash.mergewith": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", - "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", "dev": true, "license": "MIT" }, "node_modules/lodash.snakecase": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", "dev": true, "license": "MIT" }, "node_modules/lodash.startcase": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", "dev": true, "license": "MIT" }, "node_modules/lodash.uniq": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true, "license": "MIT" }, "node_modules/lodash.upperfirst": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", - "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", "dev": true, "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "license": "MIT", "dependencies": { @@ -13183,8 +10432,6 @@ }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -13199,8 +10446,6 @@ }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -13216,8 +10461,6 @@ }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -13229,8 +10472,6 @@ }, "node_modules/log-update": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, "license": "MIT", "dependencies": { @@ -13249,8 +10490,6 @@ }, "node_modules/log-update/node_modules/ansi-escapes": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", "dev": true, "license": "MIT", "dependencies": { @@ -13265,8 +10504,6 @@ }, "node_modules/log-update/node_modules/ansi-regex": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "license": "MIT", "engines": { @@ -13278,8 +10515,6 @@ }, "node_modules/log-update/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "license": "MIT", "engines": { @@ -13291,8 +10526,6 @@ }, "node_modules/log-update/node_modules/cli-cursor": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "license": "MIT", "dependencies": { @@ -13307,15 +10540,11 @@ }, "node_modules/log-update/node_modules/emoji-regex": { "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true, "license": "MIT" }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", - "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", "dev": true, "license": "MIT", "dependencies": { @@ -13330,8 +10559,6 @@ }, "node_modules/log-update/node_modules/onetime": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13346,8 +10573,6 @@ }, "node_modules/log-update/node_modules/restore-cursor": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "license": "MIT", "dependencies": { @@ -13363,8 +10588,6 @@ }, "node_modules/log-update/node_modules/slice-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", - "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", "dev": true, "license": "MIT", "dependencies": { @@ -13380,8 +10603,6 @@ }, "node_modules/log-update/node_modules/string-width": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13398,8 +10619,6 @@ }, "node_modules/log-update/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13414,8 +10633,6 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -13432,8 +10649,6 @@ }, "node_modules/longest": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", - "integrity": "sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==", "dev": true, "license": "MIT", "engines": { @@ -13442,22 +10657,16 @@ }, "node_modules/lru-cache": { "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, "license": "ISC" }, "node_modules/ltgt": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", "dev": true, "license": "MIT" }, "node_modules/magic-string": { "version": "0.22.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", - "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", "dev": true, "license": "MIT", "dependencies": { @@ -13466,8 +10675,6 @@ }, "node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", "dependencies": { @@ -13482,15 +10689,11 @@ }, "node_modules/make-error": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true, "license": "ISC" }, "node_modules/make-fetch-happen": { "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", "license": "ISC", "dependencies": { "agentkeepalive": "^4.2.1", @@ -13516,8 +10719,6 @@ }, "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", "license": "ISC", "dependencies": { "@gar/promisify": "^1.1.3", @@ -13529,8 +10730,6 @@ }, "node_modules/make-fetch-happen/node_modules/agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "license": "MIT", "dependencies": { "debug": "4" @@ -13541,8 +10740,6 @@ }, "node_modules/make-fetch-happen/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==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -13550,8 +10747,6 @@ }, "node_modules/make-fetch-happen/node_modules/cacache": { "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", "license": "ISC", "dependencies": { "@npmcli/fs": "^2.1.0", @@ -13579,8 +10774,6 @@ }, "node_modules/make-fetch-happen/node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "license": "ISC", "engines": { "node": ">=10" @@ -13588,8 +10781,6 @@ }, "node_modules/make-fetch-happen/node_modules/fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "license": "ISC", "dependencies": { "minipass": "^3.0.0" @@ -13600,9 +10791,6 @@ }, "node_modules/make-fetch-happen/node_modules/glob": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -13620,8 +10808,6 @@ }, "node_modules/make-fetch-happen/node_modules/https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "license": "MIT", "dependencies": { "agent-base": "6", @@ -13633,8 +10819,6 @@ }, "node_modules/make-fetch-happen/node_modules/lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "license": "ISC", "engines": { "node": ">=12" @@ -13642,8 +10826,6 @@ }, "node_modules/make-fetch-happen/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -13654,8 +10836,6 @@ }, "node_modules/make-fetch-happen/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -13666,8 +10846,6 @@ }, "node_modules/make-fetch-happen/node_modules/minipass-collect": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "license": "ISC", "dependencies": { "minipass": "^3.0.0" @@ -13678,8 +10856,6 @@ }, "node_modules/make-fetch-happen/node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" @@ -13690,8 +10866,6 @@ }, "node_modules/make-fetch-happen/node_modules/negotiator": { "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -13699,9 +10873,6 @@ }, "node_modules/make-fetch-happen/node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", "license": "ISC", "dependencies": { "glob": "^7.1.3" @@ -13715,8 +10886,6 @@ }, "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -13725,9 +10894,6 @@ }, "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -13746,8 +10912,6 @@ }, "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -13758,8 +10922,6 @@ }, "node_modules/make-fetch-happen/node_modules/ssri": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "license": "ISC", "dependencies": { "minipass": "^3.1.1" @@ -13770,8 +10932,6 @@ }, "node_modules/make-fetch-happen/node_modules/tar": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "license": "ISC", "dependencies": { "chownr": "^2.0.0", @@ -13787,8 +10947,6 @@ }, "node_modules/make-fetch-happen/node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "license": "ISC", "engines": { "node": ">=8" @@ -13796,8 +10954,6 @@ }, "node_modules/make-fetch-happen/node_modules/unique-filename": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", "license": "ISC", "dependencies": { "unique-slug": "^3.0.0" @@ -13808,8 +10964,6 @@ }, "node_modules/make-fetch-happen/node_modules/unique-slug": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" @@ -13820,8 +10974,6 @@ }, "node_modules/map-obj": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, "license": "MIT", "engines": { @@ -13833,8 +10985,6 @@ }, "node_modules/math-intrinsics": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -13842,8 +10992,6 @@ }, "node_modules/md5.js": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "license": "MIT", "dependencies": { @@ -13854,8 +11002,6 @@ }, "node_modules/media-typer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -13863,8 +11009,6 @@ }, "node_modules/meow": { "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", "dev": true, "license": "MIT", "engines": { @@ -13876,15 +11020,11 @@ }, "node_modules/merge": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", - "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==", "dev": true, "license": "MIT" }, "node_modules/merge-descriptors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "license": "MIT", "engines": { "node": ">=18" @@ -13895,15 +11035,11 @@ }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { @@ -13912,8 +11048,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -13926,8 +11060,6 @@ }, "node_modules/micromatch/node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -13939,8 +11071,6 @@ }, "node_modules/miller-rabin": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "license": "MIT", "dependencies": { @@ -13953,15 +11083,11 @@ }, "node_modules/miller-rabin/node_modules/bn.js": { "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, "license": "MIT" }, "node_modules/mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "license": "MIT", "bin": { "mime": "cli.js" @@ -13972,8 +11098,6 @@ }, "node_modules/mime-db": { "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -13981,8 +11105,6 @@ }, "node_modules/mime-types": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" @@ -13993,8 +11115,6 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", "engines": { @@ -14003,8 +11123,6 @@ }, "node_modules/mimic-function": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", "dev": true, "license": "MIT", "engines": { @@ -14016,8 +11134,6 @@ }, "node_modules/min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "license": "MIT", "engines": { @@ -14026,22 +11142,16 @@ }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true, "license": "ISC" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", "dev": true, "license": "MIT" }, "node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -14052,8 +11162,6 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -14061,8 +11169,6 @@ }, "node_modules/minimist-options": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "license": "MIT", "dependencies": { @@ -14076,8 +11182,6 @@ }, "node_modules/minimist-options/node_modules/arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "license": "MIT", "engines": { @@ -14086,8 +11190,6 @@ }, "node_modules/minipass": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -14095,8 +11197,6 @@ }, "node_modules/minipass-collect": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dev": true, "license": "ISC", "dependencies": { @@ -14108,8 +11208,6 @@ }, "node_modules/minipass-fetch": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "license": "MIT", "dependencies": { "minipass": "^3.1.6", @@ -14125,8 +11223,6 @@ }, "node_modules/minipass-fetch/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -14137,8 +11233,6 @@ }, "node_modules/minipass-flush": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "license": "ISC", "dependencies": { "minipass": "^3.0.0" @@ -14149,8 +11243,6 @@ }, "node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -14161,8 +11253,6 @@ }, "node_modules/minipass-pipeline": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "license": "ISC", "dependencies": { "minipass": "^3.0.0" @@ -14173,8 +11263,6 @@ }, "node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -14185,8 +11273,6 @@ }, "node_modules/minipass-sized": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "license": "ISC", "dependencies": { "minipass": "^3.0.0" @@ -14197,8 +11283,6 @@ }, "node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -14209,8 +11293,6 @@ }, "node_modules/minizlib": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "license": "MIT", "dependencies": { "minipass": "^3.0.0", @@ -14222,8 +11304,6 @@ }, "node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -14234,8 +11314,6 @@ }, "node_modules/mkdirp": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" @@ -14249,8 +11327,6 @@ }, "node_modules/mocha": { "version": "11.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.2.2.tgz", - "integrity": "sha512-VlSBxrPYHK4YNOEbFdkCxHQbZMoNzBkoPprqtZRW6311EUF/DlSxoycE2e/2NtRk4WKkIXzyrXDTrlikJMWgbw==", "dev": true, "license": "MIT", "dependencies": { @@ -14285,8 +11361,6 @@ }, "node_modules/mocha/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, "license": "MIT", "dependencies": { @@ -14295,8 +11369,6 @@ }, "node_modules/mocha/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -14312,8 +11384,6 @@ }, "node_modules/mocha/node_modules/glob": { "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { @@ -14333,8 +11403,6 @@ }, "node_modules/mocha/node_modules/glob/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -14349,8 +11417,6 @@ }, "node_modules/mocha/node_modules/jackspeak": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -14365,8 +11431,6 @@ }, "node_modules/mocha/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -14381,8 +11445,6 @@ }, "node_modules/mocha/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "license": "ISC", "dependencies": { @@ -14394,8 +11456,6 @@ }, "node_modules/mocha/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14410,8 +11470,6 @@ }, "node_modules/mocha/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -14426,8 +11484,6 @@ }, "node_modules/mocha/node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -14436,8 +11492,6 @@ }, "node_modules/mocha/node_modules/path-scurry": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -14453,8 +11507,6 @@ }, "node_modules/mocha/node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { @@ -14466,8 +11518,6 @@ }, "node_modules/modify-values": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true, "license": "MIT", "engines": { @@ -14476,14 +11526,10 @@ }, "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==", "license": "MIT" }, "node_modules/multimatch": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", "dev": true, "license": "MIT", "dependencies": { @@ -14502,15 +11548,11 @@ }, "node_modules/mute-stream": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true, "license": "ISC" }, "node_modules/nano-spawn": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-1.0.1.tgz", - "integrity": "sha512-BfcvzBlUTxSDWfT+oH7vd6CbUV+rThLLHCIym/QO6GGLBsyVXleZs00fto2i2jzC/wPiBYk5jyOmpXWg4YopiA==", "dev": true, "license": "MIT", "engines": { @@ -14522,15 +11564,11 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, "license": "MIT" }, "node_modules/negotiator": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -14538,21 +11576,15 @@ }, "node_modules/neo-async": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true, "license": "MIT" }, "node_modules/node-addon-api": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", "license": "MIT" }, "node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -14571,8 +11603,6 @@ }, "node_modules/node-gyp": { "version": "9.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", - "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", "license": "MIT", "dependencies": { "env-paths": "^2.2.0", @@ -14596,14 +11626,10 @@ }, "node_modules/node-gyp/node_modules/abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "license": "ISC" }, "node_modules/node-gyp/node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "license": "ISC", "engines": { "node": ">=10" @@ -14611,8 +11637,6 @@ }, "node_modules/node-gyp/node_modules/fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "license": "ISC", "dependencies": { "minipass": "^3.0.0" @@ -14623,8 +11647,6 @@ }, "node_modules/node-gyp/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -14635,9 +11657,6 @@ }, "node_modules/node-gyp/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -14656,8 +11675,6 @@ }, "node_modules/node-gyp/node_modules/minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "license": "ISC", "engines": { "node": ">=8" @@ -14665,8 +11682,6 @@ }, "node_modules/node-gyp/node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" @@ -14677,8 +11692,6 @@ }, "node_modules/node-gyp/node_modules/nopt": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "license": "ISC", "dependencies": { "abbrev": "^1.0.0" @@ -14692,9 +11705,6 @@ }, "node_modules/node-gyp/node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", "license": "ISC", "dependencies": { "glob": "^7.1.3" @@ -14708,8 +11718,6 @@ }, "node_modules/node-gyp/node_modules/tar": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "license": "ISC", "dependencies": { "chownr": "^2.0.0", @@ -14725,15 +11733,11 @@ }, "node_modules/node-machine-id": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", - "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", "dev": true, "license": "MIT" }, "node_modules/node-polyfill-webpack-plugin": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/node-polyfill-webpack-plugin/-/node-polyfill-webpack-plugin-4.1.0.tgz", - "integrity": "sha512-b4ei444EKkOagG/yFqojrD3QTYM5IOU1f8tn9o6uwrG4qL+brI7oVhjPVd0ZL2xy+Z6CP5bu9w8XTvlWgiXHcw==", "dev": true, "license": "MIT", "dependencies": { @@ -14749,8 +11753,6 @@ }, "node_modules/node-polyfill-webpack-plugin/node_modules/type-fest": { "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -14762,15 +11764,11 @@ }, "node_modules/node-releases": { "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true, "license": "MIT" }, "node_modules/node-stdlib-browser": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-stdlib-browser/-/node-stdlib-browser-1.3.1.tgz", - "integrity": "sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw==", "dev": true, "license": "MIT", "dependencies": { @@ -14808,8 +11806,6 @@ }, "node_modules/node-stdlib-browser/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -14825,8 +11821,6 @@ }, "node_modules/node-stdlib-browser/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -14841,8 +11835,6 @@ }, "node_modules/node-stdlib-browser/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14857,8 +11849,6 @@ }, "node_modules/node-stdlib-browser/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -14873,8 +11863,6 @@ }, "node_modules/node-stdlib-browser/node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -14883,8 +11871,6 @@ }, "node_modules/node-stdlib-browser/node_modules/pkg-dir": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, "license": "MIT", "dependencies": { @@ -14896,15 +11882,11 @@ }, "node_modules/node-stdlib-browser/node_modules/punycode": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true, "license": "MIT" }, "node_modules/node-stdlib-browser/node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { @@ -14916,8 +11898,6 @@ }, "node_modules/nopt": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", - "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", "license": "ISC", "dependencies": { "abbrev": "^3.0.0" @@ -14931,8 +11911,6 @@ }, "node_modules/normalize-package-data": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -14946,8 +11924,6 @@ }, "node_modules/npm-bundled": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", - "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", "dev": true, "license": "ISC", "dependencies": { @@ -14959,8 +11935,6 @@ }, "node_modules/npm-install-checks": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", - "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -14972,8 +11946,6 @@ }, "node_modules/npm-normalize-package-bin": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, "license": "ISC", "engines": { @@ -14982,8 +11954,6 @@ }, "node_modules/npm-package-arg": { "version": "11.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", - "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", "dev": true, "license": "ISC", "dependencies": { @@ -14998,8 +11968,6 @@ }, "node_modules/npm-packlist": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", - "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", "dev": true, "license": "ISC", "dependencies": { @@ -15011,8 +11979,6 @@ }, "node_modules/npm-pick-manifest": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz", - "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==", "dev": true, "license": "ISC", "dependencies": { @@ -15027,8 +11993,6 @@ }, "node_modules/npm-registry-fetch": { "version": "17.1.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", - "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", "dev": true, "license": "ISC", "dependencies": { @@ -15047,8 +12011,6 @@ }, "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", "dev": true, "license": "ISC", "dependencies": { @@ -15071,8 +12033,6 @@ }, "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", "dev": true, "license": "MIT", "dependencies": { @@ -15089,8 +12049,6 @@ }, "node_modules/npm-registry-fetch/node_modules/negotiator": { "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "dev": true, "license": "MIT", "engines": { @@ -15099,8 +12057,6 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "license": "MIT", "dependencies": { @@ -15112,9 +12068,6 @@ }, "node_modules/npmlog": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "deprecated": "This package is no longer supported.", "license": "ISC", "dependencies": { "are-we-there-yet": "^3.0.0", @@ -15128,8 +12081,6 @@ }, "node_modules/nx": { "version": "20.8.1", - "resolved": "https://registry.npmjs.org/nx/-/nx-20.8.1.tgz", - "integrity": "sha512-73Uw8YXpsjeLqHSl7NMCmGdCs+8ynPzoNJFWAqVanPETEY9zPd5wevVQmeyzYtNNQU35uj6Os4iUzYunmwnFaA==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -15200,8 +12151,6 @@ }, "node_modules/nx/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -15216,8 +12165,6 @@ }, "node_modules/nx/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, "license": "MIT", "dependencies": { @@ -15226,8 +12173,6 @@ }, "node_modules/nx/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -15243,8 +12188,6 @@ }, "node_modules/nx/node_modules/minimatch": { "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "license": "ISC", "dependencies": { @@ -15259,8 +12202,6 @@ }, "node_modules/nx/node_modules/ora": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", "dev": true, "license": "MIT", "dependencies": { @@ -15282,8 +12223,6 @@ }, "node_modules/nx/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -15295,28 +12234,14 @@ }, "node_modules/nx/node_modules/tmp": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true, "license": "MIT", "engines": { "node": ">=14.14" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -15327,8 +12252,6 @@ }, "node_modules/object-is": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -15344,15 +12267,11 @@ }, "node_modules/object-keys": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", "dev": true, "license": "MIT" }, "node_modules/object.assign": { "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { @@ -15372,8 +12291,6 @@ }, "node_modules/object.assign/node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -15382,8 +12299,6 @@ }, "node_modules/object.entries": { "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", "dev": true, "license": "MIT", "dependencies": { @@ -15398,8 +12313,6 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15417,8 +12330,6 @@ }, "node_modules/object.groupby": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15432,8 +12343,6 @@ }, "node_modules/object.values": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { @@ -15451,15 +12360,11 @@ }, "node_modules/octal": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz", - "integrity": "sha512-nnda7W8d+A3vEIY+UrDQzzboPf1vhs4JYVhff5CDkq9QNoZY7Xrxeo/htox37j9dZf7yNHevZzqtejWgy1vCqQ==", "dev": true, "license": "MIT" }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -15470,8 +12375,6 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "license": "ISC", "dependencies": { "wrappy": "1" @@ -15479,8 +12382,6 @@ }, "node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", "dependencies": { @@ -15495,8 +12396,6 @@ }, "node_modules/open": { "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15513,8 +12412,6 @@ }, "node_modules/opener": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "license": "(WTFPL OR MIT)", "bin": { "opener": "bin/opener-bin.js" @@ -15522,8 +12419,6 @@ }, "node_modules/optionator": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { @@ -15540,8 +12435,6 @@ }, "node_modules/ora": { "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15564,8 +12457,6 @@ }, "node_modules/ora/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -15580,8 +12471,6 @@ }, "node_modules/ora/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -15597,8 +12486,6 @@ }, "node_modules/ora/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -15610,15 +12497,11 @@ }, "node_modules/os-browserify": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", "dev": true, "license": "MIT" }, "node_modules/os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "license": "MIT", "engines": { @@ -15627,8 +12510,6 @@ }, "node_modules/own-keys": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, "license": "MIT", "dependencies": { @@ -15645,8 +12526,6 @@ }, "node_modules/own-keys/node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -15655,8 +12534,6 @@ }, "node_modules/p-finally": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, "license": "MIT", "engines": { @@ -15665,8 +12542,6 @@ }, "node_modules/p-limit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15681,8 +12556,6 @@ }, "node_modules/p-locate": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, "license": "MIT", "dependencies": { @@ -15697,8 +12570,6 @@ }, "node_modules/p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" @@ -15712,8 +12583,6 @@ }, "node_modules/p-map-series": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", - "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", "dev": true, "license": "MIT", "engines": { @@ -15722,8 +12591,6 @@ }, "node_modules/p-pipe": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", "dev": true, "license": "MIT", "engines": { @@ -15735,8 +12602,6 @@ }, "node_modules/p-queue": { "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15752,15 +12617,11 @@ }, "node_modules/p-queue/node_modules/eventemitter3": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true, "license": "MIT" }, "node_modules/p-reduce": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", "dev": true, "license": "MIT", "engines": { @@ -15769,8 +12630,6 @@ }, "node_modules/p-timeout": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, "license": "MIT", "dependencies": { @@ -15782,8 +12641,6 @@ }, "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "license": "MIT", "engines": { @@ -15792,8 +12649,6 @@ }, "node_modules/p-waterfall": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", - "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", "dev": true, "license": "MIT", "dependencies": { @@ -15808,15 +12663,11 @@ }, "node_modules/package-json-from-dist": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/pacote": { "version": "18.0.6", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz", - "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", "dev": true, "license": "ISC", "dependencies": { @@ -15847,8 +12698,6 @@ }, "node_modules/pacote/node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, "license": "ISC", "engines": { @@ -15857,8 +12706,6 @@ }, "node_modules/pacote/node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, "license": "MIT", "bin": { @@ -15870,8 +12717,6 @@ }, "node_modules/pacote/node_modules/tar": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, "license": "ISC", "dependencies": { @@ -15888,8 +12733,6 @@ }, "node_modules/pacote/node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "license": "ISC", "dependencies": { @@ -15901,8 +12744,6 @@ }, "node_modules/pacote/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "license": "ISC", "dependencies": { @@ -15914,8 +12755,6 @@ }, "node_modules/pacote/node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, "license": "ISC", "engines": { @@ -15924,8 +12763,6 @@ }, "node_modules/pad": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/pad/-/pad-3.3.0.tgz", - "integrity": "sha512-2/G2Q8J/lbkJ3Zf595U9jattrUkM1rwTr3s4n9smp3+ALe66V+t3I75SG0qjWzuQgmXOgiUS0/qE97S+0hP7Cw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -15940,15 +12777,11 @@ }, "node_modules/pako": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true, "license": "(MIT AND Zlib)" }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { @@ -15960,8 +12793,6 @@ }, "node_modules/parse-asn1": { "version": "5.1.7", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", - "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dev": true, "license": "ISC", "dependencies": { @@ -15978,8 +12809,6 @@ }, "node_modules/parse-conflict-json": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz", - "integrity": "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==", "dev": true, "license": "ISC", "dependencies": { @@ -15993,8 +12822,6 @@ }, "node_modules/parse-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "license": "MIT", "dependencies": { @@ -16012,22 +12839,16 @@ }, "node_modules/parse-json/node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, "license": "MIT" }, "node_modules/parse-json/node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true, "license": "MIT" }, "node_modules/parse-passwd": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true, "license": "MIT", "engines": { @@ -16036,8 +12857,6 @@ }, "node_modules/parse-path": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.1.0.tgz", - "integrity": "sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==", "dev": true, "license": "MIT", "dependencies": { @@ -16046,8 +12865,6 @@ }, "node_modules/parse-url": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", - "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", "dev": true, "license": "MIT", "dependencies": { @@ -16056,8 +12873,6 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -16065,15 +12880,11 @@ }, "node_modules/path-browserify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true, "license": "MIT" }, "node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, "license": "MIT", "engines": { @@ -16082,8 +12893,6 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -16091,8 +12900,6 @@ }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", "engines": { @@ -16101,15 +12908,11 @@ }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, "license": "MIT" }, "node_modules/path-scurry": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -16125,8 +12928,6 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", - "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", "dev": true, "license": "ISC", "engines": { @@ -16135,8 +12936,6 @@ }, "node_modules/path-to-regexp": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", "license": "MIT", "engines": { "node": ">=16" @@ -16144,8 +12943,6 @@ }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", "engines": { @@ -16154,8 +12951,6 @@ }, "node_modules/pbkdf2": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "license": "MIT", "dependencies": { @@ -16171,15 +12966,11 @@ }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "license": "MIT", "engines": { @@ -16191,8 +12982,6 @@ }, "node_modules/pidtree": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, "license": "MIT", "bin": { @@ -16204,8 +12993,6 @@ }, "node_modules/pify": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", "dev": true, "license": "MIT", "engines": { @@ -16215,20 +13002,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkce-challenge": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", - "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.20.0" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16240,8 +13015,6 @@ }, "node_modules/pkg-dir/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, "license": "MIT", "dependencies": { @@ -16254,8 +13027,6 @@ }, "node_modules/pkg-dir/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, "license": "MIT", "dependencies": { @@ -16267,8 +13038,6 @@ }, "node_modules/pkg-dir/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, "license": "MIT", "dependencies": { @@ -16283,8 +13052,6 @@ }, "node_modules/pkg-dir/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, "license": "MIT", "dependencies": { @@ -16296,8 +13063,6 @@ }, "node_modules/pkg-dir/node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -16306,8 +13071,6 @@ }, "node_modules/portfinder": { "version": "1.0.37", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.37.tgz", - "integrity": "sha512-yuGIEjDAYnnOex9ddMnKZEMFE0CcGo6zbfzDklkmT1m5z734ss6JMzN9rNB3+RR7iS+F10D4/BVIaXOyh8PQKw==", "license": "MIT", "dependencies": { "async": "^3.2.6", @@ -16319,8 +13082,6 @@ }, "node_modules/possible-typed-array-names": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, "license": "MIT", "engines": { @@ -16329,8 +13090,6 @@ }, "node_modules/postcss-selector-parser": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "license": "MIT", "dependencies": { @@ -16343,8 +13102,6 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { @@ -16353,8 +13110,6 @@ }, "node_modules/prettier": { "version": "3.5.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", - "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, "license": "MIT", "bin": { @@ -16369,8 +13124,6 @@ }, "node_modules/prettier-linter-helpers": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "license": "MIT", "dependencies": { @@ -16382,8 +13135,6 @@ }, "node_modules/pretty-format": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16397,8 +13148,6 @@ }, "node_modules/proc-log": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", "dev": true, "license": "ISC", "engines": { @@ -16407,8 +13156,6 @@ }, "node_modules/process": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, "license": "MIT", "engines": { @@ -16417,22 +13164,16 @@ }, "node_modules/process-es6": { "version": "0.11.6", - "resolved": "https://registry.npmjs.org/process-es6/-/process-es6-0.11.6.tgz", - "integrity": "sha512-GYBRQtL4v3wgigq10Pv58jmTbFXlIiTbSfgnNqZLY0ldUPqy1rRxDI5fCjoCpnM6TqmHQI8ydzTBXW86OYc0gA==", "dev": true, "license": "MIT" }, "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, "license": "MIT" }, "node_modules/proggy": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/proggy/-/proggy-2.0.0.tgz", - "integrity": "sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A==", "dev": true, "license": "ISC", "engines": { @@ -16441,8 +13182,6 @@ }, "node_modules/promise-all-reject-late": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", "dev": true, "license": "ISC", "funding": { @@ -16451,8 +13190,6 @@ }, "node_modules/promise-call-limit": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.2.tgz", - "integrity": "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw==", "dev": true, "license": "ISC", "funding": { @@ -16461,14 +13198,10 @@ }, "node_modules/promise-inflight": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "license": "ISC" }, "node_modules/promise-retry": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "license": "MIT", "dependencies": { "err-code": "^2.0.2", @@ -16480,8 +13213,6 @@ }, "node_modules/promzard": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-1.0.2.tgz", - "integrity": "sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ==", "dev": true, "license": "ISC", "dependencies": { @@ -16493,15 +13224,11 @@ }, "node_modules/protocols": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz", - "integrity": "sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==", "dev": true, "license": "MIT" }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -16513,22 +13240,16 @@ }, "node_modules/proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true, "license": "MIT" }, "node_modules/prr": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true, "license": "MIT" }, "node_modules/public-encrypt": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -16542,15 +13263,11 @@ }, "node_modules/public-encrypt/node_modules/bn.js": { "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { @@ -16559,8 +13276,6 @@ }, "node_modules/qs": { "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -16574,8 +13289,6 @@ }, "node_modules/querystring-es3": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", "dev": true, "engines": { "node": ">=0.4.x" @@ -16583,8 +13296,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -16604,8 +13315,6 @@ }, "node_modules/quick-lru": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, "license": "MIT", "engines": { @@ -16614,8 +13323,6 @@ }, "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16624,8 +13331,6 @@ }, "node_modules/randomfill": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "license": "MIT", "dependencies": { @@ -16635,8 +13340,6 @@ }, "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -16644,8 +13347,6 @@ }, "node_modules/raw-body": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -16659,15 +13360,11 @@ }, "node_modules/react-is": { "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, "license": "MIT" }, "node_modules/read": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/read/-/read-3.0.1.tgz", - "integrity": "sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==", "dev": true, "license": "ISC", "dependencies": { @@ -16679,8 +13376,6 @@ }, "node_modules/read-cmd-shim": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", - "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", "dev": true, "license": "ISC", "engines": { @@ -16689,8 +13384,6 @@ }, "node_modules/read-package-json-fast": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", "dev": true, "license": "ISC", "dependencies": { @@ -16703,8 +13396,6 @@ }, "node_modules/read-pkg": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, "license": "MIT", "dependencies": { @@ -16718,8 +13409,6 @@ }, "node_modules/read-pkg-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", "dev": true, "license": "MIT", "dependencies": { @@ -16732,8 +13421,6 @@ }, "node_modules/read-pkg-up/node_modules/find-up": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16745,8 +13432,6 @@ }, "node_modules/read-pkg-up/node_modules/locate-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, "license": "MIT", "dependencies": { @@ -16759,8 +13444,6 @@ }, "node_modules/read-pkg-up/node_modules/p-limit": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -16772,8 +13455,6 @@ }, "node_modules/read-pkg-up/node_modules/p-locate": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, "license": "MIT", "dependencies": { @@ -16785,8 +13466,6 @@ }, "node_modules/read-pkg-up/node_modules/p-try": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, "license": "MIT", "engines": { @@ -16795,8 +13474,6 @@ }, "node_modules/read-pkg-up/node_modules/path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, "license": "MIT", "engines": { @@ -16805,15 +13482,11 @@ }, "node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/read-pkg/node_modules/load-json-file": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "license": "MIT", "dependencies": { @@ -16828,8 +13501,6 @@ }, "node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -16841,8 +13512,6 @@ }, "node_modules/read-pkg/node_modules/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "license": "MIT", "dependencies": { @@ -16855,8 +13524,6 @@ }, "node_modules/read-pkg/node_modules/path-type": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "license": "MIT", "dependencies": { @@ -16868,8 +13535,6 @@ }, "node_modules/read-pkg/node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "license": "MIT", "engines": { @@ -16878,8 +13543,6 @@ }, "node_modules/read-pkg/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -16888,8 +13551,6 @@ }, "node_modules/read-pkg/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -16898,8 +13559,6 @@ }, "node_modules/read/node_modules/mute-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", "dev": true, "license": "ISC", "engines": { @@ -16908,8 +13567,6 @@ }, "node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -16922,8 +13579,6 @@ }, "node_modules/readdirp": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, "license": "MIT", "engines": { @@ -16936,8 +13591,6 @@ }, "node_modules/rechoir": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16949,8 +13602,6 @@ }, "node_modules/redent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "license": "MIT", "dependencies": { @@ -16963,8 +13614,6 @@ }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "license": "MIT", "dependencies": { @@ -16986,8 +13635,6 @@ }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", "dependencies": { @@ -17007,8 +13654,6 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", "engines": { @@ -17017,8 +13662,6 @@ }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, "license": "MIT", "engines": { @@ -17027,14 +13670,10 @@ }, "node_modules/requires-port": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "license": "MIT" }, "node_modules/resolve": { "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, "license": "MIT", "dependencies": { @@ -17054,8 +13693,6 @@ }, "node_modules/resolve-cwd": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "license": "MIT", "dependencies": { @@ -17067,8 +13704,6 @@ }, "node_modules/resolve-dir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dev": true, "license": "MIT", "dependencies": { @@ -17081,8 +13716,6 @@ }, "node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { @@ -17091,8 +13724,6 @@ }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, "license": "MIT", "funding": { @@ -17101,8 +13732,6 @@ }, "node_modules/resolve.exports": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, "license": "MIT", "engines": { @@ -17111,8 +13740,6 @@ }, "node_modules/restore-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "license": "MIT", "dependencies": { @@ -17125,15 +13752,11 @@ }, "node_modules/restore-cursor/node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "license": "MIT", "engines": { "node": ">= 4" @@ -17141,8 +13764,6 @@ }, "node_modules/reusify": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { @@ -17152,15 +13773,11 @@ }, "node_modules/rfdc": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true, "license": "MIT" }, "node_modules/rimraf": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", "dev": true, "license": "ISC", "dependencies": { @@ -17178,8 +13795,6 @@ }, "node_modules/rimraf/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, "license": "MIT", "dependencies": { @@ -17188,8 +13803,6 @@ }, "node_modules/rimraf/node_modules/glob": { "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, "license": "ISC", "dependencies": { @@ -17207,8 +13820,6 @@ }, "node_modules/rimraf/node_modules/minimatch": { "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, "license": "ISC", "dependencies": { @@ -17223,8 +13834,6 @@ }, "node_modules/rimraf/node_modules/minipass": { "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, "license": "ISC", "engines": { @@ -17233,8 +13842,6 @@ }, "node_modules/rimraf/node_modules/path-scurry": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -17250,8 +13857,6 @@ }, "node_modules/rimraf/node_modules/path-scurry/node_modules/minipass": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "license": "ISC", "engines": { @@ -17260,8 +13865,6 @@ }, "node_modules/ripemd160": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "license": "MIT", "dependencies": { @@ -17271,8 +13874,6 @@ }, "node_modules/rollup": { "version": "4.40.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.2.tgz", - "integrity": "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==", "dev": true, "license": "MIT", "dependencies": { @@ -17311,8 +13912,6 @@ }, "node_modules/rollup-plugin-node-builtins": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz", - "integrity": "sha512-bxdnJw8jIivr2yEyt8IZSGqZkygIJOGAWypXvHXnwKAbUcN4Q/dGTx7K0oAJryC/m6aq6tKutltSeXtuogU6sw==", "dev": true, "license": "ISC", "dependencies": { @@ -17324,8 +13923,6 @@ }, "node_modules/rollup-plugin-node-globals": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz", - "integrity": "sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g==", "dev": true, "license": "MIT", "dependencies": { @@ -17339,8 +13936,6 @@ }, "node_modules/rollup-plugin-node-globals/node_modules/acorn": { "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", "dev": true, "license": "MIT", "bin": { @@ -17352,15 +13947,11 @@ }, "node_modules/rollup-plugin-node-globals/node_modules/estree-walker": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", - "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", "dev": true, "license": "MIT" }, "node_modules/rollup-pluginutils": { "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17369,15 +13960,11 @@ }, "node_modules/rollup-pluginutils/node_modules/estree-walker": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", "dev": true, "license": "MIT" }, "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz", - "integrity": "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==", "cpu": [ "x64" ], @@ -17390,8 +13977,6 @@ }, "node_modules/router": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -17406,8 +13991,6 @@ }, "node_modules/run-async": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, "license": "MIT", "engines": { @@ -17416,8 +13999,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -17440,8 +14021,6 @@ }, "node_modules/rxjs": { "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -17450,8 +14029,6 @@ }, "node_modules/safe-array-concat": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -17470,15 +14047,11 @@ }, "node_modules/safe-array-concat/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -17497,8 +14070,6 @@ }, "node_modules/safe-push-apply": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "license": "MIT", "dependencies": { @@ -17514,15 +14085,11 @@ }, "node_modules/safe-push-apply/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/safe-regex-test": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { @@ -17539,14 +14106,10 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, "node_modules/schema-utils": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", - "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17565,14 +14128,10 @@ }, "node_modules/secure-compare": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", - "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==", "license": "MIT" }, "node_modules/semver": { "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -17583,8 +14142,6 @@ }, "node_modules/send": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "license": "MIT", "dependencies": { "debug": "^4.3.5", @@ -17605,8 +14162,6 @@ }, "node_modules/serialize-javascript": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -17615,8 +14170,6 @@ }, "node_modules/serve-static": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", "license": "MIT", "dependencies": { "encodeurl": "^2.0.0", @@ -17630,14 +14183,10 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "license": "ISC" }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "dependencies": { @@ -17654,8 +14203,6 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17670,8 +14217,6 @@ }, "node_modules/set-proto": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -17685,21 +14230,15 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "dev": true, "license": "MIT" }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, "node_modules/sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "license": "(MIT AND BSD-3-Clause)", "dependencies": { @@ -17712,8 +14251,6 @@ }, "node_modules/shallow-clone": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "license": "MIT", "dependencies": { @@ -17725,8 +14262,6 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", "dependencies": { @@ -17738,8 +14273,6 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", "engines": { @@ -17748,8 +14281,6 @@ }, "node_modules/should": { "version": "13.2.3", - "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", - "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17762,8 +14293,6 @@ }, "node_modules/should-equal": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", - "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", "dev": true, "license": "MIT", "dependencies": { @@ -17772,8 +14301,6 @@ }, "node_modules/should-format": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", - "integrity": "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -17783,15 +14310,11 @@ }, "node_modules/should-type": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", - "integrity": "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==", "dev": true, "license": "MIT" }, "node_modules/should-type-adaptors": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", - "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", "dev": true, "license": "MIT", "dependencies": { @@ -17801,15 +14324,11 @@ }, "node_modules/should-util": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", - "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", "dev": true, "license": "MIT" }, "node_modules/side-channel": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -17827,8 +14346,6 @@ }, "node_modules/side-channel-list": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -17843,8 +14360,6 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -17861,8 +14376,6 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -17880,8 +14393,6 @@ }, "node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", "engines": { @@ -17893,8 +14404,6 @@ }, "node_modules/sigstore": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", - "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -17911,8 +14420,6 @@ }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", "engines": { @@ -17921,8 +14428,6 @@ }, "node_modules/slice-ansi": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17938,8 +14443,6 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "license": "MIT", "engines": { @@ -17951,8 +14454,6 @@ }, "node_modules/smart-buffer": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "license": "MIT", "engines": { "node": ">= 6.0.0", @@ -17961,8 +14462,6 @@ }, "node_modules/socks": { "version": "2.8.4", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", - "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", "license": "MIT", "dependencies": { "ip-address": "^9.0.5", @@ -17975,8 +14474,6 @@ }, "node_modules/socks-proxy-agent": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "license": "MIT", "dependencies": { "agent-base": "^6.0.2", @@ -17989,8 +14486,6 @@ }, "node_modules/socks-proxy-agent/node_modules/agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "license": "MIT", "dependencies": { "debug": "4" @@ -18001,8 +14496,6 @@ }, "node_modules/sort-keys": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", "dev": true, "license": "MIT", "dependencies": { @@ -18014,8 +14507,6 @@ }, "node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -18024,8 +14515,6 @@ }, "node_modules/source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "license": "MIT", "dependencies": { @@ -18035,8 +14524,6 @@ }, "node_modules/spdx-correct": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -18046,15 +14533,11 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -18064,15 +14547,11 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.21", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", "dev": true, "license": "CC0-1.0" }, "node_modules/split": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, "license": "MIT", "dependencies": { @@ -18084,8 +14563,6 @@ }, "node_modules/split2": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "dev": true, "license": "ISC", "engines": { @@ -18094,14 +14571,10 @@ }, "node_modules/sprintf-js": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "license": "BSD-3-Clause" }, "node_modules/ssri": { "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dev": true, "license": "ISC", "dependencies": { @@ -18113,8 +14586,6 @@ }, "node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -18122,8 +14593,6 @@ }, "node_modules/stream-browserify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "license": "MIT", "dependencies": { "inherits": "~2.0.4", @@ -18132,8 +14601,6 @@ }, "node_modules/stream-http": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, "license": "MIT", "dependencies": { @@ -18145,8 +14612,6 @@ }, "node_modules/stream-http/node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, "license": "MIT", "engines": { @@ -18159,8 +14624,6 @@ }, "node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -18168,8 +14631,6 @@ }, "node_modules/string-argv": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, "license": "MIT", "engines": { @@ -18178,15 +14639,11 @@ }, "node_modules/string-range": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz", - "integrity": "sha512-tYft6IFi8SjplJpxCUxyqisD3b+R2CSkomrtJYCkvuf1KuCAWgz7YXt4O0jip7efpfCemwHEzTEAO8EuOYgh3w==", "dev": true, "license": "MIT" }, "node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -18200,8 +14657,6 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -18215,8 +14670,6 @@ }, "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -18225,8 +14678,6 @@ }, "node_modules/string-width/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "license": "MIT", "engines": { "node": ">=8" @@ -18234,8 +14685,6 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { @@ -18256,8 +14705,6 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18275,8 +14722,6 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { @@ -18293,8 +14738,6 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -18306,8 +14749,6 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -18319,8 +14760,6 @@ }, "node_modules/strip-bom": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "license": "MIT", "engines": { @@ -18329,8 +14768,6 @@ }, "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "license": "MIT", "engines": { @@ -18339,8 +14776,6 @@ }, "node_modules/strip-indent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18352,8 +14787,6 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { @@ -18365,8 +14798,6 @@ }, "node_modules/strong-log-transformer": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -18383,8 +14814,6 @@ }, "node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -18399,8 +14828,6 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "license": "MIT", "engines": { @@ -18412,8 +14839,6 @@ }, "node_modules/synckit": { "version": "0.11.4", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.4.tgz", - "integrity": "sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18429,8 +14854,6 @@ }, "node_modules/tapable": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, "license": "MIT", "engines": { @@ -18439,8 +14862,6 @@ }, "node_modules/tar": { "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", "license": "ISC", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", @@ -18456,8 +14877,6 @@ }, "node_modules/tar-stream": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18473,8 +14892,6 @@ }, "node_modules/tar/node_modules/minizlib": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", "license": "MIT", "dependencies": { "minipass": "^7.1.2" @@ -18485,8 +14902,6 @@ }, "node_modules/tar/node_modules/yallist": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "license": "BlueOak-1.0.0", "engines": { "node": ">=18" @@ -18494,8 +14909,6 @@ }, "node_modules/temp-dir": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", "dev": true, "license": "MIT", "engines": { @@ -18504,8 +14917,6 @@ }, "node_modules/terser": { "version": "5.39.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", - "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -18523,8 +14934,6 @@ }, "node_modules/terser-webpack-plugin": { "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "dev": true, "license": "MIT", "dependencies": { @@ -18558,8 +14967,6 @@ }, "node_modules/terser-webpack-plugin/node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18569,15 +14976,11 @@ }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, "license": "MIT" }, "node_modules/text-extensions": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", - "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", "dev": true, "license": "MIT", "engines": { @@ -18589,15 +14992,11 @@ }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true, "license": "MIT" }, "node_modules/through2": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18607,8 +15006,6 @@ }, "node_modules/through2/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { @@ -18623,15 +15020,11 @@ }, "node_modules/through2/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/through2/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", "dependencies": { @@ -18640,8 +15033,6 @@ }, "node_modules/through2/node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, "license": "MIT", "engines": { @@ -18650,8 +15041,6 @@ }, "node_modules/timers-browserify": { "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18663,15 +15052,11 @@ }, "node_modules/tinyexec": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", - "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", "dev": true, "license": "MIT" }, "node_modules/tmp": { "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "license": "MIT", "dependencies": { @@ -18683,8 +15068,6 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18696,8 +15079,6 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "license": "MIT", "engines": { "node": ">=0.6" @@ -18705,14 +15086,10 @@ }, "node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "license": "MIT" }, "node_modules/treeverse": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", - "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", "dev": true, "license": "ISC", "engines": { @@ -18721,8 +15098,6 @@ }, "node_modules/trim-newlines": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, "license": "MIT", "engines": { @@ -18731,8 +15106,6 @@ }, "node_modules/ts-api-utils": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, "license": "MIT", "engines": { @@ -18744,8 +15117,6 @@ }, "node_modules/ts-loader": { "version": "9.5.2", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", - "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", "dev": true, "license": "MIT", "dependencies": { @@ -18765,8 +15136,6 @@ }, "node_modules/ts-loader/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -18781,8 +15150,6 @@ }, "node_modules/ts-loader/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -18798,8 +15165,6 @@ }, "node_modules/ts-loader/node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -18808,8 +15173,6 @@ }, "node_modules/ts-loader/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -18821,8 +15184,6 @@ }, "node_modules/ts-node": { "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18865,8 +15226,6 @@ }, "node_modules/ts-node/node_modules/diff": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -18875,8 +15234,6 @@ }, "node_modules/tsconfig-paths": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, "license": "MIT", "dependencies": { @@ -18890,8 +15247,6 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -18900,15 +15255,11 @@ }, "node_modules/tslib": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, "license": "0BSD" }, "node_modules/tsx": { "version": "4.19.4", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", - "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -18927,15 +15278,11 @@ }, "node_modules/tty-browserify": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true, "license": "MIT" }, "node_modules/tuf-js": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", - "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", "dev": true, "license": "MIT", "dependencies": { @@ -18949,8 +15296,6 @@ }, "node_modules/tuf-js/node_modules/make-fetch-happen": { "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", "dev": true, "license": "ISC", "dependencies": { @@ -18973,8 +15318,6 @@ }, "node_modules/tuf-js/node_modules/minipass-fetch": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", "dev": true, "license": "MIT", "dependencies": { @@ -18991,8 +15334,6 @@ }, "node_modules/tuf-js/node_modules/negotiator": { "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "dev": true, "license": "MIT", "engines": { @@ -19001,8 +15342,6 @@ }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { @@ -19014,8 +15353,6 @@ }, "node_modules/type-fest": { "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -19027,8 +15364,6 @@ }, "node_modules/type-is": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "license": "MIT", "dependencies": { "content-type": "^1.0.5", @@ -19041,8 +15376,6 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { @@ -19056,8 +15389,6 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { @@ -19076,8 +15407,6 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -19098,8 +15427,6 @@ }, "node_modules/typed-array-length": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { @@ -19119,22 +15446,16 @@ }, "node_modules/typedarray": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true, "license": "MIT" }, "node_modules/typedarray-to-buffer": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz", - "integrity": "sha512-vjMKrfSoUDN8/Vnqitw2FmstOfuJ73G6CrSEKnf11A6RmasVxHqfeBcnTb6RsL4pTMuV5Zsv9IiHRphMZyckUw==", "dev": true, "license": "MIT" }, "node_modules/typescript": { "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -19147,8 +15468,6 @@ }, "node_modules/typescript-eslint": { "version": "8.32.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.32.1.tgz", - "integrity": "sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==", "dev": true, "license": "MIT", "dependencies": { @@ -19170,8 +15489,6 @@ }, "node_modules/uglify-js": { "version": "3.19.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", - "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", "dev": true, "license": "BSD-2-Clause", "optional": true, @@ -19184,8 +15501,6 @@ }, "node_modules/unbox-primitive": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { @@ -19203,15 +15518,11 @@ }, "node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, "node_modules/unicorn-magic": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "dev": true, "license": "MIT", "engines": { @@ -19223,8 +15534,6 @@ }, "node_modules/union": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", - "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", "dependencies": { "qs": "^6.4.0" }, @@ -19234,8 +15543,6 @@ }, "node_modules/unique-filename": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, "license": "ISC", "dependencies": { @@ -19247,8 +15554,6 @@ }, "node_modules/unique-slug": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, "license": "ISC", "dependencies": { @@ -19260,15 +15565,11 @@ }, "node_modules/universal-user-agent": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", "dev": true, "license": "ISC" }, "node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", "engines": { @@ -19277,8 +15578,6 @@ }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -19286,8 +15585,6 @@ }, "node_modules/upath": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", "dev": true, "license": "MIT", "engines": { @@ -19297,8 +15594,6 @@ }, "node_modules/update-browserslist-db": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, "funding": [ { @@ -19328,8 +15623,6 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -19338,8 +15631,6 @@ }, "node_modules/url": { "version": "0.11.4", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", - "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", "dev": true, "license": "MIT", "dependencies": { @@ -19352,21 +15643,15 @@ }, "node_modules/url-join": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", "license": "MIT" }, "node_modules/url/node_modules/punycode": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true, "license": "MIT" }, "node_modules/util": { "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, "license": "MIT", "dependencies": { @@ -19379,14 +15664,10 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, "node_modules/uuid": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "dev": true, "funding": [ "https://github.com/sponsors/broofa", @@ -19399,15 +15680,11 @@ }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true, "license": "MIT" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -19417,8 +15694,6 @@ }, "node_modules/validate-npm-package-name": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", "dev": true, "license": "ISC", "engines": { @@ -19427,8 +15702,6 @@ }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -19436,29 +15709,21 @@ }, "node_modules/vlq": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", "dev": true, "license": "MIT" }, "node_modules/vm-browserify": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true, "license": "MIT" }, "node_modules/walk-up-path": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", - "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", "dev": true, "license": "ISC" }, "node_modules/watchpack": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, "license": "MIT", "dependencies": { @@ -19471,8 +15736,6 @@ }, "node_modules/wcwidth": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "license": "MIT", "dependencies": { @@ -19481,14 +15744,10 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "license": "BSD-2-Clause" }, "node_modules/webpack": { "version": "5.99.8", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz", - "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", "dev": true, "license": "MIT", "dependencies": { @@ -19535,8 +15794,6 @@ }, "node_modules/webpack-cli": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", - "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", "dev": true, "license": "MIT", "dependencies": { @@ -19578,8 +15835,6 @@ }, "node_modules/webpack-cli/node_modules/commander": { "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", "engines": { @@ -19588,8 +15843,6 @@ }, "node_modules/webpack-cli/node_modules/envinfo": { "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", "dev": true, "license": "MIT", "bin": { @@ -19601,8 +15854,6 @@ }, "node_modules/webpack-merge": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", "dev": true, "license": "MIT", "dependencies": { @@ -19616,8 +15867,6 @@ }, "node_modules/webpack-sources": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, "license": "MIT", "engines": { @@ -19626,8 +15875,6 @@ }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -19640,8 +15887,6 @@ }, "node_modules/webpack/node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -19650,15 +15895,11 @@ }, "node_modules/webpack/node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, "license": "MIT" }, "node_modules/webpack/node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", "engines": { @@ -19667,8 +15908,6 @@ }, "node_modules/webpack/node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", "dependencies": { @@ -19680,8 +15919,6 @@ }, "node_modules/whatwg-encoding": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "license": "MIT", "dependencies": { "iconv-lite": "0.6.3" @@ -19692,8 +15929,6 @@ }, "node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "license": "MIT", "dependencies": { "tr46": "~0.0.3", @@ -19702,8 +15937,6 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -19717,8 +15950,6 @@ }, "node_modules/which-boxed-primitive": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { @@ -19737,8 +15968,6 @@ }, "node_modules/which-builtin-type": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -19765,15 +15994,11 @@ }, "node_modules/which-builtin-type/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { @@ -19791,8 +16016,6 @@ }, "node_modules/which-typed-array": { "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, "license": "MIT", "dependencies": { @@ -19813,8 +16036,6 @@ }, "node_modules/wide-align": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" @@ -19822,15 +16043,11 @@ }, "node_modules/wildcard": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true, "license": "MIT" }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", "engines": { @@ -19839,22 +16056,16 @@ }, "node_modules/wordwrap": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true, "license": "MIT" }, "node_modules/workerpool": { "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", "dev": true, "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { @@ -19872,8 +16083,6 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { @@ -19890,8 +16099,6 @@ }, "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -19906,8 +16113,6 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -19922,14 +16127,10 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, "node_modules/write-file-atomic": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "license": "ISC", "dependencies": { @@ -19942,8 +16143,6 @@ }, "node_modules/write-json-file": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -19960,8 +16159,6 @@ }, "node_modules/write-json-file/node_modules/detect-indent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", "dev": true, "license": "MIT", "engines": { @@ -19970,8 +16167,6 @@ }, "node_modules/write-json-file/node_modules/make-dir": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "license": "MIT", "dependencies": { @@ -19984,8 +16179,6 @@ }, "node_modules/write-json-file/node_modules/pify": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "license": "MIT", "engines": { @@ -19994,8 +16187,6 @@ }, "node_modules/write-json-file/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -20004,15 +16195,11 @@ }, "node_modules/write-json-file/node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/write-json-file/node_modules/write-file-atomic": { "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "license": "ISC", "dependencies": { @@ -20023,8 +16210,6 @@ }, "node_modules/write-pkg": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", - "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", "dev": true, "license": "MIT", "dependencies": { @@ -20038,8 +16223,6 @@ }, "node_modules/write-pkg/node_modules/type-fest": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -20048,8 +16231,6 @@ }, "node_modules/xtend": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", - "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==", "dev": true, "engines": { "node": ">=0.4" @@ -20057,8 +16238,6 @@ }, "node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "license": "ISC", "engines": { @@ -20067,14 +16246,10 @@ }, "node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "license": "ISC" }, "node_modules/yaml": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", - "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", "dev": true, "license": "ISC", "bin": { @@ -20086,8 +16261,6 @@ }, "node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "license": "MIT", "dependencies": { @@ -20105,8 +16278,6 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "license": "ISC", "engines": { @@ -20115,8 +16286,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -20131,8 +16300,6 @@ }, "node_modules/yargs-unparser/node_modules/is-plain-obj": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "license": "MIT", "engines": { @@ -20141,8 +16308,6 @@ }, "node_modules/yn": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, "license": "MIT", "engines": { @@ -20151,8 +16316,6 @@ }, "node_modules/yocto-queue": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", "dev": true, "license": "MIT", "engines": { @@ -20162,26 +16325,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/zod": { - "version": "3.24.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz", - "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-to-json-schema": { - "version": "3.24.5", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", - "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", - "dev": true, - "license": "ISC", - "peerDependencies": { - "zod": "^3.24.1" - } - }, "packages/csv": { "version": "6.3.11", "license": "MIT", diff --git a/package.json b/package.json index 64220b5b..1b456817 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,9 @@ "devDependencies": { "@commitlint/cli": "^19.8.1", "@commitlint/config-conventional": "^19.8.1", - "@eslint/js": "^9.26.0", + "@eslint/js": "^9.27.0", "cz-conventional-changelog": "^3.3.0", - "eslint": "^9.26.0", + "eslint": "^9.27.0", "eslint-config-prettier": "^10.1.5", "eslint-plugin-mocha": "^11.0.0", "eslint-plugin-prettier": "^5.4.0", @@ -27,7 +27,7 @@ "build": "lerna run build", "postinstall": "husky install", "publish": "lerna publish from-git --yes", - "lint:check": "lerna run lint:check", + "lint:check": "eslint", "lint:fix": "eslint --fix", "lint:staged": "npx lint-staged", "test": "lerna run test", From 6457a90fa8499fd147ad42ac071f886310542c7b Mon Sep 17 00:00:00 2001 From: David Worms Date: Mon, 19 May 2025 12:04:57 +0200 Subject: [PATCH 19/49] test(csv-parse): remove duplicated sync tests --- packages/csv-parse/test/api.types.ts | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/packages/csv-parse/test/api.types.ts b/packages/csv-parse/test/api.types.ts index 3d77c11b..ab73ac45 100644 --- a/packages/csv-parse/test/api.types.ts +++ b/packages/csv-parse/test/api.types.ts @@ -102,27 +102,6 @@ describe("API Types", function () { }); }); - describe("sync api", function () { - it("respect parse signature", function () { - // No argument - parse_sync(""); - parse_sync("", {}); - parse_sync(Buffer.from("")); - parse_sync(Buffer.from(""), {}); - }); - - it("return records", function () { - try { - const records: object = parse_sync(""); - typeof records; - } catch (err) { - if (err instanceof CsvError) { - err.message; - } - } - }); - }); - describe("Info", function () { const fakeinfo = { bytes: 1, From ef713422d75812f2d4634c0c3f1d1f46a68ad186 Mon Sep 17 00:00:00 2001 From: Bertrand Marron Date: Mon, 19 May 2025 13:41:17 +0200 Subject: [PATCH 20/49] feat(csv-parse): add generic type argument (#457) This is based on the columns option. When falsy, the records are string[][]. When defined, the records are T[], T defaulting to unknown. Restrict columns to keyof T. Update onRecord / on_record to take and return type T. Fix #278 Fix #407 --- packages/csv-parse/lib/index.d.ts | 53 ++++++++++---- packages/csv-parse/lib/sync.d.ts | 12 +++- packages/csv-parse/test/api.types.sync.ts | 28 +++++++- packages/csv-parse/test/api.types.ts | 85 +++++++++++++++++++---- 4 files changed, 149 insertions(+), 29 deletions(-) diff --git a/packages/csv-parse/lib/index.d.ts b/packages/csv-parse/lib/index.d.ts index f5100150..f907df10 100644 --- a/packages/csv-parse/lib/index.d.ts +++ b/packages/csv-parse/lib/index.d.ts @@ -4,10 +4,10 @@ import * as stream from "stream"; -export type Callback = ( +export type Callback = ( err: CsvError | undefined, - records: any | undefined, - info: Info, + records: T[] | undefined, + info?: Info, ) => void; export interface Parser extends stream.Transform {} @@ -43,14 +43,19 @@ export type CastingDateFunction = ( context: CastingContext, ) => Date; -export type ColumnOption = string | undefined | null | false | { name: string }; +export type ColumnOption = + | K + | undefined + | null + | false + | { name: K }; /* Note, could not `extends stream.TransformOptions` because encoding can be BufferEncoding and undefined as well as null which is not defined in the extended type. */ -export interface Options { +export interface Options { /** * If true, the parser will attempt to convert read data types to native types. * @deprecated Use {@link cast} @@ -84,7 +89,16 @@ export interface Options { * default to null, * affect the result data set in the sense that records will be objects instead of arrays. */ - columns?: ColumnOption[] | boolean | ((record: any) => ColumnOption[]); + columns?: + | boolean + | ColumnOption< + T extends string[] ? string : T extends unknown ? string : keyof T + >[] + | (( + record: T, + ) => ColumnOption< + T extends string[] ? string : T extends unknown ? string : keyof T + >[]); /** * Convert values into an array of values when columns are activated and * when multiple columns of the same name are found. @@ -149,8 +163,8 @@ export interface Options { /** * Alter and filter records by executing a user defined function. */ - on_record?: (record: any, context: CastingContext) => any; - onRecord?: (record: any, context: CastingContext) => any; + on_record?: (record: T, context: CastingContext) => T | null | undefined; + onRecord?: (record: T, context: CastingContext) => T | null | undefined; /** * Optional character surrounding a field, one character only, defaults to double quotes. */ @@ -286,13 +300,28 @@ export class CsvError extends Error { ); } +type OptionsWithColumns = Omit, "columns"> & { + columns: Exclude; +}; + +declare function parse( + input: string | Buffer, + options: OptionsWithColumns, + callback?: Callback, +): Parser; declare function parse( - input: Buffer | string, - options?: Options, + input: string | Buffer, + options: Options, callback?: Callback, ): Parser; -declare function parse(input: Buffer | string, callback?: Callback): Parser; -declare function parse(options?: Options, callback?: Callback): Parser; + +declare function parse( + options: OptionsWithColumns, + callback?: Callback, +): Parser; +declare function parse(options: Options, callback?: Callback): Parser; + +declare function parse(input: string | Buffer, callback?: Callback): Parser; declare function parse(callback?: Callback): Parser; // export default parse; diff --git a/packages/csv-parse/lib/sync.d.ts b/packages/csv-parse/lib/sync.d.ts index 97f70da0..dbaf9ba8 100644 --- a/packages/csv-parse/lib/sync.d.ts +++ b/packages/csv-parse/lib/sync.d.ts @@ -1,6 +1,16 @@ import { Options } from "./index.js"; -declare function parse(input: Buffer | string, options?: Options): any; +type OptionsWithColumns = Omit, "columns"> & { + columns: Exclude; +}; + +declare function parse( + input: Buffer | string, + options: OptionsWithColumns, +): T[]; +declare function parse(input: Buffer | string, options: Options): string[][]; +declare function parse(input: Buffer | string): string[][]; + // export default parse; export { parse }; diff --git a/packages/csv-parse/test/api.types.sync.ts b/packages/csv-parse/test/api.types.sync.ts index 11bc912f..8bd36a1c 100644 --- a/packages/csv-parse/test/api.types.sync.ts +++ b/packages/csv-parse/test/api.types.sync.ts @@ -12,6 +12,8 @@ import { } from "../lib/sync.js"; describe("API Types", function () { + type Person = { name: string; age: number }; + it("respect parse signature", function () { // No argument parse(""); @@ -22,7 +24,7 @@ describe("API Types", function () { it("return records", function () { try { - const records: object = parse(""); + const records = parse(""); typeof records; } catch (err) { if (err instanceof CsvError) { @@ -96,4 +98,28 @@ describe("API Types", function () { }; return info; }); + + describe("Generic types", function () { + it("Exposes string[][] if columns is not specified", function () { + const data: string[][] = parse("", {}); + }); + + it("Exposes string[][] if columns is falsy", function () { + const data: string[][] = parse("", { + columns: false, + }); + }); + + it("Exposes unknown[] if columns is specified as boolean", function () { + const data: unknown[] = parse("", { + columns: true, + }); + }); + + it("Exposes T[] if columns is specified", function () { + const data: Person[] = parse("", { + columns: true, + }); + }); + }); }); diff --git a/packages/csv-parse/test/api.types.ts b/packages/csv-parse/test/api.types.ts index ab73ac45..25998c69 100644 --- a/packages/csv-parse/test/api.types.ts +++ b/packages/csv-parse/test/api.types.ts @@ -10,6 +10,8 @@ import { import { parse as parse_sync } from "../lib/sync.js"; describe("API Types", function () { + type Person = { name: string; age: number }; + describe("stream/callback API", function () { it("respect parse signature", function () { // No argument @@ -89,16 +91,13 @@ describe("API Types", function () { }); it("Receive Callback", function (next) { - parse( - "a\nb", - function (err: Error | undefined, records: object, info: Info) { - if (err !== undefined) { - records.should.eql([["a"], ["b"]]); - info.records.should.eql(2); - } - next(err); - }, - ); + parse("a\nb", function (err, records, info) { + if (err !== undefined) { + records!.should.eql([["a"], ["b"]]); + info!.records.should.eql(2); + } + next(err); + }); }); }); @@ -213,16 +212,28 @@ describe("API Types", function () { false, { name: "column-name" }, ]; - options.columns = (record: string[]) => { - const fields: string[] = record.map((field: string) => { + options.columns = (record) => { + const fields = record.map((field: string) => { return field.toUpperCase(); }); return fields; }; - options.columns = (record: string[]) => { + options.columns = (record) => { record; return ["string", undefined, null, false, { name: "column-name" }]; }; + + const typedOptions: Options = {}; + typedOptions.columns = ["age", undefined, null, false, { name: "name" }]; + typedOptions.columns = (record) => { + return ["age"]; + }; + + const unknownTypedOptions: Options = {}; + unknownTypedOptions.columns = ["anything", undefined, null, false]; + unknownTypedOptions.columns = (record) => { + return ["anything", undefined, null, false]; + }; }); it("group_columns_by_name", function () { @@ -289,8 +300,8 @@ describe("API Types", function () { it("on_record", function () { const options: Options = {}; - options.on_record = (record, { lines }) => [lines, record[0]]; - options.onRecord = (record, { lines }) => [lines, record[0]]; + options.on_record = (record, { lines }) => [lines.toString(), record[0]]; + options.onRecord = (record, { lines }) => [lines.toString(), record[0]]; }); it("quote", function () { @@ -442,4 +453,48 @@ describe("API Types", function () { }); }); }); + + describe("Generic types", function () { + it("Exposes string[][] if columns is not specified", function (next) { + parse("", {}, (error, records: string[][] | undefined) => { + next(error); + }); + }); + + it("Exposes string[][] if columns is falsy", function (next) { + parse( + "", + { + columns: false, + }, + (error, records: string[][] | undefined) => { + next(error); + }, + ); + }); + + it("Exposes unknown[] if columns is specified as boolean", function (next) { + parse( + "", + { + columns: true, + }, + (error, records: unknown[] | undefined) => { + next(error); + }, + ); + }); + + it("Exposes T[] if columns is specified", function (next) { + parse( + "", + { + columns: true, + }, + (error, records: Person[] | undefined) => { + next(error); + }, + ); + }); + }); }); From 8a65b10e93fdff29e71ef46bb5b432d4c4a300a7 Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 6 Jun 2025 11:06:54 +0200 Subject: [PATCH 21/49] chore: latest dependencies --- demo/cjs/package.json | 4 +- demo/eslint/package.json | 2 +- demo/esm/package.json | 2 +- demo/issues-cjs/package.json | 2 +- demo/issues-esm/package.json | 2 +- demo/ts-esm-node16/package.json | 4 +- demo/webpack-ts/package.json | 2 +- demo/webpack/package.json | 2 +- package-lock.json | 6891 +++++++++++++++++------- package.json | 12 +- packages/csv-generate/package.json | 6 +- packages/csv-parse/package.json | 6 +- packages/csv-stringify/package.json | 6 +- packages/csv/package.json | 6 +- packages/stream-transform/package.json | 6 +- 15 files changed, 4967 insertions(+), 1986 deletions(-) diff --git a/demo/cjs/package.json b/demo/cjs/package.json index 95b483d6..9b746dd9 100644 --- a/demo/cjs/package.json +++ b/demo/cjs/package.json @@ -11,9 +11,9 @@ "csv-stringify": "^6.5.2" }, "devDependencies": { - "@types/node": "^22.15.17", + "@types/node": "^22.15.30", "coffeescript": "^2.7.0", - "mocha": "^11.2.2", + "mocha": "^11.5.0", "should": "^13.2.3", "ts-node": "^10.9.2", "typescript": "^5.8.3" diff --git a/demo/eslint/package.json b/demo/eslint/package.json index b31d68a0..36b7672a 100644 --- a/demo/eslint/package.json +++ b/demo/eslint/package.json @@ -13,7 +13,7 @@ "csv-stringify": "^6.5.2" }, "devDependencies": { - "eslint": "^9.26.0", + "eslint": "^9.28.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-import": "^2.31.0" } diff --git a/demo/esm/package.json b/demo/esm/package.json index d63391c8..b9916bb3 100644 --- a/demo/esm/package.json +++ b/demo/esm/package.json @@ -11,7 +11,7 @@ }, "devDependencies": { "coffeescript": "^2.7.0", - "mocha": "^11.2.2", + "mocha": "^11.5.0", "should": "^13.2.3" }, "mocha": { diff --git a/demo/issues-cjs/package.json b/demo/issues-cjs/package.json index 5038dbfc..422e004e 100644 --- a/demo/issues-cjs/package.json +++ b/demo/issues-cjs/package.json @@ -10,7 +10,7 @@ }, "devDependencies": { "coffeescript": "^2.7.0", - "mocha": "^11.2.2", + "mocha": "^11.5.0", "should": "^13.2.3" }, "mocha": { diff --git a/demo/issues-esm/package.json b/demo/issues-esm/package.json index a22c6587..1f765721 100644 --- a/demo/issues-esm/package.json +++ b/demo/issues-esm/package.json @@ -8,7 +8,7 @@ "devDependencies": { "coffeescript": "^2.7.0", "dirname-filename-esm": "^1.1.2", - "mocha": "^11.2.2", + "mocha": "^11.5.0", "should": "^13.2.3" }, "mocha": { diff --git a/demo/ts-esm-node16/package.json b/demo/ts-esm-node16/package.json index cd6ad836..e09ed317 100644 --- a/demo/ts-esm-node16/package.json +++ b/demo/ts-esm-node16/package.json @@ -12,9 +12,9 @@ "stream-transform": "^3.3.3" }, "devDependencies": { - "@types/node": "^22.15.17", + "@types/node": "^22.15.30", "coffeescript": "^2.7.0", - "mocha": "^11.2.2", + "mocha": "^11.5.0", "should": "^13.2.3", "ts-node": "^10.9.2", "typescript": "^5.8.3" diff --git a/demo/webpack-ts/package.json b/demo/webpack-ts/package.json index 0bfad4f9..95ddc62d 100644 --- a/demo/webpack-ts/package.json +++ b/demo/webpack-ts/package.json @@ -19,7 +19,7 @@ "stream-browserify": "^3.0.0", "ts-loader": "^9.5.2", "typescript": "^5.8.3", - "webpack": "^5.99.8", + "webpack": "^5.99.9", "webpack-cli": "^6.0.1" }, "scripts": { diff --git a/demo/webpack/package.json b/demo/webpack/package.json index 4959ef36..e2a95382 100644 --- a/demo/webpack/package.json +++ b/demo/webpack/package.json @@ -12,7 +12,7 @@ "author": "", "license": "ISC", "devDependencies": { - "webpack": "^5.99.8", + "webpack": "^5.99.9", "webpack-cli": "^6.0.1" }, "dependencies": { diff --git a/package-lock.json b/package-lock.json index 7ac9759e..493441f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,17 +8,17 @@ "devDependencies": { "@commitlint/cli": "^19.8.1", "@commitlint/config-conventional": "^19.8.1", - "@eslint/js": "^9.27.0", + "@eslint/js": "^9.28.0", "cz-conventional-changelog": "^3.3.0", - "eslint": "^9.27.0", + "eslint": "^9.28.0", "eslint-config-prettier": "^10.1.5", - "eslint-plugin-mocha": "^11.0.0", - "eslint-plugin-prettier": "^5.4.0", + "eslint-plugin-mocha": "^11.1.0", + "eslint-plugin-prettier": "^5.4.1", "glob": "^11.0.2", "husky": "^9.1.7", "lerna": "^8.2.2", - "lint-staged": "^16.0.0", - "typescript-eslint": "^8.32.1" + "lint-staged": "^16.1.0", + "typescript-eslint": "^8.33.1" }, "workspaces": { "packages": [ @@ -54,9 +54,9 @@ "csv-stringify": "^6.5.2" }, "devDependencies": { - "@types/node": "^22.15.17", + "@types/node": "^22.15.30", "coffeescript": "^2.7.0", - "mocha": "^11.2.2", + "mocha": "^11.5.0", "should": "^13.2.3", "ts-node": "^10.9.2", "typescript": "^5.8.3" @@ -70,7 +70,7 @@ "csv-stringify": "^6.5.2" }, "devDependencies": { - "eslint": "^9.26.0", + "eslint": "^9.28.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-import": "^2.31.0" } @@ -85,7 +85,7 @@ }, "devDependencies": { "coffeescript": "^2.7.0", - "mocha": "^11.2.2", + "mocha": "^11.5.0", "should": "^13.2.3" } }, @@ -99,7 +99,7 @@ }, "devDependencies": { "coffeescript": "^2.7.0", - "mocha": "^11.2.2", + "mocha": "^11.5.0", "should": "^13.2.3" } }, @@ -118,14 +118,12 @@ "devDependencies": { "coffeescript": "^2.7.0", "dirname-filename-esm": "^1.1.2", - "mocha": "^11.2.2", + "mocha": "^11.5.0", "should": "^13.2.3" } }, "demo/issues-esm/node_modules/dedent": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", - "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" @@ -161,9 +159,9 @@ "stream-transform": "^3.3.3" }, "devDependencies": { - "@types/node": "^22.15.17", + "@types/node": "^22.15.30", "coffeescript": "^2.7.0", - "mocha": "^11.2.2", + "mocha": "^11.5.0", "should": "^13.2.3", "ts-node": "^10.9.2", "typescript": "^5.8.3" @@ -183,7 +181,7 @@ "stream-transform": "^3.3.3" }, "devDependencies": { - "webpack": "^5.99.8", + "webpack": "^5.99.9", "webpack-cli": "^6.0.1" } }, @@ -204,12 +202,14 @@ "stream-browserify": "^3.0.0", "ts-loader": "^9.5.2", "typescript": "^5.8.3", - "webpack": "^5.99.8", + "webpack": "^5.99.9", "webpack-cli": "^6.0.1" } }, "node_modules/@babel/code-frame": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { @@ -223,6 +223,8 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, "license": "MIT", "engines": { @@ -231,6 +233,8 @@ }, "node_modules/@commitlint/cli": { "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.8.1.tgz", + "integrity": "sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==", "dev": true, "license": "MIT", "dependencies": { @@ -251,6 +255,8 @@ }, "node_modules/@commitlint/config-conventional": { "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.8.1.tgz", + "integrity": "sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ==", "dev": true, "license": "MIT", "dependencies": { @@ -263,6 +269,8 @@ }, "node_modules/@commitlint/config-validator": { "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.8.1.tgz", + "integrity": "sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -275,6 +283,8 @@ }, "node_modules/@commitlint/ensure": { "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.8.1.tgz", + "integrity": "sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==", "dev": true, "license": "MIT", "dependencies": { @@ -291,6 +301,8 @@ }, "node_modules/@commitlint/execute-rule": { "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.8.1.tgz", + "integrity": "sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==", "dev": true, "license": "MIT", "engines": { @@ -299,6 +311,8 @@ }, "node_modules/@commitlint/format": { "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.8.1.tgz", + "integrity": "sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==", "dev": true, "license": "MIT", "dependencies": { @@ -311,6 +325,8 @@ }, "node_modules/@commitlint/is-ignored": { "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.8.1.tgz", + "integrity": "sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==", "dev": true, "license": "MIT", "dependencies": { @@ -323,6 +339,8 @@ }, "node_modules/@commitlint/lint": { "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.8.1.tgz", + "integrity": "sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==", "dev": true, "license": "MIT", "dependencies": { @@ -337,6 +355,8 @@ }, "node_modules/@commitlint/load": { "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.8.1.tgz", + "integrity": "sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==", "dev": true, "license": "MIT", "dependencies": { @@ -357,6 +377,8 @@ }, "node_modules/@commitlint/message": { "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.8.1.tgz", + "integrity": "sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==", "dev": true, "license": "MIT", "engines": { @@ -365,6 +387,8 @@ }, "node_modules/@commitlint/parse": { "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.8.1.tgz", + "integrity": "sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==", "dev": true, "license": "MIT", "dependencies": { @@ -378,6 +402,8 @@ }, "node_modules/@commitlint/read": { "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.8.1.tgz", + "integrity": "sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -393,6 +419,8 @@ }, "node_modules/@commitlint/resolve-extends": { "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.8.1.tgz", + "integrity": "sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==", "dev": true, "license": "MIT", "dependencies": { @@ -409,6 +437,8 @@ }, "node_modules/@commitlint/rules": { "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.8.1.tgz", + "integrity": "sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==", "dev": true, "license": "MIT", "dependencies": { @@ -423,6 +453,8 @@ }, "node_modules/@commitlint/to-lines": { "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.8.1.tgz", + "integrity": "sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==", "dev": true, "license": "MIT", "engines": { @@ -431,6 +463,8 @@ }, "node_modules/@commitlint/top-level": { "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.8.1.tgz", + "integrity": "sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==", "dev": true, "license": "MIT", "dependencies": { @@ -442,6 +476,8 @@ }, "node_modules/@commitlint/types": { "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.8.1.tgz", + "integrity": "sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==", "dev": true, "license": "MIT", "dependencies": { @@ -454,6 +490,8 @@ }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "license": "MIT", "dependencies": { @@ -465,6 +503,8 @@ }, "node_modules/@discoveryjs/json-ext": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", "dev": true, "license": "MIT", "engines": { @@ -473,6 +513,8 @@ }, "node_modules/@emnapi/core": { "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz", + "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==", "dev": true, "license": "MIT", "dependencies": { @@ -482,6 +524,8 @@ }, "node_modules/@emnapi/runtime": { "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", + "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -490,14 +534,290 @@ }, "node_modules/@emnapi/wasi-threads": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz", + "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==", "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.4.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.4", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", "cpu": [ "x64" ], @@ -511,8 +831,146 @@ "node": ">=18" } }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, "license": "MIT", "dependencies": { @@ -530,6 +988,8 @@ }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -541,6 +1001,8 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { @@ -549,6 +1011,8 @@ }, "node_modules/@eslint/config-array": { "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -562,6 +1026,8 @@ }, "node_modules/@eslint/config-helpers": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", + "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -583,6 +1049,8 @@ }, "node_modules/@eslint/eslintrc": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -605,6 +1073,8 @@ }, "node_modules/@eslint/eslintrc/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -620,13 +1090,15 @@ }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, "node_modules/@eslint/js": { - "version": "9.27.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz", - "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==", + "version": "9.28.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz", + "integrity": "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==", "dev": true, "license": "MIT", "engines": { @@ -638,6 +1110,8 @@ }, "node_modules/@eslint/object-schema": { "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -660,10 +1134,14 @@ }, "node_modules/@gar/promisify": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "license": "MIT" }, "node_modules/@humanfs/core": { "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -672,6 +1150,8 @@ }, "node_modules/@humanfs/node": { "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -684,6 +1164,8 @@ }, "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -696,6 +1178,8 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -708,6 +1192,8 @@ }, "node_modules/@humanwhocodes/retry": { "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -720,6 +1206,8 @@ }, "node_modules/@hutson/parse-repository-url": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true, "license": "Apache-2.0", "engines": { @@ -728,6 +1216,8 @@ }, "node_modules/@isaacs/cliui": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "license": "ISC", "dependencies": { @@ -744,6 +1234,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "license": "MIT", "engines": { @@ -755,6 +1247,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "license": "MIT", "engines": { @@ -766,11 +1260,15 @@ }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { @@ -787,6 +1285,8 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -801,6 +1301,8 @@ }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -817,6 +1319,8 @@ }, "node_modules/@isaacs/fs-minipass": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "license": "ISC", "dependencies": { "minipass": "^7.0.4" @@ -827,11 +1331,15 @@ }, "node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", "dev": true, "license": "ISC" }, "node_modules/@jest/schemas": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "license": "MIT", "dependencies": { @@ -843,6 +1351,8 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, "license": "MIT", "dependencies": { @@ -856,6 +1366,8 @@ }, "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -865,6 +1377,8 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "license": "MIT", "engines": { @@ -873,6 +1387,8 @@ }, "node_modules/@jridgewell/set-array": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "license": "MIT", "engines": { @@ -881,6 +1397,8 @@ }, "node_modules/@jridgewell/source-map": { "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -890,6 +1408,8 @@ }, "node_modules/@jridgewell/source-map/node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -899,11 +1419,15 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -913,6 +1437,8 @@ }, "node_modules/@lerna/create": { "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.2.2.tgz", + "integrity": "sha512-1yn1MvWn2Yz0SFgTTQnef2m1YedF7KwqLLVIOrGkgQrkVHzsveAIk1A1RcRa2yyUh+siKI1YcJ7lUZIEt+qQ3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -993,6 +1519,8 @@ }, "node_modules/@lerna/create/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -1007,6 +1535,8 @@ }, "node_modules/@lerna/create/node_modules/chalk": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "license": "MIT", "dependencies": { @@ -1020,16 +1550,10 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@lerna/create/node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, "node_modules/@lerna/create/node_modules/dedent": { "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -1043,6 +1567,8 @@ }, "node_modules/@lerna/create/node_modules/fs-extra": { "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", "dev": true, "license": "MIT", "dependencies": { @@ -1054,35 +1580,17 @@ "node": ">=14.14" } }, - "node_modules/@lerna/create/node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@lerna/create/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@lerna/create/node_modules/ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "license": "ISC" }, "node_modules/@lerna/create/node_modules/minimatch": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "license": "ISC", "dependencies": { @@ -1092,97 +1600,124 @@ "node": "*" } }, - "node_modules/@lerna/create/node_modules/minipass": { - "version": "5.0.0", + "node_modules/@lerna/create/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, + "license": "ISC" + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.0.tgz", + "integrity": "sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==", + "license": "BSD-3-Clause", + "dependencies": { + "consola": "^3.2.3", + "detect-libc": "^2.0.0", + "https-proxy-agent": "^7.0.5", + "node-fetch": "^2.6.7", + "nopt": "^8.0.0", + "semver": "^7.5.3", + "tar": "^7.4.0" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", "license": "ISC", "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@lerna/create/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, + "node_modules/@mapbox/node-pre-gyp/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/@lerna/create/node_modules/node-fetch": { - "version": "2.6.7", - "dev": true, + "node_modules/@mapbox/node-pre-gyp/node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "minipass": "^7.1.2" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "node": ">= 18" } }, - "node_modules/@lerna/create/node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, - "node_modules/@lerna/create/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, + "node_modules/@mapbox/node-pre-gyp/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" + "bin": { + "mkdirp": "dist/cjs/src/bin.js" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@lerna/create/node_modules/tar": { - "version": "6.2.1", - "dev": true, + "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", "license": "ISC", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=10" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "2.0.0", - "license": "BSD-3-Clause", + "node_modules/@mapbox/node-pre-gyp/node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "license": "ISC", "dependencies": { - "consola": "^3.2.3", - "detect-libc": "^2.0.0", - "https-proxy-agent": "^7.0.5", - "node-fetch": "^2.6.7", - "nopt": "^8.0.0", - "semver": "^7.5.3", - "tar": "^7.4.0" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" }, "engines": { "node": ">=18" } }, + "node_modules/@mapbox/node-pre-gyp/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", + "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1193,6 +1728,8 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -1205,6 +1742,8 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -1213,6 +1752,8 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -1225,6 +1766,8 @@ }, "node_modules/@npmcli/agent": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", "dev": true, "license": "ISC", "dependencies": { @@ -1238,33 +1781,10 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/agent/node_modules/http-proxy-agent": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { - "version": "8.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/@npmcli/arborist": { "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-7.5.4.tgz", + "integrity": "sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g==", "dev": true, "license": "ISC", "dependencies": { @@ -1311,16 +1831,10 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/arborist/node_modules/abbrev": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/@npmcli/arborist/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, "license": "MIT", "dependencies": { @@ -1329,6 +1843,8 @@ }, "node_modules/@npmcli/arborist/node_modules/minimatch": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -1341,22 +1857,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/arborist/node_modules/nopt": { - "version": "7.2.1", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/@npmcli/fs": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", "dev": true, "license": "ISC", "dependencies": { @@ -1368,6 +1872,8 @@ }, "node_modules/@npmcli/git": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", + "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", "dev": true, "license": "ISC", "dependencies": { @@ -1387,6 +1893,8 @@ }, "node_modules/@npmcli/git/node_modules/ini": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", "dev": true, "license": "ISC", "engines": { @@ -1395,6 +1903,8 @@ }, "node_modules/@npmcli/git/node_modules/isexe": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, "license": "ISC", "engines": { @@ -1403,6 +1913,8 @@ }, "node_modules/@npmcli/git/node_modules/which": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, "license": "ISC", "dependencies": { @@ -1417,6 +1929,8 @@ }, "node_modules/@npmcli/installed-package-contents": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", "dev": true, "license": "ISC", "dependencies": { @@ -1432,6 +1946,8 @@ }, "node_modules/@npmcli/map-workspaces": { "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz", + "integrity": "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==", "dev": true, "license": "ISC", "dependencies": { @@ -1446,6 +1962,8 @@ }, "node_modules/@npmcli/map-workspaces/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, "license": "MIT", "dependencies": { @@ -1454,6 +1972,8 @@ }, "node_modules/@npmcli/map-workspaces/node_modules/glob": { "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { @@ -1473,6 +1993,8 @@ }, "node_modules/@npmcli/map-workspaces/node_modules/jackspeak": { "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -1487,6 +2009,8 @@ }, "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -1501,6 +2025,8 @@ }, "node_modules/@npmcli/map-workspaces/node_modules/path-scurry": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -1516,6 +2042,8 @@ }, "node_modules/@npmcli/metavuln-calculator": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz", + "integrity": "sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g==", "dev": true, "license": "ISC", "dependencies": { @@ -1531,6 +2059,9 @@ }, "node_modules/@npmcli/move-file": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", "license": "MIT", "dependencies": { "mkdirp": "^1.0.4", @@ -1542,34 +2073,30 @@ }, "node_modules/@npmcli/move-file/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=10" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@npmcli/move-file/node_modules/rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "license": "ISC", "dependencies": { "glob": "^7.1.3" @@ -1583,6 +2110,8 @@ }, "node_modules/@npmcli/name-from-folder": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", + "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", "dev": true, "license": "ISC", "engines": { @@ -1591,6 +2120,8 @@ }, "node_modules/@npmcli/node-gyp": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true, "license": "ISC", "engines": { @@ -1599,6 +2130,8 @@ }, "node_modules/@npmcli/package-json": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", + "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", "dev": true, "license": "ISC", "dependencies": { @@ -1616,6 +2149,8 @@ }, "node_modules/@npmcli/package-json/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, "license": "MIT", "dependencies": { @@ -1624,6 +2159,8 @@ }, "node_modules/@npmcli/package-json/node_modules/glob": { "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { @@ -1643,6 +2180,8 @@ }, "node_modules/@npmcli/package-json/node_modules/jackspeak": { "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -1657,6 +2196,8 @@ }, "node_modules/@npmcli/package-json/node_modules/minimatch": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -1671,6 +2212,8 @@ }, "node_modules/@npmcli/package-json/node_modules/path-scurry": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -1686,6 +2229,8 @@ }, "node_modules/@npmcli/promise-spawn": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", + "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", "dev": true, "license": "ISC", "dependencies": { @@ -1697,6 +2242,8 @@ }, "node_modules/@npmcli/promise-spawn/node_modules/isexe": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, "license": "ISC", "engines": { @@ -1705,6 +2252,8 @@ }, "node_modules/@npmcli/promise-spawn/node_modules/which": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, "license": "ISC", "dependencies": { @@ -1719,6 +2268,8 @@ }, "node_modules/@npmcli/query": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-3.1.0.tgz", + "integrity": "sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ==", "dev": true, "license": "ISC", "dependencies": { @@ -1730,6 +2281,8 @@ }, "node_modules/@npmcli/redact": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", + "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", "dev": true, "license": "ISC", "engines": { @@ -1738,6 +2291,8 @@ }, "node_modules/@npmcli/run-script": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz", + "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", "dev": true, "license": "ISC", "dependencies": { @@ -1752,117 +2307,66 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/run-script/node_modules/abbrev": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/run-script/node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/run-script/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=16" } }, - "node_modules/@npmcli/run-script/node_modules/glob": { - "version": "10.4.5", + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, "license": "ISC", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "isexe": "^3.1.1" }, "bin": { - "glob": "dist/esm/bin.mjs" + "node-which": "bin/which.js" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/run-script/node_modules/isexe": { - "version": "3.1.1", - "dev": true, - "license": "ISC", "engines": { - "node": ">=16" + "node": "^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/run-script/node_modules/jackspeak": { - "version": "3.4.3", + "node_modules/@nx/devkit": { + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.8.2.tgz", + "integrity": "sha512-rr9p2/tZDQivIpuBUpZaFBK6bZ+b5SAjZk75V4tbCUqGW3+5OPuVvBPm+X+7PYwUF6rwSpewxkjWNeGskfCe+Q==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "minimatch": "9.0.3", + "semver": "^7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "peerDependencies": { + "nx": ">= 19 <= 21" } }, - "node_modules/@npmcli/run-script/node_modules/make-fetch-happen": { - "version": "13.0.1", + "node_modules/@nx/devkit/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, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "balanced-match": "^1.0.0" } }, - "node_modules/@npmcli/run-script/node_modules/minimatch": { - "version": "9.0.5", + "node_modules/@nx/devkit/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "license": "ISC", "dependencies": { @@ -1875,181 +2379,173 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/run-script/node_modules/minipass-fetch": { - "version": "3.0.5", + "node_modules/@nx/devkit/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true, "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" + "node": ">=14.14" } }, - "node_modules/@npmcli/run-script/node_modules/mkdirp": { - "version": "1.0.4", + "node_modules/@nx/nx-darwin-arm64": { + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.8.2.tgz", + "integrity": "sha512-t+bmCn6sRPNGU6hnSyWNvbQYA/KgsxGZKYlaCLRwkNhI2akModcBUqtktJzCKd1XHDqs6EkEFBWjFr8/kBEkSg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10" + "node": ">= 10" } }, - "node_modules/@npmcli/run-script/node_modules/negotiator": { - "version": "0.6.4", + "node_modules/@nx/nx-darwin-x64": { + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.8.2.tgz", + "integrity": "sha512-pt/wmDLM31Es8/EzazlyT5U+ou2l60rfMNFGCLqleHEQ0JUTc0KWnOciBLbHIQFiPsCQZJFEKyfV5V/ncePmmw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.6" + "node": ">= 10" } }, - "node_modules/@npmcli/run-script/node_modules/node-gyp": { - "version": "10.3.1", + "node_modules/@nx/nx-freebsd-x64": { + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.8.2.tgz", + "integrity": "sha512-joZxFbgJfkHkB9uMIJr73Gpnm9pnpvr0XKGbWC409/d2x7q1qK77tKdyhGm+A3+kaZFwstNVPmCUtUwJYyU6LA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^4.1.0", - "semver": "^7.3.5", - "tar": "^6.2.1", - "which": "^4.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/nopt": { - "version": "7.2.1", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/path-scurry": { - "version": "1.11.1", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/run-script/node_modules/tar": { - "version": "6.2.1", - "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=10" + "node": ">= 10" } }, - "node_modules/@npmcli/run-script/node_modules/tar/node_modules/minipass": { - "version": "5.0.0", + "node_modules/@nx/nx-linux-arm-gnueabihf": { + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.8.2.tgz", + "integrity": "sha512-98O/qsxn4vIMPY/FyzvmVrl7C5yFhCUVk0/4PF+PA2SvtQ051L1eMRY6bq/lb69qfN6szJPZ41PG5mPx0NeLZw==", + "cpu": [ + "arm" + ], "dev": true, - "license": "ISC", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "4.0.0", + "node_modules/@nx/nx-linux-arm64-gnu": { + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.8.2.tgz", + "integrity": "sha512-h6a+HxwfSpxsi4KpxGgPh9GDBmD2E+XqGCdfYpobabxqEBvlnIlJyuDhlRR06cTWpuNXHpRdrVogmV6m/YbtDg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": ">= 10" } }, - "node_modules/@nx/devkit": { - "version": "20.8.1", + "node_modules/@nx/nx-linux-arm64-musl": { + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.8.2.tgz", + "integrity": "sha512-4Ev+jM0VAxDHV/dFgMXjQTCXS4I8W4oMe7FSkXpG8RUn6JK659DC8ExIDPoGIh+Cyqq6r6mw1CSia+ciQWICWQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "ejs": "^3.1.7", - "enquirer": "~2.3.6", - "ignore": "^5.0.4", - "minimatch": "9.0.3", - "semver": "^7.5.3", - "tmp": "~0.2.1", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" - }, - "peerDependencies": { - "nx": ">= 19 <= 21" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@nx/devkit/node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/@nx/nx-linux-x64-gnu": { + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.8.2.tgz", + "integrity": "sha512-nR0ev+wxu+nQYRd7bhqggOxK7UfkV6h+Ko1mumUFyrM5GvPpz/ELhjJFSnMcOkOMcvH0b6G5uTBJvN1XWCkbmg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@nx/devkit/node_modules/minimatch": { - "version": "9.0.3", + "node_modules/@nx/nx-linux-x64-musl": { + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.8.2.tgz", + "integrity": "sha512-ost41l5yc2aq2Gc9bMMpaPi/jkXqbXEMEPHrxWKuKmaek3K2zbVDQzvBBNcQKxf/mlCsrqN4QO0mKYSRRqag5A==", + "cpu": [ + "x64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 10" } }, - "node_modules/@nx/devkit/node_modules/tmp": { - "version": "0.2.3", + "node_modules/@nx/nx-win32-arm64-msvc": { + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.8.2.tgz", + "integrity": "sha512-0SEOqT/daBG5WtM9vOGilrYaAuf1tiALdrFavY62+/arXYxXemUKmRI5qoKDTnvoLMBGkJs6kxhMO5b7aUXIvQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=14.14" + "node": ">= 10" } }, - "node_modules/@nx/nx-linux-x64-gnu": { - "version": "20.8.1", + "node_modules/@nx/nx-win32-x64-msvc": { + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.8.2.tgz", + "integrity": "sha512-iIsY+tVqes/NOqTbJmggL9Juie/iaDYlWgXA9IUv88FE9thqWKhVj4/tCcPjsOwzD+1SVna3YISEEFsx5UV4ew==", "cpu": [ "x64" ], @@ -2057,7 +2553,7 @@ "license": "MIT", "optional": true, "os": [ - "linux" + "win32" ], "engines": { "node": ">= 10" @@ -2065,6 +2561,8 @@ }, "node_modules/@octokit/auth-token": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", "dev": true, "license": "MIT", "engines": { @@ -2073,6 +2571,8 @@ }, "node_modules/@octokit/core": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.1.tgz", + "integrity": "sha512-dKYCMuPO1bmrpuogcjQ8z7ICCH3FP6WmxpwC03yjzGfZhj9fTJg6+bS1+UAplekbN2C+M61UNllGOOoAfGCrdQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2090,6 +2590,8 @@ }, "node_modules/@octokit/endpoint": { "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz", + "integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==", "dev": true, "license": "MIT", "dependencies": { @@ -2102,6 +2604,8 @@ }, "node_modules/@octokit/graphql": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz", + "integrity": "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==", "dev": true, "license": "MIT", "dependencies": { @@ -2115,16 +2619,22 @@ }, "node_modules/@octokit/openapi-types": { "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", "dev": true, "license": "MIT" }, "node_modules/@octokit/plugin-enterprise-rest": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", "dev": true, "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { "version": "11.4.4-cjs.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.4-cjs.2.tgz", + "integrity": "sha512-2dK6z8fhs8lla5PaOTgqfCGBxgAv/le+EhPs27KklPhm1bKObpu6lXzwfUEQ16ajXzqNrKMujsFyo9K2eaoISw==", "dev": true, "license": "MIT", "dependencies": { @@ -2139,6 +2649,8 @@ }, "node_modules/@octokit/plugin-request-log": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", + "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", "dev": true, "license": "MIT", "engines": { @@ -2150,6 +2662,8 @@ }, "node_modules/@octokit/plugin-rest-endpoint-methods": { "version": "13.3.2-cjs.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.2-cjs.1.tgz", + "integrity": "sha512-VUjIjOOvF2oELQmiFpWA1aOPdawpyaCUqcEBc/UOUnj3Xp6DJGrJ1+bjUIIDzdHjnFNO6q57ODMfdEZnoBkCwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2164,6 +2678,8 @@ }, "node_modules/@octokit/request": { "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz", + "integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==", "dev": true, "license": "MIT", "dependencies": { @@ -2178,6 +2694,8 @@ }, "node_modules/@octokit/request-error": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz", + "integrity": "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==", "dev": true, "license": "MIT", "dependencies": { @@ -2191,6 +2709,8 @@ }, "node_modules/@octokit/rest": { "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.2.tgz", + "integrity": "sha512-GmYiltypkHHtihFwPRxlaorG5R9VAHuk/vbszVoRTGXnAsY60wYLkh/E2XiFmdZmqrisw+9FaazS1i5SbdWYgA==", "dev": true, "license": "MIT", "dependencies": { @@ -2205,6 +2725,8 @@ }, "node_modules/@octokit/types": { "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", "dev": true, "license": "MIT", "dependencies": { @@ -2213,6 +2735,8 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "license": "MIT", "optional": true, @@ -2220,63 +2744,350 @@ "node": ">=14" } }, - "node_modules/@pkgr/core": { - "version": "0.2.4", + "node_modules/@pkgr/core": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.7.tgz", + "integrity": "sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz", + "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz", + "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz", + "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz", + "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz", + "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz", + "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz", + "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz", + "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz", + "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz", + "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz", + "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz", + "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz", + "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz", + "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz", + "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz", + "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz", + "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz", + "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "16.0.1", + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz", + "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.4", + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz", + "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.5", + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz", + "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==", "cpu": [ "x64" ], @@ -2284,16 +3095,20 @@ "license": "MIT", "optional": true, "os": [ - "linux" + "win32" ] }, "node_modules/@rtsao/scc": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true, "license": "MIT" }, "node_modules/@sigstore/bundle": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", + "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2305,6 +3120,8 @@ }, "node_modules/@sigstore/core": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", + "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2313,6 +3130,8 @@ }, "node_modules/@sigstore/protobuf-specs": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz", + "integrity": "sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2321,6 +3140,8 @@ }, "node_modules/@sigstore/sign": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", + "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2335,54 +3156,10 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { - "version": "13.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/sign/node_modules/minipass-fetch": { - "version": "3.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/@sigstore/sign/node_modules/negotiator": { - "version": "0.6.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/@sigstore/tuf": { "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", + "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2395,6 +3172,8 @@ }, "node_modules/@sigstore/verify": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", + "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2408,11 +3187,15 @@ }, "node_modules/@sinclair/typebox": { "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true, "license": "MIT" }, "node_modules/@tootallnate/once": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "license": "MIT", "engines": { "node": ">= 10" @@ -2420,26 +3203,36 @@ }, "node_modules/@tsconfig/node10": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true, "license": "MIT" }, "node_modules/@tufjs/canonical-json": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", "dev": true, "license": "MIT", "engines": { @@ -2448,6 +3241,8 @@ }, "node_modules/@tufjs/models": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", + "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", "dev": true, "license": "MIT", "dependencies": { @@ -2460,6 +3255,8 @@ }, "node_modules/@tufjs/models/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, "license": "MIT", "dependencies": { @@ -2468,6 +3265,8 @@ }, "node_modules/@tufjs/models/node_modules/minimatch": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -2482,6 +3281,8 @@ }, "node_modules/@tybys/wasm-util": { "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", "dev": true, "license": "MIT", "dependencies": { @@ -2490,6 +3291,8 @@ }, "node_modules/@types/conventional-commits-parser": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", + "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2498,6 +3301,8 @@ }, "node_modules/@types/eslint": { "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, "license": "MIT", "dependencies": { @@ -2507,6 +3312,8 @@ }, "node_modules/@types/eslint-scope": { "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, "license": "MIT", "dependencies": { @@ -2515,37 +3322,51 @@ } }, "node_modules/@types/estree": { - "version": "1.0.7", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/json5": { "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, "license": "MIT" }, "node_modules/@types/minimatch": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true, "license": "MIT" }, "node_modules/@types/minimist": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true, "license": "MIT" }, "node_modules/@types/mocha": { "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { - "version": "22.15.17", + "version": "22.15.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.30.tgz", + "integrity": "sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA==", "dev": true, "license": "MIT", "dependencies": { @@ -2554,24 +3375,30 @@ }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true, "license": "MIT" }, "node_modules/@types/resolve": { "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "dev": true, "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.32.1", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.1.tgz", + "integrity": "sha512-TDCXj+YxLgtvxvFlAvpoRv9MAncDLBV2oT9Bd7YBGC/b/sEURoOYuIwLI99rjWOfY3QtDzO+mk0n4AmdFExW8A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.32.1", - "@typescript-eslint/type-utils": "8.32.1", - "@typescript-eslint/utils": "8.32.1", - "@typescript-eslint/visitor-keys": "8.32.1", + "@typescript-eslint/scope-manager": "8.33.1", + "@typescript-eslint/type-utils": "8.33.1", + "@typescript-eslint/utils": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -2585,13 +3412,15 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "@typescript-eslint/parser": "^8.33.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.4", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, "license": "MIT", "engines": { @@ -2599,14 +3428,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.32.1", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.1.tgz", + "integrity": "sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.32.1", - "@typescript-eslint/types": "8.32.1", - "@typescript-eslint/typescript-estree": "8.32.1", - "@typescript-eslint/visitor-keys": "8.32.1", + "@typescript-eslint/scope-manager": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/typescript-estree": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", "debug": "^4.3.4" }, "engines": { @@ -2621,29 +3452,72 @@ "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.1.tgz", + "integrity": "sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.33.1", + "@typescript-eslint/types": "^8.33.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.32.1", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.1.tgz", + "integrity": "sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.32.1", - "@typescript-eslint/visitor-keys": "8.32.1" + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.1.tgz", + "integrity": "sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==", + "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.32.1", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.1.tgz", + "integrity": "sha512-1cG37d9xOkhlykom55WVwG2QRNC7YXlxMaMzqw2uPeJixBFfKWZgaP/hjAObqMN/u3fr5BrTwTnc31/L9jQ2ww==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.32.1", - "@typescript-eslint/utils": "8.32.1", + "@typescript-eslint/typescript-estree": "8.33.1", + "@typescript-eslint/utils": "8.33.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -2660,7 +3534,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.32.1", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.1.tgz", + "integrity": "sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==", "dev": true, "license": "MIT", "engines": { @@ -2672,12 +3548,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.32.1", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.1.tgz", + "integrity": "sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.32.1", - "@typescript-eslint/visitor-keys": "8.32.1", + "@typescript-eslint/project-service": "8.33.1", + "@typescript-eslint/tsconfig-utils": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -2698,6 +3578,8 @@ }, "node_modules/@typescript-eslint/typescript-estree/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, "license": "MIT", "dependencies": { @@ -2706,6 +3588,8 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -2719,14 +3603,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.32.1", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.1.tgz", + "integrity": "sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.32.1", - "@typescript-eslint/types": "8.32.1", - "@typescript-eslint/typescript-estree": "8.32.1" + "@typescript-eslint/scope-manager": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/typescript-estree": "8.33.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2741,11 +3627,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.32.1", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.1.tgz", + "integrity": "sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.32.1", + "@typescript-eslint/types": "8.33.1", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -2758,6 +3646,8 @@ }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2767,21 +3657,29 @@ }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, "license": "MIT", "dependencies": { @@ -2792,11 +3690,15 @@ }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -2808,6 +3710,8 @@ }, "node_modules/@webassemblyjs/ieee754": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, "license": "MIT", "dependencies": { @@ -2816,6 +3720,8 @@ }, "node_modules/@webassemblyjs/leb128": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2824,11 +3730,15 @@ }, "node_modules/@webassemblyjs/utf8": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2844,6 +3754,8 @@ }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, "license": "MIT", "dependencies": { @@ -2856,6 +3768,8 @@ }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, "license": "MIT", "dependencies": { @@ -2867,6 +3781,8 @@ }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2880,6 +3796,8 @@ }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, "license": "MIT", "dependencies": { @@ -2889,6 +3807,8 @@ }, "node_modules/@webpack-cli/configtest": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", + "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", "dev": true, "license": "MIT", "engines": { @@ -2901,6 +3821,8 @@ }, "node_modules/@webpack-cli/info": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", + "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", "dev": true, "license": "MIT", "engines": { @@ -2913,6 +3835,8 @@ }, "node_modules/@webpack-cli/serve": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", + "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", "dev": true, "license": "MIT", "engines": { @@ -2930,21 +3854,29 @@ }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/@yarnpkg/parsers": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz", + "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -2957,6 +3889,8 @@ }, "node_modules/@yarnpkg/parsers/node_modules/argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", "dependencies": { @@ -2965,6 +3899,8 @@ }, "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "license": "MIT", "dependencies": { @@ -2977,11 +3913,15 @@ }, "node_modules/@yarnpkg/parsers/node_modules/sprintf-js": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@zkochan/js-yaml": { "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", + "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2992,14 +3932,20 @@ } }, "node_modules/abbrev": { - "version": "3.0.1", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/abstract-leveldown": { "version": "0.12.4", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", + "integrity": "sha512-TOod9d5RDExo6STLMGa+04HGkl+TlMfbDnTyN93/ETJ9DpQ0DaYLqcMZlbXvdc4W3vVo1Qrl+WhSp8zvDsJ+jA==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dev": true, "license": "MIT", "dependencies": { @@ -3008,6 +3954,8 @@ }, "node_modules/abstract-leveldown/node_modules/xtend": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==", "dev": true, "engines": { "node": ">=0.4" @@ -3015,6 +3963,8 @@ }, "node_modules/accepts": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "license": "MIT", "dependencies": { "mime-types": "^3.0.0", @@ -3024,8 +3974,40 @@ "node": ">= 0.6" } }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, "license": "MIT", "bin": { @@ -3037,6 +4019,8 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -3045,6 +4029,8 @@ }, "node_modules/acorn-walk": { "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, "license": "MIT", "dependencies": { @@ -3056,11 +4042,15 @@ }, "node_modules/add-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", "dev": true, "license": "MIT" }, "node_modules/agent-base": { "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "license": "MIT", "engines": { "node": ">= 14" @@ -3068,6 +4058,8 @@ }, "node_modules/agentkeepalive": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", "license": "MIT", "dependencies": { "humanize-ms": "^1.2.1" @@ -3078,6 +4070,8 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", @@ -3089,6 +4083,8 @@ }, "node_modules/ajv": { "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", "dependencies": { @@ -3104,6 +4100,8 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "license": "MIT", "dependencies": { @@ -3120,6 +4118,8 @@ }, "node_modules/ajv-keywords": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "license": "MIT", "dependencies": { @@ -3131,6 +4131,8 @@ }, "node_modules/ansi-colors": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, "license": "MIT", "engines": { @@ -3139,6 +4141,8 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3153,6 +4157,8 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -3160,6 +4166,8 @@ }, "node_modules/ansi-styles": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", "engines": { @@ -3171,10 +4179,15 @@ }, "node_modules/aproba": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "license": "ISC" }, "node_modules/are-we-there-yet": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", "license": "ISC", "dependencies": { "delegates": "^1.0.0", @@ -3186,16 +4199,22 @@ }, "node_modules/arg": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true, "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { @@ -3211,6 +4230,8 @@ }, "node_modules/array-differ": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true, "license": "MIT", "engines": { @@ -3219,20 +4240,26 @@ }, "node_modules/array-ify": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", "dev": true, "license": "MIT" }, "node_modules/array-includes": { - "version": "3.1.8", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -3243,6 +4270,8 @@ }, "node_modules/array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "license": "MIT", "engines": { @@ -3251,6 +4280,8 @@ }, "node_modules/array.prototype.findlastindex": { "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3271,6 +4302,8 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", "dependencies": { @@ -3288,6 +4321,8 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { @@ -3305,6 +4340,8 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3325,6 +4362,8 @@ }, "node_modules/arrify": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true, "license": "MIT", "engines": { @@ -3333,6 +4372,8 @@ }, "node_modules/asn1.js": { "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "license": "MIT", "dependencies": { @@ -3343,11 +4384,15 @@ }, "node_modules/asn1.js/node_modules/bn.js": { "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, "license": "MIT" }, "node_modules/assert": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", "dev": true, "license": "MIT", "dependencies": { @@ -3360,10 +4405,14 @@ }, "node_modules/async": { "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "license": "MIT" }, "node_modules/async-function": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", "engines": { @@ -3372,11 +4421,15 @@ }, "node_modules/asynckit": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true, "license": "MIT" }, "node_modules/at-least-node": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true, "license": "ISC", "engines": { @@ -3385,6 +4438,8 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3399,6 +4454,8 @@ }, "node_modules/axios": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", + "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", "dev": true, "license": "MIT", "dependencies": { @@ -3409,10 +4466,14 @@ }, "node_modules/balanced-match": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { @@ -3432,6 +4493,8 @@ }, "node_modules/basic-auth": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", "license": "MIT", "dependencies": { "safe-buffer": "5.1.2" @@ -3442,15 +4505,21 @@ }, "node_modules/basic-auth/node_modules/safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "license": "MIT" }, "node_modules/before-after-hook": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/bin-links": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.4.tgz", + "integrity": "sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA==", "dev": true, "license": "ISC", "dependencies": { @@ -3465,6 +4534,8 @@ }, "node_modules/bl": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "license": "MIT", "dependencies": { @@ -3475,11 +4546,15 @@ }, "node_modules/bn.js": { "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", "dev": true, "license": "MIT" }, "node_modules/body-parser": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", @@ -3496,8 +4571,22 @@ "node": ">=18" } }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -3506,6 +4595,8 @@ }, "node_modules/braces": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { @@ -3517,11 +4608,15 @@ }, "node_modules/brorand": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "dev": true, "license": "MIT" }, "node_modules/browser-resolve": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3530,11 +4625,15 @@ }, "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, "license": "ISC" }, "node_modules/browserify-aes": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "license": "MIT", "dependencies": { @@ -3548,6 +4647,8 @@ }, "node_modules/browserify-cipher": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "license": "MIT", "dependencies": { @@ -3558,6 +4659,8 @@ }, "node_modules/browserify-des": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "license": "MIT", "dependencies": { @@ -3569,6 +4672,8 @@ }, "node_modules/browserify-fs": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-fs/-/browserify-fs-1.0.0.tgz", + "integrity": "sha512-8LqHRPuAEKvyTX34R6tsw4bO2ro6j9DmlYBhiYWHRM26Zv2cBw1fJOU0NeUQ0RkXkPn/PFBjhA0dm4AgaBurTg==", "dev": true, "dependencies": { "level-filesystem": "^1.0.1", @@ -3578,6 +4683,8 @@ }, "node_modules/browserify-rsa": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3591,6 +4698,8 @@ }, "node_modules/browserify-sign": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", "dev": true, "license": "ISC", "dependencies": { @@ -3611,6 +4720,8 @@ }, "node_modules/browserify-sign/node_modules/readable-stream": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { @@ -3625,11 +4736,15 @@ }, "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/browserify-sign/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", "dependencies": { @@ -3638,11 +4753,15 @@ }, "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/browserify-zlib": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "license": "MIT", "dependencies": { @@ -3650,7 +4769,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.5", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", + "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", "dev": true, "funding": [ { @@ -3668,8 +4789,8 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001716", - "electron-to-chromium": "^1.5.149", + "caniuse-lite": "^1.0.30001718", + "electron-to-chromium": "^1.5.160", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, @@ -3682,6 +4803,8 @@ }, "node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -3705,6 +4828,9 @@ }, "node_modules/buffer-browserify": { "version": "0.2.5", + "resolved": "https://registry.npmjs.org/buffer-browserify/-/buffer-browserify-0.2.5.tgz", + "integrity": "sha512-3ko6TTBwXb15w2OgZuyAzLJwUFClBMvcKcmhF+iQ79G71K8Fc3RqKzroCN0a0DbZw2GM3q9lNoqfYYCTq6w7QA==", + "deprecated": "Package not maintained. Recent browserify uses https://github.com/feross/buffer", "dev": true, "license": "MIT/X11", "dependencies": { @@ -3713,6 +4839,8 @@ }, "node_modules/buffer-browserify/node_modules/base64-js": { "version": "0.0.8", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", + "integrity": "sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==", "dev": true, "license": "MIT", "engines": { @@ -3721,26 +4849,36 @@ }, "node_modules/buffer-es6": { "version": "4.9.3", + "resolved": "https://registry.npmjs.org/buffer-es6/-/buffer-es6-4.9.3.tgz", + "integrity": "sha512-Ibt+oXxhmeYJSsCkODPqNpPmyegefiD8rfutH1NYGhMZQhSp95Rz7haemgnJ6dxa6LT+JLLbtgOMORRluwKktw==", "dev": true, "license": "MIT" }, "node_modules/buffer-from": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true, "license": "MIT" }, "node_modules/buffer-xor": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "dev": true, "license": "MIT" }, "node_modules/builtin-status-codes": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", "dev": true, "license": "MIT" }, "node_modules/byte-size": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz", + "integrity": "sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==", "dev": true, "license": "MIT", "engines": { @@ -3749,6 +4887,8 @@ }, "node_modules/bytes": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -3756,6 +4896,8 @@ }, "node_modules/cacache": { "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", "dev": true, "license": "ISC", "dependencies": { @@ -3778,22 +4920,18 @@ }, "node_modules/cacache/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, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, - "node_modules/cacache/node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, "node_modules/cacache/node_modules/glob": { "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { @@ -3813,6 +4951,8 @@ }, "node_modules/cacache/node_modules/jackspeak": { "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -3827,6 +4967,8 @@ }, "node_modules/cacache/node_modules/minimatch": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -3835,84 +4977,31 @@ "engines": { "node": ">=16 || 14 >=14.17" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacache/node_modules/path-scurry": { - "version": "1.11.1", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/tar": { - "version": "6.2.1", - "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacache/node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cacache/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cacache/node_modules/tar/node_modules/minipass": { - "version": "5.0.0", + "node_modules/cacache/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/cachedir": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", "dev": true, "license": "MIT", "engines": { @@ -3921,6 +5010,8 @@ }, "node_modules/call-bind": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { @@ -3938,6 +5029,8 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -3949,6 +5042,8 @@ }, "node_modules/call-bound": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -3963,6 +5058,8 @@ }, "node_modules/callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", "engines": { @@ -3970,18 +5067,19 @@ } }, "node_modules/camelcase": { - "version": "6.3.0", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, "node_modules/camelcase-keys": { "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "license": "MIT", "dependencies": { @@ -3996,16 +5094,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/camelcase-keys/node_modules/camelcase": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001717", + "version": "1.0.30001721", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz", + "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==", "dev": true, "funding": [ { @@ -4025,6 +5117,8 @@ }, "node_modules/chalk": { "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", "dev": true, "license": "MIT", "engines": { @@ -4036,11 +5130,15 @@ }, "node_modules/chardet": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true, "license": "MIT" }, "node_modules/chokidar": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, "license": "MIT", "dependencies": { @@ -4054,14 +5152,18 @@ } }, "node_modules/chownr": { - "version": "3.0.0", - "license": "BlueOak-1.0.0", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", "engines": { - "node": ">=18" + "node": ">=10" } }, "node_modules/chrome-trace-event": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, "license": "MIT", "engines": { @@ -4070,6 +5172,8 @@ }, "node_modules/ci-info": { "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -4084,6 +5188,8 @@ }, "node_modules/cipher-base": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", "dev": true, "license": "MIT", "dependencies": { @@ -4096,6 +5202,8 @@ }, "node_modules/clean-stack": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "license": "MIT", "engines": { "node": ">=6" @@ -4103,6 +5211,8 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "license": "MIT", "dependencies": { @@ -4114,6 +5224,8 @@ }, "node_modules/cli-spinners": { "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", "dev": true, "license": "MIT", "engines": { @@ -4125,6 +5237,8 @@ }, "node_modules/cli-truncate": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, "license": "MIT", "dependencies": { @@ -4140,6 +5254,8 @@ }, "node_modules/cli-truncate/node_modules/ansi-regex": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "license": "MIT", "engines": { @@ -4151,11 +5267,15 @@ }, "node_modules/cli-truncate/node_modules/emoji-regex": { "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true, "license": "MIT" }, "node_modules/cli-truncate/node_modules/string-width": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4172,6 +5292,8 @@ }, "node_modules/cli-truncate/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4186,6 +5308,8 @@ }, "node_modules/cli-width": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, "license": "ISC", "engines": { @@ -4194,6 +5318,8 @@ }, "node_modules/cliui": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "license": "ISC", "dependencies": { @@ -4207,6 +5333,8 @@ }, "node_modules/clone": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "license": "MIT", "engines": { @@ -4215,6 +5343,8 @@ }, "node_modules/clone-deep": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4228,6 +5358,8 @@ }, "node_modules/cmd-shim": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.3.tgz", + "integrity": "sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==", "dev": true, "license": "ISC", "engines": { @@ -4236,6 +5368,8 @@ }, "node_modules/coffeescript": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.7.0.tgz", + "integrity": "sha512-hzWp6TUE2d/jCcN67LrW1eh5b/rSDKQK6oD6VMLlggYVUUFexgTH9z3dNYihzX4RMhze5FTUsUmOXViJKFQR/A==", "dev": true, "license": "MIT", "bin": { @@ -4248,6 +5382,8 @@ }, "node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -4258,10 +5394,14 @@ }, "node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/color-support": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "license": "ISC", "bin": { "color-support": "bin.js" @@ -4269,11 +5409,15 @@ }, "node_modules/colorette": { "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true, "license": "MIT" }, "node_modules/columnify": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4286,6 +5430,8 @@ }, "node_modules/combined-stream": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "license": "MIT", "dependencies": { @@ -4296,15 +5442,19 @@ } }, "node_modules/commander": { - "version": "13.1.0", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.0.tgz", + "integrity": "sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/commitizen": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.1.tgz", + "integrity": "sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw==", "dev": true, "license": "MIT", "dependencies": { @@ -4334,6 +5484,9 @@ }, "node_modules/commitizen/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -4353,6 +5506,8 @@ }, "node_modules/commitizen/node_modules/minimist": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true, "license": "MIT", "funding": { @@ -4361,11 +5516,15 @@ }, "node_modules/common-ancestor-path": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", "dev": true, "license": "ISC" }, "node_modules/compare-func": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, "license": "MIT", "dependencies": { @@ -4375,10 +5534,14 @@ }, "node_modules/concat-map": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "license": "MIT" }, "node_modules/concat-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "dev": true, "engines": [ "node >= 6.0" @@ -4393,11 +5556,15 @@ }, "node_modules/confusing-browser-globals": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true, "license": "MIT" }, "node_modules/consola": { "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", "license": "MIT", "engines": { "node": "^14.18.0 || >=16.10.0" @@ -4405,19 +5572,27 @@ }, "node_modules/console-browserify": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, "node_modules/console-control-strings": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "license": "ISC" }, "node_modules/constants-browserify": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", "dev": true, "license": "MIT" }, "node_modules/content-disposition": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -4428,6 +5603,8 @@ }, "node_modules/content-type": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -4435,6 +5612,8 @@ }, "node_modules/conventional-changelog-angular": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", "dev": true, "license": "ISC", "dependencies": { @@ -4446,6 +5625,8 @@ }, "node_modules/conventional-changelog-conventionalcommits": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", + "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", "dev": true, "license": "ISC", "dependencies": { @@ -4457,6 +5638,8 @@ }, "node_modules/conventional-changelog-core": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz", + "integrity": "sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==", "dev": true, "license": "MIT", "dependencies": { @@ -4478,6 +5661,8 @@ }, "node_modules/conventional-changelog-core/node_modules/conventional-commits-parser": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", + "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", "dev": true, "license": "MIT", "dependencies": { @@ -4495,6 +5680,8 @@ }, "node_modules/conventional-changelog-core/node_modules/dargs": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, "license": "MIT", "engines": { @@ -4503,6 +5690,8 @@ }, "node_modules/conventional-changelog-core/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, "license": "MIT", "dependencies": { @@ -4515,6 +5704,8 @@ }, "node_modules/conventional-changelog-core/node_modules/git-raw-commits": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz", + "integrity": "sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==", "dev": true, "license": "MIT", "dependencies": { @@ -4531,6 +5722,8 @@ }, "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "license": "ISC", "dependencies": { @@ -4542,6 +5735,8 @@ }, "node_modules/conventional-changelog-core/node_modules/is-text-path": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, "license": "MIT", "dependencies": { @@ -4553,6 +5748,8 @@ }, "node_modules/conventional-changelog-core/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, "license": "MIT", "dependencies": { @@ -4564,6 +5761,8 @@ }, "node_modules/conventional-changelog-core/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { @@ -4575,6 +5774,8 @@ }, "node_modules/conventional-changelog-core/node_modules/meow": { "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4599,11 +5800,15 @@ }, "node_modules/conventional-changelog-core/node_modules/meow/node_modules/hosted-git-info": { "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", "dependencies": { @@ -4618,6 +5823,8 @@ }, "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg-up": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", "dependencies": { @@ -4634,6 +5841,8 @@ }, "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg-up/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, "license": "(MIT OR CC0-1.0)", "engines": { @@ -4642,6 +5851,8 @@ }, "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4653,6 +5864,8 @@ }, "node_modules/conventional-changelog-core/node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -4661,6 +5874,8 @@ }, "node_modules/conventional-changelog-core/node_modules/meow/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -4669,6 +5884,8 @@ }, "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4683,6 +5900,8 @@ }, "node_modules/conventional-changelog-core/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, "license": "MIT", "dependencies": { @@ -4697,6 +5916,8 @@ }, "node_modules/conventional-changelog-core/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, "license": "MIT", "dependencies": { @@ -4708,6 +5929,8 @@ }, "node_modules/conventional-changelog-core/node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -4716,6 +5939,8 @@ }, "node_modules/conventional-changelog-core/node_modules/split2": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "license": "ISC", "dependencies": { @@ -4724,6 +5949,8 @@ }, "node_modules/conventional-changelog-core/node_modules/text-extensions": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, "license": "MIT", "engines": { @@ -4732,6 +5959,8 @@ }, "node_modules/conventional-changelog-core/node_modules/type-fest": { "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -4743,6 +5972,8 @@ }, "node_modules/conventional-changelog-core/node_modules/yargs-parser": { "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { @@ -4751,6 +5982,8 @@ }, "node_modules/conventional-changelog-preset-loader": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz", + "integrity": "sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA==", "dev": true, "license": "MIT", "engines": { @@ -4759,6 +5992,8 @@ }, "node_modules/conventional-changelog-writer": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz", + "integrity": "sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4779,6 +6014,8 @@ }, "node_modules/conventional-changelog-writer/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, "license": "MIT", "dependencies": { @@ -4791,6 +6028,8 @@ }, "node_modules/conventional-changelog-writer/node_modules/hosted-git-info": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "license": "ISC", "dependencies": { @@ -4802,6 +6041,8 @@ }, "node_modules/conventional-changelog-writer/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, "license": "MIT", "dependencies": { @@ -4813,6 +6054,8 @@ }, "node_modules/conventional-changelog-writer/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { @@ -4824,6 +6067,8 @@ }, "node_modules/conventional-changelog-writer/node_modules/meow": { "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4848,6 +6093,8 @@ }, "node_modules/conventional-changelog-writer/node_modules/normalize-package-data": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4862,6 +6109,8 @@ }, "node_modules/conventional-changelog-writer/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, "license": "MIT", "dependencies": { @@ -4876,6 +6125,8 @@ }, "node_modules/conventional-changelog-writer/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, "license": "MIT", "dependencies": { @@ -4887,6 +6138,8 @@ }, "node_modules/conventional-changelog-writer/node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -4895,6 +6148,8 @@ }, "node_modules/conventional-changelog-writer/node_modules/read-pkg": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", "dependencies": { @@ -4909,6 +6164,8 @@ }, "node_modules/conventional-changelog-writer/node_modules/read-pkg-up": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", "dependencies": { @@ -4925,6 +6182,8 @@ }, "node_modules/conventional-changelog-writer/node_modules/read-pkg-up/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, "license": "(MIT OR CC0-1.0)", "engines": { @@ -4933,11 +6192,15 @@ }, "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4949,6 +6212,8 @@ }, "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -4957,6 +6222,8 @@ }, "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -4965,6 +6232,8 @@ }, "node_modules/conventional-changelog-writer/node_modules/type-fest": { "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -4976,6 +6245,8 @@ }, "node_modules/conventional-changelog-writer/node_modules/yargs-parser": { "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { @@ -4984,11 +6255,15 @@ }, "node_modules/conventional-commit-types": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz", + "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==", "dev": true, "license": "ISC" }, "node_modules/conventional-commits-filter": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz", + "integrity": "sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5001,6 +6276,8 @@ }, "node_modules/conventional-commits-parser": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", + "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", "dev": true, "license": "MIT", "dependencies": { @@ -5018,6 +6295,8 @@ }, "node_modules/conventional-recommended-bump": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz", + "integrity": "sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==", "dev": true, "license": "MIT", "dependencies": { @@ -5038,6 +6317,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/conventional-commits-parser": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", + "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", "dev": true, "license": "MIT", "dependencies": { @@ -5055,6 +6336,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/dargs": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, "license": "MIT", "engines": { @@ -5063,6 +6346,8 @@ }, "node_modules/conventional-recommended-bump/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, "license": "MIT", "dependencies": { @@ -5075,6 +6360,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/git-raw-commits": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz", + "integrity": "sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==", "dev": true, "license": "MIT", "dependencies": { @@ -5091,6 +6378,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/hosted-git-info": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "license": "ISC", "dependencies": { @@ -5102,6 +6391,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/is-text-path": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, "license": "MIT", "dependencies": { @@ -5113,6 +6404,8 @@ }, "node_modules/conventional-recommended-bump/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, "license": "MIT", "dependencies": { @@ -5124,6 +6417,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { @@ -5135,6 +6430,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/meow": { "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5159,6 +6456,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/normalize-package-data": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -5173,6 +6472,8 @@ }, "node_modules/conventional-recommended-bump/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, "license": "MIT", "dependencies": { @@ -5187,6 +6488,8 @@ }, "node_modules/conventional-recommended-bump/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, "license": "MIT", "dependencies": { @@ -5198,6 +6501,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -5206,6 +6511,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/read-pkg": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", "dependencies": { @@ -5220,6 +6527,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/read-pkg-up": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", "dependencies": { @@ -5236,6 +6545,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/read-pkg-up/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, "license": "(MIT OR CC0-1.0)", "engines": { @@ -5244,11 +6555,15 @@ }, "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -5260,6 +6575,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -5268,6 +6585,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -5276,6 +6595,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/split2": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "license": "ISC", "dependencies": { @@ -5284,6 +6605,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/text-extensions": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, "license": "MIT", "engines": { @@ -5292,6 +6615,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/type-fest": { "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -5303,6 +6628,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/yargs-parser": { "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { @@ -5311,6 +6638,8 @@ }, "node_modules/cookie": { "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -5318,6 +6647,8 @@ }, "node_modules/cookie-signature": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "license": "MIT", "engines": { "node": ">=6.6.0" @@ -5325,11 +6656,15 @@ }, "node_modules/core-util-is": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true, "license": "MIT" }, "node_modules/corser": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", "license": "MIT", "engines": { "node": ">= 0.4.0" @@ -5337,6 +6672,8 @@ }, "node_modules/cosmiconfig": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "license": "MIT", "dependencies": { @@ -5362,6 +6699,8 @@ }, "node_modules/cosmiconfig-typescript-loader": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", + "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", "dev": true, "license": "MIT", "dependencies": { @@ -5378,6 +6717,8 @@ }, "node_modules/create-ecdh": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "license": "MIT", "dependencies": { @@ -5387,11 +6728,15 @@ }, "node_modules/create-ecdh/node_modules/bn.js": { "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, "license": "MIT" }, "node_modules/create-hash": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "license": "MIT", "dependencies": { @@ -5404,6 +6749,8 @@ }, "node_modules/create-hmac": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "license": "MIT", "dependencies": { @@ -5417,11 +6764,15 @@ }, "node_modules/create-require": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true, "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -5435,6 +6786,8 @@ }, "node_modules/crypto-browserify": { "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5460,6 +6813,8 @@ }, "node_modules/cssesc": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, "license": "MIT", "bin": { @@ -5523,6 +6878,8 @@ }, "node_modules/csv-spectrum": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/csv-spectrum/-/csv-spectrum-2.0.0.tgz", + "integrity": "sha512-gjW9YEAkcrJo4AEdrV9+4lkUXlOyYyC+1Ap3efzMiUUs1OTdZ29VraBZNBBKZK7iiUkbMNkUmfKp/jnayzHxAA==", "dev": true, "license": "BSD-2-Clause" }, @@ -5532,6 +6889,8 @@ }, "node_modules/cz-conventional-changelog": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", + "integrity": "sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==", "dev": true, "license": "MIT", "dependencies": { @@ -5551,6 +6910,8 @@ }, "node_modules/cz-conventional-changelog/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "license": "MIT", "dependencies": { @@ -5562,6 +6923,8 @@ }, "node_modules/cz-conventional-changelog/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5575,6 +6938,8 @@ }, "node_modules/cz-conventional-changelog/node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "license": "MIT", "dependencies": { @@ -5583,11 +6948,15 @@ }, "node_modules/cz-conventional-changelog/node_modules/color-name": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true, "license": "MIT" }, "node_modules/cz-conventional-changelog/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", "engines": { @@ -5596,6 +6965,8 @@ }, "node_modules/cz-conventional-changelog/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "license": "MIT", "engines": { @@ -5604,6 +6975,8 @@ }, "node_modules/cz-conventional-changelog/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", "dependencies": { @@ -5615,6 +6988,8 @@ }, "node_modules/dargs": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", + "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", "dev": true, "license": "MIT", "engines": { @@ -5626,6 +7001,8 @@ }, "node_modules/data-view-buffer": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5642,6 +7019,8 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5658,6 +7037,8 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5674,6 +7055,8 @@ }, "node_modules/dateformat": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, "license": "MIT", "engines": { @@ -5681,7 +7064,9 @@ } }, "node_modules/debug": { - "version": "4.4.0", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -5696,18 +7081,19 @@ } }, "node_modules/decamelize": { - "version": "4.0.0", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, "node_modules/decamelize-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "license": "MIT", "dependencies": { @@ -5721,16 +7107,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decamelize-keys/node_modules/decamelize": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, "license": "MIT", "engines": { @@ -5739,16 +7119,22 @@ }, "node_modules/dedent": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true, "license": "MIT" }, "node_modules/deep-is": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, "license": "MIT", "engines": { @@ -5757,6 +7143,8 @@ }, "node_modules/defaults": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "license": "MIT", "dependencies": { @@ -5768,6 +7156,9 @@ }, "node_modules/deferred-leveldown": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", + "integrity": "sha512-+WCbb4+ez/SZ77Sdy1iadagFiVzMB89IKOBhglgnUkVxOxRWmmFsz8UDSNWh4Rhq+3wr/vMFlYj+rdEwWUDdng==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dev": true, "license": "MIT", "dependencies": { @@ -5776,6 +7167,8 @@ }, "node_modules/define-data-property": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { @@ -5792,6 +7185,8 @@ }, "node_modules/define-lazy-prop": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, "license": "MIT", "engines": { @@ -5800,6 +7195,8 @@ }, "node_modules/define-properties": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -5814,16 +7211,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-properties/node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, "license": "MIT", "engines": { @@ -5832,10 +7223,14 @@ }, "node_modules/delegates": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "license": "MIT" }, "node_modules/depd": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -5843,11 +7238,15 @@ }, "node_modules/deprecation": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dev": true, "license": "ISC" }, "node_modules/des.js": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dev": true, "license": "MIT", "dependencies": { @@ -5857,155 +7256,535 @@ }, "node_modules/desm": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/desm/-/desm-1.3.1.tgz", + "integrity": "sha512-vgTAOosB1aHrmzjGnzFCbjvXbk8QAOC/36JxJhcBkeAuUy8QwRFxAWBHemiDpUB3cbrBruFUdzpUS21aocvaWg==", "license": "MIT" }, "node_modules/detect-file": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dirname-filename-esm": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/dirname-filename-esm/-/dirname-filename-esm-1.1.2.tgz", + "integrity": "sha512-mMhH2imzJN95KnX/iDAhC0QDG0VU833c88U3SXCaQzATu7YlO9YTFD/CF9Nn2xhSwFlV9iWEKb/YyGJ4TwCcPg==", + "dev": true, + "license": "MIT" + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/domain-browser": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.22.0.tgz", + "integrity": "sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/duckdb": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/duckdb/-/duckdb-1.3.0.tgz", + "integrity": "sha512-7PMLj/1xVXaFRYR2RlsmFEweeaR7z/y8rPCa9BG7ZGNUGMy+BUGTYceiV7FxbPIJLDho2Kr6SF4hICDsDTIUlQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@mapbox/node-pre-gyp": "^2.0.0", + "node-addon-api": "^7.0.0", + "node-gyp": "^9.3.0" + } + }, + "node_modules/duckdb-async": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/duckdb-async/-/duckdb-async-1.2.1.tgz", + "integrity": "sha512-Q48ki2lxIWRmTYUxycnPIWKEOQemsYQuATFIWDrz8l56ymaLao5hm4iFZCzSQ9t4dpNfQgYR+cVunxH3DT3o4A==", + "license": "MIT", + "dependencies": { + "duckdb": "^1.2.1" + } + }, + "node_modules/duckdb/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/duckdb/node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "license": "ISC" + }, + "node_modules/duckdb/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/duckdb/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==", "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/duckdb/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/duckdb/node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/detect-indent": { - "version": "6.1.0", - "dev": true, - "license": "MIT", + "node_modules/duckdb/node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/detect-libc": { - "version": "2.0.4", - "license": "Apache-2.0", + "node_modules/duckdb/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/diff": { - "version": "5.2.0", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/duckdb/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=0.3.1" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "dev": true, + "node_modules/duckdb/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 6" } }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "dev": true, + "node_modules/duckdb/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "license": "MIT", "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.2", - "dev": true, - "license": "MIT" + "node_modules/duckdb/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", + "node_modules/duckdb/node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "license": "ISC", "dependencies": { - "path-type": "^4.0.0" + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/dirname-filename-esm": { - "version": "1.1.2", - "dev": true, - "license": "MIT" + "node_modules/duckdb/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", + "node_modules/duckdb/node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "license": "ISC", "dependencies": { - "esutils": "^2.0.2" + "minipass": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/domain-browser": { - "version": "4.22.0", - "dev": true, + "node_modules/duckdb/node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "license": "MIT", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, - "funding": { - "url": "https://bevry.me/fund" + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "dev": true, + "node_modules/duckdb/node_modules/node-gyp": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", "license": "MIT", "dependencies": { - "is-obj": "^2.0.0" + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">=8" + "node": "^12.13 || ^14.13 || >=16" } }, - "node_modules/dotenv": { - "version": "16.4.7", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/duckdb/node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/duckdb/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://dotenvx.com" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/dotenv-expand": { - "version": "11.0.7", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/duckdb/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "license": "MIT", "dependencies": { - "dotenv": "^16.4.5" + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" }, "engines": { - "node": ">=12" + "node": ">= 10" + } + }, + "node_modules/duckdb/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" }, - "funding": { - "url": "https://dotenvx.com" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/duckdb": { - "version": "1.2.1", - "hasInstallScript": true, - "license": "MIT", + "node_modules/duckdb/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "license": "ISC", "dependencies": { - "@mapbox/node-pre-gyp": "^2.0.0", - "node-addon-api": "^7.0.0", - "node-gyp": "^9.3.0" + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/duckdb-async": { - "version": "1.2.1", - "license": "MIT", + "node_modules/duckdb/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "license": "ISC", "dependencies": { - "duckdb": "^1.2.1" + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/dunder-proto": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -6018,11 +7797,15 @@ }, "node_modules/duplexer": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true, "license": "MIT" }, "node_modules/each": { "version": "2.7.2", + "resolved": "https://registry.npmjs.org/each/-/each-2.7.2.tgz", + "integrity": "sha512-CXO0d3nbNO2e9vPlT0DF3BGXGIrNDWMmXGkXg1Mprex7ipTuppERBM4I5AILwobDEwxEOmaBlRT8gpH5M7yWAw==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -6031,15 +7814,21 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, "license": "MIT" }, "node_modules/ee-first": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, "node_modules/ejs": { "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -6053,12 +7842,16 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.152", + "version": "1.5.165", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.165.tgz", + "integrity": "sha512-naiMx1Z6Nb2TxPU6fiFrUrDTjyPMLdTtaOd2oLmG8zVSg2hCWGkhPyxwk+qRmZ1ytwVqUv0u7ZcDA5+ALhaUtw==", "dev": true, "license": "ISC" }, "node_modules/elliptic": { "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dev": true, "license": "MIT", "dependencies": { @@ -6073,15 +7866,21 @@ }, "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, "license": "MIT" }, "node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/encodeurl": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -6089,14 +7888,31 @@ }, "node_modules/encoding": { "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "license": "MIT", "optional": true, "dependencies": { "iconv-lite": "^0.6.2" } }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6105,6 +7921,8 @@ }, "node_modules/enhanced-resolve": { "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", "dev": true, "license": "MIT", "dependencies": { @@ -6117,6 +7935,8 @@ }, "node_modules/enquirer": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "license": "MIT", "dependencies": { @@ -6128,6 +7948,8 @@ }, "node_modules/env-paths": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "license": "MIT", "engines": { "node": ">=6" @@ -6135,6 +7957,8 @@ }, "node_modules/envinfo": { "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", "dev": true, "license": "MIT", "bin": { @@ -6146,6 +7970,8 @@ }, "node_modules/environment": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, "license": "MIT", "engines": { @@ -6157,10 +7983,14 @@ }, "node_modules/err-code": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "license": "MIT" }, "node_modules/errno": { "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, "license": "MIT", "dependencies": { @@ -6172,6 +8002,8 @@ }, "node_modules/error-ex": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "license": "MIT", "dependencies": { @@ -6179,7 +8011,9 @@ } }, "node_modules/es-abstract": { - "version": "1.23.9", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "dev": true, "license": "MIT", "dependencies": { @@ -6187,18 +8021,18 @@ "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", @@ -6210,21 +8044,24 @@ "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", + "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", + "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", + "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", @@ -6233,7 +8070,7 @@ "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -6242,16 +8079,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-abstract/node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/es-define-property": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -6259,6 +8090,8 @@ }, "node_modules/es-errors": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -6266,11 +8099,15 @@ }, "node_modules/es-module-lexer": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true, "license": "MIT" }, "node_modules/es-object-atoms": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -6281,6 +8118,8 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "license": "MIT", "dependencies": { @@ -6295,6 +8134,8 @@ }, "node_modules/es-shim-unscopables": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, "license": "MIT", "dependencies": { @@ -6306,6 +8147,8 @@ }, "node_modules/es-to-primitive": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { @@ -6321,7 +8164,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.4", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -6332,35 +8177,37 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.4", - "@esbuild/android-arm": "0.25.4", - "@esbuild/android-arm64": "0.25.4", - "@esbuild/android-x64": "0.25.4", - "@esbuild/darwin-arm64": "0.25.4", - "@esbuild/darwin-x64": "0.25.4", - "@esbuild/freebsd-arm64": "0.25.4", - "@esbuild/freebsd-x64": "0.25.4", - "@esbuild/linux-arm": "0.25.4", - "@esbuild/linux-arm64": "0.25.4", - "@esbuild/linux-ia32": "0.25.4", - "@esbuild/linux-loong64": "0.25.4", - "@esbuild/linux-mips64el": "0.25.4", - "@esbuild/linux-ppc64": "0.25.4", - "@esbuild/linux-riscv64": "0.25.4", - "@esbuild/linux-s390x": "0.25.4", - "@esbuild/linux-x64": "0.25.4", - "@esbuild/netbsd-arm64": "0.25.4", - "@esbuild/netbsd-x64": "0.25.4", - "@esbuild/openbsd-arm64": "0.25.4", - "@esbuild/openbsd-x64": "0.25.4", - "@esbuild/sunos-x64": "0.25.4", - "@esbuild/win32-arm64": "0.25.4", - "@esbuild/win32-ia32": "0.25.4", - "@esbuild/win32-x64": "0.25.4" + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" } }, "node_modules/escalade": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "engines": { @@ -6369,10 +8216,14 @@ }, "node_modules/escape-html": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { @@ -6383,9 +8234,9 @@ } }, "node_modules/eslint": { - "version": "9.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz", - "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==", + "version": "9.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.28.0.tgz", + "integrity": "sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6395,7 +8246,7 @@ "@eslint/config-helpers": "^0.2.1", "@eslint/core": "^0.14.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.27.0", + "@eslint/js": "9.28.0", "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -6445,6 +8296,8 @@ }, "node_modules/eslint-config-airbnb-base": { "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, "license": "MIT", "dependencies": { @@ -6463,6 +8316,8 @@ }, "node_modules/eslint-config-airbnb-base/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, "license": "ISC", "bin": { @@ -6471,6 +8326,8 @@ }, "node_modules/eslint-config-prettier": { "version": "10.1.5", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz", + "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==", "dev": true, "license": "MIT", "bin": { @@ -6485,6 +8342,8 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "license": "MIT", "dependencies": { @@ -6495,6 +8354,8 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6503,6 +8364,8 @@ }, "node_modules/eslint-module-utils": { "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "license": "MIT", "dependencies": { @@ -6519,6 +8382,8 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6527,6 +8392,8 @@ }, "node_modules/eslint-plugin-import": { "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "license": "MIT", "dependencies": { @@ -6559,6 +8426,8 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6567,6 +8436,8 @@ }, "node_modules/eslint-plugin-import/node_modules/json5": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "license": "MIT", "dependencies": { @@ -6578,6 +8449,8 @@ }, "node_modules/eslint-plugin-import/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, "license": "ISC", "bin": { @@ -6586,6 +8459,8 @@ }, "node_modules/eslint-plugin-import/node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -6594,6 +8469,8 @@ }, "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "license": "MIT", "dependencies": { @@ -6604,16 +8481,23 @@ } }, "node_modules/eslint-plugin-mocha": { - "version": "11.0.0", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-11.1.0.tgz", + "integrity": "sha512-rKntVWRsQFPbf8OkSgVNRVRrcVAPaGTyEgWCEyXaPDJkTl0v5/lwu1vTk5sWiUJU8l2sxwvGUZzSNrEKdVMeQw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.1", "globals": "^15.14.0" + }, + "peerDependencies": { + "eslint": ">=9.0.0" } }, "node_modules/eslint-plugin-mocha/node_modules/globals": { "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, "license": "MIT", "engines": { @@ -6624,12 +8508,14 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.4.0", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.1.tgz", + "integrity": "sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==", "dev": true, "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.11.0" + "synckit": "^0.11.7" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -6654,6 +8540,8 @@ }, "node_modules/eslint-scope": { "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6669,6 +8557,8 @@ }, "node_modules/eslint-visitor-keys": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -6680,6 +8570,8 @@ }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -6695,6 +8587,8 @@ }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -6709,6 +8603,8 @@ }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -6724,6 +8620,8 @@ }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -6739,11 +8637,15 @@ }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, "node_modules/eslint/node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -6758,6 +8660,8 @@ }, "node_modules/eslint/node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6772,6 +8676,8 @@ }, "node_modules/eslint/node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -6786,25 +8692,18 @@ }, "node_modules/eslint/node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { @@ -6816,6 +8715,8 @@ }, "node_modules/espree": { "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6832,6 +8733,8 @@ }, "node_modules/esprima": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "license": "BSD-2-Clause", "bin": { @@ -6844,6 +8747,8 @@ }, "node_modules/esquery": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6855,6 +8760,8 @@ }, "node_modules/esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6866,6 +8773,8 @@ }, "node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -6874,11 +8783,15 @@ }, "node_modules/estree-walker": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -6887,6 +8800,8 @@ }, "node_modules/etag": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -6894,11 +8809,15 @@ }, "node_modules/eventemitter3": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "dev": true, "license": "MIT" }, "node_modules/events": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "license": "MIT", "engines": { @@ -6907,6 +8826,8 @@ }, "node_modules/evp_bytestokey": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "license": "MIT", "dependencies": { @@ -6916,6 +8837,8 @@ }, "node_modules/execa": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6938,11 +8861,15 @@ }, "node_modules/execa/node_modules/signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/expand-tilde": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, "license": "MIT", "dependencies": { @@ -6954,10 +8881,14 @@ }, "node_modules/exponential-backoff": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", "license": "Apache-2.0" }, "node_modules/express": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "license": "MIT", "dependencies": { "accepts": "^2.0.0", @@ -6996,42 +8927,60 @@ "url": "https://opencollective.com/express" } }, - "node_modules/external-editor": { - "version": "3.1.0", - "dev": true, + "node_modules/express/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "license": "MIT", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "mime-db": "^1.54.0" }, "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/external-editor/node_modules/iconv-lite": { - "version": "0.4.24", + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, "node_modules/fast-deep-equal": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true, "license": "Apache-2.0" }, "node_modules/fast-glob": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -7047,6 +8996,8 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -7058,16 +9009,22 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, "license": "MIT" }, "node_modules/fast-uri": { "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", "dev": true, "funding": [ { @@ -7083,6 +9040,8 @@ }, "node_modules/fastest-levenshtein": { "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, "license": "MIT", "engines": { @@ -7091,6 +9050,8 @@ }, "node_modules/fastq": { "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, "license": "ISC", "dependencies": { @@ -7099,6 +9060,8 @@ }, "node_modules/figures": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "license": "MIT", "dependencies": { @@ -7113,6 +9076,8 @@ }, "node_modules/figures/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", "engines": { @@ -7121,6 +9086,8 @@ }, "node_modules/file-entry-cache": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7132,6 +9099,8 @@ }, "node_modules/filelist": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7140,6 +9109,8 @@ }, "node_modules/filelist/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, "license": "MIT", "dependencies": { @@ -7148,6 +9119,8 @@ }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "license": "ISC", "dependencies": { @@ -7159,6 +9132,8 @@ }, "node_modules/fill-range": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { @@ -7170,6 +9145,8 @@ }, "node_modules/finalhandler": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -7185,6 +9162,8 @@ }, "node_modules/find-node-modules": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", + "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", "dev": true, "license": "MIT", "dependencies": { @@ -7194,11 +9173,15 @@ }, "node_modules/find-root": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", "dev": true, "license": "MIT" }, "node_modules/find-up": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", "dev": true, "license": "MIT", "dependencies": { @@ -7215,6 +9198,8 @@ }, "node_modules/findup-sync": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7229,6 +9214,8 @@ }, "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, "license": "BSD-3-Clause", "bin": { @@ -7237,6 +9224,8 @@ }, "node_modules/flat-cache": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { @@ -7249,11 +9238,15 @@ }, "node_modules/flatted": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, "license": "ISC" }, "node_modules/follow-redirects": { "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", @@ -7272,6 +9265,8 @@ }, "node_modules/for-each": { "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { @@ -7286,11 +9281,15 @@ }, "node_modules/foreach": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", + "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==", "dev": true, "license": "MIT" }, "node_modules/foreground-child": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, "license": "ISC", "dependencies": { @@ -7305,40 +9304,26 @@ } }, "node_modules/form-data": { - "version": "4.0.2", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", + "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { "node": ">= 6" } }, - "node_modules/form-data/node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/form-data/node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/forwarded": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -7346,6 +9331,8 @@ }, "node_modules/fresh": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -7353,6 +9340,8 @@ }, "node_modules/front-matter": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", + "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", "dev": true, "license": "MIT", "dependencies": { @@ -7361,6 +9350,8 @@ }, "node_modules/front-matter/node_modules/argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", "dependencies": { @@ -7369,6 +9360,8 @@ }, "node_modules/front-matter/node_modules/js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "license": "MIT", "dependencies": { @@ -7381,16 +9374,22 @@ }, "node_modules/front-matter/node_modules/sprintf-js": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/fs-constants": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true, "license": "MIT" }, "node_modules/fs-extra": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7405,6 +9404,8 @@ }, "node_modules/fs-minipass": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, "license": "ISC", "dependencies": { @@ -7416,10 +9417,29 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7427,6 +9447,8 @@ }, "node_modules/function.prototype.name": { "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7446,6 +9468,8 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", "funding": { @@ -7454,6 +9478,8 @@ }, "node_modules/fwd-stream": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", + "integrity": "sha512-q2qaK2B38W07wfPSQDKMiKOD5Nzv2XyuvQlrmh1q0pxyHNanKHq8lwQ6n9zHucAwA5EbzRJKEgds2orn88rYTg==", "dev": true, "dependencies": { "readable-stream": "~1.0.26-4" @@ -7461,11 +9487,15 @@ }, "node_modules/fwd-stream/node_modules/isarray": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true, "license": "MIT" }, "node_modules/fwd-stream/node_modules/readable-stream": { "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "license": "MIT", "dependencies": { @@ -7477,11 +9507,16 @@ }, "node_modules/fwd-stream/node_modules/string_decoder": { "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "dev": true, "license": "MIT" }, "node_modules/gauge": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", "license": "ISC", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", @@ -7499,10 +9534,14 @@ }, "node_modules/gauge/node_modules/signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "license": "ISC" }, "node_modules/get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "license": "ISC", "engines": { @@ -7511,6 +9550,8 @@ }, "node_modules/get-east-asian-width": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", "dev": true, "license": "MIT", "engines": { @@ -7522,6 +9563,8 @@ }, "node_modules/get-intrinsic": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -7544,6 +9587,8 @@ }, "node_modules/get-pkg-repo": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, "license": "MIT", "dependencies": { @@ -7561,6 +9606,8 @@ }, "node_modules/get-pkg-repo/node_modules/cliui": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "license": "ISC", "dependencies": { @@ -7571,6 +9618,8 @@ }, "node_modules/get-pkg-repo/node_modules/hosted-git-info": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "license": "ISC", "dependencies": { @@ -7582,6 +9631,8 @@ }, "node_modules/get-pkg-repo/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { @@ -7593,6 +9644,8 @@ }, "node_modules/get-pkg-repo/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, "license": "MIT", "dependencies": { @@ -7610,6 +9663,8 @@ }, "node_modules/get-pkg-repo/node_modules/yargs-parser": { "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { @@ -7618,6 +9673,8 @@ }, "node_modules/get-port": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", "dev": true, "license": "MIT", "engines": { @@ -7629,6 +9686,8 @@ }, "node_modules/get-proto": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -7640,6 +9699,8 @@ }, "node_modules/get-stream": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", "dev": true, "license": "MIT", "engines": { @@ -7651,6 +9712,8 @@ }, "node_modules/get-symbol-description": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { @@ -7666,7 +9729,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.10.0", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7678,6 +9743,8 @@ }, "node_modules/git-raw-commits": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", + "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7694,6 +9761,8 @@ }, "node_modules/git-remote-origin-url": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", "dev": true, "license": "MIT", "dependencies": { @@ -7706,6 +9775,8 @@ }, "node_modules/git-remote-origin-url/node_modules/pify": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "license": "MIT", "engines": { @@ -7714,6 +9785,8 @@ }, "node_modules/git-semver-tags": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz", + "integrity": "sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==", "dev": true, "license": "MIT", "dependencies": { @@ -7729,6 +9802,8 @@ }, "node_modules/git-semver-tags/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, "license": "MIT", "dependencies": { @@ -7741,6 +9816,8 @@ }, "node_modules/git-semver-tags/node_modules/hosted-git-info": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "license": "ISC", "dependencies": { @@ -7752,6 +9829,8 @@ }, "node_modules/git-semver-tags/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, "license": "MIT", "dependencies": { @@ -7763,6 +9842,8 @@ }, "node_modules/git-semver-tags/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { @@ -7774,6 +9855,8 @@ }, "node_modules/git-semver-tags/node_modules/meow": { "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7798,6 +9881,8 @@ }, "node_modules/git-semver-tags/node_modules/normalize-package-data": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -7812,6 +9897,8 @@ }, "node_modules/git-semver-tags/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, "license": "MIT", "dependencies": { @@ -7826,6 +9913,8 @@ }, "node_modules/git-semver-tags/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, "license": "MIT", "dependencies": { @@ -7837,6 +9926,8 @@ }, "node_modules/git-semver-tags/node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -7845,6 +9936,8 @@ }, "node_modules/git-semver-tags/node_modules/read-pkg": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", "dependencies": { @@ -7859,6 +9952,8 @@ }, "node_modules/git-semver-tags/node_modules/read-pkg-up": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", "dependencies": { @@ -7875,6 +9970,8 @@ }, "node_modules/git-semver-tags/node_modules/read-pkg-up/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, "license": "(MIT OR CC0-1.0)", "engines": { @@ -7883,11 +9980,15 @@ }, "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -7899,6 +10000,8 @@ }, "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -7907,6 +10010,8 @@ }, "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -7915,6 +10020,8 @@ }, "node_modules/git-semver-tags/node_modules/type-fest": { "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -7926,6 +10033,8 @@ }, "node_modules/git-semver-tags/node_modules/yargs-parser": { "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { @@ -7934,6 +10043,8 @@ }, "node_modules/git-up": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", + "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7943,6 +10054,8 @@ }, "node_modules/git-url-parse": { "version": "14.0.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-14.0.0.tgz", + "integrity": "sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7951,6 +10064,8 @@ }, "node_modules/gitconfiglocal": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", "dev": true, "license": "BSD", "dependencies": { @@ -7959,11 +10074,15 @@ }, "node_modules/gitconfiglocal/node_modules/ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "license": "ISC" }, "node_modules/glob": { "version": "11.0.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz", + "integrity": "sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==", "dev": true, "license": "ISC", "dependencies": { @@ -7986,6 +10105,8 @@ }, "node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { @@ -7997,11 +10118,15 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/glob/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, "license": "MIT", "dependencies": { @@ -8010,6 +10135,8 @@ }, "node_modules/glob/node_modules/minimatch": { "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", "dev": true, "license": "ISC", "dependencies": { @@ -8024,6 +10151,8 @@ }, "node_modules/global-directory": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -8038,6 +10167,8 @@ }, "node_modules/global-modules": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "license": "MIT", "dependencies": { @@ -8051,6 +10182,8 @@ }, "node_modules/global-prefix": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, "license": "MIT", "dependencies": { @@ -8066,11 +10199,15 @@ }, "node_modules/global-prefix/node_modules/ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "license": "ISC" }, "node_modules/global-prefix/node_modules/which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "license": "ISC", "dependencies": { @@ -8082,6 +10219,8 @@ }, "node_modules/globals": { "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", "engines": { @@ -8093,6 +10232,8 @@ }, "node_modules/globalthis": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8108,6 +10249,8 @@ }, "node_modules/globby": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", "dependencies": { @@ -8127,6 +10270,8 @@ }, "node_modules/gopd": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -8137,15 +10282,21 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT" }, "node_modules/handlebars": { "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8166,6 +10317,8 @@ }, "node_modules/hard-rejection": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "license": "MIT", "engines": { @@ -8174,6 +10327,8 @@ }, "node_modules/has-bigints": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", "engines": { @@ -8185,6 +10340,8 @@ }, "node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "license": "MIT", "engines": { "node": ">=8" @@ -8192,6 +10349,8 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { @@ -8203,6 +10362,8 @@ }, "node_modules/has-proto": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8217,6 +10378,8 @@ }, "node_modules/has-symbols": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -8227,6 +10390,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { @@ -8241,10 +10406,14 @@ }, "node_modules/has-unicode": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "license": "ISC" }, "node_modules/hash-base": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", "dev": true, "license": "MIT", "dependencies": { @@ -8257,6 +10426,8 @@ }, "node_modules/hash.js": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "license": "MIT", "dependencies": { @@ -8266,6 +10437,8 @@ }, "node_modules/hasown": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -8276,6 +10449,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==", "license": "MIT", "bin": { "he": "bin/he" @@ -8283,6 +10458,8 @@ }, "node_modules/hmac-drbg": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, "license": "MIT", "dependencies": { @@ -8293,6 +10470,8 @@ }, "node_modules/homedir-polyfill": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, "license": "MIT", "dependencies": { @@ -8304,6 +10483,8 @@ }, "node_modules/hosted-git-info": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, "license": "ISC", "dependencies": { @@ -8315,6 +10496,8 @@ }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "license": "MIT", "dependencies": { "whatwg-encoding": "^2.0.0" @@ -8325,10 +10508,14 @@ }, "node_modules/http-cache-semantics": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "license": "BSD-2-Clause" }, "node_modules/http-errors": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "license": "MIT", "dependencies": { "depd": "2.0.0", @@ -8343,6 +10530,8 @@ }, "node_modules/http-proxy": { "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "license": "MIT", "dependencies": { "eventemitter3": "^4.0.0", @@ -8354,33 +10543,29 @@ } }, "node_modules/http-proxy-agent": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "6.0.2", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, "license": "MIT", "dependencies": { - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/http-proxy/node_modules/eventemitter3": { "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "license": "MIT" }, "node_modules/http-server": { "version": "14.1.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", "license": "MIT", "dependencies": { "basic-auth": "^2.0.1", @@ -8406,6 +10591,8 @@ }, "node_modules/http-server/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -8419,6 +10606,8 @@ }, "node_modules/http-server/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -8431,23 +10620,17 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/http-server/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/https-browserify": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", "dev": true, "license": "MIT" }, "node_modules/https-proxy-agent": { "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "license": "MIT", "dependencies": { "agent-base": "^7.1.2", @@ -8459,6 +10642,8 @@ }, "node_modules/human-signals": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -8467,6 +10652,8 @@ }, "node_modules/humanize-ms": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "license": "MIT", "dependencies": { "ms": "^2.0.0" @@ -8474,6 +10661,8 @@ }, "node_modules/husky": { "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, "license": "MIT", "bin": { @@ -8487,10 +10676,13 @@ } }, "node_modules/iconv-lite": { - "version": "0.6.3", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" @@ -8498,11 +10690,15 @@ }, "node_modules/idb-wrapper": { "version": "1.7.2", + "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", + "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==", "dev": true, "license": "MIT" }, "node_modules/ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { @@ -8522,6 +10718,8 @@ }, "node_modules/ignore": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -8530,6 +10728,8 @@ }, "node_modules/ignore-walk": { "version": "6.0.5", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", + "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", "dev": true, "license": "ISC", "dependencies": { @@ -8541,6 +10741,8 @@ }, "node_modules/ignore-walk/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, "license": "MIT", "dependencies": { @@ -8549,6 +10751,8 @@ }, "node_modules/ignore-walk/node_modules/minimatch": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -8563,6 +10767,8 @@ }, "node_modules/import-fresh": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8578,6 +10784,8 @@ }, "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", "engines": { @@ -8586,6 +10794,8 @@ }, "node_modules/import-local": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "license": "MIT", "dependencies": { @@ -8604,6 +10814,8 @@ }, "node_modules/import-meta-resolve": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", "dev": true, "license": "MIT", "funding": { @@ -8613,6 +10825,8 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "license": "MIT", "engines": { "node": ">=0.8.19" @@ -8620,6 +10834,8 @@ }, "node_modules/indent-string": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "license": "MIT", "engines": { "node": ">=8" @@ -8627,14 +10843,21 @@ }, "node_modules/indexof": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==", "dev": true }, "node_modules/infer-owner": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", "license": "ISC" }, "node_modules/inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -8643,10 +10866,14 @@ }, "node_modules/inherits": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, "node_modules/ini": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", "dev": true, "license": "ISC", "engines": { @@ -8655,6 +10882,8 @@ }, "node_modules/init-package-json": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-6.0.3.tgz", + "integrity": "sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w==", "dev": true, "license": "ISC", "dependencies": { @@ -8672,6 +10901,8 @@ }, "node_modules/inquirer": { "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8697,6 +10928,8 @@ }, "node_modules/inquirer/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -8711,6 +10944,8 @@ }, "node_modules/inquirer/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -8724,19 +10959,10 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/internal-slot": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { @@ -8750,6 +10976,8 @@ }, "node_modules/interpret": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, "license": "MIT", "engines": { @@ -8758,6 +10986,8 @@ }, "node_modules/ip-address": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "license": "MIT", "dependencies": { "jsbn": "1.1.0", @@ -8769,6 +10999,8 @@ }, "node_modules/ipaddr.js": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -8776,6 +11008,8 @@ }, "node_modules/is": { "version": "0.2.7", + "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", + "integrity": "sha512-ajQCouIvkcSnl2iRdK70Jug9mohIHVX9uKpoWnl115ov0R5mzBvRrXxrnHbsA+8AdwCwc/sfw7HXmd4I5EJBdQ==", "dev": true, "engines": { "node": "*" @@ -8783,6 +11017,8 @@ }, "node_modules/is-arguments": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "dev": true, "license": "MIT", "dependencies": { @@ -8798,6 +11034,8 @@ }, "node_modules/is-array-buffer": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { @@ -8814,11 +11052,15 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true, "license": "MIT" }, "node_modules/is-async-function": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8837,6 +11079,8 @@ }, "node_modules/is-bigint": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8851,6 +11095,8 @@ }, "node_modules/is-boolean-object": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { @@ -8866,6 +11112,8 @@ }, "node_modules/is-callable": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", "engines": { @@ -8877,6 +11125,8 @@ }, "node_modules/is-ci": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8888,6 +11138,8 @@ }, "node_modules/is-core-module": { "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", "dependencies": { @@ -8902,6 +11154,8 @@ }, "node_modules/is-data-view": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { @@ -8918,6 +11172,8 @@ }, "node_modules/is-date-object": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { @@ -8933,6 +11189,8 @@ }, "node_modules/is-docker": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, "license": "MIT", "bin": { @@ -8947,6 +11205,8 @@ }, "node_modules/is-extglob": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", "engines": { @@ -8955,6 +11215,8 @@ }, "node_modules/is-finalizationregistry": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { @@ -8969,6 +11231,8 @@ }, "node_modules/is-fullwidth-code-point": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, "license": "MIT", "engines": { @@ -8980,6 +11244,8 @@ }, "node_modules/is-generator-function": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8997,6 +11263,8 @@ }, "node_modules/is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { @@ -9008,6 +11276,8 @@ }, "node_modules/is-interactive": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, "license": "MIT", "engines": { @@ -9016,10 +11286,14 @@ }, "node_modules/is-lambda": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "license": "MIT" }, "node_modules/is-map": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", "engines": { @@ -9031,11 +11305,15 @@ }, "node_modules/is-module": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", "dev": true, "license": "MIT" }, "node_modules/is-nan": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", "dev": true, "license": "MIT", "dependencies": { @@ -9049,8 +11327,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { @@ -9059,6 +11352,8 @@ }, "node_modules/is-number-object": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { @@ -9074,6 +11369,8 @@ }, "node_modules/is-obj": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, "license": "MIT", "engines": { @@ -9082,10 +11379,14 @@ }, "node_modules/is-object": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", + "integrity": "sha512-GkfZZlIZtpkFrqyAXPQSRBMsaHAw+CgoKe2HXAkjd/sfoI9+hS8PT4wg2rJxdQyUKr7N2vHJbg7/jQtE5l5vBQ==", "dev": true }, "node_modules/is-plain-obj": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "license": "MIT", "engines": { @@ -9094,6 +11395,8 @@ }, "node_modules/is-plain-object": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "license": "MIT", "dependencies": { @@ -9105,10 +11408,14 @@ }, "node_modules/is-promise": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, "node_modules/is-regex": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { @@ -9126,6 +11433,8 @@ }, "node_modules/is-set": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", "engines": { @@ -9137,6 +11446,8 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { @@ -9151,6 +11462,8 @@ }, "node_modules/is-ssh": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz", + "integrity": "sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==", "dev": true, "license": "MIT", "dependencies": { @@ -9159,6 +11472,8 @@ }, "node_modules/is-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true, "license": "MIT", "engines": { @@ -9167,6 +11482,8 @@ }, "node_modules/is-string": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { @@ -9182,6 +11499,8 @@ }, "node_modules/is-symbol": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { @@ -9198,6 +11517,8 @@ }, "node_modules/is-text-path": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", "dev": true, "license": "MIT", "dependencies": { @@ -9209,6 +11530,8 @@ }, "node_modules/is-typed-array": { "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9223,6 +11546,8 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "license": "MIT", "engines": { @@ -9234,11 +11559,15 @@ }, "node_modules/is-utf8": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "dev": true, "license": "MIT" }, "node_modules/is-weakmap": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", "engines": { @@ -9250,6 +11579,8 @@ }, "node_modules/is-weakref": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { @@ -9264,6 +11595,8 @@ }, "node_modules/is-weakset": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9279,6 +11612,8 @@ }, "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, "license": "MIT", "engines": { @@ -9287,6 +11622,8 @@ }, "node_modules/is-wsl": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "license": "MIT", "dependencies": { @@ -9298,20 +11635,28 @@ }, "node_modules/isarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "license": "MIT" }, "node_modules/isbuffer": { "version": "0.0.0", + "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", + "integrity": "sha512-xU+NoHp+YtKQkaM2HsQchYn0sltxMxew0HavMfHbjnucBoTSGbw745tL+Z7QBANleWM1eEQMenEpi174mIeS4g==", "dev": true, "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "license": "MIT", "engines": { @@ -9320,6 +11665,8 @@ }, "node_modules/isomorphic-timers-promises": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz", + "integrity": "sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==", "dev": true, "license": "MIT", "engines": { @@ -9327,7 +11674,9 @@ } }, "node_modules/jackspeak": { - "version": "4.1.0", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -9342,6 +11691,8 @@ }, "node_modules/jake": { "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9359,6 +11710,8 @@ }, "node_modules/jake/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -9373,6 +11726,8 @@ }, "node_modules/jake/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -9386,19 +11741,10 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jake/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-diff": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "license": "MIT", "dependencies": { @@ -9413,6 +11759,8 @@ }, "node_modules/jest-diff/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -9427,6 +11775,8 @@ }, "node_modules/jest-diff/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -9440,19 +11790,10 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-get-type": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, "license": "MIT", "engines": { @@ -9461,6 +11802,8 @@ }, "node_modules/jest-worker": { "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "license": "MIT", "dependencies": { @@ -9472,8 +11815,26 @@ "node": ">= 10.13.0" } }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/jiti": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", "dev": true, "license": "MIT", "bin": { @@ -9482,11 +11843,15 @@ }, "node_modules/js-tokens": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -9498,20 +11863,28 @@ }, "node_modules/jsbn": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", "license": "MIT" }, "node_modules/json-buffer": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true, "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", "dev": true, "license": "MIT", "engines": { @@ -9520,16 +11893,22 @@ }, "node_modules/json-schema-traverse": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, "license": "MIT" }, "node_modules/json-stringify-nice": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", "dev": true, "license": "ISC", "funding": { @@ -9538,11 +11917,15 @@ }, "node_modules/json-stringify-safe": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true, "license": "ISC" }, "node_modules/json5": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", "bin": { @@ -9554,11 +11937,15 @@ }, "node_modules/jsonc-parser": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true, "license": "MIT" }, "node_modules/jsonfile": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9570,6 +11957,8 @@ }, "node_modules/jsonparse": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" @@ -9578,6 +11967,8 @@ }, "node_modules/JSONStream": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "license": "(MIT OR Apache-2.0)", "dependencies": { @@ -9593,16 +11984,22 @@ }, "node_modules/just-diff": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", + "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", "dev": true, "license": "MIT" }, "node_modules/just-diff-apply": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", + "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", "dev": true, "license": "MIT" }, "node_modules/keyv": { "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { @@ -9611,6 +12008,8 @@ }, "node_modules/kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "license": "MIT", "engines": { @@ -9619,6 +12018,8 @@ }, "node_modules/lerna": { "version": "8.2.2", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-8.2.2.tgz", + "integrity": "sha512-GkqBELTG4k7rfzAwRok2pKBvhNo046Hfwcj7TuhDah3q58/BBBAqvIFLfqEI5fglnNOs6maMSn6/MWjccQE55A==", "dev": true, "license": "MIT", "dependencies": { @@ -9712,6 +12113,8 @@ }, "node_modules/lerna/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -9726,6 +12129,8 @@ }, "node_modules/lerna/node_modules/chalk": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "license": "MIT", "dependencies": { @@ -9739,16 +12144,10 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/lerna/node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, "node_modules/lerna/node_modules/dedent": { "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -9762,6 +12161,8 @@ }, "node_modules/lerna/node_modules/fs-extra": { "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", "dev": true, "license": "MIT", "dependencies": { @@ -9773,35 +12174,17 @@ "node": ">=14.14" } }, - "node_modules/lerna/node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/lerna/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/lerna/node_modules/ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "license": "ISC" }, "node_modules/lerna/node_modules/minimatch": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "license": "ISC", "dependencies": { @@ -9811,78 +12194,17 @@ "node": "*" } }, - "node_modules/lerna/node_modules/minipass": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/lerna/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lerna/node_modules/node-fetch": { - "version": "2.6.7", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/lerna/node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, - "node_modules/lerna/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lerna/node_modules/tar": { - "version": "6.2.1", - "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" }, "node_modules/level-blobs": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz", + "integrity": "sha512-n0iYYCGozLd36m/Pzm206+brIgXP8mxPZazZ6ZvgKr+8YwOZ8/PPpYC5zMUu2qFygRN8RO6WC/HH3XWMW7RMVg==", "dev": true, "dependencies": { "level-peek": "1.0.6", @@ -9892,11 +12214,15 @@ }, "node_modules/level-blobs/node_modules/isarray": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true, "license": "MIT" }, "node_modules/level-blobs/node_modules/readable-stream": { "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9908,11 +12234,15 @@ }, "node_modules/level-blobs/node_modules/string_decoder": { "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "dev": true, "license": "MIT" }, "node_modules/level-filesystem": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz", + "integrity": "sha512-PhXDuCNYpngpxp3jwMT9AYBMgOvB6zxj3DeuIywNKmZqFj2djj9XfT2XDVslfqmo0Ip79cAd3SBy3FsfOZPJ1g==", "dev": true, "dependencies": { "concat-stream": "^1.4.4", @@ -9928,6 +12258,8 @@ }, "node_modules/level-filesystem/node_modules/concat-stream": { "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "engines": [ "node >= 0.8" @@ -9942,6 +12274,8 @@ }, "node_modules/level-filesystem/node_modules/readable-stream": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { @@ -9956,24 +12290,41 @@ }, "node_modules/level-filesystem/node_modules/safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/level-filesystem/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, + "node_modules/level-filesystem/node_modules/xtend": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/level-fix-range": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", + "integrity": "sha512-9llaVn6uqBiSlBP+wKiIEoBa01FwEISFgHSZiyec2S0KpyLUkGR4afW/FCZ/X8y+QJvzS0u4PGOlZDdh1/1avQ==", "dev": true, "license": "MIT" }, "node_modules/level-hooks": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz", + "integrity": "sha512-fxLNny/vL/G4PnkLhWsbHnEaRi+A/k8r5EH/M77npZwYL62RHi2fV0S824z3QdpAk6VTgisJwIRywzBHLK4ZVA==", "dev": true, "dependencies": { "string-range": "~1.2" @@ -9981,6 +12332,9 @@ }, "node_modules/level-js": { "version": "2.2.4", + "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz", + "integrity": "sha512-lZtjt4ZwHE00UMC1vAb271p9qzg8vKlnDeXfIesH3zL0KxhHRDjClQLGLWhyR0nK4XARnd4wc/9eD1ffd4PshQ==", + "deprecated": "Superseded by browser-level (https://github.com/Level/community#faq)", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -9992,8 +12346,17 @@ "xtend": "~2.1.2" } }, + "node_modules/level-js/node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", + "dev": true, + "license": "MIT" + }, "node_modules/level-js/node_modules/xtend": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", "dev": true, "dependencies": { "object-keys": "~0.4.0" @@ -10004,6 +12367,8 @@ }, "node_modules/level-peek": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz", + "integrity": "sha512-TKEzH5TxROTjQxWMczt9sizVgnmJ4F3hotBI48xCTYvOKd/4gA/uY0XjKkhJFo6BMic8Tqjf6jFMLWeg3MAbqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10012,6 +12377,8 @@ }, "node_modules/level-sublevel": { "version": "5.2.3", + "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz", + "integrity": "sha512-tO8jrFp+QZYrxx/Gnmjawuh1UBiifpvKNAcm4KCogesWr1Nm2+ckARitf+Oo7xg4OHqMW76eAqQ204BoIlscjA==", "dev": true, "license": "MIT", "dependencies": { @@ -10023,6 +12390,8 @@ }, "node_modules/level-sublevel/node_modules/clone": { "version": "0.1.19", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", + "integrity": "sha512-IO78I0y6JcSpEPHzK4obKdsL7E7oLdRVDVOLwr2Hkbjsb+Eoz0dxW6tef0WizoKu0gLC4oZSZuEF4U2K6w1WQw==", "dev": true, "license": "MIT", "engines": { @@ -10031,6 +12400,8 @@ }, "node_modules/level-sublevel/node_modules/level-fix-range": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz", + "integrity": "sha512-WrLfGWgwWbYPrHsYzJau+5+te89dUbENBg3/lsxOs4p2tYOhCHjbgXxBAj4DFqp3k/XBwitcRXoCh8RoCogASA==", "dev": true, "license": "MIT", "dependencies": { @@ -10039,6 +12410,9 @@ }, "node_modules/level-sublevel/node_modules/object-keys": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz", + "integrity": "sha512-XODjdR2pBh/1qrjPcbSeSgEtKbYo7LqYNq64/TPuCf7j9SfDD3i21yatKoIy39yIWNvVM59iutfQQpCv1RfFzA==", + "deprecated": "Please update to the latest object-keys", "dev": true, "license": "MIT", "dependencies": { @@ -10049,6 +12423,8 @@ }, "node_modules/level-sublevel/node_modules/xtend": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz", + "integrity": "sha512-fOZg4ECOlrMl+A6Msr7EIFcON1L26mb4NY5rurSkOex/TWhazOrg6eXD/B0XkuiYcYhQDWLXzQxLMVJ7LXwokg==", "dev": true, "dependencies": { "is-object": "~0.1.2", @@ -10060,6 +12436,9 @@ }, "node_modules/levelup": { "version": "0.18.6", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz", + "integrity": "sha512-uB0auyRqIVXx+hrpIUtol4VAPhLRcnxcOsd2i2m6rbFIDarO5dnrupLOStYYpEcu8ZT087Z9HEuYw1wjr6RL6Q==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dev": true, "license": "MIT", "dependencies": { @@ -10074,6 +12453,8 @@ }, "node_modules/levelup/node_modules/bl": { "version": "0.8.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", + "integrity": "sha512-pfqikmByp+lifZCS0p6j6KreV6kNU6Apzpm2nKOk+94cZb/jvle55+JxWiByUQ0Wo/+XnDXEy5MxxKMb6r0VIw==", "dev": true, "license": "MIT", "dependencies": { @@ -10082,16 +12463,22 @@ }, "node_modules/levelup/node_modules/isarray": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true, "license": "MIT" }, "node_modules/levelup/node_modules/prr": { "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha512-LmUECmrW7RVj6mDWKjTXfKug7TFGdiz9P18HMcO4RHL+RW7MCOGNvpj5j47Rnp6ne6r4fZ2VzyUWEpKbg+tsjQ==", "dev": true, "license": "MIT" }, "node_modules/levelup/node_modules/readable-stream": { "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "license": "MIT", "dependencies": { @@ -10103,6 +12490,8 @@ }, "node_modules/levelup/node_modules/semver": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", + "integrity": "sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==", "dev": true, "license": "BSD", "bin": { @@ -10111,11 +12500,15 @@ }, "node_modules/levelup/node_modules/string_decoder": { "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "dev": true, "license": "MIT" }, "node_modules/levelup/node_modules/xtend": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==", "dev": true, "engines": { "node": ">=0.4" @@ -10123,6 +12516,8 @@ }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10135,6 +12530,8 @@ }, "node_modules/libnpmaccess": { "version": "8.0.6", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-8.0.6.tgz", + "integrity": "sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw==", "dev": true, "license": "ISC", "dependencies": { @@ -10147,6 +12544,8 @@ }, "node_modules/libnpmpublish": { "version": "9.0.9", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-9.0.9.tgz", + "integrity": "sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg==", "dev": true, "license": "ISC", "dependencies": { @@ -10165,6 +12564,8 @@ }, "node_modules/libnpmpublish/node_modules/ci-info": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", "dev": true, "funding": [ { @@ -10179,6 +12580,8 @@ }, "node_modules/lilconfig": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, "license": "MIT", "engines": { @@ -10190,6 +12593,8 @@ }, "node_modules/lines-and-columns": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", "dev": true, "license": "MIT", "engines": { @@ -10197,26 +12602,28 @@ } }, "node_modules/lint-staged": { - "version": "16.0.0", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.1.0.tgz", + "integrity": "sha512-HkpQh69XHxgCjObjejBT3s2ILwNjFx8M3nw+tJ/ssBauDlIpkx2RpqWSi1fBgkXLSSXnbR3iEq1NkVtpvV+FLQ==", "dev": true, "license": "MIT", "dependencies": { "chalk": "^5.4.1", - "commander": "^13.1.0", - "debug": "^4.4.0", + "commander": "^14.0.0", + "debug": "^4.4.1", "lilconfig": "^3.1.3", "listr2": "^8.3.3", "micromatch": "^4.0.8", - "nano-spawn": "^1.0.0", + "nano-spawn": "^1.0.2", "pidtree": "^0.6.0", "string-argv": "^0.3.2", - "yaml": "^2.7.1" + "yaml": "^2.8.0" }, "bin": { "lint-staged": "bin/lint-staged.js" }, "engines": { - "node": ">=20.18" + "node": ">=20.17" }, "funding": { "url": "https://opencollective.com/lint-staged" @@ -10224,6 +12631,8 @@ }, "node_modules/listr2": { "version": "8.3.3", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", + "integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10240,6 +12649,8 @@ }, "node_modules/listr2/node_modules/ansi-regex": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "license": "MIT", "engines": { @@ -10251,6 +12662,8 @@ }, "node_modules/listr2/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "license": "MIT", "engines": { @@ -10262,11 +12675,15 @@ }, "node_modules/listr2/node_modules/emoji-regex": { "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true, "license": "MIT" }, "node_modules/listr2/node_modules/string-width": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10283,6 +12700,8 @@ }, "node_modules/listr2/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10297,6 +12716,8 @@ }, "node_modules/listr2/node_modules/wrap-ansi": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10313,6 +12734,8 @@ }, "node_modules/load-json-file": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10327,6 +12750,8 @@ }, "node_modules/load-json-file/node_modules/type-fest": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -10335,6 +12760,8 @@ }, "node_modules/loader-runner": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, "license": "MIT", "engines": { @@ -10343,6 +12770,8 @@ }, "node_modules/locate-path": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, "license": "MIT", "dependencies": { @@ -10357,328 +12786,97 @@ }, "node_modules/lodash": { "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true, "license": "MIT" }, "node_modules/lodash.camelcase": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "dev": true, "license": "MIT" }, "node_modules/lodash.ismatch": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", "dev": true, "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", "dev": true, "license": "MIT" }, "node_modules/lodash.kebabcase": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", "dev": true, "license": "MIT" }, "node_modules/lodash.map": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", "dev": true, "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.mergewith": { - "version": "4.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.startcase": { - "version": "4.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.upperfirst": { - "version": "4.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "environment": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/cli-cursor": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/emoji-regex": { - "version": "10.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/onetime": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/restore-cursor": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/string-width": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.0", + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } + "license": "MIT" }, - "node_modules/longest": { - "version": "2.0.1", + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "license": "MIT" }, - "node_modules/lru-cache": { - "version": "10.4.3", + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/ltgt": { - "version": "2.2.1", + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true, "license": "MIT" }, - "node_modules/magic-string": { - "version": "0.22.5", + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", "dev": true, - "license": "MIT", - "dependencies": { - "vlq": "^0.2.2" - } + "license": "MIT" }, - "node_modules/make-dir": { - "version": "4.0.0", + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "license": "MIT", "dependencies": { - "semver": "^7.5.3" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { "node": ">=10" @@ -10687,293 +12885,327 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-error": { - "version": "1.3.6", + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "ISC" - }, - "node_modules/make-fetch-happen": { - "version": "10.2.1", - "license": "ISC", + "license": "MIT", "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { - "version": "2.1.2", - "license": "ISC", + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/make-fetch-happen/node_modules/agent-base": { - "version": "6.0.2", + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, "license": "MIT", "dependencies": { - "debug": "4" + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-fetch-happen/node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/cacache": { - "version": "16.1.3", - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "environment": "^1.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-fetch-happen/node_modules/chownr": { - "version": "2.0.0", - "license": "ISC", + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" - } - }, - "node_modules/make-fetch-happen/node_modules/fs-minipass": { - "version": "2.1.0", - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" + "node": ">=12" }, - "engines": { - "node": ">= 8" + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/make-fetch-happen/node_modules/glob": { - "version": "8.1.0", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/make-fetch-happen/node_modules/https-proxy-agent": { - "version": "5.0.1", + "node_modules/log-update/node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, "license": "MIT", "dependencies": { - "agent-base": "6", - "debug": "4" + "restore-cursor": "^5.0.0" }, "engines": { - "node": ">= 6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", - "license": "ISC", - "engines": { - "node": ">=12" - } + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" }, - "node_modules/make-fetch-happen/node_modules/minimatch": { - "version": "5.1.6", - "license": "ISC", + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "get-east-asian-width": "^1.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/make-fetch-happen/node_modules/minipass": { - "version": "3.3.6", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "node": ">=18" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-fetch-happen/node_modules/minipass-collect": { - "version": "1.0.2", - "license": "ISC", + "node_modules/log-update/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "mimic-function": "^5.0.0" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/make-fetch-happen/node_modules/mkdirp": { - "version": "1.0.4", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "node": ">=18" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-fetch-happen/node_modules/negotiator": { - "version": "0.6.4", + "node_modules/log-update/node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/make-fetch-happen/node_modules/rimraf": { - "version": "3.0.2", - "license": "ISC", "dependencies": { - "glob": "^7.1.3" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" }, "engines": { - "node": "*" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": "*" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-fetch-happen/node_modules/ssri": { - "version": "9.0.1", - "license": "ISC", + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^3.1.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/make-fetch-happen/node_modules/tar": { - "version": "6.2.1", - "license": "ISC", + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "license": "MIT", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/make-fetch-happen/node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "license": "ISC", + "node_modules/longest": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", + "integrity": "sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/make-fetch-happen/node_modules/unique-filename": { - "version": "2.0.1", - "license": "ISC", + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "dev": true, + "license": "MIT", "dependencies": { - "unique-slug": "^3.0.0" + "vlq": "^0.2.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-fetch-happen/node_modules/unique-slug": { - "version": "3.0.0", + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, "license": "ISC", "dependencies": { - "imurmurhash": "^0.1.4" + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/map-obj": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, "license": "MIT", "engines": { @@ -10985,6 +13217,8 @@ }, "node_modules/math-intrinsics": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -10992,6 +13226,8 @@ }, "node_modules/md5.js": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "license": "MIT", "dependencies": { @@ -11002,6 +13238,8 @@ }, "node_modules/media-typer": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -11009,6 +13247,8 @@ }, "node_modules/meow": { "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", "dev": true, "license": "MIT", "engines": { @@ -11020,11 +13260,15 @@ }, "node_modules/merge": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", + "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==", "dev": true, "license": "MIT" }, "node_modules/merge-descriptors": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "license": "MIT", "engines": { "node": ">=18" @@ -11035,11 +13279,15 @@ }, "node_modules/merge-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { @@ -11048,6 +13296,8 @@ }, "node_modules/micromatch": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -11058,19 +13308,10 @@ "node": ">=8.6" } }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/miller-rabin": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "license": "MIT", "dependencies": { @@ -11083,11 +13324,15 @@ }, "node_modules/miller-rabin/node_modules/bn.js": { "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, "license": "MIT" }, "node_modules/mime": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "license": "MIT", "bin": { "mime": "cli.js" @@ -11097,17 +13342,23 @@ } }, "node_modules/mime-db": { - "version": "1.54.0", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "3.0.1", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "license": "MIT", "dependencies": { - "mime-db": "^1.54.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -11115,6 +13366,8 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", "engines": { @@ -11123,6 +13376,8 @@ }, "node_modules/mimic-function": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", "dev": true, "license": "MIT", "engines": { @@ -11134,6 +13389,8 @@ }, "node_modules/min-indent": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "license": "MIT", "engines": { @@ -11142,16 +13399,22 @@ }, "node_modules/minimalistic-assert": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true, "license": "ISC" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", "dev": true, "license": "MIT" }, "node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -11162,6 +13425,8 @@ }, "node_modules/minimist": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11169,6 +13434,8 @@ }, "node_modules/minimist-options": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "license": "MIT", "dependencies": { @@ -11182,6 +13449,8 @@ }, "node_modules/minimist-options/node_modules/arrify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "license": "MIT", "engines": { @@ -11190,6 +13459,8 @@ }, "node_modules/minipass": { "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -11197,6 +13468,8 @@ }, "node_modules/minipass-collect": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dev": true, "license": "ISC", "dependencies": { @@ -11207,32 +13480,27 @@ } }, "node_modules/minipass-fetch": { - "version": "2.1.2", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, "license": "MIT", "dependencies": { - "minipass": "^3.1.6", + "minipass": "^7.0.3", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" }, "optionalDependencies": { "encoding": "^0.1.13" } }, - "node_modules/minipass-fetch/node_modules/minipass": { - "version": "3.3.6", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/minipass-flush": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "license": "ISC", "dependencies": { "minipass": "^3.0.0" @@ -11243,6 +13511,8 @@ }, "node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -11253,6 +13523,8 @@ }, "node_modules/minipass-pipeline": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "license": "ISC", "dependencies": { "minipass": "^3.0.0" @@ -11263,6 +13535,8 @@ }, "node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -11273,6 +13547,8 @@ }, "node_modules/minipass-sized": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "license": "ISC", "dependencies": { "minipass": "^3.0.0" @@ -11283,6 +13559,8 @@ }, "node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -11293,6 +13571,8 @@ }, "node_modules/minizlib": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "license": "MIT", "dependencies": { "minipass": "^3.0.0", @@ -11304,6 +13584,8 @@ }, "node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -11313,34 +13595,35 @@ } }, "node_modules/mkdirp": { - "version": "3.0.1", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "license": "MIT", "bin": { - "mkdirp": "dist/cjs/src/bin.js" + "mkdirp": "bin/cmd.js" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/mocha": { - "version": "11.2.2", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.5.0.tgz", + "integrity": "sha512-VKDjhy6LMTKm0WgNEdlY77YVsD49LZnPSXJAaPNL9NRYQADxvORsyG1DIQY6v53BKTnlNbEE2MbVCDbnxr4K3w==", "dev": true, "license": "MIT", "dependencies": { "browser-stdout": "^1.3.1", "chokidar": "^4.0.1", "debug": "^4.3.5", - "diff": "^5.2.0", + "diff": "^7.0.0", "escape-string-regexp": "^4.0.0", "find-up": "^5.0.0", "glob": "^10.4.5", "he": "^1.2.0", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", + "minimatch": "^9.0.5", "ms": "^2.1.3", "picocolors": "^1.1.1", "serialize-javascript": "^6.0.2", @@ -11361,6 +13644,8 @@ }, "node_modules/mocha/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, "license": "MIT", "dependencies": { @@ -11369,6 +13654,8 @@ }, "node_modules/mocha/node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -11384,6 +13671,8 @@ }, "node_modules/mocha/node_modules/glob": { "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { @@ -11401,22 +13690,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/mocha/node_modules/jackspeak": { "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -11431,6 +13708,8 @@ }, "node_modules/mocha/node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -11444,18 +13723,25 @@ } }, "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/mocha/node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11470,6 +13756,8 @@ }, "node_modules/mocha/node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -11484,6 +13772,8 @@ }, "node_modules/mocha/node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -11492,6 +13782,8 @@ }, "node_modules/mocha/node_modules/path-scurry": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -11505,8 +13797,26 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/mocha/node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { @@ -11518,6 +13828,8 @@ }, "node_modules/modify-values": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true, "license": "MIT", "engines": { @@ -11526,10 +13838,14 @@ }, "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==", "license": "MIT" }, "node_modules/multimatch": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", "dev": true, "license": "MIT", "dependencies": { @@ -11548,15 +13864,19 @@ }, "node_modules/mute-stream": { "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true, "license": "ISC" }, "node_modules/nano-spawn": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-1.0.2.tgz", + "integrity": "sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==", "dev": true, "license": "MIT", "engines": { - "node": ">=20.18" + "node": ">=20.17" }, "funding": { "url": "https://github.com/sindresorhus/nano-spawn?sponsor=1" @@ -11564,11 +13884,15 @@ }, "node_modules/natural-compare": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, "license": "MIT" }, "node_modules/negotiator": { - "version": "1.0.0", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -11576,15 +13900,21 @@ }, "node_modules/neo-async": { "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true, "license": "MIT" }, "node_modules/node-addon-api": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", "license": "MIT" }, "node_modules/node-fetch": { - "version": "2.7.0", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -11602,142 +13932,147 @@ } }, "node_modules/node-gyp": { - "version": "9.4.1", - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.13 || ^14.13 || >=16" - } - }, - "node_modules/node-gyp/node_modules/abbrev": { - "version": "1.1.1", - "license": "ISC" - }, - "node_modules/node-gyp/node_modules/chownr": { - "version": "2.0.0", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/node-gyp/node_modules/fs-minipass": { - "version": "2.1.0", - "license": "ISC", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.3.1.tgz", + "integrity": "sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ==", + "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5", + "tar": "^6.2.1", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">= 8" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/node-gyp/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "license": "ISC", + "node_modules/node-gyp/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, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" + "balanced-match": "^1.0.0" } }, "node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": "*" + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/node-gyp/node_modules/minipass": { - "version": "5.0.0", + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, "license": "ISC", "engines": { - "node": ">=8" + "node": ">=16" } }, - "node_modules/node-gyp/node_modules/mkdirp": { - "version": "1.0.4", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "node_modules/node-gyp/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/node-gyp/node_modules/nopt": { - "version": "6.0.0", + "node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, "license": "ISC", "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/node-gyp/node_modules/rimraf": { - "version": "3.0.2", - "license": "ISC", + "node_modules/node-gyp/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "glob": "^7.1.3" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/node-gyp/node_modules/tar": { - "version": "6.2.1", + "node_modules/node-gyp/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, "license": "ISC", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">=10" + "node": "^16.13.0 || >=18.0.0" } }, "node_modules/node-machine-id": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", "dev": true, "license": "MIT" }, "node_modules/node-polyfill-webpack-plugin": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/node-polyfill-webpack-plugin/-/node-polyfill-webpack-plugin-4.1.0.tgz", + "integrity": "sha512-b4ei444EKkOagG/yFqojrD3QTYM5IOU1f8tn9o6uwrG4qL+brI7oVhjPVd0ZL2xy+Z6CP5bu9w8XTvlWgiXHcw==", "dev": true, "license": "MIT", "dependencies": { @@ -11753,6 +14088,8 @@ }, "node_modules/node-polyfill-webpack-plugin/node_modules/type-fest": { "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -11764,11 +14101,15 @@ }, "node_modules/node-releases": { "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true, "license": "MIT" }, "node_modules/node-stdlib-browser": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-stdlib-browser/-/node-stdlib-browser-1.3.1.tgz", + "integrity": "sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw==", "dev": true, "license": "MIT", "dependencies": { @@ -11806,6 +14147,8 @@ }, "node_modules/node-stdlib-browser/node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -11821,6 +14164,8 @@ }, "node_modules/node-stdlib-browser/node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -11835,6 +14180,8 @@ }, "node_modules/node-stdlib-browser/node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11849,6 +14196,8 @@ }, "node_modules/node-stdlib-browser/node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -11863,6 +14212,8 @@ }, "node_modules/node-stdlib-browser/node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -11871,6 +14222,8 @@ }, "node_modules/node-stdlib-browser/node_modules/pkg-dir": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, "license": "MIT", "dependencies": { @@ -11882,11 +14235,15 @@ }, "node_modules/node-stdlib-browser/node_modules/punycode": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true, "license": "MIT" }, "node_modules/node-stdlib-browser/node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { @@ -11897,20 +14254,25 @@ } }, "node_modules/nopt": { - "version": "8.1.0", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, "license": "ISC", "dependencies": { - "abbrev": "^3.0.0" + "abbrev": "^2.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/normalize-package-data": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -11924,6 +14286,8 @@ }, "node_modules/npm-bundled": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", + "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", "dev": true, "license": "ISC", "dependencies": { @@ -11935,6 +14299,8 @@ }, "node_modules/npm-install-checks": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -11946,6 +14312,8 @@ }, "node_modules/npm-normalize-package-bin": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, "license": "ISC", "engines": { @@ -11954,6 +14322,8 @@ }, "node_modules/npm-package-arg": { "version": "11.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", + "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", "dev": true, "license": "ISC", "dependencies": { @@ -11968,6 +14338,8 @@ }, "node_modules/npm-packlist": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", + "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", "dev": true, "license": "ISC", "dependencies": { @@ -11979,6 +14351,8 @@ }, "node_modules/npm-pick-manifest": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz", + "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==", "dev": true, "license": "ISC", "dependencies": { @@ -11993,6 +14367,8 @@ }, "node_modules/npm-registry-fetch": { "version": "17.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", + "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", "dev": true, "license": "ISC", "dependencies": { @@ -12009,54 +14385,10 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "13.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { - "version": "3.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/npm-registry-fetch/node_modules/negotiator": { - "version": "0.6.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/npm-run-path": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "license": "MIT", "dependencies": { @@ -12068,6 +14400,9 @@ }, "node_modules/npmlog": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", "license": "ISC", "dependencies": { "are-we-there-yet": "^3.0.0", @@ -12080,7 +14415,9 @@ } }, "node_modules/nx": { - "version": "20.8.1", + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-20.8.2.tgz", + "integrity": "sha512-mDKpbH3vEpUFDx0rrLh+tTqLq1PYU8KiD/R7OVZGd1FxQxghx2HOl32MiqNsfPcw6AvKlXhslbwIESV+N55FLQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -12125,16 +14462,16 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "20.8.1", - "@nx/nx-darwin-x64": "20.8.1", - "@nx/nx-freebsd-x64": "20.8.1", - "@nx/nx-linux-arm-gnueabihf": "20.8.1", - "@nx/nx-linux-arm64-gnu": "20.8.1", - "@nx/nx-linux-arm64-musl": "20.8.1", - "@nx/nx-linux-x64-gnu": "20.8.1", - "@nx/nx-linux-x64-musl": "20.8.1", - "@nx/nx-win32-arm64-msvc": "20.8.1", - "@nx/nx-win32-x64-msvc": "20.8.1" + "@nx/nx-darwin-arm64": "20.8.2", + "@nx/nx-darwin-x64": "20.8.2", + "@nx/nx-freebsd-x64": "20.8.2", + "@nx/nx-linux-arm-gnueabihf": "20.8.2", + "@nx/nx-linux-arm64-gnu": "20.8.2", + "@nx/nx-linux-arm64-musl": "20.8.2", + "@nx/nx-linux-x64-gnu": "20.8.2", + "@nx/nx-linux-x64-musl": "20.8.2", + "@nx/nx-win32-arm64-msvc": "20.8.2", + "@nx/nx-win32-x64-msvc": "20.8.2" }, "peerDependencies": { "@swc-node/register": "^1.8.0", @@ -12151,6 +14488,8 @@ }, "node_modules/nx/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -12165,6 +14504,8 @@ }, "node_modules/nx/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, "license": "MIT", "dependencies": { @@ -12173,6 +14514,8 @@ }, "node_modules/nx/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -12188,6 +14531,8 @@ }, "node_modules/nx/node_modules/minimatch": { "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "license": "ISC", "dependencies": { @@ -12202,6 +14547,8 @@ }, "node_modules/nx/node_modules/ora": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", "dev": true, "license": "MIT", "dependencies": { @@ -12221,19 +14568,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nx/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/nx/node_modules/tmp": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true, "license": "MIT", "engines": { @@ -12242,6 +14580,8 @@ }, "node_modules/object-inspect": { "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -12252,6 +14592,8 @@ }, "node_modules/object-is": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12266,12 +14608,19 @@ } }, "node_modules/object-keys": { - "version": "0.4.0", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, "node_modules/object.assign": { "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { @@ -12289,16 +14638,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.assign/node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/object.entries": { "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", "dev": true, "license": "MIT", "dependencies": { @@ -12313,6 +14656,8 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12330,6 +14675,8 @@ }, "node_modules/object.groupby": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12343,6 +14690,8 @@ }, "node_modules/object.values": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { @@ -12360,11 +14709,15 @@ }, "node_modules/octal": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz", + "integrity": "sha512-nnda7W8d+A3vEIY+UrDQzzboPf1vhs4JYVhff5CDkq9QNoZY7Xrxeo/htox37j9dZf7yNHevZzqtejWgy1vCqQ==", "dev": true, "license": "MIT" }, "node_modules/on-finished": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -12375,6 +14728,8 @@ }, "node_modules/once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "license": "ISC", "dependencies": { "wrappy": "1" @@ -12382,6 +14737,8 @@ }, "node_modules/onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", "dependencies": { @@ -12396,6 +14753,8 @@ }, "node_modules/open": { "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12412,6 +14771,8 @@ }, "node_modules/opener": { "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "license": "(WTFPL OR MIT)", "bin": { "opener": "bin/opener-bin.js" @@ -12419,6 +14780,8 @@ }, "node_modules/optionator": { "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { @@ -12435,6 +14798,8 @@ }, "node_modules/ora": { "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12457,6 +14822,8 @@ }, "node_modules/ora/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -12471,6 +14838,8 @@ }, "node_modules/ora/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -12484,24 +14853,17 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/os-browserify": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", "dev": true, "license": "MIT" }, "node_modules/os-tmpdir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "license": "MIT", "engines": { @@ -12510,6 +14872,8 @@ }, "node_modules/own-keys": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, "license": "MIT", "dependencies": { @@ -12524,16 +14888,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/own-keys/node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/p-finally": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, "license": "MIT", "engines": { @@ -12542,6 +14900,8 @@ }, "node_modules/p-limit": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12556,6 +14916,8 @@ }, "node_modules/p-locate": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, "license": "MIT", "dependencies": { @@ -12570,6 +14932,8 @@ }, "node_modules/p-map": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" @@ -12583,6 +14947,8 @@ }, "node_modules/p-map-series": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", + "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", "dev": true, "license": "MIT", "engines": { @@ -12591,6 +14957,8 @@ }, "node_modules/p-pipe": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", "dev": true, "license": "MIT", "engines": { @@ -12602,6 +14970,8 @@ }, "node_modules/p-queue": { "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12617,11 +14987,15 @@ }, "node_modules/p-queue/node_modules/eventemitter3": { "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true, "license": "MIT" }, "node_modules/p-reduce": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", "dev": true, "license": "MIT", "engines": { @@ -12630,6 +15004,8 @@ }, "node_modules/p-timeout": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, "license": "MIT", "dependencies": { @@ -12641,6 +15017,8 @@ }, "node_modules/p-try": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "license": "MIT", "engines": { @@ -12649,6 +15027,8 @@ }, "node_modules/p-waterfall": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", + "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", "dev": true, "license": "MIT", "dependencies": { @@ -12663,11 +15043,15 @@ }, "node_modules/package-json-from-dist": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/pacote": { "version": "18.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz", + "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", "dev": true, "license": "ISC", "dependencies": { @@ -12685,84 +15069,21 @@ "npm-registry-fetch": "^17.0.0", "proc-log": "^4.0.0", "promise-retry": "^2.0.1", - "sigstore": "^2.2.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/pacote/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pacote/node_modules/tar": { - "version": "6.2.1", - "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pacote/node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/pacote/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "sigstore": "^2.2.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" }, "engines": { - "node": ">=8" - } - }, - "node_modules/pacote/node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/pad": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pad/-/pad-3.3.0.tgz", + "integrity": "sha512-2/G2Q8J/lbkJ3Zf595U9jattrUkM1rwTr3s4n9smp3+ALe66V+t3I75SG0qjWzuQgmXOgiUS0/qE97S+0hP7Cw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -12777,11 +15098,15 @@ }, "node_modules/pako": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true, "license": "(MIT AND Zlib)" }, "node_modules/parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { @@ -12793,6 +15118,8 @@ }, "node_modules/parse-asn1": { "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dev": true, "license": "ISC", "dependencies": { @@ -12809,6 +15136,8 @@ }, "node_modules/parse-conflict-json": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz", + "integrity": "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==", "dev": true, "license": "ISC", "dependencies": { @@ -12822,6 +15151,8 @@ }, "node_modules/parse-json": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "license": "MIT", "dependencies": { @@ -12839,16 +15170,22 @@ }, "node_modules/parse-json/node_modules/json-parse-even-better-errors": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, "license": "MIT" }, "node_modules/parse-json/node_modules/lines-and-columns": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true, "license": "MIT" }, "node_modules/parse-passwd": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true, "license": "MIT", "engines": { @@ -12857,6 +15194,8 @@ }, "node_modules/parse-path": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.1.0.tgz", + "integrity": "sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==", "dev": true, "license": "MIT", "dependencies": { @@ -12865,6 +15204,8 @@ }, "node_modules/parse-url": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", + "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", "dev": true, "license": "MIT", "dependencies": { @@ -12873,6 +15214,8 @@ }, "node_modules/parseurl": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -12880,11 +15223,15 @@ }, "node_modules/path-browserify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true, "license": "MIT" }, "node_modules/path-exists": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, "license": "MIT", "engines": { @@ -12893,6 +15240,8 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -12900,6 +15249,8 @@ }, "node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", "engines": { @@ -12908,11 +15259,15 @@ }, "node_modules/path-parse": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, "license": "MIT" }, "node_modules/path-scurry": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -12928,6 +15283,8 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", "dev": true, "license": "ISC", "engines": { @@ -12936,6 +15293,8 @@ }, "node_modules/path-to-regexp": { "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", "license": "MIT", "engines": { "node": ">=16" @@ -12943,6 +15302,8 @@ }, "node_modules/path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", "engines": { @@ -12951,6 +15312,8 @@ }, "node_modules/pbkdf2": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "license": "MIT", "dependencies": { @@ -12966,15 +15329,19 @@ }, "node_modules/picocolors": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.2", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8.6" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -12982,6 +15349,8 @@ }, "node_modules/pidtree": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, "license": "MIT", "bin": { @@ -12993,6 +15362,8 @@ }, "node_modules/pify": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", "dev": true, "license": "MIT", "engines": { @@ -13004,6 +15375,8 @@ }, "node_modules/pkg-dir": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13015,6 +15388,8 @@ }, "node_modules/pkg-dir/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, "license": "MIT", "dependencies": { @@ -13027,6 +15402,8 @@ }, "node_modules/pkg-dir/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, "license": "MIT", "dependencies": { @@ -13038,6 +15415,8 @@ }, "node_modules/pkg-dir/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, "license": "MIT", "dependencies": { @@ -13052,6 +15431,8 @@ }, "node_modules/pkg-dir/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, "license": "MIT", "dependencies": { @@ -13063,6 +15444,8 @@ }, "node_modules/pkg-dir/node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -13071,6 +15454,8 @@ }, "node_modules/portfinder": { "version": "1.0.37", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.37.tgz", + "integrity": "sha512-yuGIEjDAYnnOex9ddMnKZEMFE0CcGo6zbfzDklkmT1m5z734ss6JMzN9rNB3+RR7iS+F10D4/BVIaXOyh8PQKw==", "license": "MIT", "dependencies": { "async": "^3.2.6", @@ -13082,6 +15467,8 @@ }, "node_modules/possible-typed-array-names": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, "license": "MIT", "engines": { @@ -13090,6 +15477,8 @@ }, "node_modules/postcss-selector-parser": { "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "license": "MIT", "dependencies": { @@ -13102,6 +15491,8 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { @@ -13110,6 +15501,8 @@ }, "node_modules/prettier": { "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, "license": "MIT", "bin": { @@ -13124,6 +15517,8 @@ }, "node_modules/prettier-linter-helpers": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "license": "MIT", "dependencies": { @@ -13135,6 +15530,8 @@ }, "node_modules/pretty-format": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13148,6 +15545,8 @@ }, "node_modules/proc-log": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", "dev": true, "license": "ISC", "engines": { @@ -13156,6 +15555,8 @@ }, "node_modules/process": { "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, "license": "MIT", "engines": { @@ -13164,16 +15565,22 @@ }, "node_modules/process-es6": { "version": "0.11.6", + "resolved": "https://registry.npmjs.org/process-es6/-/process-es6-0.11.6.tgz", + "integrity": "sha512-GYBRQtL4v3wgigq10Pv58jmTbFXlIiTbSfgnNqZLY0ldUPqy1rRxDI5fCjoCpnM6TqmHQI8ydzTBXW86OYc0gA==", "dev": true, "license": "MIT" }, "node_modules/process-nextick-args": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, "license": "MIT" }, "node_modules/proggy": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/proggy/-/proggy-2.0.0.tgz", + "integrity": "sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A==", "dev": true, "license": "ISC", "engines": { @@ -13182,6 +15589,8 @@ }, "node_modules/promise-all-reject-late": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", "dev": true, "license": "ISC", "funding": { @@ -13190,6 +15599,8 @@ }, "node_modules/promise-call-limit": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.2.tgz", + "integrity": "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw==", "dev": true, "license": "ISC", "funding": { @@ -13198,10 +15609,14 @@ }, "node_modules/promise-inflight": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "license": "ISC" }, "node_modules/promise-retry": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "license": "MIT", "dependencies": { "err-code": "^2.0.2", @@ -13213,6 +15628,8 @@ }, "node_modules/promzard": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-1.0.2.tgz", + "integrity": "sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ==", "dev": true, "license": "ISC", "dependencies": { @@ -13224,11 +15641,15 @@ }, "node_modules/protocols": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz", + "integrity": "sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==", "dev": true, "license": "MIT" }, "node_modules/proxy-addr": { "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -13240,16 +15661,22 @@ }, "node_modules/proxy-from-env": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true, "license": "MIT" }, "node_modules/prr": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true, "license": "MIT" }, "node_modules/public-encrypt": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -13263,11 +15690,15 @@ }, "node_modules/public-encrypt/node_modules/bn.js": { "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true, "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { @@ -13276,6 +15707,8 @@ }, "node_modules/qs": { "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -13289,6 +15722,8 @@ }, "node_modules/querystring-es3": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", "dev": true, "engines": { "node": ">=0.4.x" @@ -13296,6 +15731,8 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -13315,6 +15752,8 @@ }, "node_modules/quick-lru": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, "license": "MIT", "engines": { @@ -13323,6 +15762,8 @@ }, "node_modules/randombytes": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13331,6 +15772,8 @@ }, "node_modules/randomfill": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "license": "MIT", "dependencies": { @@ -13340,6 +15783,8 @@ }, "node_modules/range-parser": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -13347,6 +15792,8 @@ }, "node_modules/raw-body": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -13358,13 +15805,29 @@ "node": ">= 0.8" } }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react-is": { "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, "license": "MIT" }, "node_modules/read": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read/-/read-3.0.1.tgz", + "integrity": "sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==", "dev": true, "license": "ISC", "dependencies": { @@ -13376,6 +15839,8 @@ }, "node_modules/read-cmd-shim": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", + "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", "dev": true, "license": "ISC", "engines": { @@ -13384,6 +15849,8 @@ }, "node_modules/read-package-json-fast": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", "dev": true, "license": "ISC", "dependencies": { @@ -13396,6 +15863,8 @@ }, "node_modules/read-pkg": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, "license": "MIT", "dependencies": { @@ -13409,6 +15878,8 @@ }, "node_modules/read-pkg-up": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", "dev": true, "license": "MIT", "dependencies": { @@ -13421,6 +15892,8 @@ }, "node_modules/read-pkg-up/node_modules/find-up": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13432,6 +15905,8 @@ }, "node_modules/read-pkg-up/node_modules/locate-path": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, "license": "MIT", "dependencies": { @@ -13444,6 +15919,8 @@ }, "node_modules/read-pkg-up/node_modules/p-limit": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -13455,6 +15932,8 @@ }, "node_modules/read-pkg-up/node_modules/p-locate": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, "license": "MIT", "dependencies": { @@ -13466,6 +15945,8 @@ }, "node_modules/read-pkg-up/node_modules/p-try": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, "license": "MIT", "engines": { @@ -13474,6 +15955,8 @@ }, "node_modules/read-pkg-up/node_modules/path-exists": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, "license": "MIT", "engines": { @@ -13482,11 +15965,15 @@ }, "node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/read-pkg/node_modules/load-json-file": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "license": "MIT", "dependencies": { @@ -13501,6 +15988,8 @@ }, "node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -13512,6 +16001,8 @@ }, "node_modules/read-pkg/node_modules/parse-json": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "license": "MIT", "dependencies": { @@ -13524,6 +16015,8 @@ }, "node_modules/read-pkg/node_modules/path-type": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "license": "MIT", "dependencies": { @@ -13535,6 +16028,8 @@ }, "node_modules/read-pkg/node_modules/pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "license": "MIT", "engines": { @@ -13543,6 +16038,8 @@ }, "node_modules/read-pkg/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -13551,6 +16048,8 @@ }, "node_modules/read-pkg/node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -13559,6 +16058,8 @@ }, "node_modules/read/node_modules/mute-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", "dev": true, "license": "ISC", "engines": { @@ -13567,6 +16068,8 @@ }, "node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -13579,6 +16082,8 @@ }, "node_modules/readdirp": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, "license": "MIT", "engines": { @@ -13591,6 +16096,8 @@ }, "node_modules/rechoir": { "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13602,6 +16109,8 @@ }, "node_modules/redent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "license": "MIT", "dependencies": { @@ -13614,6 +16123,8 @@ }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "license": "MIT", "dependencies": { @@ -13635,6 +16146,8 @@ }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", "dependencies": { @@ -13654,6 +16167,8 @@ }, "node_modules/require-directory": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", "engines": { @@ -13662,6 +16177,8 @@ }, "node_modules/require-from-string": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, "license": "MIT", "engines": { @@ -13670,10 +16187,14 @@ }, "node_modules/requires-port": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "license": "MIT" }, "node_modules/resolve": { "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, "license": "MIT", "dependencies": { @@ -13693,6 +16214,8 @@ }, "node_modules/resolve-cwd": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "license": "MIT", "dependencies": { @@ -13704,6 +16227,8 @@ }, "node_modules/resolve-dir": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dev": true, "license": "MIT", "dependencies": { @@ -13716,6 +16241,8 @@ }, "node_modules/resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { @@ -13724,6 +16251,8 @@ }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, "license": "MIT", "funding": { @@ -13732,6 +16261,8 @@ }, "node_modules/resolve.exports": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, "license": "MIT", "engines": { @@ -13740,6 +16271,8 @@ }, "node_modules/restore-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "license": "MIT", "dependencies": { @@ -13752,11 +16285,15 @@ }, "node_modules/restore-cursor/node_modules/signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/retry": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "license": "MIT", "engines": { "node": ">= 4" @@ -13764,6 +16301,8 @@ }, "node_modules/reusify": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { @@ -13773,11 +16312,15 @@ }, "node_modules/rfdc": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true, "license": "MIT" }, "node_modules/rimraf": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", "dev": true, "license": "ISC", "dependencies": { @@ -13795,6 +16338,8 @@ }, "node_modules/rimraf/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, "license": "MIT", "dependencies": { @@ -13803,6 +16348,8 @@ }, "node_modules/rimraf/node_modules/glob": { "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, "license": "ISC", "dependencies": { @@ -13820,6 +16367,8 @@ }, "node_modules/rimraf/node_modules/minimatch": { "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, "license": "ISC", "dependencies": { @@ -13834,6 +16383,8 @@ }, "node_modules/rimraf/node_modules/minipass": { "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, "license": "ISC", "engines": { @@ -13842,6 +16393,8 @@ }, "node_modules/rimraf/node_modules/path-scurry": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -13857,6 +16410,8 @@ }, "node_modules/rimraf/node_modules/path-scurry/node_modules/minipass": { "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "license": "ISC", "engines": { @@ -13865,6 +16420,8 @@ }, "node_modules/ripemd160": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "license": "MIT", "dependencies": { @@ -13873,7 +16430,9 @@ } }, "node_modules/rollup": { - "version": "4.40.2", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz", + "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==", "dev": true, "license": "MIT", "dependencies": { @@ -13887,31 +16446,33 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.40.2", - "@rollup/rollup-android-arm64": "4.40.2", - "@rollup/rollup-darwin-arm64": "4.40.2", - "@rollup/rollup-darwin-x64": "4.40.2", - "@rollup/rollup-freebsd-arm64": "4.40.2", - "@rollup/rollup-freebsd-x64": "4.40.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.40.2", - "@rollup/rollup-linux-arm-musleabihf": "4.40.2", - "@rollup/rollup-linux-arm64-gnu": "4.40.2", - "@rollup/rollup-linux-arm64-musl": "4.40.2", - "@rollup/rollup-linux-loongarch64-gnu": "4.40.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.40.2", - "@rollup/rollup-linux-riscv64-gnu": "4.40.2", - "@rollup/rollup-linux-riscv64-musl": "4.40.2", - "@rollup/rollup-linux-s390x-gnu": "4.40.2", - "@rollup/rollup-linux-x64-gnu": "4.40.2", - "@rollup/rollup-linux-x64-musl": "4.40.2", - "@rollup/rollup-win32-arm64-msvc": "4.40.2", - "@rollup/rollup-win32-ia32-msvc": "4.40.2", - "@rollup/rollup-win32-x64-msvc": "4.40.2", + "@rollup/rollup-android-arm-eabi": "4.41.1", + "@rollup/rollup-android-arm64": "4.41.1", + "@rollup/rollup-darwin-arm64": "4.41.1", + "@rollup/rollup-darwin-x64": "4.41.1", + "@rollup/rollup-freebsd-arm64": "4.41.1", + "@rollup/rollup-freebsd-x64": "4.41.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", + "@rollup/rollup-linux-arm-musleabihf": "4.41.1", + "@rollup/rollup-linux-arm64-gnu": "4.41.1", + "@rollup/rollup-linux-arm64-musl": "4.41.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-musl": "4.41.1", + "@rollup/rollup-linux-s390x-gnu": "4.41.1", + "@rollup/rollup-linux-x64-gnu": "4.41.1", + "@rollup/rollup-linux-x64-musl": "4.41.1", + "@rollup/rollup-win32-arm64-msvc": "4.41.1", + "@rollup/rollup-win32-ia32-msvc": "4.41.1", + "@rollup/rollup-win32-x64-msvc": "4.41.1", "fsevents": "~2.3.2" } }, "node_modules/rollup-plugin-node-builtins": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz", + "integrity": "sha512-bxdnJw8jIivr2yEyt8IZSGqZkygIJOGAWypXvHXnwKAbUcN4Q/dGTx7K0oAJryC/m6aq6tKutltSeXtuogU6sw==", "dev": true, "license": "ISC", "dependencies": { @@ -13923,6 +16484,8 @@ }, "node_modules/rollup-plugin-node-globals": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz", + "integrity": "sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g==", "dev": true, "license": "MIT", "dependencies": { @@ -13936,6 +16499,8 @@ }, "node_modules/rollup-plugin-node-globals/node_modules/acorn": { "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", "dev": true, "license": "MIT", "bin": { @@ -13947,11 +16512,15 @@ }, "node_modules/rollup-plugin-node-globals/node_modules/estree-walker": { "version": "0.5.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", "dev": true, "license": "MIT" }, "node_modules/rollup-pluginutils": { "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13960,11 +16529,15 @@ }, "node_modules/rollup-pluginutils/node_modules/estree-walker": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", "dev": true, "license": "MIT" }, "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.40.2", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz", + "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==", "cpu": [ "x64" ], @@ -13975,8 +16548,17 @@ "linux" ] }, + "node_modules/rollup/node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" + }, "node_modules/router": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -13991,6 +16573,8 @@ }, "node_modules/run-async": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, "license": "MIT", "engines": { @@ -13999,6 +16583,8 @@ }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -14021,6 +16607,8 @@ }, "node_modules/rxjs": { "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -14029,6 +16617,8 @@ }, "node_modules/safe-array-concat": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -14047,11 +16637,15 @@ }, "node_modules/safe-array-concat/node_modules/isarray": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -14070,6 +16664,8 @@ }, "node_modules/safe-push-apply": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "license": "MIT", "dependencies": { @@ -14085,11 +16681,15 @@ }, "node_modules/safe-push-apply/node_modules/isarray": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/safe-regex-test": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { @@ -14106,10 +16706,14 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, "node_modules/schema-utils": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14128,10 +16732,14 @@ }, "node_modules/secure-compare": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==", "license": "MIT" }, "node_modules/semver": { "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -14142,6 +16750,8 @@ }, "node_modules/send": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "license": "MIT", "dependencies": { "debug": "^4.3.5", @@ -14160,8 +16770,31 @@ "node": ">= 18" } }, + "node_modules/send/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serialize-javascript": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -14170,6 +16803,8 @@ }, "node_modules/serve-static": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", "license": "MIT", "dependencies": { "encodeurl": "^2.0.0", @@ -14183,10 +16818,14 @@ }, "node_modules/set-blocking": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "license": "ISC" }, "node_modules/set-function-length": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "dependencies": { @@ -14203,6 +16842,8 @@ }, "node_modules/set-function-name": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14217,6 +16858,8 @@ }, "node_modules/set-proto": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -14230,15 +16873,21 @@ }, "node_modules/setimmediate": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "dev": true, "license": "MIT" }, "node_modules/setprototypeof": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, "node_modules/sha.js": { "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "license": "(MIT AND BSD-3-Clause)", "dependencies": { @@ -14251,6 +16900,8 @@ }, "node_modules/shallow-clone": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "license": "MIT", "dependencies": { @@ -14262,6 +16913,8 @@ }, "node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", "dependencies": { @@ -14273,6 +16926,8 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", "engines": { @@ -14281,6 +16936,8 @@ }, "node_modules/should": { "version": "13.2.3", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", + "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14293,6 +16950,8 @@ }, "node_modules/should-equal": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", "dev": true, "license": "MIT", "dependencies": { @@ -14301,6 +16960,8 @@ }, "node_modules/should-format": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -14310,11 +16971,15 @@ }, "node_modules/should-type": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==", "dev": true, "license": "MIT" }, "node_modules/should-type-adaptors": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", "dev": true, "license": "MIT", "dependencies": { @@ -14324,11 +16989,15 @@ }, "node_modules/should-util": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", + "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", "dev": true, "license": "MIT" }, "node_modules/side-channel": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -14346,6 +17015,8 @@ }, "node_modules/side-channel-list": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -14360,6 +17031,8 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -14376,6 +17049,8 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -14393,6 +17068,8 @@ }, "node_modules/signal-exit": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", "engines": { @@ -14404,6 +17081,8 @@ }, "node_modules/sigstore": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", + "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -14420,6 +17099,8 @@ }, "node_modules/slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", "engines": { @@ -14428,6 +17109,8 @@ }, "node_modules/slice-ansi": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14443,6 +17126,8 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "license": "MIT", "engines": { @@ -14454,6 +17139,8 @@ }, "node_modules/smart-buffer": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "license": "MIT", "engines": { "node": ">= 6.0.0", @@ -14462,6 +17149,8 @@ }, "node_modules/socks": { "version": "2.8.4", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", + "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", "license": "MIT", "dependencies": { "ip-address": "^9.0.5", @@ -14473,29 +17162,24 @@ } }, "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "6.0.2", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, "license": "MIT", "dependencies": { - "debug": "4" + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/sort-keys": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", "dev": true, "license": "MIT", "dependencies": { @@ -14507,6 +17191,8 @@ }, "node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -14515,6 +17201,8 @@ }, "node_modules/source-map-support": { "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "license": "MIT", "dependencies": { @@ -14524,6 +17212,8 @@ }, "node_modules/spdx-correct": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -14533,11 +17223,15 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -14547,11 +17241,15 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.21", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", + "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", "dev": true, "license": "CC0-1.0" }, "node_modules/split": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, "license": "MIT", "dependencies": { @@ -14563,6 +17261,8 @@ }, "node_modules/split2": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "dev": true, "license": "ISC", "engines": { @@ -14571,10 +17271,14 @@ }, "node_modules/sprintf-js": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "license": "BSD-3-Clause" }, "node_modules/ssri": { "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dev": true, "license": "ISC", "dependencies": { @@ -14586,13 +17290,31 @@ }, "node_modules/statuses": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "license": "MIT", "engines": { "node": ">= 0.8" } }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/stream-browserify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "license": "MIT", "dependencies": { "inherits": "~2.0.4", @@ -14601,6 +17323,8 @@ }, "node_modules/stream-http": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, "license": "MIT", "dependencies": { @@ -14610,20 +17334,14 @@ "xtend": "^4.0.2" } }, - "node_modules/stream-http/node_modules/xtend": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, "node_modules/stream-transform": { "resolved": "packages/stream-transform", "link": true }, "node_modules/string_decoder": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -14631,6 +17349,8 @@ }, "node_modules/string-argv": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, "license": "MIT", "engines": { @@ -14639,11 +17359,15 @@ }, "node_modules/string-range": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz", + "integrity": "sha512-tYft6IFi8SjplJpxCUxyqisD3b+R2CSkomrtJYCkvuf1KuCAWgz7YXt4O0jip7efpfCemwHEzTEAO8EuOYgh3w==", "dev": true, "license": "MIT" }, "node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -14657,6 +17381,8 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -14670,6 +17396,8 @@ }, "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -14678,6 +17406,8 @@ }, "node_modules/string-width/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "license": "MIT", "engines": { "node": ">=8" @@ -14685,6 +17415,8 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { @@ -14705,6 +17437,8 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14722,6 +17456,8 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { @@ -14738,6 +17474,8 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -14749,6 +17487,8 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -14760,6 +17500,8 @@ }, "node_modules/strip-bom": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "license": "MIT", "engines": { @@ -14768,6 +17510,8 @@ }, "node_modules/strip-final-newline": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "license": "MIT", "engines": { @@ -14776,6 +17520,8 @@ }, "node_modules/strip-indent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14787,6 +17533,8 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { @@ -14798,6 +17546,8 @@ }, "node_modules/strong-log-transformer": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -14813,21 +17563,21 @@ } }, "node_modules/supports-color": { - "version": "8.1.1", - "dev": true, + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "license": "MIT", "engines": { @@ -14838,12 +17588,13 @@ } }, "node_modules/synckit": { - "version": "0.11.4", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.8.tgz", + "integrity": "sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==", "dev": true, "license": "MIT", "dependencies": { - "@pkgr/core": "^0.2.3", - "tslib": "^2.8.1" + "@pkgr/core": "^0.2.4" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -14853,7 +17604,9 @@ } }, "node_modules/tapable": { - "version": "2.2.1", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", "dev": true, "license": "MIT", "engines": { @@ -14861,22 +17614,26 @@ } }, "node_modules/tar": { - "version": "7.4.3", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "license": "ISC", "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=10" } }, "node_modules/tar-stream": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14890,25 +17647,43 @@ "node": ">=6" } }, - "node_modules/tar/node_modules/minizlib": { - "version": "3.0.2", - "license": "MIT", + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", "dependencies": { - "minipass": "^7.1.2" + "minipass": "^3.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/tar/node_modules/yallist": { + "node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "license": "BlueOak-1.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", "engines": { - "node": ">=18" + "node": ">=8" } }, "node_modules/temp-dir": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", "dev": true, "license": "MIT", "engines": { @@ -14916,12 +17691,14 @@ } }, "node_modules/terser": { - "version": "5.39.0", + "version": "5.41.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.41.0.tgz", + "integrity": "sha512-H406eLPXpZbAX14+B8psIuvIr8+3c+2hkuYzpMkoE0ij+NdsVATbA78vb8neA/eqrj7rywa2pIkdmWRsXW6wmw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", + "acorn": "^8.14.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -14934,6 +17711,8 @@ }, "node_modules/terser-webpack-plugin": { "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "dev": true, "license": "MIT", "dependencies": { @@ -14967,6 +17746,8 @@ }, "node_modules/terser-webpack-plugin/node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14976,11 +17757,15 @@ }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, "license": "MIT" }, "node_modules/text-extensions": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", + "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", "dev": true, "license": "MIT", "engines": { @@ -14992,11 +17777,15 @@ }, "node_modules/through": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true, "license": "MIT" }, "node_modules/through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15006,6 +17795,8 @@ }, "node_modules/through2/node_modules/readable-stream": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { @@ -15020,27 +17811,25 @@ }, "node_modules/through2/node_modules/safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/through2/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, - "node_modules/through2/node_modules/xtend": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, "node_modules/timers-browserify": { "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15052,11 +17841,15 @@ }, "node_modules/tinyexec": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", + "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", "dev": true, "license": "MIT" }, "node_modules/tmp": { "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "license": "MIT", "dependencies": { @@ -15068,6 +17861,8 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15079,6 +17874,8 @@ }, "node_modules/toidentifier": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "license": "MIT", "engines": { "node": ">=0.6" @@ -15086,10 +17883,14 @@ }, "node_modules/tr46": { "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "license": "MIT" }, "node_modules/treeverse": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", + "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", "dev": true, "license": "ISC", "engines": { @@ -15098,6 +17899,8 @@ }, "node_modules/trim-newlines": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, "license": "MIT", "engines": { @@ -15106,6 +17909,8 @@ }, "node_modules/ts-api-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, "license": "MIT", "engines": { @@ -15117,6 +17922,8 @@ }, "node_modules/ts-loader": { "version": "9.5.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", + "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", "dev": true, "license": "MIT", "dependencies": { @@ -15136,6 +17943,8 @@ }, "node_modules/ts-loader/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -15150,6 +17959,8 @@ }, "node_modules/ts-loader/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -15165,25 +17976,18 @@ }, "node_modules/ts-loader/node_modules/source-map": { "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">= 8" } }, - "node_modules/ts-loader/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ts-node": { "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15226,6 +18030,8 @@ }, "node_modules/ts-node/node_modules/diff": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -15234,6 +18040,8 @@ }, "node_modules/tsconfig-paths": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, "license": "MIT", "dependencies": { @@ -15247,6 +18055,8 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -15255,11 +18065,15 @@ }, "node_modules/tslib": { "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, "license": "0BSD" }, "node_modules/tsx": { "version": "4.19.4", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", + "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -15278,11 +18092,15 @@ }, "node_modules/tty-browserify": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true, "license": "MIT" }, "node_modules/tuf-js": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", + "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", "dev": true, "license": "MIT", "dependencies": { @@ -15294,54 +18112,10 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/tuf-js/node_modules/make-fetch-happen": { - "version": "13.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/node_modules/minipass-fetch": { - "version": "3.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/tuf-js/node_modules/negotiator": { - "version": "0.6.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { @@ -15353,6 +18127,8 @@ }, "node_modules/type-fest": { "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -15364,6 +18140,8 @@ }, "node_modules/type-is": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "license": "MIT", "dependencies": { "content-type": "^1.0.5", @@ -15374,8 +18152,31 @@ "node": ">= 0.6" } }, + "node_modules/type-is/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/typed-array-buffer": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { @@ -15389,6 +18190,8 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { @@ -15407,6 +18210,8 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15427,6 +18232,8 @@ }, "node_modules/typed-array-length": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { @@ -15446,16 +18253,22 @@ }, "node_modules/typedarray": { "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true, "license": "MIT" }, "node_modules/typedarray-to-buffer": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz", + "integrity": "sha512-vjMKrfSoUDN8/Vnqitw2FmstOfuJ73G6CrSEKnf11A6RmasVxHqfeBcnTb6RsL4pTMuV5Zsv9IiHRphMZyckUw==", "dev": true, "license": "MIT" }, "node_modules/typescript": { "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -15467,13 +18280,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.32.1", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.1.tgz", + "integrity": "sha512-AgRnV4sKkWOiZ0Kjbnf5ytTJXMUZQ0qhSVdQtDNYLPLnjsATEYhaO94GlRQwi4t4gO8FfjM6NnikHeKjUm8D7A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.32.1", - "@typescript-eslint/parser": "8.32.1", - "@typescript-eslint/utils": "8.32.1" + "@typescript-eslint/eslint-plugin": "8.33.1", + "@typescript-eslint/parser": "8.33.1", + "@typescript-eslint/utils": "8.33.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -15489,6 +18304,8 @@ }, "node_modules/uglify-js": { "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", "dev": true, "license": "BSD-2-Clause", "optional": true, @@ -15501,6 +18318,8 @@ }, "node_modules/unbox-primitive": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { @@ -15518,11 +18337,15 @@ }, "node_modules/undici-types": { "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, "node_modules/unicorn-magic": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "dev": true, "license": "MIT", "engines": { @@ -15534,6 +18357,8 @@ }, "node_modules/union": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", "dependencies": { "qs": "^6.4.0" }, @@ -15543,6 +18368,8 @@ }, "node_modules/unique-filename": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, "license": "ISC", "dependencies": { @@ -15554,6 +18381,8 @@ }, "node_modules/unique-slug": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, "license": "ISC", "dependencies": { @@ -15565,11 +18394,15 @@ }, "node_modules/universal-user-agent": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", "dev": true, "license": "ISC" }, "node_modules/universalify": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", "engines": { @@ -15578,6 +18411,8 @@ }, "node_modules/unpipe": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -15585,6 +18420,8 @@ }, "node_modules/upath": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", "dev": true, "license": "MIT", "engines": { @@ -15594,6 +18431,8 @@ }, "node_modules/update-browserslist-db": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, "funding": [ { @@ -15623,6 +18462,8 @@ }, "node_modules/uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -15631,6 +18472,8 @@ }, "node_modules/url": { "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", "dev": true, "license": "MIT", "dependencies": { @@ -15643,15 +18486,21 @@ }, "node_modules/url-join": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", "license": "MIT" }, "node_modules/url/node_modules/punycode": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true, "license": "MIT" }, "node_modules/util": { "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, "license": "MIT", "dependencies": { @@ -15664,10 +18513,14 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, "node_modules/uuid": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "dev": true, "funding": [ "https://github.com/sponsors/broofa", @@ -15680,11 +18533,15 @@ }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true, "license": "MIT" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -15694,6 +18551,8 @@ }, "node_modules/validate-npm-package-name": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", "dev": true, "license": "ISC", "engines": { @@ -15702,6 +18561,8 @@ }, "node_modules/vary": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -15709,21 +18570,29 @@ }, "node_modules/vlq": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", "dev": true, "license": "MIT" }, "node_modules/vm-browserify": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true, "license": "MIT" }, "node_modules/walk-up-path": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", + "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", "dev": true, "license": "ISC" }, "node_modules/watchpack": { - "version": "2.4.2", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "dev": true, "license": "MIT", "dependencies": { @@ -15736,6 +18605,8 @@ }, "node_modules/wcwidth": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "license": "MIT", "dependencies": { @@ -15744,10 +18615,14 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.99.8", + "version": "5.99.9", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", + "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", "dev": true, "license": "MIT", "dependencies": { @@ -15794,6 +18669,8 @@ }, "node_modules/webpack-cli": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", + "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", "dev": true, "license": "MIT", "dependencies": { @@ -15835,6 +18712,8 @@ }, "node_modules/webpack-cli/node_modules/commander": { "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "license": "MIT", "engines": { @@ -15843,6 +18722,8 @@ }, "node_modules/webpack-cli/node_modules/envinfo": { "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", "dev": true, "license": "MIT", "bin": { @@ -15854,6 +18735,8 @@ }, "node_modules/webpack-merge": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", "dev": true, "license": "MIT", "dependencies": { @@ -15866,7 +18749,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.2.3", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.2.tgz", + "integrity": "sha512-ykKKus8lqlgXX/1WjudpIEjqsafjOTcOJqxnAbMLAu/KCsDCJ6GBtvscewvTkrn24HsnvFwrSCbenFrhtcCsAA==", "dev": true, "license": "MIT", "engines": { @@ -15875,6 +18760,8 @@ }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -15887,6 +18774,8 @@ }, "node_modules/webpack/node_modules/estraverse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -15895,40 +18784,39 @@ }, "node_modules/webpack/node_modules/json-parse-even-better-errors": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, "license": "MIT" }, - "node_modules/webpack/node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/mime-types": { - "version": "2.1.35", - "dev": true, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "iconv-lite": "0.6.3" }, "engines": { - "node": ">= 0.6" + "node": ">=12" } }, - "node_modules/whatwg-encoding": { - "version": "2.0.0", + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "dependencies": { - "iconv-lite": "0.6.3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, "node_modules/whatwg-url": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "license": "MIT", "dependencies": { "tr46": "~0.0.3", @@ -15937,6 +18825,8 @@ }, "node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -15950,6 +18840,8 @@ }, "node_modules/which-boxed-primitive": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { @@ -15968,6 +18860,8 @@ }, "node_modules/which-builtin-type": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -15994,11 +18888,15 @@ }, "node_modules/which-builtin-type/node_modules/isarray": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/which-collection": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { @@ -16016,6 +18914,8 @@ }, "node_modules/which-typed-array": { "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, "license": "MIT", "dependencies": { @@ -16036,6 +18936,8 @@ }, "node_modules/wide-align": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" @@ -16043,11 +18945,15 @@ }, "node_modules/wildcard": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true, "license": "MIT" }, "node_modules/word-wrap": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", "engines": { @@ -16056,16 +18962,22 @@ }, "node_modules/wordwrap": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true, "license": "MIT" }, "node_modules/workerpool": { "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", "dev": true, "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { @@ -16083,6 +18995,8 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { @@ -16099,6 +19013,8 @@ }, "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -16113,6 +19029,8 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -16127,10 +19045,14 @@ }, "node_modules/wrappy": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, "node_modules/write-file-atomic": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "license": "ISC", "dependencies": { @@ -16143,6 +19065,8 @@ }, "node_modules/write-json-file": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16159,6 +19083,8 @@ }, "node_modules/write-json-file/node_modules/detect-indent": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", "dev": true, "license": "MIT", "engines": { @@ -16167,6 +19093,8 @@ }, "node_modules/write-json-file/node_modules/make-dir": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "license": "MIT", "dependencies": { @@ -16179,6 +19107,8 @@ }, "node_modules/write-json-file/node_modules/pify": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "license": "MIT", "engines": { @@ -16187,6 +19117,8 @@ }, "node_modules/write-json-file/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -16195,11 +19127,15 @@ }, "node_modules/write-json-file/node_modules/signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/write-json-file/node_modules/write-file-atomic": { "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "license": "ISC", "dependencies": { @@ -16210,6 +19146,8 @@ }, "node_modules/write-pkg": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", + "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", "dev": true, "license": "MIT", "dependencies": { @@ -16223,6 +19161,8 @@ }, "node_modules/write-pkg/node_modules/type-fest": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -16230,14 +19170,19 @@ } }, "node_modules/xtend": { - "version": "2.2.0", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "license": "ISC", "engines": { @@ -16246,21 +19191,27 @@ }, "node_modules/yallist": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "license": "ISC" }, "node_modules/yaml": { - "version": "2.7.1", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", "dev": true, "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { - "node": ">= 14" + "node": ">= 14.6" } }, "node_modules/yargs": { "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "license": "MIT", "dependencies": { @@ -16278,6 +19229,8 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "license": "ISC", "engines": { @@ -16286,6 +19239,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -16298,8 +19253,36 @@ "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, + "license": "MIT", + "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, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/yargs-unparser/node_modules/is-plain-obj": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "license": "MIT", "engines": { @@ -16308,6 +19291,8 @@ }, "node_modules/yn": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, "license": "MIT", "engines": { @@ -16316,6 +19301,8 @@ }, "node_modules/yocto-queue": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", "dev": true, "license": "MIT", "engines": { @@ -16337,11 +19324,11 @@ "devDependencies": { "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", - "@types/node": "^22.15.17", + "@types/node": "^22.15.30", "each": "^2.7.2", - "mocha": "~11.2.2", + "mocha": "~11.5.0", "prettier": "^3.5.3", - "rollup": "^4.40.2", + "rollup": "^4.41.1", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "~13.2.3", @@ -16358,12 +19345,12 @@ "devDependencies": { "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", - "@types/node": "^22.15.17", + "@types/node": "^22.15.30", "dedent": "^1.6.0", "each": "^2.7.2", - "mocha": "~11.2.2", + "mocha": "~11.5.0", "prettier": "^3.5.3", - "rollup": "^4.40.2", + "rollup": "^4.41.1", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "~13.2.3", @@ -16373,8 +19360,6 @@ }, "packages/csv-generate/node_modules/dedent": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", - "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", "dev": true, "license": "MIT", "peerDependencies": { @@ -16392,15 +19377,15 @@ "devDependencies": { "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", - "@types/node": "^22.15.17", + "@types/node": "^22.15.30", "csv-generate": "^4.4.2", "csv-spectrum": "^2.0.0", "dedent": "^1.6.0", "each": "^2.7.2", - "mocha": "^11.2.2", + "mocha": "^11.5.0", "pad": "^3.3.0", "prettier": "^3.5.3", - "rollup": "^4.40.2", + "rollup": "^4.41.1", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "^13.2.3", @@ -16411,8 +19396,6 @@ }, "packages/csv-parse/node_modules/dedent": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", - "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", "dev": true, "license": "MIT", "peerDependencies": { @@ -16430,14 +19413,14 @@ "devDependencies": { "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", - "@types/node": "^22.15.17", + "@types/node": "^22.15.30", "csv-generate": "^4.4.2", "dedent": "^1.6.0", "each": "^2.7.2", "express": "^5.1.0", - "mocha": "~11.2.2", + "mocha": "~11.5.0", "prettier": "^3.5.3", - "rollup": "^4.40.2", + "rollup": "^4.41.1", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "~13.2.3", @@ -16447,8 +19430,6 @@ }, "packages/csv-stringify/node_modules/dedent": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", - "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", "dev": true, "license": "MIT", "peerDependencies": { @@ -16466,13 +19447,13 @@ "devDependencies": { "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", - "@types/node": "^22.15.17", + "@types/node": "^22.15.30", "csv-generate": "^4.4.2", "each": "^2.7.2", - "mocha": "~11.2.2", + "mocha": "~11.5.0", "pad": "~3.3.0", "prettier": "^3.5.3", - "rollup": "^4.40.2", + "rollup": "^4.41.1", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "~13.2.3", diff --git a/package.json b/package.json index 1b456817..a983139c 100644 --- a/package.json +++ b/package.json @@ -3,17 +3,17 @@ "devDependencies": { "@commitlint/cli": "^19.8.1", "@commitlint/config-conventional": "^19.8.1", - "@eslint/js": "^9.27.0", + "@eslint/js": "^9.28.0", "cz-conventional-changelog": "^3.3.0", - "eslint": "^9.27.0", + "eslint": "^9.28.0", "eslint-config-prettier": "^10.1.5", - "eslint-plugin-mocha": "^11.0.0", - "eslint-plugin-prettier": "^5.4.0", + "eslint-plugin-mocha": "^11.1.0", + "eslint-plugin-prettier": "^5.4.1", "glob": "^11.0.2", "husky": "^9.1.7", "lerna": "^8.2.2", - "lint-staged": "^16.0.0", - "typescript-eslint": "^8.32.1" + "lint-staged": "^16.1.0", + "typescript-eslint": "^8.33.1" }, "lint-staged": { "*.js": "npm run lint:fix", diff --git a/packages/csv-generate/package.json b/packages/csv-generate/package.json index 50cf8e15..a85c52bc 100644 --- a/packages/csv-generate/package.json +++ b/packages/csv-generate/package.json @@ -15,12 +15,12 @@ "devDependencies": { "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", - "@types/node": "^22.15.17", + "@types/node": "^22.15.30", "dedent": "^1.6.0", "each": "^2.7.2", - "mocha": "~11.2.2", + "mocha": "~11.5.0", "prettier": "^3.5.3", - "rollup": "^4.40.2", + "rollup": "^4.41.1", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "~13.2.3", diff --git a/packages/csv-parse/package.json b/packages/csv-parse/package.json index 722b438f..669c2fff 100644 --- a/packages/csv-parse/package.json +++ b/packages/csv-parse/package.json @@ -74,15 +74,15 @@ "devDependencies": { "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", - "@types/node": "^22.15.17", + "@types/node": "^22.15.30", "csv-generate": "^4.4.2", "csv-spectrum": "^2.0.0", "dedent": "^1.6.0", "each": "^2.7.2", - "mocha": "^11.2.2", + "mocha": "^11.5.0", "pad": "^3.3.0", "prettier": "^3.5.3", - "rollup": "^4.40.2", + "rollup": "^4.41.1", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "^13.2.3", diff --git a/packages/csv-stringify/package.json b/packages/csv-stringify/package.json index fc39f205..be8e7a57 100644 --- a/packages/csv-stringify/package.json +++ b/packages/csv-stringify/package.json @@ -13,14 +13,14 @@ "devDependencies": { "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", - "@types/node": "^22.15.17", + "@types/node": "^22.15.30", "csv-generate": "^4.4.2", "dedent": "^1.6.0", "each": "^2.7.2", "express": "^5.1.0", - "mocha": "~11.2.2", + "mocha": "~11.5.0", "prettier": "^3.5.3", - "rollup": "^4.40.2", + "rollup": "^4.41.1", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "~13.2.3", diff --git a/packages/csv/package.json b/packages/csv/package.json index 9ff14e96..b1b2650d 100644 --- a/packages/csv/package.json +++ b/packages/csv/package.json @@ -31,11 +31,11 @@ "devDependencies": { "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", - "@types/node": "^22.15.17", + "@types/node": "^22.15.30", "each": "^2.7.2", - "mocha": "~11.2.2", + "mocha": "~11.5.0", "prettier": "^3.5.3", - "rollup": "^4.40.2", + "rollup": "^4.41.1", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "~13.2.3", diff --git a/packages/stream-transform/package.json b/packages/stream-transform/package.json index eea31853..5b4aef52 100644 --- a/packages/stream-transform/package.json +++ b/packages/stream-transform/package.json @@ -14,13 +14,13 @@ "devDependencies": { "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", - "@types/node": "^22.15.17", + "@types/node": "^22.15.30", "csv-generate": "^4.4.2", "each": "^2.7.2", - "mocha": "~11.2.2", + "mocha": "~11.5.0", "pad": "~3.3.0", "prettier": "^3.5.3", - "rollup": "^4.40.2", + "rollup": "^4.41.1", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "~13.2.3", From 6f377226062c1d16eb2f0d3ef8349d103df8f34f Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 6 Jun 2025 11:21:30 +0200 Subject: [PATCH 22/49] refactor(csv-parse): sync usage of parse in one call --- packages/csv-parse/lib/sync.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/csv-parse/lib/sync.js b/packages/csv-parse/lib/sync.js index 5e6b374e..d4851845 100644 --- a/packages/csv-parse/lib/sync.js +++ b/packages/csv-parse/lib/sync.js @@ -13,10 +13,13 @@ const parse = function (data, opts = {}) { } }; const close = () => {}; - const err1 = parser.parse(data, false, push, close); - if (err1 !== undefined) throw err1; - const err2 = parser.parse(undefined, true, push, close); - if (err2 !== undefined) throw err2; + const error = parser.parse(data, true, push, close); + if (error !== undefined) throw error; + // 250606: `parser.parse` was implemented as 2 calls: + // const err1 = parser.parse(data, false, push, close); + // if (err1 !== undefined) throw err1; + // const err2 = parser.parse(undefined, true, push, close); + // if (err2 !== undefined) throw err2; return records; }; From e53caec9a10c4a5e6ac7e8fdcff23cdedb9aafd5 Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 6 Jun 2025 11:22:04 +0200 Subject: [PATCH 23/49] test(csv-parse): sync usage of Uint8Array (see #458) --- packages/csv-parse/test/api.sync.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/csv-parse/test/api.sync.js b/packages/csv-parse/test/api.sync.js index e2f9cb70..c85d8eec 100644 --- a/packages/csv-parse/test/api.sync.js +++ b/packages/csv-parse/test/api.sync.js @@ -19,6 +19,16 @@ describe("API sync", function () { ]); }); + it("take a Uint8Array and return records", function () { + const records = parse( + new TextEncoder().encode("field_1,field_2\nvalue 1,value 2"), + ); + records.should.eql([ + ["field_1", "field_2"], + ["value 1", "value 2"], + ]); + }); + it("honors columns option", function () { const records = parse("field_1,field_2\nvalue 1,value 2", { columns: true, From bf0daacd10673533bf89943ab5b6bdcce284e398 Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 6 Jun 2025 17:19:56 +0200 Subject: [PATCH 24/49] test(csv-parse): new unknown error type --- packages/csv-parse/lib/index.d.ts | 3 +- packages/csv-parse/test/api.assert_error.js | 43 ++++++++++++--------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/packages/csv-parse/lib/index.d.ts b/packages/csv-parse/lib/index.d.ts index f907df10..753b302c 100644 --- a/packages/csv-parse/lib/index.d.ts +++ b/packages/csv-parse/lib/index.d.ts @@ -286,7 +286,8 @@ export type CsvErrorCode = | "CSV_QUOTE_NOT_CLOSED" | "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH" | "CSV_RECORD_INCONSISTENT_COLUMNS" - | "CSV_OPTION_COLUMNS_MISSING_NAME"; + | "CSV_OPTION_COLUMNS_MISSING_NAME" + | "CSV_UNKNOWN_ERROR"; export class CsvError extends Error { readonly code: CsvErrorCode; diff --git a/packages/csv-parse/test/api.assert_error.js b/packages/csv-parse/test/api.assert_error.js index e69ff173..95433181 100644 --- a/packages/csv-parse/test/api.assert_error.js +++ b/packages/csv-parse/test/api.assert_error.js @@ -35,16 +35,16 @@ export const assert_error = (err, assert = {}, exhaustive = false) => { describe("API assert_error", function () { it("work on array", function () { - const err = new CsvError("A_MESSAGE", "A message"); + const err = new CsvError("CSV_UNKNOWN_ERROR", "A message"); assert_error( [err, err], [ { - code: "A_MESSAGE", + code: "CSV_UNKNOWN_ERROR", message: "A message", }, { - code: "A_MESSAGE", + code: "CSV_UNKNOWN_ERROR", message: "A message", }, ], @@ -53,7 +53,7 @@ describe("API assert_error", function () { it("exhaustive detect a property not in assert", function () { const err = new CsvError( - "A_MESSAGE", + "CSV_UNKNOWN_ERROR", "A message", {}, { a_key: "a value" }, @@ -62,7 +62,7 @@ describe("API assert_error", function () { assert_error( err, { - code: "A_MESSAGE", + code: "CSV_UNKNOWN_ERROR", message: "A message", }, true, @@ -71,10 +71,10 @@ describe("API assert_error", function () { }); it("detect a property not in error", function () { - const err = new CsvError("A_MESSAGE", "A message"); + const err = new CsvError("CSV_UNKNOWN_ERROR", "A message"); (() => { assert_error(err, { - code: "A_MESSAGE", + code: "CSV_UNKNOWN_ERROR", message: "A message", a_key: "a value", }); @@ -82,41 +82,46 @@ describe("API assert_error", function () { }); it("validate a string value", function () { - const err = new CsvError("A_MESSAGE", "A message"); + const err = new CsvError("CSV_UNKNOWN_ERROR", "A message"); assert_error(err, { - code: "A_MESSAGE", + code: "CSV_UNKNOWN_ERROR", message: "A message", }); (() => { assert_error(err, { - code: "A_MESSAGE", + code: "CSV_UNKNOWN_ERROR", message: "Another mesage", }); }).should.throw("expected 'A message' to equal 'Another mesage'"); }); it("validate a null value", function () { - const err = new CsvError("A_MESSAGE", "A message"); + const err = new CsvError("CSV_UNKNOWN_ERROR", "A message"); (() => { assert_error(err, { - code: "A_MESSAGE", + code: "CSV_UNKNOWN_ERROR", message: null, }); }).should.throw("expected 'A message' to be null"); }); it("validate a undefined value", function () { - const err = new CsvError("A_MESSAGE", "A message"); + const err = new CsvError("CSV_UNKNOWN_ERROR", "A message"); (() => { assert_error(err, { - code: "A_MESSAGE", + code: "CSV_UNKNOWN_ERROR", message: undefined, }); }).should.throw("expected 'A message' to be undefined"); }); it("validate a boolean true value", function () { - const err = new CsvError("A_MESSAGE", "A message", {}, { a_boolean: true }); + const err = new CsvError( + "CSV_UNKNOWN_ERROR", + "A message", + {}, + { a_boolean: true }, + ); assert_error(err, { a_boolean: true, }); @@ -129,7 +134,7 @@ describe("API assert_error", function () { it("validate a boolean false value", function () { const err = new CsvError( - "A_MESSAGE", + "CSV_UNKNOWN_ERROR", "A message", {}, { a_boolean: false }, @@ -145,14 +150,14 @@ describe("API assert_error", function () { }); it("validate a regexp value", function () { - const err = new CsvError("A_MESSAGE", "A message"); + const err = new CsvError("CSV_UNKNOWN_ERROR", "A message"); assert_error(err, { - code: "A_MESSAGE", + code: "CSV_UNKNOWN_ERROR", message: /^A.*/, }); (() => { assert_error(err, { - code: "A_MESSAGE", + code: "CSV_UNKNOWN_ERROR", message: /^Another.*/, }); }).should.throw("expected 'A message' to match /^Another.*/"); From d22dcbc8fcc41fe10bcd94f9046287a962ce7b2d Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 6 Jun 2025 17:38:56 +0200 Subject: [PATCH 25/49] test(csv-parse): api assert error ts conversion --- .../{api.assert_error.js => api.assert_error.ts} | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) rename packages/csv-parse/test/{api.assert_error.js => api.assert_error.ts} (89%) diff --git a/packages/csv-parse/test/api.assert_error.js b/packages/csv-parse/test/api.assert_error.ts similarity index 89% rename from packages/csv-parse/test/api.assert_error.js rename to packages/csv-parse/test/api.assert_error.ts index 95433181..d1a51ce6 100644 --- a/packages/csv-parse/test/api.assert_error.js +++ b/packages/csv-parse/test/api.assert_error.ts @@ -2,9 +2,17 @@ import should from "should"; import { CsvError } from "../lib/index.js"; /* eslint mocha/no-exports: "off" */ -export const assert_error = (err, assert = {}, exhaustive = false) => { +export const assert_error = function ( + err: CsvError | CsvError[], + assert: + | ({ code?: string; message?: string | RegExp | undefined | null } & T) + | ({ code?: string; message?: string | RegExp | undefined | null } & T)[], + exhaustive = false, +) { if (Array.isArray(err)) { - err.forEach((e, i) => assert_error(e, assert[i])); + err.forEach((e, i) => + assert_error(e, Array.isArray(assert) ? assert[i] : assert), + ); return; } if (exhaustive) { @@ -122,11 +130,11 @@ describe("API assert_error", function () { {}, { a_boolean: true }, ); - assert_error(err, { + assert_error<{ a_boolean: boolean }>(err, { a_boolean: true, }); (() => { - assert_error(err, { + assert_error<{ a_boolean: boolean }>(err, { a_boolean: false, }); }).should.throw("expected true to equal false"); From 3d4f22549941766ecec87c962f4bb5058b996c24 Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 6 Jun 2025 17:46:03 +0200 Subject: [PATCH 26/49] feat(csv-parse): callback records defined type --- packages/csv-parse/lib/index.d.ts | 2 +- packages/csv-parse/test/api.types.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/csv-parse/lib/index.d.ts b/packages/csv-parse/lib/index.d.ts index 753b302c..a58bdc45 100644 --- a/packages/csv-parse/lib/index.d.ts +++ b/packages/csv-parse/lib/index.d.ts @@ -6,7 +6,7 @@ import * as stream from "stream"; export type Callback = ( err: CsvError | undefined, - records: T[] | undefined, + records: T[], info?: Info, ) => void; diff --git a/packages/csv-parse/test/api.types.ts b/packages/csv-parse/test/api.types.ts index 25998c69..a73778ec 100644 --- a/packages/csv-parse/test/api.types.ts +++ b/packages/csv-parse/test/api.types.ts @@ -491,7 +491,8 @@ describe("API Types", function () { { columns: true, }, - (error, records: Person[] | undefined) => { + (error, records: Person[]) => { + records; next(error); }, ); From 89b34ed462c02556fd42fe229d74a2b82f33b62d Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 6 Jun 2025 17:46:38 +0200 Subject: [PATCH 27/49] test(csv-parse): ts lint corrections --- packages/csv-parse/test/api.types.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/csv-parse/test/api.types.ts b/packages/csv-parse/test/api.types.ts index a73778ec..90877c1f 100644 --- a/packages/csv-parse/test/api.types.ts +++ b/packages/csv-parse/test/api.types.ts @@ -7,7 +7,6 @@ import { Parser, CsvError, } from "../lib/index.js"; -import { parse as parse_sync } from "../lib/sync.js"; describe("API Types", function () { type Person = { name: string; age: number }; @@ -457,6 +456,7 @@ describe("API Types", function () { describe("Generic types", function () { it("Exposes string[][] if columns is not specified", function (next) { parse("", {}, (error, records: string[][] | undefined) => { + records; next(error); }); }); @@ -468,6 +468,7 @@ describe("API Types", function () { columns: false, }, (error, records: string[][] | undefined) => { + records; next(error); }, ); @@ -480,6 +481,7 @@ describe("API Types", function () { columns: true, }, (error, records: unknown[] | undefined) => { + records; next(error); }, ); From b9ac1f0ce8d10a157d189ff4277a668ec2680b07 Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 6 Jun 2025 18:05:55 +0200 Subject: [PATCH 28/49] feat(csv-parse): boolean and null comment type --- packages/csv-parse/lib/index.d.ts | 2 +- packages/csv-parse/test/option.comment.js | 136 -------------------- packages/csv-parse/test/option.comment.ts | 143 ++++++++++++++++++++++ 3 files changed, 144 insertions(+), 137 deletions(-) create mode 100644 packages/csv-parse/test/option.comment.ts diff --git a/packages/csv-parse/lib/index.d.ts b/packages/csv-parse/lib/index.d.ts index a58bdc45..fb64585d 100644 --- a/packages/csv-parse/lib/index.d.ts +++ b/packages/csv-parse/lib/index.d.ts @@ -108,7 +108,7 @@ export interface Options { /** * Treat all the characters after this one as a comment, default to '' (disabled). */ - comment?: string; + comment?: string | boolean | null; /** * Restrict the definition of comments to a full line. Comment characters * defined in the middle of the line are not interpreted as such. The diff --git a/packages/csv-parse/test/option.comment.js b/packages/csv-parse/test/option.comment.js index d193c9e8..d22c5b20 100644 --- a/packages/csv-parse/test/option.comment.js +++ b/packages/csv-parse/test/option.comment.js @@ -1,20 +1,8 @@ import "should"; -import dedent from "dedent"; import { parse } from "../lib/index.js"; describe("Option `comment`", function () { it("validation", function () { - parse("", { comment: undefined }, () => {}); - parse("", { comment: null }, () => {}); - parse("", { comment: false }, () => {}); - parse("", { comment: "" }, () => {}); - (() => { - parse("", { comment: true }, () => {}); - }).should.throw({ - message: - "Invalid option comment: comment must be a buffer or a string, got true", - code: "CSV_INVALID_OPTION_COMMENT", - }); (() => { parse("", { comment: 2 }, () => {}); }).should.throw({ @@ -23,128 +11,4 @@ describe("Option `comment`", function () { code: "CSV_INVALID_OPTION_COMMENT", }); }); - - it("single comment line", function (next) { - parse("# comment", { comment: "#" }, (err, records) => { - records.length.should.eql(0); - next(err); - }); - }); - - it("single comment line with empty field", function (next) { - parse('""# comment', { comment: "#" }, (err, records) => { - records.should.eql([[""]]); - next(err); - }); - }); - - it("skip line starting by single comment char", function (next) { - parse( - dedent` - # skip this - "ABC","45" - "DEF","23" - # and this - "GHI","94" - # as well as that - `, - { - comment: "#", - }, - (err, records) => { - if (!err) { - records.should.eql([ - ["ABC", "45"], - ["DEF", "23"], - ["GHI", "94"], - ]); - } - next(err); - }, - ); - }); - - it("doent apply inside quotes", function (next) { - parse( - dedent` - "ABC","45" - "D#noEF","23"#yes - "GHI","94" - `, - { - comment: "#", - }, - (err, records) => { - if (!err) { - records.should.eql([ - ["ABC", "45"], - ["D#noEF", "23"], - ["GHI", "94"], - ]); - } - next(err); - }, - ); - }); - - it("is cancel if empty", function (next) { - parse( - dedent` - abc,#,def - 1,2,3 - `, - { - comment: "", - }, - (err, records) => { - records.should.eql([ - ["abc", "#", "def"], - ["1", "2", "3"], - ]); - next(); - }, - ); - }); - - it("is cancel by default", function (next) { - parse("abc,#,def\n1,2,3", (err, records) => { - records.should.eql([ - ["abc", "#", "def"], - ["1", "2", "3"], - ]); - next(); - }); - }); - - it("accept multiple characters", function (next) { - const parser = parse({ comment: "//" }, (err, records) => { - records.should.eql([ - ["abc", "def"], - ["1", "2"], - ]); - next(); - }); - const data = dedent` - abc,def - // a comment - 1,2 - `; - for (const char of data) { - parser.write(char); - } - parser.end(); - }); - - it("accept quotes", function (next) { - parse( - dedent` - "Alaska","Site1","Rack1","RTU-1","192.168.1.3" - # Contains double-quote: " - `, - { - comment: "#", - }, - (err) => next(err), - ); - }); }); diff --git a/packages/csv-parse/test/option.comment.ts b/packages/csv-parse/test/option.comment.ts new file mode 100644 index 00000000..70f499f4 --- /dev/null +++ b/packages/csv-parse/test/option.comment.ts @@ -0,0 +1,143 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `comment`", function () { + it("validation", function () { + parse("", { comment: undefined }, () => {}); + parse("", { comment: null }, () => {}); + parse("", { comment: false }, () => {}); + parse("", { comment: "" }, () => {}); + (() => { + parse("", { comment: true }, () => {}); + }).should.throw({ + message: + "Invalid option comment: comment must be a buffer or a string, got true", + code: "CSV_INVALID_OPTION_COMMENT", + }); + }); + + it("single comment line", function (next) { + parse("# comment", { comment: "#" }, (err, records) => { + records.length.should.eql(0); + next(err); + }); + }); + + it("single comment line with empty field", function (next) { + parse('""# comment', { comment: "#" }, (err, records) => { + records.should.eql([[""]]); + next(err); + }); + }); + + it("skip line starting by single comment char", function (next) { + parse( + dedent` + # skip this + "ABC","45" + "DEF","23" + # and this + "GHI","94" + # as well as that + `, + { + comment: "#", + }, + (err, records) => { + if (!err) { + records.should.eql([ + ["ABC", "45"], + ["DEF", "23"], + ["GHI", "94"], + ]); + } + next(err); + }, + ); + }); + + it("doent apply inside quotes", function (next) { + parse( + dedent` + "ABC","45" + "D#noEF","23"#yes + "GHI","94" + `, + { + comment: "#", + }, + (err, records) => { + if (!err) { + records.should.eql([ + ["ABC", "45"], + ["D#noEF", "23"], + ["GHI", "94"], + ]); + } + next(err); + }, + ); + }); + + it("is cancel if empty", function (next) { + parse( + dedent` + abc,#,def + 1,2,3 + `, + { + comment: "", + }, + (err, records) => { + records.should.eql([ + ["abc", "#", "def"], + ["1", "2", "3"], + ]); + next(); + }, + ); + }); + + it("is cancel by default", function (next) { + parse("abc,#,def\n1,2,3", (err, records) => { + records.should.eql([ + ["abc", "#", "def"], + ["1", "2", "3"], + ]); + next(); + }); + }); + + it("accept multiple characters", function (next) { + const parser = parse({ comment: "//" }, (err, records) => { + records.should.eql([ + ["abc", "def"], + ["1", "2"], + ]); + next(); + }); + const data = dedent` + abc,def + // a comment + 1,2 + `; + for (const char of data) { + parser.write(char); + } + parser.end(); + }); + + it("accept quotes", function (next) { + parse( + dedent` + "Alaska","Site1","Rack1","RTU-1","192.168.1.3" + # Contains double-quote: " + `, + { + comment: "#", + }, + (err) => next(err), + ); + }); +}); From d8bf4fd1fb813553a0e312b44374877b4dace52d Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 6 Jun 2025 18:09:47 +0200 Subject: [PATCH 29/49] feat(csv-parse): null comment_no_infix type --- packages/csv-parse/lib/index.d.ts | 2 +- .../csv-parse/test/option.comment_no_infix.js | 52 ---------------- .../csv-parse/test/option.comment_no_infix.ts | 59 +++++++++++++++++++ 3 files changed, 60 insertions(+), 53 deletions(-) create mode 100644 packages/csv-parse/test/option.comment_no_infix.ts diff --git a/packages/csv-parse/lib/index.d.ts b/packages/csv-parse/lib/index.d.ts index fb64585d..9c1b7a15 100644 --- a/packages/csv-parse/lib/index.d.ts +++ b/packages/csv-parse/lib/index.d.ts @@ -114,7 +114,7 @@ export interface Options { * defined in the middle of the line are not interpreted as such. The * option require the activation of comments. */ - comment_no_infix?: boolean; + comment_no_infix?: boolean | null; /** * Set the field delimiter. One character only, defaults to comma. */ diff --git a/packages/csv-parse/test/option.comment_no_infix.js b/packages/csv-parse/test/option.comment_no_infix.js index e182919c..f9659a00 100644 --- a/packages/csv-parse/test/option.comment_no_infix.js +++ b/packages/csv-parse/test/option.comment_no_infix.js @@ -3,10 +3,6 @@ import { parse } from "../lib/index.js"; describe("Option `comment_no_infix`", function () { it("validation", function () { - parse("", { comment_no_infix: undefined }, () => {}); - parse("", { comment_no_infix: null }, () => {}); - parse("", { comment_no_infix: false }, () => {}); - parse("", { comment_no_infix: true }, () => {}); (() => { parse("", { comment_no_infix: "" }, () => {}); }).should.throw({ @@ -22,52 +18,4 @@ describe("Option `comment_no_infix`", function () { code: "CSV_INVALID_OPTION_COMMENT", }); }); - - it("with `true`, field starting with comment", function (next) { - parse( - "a,#,c", - { - comment: "#", - comment_no_infix: true, - }, - (err, records) => { - if (!err) { - records.should.eql([["a", "#", "c"]]); - } - next(err); - }, - ); - }); - - it("with `true`, field not starting with comment", function (next) { - parse( - "a,b#,c", - { - comment: "#", - comment_no_infix: true, - }, - (err, records) => { - if (!err) { - records.should.eql([["a", "b#", "c"]]); - } - next(err); - }, - ); - }); - - it("with `false`", function (next) { - parse( - "a,b#,c", - { - comment: "#", - comment_no_infix: false, - }, - (err, records) => { - if (!err) { - records.should.eql([["a", "b"]]); - } - next(err); - }, - ); - }); }); diff --git a/packages/csv-parse/test/option.comment_no_infix.ts b/packages/csv-parse/test/option.comment_no_infix.ts new file mode 100644 index 00000000..0bb21e29 --- /dev/null +++ b/packages/csv-parse/test/option.comment_no_infix.ts @@ -0,0 +1,59 @@ +import "should"; +import { parse } from "../lib/index.js"; + +describe("Option `comment_no_infix`", function () { + it("validation", function () { + parse("", { comment_no_infix: undefined }, () => {}); + parse("", { comment_no_infix: null }, () => {}); + parse("", { comment_no_infix: false }, () => {}); + parse("", { comment_no_infix: true }, () => {}); + }); + + it("with `true`, field starting with comment", function (next) { + parse( + "a,#,c", + { + comment: "#", + comment_no_infix: true, + }, + (err, records) => { + if (!err) { + records.should.eql([["a", "#", "c"]]); + } + next(err); + }, + ); + }); + + it("with `true`, field not starting with comment", function (next) { + parse( + "a,b#,c", + { + comment: "#", + comment_no_infix: true, + }, + (err, records) => { + if (!err) { + records.should.eql([["a", "b#", "c"]]); + } + next(err); + }, + ); + }); + + it("with `false`", function (next) { + parse( + "a,b#,c", + { + comment: "#", + comment_no_infix: false, + }, + (err, records) => { + if (!err) { + records.should.eql([["a", "b"]]); + } + next(err); + }, + ); + }); +}); From 998698c8d1e193824bdc1f332705241f94fd57de Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 6 Jun 2025 18:11:21 +0200 Subject: [PATCH 30/49] test(csv-parse): delimiter ts conversion --- packages/csv-parse/test/option.delimiter.js | 164 ------------------- packages/csv-parse/test/option.delimiter.ts | 171 ++++++++++++++++++++ 2 files changed, 171 insertions(+), 164 deletions(-) create mode 100644 packages/csv-parse/test/option.delimiter.ts diff --git a/packages/csv-parse/test/option.delimiter.js b/packages/csv-parse/test/option.delimiter.js index 5cd3509e..7c4c8896 100644 --- a/packages/csv-parse/test/option.delimiter.js +++ b/packages/csv-parse/test/option.delimiter.js @@ -3,22 +3,6 @@ import { parse } from "../lib/index.js"; describe("Option `delimiter`", function () { it("validation", function () { - parse("", { delimiter: "," }, () => {}); - parse("", { delimiter: Buffer.from(",") }, () => {}); - (() => { - parse("", { delimiter: "" }, () => {}); - }).should.throw({ - message: - 'Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got ""', - code: "CSV_INVALID_OPTION_DELIMITER", - }); - (() => { - parse("", { delimiter: Buffer.from("") }, () => {}); - }).should.throw({ - message: - 'Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got {"type":"Buffer","data":[]}', - code: "CSV_INVALID_OPTION_DELIMITER", - }); (() => { parse("", { delimiter: true }, () => {}); }).should.throw({ @@ -26,153 +10,5 @@ describe("Option `delimiter`", function () { "Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got true", code: "CSV_INVALID_OPTION_DELIMITER", }); - (() => { - parse("", { delimiter: [] }, () => {}); - }).should.throw({ - message: - "Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got []", - code: "CSV_INVALID_OPTION_DELIMITER", - }); - (() => { - parse("", { delimiter: [""] }, () => {}); - }).should.throw({ - message: - 'Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got [""]', - code: "CSV_INVALID_OPTION_DELIMITER", - }); - (() => { - parse("", { delimiter: [",", ""] }, () => {}); - }).should.throw({ - message: - 'Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got [",",""]', - code: "CSV_INVALID_OPTION_DELIMITER", - }); - }); - - it("is compatible with buffer size", function (next) { - const parser = parse({ delimiter: [":::"] }, (err, records) => { - records.should.eql([ - ["1", "2", "3"], - ["b", "c", "d"], - ]); - next(err); - }); - for (const c of "1:::2:::3\nb:::c:::d") { - parser.write(c); - } - parser.end(); - }); - - it("using default comma", function (next) { - parse("abc,,123,\n,def,,", (err, records) => { - if (err) return next(err); - records.should.eql([ - ["abc", "", "123", ""], - ["", "def", "", ""], - ]); - next(); - }); - }); - - it("using tab", function (next) { - parse( - "abc\t\tde\tf\t\n\thij\tklm\t\t", - { - delimiter: "\t", - }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["abc", "", "de", "f", ""], - ["", "hij", "klm", "", ""], - ]); - next(); - }, - ); - }); - - it("multiple chars empty fields only", function (next) { - parse( - "!#\n!#", - { - delimiter: "!#", - }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["", ""], - ["", ""], - ]); - next(); - }, - ); - }); - - it("multiple chars mixed fields", function (next) { - parse( - "20322051544!#!#8.8017226E7!#45!#\n!#1974!#8.8392926E7!#!#", - { - delimiter: "!#", - }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["20322051544", "", "8.8017226E7", "45", ""], - ["", "1974", "8.8392926E7", "", ""], - ]); - next(); - }, - ); - }); - - it("using array of a single delimiter", function (next) { - parse( - "abc,,123,\n,def,,", - { - delimiter: [","], - }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["abc", "", "123", ""], - ["", "def", "", ""], - ]); - next(); - }, - ); - }); - - it("using array of a single delimiter of multiple characters", function (next) { - parse( - "!#\n!#", - { - delimiter: ["!#"], - }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["", ""], - ["", ""], - ]); - next(); - }, - ); - }); - - it("using array of a multiple delimiters of variable length", function (next) { - parse( - "abc,;;123;;\n;;def;;,", - { - delimiter: [",", ";;"], - }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["abc", "", "123", ""], - ["", "def", "", ""], - ]); - next(); - }, - ); }); }); diff --git a/packages/csv-parse/test/option.delimiter.ts b/packages/csv-parse/test/option.delimiter.ts new file mode 100644 index 00000000..568ae1b4 --- /dev/null +++ b/packages/csv-parse/test/option.delimiter.ts @@ -0,0 +1,171 @@ +import "should"; +import { parse } from "../lib/index.js"; + +describe("Option `delimiter`", function () { + it("validation", function () { + parse("", { delimiter: "," }, () => {}); + parse("", { delimiter: Buffer.from(",") }, () => {}); + (() => { + parse("", { delimiter: "" }, () => {}); + }).should.throw({ + message: + 'Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got ""', + code: "CSV_INVALID_OPTION_DELIMITER", + }); + (() => { + parse("", { delimiter: Buffer.from("") }, () => {}); + }).should.throw({ + message: + 'Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got {"type":"Buffer","data":[]}', + code: "CSV_INVALID_OPTION_DELIMITER", + }); + (() => { + parse("", { delimiter: [] }, () => {}); + }).should.throw({ + message: + "Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got []", + code: "CSV_INVALID_OPTION_DELIMITER", + }); + (() => { + parse("", { delimiter: [""] }, () => {}); + }).should.throw({ + message: + 'Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got [""]', + code: "CSV_INVALID_OPTION_DELIMITER", + }); + (() => { + parse("", { delimiter: [",", ""] }, () => {}); + }).should.throw({ + message: + 'Invalid option delimiter: delimiter must be a non empty string or buffer or array of string|buffer, got [",",""]', + code: "CSV_INVALID_OPTION_DELIMITER", + }); + }); + + it("is compatible with buffer size", function (next) { + const parser = parse({ delimiter: [":::"] }, (err, records) => { + records.should.eql([ + ["1", "2", "3"], + ["b", "c", "d"], + ]); + next(err); + }); + for (const c of "1:::2:::3\nb:::c:::d") { + parser.write(c); + } + parser.end(); + }); + + it("using default comma", function (next) { + parse("abc,,123,\n,def,,", (err, records) => { + if (err) return next(err); + records.should.eql([ + ["abc", "", "123", ""], + ["", "def", "", ""], + ]); + next(); + }); + }); + + it("using tab", function (next) { + parse( + "abc\t\tde\tf\t\n\thij\tklm\t\t", + { + delimiter: "\t", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["abc", "", "de", "f", ""], + ["", "hij", "klm", "", ""], + ]); + next(); + }, + ); + }); + + it("multiple chars empty fields only", function (next) { + parse( + "!#\n!#", + { + delimiter: "!#", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["", ""], + ["", ""], + ]); + next(); + }, + ); + }); + + it("multiple chars mixed fields", function (next) { + parse( + "20322051544!#!#8.8017226E7!#45!#\n!#1974!#8.8392926E7!#!#", + { + delimiter: "!#", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["20322051544", "", "8.8017226E7", "45", ""], + ["", "1974", "8.8392926E7", "", ""], + ]); + next(); + }, + ); + }); + + it("using array of a single delimiter", function (next) { + parse( + "abc,,123,\n,def,,", + { + delimiter: [","], + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["abc", "", "123", ""], + ["", "def", "", ""], + ]); + next(); + }, + ); + }); + + it("using array of a single delimiter of multiple characters", function (next) { + parse( + "!#\n!#", + { + delimiter: ["!#"], + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["", ""], + ["", ""], + ]); + next(); + }, + ); + }); + + it("using array of a multiple delimiters of variable length", function (next) { + parse( + "abc,;;123;;\n;;def;;,", + { + delimiter: [",", ";;"], + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["abc", "", "123", ""], + ["", "def", "", ""], + ]); + next(); + }, + ); + }); +}); From 9056293960a2e0bdc0e4bae30d819ca794407fed Mon Sep 17 00:00:00 2001 From: David Worms Date: Wed, 11 Jun 2025 15:47:00 +0200 Subject: [PATCH 31/49] feat(csv-parse): normalize_options export --- packages/csv-parse/lib/index.d.ts | 3 +++ packages/csv-parse/lib/index.js | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/csv-parse/lib/index.d.ts b/packages/csv-parse/lib/index.d.ts index 9c1b7a15..b286b29a 100644 --- a/packages/csv-parse/lib/index.d.ts +++ b/packages/csv-parse/lib/index.d.ts @@ -327,3 +327,6 @@ declare function parse(callback?: Callback): Parser; // export default parse; export { parse }; + +declare function normalize_options(opts: Options): OptionsNormalized; +export { normalize_options }; diff --git a/packages/csv-parse/lib/index.js b/packages/csv-parse/lib/index.js index 67eb68df..35e44820 100644 --- a/packages/csv-parse/lib/index.js +++ b/packages/csv-parse/lib/index.js @@ -9,6 +9,7 @@ import { Transform } from "stream"; import { is_object } from "./utils/is_object.js"; import { transform } from "./api/index.js"; import { CsvError } from "./api/CsvError.js"; +import { normalize_options } from "./api/normalize_options.js"; class Parser extends Transform { constructor(opts = {}) { @@ -134,4 +135,4 @@ const parse = function () { }; // export default parse -export { parse, Parser, CsvError }; +export { parse, Parser, CsvError, normalize_options }; From a26f5d71c82dcdda01037965330919344eedaf47 Mon Sep 17 00:00:00 2001 From: David Worms Date: Wed, 11 Jun 2025 15:48:18 +0200 Subject: [PATCH 32/49] feat(csv-parse): casting context raw export --- packages/csv-parse/lib/index.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/csv-parse/lib/index.d.ts b/packages/csv-parse/lib/index.d.ts index b286b29a..48e89b1a 100644 --- a/packages/csv-parse/lib/index.d.ts +++ b/packages/csv-parse/lib/index.d.ts @@ -32,6 +32,7 @@ export interface CastingContext { readonly index: number; readonly quoting: boolean; readonly lines: number; + readonly raw: string | undefined; readonly records: number; readonly invalid_field_length: number; } From 423db5a1a0e6e0c382f803e059c7515bdc18985f Mon Sep 17 00:00:00 2001 From: David Worms Date: Wed, 11 Jun 2025 15:48:45 +0200 Subject: [PATCH 33/49] refactor(csv-parse): cast_first_line_to_header default to undefined --- packages/csv-parse/lib/api/normalize_options.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/csv-parse/lib/api/normalize_options.js b/packages/csv-parse/lib/api/normalize_options.js index ecb1eaaa..c6f1f6db 100644 --- a/packages/csv-parse/lib/api/normalize_options.js +++ b/packages/csv-parse/lib/api/normalize_options.js @@ -95,7 +95,7 @@ const normalize_options = function (opts) { ); } // Normalize option `columns` - options.cast_first_line_to_header = null; + options.cast_first_line_to_header = undefined; if (options.columns === true) { // Fields in the first line are converted as-is to columns options.cast_first_line_to_header = undefined; From da7a62e3b30fdc1fbd6293cbc9289a8ff6f5f64a Mon Sep 17 00:00:00 2001 From: David Worms Date: Wed, 11 Jun 2025 15:51:20 +0200 Subject: [PATCH 34/49] feat(csv-parse): normailzsed options type --- packages/csv-parse/lib/index.d.ts | 252 ++++++++++++++++++++++++----- packages/csv-parse/lib/stream.d.ts | 1 + packages/csv-parse/lib/sync.d.ts | 1 + 3 files changed, 211 insertions(+), 43 deletions(-) diff --git a/packages/csv-parse/lib/index.d.ts b/packages/csv-parse/lib/index.d.ts index 48e89b1a..6462092f 100644 --- a/packages/csv-parse/lib/index.d.ts +++ b/packages/csv-parse/lib/index.d.ts @@ -19,11 +19,42 @@ export class Parser { __write(chars: any, end: any, callback: any): any; - readonly options: Options; + readonly options: OptionsNormalized; readonly info: Info; } +export interface Info { + /** + * Count the number of lines being fully commented. + */ + readonly comment_lines: number; + /** + * Count the number of processed empty lines. + */ + readonly empty_lines: number; + /** + * The number of lines encountered in the source dataset, start at 1 for the first line. + */ + readonly lines: number; + /** + * Count the number of processed records. + */ + readonly records: number; + /** + * Count of the number of processed bytes. + */ + readonly bytes: number; + /** + * Number of non uniform records when `relax_column_count` is true. + */ + readonly invalid_field_length: number; + /** + * Normalized verion of `options.columns` when `options.columns` is true, boolean otherwise. + */ + readonly columns: boolean | { name: string }[] | { disabled: true }[]; +} + export interface CastingContext { readonly column: number | string; readonly empty_lines: number; @@ -51,6 +82,166 @@ export type ColumnOption = | false | { name: K }; +export interface OptionsNormalized { + auto_parse?: boolean | CastingFunction; + auto_parse_date?: boolean | CastingDateFunction; + /** + * If true, detect and exclude the byte order mark (BOM) from the CSV input if present. + */ + bom?: boolean; + /** + * If true, the parser will attempt to convert input string to native types. + * If a function, receive the value as first argument, a context as second argument and return a new value. More information about the context properties is available below. + */ + cast?: boolean | CastingFunction; + /** + * If true, the parser will attempt to convert input string to dates. + * If a function, receive the value as argument and return a new value. It requires the "auto_parse" option. Be careful, it relies on Date.parse. + */ + cast_date?: boolean | CastingDateFunction; + /** + * Internal property string the function to + */ + cast_first_line_to_header?: ( + record: T, + ) => ColumnOption< + T extends string[] ? string : T extends unknown ? string : keyof T + >[]; + /** + * List of fields as an array, a user defined callback accepting the first + * line and returning the column names or true if autodiscovered in the first + * CSV line, default to null, affect the result data set in the sense that + * records will be objects instead of arrays. + */ + columns: + | boolean + | ColumnOption< + T extends string[] ? string : T extends unknown ? string : keyof T + >[]; + /** + * Convert values into an array of values when columns are activated and + * when multiple columns of the same name are found. + */ + group_columns_by_name: boolean; + /** + * Treat all the characters after this one as a comment, default to '' (disabled). + */ + comment: string | null; + /** + * Restrict the definition of comments to a full line. Comment characters + * defined in the middle of the line are not interpreted as such. The + * option require the activation of comments. + */ + comment_no_infix: boolean; + /** + * Set the field delimiter. One character only, defaults to comma. + */ + delimiter: Buffer[]; + /** + * Set the source and destination encoding, a value of `null` returns buffer instead of strings. + */ + encoding: BufferEncoding | null; + /** + * Set the escape character, one character only, defaults to double quotes. + */ + escape: null | Buffer; + /** + * Start handling records from the requested number of records. + */ + from: number; + /** + * Start handling records from the requested line number. + */ + from_line: number; + /** + * Don't interpret delimiters as such in the last field according to the number of fields calculated from the number of columns, the option require the presence of the `column` option when `true`. + */ + ignore_last_delimiters: boolean | number; + /** + * Generate two properties `info` and `record` where `info` is a snapshot of the info object at the time the record was created and `record` is the parsed array or object. + */ + info: boolean; + /** + * If true, ignore whitespace immediately following the delimiter (i.e. left-trim all fields), defaults to false. + * Does not remove whitespace in a quoted field. + */ + ltrim: boolean; + /** + * Maximum numer of characters to be contained in the field and line buffers before an exception is raised, + * used to guard against a wrong delimiter or record_delimiter, + * default to 128000 characters. + */ + max_record_size: number; + /** + * Name of header-record title to name objects by. + */ + objname: number | string | undefined; + /** + * Alter and filter records by executing a user defined function. + */ + on_record?: (record: T, context: CastingContext) => T | undefined; + /** + * Optional character surrounding a field, one character only, defaults to double quotes. + */ + quote?: Buffer | null; + /** + * Generate two properties raw and row where raw is the original CSV row content and row is the parsed array or object. + */ + raw: boolean; + /** + * Discard inconsistent columns count, default to false. + */ + relax_column_count: boolean; + /** + * Discard inconsistent columns count when the record contains less fields than expected, default to false. + */ + relax_column_count_less: boolean; + /** + * Discard inconsistent columns count when the record contains more fields than expected, default to false. + */ + relax_column_count_more: boolean; + /** + * Preserve quotes inside unquoted field. + */ + relax_quotes: boolean; + /** + * One or multiple characters used to delimit record rows; defaults to auto discovery if not provided. + * Supported auto discovery method are Linux ("\n"), Apple ("\r") and Windows ("\r\n") row delimiters. + */ + record_delimiter: Buffer[]; + /** + * If true, ignore whitespace immediately preceding the delimiter (i.e. right-trim all fields), defaults to false. + * Does not remove whitespace in a quoted field. + */ + rtrim: boolean; + /** + * Dont generate empty values for empty lines. + * Defaults to false + */ + skip_empty_lines: boolean; + /** + * Skip a line with error found inside and directly go process the next line. + */ + skip_records_with_error: boolean; + /** + * Don't generate records for lines containing empty column values (column matching /\s*\/), defaults to false. + */ + skip_records_with_empty_values: boolean; + /** + * Stop handling records after the requested number of records. + */ + to: number; + /** + * Stop handling records after the requested line number. + */ + to_line: number; + /** + * If true, ignore whitespace immediately around the delimiter, defaults to false. + * Does not remove whitespace in a quoted field. + */ + trim: boolean; +} + /* Note, could not `extends stream.TransformOptions` because encoding can be BufferEncoding and undefined as well as null which is not defined in the @@ -123,20 +314,20 @@ export interface Options { /** * Set the source and destination encoding, a value of `null` returns buffer instead of strings. */ - encoding?: BufferEncoding | undefined; + encoding?: BufferEncoding | boolean | null | undefined; /** * Set the escape character, one character only, defaults to double quotes. */ - escape?: string | null | false | Buffer; + escape?: string | null | boolean | Buffer; /** * Start handling records from the requested number of records. */ - from?: number; + from?: number | string; /** * Start handling records from the requested line number. */ - from_line?: number; - fromLine?: number; + from_line?: null | number | string; + fromLine?: null | number | string; /** * Don't interpret delimiters as such in the last field according to the number of fields calculated from the number of columns, the option require the presence of the `column` option when `true`. */ @@ -149,23 +340,29 @@ export interface Options { * If true, ignore whitespace immediately following the delimiter (i.e. left-trim all fields), defaults to false. * Does not remove whitespace in a quoted field. */ - ltrim?: boolean; + ltrim?: boolean | null; /** * Maximum numer of characters to be contained in the field and line buffers before an exception is raised, * used to guard against a wrong delimiter or record_delimiter, * default to 128000 characters. */ - max_record_size?: number; + max_record_size?: number | null | string; maxRecordSize?: number; /** * Name of header-record title to name objects by. */ - objname?: string; + objname?: Buffer | null | number | string; /** * Alter and filter records by executing a user defined function. */ on_record?: (record: T, context: CastingContext) => T | null | undefined; onRecord?: (record: T, context: CastingContext) => T | null | undefined; + /** + * Function called when an error occured if the `skip_records_with_error` + * option is activated. + */ + on_skip?: (err: CsvError | undefined, raw: string | undefined) => undefined; + onSkip?: (err: CsvError | undefined, raw: string | undefined) => undefined; /** * Optional character surrounding a field, one character only, defaults to double quotes. */ @@ -204,7 +401,7 @@ export interface Options { * If true, ignore whitespace immediately preceding the delimiter (i.e. right-trim all fields), defaults to false. * Does not remove whitespace in a quoted field. */ - rtrim?: boolean; + rtrim?: boolean | null; /** * Dont generate empty values for empty lines. * Defaults to false @@ -234,38 +431,7 @@ export interface Options { * If true, ignore whitespace immediately around the delimiter, defaults to false. * Does not remove whitespace in a quoted field. */ - trim?: boolean; -} - -export interface Info { - /** - * Count the number of lines being fully commented. - */ - readonly comment_lines: number; - /** - * Count the number of processed empty lines. - */ - readonly empty_lines: number; - /** - * The number of lines encountered in the source dataset, start at 1 for the first line. - */ - readonly lines: number; - /** - * Count the number of processed records. - */ - readonly records: number; - /** - * Count of the number of processed bytes. - */ - readonly bytes: number; - /** - * Number of non uniform records when `relax_column_count` is true. - */ - readonly invalid_field_length: number; - /** - * Normalized verion of `options.columns` when `options.columns` is true, boolean otherwise. - */ - readonly columns: boolean | { name: string }[] | { disabled: true }[]; + trim?: boolean | null; } export type CsvErrorCode = @@ -297,7 +463,7 @@ export class CsvError extends Error { constructor( code: CsvErrorCode, message: string | string[], - options?: Options, + options?: OptionsNormalized, ...contexts: any[] ); } diff --git a/packages/csv-parse/lib/stream.d.ts b/packages/csv-parse/lib/stream.d.ts index 03e86991..02cb2c1d 100644 --- a/packages/csv-parse/lib/stream.d.ts +++ b/packages/csv-parse/lib/stream.d.ts @@ -10,6 +10,7 @@ export { CastingDateFunction, ColumnOption, Options, + OptionsNormalized, Info, CsvErrorCode, CsvError, diff --git a/packages/csv-parse/lib/sync.d.ts b/packages/csv-parse/lib/sync.d.ts index dbaf9ba8..015bfceb 100644 --- a/packages/csv-parse/lib/sync.d.ts +++ b/packages/csv-parse/lib/sync.d.ts @@ -20,6 +20,7 @@ export { CastingDateFunction, ColumnOption, Options, + OptionsNormalized, Info, CsvErrorCode, CsvError, From cf965842fecc2d2f4fb35032ad0d8a33be15b040 Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 13 Jun 2025 11:35:14 +0200 Subject: [PATCH 35/49] test(csv-parse): options ts convertion --- packages/csv-parse/lib/index.d.ts | 52 +-- packages/csv-parse/test/api.assert_error.ts | 32 +- packages/csv-parse/test/api.types.ts | 19 +- .../test/{info.lines.js => info.lines.ts} | 5 + packages/csv-parse/test/option.bom.js | 123 ----- packages/csv-parse/test/option.bom.ts | 130 ++++++ packages/csv-parse/test/option.cast.js | 393 ---------------- packages/csv-parse/test/option.cast.ts | 400 ++++++++++++++++ packages/csv-parse/test/option.cast_date.js | 58 --- packages/csv-parse/test/option.cast_date.ts | 64 +++ packages/csv-parse/test/option.columns.js | 428 +----------------- packages/csv-parse/test/option.columns.ts | 424 +++++++++++++++++ .../option.columns_duplicates_to_array.js | 45 -- .../option.columns_duplicates_to_array.ts | 49 ++ packages/csv-parse/test/option.encoding.js | 141 ------ packages/csv-parse/test/option.encoding.ts | 147 ++++++ packages/csv-parse/test/option.escape.js | 197 -------- packages/csv-parse/test/option.escape.ts | 203 +++++++++ packages/csv-parse/test/option.from.js | 84 ---- packages/csv-parse/test/option.from.ts | 91 ++++ packages/csv-parse/test/option.from_line.js | 24 - packages/csv-parse/test/option.from_line.ts | 187 ++++++++ .../test/option.ignore_last_delimiters.js | 78 ---- .../test/option.ignore_last_delimiters.ts | 84 ++++ packages/csv-parse/test/option.info.js | 143 ------ packages/csv-parse/test/option.info.ts | 149 ++++++ packages/csv-parse/test/option.ltrim.js | 125 ----- packages/csv-parse/test/option.ltrim.ts | 133 ++++++ .../csv-parse/test/option.max_record_size.js | 42 -- .../csv-parse/test/option.max_record_size.ts | 50 ++ packages/csv-parse/test/option.objname.js | 201 +------- packages/csv-parse/test/option.objname.ts | 208 +++++++++ packages/csv-parse/test/option.on_record.js | 201 +------- packages/csv-parse/test/option.on_record.ts | 208 +++++++++ packages/csv-parse/test/option.on_skip.js | 60 --- packages/csv-parse/test/option.on_skip.ts | 69 +++ .../test/{option.quote.js => option.quote.ts} | 8 +- packages/csv-parse/test/option.raw.js | 61 --- packages/csv-parse/test/option.raw.ts | 78 ++++ ...elimiter.js => option.record_delimiter.ts} | 58 ++- .../test/option.relax_column_count.js | 277 ------------ .../test/option.relax_column_count.ts | 291 ++++++++++++ .../csv-parse/test/option.relax_quotes.js | 109 ----- .../csv-parse/test/option.relax_quotes.ts | 123 +++++ packages/csv-parse/test/option.rtrim.js | 122 ----- packages/csv-parse/test/option.rtrim.ts | 130 ++++++ .../csv-parse/test/option.skip_empty_lines.js | 81 ---- .../csv-parse/test/option.skip_empty_lines.ts | 88 ++++ .../option.skip_records_with_empty_values.js | 88 ---- .../option.skip_records_with_empty_values.ts | 95 ++++ .../test/option.skip_records_with_error.js | 214 --------- .../test/option.skip_records_with_error.ts | 222 +++++++++ packages/csv-parse/test/option.to.js | 118 ----- packages/csv-parse/test/option.to.ts | 126 ++++++ packages/csv-parse/test/option.to_line.js | 126 ------ packages/csv-parse/test/option.to_line.ts | 133 ++++++ packages/csv-parse/test/option.trim.js | 296 ------------ packages/csv-parse/test/option.trim.ts | 303 +++++++++++++ packages/csv-parse/test/options.js | 21 +- packages/csv-parse/test/options.ts | 27 ++ 60 files changed, 4317 insertions(+), 3925 deletions(-) rename packages/csv-parse/test/{info.lines.js => info.lines.ts} (93%) create mode 100644 packages/csv-parse/test/option.bom.ts create mode 100644 packages/csv-parse/test/option.cast.ts create mode 100644 packages/csv-parse/test/option.cast_date.ts create mode 100644 packages/csv-parse/test/option.columns.ts create mode 100644 packages/csv-parse/test/option.columns_duplicates_to_array.ts create mode 100644 packages/csv-parse/test/option.encoding.ts create mode 100644 packages/csv-parse/test/option.escape.ts create mode 100644 packages/csv-parse/test/option.from.ts create mode 100644 packages/csv-parse/test/option.from_line.ts create mode 100644 packages/csv-parse/test/option.ignore_last_delimiters.ts create mode 100644 packages/csv-parse/test/option.info.ts create mode 100644 packages/csv-parse/test/option.ltrim.ts create mode 100644 packages/csv-parse/test/option.max_record_size.ts create mode 100644 packages/csv-parse/test/option.objname.ts create mode 100644 packages/csv-parse/test/option.on_record.ts create mode 100644 packages/csv-parse/test/option.on_skip.ts rename packages/csv-parse/test/{option.quote.js => option.quote.ts} (95%) create mode 100644 packages/csv-parse/test/option.raw.ts rename packages/csv-parse/test/{option.record_delimiter.js => option.record_delimiter.ts} (90%) create mode 100644 packages/csv-parse/test/option.relax_column_count.ts create mode 100644 packages/csv-parse/test/option.relax_quotes.ts create mode 100644 packages/csv-parse/test/option.rtrim.ts create mode 100644 packages/csv-parse/test/option.skip_empty_lines.ts create mode 100644 packages/csv-parse/test/option.skip_records_with_empty_values.ts create mode 100644 packages/csv-parse/test/option.skip_records_with_error.ts create mode 100644 packages/csv-parse/test/option.to.ts create mode 100644 packages/csv-parse/test/option.to_line.ts create mode 100644 packages/csv-parse/test/option.trim.ts create mode 100644 packages/csv-parse/test/options.ts diff --git a/packages/csv-parse/lib/index.d.ts b/packages/csv-parse/lib/index.d.ts index 6462092f..8fadf007 100644 --- a/packages/csv-parse/lib/index.d.ts +++ b/packages/csv-parse/lib/index.d.ts @@ -370,33 +370,33 @@ export interface Options { /** * Generate two properties raw and row where raw is the original CSV row content and row is the parsed array or object. */ - raw?: boolean; + raw?: boolean | null; + /** + * One or multiple characters used to delimit record rows; defaults to auto discovery if not provided. + * Supported auto discovery method are Linux ("\n"), Apple ("\r") and Windows ("\r\n") row delimiters. + */ + record_delimiter?: string | Buffer | null | (string | Buffer | null)[]; + recordDelimiter?: string | Buffer | null | (string | Buffer | null)[]; /** * Discard inconsistent columns count, default to false. */ - relax_column_count?: boolean; - relaxColumnCount?: boolean; + relax_column_count?: boolean | null; + relaxColumnCount?: boolean | null; /** * Discard inconsistent columns count when the record contains less fields than expected, default to false. */ - relax_column_count_less?: boolean; - relaxColumnCountLess?: boolean; + relax_column_count_less?: boolean | null; + relaxColumnCountLess?: boolean | null; /** * Discard inconsistent columns count when the record contains more fields than expected, default to false. */ - relax_column_count_more?: boolean; - relaxColumnCountMore?: boolean; + relax_column_count_more?: boolean | null; + relaxColumnCountMore?: boolean | null; /** * Preserve quotes inside unquoted field. */ - relax_quotes?: boolean; - relaxQuotes?: boolean; - /** - * One or multiple characters used to delimit record rows; defaults to auto discovery if not provided. - * Supported auto discovery method are Linux ("\n"), Apple ("\r") and Windows ("\r\n") row delimiters. - */ - record_delimiter?: string | string[] | Buffer | Buffer[]; - recordDelimiter?: string | string[] | Buffer | Buffer[]; + relax_quotes?: boolean | null; + relaxQuotes?: boolean | null; /** * If true, ignore whitespace immediately preceding the delimiter (i.e. right-trim all fields), defaults to false. * Does not remove whitespace in a quoted field. @@ -406,27 +406,27 @@ export interface Options { * Dont generate empty values for empty lines. * Defaults to false */ - skip_empty_lines?: boolean; - skipEmptyLines?: boolean; + skip_empty_lines?: boolean | null; + skipEmptyLines?: boolean | null; /** - * Skip a line with error found inside and directly go process the next line. + * Don't generate records for lines containing empty column values (column matching /\s*\/), defaults to false. */ - skip_records_with_error?: boolean; - skipRecordsWithError?: boolean; + skip_records_with_empty_values?: boolean | null; + skipRecordsWithEmptyValues?: boolean | null; /** - * Don't generate records for lines containing empty column values (column matching /\s*\/), defaults to false. + * Skip a line with error found inside and directly go process the next line. */ - skip_records_with_empty_values?: boolean; - skipRecordsWithEmptyValues?: boolean; + skip_records_with_error?: boolean | null; + skipRecordsWithError?: boolean | null; /** * Stop handling records after the requested number of records. */ - to?: number; + to?: null | number | string; /** * Stop handling records after the requested line number. */ - to_line?: number; - toLine?: number; + to_line?: null | number | string; + toLine?: null | number | string; /** * If true, ignore whitespace immediately around the delimiter, defaults to false. * Does not remove whitespace in a quoted field. diff --git a/packages/csv-parse/test/api.assert_error.ts b/packages/csv-parse/test/api.assert_error.ts index d1a51ce6..28e0517c 100644 --- a/packages/csv-parse/test/api.assert_error.ts +++ b/packages/csv-parse/test/api.assert_error.ts @@ -1,5 +1,5 @@ import should from "should"; -import { CsvError } from "../lib/index.js"; +import { CsvError, normalize_options } from "../lib/index.js"; /* eslint mocha/no-exports: "off" */ export const assert_error = function ( @@ -60,12 +60,10 @@ describe("API assert_error", function () { }); it("exhaustive detect a property not in assert", function () { - const err = new CsvError( - "CSV_UNKNOWN_ERROR", - "A message", - {}, - { a_key: "a value" }, - ); + const options = normalize_options({}); + const err = new CsvError("CSV_UNKNOWN_ERROR", "A message", options, { + a_key: "a value", + }); (() => { assert_error( err, @@ -124,12 +122,10 @@ describe("API assert_error", function () { }); it("validate a boolean true value", function () { - const err = new CsvError( - "CSV_UNKNOWN_ERROR", - "A message", - {}, - { a_boolean: true }, - ); + const options = normalize_options({}); + const err = new CsvError("CSV_UNKNOWN_ERROR", "A message", options, { + a_boolean: true, + }); assert_error<{ a_boolean: boolean }>(err, { a_boolean: true, }); @@ -141,12 +137,10 @@ describe("API assert_error", function () { }); it("validate a boolean false value", function () { - const err = new CsvError( - "CSV_UNKNOWN_ERROR", - "A message", - {}, - { a_boolean: false }, - ); + const options = normalize_options({}); + const err = new CsvError("CSV_UNKNOWN_ERROR", "A message", options, { + a_boolean: false, + }); assert_error(err, { a_boolean: false, }); diff --git a/packages/csv-parse/test/api.types.ts b/packages/csv-parse/test/api.types.ts index 90877c1f..30920d5e 100644 --- a/packages/csv-parse/test/api.types.ts +++ b/packages/csv-parse/test/api.types.ts @@ -6,6 +6,7 @@ import { Options, Parser, CsvError, + normalize_options, } from "../lib/index.js"; describe("API Types", function () { @@ -30,7 +31,7 @@ describe("API Types", function () { it("Expose options", function () { const parser: Parser = parse(); - const options: Options = parser.options; + const options = parser.options; const keys: string[] = Object.keys(options); keys .sort() @@ -224,13 +225,15 @@ describe("API Types", function () { const typedOptions: Options = {}; typedOptions.columns = ["age", undefined, null, false, { name: "name" }]; - typedOptions.columns = (record) => { + typedOptions.columns = (record: Person) => { + record; return ["age"]; }; const unknownTypedOptions: Options = {}; unknownTypedOptions.columns = ["anything", undefined, null, false]; - unknownTypedOptions.columns = (record) => { + unknownTypedOptions.columns = (record: unknown) => { + record; return ["anything", undefined, null, false]; }; }); @@ -429,10 +432,11 @@ describe("API Types", function () { }); it("Supports contexts", function () { + const options = normalize_options({}); const error = new CsvError( "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", "MESSAGE", - {}, + options, { testContext: { testProp: "testValue" } }, ); @@ -443,12 +447,11 @@ describe("API Types", function () { }); it("Proper type is thrown when an error is encountered", function () { - parse(`a,b\nc`, function (e: Error | undefined) { + parse(`a,b\nc`, function (e) { + if (!e) throw Error("Invalid assessment"); const isCsvError = e instanceof CsvError; isCsvError.should.be.true(); - (e as CsvError).code.should.eql( - "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", - ); + e.code.should.eql("CSV_RECORD_INCONSISTENT_FIELDS_LENGTH"); }); }); }); diff --git a/packages/csv-parse/test/info.lines.js b/packages/csv-parse/test/info.lines.ts similarity index 93% rename from packages/csv-parse/test/info.lines.js rename to packages/csv-parse/test/info.lines.ts index e22ff3f4..6ed28469 100644 --- a/packages/csv-parse/test/info.lines.js +++ b/packages/csv-parse/test/info.lines.ts @@ -47,6 +47,7 @@ describe("info lines", function () { "and",valid,line,follows... `, (err, records) => { + if (!err) return next(Error("Invalid assessment")); assert_error(err, { message: 'Invalid Opening Quote: a quote is found on field 4 at line 3, value is "h"', @@ -72,6 +73,7 @@ describe("info lines", function () { skip_empty_lines: true, }, (err, records) => { + if (!err) return next(Error("Invalid assessment")); assert_error(err, { message: 'Invalid Opening Quote: a quote is found on field 3 at line 4, value is "invalid h"', @@ -94,6 +96,7 @@ describe("info lines", function () { "",1974,8.8392926E7,"","" `, (err, records) => { + if (!err) return next(Error("Invalid assessment")); assert_error(err, { message: "Quote Not Closed: the parsing is finished with an opening quote at line 5", @@ -120,6 +123,7 @@ describe("info lines", function () { delimiter: "\t", }, (err, records) => { + if (!err) return next(Error("Invalid assessment")); assert_error(err, { message: 'Invalid Closing Quote: got " " at line 3 instead of delimiter, record delimiter, trimable character (if activated) or comment', @@ -146,6 +150,7 @@ describe("info lines", function () { escape: '"', }, (err, records) => { + if (!err) return next(Error("Invalid assessment")); assert_error(err, { message: 'Invalid Closing Quote: got "t" at line 2 instead of delimiter, record delimiter, trimable character (if activated) or comment', diff --git a/packages/csv-parse/test/option.bom.js b/packages/csv-parse/test/option.bom.js index cb7d3526..1c9638d7 100644 --- a/packages/csv-parse/test/option.bom.js +++ b/packages/csv-parse/test/option.bom.js @@ -1,6 +1,5 @@ import "should"; import { parse } from "../lib/index.js"; -import { assert_error } from "./api.assert_error.js"; describe("Option `bom`", function () { it("validate", function () { @@ -11,126 +10,4 @@ describe("Option `bom`", function () { code: "CSV_INVALID_OPTION_BOM", }); }); - - it("preserve bom if not defined", function (next) { - const parser = parse((err, records) => { - records.should.eql([ - ["\ufeffa", "b", "c"], - ["d", "e", "f"], - ]); - next(); - }); - parser.write(Buffer.from("\ufeffa,b,c\n")); - parser.write(Buffer.from("d,e,f")); - parser.end(); - }); - - it("preserve BOM if false", function (next) { - const parser = parse({ bom: false }, (err, records) => { - records.should.eql([ - ["\ufeffa", "b", "c"], - ["d", "e", "f"], - ]); - next(); - }); - parser.write(Buffer.from("\ufeffa,b,c\n")); - parser.write(Buffer.from("d,e,f")); - parser.end(); - }); - - it("with column option with bom `true`", function (next) { - const parser = parse( - { - columns: true, - bom: true, - }, - (err, records) => { - records[0]["key"].should.eql("value"); - next(); - }, - ); - parser.write(Buffer.from("\ufeffkey\nvalue")); - parser.end(); - }); - - it("with column option with bom `false`", function (next) { - const parser = parse( - { - columns: true, - bom: false, - }, - (err, records) => { - records[0]["\ufeffkey"].should.eql("value"); - next(); - }, - ); - parser.write(Buffer.from("\ufeffkey\nvalue")); - parser.end(); - }); - - it("throw parsing error if quote follow bom", function (next) { - const parser = parse((err) => { - assert_error(err, { - message: - 'Invalid Opening Quote: a quote is found on field 0 at line 1, value is "\ufeff" (utf8 bom)', - code: "INVALID_OPENING_QUOTE", - field: "\ufeff", - }); - next(); - }); - parser.write(Buffer.from('\ufeff"a",b,c\n')); - parser.write(Buffer.from("d,e,f")); - parser.end(); - }); - - it("handle BOM with utf8 (default)", function (next) { - const parser = parse({ bom: true }, (err, records) => { - records.should.eql([ - ["a", "b", "c"], - ["d", "e", "f"], - ]); - next(); - }); - parser.write(Buffer.from("\ufeffa,b,c\n")); - parser.write(Buffer.from("d,e,f")); - parser.end(); - }); - - it("preserve data if BOM is true", function (next) { - const parser = parse({ bom: true }, (err, records) => { - records.should.eql([ - ["a", "b", "c"], - ["d", "e", "f"], - ]); - next(); - }); - parser.write(Buffer.from("a,b,c\n")); - parser.write(Buffer.from("d,e,f")); - parser.end(); - }); - - it("handle BOM even if no enough data in the first package", function (next) { - const parser = parse({ bom: true }, (err, records) => { - records.should.eql([ - ["a", "b", "c"], - ["d", "e", "f"], - ]); - next(); - }); - parser.write(Buffer.from([239])); - parser.write(Buffer.from([187])); - parser.write(Buffer.from([191])); - parser.write(Buffer.from("a,b,c\n")); - parser.write(Buffer.from("d,e,f")); - parser.end(); - }); - - it("preserve data if no enough data to detect BOM", function (next) { - const parser = parse({ bom: true }, (err, records) => { - records.should.eql([["\ufffd"]]); - next(); - }); - parser.write(Buffer.from([239, 187])); - parser.end(); - }); }); diff --git a/packages/csv-parse/test/option.bom.ts b/packages/csv-parse/test/option.bom.ts new file mode 100644 index 00000000..706a657d --- /dev/null +++ b/packages/csv-parse/test/option.bom.ts @@ -0,0 +1,130 @@ +import "should"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `bom`", function () { + it("preserve bom if not defined", function (next) { + const parser = parse((err, records) => { + records.should.eql([ + ["\ufeffa", "b", "c"], + ["d", "e", "f"], + ]); + next(); + }); + parser.write(Buffer.from("\ufeffa,b,c\n")); + parser.write(Buffer.from("d,e,f")); + parser.end(); + }); + + it("preserve BOM if false", function (next) { + const parser = parse({ bom: false }, (err, records) => { + records.should.eql([ + ["\ufeffa", "b", "c"], + ["d", "e", "f"], + ]); + next(); + }); + parser.write(Buffer.from("\ufeffa,b,c\n")); + parser.write(Buffer.from("d,e,f")); + parser.end(); + }); + + it("with column option with bom `true`", function (next) { + const parser = parse( + { + columns: true, + bom: true, + }, + (err, records) => { + const record = records[0] as { key: string }; + record["key"].should.eql("value"); + next(); + }, + ); + parser.write(Buffer.from("\ufeffkey\nvalue")); + parser.end(); + }); + + it("with column option with bom `false`", function (next) { + const parser = parse( + { + columns: true, + bom: false, + }, + (err, records) => { + const record = records[0] as { "\ufeffkey": string }; + record["\ufeffkey"].should.eql("value"); + next(); + }, + ); + parser.write(Buffer.from("\ufeffkey\nvalue")); + parser.end(); + }); + + it("throw parsing error if quote follow bom", function (next) { + const parser = parse((err) => { + if (!err) return next(Error("Invalid assessment")); + assert_error(err, { + message: + 'Invalid Opening Quote: a quote is found on field 0 at line 1, value is "\ufeff" (utf8 bom)', + code: "INVALID_OPENING_QUOTE", + field: "\ufeff", + }); + next(); + }); + parser.write(Buffer.from('\ufeff"a",b,c\n')); + parser.write(Buffer.from("d,e,f")); + parser.end(); + }); + + it("handle BOM with utf8 (default)", function (next) { + const parser = parse({ bom: true }, (err, records) => { + records.should.eql([ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + next(); + }); + parser.write(Buffer.from("\ufeffa,b,c\n")); + parser.write(Buffer.from("d,e,f")); + parser.end(); + }); + + it("preserve data if BOM is true", function (next) { + const parser = parse({ bom: true }, (err, records) => { + records.should.eql([ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + next(); + }); + parser.write(Buffer.from("a,b,c\n")); + parser.write(Buffer.from("d,e,f")); + parser.end(); + }); + + it("handle BOM even if no enough data in the first package", function (next) { + const parser = parse({ bom: true }, (err, records) => { + records.should.eql([ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + next(); + }); + parser.write(Buffer.from([239])); + parser.write(Buffer.from([187])); + parser.write(Buffer.from([191])); + parser.write(Buffer.from("a,b,c\n")); + parser.write(Buffer.from("d,e,f")); + parser.end(); + }); + + it("preserve data if no enough data to detect BOM", function (next) { + const parser = parse({ bom: true }, (err, records) => { + records.should.eql([["\ufffd"]]); + next(); + }); + parser.write(Buffer.from([239, 187])); + parser.end(); + }); +}); diff --git a/packages/csv-parse/test/option.cast.js b/packages/csv-parse/test/option.cast.js index f6dfe1a6..c172e136 100644 --- a/packages/csv-parse/test/option.cast.js +++ b/packages/csv-parse/test/option.cast.js @@ -1,6 +1,5 @@ import "should"; import { parse } from "../lib/index.js"; -import { assert_error } from "./api.assert_error.js"; describe("Option `cast`", function () { it("validate", function () { @@ -12,396 +11,4 @@ describe("Option `cast`", function () { code: "CSV_INVALID_OPTION_CAST", }); }); - - describe("boolean true", function () { - it("all columns", function (next) { - parse("1,2,3", { cast: true }, (err, records) => { - if (!err) records.should.eql([[1, 2, 3]]); - next(); - }); - }); - - it("convert numbers", function (next) { - const records = []; - const parser = parse({ cast: true }); - parser.write( - "20322051544,1979,8.8017226E7,8e2,ABC,45,2000-01-01\n28392898392,1974,8.8392926e7,8E2,DEF,23,2050-11-27", - ); - parser.on("readable", () => { - let d; - while ((d = parser.read())) { - records.push(d); - } - }); - parser.on("error", (err) => { - next(err); - }); - parser.on("end", () => { - records.should.eql([ - [20322051544, 1979, 8.8017226e7, 800, "ABC", 45, "2000-01-01"], - [28392898392, 1974, 8.8392926e7, 800, "DEF", 23, "2050-11-27"], - ]); - next(); - }); - parser.end(); - }); - - it("ints", function (next) { - parse( - "123a,123,+123,-123,0123,+0123,-0123,", - { cast: true }, - (err, records) => { - records.should.eql([["123a", 123, 123, -123, 123, 123, -123, ""]]); - next(); - }, - ); - }); - - it("ints isnt exposed to DOS vulnerabilities, npm security issue 69742", function (next) { - const data = - Array.from({ length: 3000000 }) - .map(() => "1") - .join("") + "!"; - parse(data, { cast: true }, (err, records) => { - records[0][0].length.should.eql(3000001); - next(); - }); - }); - - it("float", function (next) { - parse( - "123a,1.23,0.123,01.23,.123,123.", - { cast: true }, - (err, records) => { - records.should.eql([["123a", 1.23, 0.123, 1.23, 0.123, 123]]); - next(); - }, - ); - }); - }); - - describe("function", function () { - it("custom function", function (next) { - parse( - "hello", - { - cast: (value, context) => Object.keys(context).sort(), - }, - (err, records) => { - if (!err) { - records.should.eql([ - [ - [ - "bytes", - "column", - "columns", - "comment_lines", - "empty_lines", - "error", - "header", - "index", - "invalid_field_length", - "lines", - "quoting", - "raw", - "records", - ], - ], - ]); - } - next(err); - }, - ); - }); - - it("return anything, eg a string or an object", function (next) { - parse( - "2000-01-01,date1\n2050-11-27,date2", - { - cast: (value, context) => { - if (context.index === 0) { - return `${value}T05:00:00.000Z`; - } else { - return { ...context }; - } - }, - }, - (err, records) => { - if (!err) { - records.should.eql([ - [ - "2000-01-01T05:00:00.000Z", - { - bytes: 16, - column: 1, - columns: false, - comment_lines: 0, - empty_lines: 0, - error: undefined, - header: false, - index: 1, - invalid_field_length: 0, - lines: 1, - quoting: false, - raw: undefined, - records: 0, - }, - ], - [ - "2050-11-27T05:00:00.000Z", - { - bytes: 33, - column: 1, - columns: false, - comment_lines: 0, - empty_lines: 0, - error: undefined, - header: false, - index: 1, - invalid_field_length: 0, - lines: 2, - quoting: false, - raw: undefined, - records: 1, - }, - ], - ]); - } - next(err); - }, - ); - }); - - it("column is a string", function (next) { - parse( - "1,2\n3,4,5\n6", - { - columns: ["a", "b"], - relax_column_count: true, - cast: (value, { column }) => typeof column, - }, - (err, records) => { - if (!err) { - records.should.eql([ - { a: "string", b: "string" }, - { a: "string", b: "string" }, - { a: "string" }, - ]); - } - next(err); - }, - ); - }); - - it("dont call cast on unreferenced columns", function (next) { - parse( - "1,2\n3,4,5,6\n7", - { - columns: ["a", "b"], - relax_column_count: true, - cast: (value) => { - if (value > 4 && value < 7) throw Error("Oh no"); - }, - }, - (err) => { - next(err); - }, - ); - }); - - it("custom function with quoting context", function (next) { - parse( - '"2000-01-01",date1\n2025-12-31,"date2"\n2050-11-27,"date3"', - { - cast: (value, { quoting }) => quoting, - }, - (err, records) => { - if (!err) { - records.should.eql([ - [true, false], - [false, true], - [false, true], - ]); - } - next(err); - }, - ); - }); - - it("accept all values", function (next) { - parse( - "1,2,3\n4,5,6", - { - max_record_size: 10, - cast: (value, { index }) => { - switch (index) { - case 0: - return undefined; - case 1: - return false; - case 2: - return null; - } - }, - }, - (err, records) => { - records.shift().should.eql([undefined, false, null]); - next(err); - }, - ); - }); - }); - - describe("columns", function () { - it("header is true on first line when columns is true", function (next) { - parse( - "a,b,c\n1,2,3\n4,5,6", - { - columns: true, - cast: (value, { header }) => (header ? value : parseInt(value)), - }, - (err, records) => { - if (!err) { - records.should.eql([ - { a: 1, b: 2, c: 3 }, - { a: 4, b: 5, c: 6 }, - ]); - } - next(err); - }, - ); - }); - - it("header is false when columns is an object", function (next) { - parse( - "1,2,3\n4,5,6", - { - columns: ["a", "b", "c"], - cast: (value, { header }) => { - header.should.be.false(); - return parseInt(value); - }, - }, - (err, records) => { - if (!err) { - records.should.eql([ - { a: 1, b: 2, c: 3 }, - { a: 4, b: 5, c: 6 }, - ]); - } - next(err); - }, - ); - }); - - it("dont count header line", function (next) { - parse( - "a,b,c\n1,2,3\n4,5,6", - { - columns: true, - cast: (value) => value, - }, - (err) => { - next(err); - }, - ); - }); - - it("filter columns if value is undefined", function (next) { - parse( - "a,b,c,d\n1,2,3,4\n5,6,7,8", - { - columns: true, - cast: (value, context) => { - switch (context.index) { - case 0: - return context.header ? value : Number(value); - case 2: - return value; - default: - return undefined; - } - }, - }, - (err, records) => { - if (!err) { - records.should.eql([ - { a: 1, c: "3" }, - { a: 5, c: "7" }, - ]); - } - next(err); - }, - ); - }); - - it("throw error if header is invalid", function (next) { - parse( - "a,b,c,d\n1,2,3,4\n5,6,7,8", - { - columns: true, - cast: (value, context) => { - switch (context.index) { - case 0: - return context.header ? "string" : value; - case 1: - return context.header ? undefined : value; - case 2: - return context.header ? null : value; - case 3: - return context.header ? 1234 : value; - } - }, - }, - (err) => { - assert_error(err, { - message: - "Invalid column definition: expect a string or a literal object, got 1234 at position 3", - code: "CSV_INVALID_COLUMN_DEFINITION", - }); - next(); - }, - ); - }); - }); - - describe("group_columns_by_name", function () { - it("leading zeros are maintained when group_columns_by_name is true", function (next) { - parse( - "FIELD_1,FIELD_1,FIELD_1\n0,2,3\n0,0,4", - { - cast: true, - columns: true, - group_columns_by_name: true, - }, - (err, records) => { - if (!err) { - records.should.eql([ - { FIELD_1: [0, 2, 3] }, - { FIELD_1: [0, 0, 4] }, - ]); - } - next(err); - }, - ); - }); - }); - - describe("error", function () { - it("catch error", function (next) { - parse( - "1,2,3\n4,5,6", - { - cast: (value) => { - if (value === "6") throw Error("Catchme"); - return value; - }, - }, - (err) => { - err.message.should.eql("Catchme"); - next(); - }, - ); - }); - }); }); diff --git a/packages/csv-parse/test/option.cast.ts b/packages/csv-parse/test/option.cast.ts new file mode 100644 index 00000000..c435daed --- /dev/null +++ b/packages/csv-parse/test/option.cast.ts @@ -0,0 +1,400 @@ +import "should"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `cast`", function () { + describe("boolean true", function () { + it("all columns", function (next) { + parse("1,2,3", { cast: true }, (err, records) => { + if (!err) records.should.eql([[1, 2, 3]]); + next(); + }); + }); + + it("convert numbers", function (next) { + const records: string[] = []; + const parser = parse({ cast: true }); + parser.write( + "20322051544,1979,8.8017226E7,8e2,ABC,45,2000-01-01\n28392898392,1974,8.8392926e7,8E2,DEF,23,2050-11-27", + ); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("error", (err) => { + next(err); + }); + parser.on("end", () => { + records.should.eql([ + [20322051544, 1979, 8.8017226e7, 800, "ABC", 45, "2000-01-01"], + [28392898392, 1974, 8.8392926e7, 800, "DEF", 23, "2050-11-27"], + ]); + next(); + }); + parser.end(); + }); + + it("ints", function (next) { + parse( + "123a,123,+123,-123,0123,+0123,-0123,", + { cast: true }, + (err, records) => { + records.should.eql([["123a", 123, 123, -123, 123, 123, -123, ""]]); + next(); + }, + ); + }); + + it("ints isnt exposed to DOS vulnerabilities, npm security issue 69742", function (next) { + const data = + Array.from({ length: 3000000 }) + .map(() => "1") + .join("") + "!"; + parse(data, { cast: true }, (err, records) => { + records[0][0].length.should.eql(3000001); + next(); + }); + }); + + it("float", function (next) { + parse( + "123a,1.23,0.123,01.23,.123,123.", + { cast: true }, + (err, records) => { + records.should.eql([["123a", 1.23, 0.123, 1.23, 0.123, 123]]); + next(); + }, + ); + }); + }); + + describe("function", function () { + it("custom function", function (next) { + parse( + "hello", + { + cast: (value, context) => Object.keys(context).sort(), + }, + (err, records) => { + if (!err) { + records.should.eql([ + [ + [ + "bytes", + "column", + "columns", + "comment_lines", + "empty_lines", + "error", + "header", + "index", + "invalid_field_length", + "lines", + "quoting", + "raw", + "records", + ], + ], + ]); + } + next(err); + }, + ); + }); + + it("return anything, eg a string or an object", function (next) { + parse( + "2000-01-01,date1\n2050-11-27,date2", + { + cast: (value, context) => { + if (context.index === 0) { + return `${value}T05:00:00.000Z`; + } else { + return { ...context }; + } + }, + }, + (err, records) => { + if (!err) { + records.should.eql([ + [ + "2000-01-01T05:00:00.000Z", + { + bytes: 16, + column: 1, + columns: false, + comment_lines: 0, + empty_lines: 0, + error: undefined, + header: false, + index: 1, + invalid_field_length: 0, + lines: 1, + quoting: false, + raw: undefined, + records: 0, + }, + ], + [ + "2050-11-27T05:00:00.000Z", + { + bytes: 33, + column: 1, + columns: false, + comment_lines: 0, + empty_lines: 0, + error: undefined, + header: false, + index: 1, + invalid_field_length: 0, + lines: 2, + quoting: false, + raw: undefined, + records: 1, + }, + ], + ]); + } + next(err); + }, + ); + }); + + it("column is a string", function (next) { + parse( + "1,2\n3,4,5\n6", + { + columns: ["a", "b"], + relax_column_count: true, + cast: (value, { column }) => typeof column, + }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "string", b: "string" }, + { a: "string", b: "string" }, + { a: "string" }, + ]); + } + next(err); + }, + ); + }); + + it("dont call cast on unreferenced columns", function (next) { + parse( + "1,2\n3,4,5,6\n7", + { + columns: ["a", "b"], + relax_column_count: true, + cast: (value) => { + const valueInt = parseInt(value); + if (valueInt > 4 && valueInt < 7) throw Error("Oh no"); + }, + }, + (err) => { + next(err); + }, + ); + }); + + it("custom function with quoting context", function (next) { + parse( + '"2000-01-01",date1\n2025-12-31,"date2"\n2050-11-27,"date3"', + { + cast: (value, { quoting }) => quoting, + }, + (err, records) => { + if (!err) { + records.should.eql([ + [true, false], + [false, true], + [false, true], + ]); + } + next(err); + }, + ); + }); + + it("accept all values", function (next) { + parse( + "1,2,3\n4,5,6", + { + max_record_size: 10, + cast: (value, { index }) => { + switch (index) { + case 0: + return undefined; + case 1: + return false; + case 2: + return null; + } + }, + }, + (err, records) => { + records.shift()?.should.eql([undefined, false, null]); + next(err); + }, + ); + }); + }); + + describe("columns", function () { + it("header is true on first line when columns is true", function (next) { + parse( + "a,b,c\n1,2,3\n4,5,6", + { + columns: true, + cast: (value, { header }) => (header ? value : parseInt(value)), + }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: 1, b: 2, c: 3 }, + { a: 4, b: 5, c: 6 }, + ]); + } + next(err); + }, + ); + }); + + it("header is false when columns is an object", function (next) { + parse( + "1,2,3\n4,5,6", + { + columns: ["a", "b", "c"], + cast: (value, { header }) => { + header.should.be.false(); + return parseInt(value); + }, + }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: 1, b: 2, c: 3 }, + { a: 4, b: 5, c: 6 }, + ]); + } + next(err); + }, + ); + }); + + it("dont count header line", function (next) { + parse( + "a,b,c\n1,2,3\n4,5,6", + { + columns: true, + cast: (value) => value, + }, + (err) => { + next(err); + }, + ); + }); + + it("filter columns if value is undefined", function (next) { + parse( + "a,b,c,d\n1,2,3,4\n5,6,7,8", + { + columns: true, + cast: (value, context) => { + switch (context.index) { + case 0: + return context.header ? value : Number(value); + case 2: + return value; + default: + return undefined; + } + }, + }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: 1, c: "3" }, + { a: 5, c: "7" }, + ]); + } + next(err); + }, + ); + }); + + it("throw error if header is invalid", function (next) { + parse( + "a,b,c,d\n1,2,3,4\n5,6,7,8", + { + columns: true, + cast: (value, context) => { + switch (context.index) { + case 0: + return context.header ? "string" : value; + case 1: + return context.header ? undefined : value; + case 2: + return context.header ? null : value; + case 3: + return context.header ? 1234 : value; + } + }, + }, + (err) => { + if (!err) return next(Error("Invalid assessment")); + assert_error(err, { + message: + "Invalid column definition: expect a string or a literal object, got 1234 at position 3", + code: "CSV_INVALID_COLUMN_DEFINITION", + }); + next(); + }, + ); + }); + }); + + describe("group_columns_by_name", function () { + it("leading zeros are maintained when group_columns_by_name is true", function (next) { + parse( + "FIELD_1,FIELD_1,FIELD_1\n0,2,3\n0,0,4", + { + cast: true, + columns: true, + group_columns_by_name: true, + }, + (err, records) => { + if (!err) { + records.should.eql([ + { FIELD_1: [0, 2, 3] }, + { FIELD_1: [0, 0, 4] }, + ]); + } + next(err); + }, + ); + }); + }); + + describe("error", function () { + it("catch error", function (next) { + parse( + "1,2,3\n4,5,6", + { + cast: (value) => { + if (value === "6") throw Error("Catchme"); + return value; + }, + }, + (err) => { + if (!err) return next(Error("Invalid assessment")); + err.message.should.eql("Catchme"); + next(); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/option.cast_date.js b/packages/csv-parse/test/option.cast_date.js index fd1b2cc7..d1406a73 100644 --- a/packages/csv-parse/test/option.cast_date.js +++ b/packages/csv-parse/test/option.cast_date.js @@ -11,62 +11,4 @@ describe("Option `cast_date`", function () { code: "CSV_INVALID_OPTION_CAST_DATE", }); }); - - it("true", function (next) { - parse( - "2000-01-01,date1\n2050-11-27,date2", - { - cast: true, - cast_date: true, - }, - (err, records) => { - records.should.eql([ - [new Date("2000-01-01T00:00:00.000Z"), "date1"], - [new Date("2050-11-27T00:00:00.000Z"), "date2"], - ]); - next(err); - }, - ); - }); - - it("as a function", function (next) { - // Current implementation rely on `isNaN(Date.parse(value))` - // While it return `NaN` in Firefox, Node.js return a timestamp for - // `Date.parse('Test 1')` - parse( - "2000-01-01\n2050-11-27", - { - cast: true, - cast_date: (value, context) => { - return new Date( - new Date(value).getTime() + context.lines * 60 * 60 * 1000, - ); - }, - }, - (err, records) => { - records.should.eql([ - [new Date("2000-01-01T01:00:00.000Z")], - [new Date("2050-11-27T02:00:00.000Z")], - ]); - next(err); - }, - ); - }); - - it("value end with space and number (issue #342)", function (next) { - // Current implementation rely on `isNaN(Date.parse(value))` - // While it return `NaN` in Firefox, Node.js return a timestamp for - // `node -e 'console.info(Date.parse("Test 1"))'` - parse( - "Test 1", - { - cast: true, - cast_date: true, - }, - (err, [[record]]) => { - record.toISOString().should.match(/^\d{4}-\d{2}-\d{2}/); - next(err); - }, - ); - }); }); diff --git a/packages/csv-parse/test/option.cast_date.ts b/packages/csv-parse/test/option.cast_date.ts new file mode 100644 index 00000000..dac9b38b --- /dev/null +++ b/packages/csv-parse/test/option.cast_date.ts @@ -0,0 +1,64 @@ +import "should"; +import { parse } from "../lib/index.js"; + +describe("Option `cast_date`", function () { + it("true", function (next) { + parse( + "2000-01-01,date1\n2050-11-27,date2", + { + cast: true, + cast_date: true, + }, + (err, records) => { + records.should.eql([ + [new Date("2000-01-01T00:00:00.000Z"), "date1"], + [new Date("2050-11-27T00:00:00.000Z"), "date2"], + ]); + next(err); + }, + ); + }); + + it("as a function", function (next) { + // Current implementation rely on `isNaN(Date.parse(value))` + // While it return `NaN` in Firefox, Node.js return a timestamp for + // `Date.parse('Test 1')` + parse( + "2000-01-01\n2050-11-27", + { + cast: true, + cast_date: (value, context) => { + return new Date( + new Date(value).getTime() + context.lines * 60 * 60 * 1000, + ); + }, + }, + (err, records) => { + records.should.eql([ + [new Date("2000-01-01T01:00:00.000Z")], + [new Date("2050-11-27T02:00:00.000Z")], + ]); + next(err); + }, + ); + }); + + it("value end with space and number (issue #342)", function (next) { + // Current implementation rely on `isNaN(Date.parse(value))` + // While it return `NaN` in Firefox, Node.js return a timestamp for + // `node -e 'console.info(Date.parse("Test 1"))'` + parse( + "Test 1", + { + cast: true, + cast_date: true, + }, + (err, [[record]]) => { + (record as unknown as Date) + .toISOString() + .should.match(/^\d{4}-\d{2}-\d{2}/); + next(err); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.columns.js b/packages/csv-parse/test/option.columns.js index 3958580a..1a18fe14 100644 --- a/packages/csv-parse/test/option.columns.js +++ b/packages/csv-parse/test/option.columns.js @@ -27,16 +27,6 @@ describe("Option `columns`", function () { }); }); - it("check the columns is not a boolean", function () { - (() => { - parse("", { columns: [{ name: "valid" }, true] }, () => {}); - }).should.throw({ - message: - "Invalid column definition: expect a string or a literal object, got true at position 1", - code: "CSV_INVALID_COLUMN_DEFINITION", - }); - }); - it("check the columns options is not empty", function () { (() => { parse("", { columns: {} }, () => {}); @@ -47,416 +37,14 @@ describe("Option `columns`", function () { }); }); - it("skip columns with false value", function (next) { - parse( - "1,2,3,4\n5,6,7,8", - { - columns: ["a", false, "c", false], - }, - (err, records) => { - if (!err) { - records.should.eql([ - { a: "1", c: "3" }, - { a: "5", c: "7" }, - ]); - } - next(err); - }, - ); - }); - - it("dont mutate options", function (next) { - const columns = ["a", false, "c", false]; - parse( - "1,2,3,4\n5,6,7,8", - { - columns: columns, - }, - (err) => { - if (!err) { - columns.should.eql(["a", false, "c", false]); - } - next(err); - }, - ); - }); - }); - - describe("duplicate column names", function () { - it("with true", function (next) { - parse( - "a,b,a,c\n1,2,3,4\n5,6,7,8", - { - columns: true, - }, - (err, records) => { - if (!err) { - records.should.eql([ - { a: "3", b: "2", c: "4" }, - { a: "7", b: "6", c: "8" }, - ]); - } - next(err); - }, - ); - }); - - it("with array", function (next) { - const columns = ["a", "b", "a", "c"]; - parse( - "1,2,3,4\n5,6,7,8", - { - columns: columns, - }, - (err, records) => { - if (!err) { - records.should.eql([ - { a: "3", b: "2", c: "4" }, - { a: "7", b: "6", c: "8" }, - ]); - } - next(err); - }, - ); - }); - - it("lines with empty column names", function (next) { - parse( - ",,,\n1,2,3,4\n5,6,7,8", - { - columns: true, - }, - (err, records) => { - if (!err) { - records.should.eql([{ "": "4" }, { "": "8" }]); - } - next(err); - }, - ); - }); - }); - - describe("boolean", function () { - it("read from first row if true", function (next) { - parse( - "FIELD_1,FIELD_2,FIELD_3,FIELD_4,FIELD_5,FIELD_6\n20322051544,1979,8.8017226E7,ABC,45,2000-01-01\n28392898392,1974,8.8392926E7,DEF,23,2050-11-27", - { - columns: true, - }, - (err, records) => { - if (!err) { - records.should.eql([ - { - FIELD_1: "20322051544", - FIELD_2: "1979", - FIELD_3: "8.8017226E7", - FIELD_4: "ABC", - FIELD_5: "45", - FIELD_6: "2000-01-01", - }, - { - FIELD_1: "28392898392", - FIELD_2: "1974", - FIELD_3: "8.8392926E7", - FIELD_4: "DEF", - FIELD_5: "23", - FIELD_6: "2050-11-27", - }, - ]); - } - next(err); - }, - ); - }); - - it("disabled if false", function (next) { - parse( - "a,b,c\nd,e,f", - { - columns: false, - }, - (err, records) => { - if (!err) { - records.should.eql([ - ["a", "b", "c"], - ["d", "e", "f"], - ]); - } - next(err); - }, - ); - }); - - it("header detection honors skip_empty_lines", function (next) { - parse( - "\na,b,c\n1,2,3", - { - columns: true, - skip_empty_lines: true, - }, - (err, records) => { - if (!err) { - records.should.eql([{ a: "1", b: "2", c: "3" }]); - } - next(err); - }, - ); - }); - - it("header detection honors skip_records_with_empty_values", function (next) { - parse( - ",,\na,b,c\n1,2,3", - { - columns: true, - skip_records_with_empty_values: true, - }, - (err, records) => { - if (!err) { - records.should.eql([{ a: "1", b: "2", c: "3" }]); - } - next(err); - }, - ); - }); - }); - - describe("array", function () { - it("enforced by user if array", function (next) { - parse( - "20322051544,1979,8.8017226E7,ABC,45,2000-01-01\n28392898392,1974,8.8392926E7,DEF,23,2050-11-27", - { - columns: [ - "FIELD_1", - "FIELD_2", - "FIELD_3", - "FIELD_4", - "FIELD_5", - "FIELD_6", - ], - }, - (err, records) => { - if (!err) { - records.should.eql([ - { - FIELD_1: "20322051544", - FIELD_2: "1979", - FIELD_3: "8.8017226E7", - FIELD_4: "ABC", - FIELD_5: "45", - FIELD_6: "2000-01-01", - }, - { - FIELD_1: "28392898392", - FIELD_2: "1974", - FIELD_3: "8.8392926E7", - FIELD_4: "DEF", - FIELD_5: "23", - FIELD_6: "2050-11-27", - }, - ]); - } - next(err); - }, - ); - }); - - it("validate options column length on first line", function (next) { - parse( - "1,2,3\n4,5,6,x\n7,8,9,x", - { - columns: ["a", "b", "c", "d"], - }, - (err) => { - assert_error(err, { - message: - "Invalid Record Length: columns length is 4, got 3 on line 1", - code: "CSV_RECORD_INCONSISTENT_COLUMNS", - }); - next(); - }, - ); - }); - - it("validate options column length on last line", function (next) { - parse( - "1,2,3,x\n4,5,6,x\n7,8,9", - { - columns: ["a", "b", "c", "d"], - }, - (err) => { - assert_error(err, { - message: - "Invalid Record Length: columns length is 4, got 3 on line 3", - code: "CSV_RECORD_INCONSISTENT_COLUMNS", - }); - next(); - }, - ); - }); - - it("context column is null when cast force the context creation", function (next) { - parse( - "a\nb,\n", - { - columns: true, - cast: (value) => value, - }, - (err) => { - assert_error(err, { - message: - "Invalid Record Length: columns length is 1, got 2 on line 2", - code: "CSV_RECORD_INCONSISTENT_COLUMNS", - column: null, - }); - next(); - }, - ); - }); - - it("context column is null when columns number inferieur to record length, fix regression #259", function (next) { - parse( - "a\nb,\n", - { - columns: true, - }, - (err) => { - assert_error(err, { - message: - "Invalid Record Length: columns length is 1, got 2 on line 2", - code: "CSV_RECORD_INCONSISTENT_COLUMNS", - column: null, - }); - next(); - }, - ); - }); - - it("skips column names defined as undefined", function (next) { - parse( - "0,1,2,3,4\n5,6,7,8,9", - { - columns: ["a", undefined, undefined, undefined, "b"], - }, - (err, records) => { - if (!err) { - records.should.eql([ - { a: "0", b: "4" }, - { a: "5", b: "9" }, - ]); - } - next(err); - }, - ); - }); - - it("skips column names defined as false", function (next) { - parse( - "0,1,2,3,4\n5,6,7,8,9", - { - columns: ["a", false, false, false, "b"], - }, - (err, records) => { - if (!err) { - records.should.eql([ - { a: "0", b: "4" }, - { a: "5", b: "9" }, - ]); - } - next(err); - }, - ); - }); - - it("skips column names defined as null and last", function (next) { - parse( - "0,1,2\n3,4,5", - { - columns: ["a", null, null], - }, - (err, records) => { - if (!err) { - records.should.eql([{ a: "0" }, { a: "3" }]); - } - next(err); - }, - ); - }); - - it("illustrate bug with undefined values", function (next) { - parse( - "0,1,2\n3,4,5", - { - columns: ["a", undefined, undefined], - }, - (err, records) => { - if (!err) { - records.should.eql([{ a: "0" }, { a: "3" }]); - } - next(err); - }, - ); - }); - - it("last column value ignore when `null`", function (next) { - parse( - "col_a,col_b,col_c\nfoo,bar\nfoo,bar,baz", - { - columns: ["a", "b", null], - }, - (err) => { - err.code.should.eql("CSV_RECORD_INCONSISTENT_COLUMNS"); - next(); - }, - ); - }); - }); - - describe("function", function () { - it("takes first line as argument", function (next) { - parse( - "FIELD_1,FIELD_2,FIELD_3,FIELD_4,FIELD_5,FIELD_6\n20322051544,1979,8.8017226E7,ABC,45,2000-01-01\n28392898392,1974,8.8392926E7,DEF,23,2050-11-27", - { - columns: (record) => record.map((column) => column.toLowerCase()), - }, - (err, records) => { - if (!err) { - records.should.eql([ - { - field_1: "20322051544", - field_2: "1979", - field_3: "8.8017226E7", - field_4: "ABC", - field_5: "45", - field_6: "2000-01-01", - }, - { - field_1: "28392898392", - field_2: "1974", - field_3: "8.8392926E7", - field_4: "DEF", - field_5: "23", - field_6: "2050-11-27", - }, - ]); - } - next(err); - }, - ); - }); - - it("catch thrown errors", function (next) { - parse( - "FIELD_1,FIELD_2,FIELD_3,FIELD_4\nabc,123,def,456\nhij,789,klm,0", - { - columns: () => { - throw Error("Catchme"); - }, - }, - (err) => { - err.message.should.eql("Catchme"); - next(); - }, - ); + it("check the columns is not a boolean", function () { + (() => { + parse("", { columns: [{ name: "valid" }, true] }, () => {}); + }).should.throw({ + message: + "Invalid column definition: expect a string or a literal object, got true at position 1", + code: "CSV_INVALID_COLUMN_DEFINITION", + }); }); it("must return an array of headers", function (next) { diff --git a/packages/csv-parse/test/option.columns.ts b/packages/csv-parse/test/option.columns.ts new file mode 100644 index 00000000..fba4030f --- /dev/null +++ b/packages/csv-parse/test/option.columns.ts @@ -0,0 +1,424 @@ +import "should"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `columns`", function () { + describe("validation", function () { + it("skip columns with false value", function (next) { + parse( + "1,2,3,4\n5,6,7,8", + { + columns: ["a", false, "c", false], + }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "1", c: "3" }, + { a: "5", c: "7" }, + ]); + } + next(err); + }, + ); + }); + + it("dont mutate options", function (next) { + const columns = ["a", "b", "c", "d"]; + parse( + "1,2,3,4\n5,6,7,8", + { + columns: columns, + }, + (err) => { + if (err) return next(err); + columns.should.eql(["a", "b", "c", "d"]); + next(); + }, + ); + }); + }); + + describe("duplicate column names", function () { + it("with true", function (next) { + parse( + "a,b,a,c\n1,2,3,4\n5,6,7,8", + { + columns: true, + }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "3", b: "2", c: "4" }, + { a: "7", b: "6", c: "8" }, + ]); + } + next(err); + }, + ); + }); + + it("with array", function (next) { + const columns = ["a", "b", "a", "c"]; + parse( + "1,2,3,4\n5,6,7,8", + { + columns: columns, + }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "3", b: "2", c: "4" }, + { a: "7", b: "6", c: "8" }, + ]); + } + next(err); + }, + ); + }); + + it("lines with empty column names", function (next) { + parse( + ",,,\n1,2,3,4\n5,6,7,8", + { + columns: true, + }, + (err, records) => { + if (!err) { + records.should.eql([{ "": "4" }, { "": "8" }]); + } + next(err); + }, + ); + }); + }); + + describe("boolean", function () { + it("read from first row if true", function (next) { + parse( + "FIELD_1,FIELD_2,FIELD_3,FIELD_4,FIELD_5,FIELD_6\n20322051544,1979,8.8017226E7,ABC,45,2000-01-01\n28392898392,1974,8.8392926E7,DEF,23,2050-11-27", + { + columns: true, + }, + (err, records) => { + if (!err) { + records.should.eql([ + { + FIELD_1: "20322051544", + FIELD_2: "1979", + FIELD_3: "8.8017226E7", + FIELD_4: "ABC", + FIELD_5: "45", + FIELD_6: "2000-01-01", + }, + { + FIELD_1: "28392898392", + FIELD_2: "1974", + FIELD_3: "8.8392926E7", + FIELD_4: "DEF", + FIELD_5: "23", + FIELD_6: "2050-11-27", + }, + ]); + } + next(err); + }, + ); + }); + + it("disabled if false", function (next) { + parse( + "a,b,c\nd,e,f", + { + columns: false, + }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + } + next(err); + }, + ); + }); + + it("header detection honors skip_empty_lines", function (next) { + parse( + "\na,b,c\n1,2,3", + { + columns: true, + skip_empty_lines: true, + }, + (err, records) => { + if (!err) { + records.should.eql([{ a: "1", b: "2", c: "3" }]); + } + next(err); + }, + ); + }); + + it("header detection honors skip_records_with_empty_values", function (next) { + parse( + ",,\na,b,c\n1,2,3", + { + columns: true, + skip_records_with_empty_values: true, + }, + (err, records) => { + if (!err) { + records.should.eql([{ a: "1", b: "2", c: "3" }]); + } + next(err); + }, + ); + }); + }); + + describe("array", function () { + it("enforced by user if array", function (next) { + parse( + "20322051544,1979,8.8017226E7,ABC,45,2000-01-01\n28392898392,1974,8.8392926E7,DEF,23,2050-11-27", + { + columns: [ + "FIELD_1", + "FIELD_2", + "FIELD_3", + "FIELD_4", + "FIELD_5", + "FIELD_6", + ], + }, + (err, records) => { + if (!err) { + records.should.eql([ + { + FIELD_1: "20322051544", + FIELD_2: "1979", + FIELD_3: "8.8017226E7", + FIELD_4: "ABC", + FIELD_5: "45", + FIELD_6: "2000-01-01", + }, + { + FIELD_1: "28392898392", + FIELD_2: "1974", + FIELD_3: "8.8392926E7", + FIELD_4: "DEF", + FIELD_5: "23", + FIELD_6: "2050-11-27", + }, + ]); + } + next(err); + }, + ); + }); + + it("validate options column length on first line", function (next) { + parse( + "1,2,3\n4,5,6,x\n7,8,9,x", + { + columns: ["a", "b", "c", "d"], + }, + (err) => { + if (!err) return next(Error("Invalid assessment")); + assert_error(err, { + message: + "Invalid Record Length: columns length is 4, got 3 on line 1", + code: "CSV_RECORD_INCONSISTENT_COLUMNS", + }); + next(); + }, + ); + }); + + it("validate options column length on last line", function (next) { + parse( + "1,2,3,x\n4,5,6,x\n7,8,9", + { + columns: ["a", "b", "c", "d"], + }, + (err) => { + if (!err) return next(Error("Invalid assessment")); + assert_error(err, { + message: + "Invalid Record Length: columns length is 4, got 3 on line 3", + code: "CSV_RECORD_INCONSISTENT_COLUMNS", + }); + next(); + }, + ); + }); + + it("context column is null when cast force the context creation", function (next) { + parse( + "a\nb,\n", + { + columns: true, + cast: (value) => value, + }, + (err) => { + if (!err) return next(Error("Invalid assessment")); + assert_error(err, { + message: + "Invalid Record Length: columns length is 1, got 2 on line 2", + code: "CSV_RECORD_INCONSISTENT_COLUMNS", + column: null, + }); + next(); + }, + ); + }); + + it("context column is null when columns number inferieur to record length, fix regression #259", function (next) { + parse( + "a\nb,\n", + { + columns: true, + }, + (err) => { + if (!err) return next(Error("Invalid assessment")); + assert_error(err, { + message: + "Invalid Record Length: columns length is 1, got 2 on line 2", + code: "CSV_RECORD_INCONSISTENT_COLUMNS", + column: null, + }); + next(); + }, + ); + }); + + it("skips column names defined as undefined", function (next) { + parse( + "0,1,2,3,4\n5,6,7,8,9", + { + columns: ["a", undefined, undefined, undefined, "b"], + }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "0", b: "4" }, + { a: "5", b: "9" }, + ]); + } + next(err); + }, + ); + }); + + it("skips column names defined as false", function (next) { + parse( + "0,1,2,3,4\n5,6,7,8,9", + { + columns: ["a", false, false, false, "b"], + }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "0", b: "4" }, + { a: "5", b: "9" }, + ]); + } + next(err); + }, + ); + }); + + it("skips column names defined as null and last", function (next) { + parse( + "0,1,2\n3,4,5", + { + columns: ["a", null, null], + }, + (err, records) => { + if (!err) { + records.should.eql([{ a: "0" }, { a: "3" }]); + } + next(err); + }, + ); + }); + + it("illustrate bug with undefined values", function (next) { + parse( + "0,1,2\n3,4,5", + { + columns: ["a", undefined, undefined], + }, + (err, records) => { + if (!err) { + records.should.eql([{ a: "0" }, { a: "3" }]); + } + next(err); + }, + ); + }); + + it("last column value ignore when `null`", function (next) { + parse( + "col_a,col_b,col_c\nfoo,bar\nfoo,bar,baz", + { + columns: ["a", "b", null], + }, + (err) => { + if (!err) return next(Error("Invalid assessment")); + err.code.should.eql("CSV_RECORD_INCONSISTENT_COLUMNS"); + next(); + }, + ); + }); + }); + + describe("function", function () { + it("takes first line as argument", function (next) { + parse( + "FIELD_1,FIELD_2,FIELD_3,FIELD_4,FIELD_5,FIELD_6\n20322051544,1979,8.8017226E7,ABC,45,2000-01-01\n28392898392,1974,8.8392926E7,DEF,23,2050-11-27", + { + columns: (record) => record.map((column) => column.toLowerCase()), + }, + (err, records) => { + if (!err) { + records.should.eql([ + { + field_1: "20322051544", + field_2: "1979", + field_3: "8.8017226E7", + field_4: "ABC", + field_5: "45", + field_6: "2000-01-01", + }, + { + field_1: "28392898392", + field_2: "1974", + field_3: "8.8392926E7", + field_4: "DEF", + field_5: "23", + field_6: "2050-11-27", + }, + ]); + } + next(err); + }, + ); + }); + + it("catch thrown errors", function (next) { + parse( + "FIELD_1,FIELD_2,FIELD_3,FIELD_4\nabc,123,def,456\nhij,789,klm,0", + { + columns: () => { + throw Error("Catchme"); + }, + }, + (err) => { + if (!err) return next(Error("Invalid assessment")); + err.message.should.eql("Catchme"); + next(); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/option.columns_duplicates_to_array.js b/packages/csv-parse/test/option.columns_duplicates_to_array.js index 9240ce4e..b5a58ba4 100644 --- a/packages/csv-parse/test/option.columns_duplicates_to_array.js +++ b/packages/csv-parse/test/option.columns_duplicates_to_array.js @@ -11,49 +11,4 @@ describe("Option `group_columns_by_name`", function () { 'Invalid option group_columns_by_name: expect an boolean, got "invalid"', }); }); - - it("require columns to be active", function () { - (() => { - parse("", { group_columns_by_name: true }); - }).should.throw({ - code: "CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME", - message: - "Invalid option group_columns_by_name: the `columns` mode must be activated.", - }); - }); - - it("when false", function (next) { - parse( - "FIELD_1,FIELD_1\nABC,DEF\nGHI,JKL", - { - columns: true, - group_columns_by_name: false, - }, - (err, records) => { - if (!err) { - records.should.eql([{ FIELD_1: "DEF" }, { FIELD_1: "JKL" }]); - } - next(err); - }, - ); - }); - - it("when true", function (next) { - parse( - "FIELD_1,FIELD_1\nABC,DEF\nGHI,JKL", - { - columns: true, - group_columns_by_name: true, - }, - (err, records) => { - if (!err) { - records.should.eql([ - { FIELD_1: ["ABC", "DEF"] }, - { FIELD_1: ["GHI", "JKL"] }, - ]); - } - next(err); - }, - ); - }); }); diff --git a/packages/csv-parse/test/option.columns_duplicates_to_array.ts b/packages/csv-parse/test/option.columns_duplicates_to_array.ts new file mode 100644 index 00000000..f70cb5a2 --- /dev/null +++ b/packages/csv-parse/test/option.columns_duplicates_to_array.ts @@ -0,0 +1,49 @@ +import "should"; +import { parse } from "../lib/index.js"; + +describe("Option `group_columns_by_name`", function () { + it("require columns to be active", function () { + (() => { + parse("", { group_columns_by_name: true }); + }).should.throw({ + code: "CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME", + message: + "Invalid option group_columns_by_name: the `columns` mode must be activated.", + }); + }); + + it("when false", function (next) { + parse( + "FIELD_1,FIELD_1\nABC,DEF\nGHI,JKL", + { + columns: true, + group_columns_by_name: false, + }, + (err, records) => { + if (!err) { + records.should.eql([{ FIELD_1: "DEF" }, { FIELD_1: "JKL" }]); + } + next(err); + }, + ); + }); + + it("when true", function (next) { + parse( + "FIELD_1,FIELD_1\nABC,DEF\nGHI,JKL", + { + columns: true, + group_columns_by_name: true, + }, + (err, records) => { + if (!err) { + records.should.eql([ + { FIELD_1: ["ABC", "DEF"] }, + { FIELD_1: ["GHI", "JKL"] }, + ]); + } + next(err); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.encoding.js b/packages/csv-parse/test/option.encoding.js index ef3d67f7..bf9ca71a 100644 --- a/packages/csv-parse/test/option.encoding.js +++ b/packages/csv-parse/test/option.encoding.js @@ -3,14 +3,6 @@ import { parse } from "../lib/index.js"; describe("Option `encoding`", function () { describe("validation & normalization", function () { - it("boolean true convert to default", function () { - parse({ encoding: true }).options.encoding.should.eql("utf8"); - }); - - it("boolean false convert to null", function () { - (parse({ encoding: false }).options.encoding === null).should.be.true(); - }); - it("integer throw invalid encoding", function () { (() => { parse("whocare", { encoding: 666 }, () => {}); @@ -21,137 +13,4 @@ describe("Option `encoding`", function () { }); }); }); - - describe("definition", function () { - it("with delimiter", function (next) { - parse( - Buffer.from("x:x", "utf16le"), - { - delimiter: ":", - encoding: "utf16le", - }, - (err, records) => { - if (!err) records.should.eql([["x", "x"]]); - next(err); - }, - ); - }); - - it("with escape equals quote", function (next) { - parse( - Buffer.from('a,b,c\n1,"2 ""3"" 4",5', "utf16le"), - { - encoding: "utf16le", - }, - (err, records) => { - if (!err) { - records.should.eql([ - ["a", "b", "c"], - ["1", '2 "3" 4', "5"], - ]); - } - next(err); - }, - ); - }); - - it("null return buffer", function (next) { - parse( - Buffer.from("a,b\n1,2"), - { - encoding: null, - }, - (err, records) => { - if (!err) { - records.should.eql([ - [Buffer.from("a"), Buffer.from("b")], - [Buffer.from("1"), Buffer.from("2")], - ]); - } - next(err); - }, - ); - }); - }); - - describe("with BOM", function () { - it("utf16le auto detected", function (next) { - const parser = parse( - { bom: true, encoding: "utf16le" }, - (err, records) => { - records.should.eql([ - ["a", "b", "c"], - ["d", "e", "f"], - ]); - next(); - }, - ); - parser.write(Buffer.from("\ufeffa,b,c\n", "utf16le")); - parser.write(Buffer.from("d,e,f", "utf16le")); - parser.end(); - }); - - it("utf16le auto detected with quote", function (next) { - const parser = parse({ bom: true }, (err, records) => { - if (!err) { - records.should.eql([ - ["a", "b", "c"], - ["d", "e", "f"], - ]); - } - next(err); - }); - parser.write(Buffer.from('\ufeffa,"b",c\n', "utf16le")); - parser.write(Buffer.from('d,"e",f', "utf16le")); - parser.end(); - }); - - it("utf16le auto detected with delimiter", function (next) { - const parser = parse({ bom: true, delimiter: "ф" }, (err, records) => { - if (!err) { - records.should.eql([ - ["a", "b", "c"], - ["d", "e", "f"], - ]); - } - next(err); - }); - parser.write(Buffer.from("\ufeffaфbфc\n", "utf16le")); - parser.write(Buffer.from("dфeфf", "utf16le")); - parser.end(); - }); - - it("utf16le auto detected with escape", function (next) { - const parser = parse({ bom: true, escape: "ф" }, (err, records) => { - if (!err) { - records.should.eql([ - ["a", '"b', "c"], - ["d", '"e', "f"], - ]); - } - next(err); - }); - parser.write(Buffer.from('\ufeffa,"ф"b",c\n', "utf16le")); - parser.write(Buffer.from('d,"ф"e",f', "utf16le")); - parser.end(); - }); - - it("utf16le auto detected with record_delimiter", function (next) { - const parser = parse( - { bom: true, record_delimiter: "ф" }, - (err, records) => { - if (!err) { - records.should.eql([ - ["a", "b", "c"], - ["d", "e", "f"], - ]); - } - next(err); - }, - ); - parser.write(Buffer.from("\ufeffa,b,cф", "utf16le")); - parser.write(Buffer.from("d,e,f", "utf16le")); - parser.end(); - }); - }); }); diff --git a/packages/csv-parse/test/option.encoding.ts b/packages/csv-parse/test/option.encoding.ts new file mode 100644 index 00000000..7961ab11 --- /dev/null +++ b/packages/csv-parse/test/option.encoding.ts @@ -0,0 +1,147 @@ +import "should"; +import { parse } from "../lib/index.js"; + +describe("Option `encoding`", function () { + describe("validation & normalization", function () { + it("boolean true convert to default", function () { + parse({ encoding: true }).options.encoding?.should.eql("utf8"); + }); + + it("boolean false convert to null", function () { + (parse({ encoding: false }).options.encoding === null).should.be.true(); + }); + }); + + describe("definition", function () { + it("with delimiter", function (next) { + parse( + Buffer.from("x:x", "utf16le"), + { + delimiter: ":", + encoding: "utf16le", + }, + (err, records) => { + if (!err) records.should.eql([["x", "x"]]); + next(err); + }, + ); + }); + + it("with escape equals quote", function (next) { + parse( + Buffer.from('a,b,c\n1,"2 ""3"" 4",5', "utf16le"), + { + encoding: "utf16le", + }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["1", '2 "3" 4', "5"], + ]); + } + next(err); + }, + ); + }); + + it("null return buffer", function (next) { + parse( + Buffer.from("a,b\n1,2"), + { + encoding: null, + }, + (err, records) => { + if (!err) { + records.should.eql([ + [Buffer.from("a"), Buffer.from("b")], + [Buffer.from("1"), Buffer.from("2")], + ]); + } + next(err); + }, + ); + }); + }); + + describe("with BOM", function () { + it("utf16le auto detected", function (next) { + const parser = parse( + { bom: true, encoding: "utf16le" }, + (err, records) => { + records.should.eql([ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + next(); + }, + ); + parser.write(Buffer.from("\ufeffa,b,c\n", "utf16le")); + parser.write(Buffer.from("d,e,f", "utf16le")); + parser.end(); + }); + + it("utf16le auto detected with quote", function (next) { + const parser = parse({ bom: true }, (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + } + next(err); + }); + parser.write(Buffer.from('\ufeffa,"b",c\n', "utf16le")); + parser.write(Buffer.from('d,"e",f', "utf16le")); + parser.end(); + }); + + it("utf16le auto detected with delimiter", function (next) { + const parser = parse({ bom: true, delimiter: "ф" }, (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + } + next(err); + }); + parser.write(Buffer.from("\ufeffaфbфc\n", "utf16le")); + parser.write(Buffer.from("dфeфf", "utf16le")); + parser.end(); + }); + + it("utf16le auto detected with escape", function (next) { + const parser = parse({ bom: true, escape: "ф" }, (err, records) => { + if (!err) { + records.should.eql([ + ["a", '"b', "c"], + ["d", '"e', "f"], + ]); + } + next(err); + }); + parser.write(Buffer.from('\ufeffa,"ф"b",c\n', "utf16le")); + parser.write(Buffer.from('d,"ф"e",f', "utf16le")); + parser.end(); + }); + + it("utf16le auto detected with record_delimiter", function (next) { + const parser = parse( + { bom: true, record_delimiter: "ф" }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + } + next(err); + }, + ); + parser.write(Buffer.from("\ufeffa,b,cф", "utf16le")); + parser.write(Buffer.from("d,e,f", "utf16le")); + parser.end(); + }); + }); +}); diff --git a/packages/csv-parse/test/option.escape.js b/packages/csv-parse/test/option.escape.js index f61af218..8bafea9d 100644 --- a/packages/csv-parse/test/option.escape.js +++ b/packages/csv-parse/test/option.escape.js @@ -1,27 +1,8 @@ import "should"; -import dedent from "dedent"; import { parse } from "../lib/index.js"; describe("Option `escape`", function () { describe("normalisation, coercion & validation", function () { - it("default", function () { - parse().options.escape.should.eql(Buffer.from('"')); - parse({ escape: undefined }).options.escape.should.eql(Buffer.from('"')); - parse({ escape: true }).options.escape.should.eql(Buffer.from('"')); - }); - - it("custom", function () { - parse({ escape: "\\" }).options.escape.should.eql(Buffer.from("\\")); - parse({ escape: Buffer.from("\\") }).options.escape.should.eql( - Buffer.from("\\"), - ); - }); - - it("disabled", function () { - (parse({ escape: null }).options.escape === null).should.be.true(); - (parse({ escape: false }).options.escape === null).should.be.true(); - }); - it("invalid", function () { (() => { parse({ escape: 1 }); @@ -29,183 +10,5 @@ describe("Option `escape`", function () { "Invalid Option: escape must be a buffer, a string or a boolean, got 1", ); }); - - it("is compatible with buffer size", function (next) { - const parser = parse({ escape: "::::::" }, (err, records) => { - if (!err) { - records.should.eql([ - ["1", '2"2', "3"], - ["4", "5", '6"'], - ["b", "c", "d"], - ]); - } - next(err); - }); - for (const c of dedent` - 1,"2::::::"2",3 - 4,5,"6::::::"" - b,c,d - `) { - parser.write(c); - } - parser.end(); - }); - }); - - describe("disabled", function () { - it("when null", function (next) { - parse( - "a\"b\n'1\"2'", - { - escape: null, - quote: "'", - }, - (err, records) => { - if (err) return next(err); - records.should.eql([['a"b'], ['1"2']]); - next(); - }, - ); - }); - }); - - describe("same as quote", function () { - it("length is 1 char", function (next) { - parse( - 'aa,"b1""b2","c""d""e"\n"f""g",h,"i1""i2"', - { - escape: '"', - }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["aa", 'b1"b2', 'c"d"e'], - ['f"g', "h", 'i1"i2'], - ]); - next(); - }, - ); - }); - - it("length is multiple char", function (next) { - parse( - "aa,$$b1$$$$b2$$,$$c$$$$d$$$$e$$\n$$f$$$$g$$,h,$$i1$$$$i2$$", - { - escape: "$$", - quote: "$$", - }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["aa", "b1$$b2", "c$$d$$e"], - ["f$$g", "h", "i1$$i2"], - ]); - next(); - }, - ); - }); - }); - - describe("different than quote", function () { - it("apply to quote char", function (next) { - parse( - 'aa,"b1\\"b2","c\\"d\\"e"\n"f\\"g",h,"i1\\"i2"', - { - escape: "\\", - }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["aa", 'b1"b2', 'c"d"e'], - ['f"g', "h", 'i1"i2'], - ]); - next(); - }, - ); - }); - - it("apply to quote char with custom char", function (next) { - parse( - 'aa,"b1$$"b2","c$$"d$$"e"\n"f$$"g",h,"i1$$"i2"', - { - escape: "$$", - }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["aa", 'b1"b2', 'c"d"e'], - ['f"g', "h", 'i1"i2'], - ]); - next(); - }, - ); - }); - - it("apply to escape char with escape", function (next) { - parse( - 'aa,"b1\\\\b2","c\\\\d\\\\e"\n"f\\\\g",h,"i1\\\\i2"', - { - escape: "\\", - }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["aa", "b1\\b2", "c\\d\\e"], - ["f\\g", "h", "i1\\i2"], - ]); - next(); - }, - ); - }); - - it("does not apply outside quoted field", function (next) { - parse( - "aa,b1\\\\b2,c\\\\d\\\\e\nf\\\\g,h,i1\\\\i2", - { - escape: "\\", - }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["aa", "b1\\\\b2", "c\\\\d\\\\e"], - ["f\\\\g", "h", "i1\\\\i2"], - ]); - next(); - }, - ); - }); - - it("does not apply to delimiter", function (next) { - parse( - "aa\\,bb", - { - escape: "\\", - }, - (err, records) => { - if (err) return next(err); - records.should.eql([["aa\\", "bb"]]); - next(); - }, - ); - }); - - it("handle non continuous chunks", function (next) { - const records = []; - const parser = parse({ escape: "\\" }); - parser.on("readable", () => { - let d; - while ((d = parser.read())) { - records.push(d); - } - }); - parser.on("end", () => { - records.should.eql([['abc " def']]); - next(); - }); - for (const chr of '"abc \\" def"') { - parser.write(chr); - } - parser.end(); - }); }); }); diff --git a/packages/csv-parse/test/option.escape.ts b/packages/csv-parse/test/option.escape.ts new file mode 100644 index 00000000..989445ad --- /dev/null +++ b/packages/csv-parse/test/option.escape.ts @@ -0,0 +1,203 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `escape`", function () { + describe("normalisation, coercion & validation", function () { + it("default", function () { + parse().options.escape?.should.eql(Buffer.from('"')); + parse({ escape: undefined }).options.escape?.should.eql(Buffer.from('"')); + parse({ escape: true }).options.escape?.should.eql(Buffer.from('"')); + }); + + it("custom", function () { + parse({ escape: "\\" }).options.escape?.should.eql(Buffer.from("\\")); + parse({ escape: Buffer.from("\\") }).options.escape?.should.eql( + Buffer.from("\\"), + ); + }); + + it("disabled", function () { + (parse({ escape: null }).options.escape === null).should.be.true(); + (parse({ escape: false }).options.escape === null).should.be.true(); + }); + + it("is compatible with buffer size", function (next) { + const parser = parse({ escape: "::::::" }, (err, records) => { + if (!err) { + records.should.eql([ + ["1", '2"2', "3"], + ["4", "5", '6"'], + ["b", "c", "d"], + ]); + } + next(err); + }); + for (const c of dedent` + 1,"2::::::"2",3 + 4,5,"6::::::"" + b,c,d + `) { + parser.write(c); + } + parser.end(); + }); + }); + + describe("disabled", function () { + it("when null", function (next) { + parse( + "a\"b\n'1\"2'", + { + escape: null, + quote: "'", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([['a"b'], ['1"2']]); + next(); + }, + ); + }); + }); + + describe("same as quote", function () { + it("length is 1 char", function (next) { + parse( + 'aa,"b1""b2","c""d""e"\n"f""g",h,"i1""i2"', + { + escape: '"', + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["aa", 'b1"b2', 'c"d"e'], + ['f"g', "h", 'i1"i2'], + ]); + next(); + }, + ); + }); + + it("length is multiple char", function (next) { + parse( + "aa,$$b1$$$$b2$$,$$c$$$$d$$$$e$$\n$$f$$$$g$$,h,$$i1$$$$i2$$", + { + escape: "$$", + quote: "$$", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["aa", "b1$$b2", "c$$d$$e"], + ["f$$g", "h", "i1$$i2"], + ]); + next(); + }, + ); + }); + }); + + describe("different than quote", function () { + it("apply to quote char", function (next) { + parse( + 'aa,"b1\\"b2","c\\"d\\"e"\n"f\\"g",h,"i1\\"i2"', + { + escape: "\\", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["aa", 'b1"b2', 'c"d"e'], + ['f"g', "h", 'i1"i2'], + ]); + next(); + }, + ); + }); + + it("apply to quote char with custom char", function (next) { + parse( + 'aa,"b1$$"b2","c$$"d$$"e"\n"f$$"g",h,"i1$$"i2"', + { + escape: "$$", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["aa", 'b1"b2', 'c"d"e'], + ['f"g', "h", 'i1"i2'], + ]); + next(); + }, + ); + }); + + it("apply to escape char with escape", function (next) { + parse( + 'aa,"b1\\\\b2","c\\\\d\\\\e"\n"f\\\\g",h,"i1\\\\i2"', + { + escape: "\\", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["aa", "b1\\b2", "c\\d\\e"], + ["f\\g", "h", "i1\\i2"], + ]); + next(); + }, + ); + }); + + it("does not apply outside quoted field", function (next) { + parse( + "aa,b1\\\\b2,c\\\\d\\\\e\nf\\\\g,h,i1\\\\i2", + { + escape: "\\", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["aa", "b1\\\\b2", "c\\\\d\\\\e"], + ["f\\\\g", "h", "i1\\\\i2"], + ]); + next(); + }, + ); + }); + + it("does not apply to delimiter", function (next) { + parse( + "aa\\,bb", + { + escape: "\\", + }, + (err, records) => { + if (err) return next(err); + records.should.eql([["aa\\", "bb"]]); + next(); + }, + ); + }); + + it("handle non continuous chunks", function (next) { + const records: string[] = []; + const parser = parse({ escape: "\\" }); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([['abc " def']]); + next(); + }); + for (const chr of '"abc \\" def"') { + parser.write(chr); + } + parser.end(); + }); + }); +}); diff --git a/packages/csv-parse/test/option.from.js b/packages/csv-parse/test/option.from.js index c10ef7bf..e1c68082 100644 --- a/packages/csv-parse/test/option.from.js +++ b/packages/csv-parse/test/option.from.js @@ -1,97 +1,13 @@ import "should"; -import dedent from "dedent"; import { parse } from "../lib/index.js"; describe("Option `from`", function () { it("validation", function () { - parse("", { from: 10 }, () => {}); - parse("", { from: "10" }, () => {}); - (() => { - parse("", { from: -1 }, () => {}); - }).should.throw("Invalid Option: from must be a positive integer, got -1"); - (() => { - parse("", { from: "-1" }, () => {}); - }).should.throw( - 'Invalid Option: from must be a positive integer, got "-1"', - ); (() => { parse("", { from: true }, () => {}); }).should.throw("Invalid Option: from must be an integer, got true"); (() => { parse("", { from: false }, () => {}); }).should.throw("Invalid Option: from must be an integer, got false"); - (() => { - parse("", { from: "oh no" }, () => {}); - }).should.throw('Invalid Option: from must be an integer, got "oh no"'); - }); - - it("start at defined position", function (next) { - parse( - dedent` - 1,2,3 - 4,5,6 - 7,8,9 - `, - { from: 3 }, - (err, records) => { - if (!err) { - records.should.eql([["7", "8", "9"]]); - } - next(err); - }, - ); - }); - - it("dont count headers", function (next) { - parse( - dedent` - a,b,c - 1,2,3 - 4,5,6 - 7,8,9 - `, - { columns: true, from: 3 }, - (err, records) => { - if (!err) { - records.should.eql([{ a: "7", b: "8", c: "9" }]); - } - next(err); - }, - ); - }); - - it("not influenced by lines", function (next) { - parse( - dedent` - 1,2," - 3" - 4,5," - 6" - 7,8," - 9" - `, - { from: 3 }, - (err, records) => { - if (!err) { - records.should.eql([["7", "8", "\n9"]]); - } - next(err); - }, - ); - }); - - it("not influenced by record delimiter", function (next) { - parse( - dedent` - 1,2,3:4,5,6:7,8,9 - `, - { from: 3, record_delimiter: ":" }, - (err, records) => { - if (!err) { - records.should.eql([["7", "8", "9"]]); - } - next(err); - }, - ); }); }); diff --git a/packages/csv-parse/test/option.from.ts b/packages/csv-parse/test/option.from.ts new file mode 100644 index 00000000..9e79542c --- /dev/null +++ b/packages/csv-parse/test/option.from.ts @@ -0,0 +1,91 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `from`", function () { + it("validation", function () { + parse("", { from: 10 }, () => {}); + parse("", { from: "10" }, () => {}); + (() => { + parse("", { from: -1 }, () => {}); + }).should.throw("Invalid Option: from must be a positive integer, got -1"); + (() => { + parse("", { from: "-1" }, () => {}); + }).should.throw( + 'Invalid Option: from must be a positive integer, got "-1"', + ); + (() => { + parse("", { from: "oh no" }, () => {}); + }).should.throw('Invalid Option: from must be an integer, got "oh no"'); + }); + + it("start at defined position", function (next) { + parse( + dedent` + 1,2,3 + 4,5,6 + 7,8,9 + `, + { from: 3 }, + (err, records) => { + if (!err) { + records.should.eql([["7", "8", "9"]]); + } + next(err); + }, + ); + }); + + it("dont count headers", function (next) { + parse( + dedent` + a,b,c + 1,2,3 + 4,5,6 + 7,8,9 + `, + { columns: true, from: 3 }, + (err, records) => { + if (!err) { + records.should.eql([{ a: "7", b: "8", c: "9" }]); + } + next(err); + }, + ); + }); + + it("not influenced by lines", function (next) { + parse( + dedent` + 1,2," + 3" + 4,5," + 6" + 7,8," + 9" + `, + { from: 3 }, + (err, records) => { + if (!err) { + records.should.eql([["7", "8", "\n9"]]); + } + next(err); + }, + ); + }); + + it("not influenced by record delimiter", function (next) { + parse( + dedent` + 1,2,3:4,5,6:7,8,9 + `, + { from: 3, record_delimiter: ":" }, + (err, records) => { + if (!err) { + records.should.eql([["7", "8", "9"]]); + } + next(err); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.from_line.js b/packages/csv-parse/test/option.from_line.js index ce32c0fe..ae282026 100644 --- a/packages/csv-parse/test/option.from_line.js +++ b/packages/csv-parse/test/option.from_line.js @@ -4,36 +4,12 @@ import { parse } from "../lib/index.js"; describe("Option `from_line`", function () { it("validation", function () { - parse("", { from_line: 10 }, () => {}); - parse("", { from_line: "10" }, () => {}); - parse("", { from_line: null }, () => {}); - parse("", { from_line: undefined }, () => {}); - (() => { - parse("", { from_line: -1 }, () => {}); - }).should.throw( - "Invalid Option: from_line must be a positive integer greater than 0, got -1", - ); - (() => { - parse("", { from_line: 0 }, () => {}); - }).should.throw( - "Invalid Option: from_line must be a positive integer greater than 0, got 0", - ); - (() => { - parse("", { from_line: "0" }, () => {}); - }).should.throw( - 'Invalid Option: from_line must be a positive integer greater than 0, got "0"', - ); (() => { parse("", { from_line: true }, () => {}); }).should.throw("Invalid Option: from_line must be an integer, got true"); (() => { parse("", { from_line: false }, () => {}); }).should.throw("Invalid Option: from_line must be an integer, got false"); - (() => { - parse("", { from_line: "oh no" }, () => {}); - }).should.throw( - 'Invalid Option: from_line must be an integer, got "oh no"', - ); }); it("start at defined position", function (next) { diff --git a/packages/csv-parse/test/option.from_line.ts b/packages/csv-parse/test/option.from_line.ts new file mode 100644 index 00000000..d06b3471 --- /dev/null +++ b/packages/csv-parse/test/option.from_line.ts @@ -0,0 +1,187 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `from_line`", function () { + it("validation", function () { + parse("", { from_line: 10 }, () => {}); + parse("", { from_line: "10" }, () => {}); + parse("", { from_line: null }, () => {}); + parse("", { from_line: undefined }, () => {}); + (() => { + parse("", { from_line: -1 }, () => {}); + }).should.throw( + "Invalid Option: from_line must be a positive integer greater than 0, got -1", + ); + (() => { + parse("", { from_line: 0 }, () => {}); + }).should.throw( + "Invalid Option: from_line must be a positive integer greater than 0, got 0", + ); + (() => { + parse("", { from_line: "0" }, () => {}); + }).should.throw( + 'Invalid Option: from_line must be a positive integer greater than 0, got "0"', + ); + (() => { + parse("", { from_line: "oh no" }, () => {}); + }).should.throw( + 'Invalid Option: from_line must be an integer, got "oh no"', + ); + }); + + it("start at defined position", function (next) { + parse( + dedent` + 1,2,3 + 4,5,6 + 7,8,9 + `, + { from_line: 3 }, + (err, records) => { + if (!err) { + records.should.eql([["7", "8", "9"]]); + } + next(err); + }, + ); + }); + + it("handle lines with inconsistent number of fields", function (next) { + parse( + dedent` + a + 1,2,3 + `, + { from_line: 2 }, + (err, records) => { + if (!err) { + records.should.eql([["1", "2", "3"]]); + } + next(err); + }, + ); + }); + + it("records with quoted line at the begining of line", function (next) { + parse( + dedent`1,2," + + 3" + 4,5," + 6" + 7,8," + 9" + `, + { from_line: 4 }, + (err, records) => { + if (!err) { + records.should.eql([ + ["4", "5", "\n6"], + ["7", "8", "\n9"], + ]); + } + next(err); + }, + ); + }); + + it("records with quoted line in the middle of line", function (next) { + parse( + dedent` + 1,2," + + 3" + 4,5," + 6" + 7,8," + 9" + `, + { from_line: 2 }, + (err, records) => { + if (!err) { + records.should.eql([ + ["4", "5", "\n6"], + ["7", "8", "\n9"], + ]); + } + next(err); + }, + ); + }); + + it("not influenced by `record_delimiter` option", function (next) { + parse( + dedent` + a,b,c:1,2, + 3:d,e,f:4,5, + 6:g,h,i:7,8, + 9 + `, + { from_line: 3, record_delimiter: ":" }, + (err, records) => { + if (!err) { + records.should.eql([ + ["g", "h", "i"], + ["7", "8", "\n9"], + ]); + } + next(err); + }, + ); + }); + + it("no influenced by skip_empty_lines option", function (next) { + parse( + dedent` + a,b,c + + 1,2,3 + + 4,5,6 + + 7,8,9 + `, + { from_line: 5, skip_empty_lines: true }, + (err, records) => { + if (!err) { + records.should.eql([ + ["4", "5", "6"], + ["7", "8", "9"], + ]); + } + next(err); + }, + ); + }); + + it("handle multiple bytes record delimiters", function (next) { + parse(`a,b\r\nc,d\r\ne,f`, { from_line: 2 }, (err, records) => { + if (!err) { + records.should.eql([ + ["c", "d"], + ["e", "f"], + ]); + } + next(err); + }); + }); + + it("honors header", function (next) { + parse( + dedent` + x,y,z + x,y,z + a,b,c + 4,5,6 + `, + { from_line: 3, columns: true }, + (err, records) => { + if (!err) { + records.should.eql([{ a: "4", b: "5", c: "6" }]); + } + next(err); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.ignore_last_delimiters.js b/packages/csv-parse/test/option.ignore_last_delimiters.js index 2d3b3b4a..31fddd1f 100644 --- a/packages/csv-parse/test/option.ignore_last_delimiters.js +++ b/packages/csv-parse/test/option.ignore_last_delimiters.js @@ -1,33 +1,8 @@ import "should"; -import dedent from "dedent"; import { parse } from "../lib/index.js"; describe("Option `ignore_last_delimiters`", function () { describe("validation & normalization", function () { - it("default to `false`", function () { - parse().options.ignore_last_delimiters.should.eql(false); - }); - - it("boolean", function () { - parse({ - ignore_last_delimiters: true, - columns: true, - }).options.ignore_last_delimiters.should.eql(true); - parse({ - ignore_last_delimiters: false, - columns: true, - }).options.ignore_last_delimiters.should.eql(false); - }); - - it("integer", function () { - parse({ - ignore_last_delimiters: 1, - }).options.ignore_last_delimiters.should.eql(1); - parse({ - ignore_last_delimiters: 0, - }).options.ignore_last_delimiters.should.eql(false); - }); - it("throw error with invalid type", function () { (() => { parse({ ignore_last_delimiters: "invalid" }); @@ -40,58 +15,5 @@ describe("Option `ignore_last_delimiters`", function () { ].join(" "), }); }); - - it("requires columns", function () { - (() => { - parse({ ignore_last_delimiters: true }); - }).should.throw({ - code: "CSV_IGNORE_LAST_DELIMITERS_REQUIRES_COLUMNS", - message: [ - "The option `ignore_last_delimiters`", - "requires the activation of the `columns` option", - ].join(" "), - }); - }); - }); - - describe("usage", function () { - it("if true, get field number from columns", function (next) { - parse( - dedent` - a,b,c - 1,2,3,4,5 - 11,22,33,44 - `, - { ignore_last_delimiters: true, columns: true }, - (err, records) => { - if (!err) { - records.should.eql([ - { a: "1", b: "2", c: "3,4,5" }, - { a: "11", b: "22", c: "33,44" }, - ]); - } - next(err); - }, - ); - }); - - it("if number, no need for columns", function (next) { - parse( - dedent` - 1,2,3,4,5 - 11,22,33,44 - `, - { ignore_last_delimiters: 3 }, - (err, records) => { - if (!err) { - records.should.eql([ - ["1", "2", "3,4,5"], - ["11", "22", "33,44"], - ]); - } - next(err); - }, - ); - }); }); }); diff --git a/packages/csv-parse/test/option.ignore_last_delimiters.ts b/packages/csv-parse/test/option.ignore_last_delimiters.ts new file mode 100644 index 00000000..7dae52cf --- /dev/null +++ b/packages/csv-parse/test/option.ignore_last_delimiters.ts @@ -0,0 +1,84 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `ignore_last_delimiters`", function () { + describe("validation & normalization", function () { + it("default to `false`", function () { + parse().options.ignore_last_delimiters.should.eql(false); + }); + + it("boolean", function () { + parse({ + ignore_last_delimiters: true, + columns: true, + }).options.ignore_last_delimiters.should.eql(true); + parse({ + ignore_last_delimiters: false, + columns: true, + }).options.ignore_last_delimiters.should.eql(false); + }); + + it("integer", function () { + parse({ + ignore_last_delimiters: 1, + }).options.ignore_last_delimiters.should.eql(1); + parse({ + ignore_last_delimiters: 0, + }).options.ignore_last_delimiters.should.eql(false); + }); + + it("requires columns", function () { + (() => { + parse({ ignore_last_delimiters: true }); + }).should.throw({ + code: "CSV_IGNORE_LAST_DELIMITERS_REQUIRES_COLUMNS", + message: [ + "The option `ignore_last_delimiters`", + "requires the activation of the `columns` option", + ].join(" "), + }); + }); + }); + + describe("usage", function () { + it("if true, get field number from columns", function (next) { + parse( + dedent` + a,b,c + 1,2,3,4,5 + 11,22,33,44 + `, + { ignore_last_delimiters: true, columns: true }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "1", b: "2", c: "3,4,5" }, + { a: "11", b: "22", c: "33,44" }, + ]); + } + next(err); + }, + ); + }); + + it("if number, no need for columns", function (next) { + parse( + dedent` + 1,2,3,4,5 + 11,22,33,44 + `, + { ignore_last_delimiters: 3 }, + (err, records) => { + if (!err) { + records.should.eql([ + ["1", "2", "3,4,5"], + ["11", "22", "33,44"], + ]); + } + next(err); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/option.info.js b/packages/csv-parse/test/option.info.js index 30a80d9c..9ff34615 100644 --- a/packages/csv-parse/test/option.info.js +++ b/packages/csv-parse/test/option.info.js @@ -1,5 +1,3 @@ -import should from "should"; -import dedent from "dedent"; import { parse } from "../lib/index.js"; describe("Option `info`", function () { @@ -10,145 +8,4 @@ describe("Option `info`", function () { }).should.throw('Invalid Option: info must be true, got "ok"'); }); }); - - describe("true", function () { - it("return info and records", function (next) { - parse( - dedent` - a,b,c - d,e,f - g,h,i - `, - { info: true }, - (err, records) => { - records.map(({ record, info }) => { - should(record).be.an.Array(); - should(info).be.an.Object(); - }); - next(err); - }, - ); - }); - - it("info properties", function (next) { - parse(`a,b,c`, { info: true }, (err, records) => { - const { info } = records[0]; - Object.keys(info) - .sort() - .should.eql([ - "bytes", - "columns", - "comment_lines", - "empty_lines", - "error", - "header", - "index", - "invalid_field_length", - "lines", - "raw", - "records", - ]); - next(err); - }); - }); - - it("validate the `lines` and `bytes` properties", function (next) { - parse( - dedent` - a,b,c - d,e,f - g,h,i - `, - { info: true }, - (err, records) => { - if (!err) { - records - .map(({ info }) => [info.lines, info.bytes]) - .should.eql([ - [1, 6], - [2, 12], - [3, 17], - ]); - } - next(err); - }, - ); - }); - - it("with skip_empty_lines", function (next) { - parse( - "\n" + - dedent` - a,b,c - - d,e,f - - g,h,i - `, - { info: true, skip_empty_lines: true }, - (err, records) => { - if (!err) { - records - .map(({ info }) => [info.lines, info.bytes]) - .should.eql([ - [2, 7], - [4, 14], - [6, 20], - ]); - } - next(err); - }, - ); - }); - - it("with comment", function (next) { - parse( - dedent` - # line 1 - a,b,c - # line 2 - d,e,f - # line 3 - g,h,i - `, - { info: true, comment: "#" }, - (err, records) => { - if (!err) { - records - .map(({ info }) => [info.lines, info.bytes]) - .should.eql([ - [2, 15], - [4, 30], - [6, 44], - ]); - } - next(err); - }, - ); - }); - - it("with multiline records", function (next) { - parse( - dedent` - a,b,c - d,"e - ",f - g,h,i - `, - { info: true }, - (err, records) => { - if (!err) { - records - .map(({ info }) => [info.lines, info.bytes]) - .should.eql([ - [1, 6], - [3, 15], - [4, 20], - ]); - } - next(err); - }, - ); - }); - }); }); diff --git a/packages/csv-parse/test/option.info.ts b/packages/csv-parse/test/option.info.ts new file mode 100644 index 00000000..541685c3 --- /dev/null +++ b/packages/csv-parse/test/option.info.ts @@ -0,0 +1,149 @@ +import should from "should"; +import dedent from "dedent"; +import { parse, Info } from "../lib/index.js"; + +describe("Option `info`", function () { + describe("true", function () { + it("return info and records", function (next) { + parse( + dedent` + a,b,c + d,e,f + g,h,i + `, + { info: true }, + (err, records) => { + // @todo: improve type definition, setting option.info as true shal + // be reflected in the return records array. + (records as unknown as { record: string[]; info: Info }[]).map( + ({ record, info }) => { + should(record).be.an.Array(); + should(info).be.an.Object(); + }, + ); + next(err); + }, + ); + }); + + it("info properties", function (next) { + parse(`a,b,c`, { info: true }, (err, records) => { + const { info } = records[0] as unknown as { + record: string[]; + info: Info; + }; + Object.keys(info) + .sort() + .should.eql([ + "bytes", + "columns", + "comment_lines", + "empty_lines", + "error", + "header", + "index", + "invalid_field_length", + "lines", + "raw", + "records", + ]); + next(err); + }); + }); + + it("validate the `lines` and `bytes` properties", function (next) { + parse( + dedent` + a,b,c + d,e,f + g,h,i + `, + { info: true }, + (err, records) => { + if (err) return next(err); + (records as unknown as { record: string[]; info: Info }[]) + .map(({ info }) => [info.lines, info.bytes]) + .should.eql([ + [1, 6], + [2, 12], + [3, 17], + ]); + next(); + }, + ); + }); + + it("with skip_empty_lines", function (next) { + parse( + "\n" + + dedent` + a,b,c + + d,e,f + + g,h,i + `, + { info: true, skip_empty_lines: true }, + (err, records) => { + if (err) next(err); + (records as unknown as { record: string[]; info: Info }[]) + .map(({ info }) => [info.lines, info.bytes]) + .should.eql([ + [2, 7], + [4, 14], + [6, 20], + ]); + next(); + }, + ); + }); + + it("with comment", function (next) { + parse( + dedent` + # line 1 + a,b,c + # line 2 + d,e,f + # line 3 + g,h,i + `, + { info: true, comment: "#" }, + (err, records) => { + if (err) next(err); + (records as unknown as { record: string[]; info: Info }[]) + .map(({ info }) => [info.lines, info.bytes]) + .should.eql([ + [2, 15], + [4, 30], + [6, 44], + ]); + next(); + }, + ); + }); + + it("with multiline records", function (next) { + parse( + dedent` + a,b,c + d,"e + ",f + g,h,i + `, + { info: true }, + (err, records) => { + if (err) return next(err); + (records as unknown as { record: string[]; info: Info }[]) + .map(({ info }) => [info.lines, info.bytes]) + .should.eql([ + [1, 6], + [3, 15], + [4, 20], + ]); + next(); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/option.ltrim.js b/packages/csv-parse/test/option.ltrim.js index 7b9775f3..57f39168 100644 --- a/packages/csv-parse/test/option.ltrim.js +++ b/packages/csv-parse/test/option.ltrim.js @@ -1,14 +1,8 @@ import "should"; -import dedent from "dedent"; import { parse } from "../lib/index.js"; -import { assert_error } from "./api.assert_error.js"; describe("Option `ltrim`", function () { it("validation", function () { - parse("", { ltrim: true }, () => {}); - parse("", { ltrim: false }, () => {}); - parse("", { ltrim: null }, () => {}); - parse("", { ltrim: undefined }, () => {}); (() => { parse("", { ltrim: 1 }, () => {}); }).should.throw("Invalid Option: ltrim must be a boolean, got 1"); @@ -16,123 +10,4 @@ describe("Option `ltrim`", function () { parse("", { ltrim: "true" }, () => {}); }).should.throw('Invalid Option: ltrim must be a boolean, got "true"'); }); - - it("plain text", function (next) { - parse( - ` a b, c d\n e f, g h`, - { quote: "'", escape: "'", trim: true }, - (err, records) => { - if (!err) { - records.should.eql([ - ["a b", "c d"], - ["e f", "g h"], - ]); - } - next(err); - }, - ); - }); - - it("before quote", function (next) { - const data = ` 'a', 'b'\n 'c', 'd'`; - const parser = parse( - { quote: "'", escape: "'", trim: true }, - (err, records) => { - if (!err) { - records.should.eql([ - ["a", "b"], - ["c", "d"], - ]); - } - next(err); - }, - ); - for (const chr of data) { - parser.write(chr); - } - parser.end(); - }); - - it("quote followed by escape", function (next) { - // 1st line: with start of file - // 2nd line: with field delimiter - // 3rd line: with record delimiter - parse( - dedent` - '''a','''b' - '''c', '''d' - '''e','''f' - `, - { quote: "'", escape: "'", trim: true }, - (err, records) => { - if (!err) { - records.should.eql([ - ["'a", "'b"], - ["'c", "'d"], - ["'e", "'f"], - ]); - } - next(err); - }, - ); - }); - - it("with whitespaces around quotes", function (next) { - const data = ` " a b", " c d"\n " e f", " g h"`; - const parser = parse({ ltrim: true }, (err, records) => { - if (!err) { - records.should.eql([ - [" a b", " c d"], - [" e f", " g h"], - ]); - } - next(err); - }); - for (const chr of data) { - parser.write(chr); - } - parser.end(); - }); - - it("with char after whitespaces", function (next) { - const data = ` x " a b",x " c d"\nx " e f", x " g h"`; - const parser = parse({ ltrim: true }, (err) => { - assert_error(err, { - message: - 'Invalid Opening Quote: a quote is found on field 0 at line 1, value is "x "', - code: "INVALID_OPENING_QUOTE", - field: "x ", - }); - next(); - }); - for (const chr of data) { - parser.write(chr); - } - parser.end(); - }); - - it("should work on last field", function (next) { - const records = []; - const parser = parse({ ltrim: true }); - parser.on("readable", () => { - let d; - while ((d = parser.read())) { - records.push(d); - } - }); - parser.on("end", () => { - records.should.eql([ - ["FIELD_1", "FIELD_2"], - ["20322051544", "a"], - ["28392898392", " "], - ]); - next(); - }); - parser.write(dedent` - FIELD_1, FIELD_2 - 20322051544, a - 28392898392, " " - `); - parser.end(); - }); }); diff --git a/packages/csv-parse/test/option.ltrim.ts b/packages/csv-parse/test/option.ltrim.ts new file mode 100644 index 00000000..7e404b28 --- /dev/null +++ b/packages/csv-parse/test/option.ltrim.ts @@ -0,0 +1,133 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `ltrim`", function () { + it("validation", function () { + parse("", { ltrim: true }, () => {}); + parse("", { ltrim: false }, () => {}); + parse("", { ltrim: null }, () => {}); + parse("", { ltrim: undefined }, () => {}); + }); + + it("plain text", function (next) { + parse( + ` a b, c d\n e f, g h`, + { quote: "'", escape: "'", trim: true }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a b", "c d"], + ["e f", "g h"], + ]); + } + next(err); + }, + ); + }); + + it("before quote", function (next) { + const data = ` 'a', 'b'\n 'c', 'd'`; + const parser = parse( + { quote: "'", escape: "'", trim: true }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b"], + ["c", "d"], + ]); + } + next(err); + }, + ); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); + + it("quote followed by escape", function (next) { + // 1st line: with start of file + // 2nd line: with field delimiter + // 3rd line: with record delimiter + parse( + dedent` + '''a','''b' + '''c', '''d' + '''e','''f' + `, + { quote: "'", escape: "'", trim: true }, + (err, records) => { + if (!err) { + records.should.eql([ + ["'a", "'b"], + ["'c", "'d"], + ["'e", "'f"], + ]); + } + next(err); + }, + ); + }); + + it("with whitespaces around quotes", function (next) { + const data = ` " a b", " c d"\n " e f", " g h"`; + const parser = parse({ ltrim: true }, (err, records) => { + if (!err) { + records.should.eql([ + [" a b", " c d"], + [" e f", " g h"], + ]); + } + next(err); + }); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); + + it("with char after whitespaces", function (next) { + const data = ` x " a b",x " c d"\nx " e f", x " g h"`; + const parser = parse({ ltrim: true }, (err) => { + if (!err) return Error("Invalid assertion"); + assert_error(err, { + message: + 'Invalid Opening Quote: a quote is found on field 0 at line 1, value is "x "', + code: "INVALID_OPENING_QUOTE", + field: "x ", + }); + next(); + }); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); + + it("should work on last field", function (next) { + const records: string[] = []; + const parser = parse({ ltrim: true }); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([ + ["FIELD_1", "FIELD_2"], + ["20322051544", "a"], + ["28392898392", " "], + ]); + next(); + }); + parser.write(dedent` + FIELD_1, FIELD_2 + 20322051544, a + 28392898392, " " + `); + parser.end(); + }); +}); diff --git a/packages/csv-parse/test/option.max_record_size.js b/packages/csv-parse/test/option.max_record_size.js index 648f4837..cf3e3e16 100644 --- a/packages/csv-parse/test/option.max_record_size.js +++ b/packages/csv-parse/test/option.max_record_size.js @@ -1,54 +1,12 @@ import "should"; -import dedent from "dedent"; import { parse } from "../lib/index.js"; -import { assert_error } from "./api.assert_error.js"; describe("Option `max_record_size`", function () { it("validation", function () { - parse("", { max_record_size: 10 }, () => {}); - parse("", { max_record_size: "10" }, () => {}); - (() => { - parse("", { max_record_size: -1 }, () => {}); - }).should.throw( - "Invalid Option: max_record_size must be a positive integer, got -1", - ); (() => { parse("", { max_record_size: true }, () => {}); }).should.throw( "Invalid Option: max_record_size must be a positive integer, got true", ); - (() => { - parse("", { max_record_size: "oh no" }, () => {}); - }).should.throw( - 'Invalid Option: max_record_size must be a positive integer, got "oh no"', - ); - }); - - it("field exceed limit", function (next) { - parse( - dedent` - 12,34,56 - ab,cd,ef - hi,xxxxxxxxxxxxxxx,jk - lm,no,pq - `, - { max_record_size: 10 }, - (err) => { - assert_error(err, { - message: - "Max Record Size: record exceed the maximum number of tolerated bytes of 10 at line 3", - code: "CSV_MAX_RECORD_SIZE", - column: 1, - empty_lines: 0, - header: false, - index: 1, - invalid_field_length: 0, - quoting: false, - lines: 3, - records: 2, - }); - next(); - }, - ); }); }); diff --git a/packages/csv-parse/test/option.max_record_size.ts b/packages/csv-parse/test/option.max_record_size.ts new file mode 100644 index 00000000..2ce6d401 --- /dev/null +++ b/packages/csv-parse/test/option.max_record_size.ts @@ -0,0 +1,50 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `max_record_size`", function () { + it("validation", function () { + parse("", { max_record_size: 10 }, () => {}); + parse("", { max_record_size: "10" }, () => {}); + (() => { + parse("", { max_record_size: -1 }, () => {}); + }).should.throw( + "Invalid Option: max_record_size must be a positive integer, got -1", + ); + (() => { + parse("", { max_record_size: "oh no" }, () => {}); + }).should.throw( + 'Invalid Option: max_record_size must be a positive integer, got "oh no"', + ); + }); + + it("field exceed limit", function (next) { + parse( + dedent` + 12,34,56 + ab,cd,ef + hi,xxxxxxxxxxxxxxx,jk + lm,no,pq + `, + { max_record_size: 10 }, + (err) => { + if (!err) return Error("Invalid assertion"); + assert_error(err, { + message: + "Max Record Size: record exceed the maximum number of tolerated bytes of 10 at line 3", + code: "CSV_MAX_RECORD_SIZE", + column: 1, + empty_lines: 0, + header: false, + index: 1, + invalid_field_length: 0, + quoting: false, + lines: 3, + records: 2, + }); + next(); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.objname.js b/packages/csv-parse/test/option.objname.js index 688bb9d8..5329dbdd 100644 --- a/packages/csv-parse/test/option.objname.js +++ b/packages/csv-parse/test/option.objname.js @@ -1,213 +1,14 @@ import "should"; -import dedent from "dedent"; import { parse } from "../lib/index.js"; describe("Option `objname`", function () { describe("validation", function () { - it("basic", function () { - parse("", { objname: "sth", columns: true }, () => {}); - parse("", { objname: Buffer.from("sth"), columns: true }, () => {}); - parse("", { objname: 1 }, () => {}); - parse("", { objname: null }, () => {}); - parse("", { objname: undefined }, () => {}); - (() => { - parse("", { objname: "" }, () => {}); - }).should.throw("Invalid Option: objname must be a non empty string"); - (() => { - parse("", { objname: Buffer.from("") }, () => {}); - }).should.throw("Invalid Option: objname must be a non empty buffer"); + it("does not accept boolean", function () { (() => { parse("", { objname: true }, () => {}); }).should.throw( "Invalid Option: objname must be a string or a buffer, got true", ); }); - - it("field require columns", function () { - (() => { - parse("", { objname: "field" }, () => {}); - }).should.throw( - [ - "Invalid Option:", - "objname field must be combined with columns", - "or be defined as an index", - ].join(" "), - ); - }); - - it("index incompatible with columns", function () { - (() => { - parse("", { objname: 1, columns: true }, () => {}); - }).should.throw( - [ - "Invalid Option:", - "objname index cannot be combined with columns", - "or be defined as a field", - ].join(" "), - ); - }); - }); - - describe("map to a field", function () { - it("convert a buffer to a column name", function (next) { - parse( - `a,b,c`, - { objname: Buffer.from("h1"), columns: ["h1", "h2", "h3"] }, - (err, records) => { - if (!err) { - records.should.eql({ - a: { - h1: "a", - h2: "b", - h3: "c", - }, - }); - } - next(err); - }, - ); - }); - - it("should print object of objects with properties using value of given column from columns", function (next) { - parse( - dedent` - a,b,c - d,e,f - `, - { objname: "FIELD_1", columns: ["FIELD_1", "FIELD_2", "FIELD_3"] }, - (err, records) => { - if (err) return next(err); - records.should.eql({ - a: { - FIELD_1: "a", - FIELD_2: "b", - FIELD_3: "c", - }, - d: { - FIELD_1: "d", - FIELD_2: "e", - FIELD_3: "f", - }, - }); - next(err); - }, - ); - }); - - it("should print object of objects with properties using value of given column from header record", function (next) { - parse( - dedent` - FIELD_1,FIELD_2,FIELD_3 - a,b,c - d,e,f - `, - { objname: "FIELD_1", columns: true }, - (err, records) => { - if (err) return next(err); - records.should.eql({ - a: { - FIELD_1: "a", - FIELD_2: "b", - FIELD_3: "c", - }, - d: { - FIELD_1: "d", - FIELD_2: "e", - FIELD_3: "f", - }, - }); - next(); - }, - ); - }); - - it("combined with info", function (next) { - parse( - dedent` - FIELD_1,FIELD_2,FIELD_3 - a,b,c - d,e,f - `, - { objname: "FIELD_2", columns: true, info: true }, - (err, records) => { - if (err) return next(err); - records.should.match({ - b: { - record: { - FIELD_1: "a", - FIELD_2: "b", - FIELD_3: "c", - }, - info: { - bytes: 30, - lines: 2, - }, - }, - e: { - record: { - FIELD_1: "d", - FIELD_2: "e", - FIELD_3: "f", - }, - info: { - bytes: 35, - lines: 3, - }, - }, - }); - next(); - }, - ); - }); - }); - - describe("map to an index", function () { - it("get value associated with index", function (next) { - parse( - dedent` - a,b,c - d,e,f - `, - { objname: 1 }, - (err, records) => { - if (err) return next(err); - records.should.eql({ - b: ["a", "b", "c"], - e: ["d", "e", "f"], - }); - next(); - }, - ); - }); - - it("combined with info", function (next) { - parse( - dedent` - a,b,c - d,e,f - `, - { objname: 1, info: true }, - (err, records) => { - if (err) return next(err); - records.should.match({ - b: { - record: ["a", "b", "c"], - info: { - bytes: 6, - lines: 1, - }, - }, - e: { - record: ["d", "e", "f"], - info: { - bytes: 11, - lines: 2, - }, - }, - }); - next(); - }, - ); - }); }); }); diff --git a/packages/csv-parse/test/option.objname.ts b/packages/csv-parse/test/option.objname.ts new file mode 100644 index 00000000..cdaa7f26 --- /dev/null +++ b/packages/csv-parse/test/option.objname.ts @@ -0,0 +1,208 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `objname`", function () { + describe("validation", function () { + it("basic", function () { + parse("", { objname: "sth", columns: true }, () => {}); + parse("", { objname: Buffer.from("sth"), columns: true }, () => {}); + parse("", { objname: 1 }, () => {}); + parse("", { objname: null }, () => {}); + parse("", { objname: undefined }, () => {}); + (() => { + parse("", { objname: "" }, () => {}); + }).should.throw("Invalid Option: objname must be a non empty string"); + (() => { + parse("", { objname: Buffer.from("") }, () => {}); + }).should.throw("Invalid Option: objname must be a non empty buffer"); + }); + + it("field require columns", function () { + (() => { + parse("", { objname: "field" }, () => {}); + }).should.throw( + [ + "Invalid Option:", + "objname field must be combined with columns", + "or be defined as an index", + ].join(" "), + ); + }); + + it("index incompatible with columns", function () { + (() => { + parse("", { objname: 1, columns: true }, () => {}); + }).should.throw( + [ + "Invalid Option:", + "objname index cannot be combined with columns", + "or be defined as a field", + ].join(" "), + ); + }); + }); + + describe("map to a field", function () { + it("convert a buffer to a column name", function (next) { + parse( + `a,b,c`, + { objname: Buffer.from("h1"), columns: ["h1", "h2", "h3"] }, + (err, records) => { + if (!err) { + records.should.eql({ + a: { + h1: "a", + h2: "b", + h3: "c", + }, + }); + } + next(err); + }, + ); + }); + + it("should print object of objects with properties using value of given column from columns", function (next) { + parse( + dedent` + a,b,c + d,e,f + `, + { objname: "FIELD_1", columns: ["FIELD_1", "FIELD_2", "FIELD_3"] }, + (err, records) => { + if (err) return next(err); + records.should.eql({ + a: { + FIELD_1: "a", + FIELD_2: "b", + FIELD_3: "c", + }, + d: { + FIELD_1: "d", + FIELD_2: "e", + FIELD_3: "f", + }, + }); + next(err); + }, + ); + }); + + it("should print object of objects with properties using value of given column from header record", function (next) { + parse( + dedent` + FIELD_1,FIELD_2,FIELD_3 + a,b,c + d,e,f + `, + { objname: "FIELD_1", columns: true }, + (err, records) => { + if (err) return next(err); + records.should.eql({ + a: { + FIELD_1: "a", + FIELD_2: "b", + FIELD_3: "c", + }, + d: { + FIELD_1: "d", + FIELD_2: "e", + FIELD_3: "f", + }, + }); + next(); + }, + ); + }); + + it("combined with info", function (next) { + parse( + dedent` + FIELD_1,FIELD_2,FIELD_3 + a,b,c + d,e,f + `, + { objname: "FIELD_2", columns: true, info: true }, + (err, records) => { + if (err) return next(err); + records.should.match({ + b: { + record: { + FIELD_1: "a", + FIELD_2: "b", + FIELD_3: "c", + }, + info: { + bytes: 30, + lines: 2, + }, + }, + e: { + record: { + FIELD_1: "d", + FIELD_2: "e", + FIELD_3: "f", + }, + info: { + bytes: 35, + lines: 3, + }, + }, + }); + next(); + }, + ); + }); + }); + + describe("map to an index", function () { + it("get value associated with index", function (next) { + parse( + dedent` + a,b,c + d,e,f + `, + { objname: 1 }, + (err, records) => { + if (err) return next(err); + records.should.eql({ + b: ["a", "b", "c"], + e: ["d", "e", "f"], + }); + next(); + }, + ); + }); + + it("combined with info", function (next) { + parse( + dedent` + a,b,c + d,e,f + `, + { objname: 1, info: true }, + (err, records) => { + if (err) return next(err); + records.should.match({ + b: { + record: ["a", "b", "c"], + info: { + bytes: 6, + lines: 1, + }, + }, + e: { + record: ["d", "e", "f"], + info: { + bytes: 11, + lines: 2, + }, + }, + }); + next(); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/option.on_record.js b/packages/csv-parse/test/option.on_record.js index 0963179d..078ec665 100644 --- a/packages/csv-parse/test/option.on_record.js +++ b/packages/csv-parse/test/option.on_record.js @@ -1,4 +1,4 @@ -import should from "should"; +import "should"; import { parse } from "../lib/index.js"; describe("Option `on_record`", function () { @@ -10,203 +10,4 @@ describe("Option `on_record`", function () { code: "CSV_INVALID_OPTION_ON_RECORD", }); }); - - describe("usage", function () { - it("alter records", function (next) { - parse( - "a,b", - { - on_record: (record) => { - return [record[1], record[0]]; - }, - }, - (err, records) => { - if (!err) { - records.should.eql([["b", "a"]]); - } - next(err); - }, - ); - }); - - it("filter records", function (next) { - parse( - "a,b\nc,d\ne,f", - { - on_record: (record, { lines }) => { - if (lines === 2) return null; - else return record; - }, - }, - (err, records) => { - if (!err) { - records.should.eql([ - ["a", "b"], - ["e", "f"], - ]); - } - next(err); - }, - ); - }); - - it("errors with callback", function (next) { - parse( - "a,b\nc,d\ne,f", - { - on_record: (record, { lines }) => { - if (lines === 2) throw Error("Error thrown on line 2"); - else return record; - }, - }, - (err) => { - err.message.should.eql("Error thrown on line 2"); - next(); - }, - ); - }); - - it("errors with events", function (next) { - const parser = parse("a,a,a\nc,d\ne,f"); - parser.on("error", (err) => { - err.message.should.eql( - "Invalid Record Length: expect 3, got 2 on line 2", - ); - next(); - }); - parser.on("end", () => { - next(Error("Should not be called")); - }); - }); - - it("errors not handled by skip_records_with_error", function (next) { - parse( - "a,b\nc,d\ne,f", - { - on_record: (record, { lines }) => { - if (lines === 2) throw Error("Error thrown on line 2"); - else return record; - }, - skip_records_with_error: true, - }, - (err) => { - err.message.should.eql("Error thrown on line 2"); - next(); - }, - ); - }); - }); - - describe("context", function () { - it("properties", function (next) { - parse( - "a,b", - { - on_record: (record, context) => { - should(context.raw).be.undefined(); - return Object.keys(context).sort(); - }, - skip_records_with_error: true, - }, - (err, records) => { - records.should.eql([ - [ - "bytes", - "columns", - "comment_lines", - "empty_lines", - "error", - "header", - "index", - "invalid_field_length", - "lines", - "raw", - "records", - ], - ]); - next(); - }, - ); - }); - - it("properties with `columns: true` and `raw: true`", function (next) { - parse( - "a,b\n1,2\n3,4", - { - columns: true, - raw: true, - on_record: (record, context) => { - if (context.lines === 2) { - context.raw.should.eql("1,2\n"); - } else if (context.lines === 3) { - context.raw.should.eql("3,4"); - } - return Object.keys(context).sort(); - }, - skip_records_with_error: true, - }, - (err, records) => { - records - .shift() - .should.eql([ - "bytes", - "columns", - "comment_lines", - "empty_lines", - "error", - "header", - "index", - "invalid_field_length", - "lines", - "raw", - "records", - ]); - next(); - }, - ); - }); - - it("values", function (next) { - parse( - "a,b\nc,d", - { - on_record: (record, context) => { - return context; - }, - skip_records_with_error: true, - }, - (err, records) => { - records.should.eql([ - { - bytes: 4, - columns: false, - comment_lines: 0, - empty_lines: 0, - error: undefined, - header: false, - index: 2, - invalid_field_length: 0, - lines: 1, - raw: undefined, - records: 1, - }, - { - bytes: 7, - columns: false, - comment_lines: 0, - empty_lines: 0, - error: undefined, - header: false, - index: 2, - invalid_field_length: 0, - lines: 2, - raw: undefined, - records: 2, - }, - ]); - next(); - }, - ); - }); - }); }); diff --git a/packages/csv-parse/test/option.on_record.ts b/packages/csv-parse/test/option.on_record.ts new file mode 100644 index 00000000..7f3718b7 --- /dev/null +++ b/packages/csv-parse/test/option.on_record.ts @@ -0,0 +1,208 @@ +import should from "should"; +import { parse, CastingContext } from "../lib/index.js"; + +describe("Option `on_record`", function () { + describe("usage", function () { + it("alter records", function (next) { + parse( + "a,b", + { + on_record: (record) => { + return [record[1], record[0]]; + }, + }, + (err, records) => { + if (!err) { + records.should.eql([["b", "a"]]); + } + next(err); + }, + ); + }); + + it("filter records", function (next) { + parse( + "a,b\nc,d\ne,f", + { + on_record: (record, { lines }) => { + if (lines === 2) return null; + else return record; + }, + }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b"], + ["e", "f"], + ]); + } + next(err); + }, + ); + }); + + it("errors with callback", function (next) { + parse( + "a,b\nc,d\ne,f", + { + on_record: (record, { lines }) => { + if (lines === 2) throw Error("Error thrown on line 2"); + else return record; + }, + }, + (err) => { + if (!err) return next("Invalid assertion"); + err.message.should.eql("Error thrown on line 2"); + next(); + }, + ); + }); + + it("errors with events", function (next) { + const parser = parse("a,a,a\nc,d\ne,f"); + parser.on("error", (err) => { + err.message.should.eql( + "Invalid Record Length: expect 3, got 2 on line 2", + ); + next(); + }); + parser.on("end", () => { + next(Error("Should not be called")); + }); + }); + + it("errors not handled by skip_records_with_error", function (next) { + parse( + "a,b\nc,d\ne,f", + { + on_record: (record, { lines }) => { + if (lines === 2) throw Error("Error thrown on line 2"); + else return record; + }, + skip_records_with_error: true, + }, + (err) => { + if (!err) return next("Invalid assertion"); + err.message.should.eql("Error thrown on line 2"); + next(); + }, + ); + }); + }); + + describe("context", function () { + it("properties", function (next) { + parse( + "a,b", + { + on_record: (record, context) => { + should(context.raw).be.undefined(); + return Object.keys(context).sort(); + }, + skip_records_with_error: true, + }, + (err, records) => { + records.should.eql([ + [ + "bytes", + "columns", + "comment_lines", + "empty_lines", + "error", + "header", + "index", + "invalid_field_length", + "lines", + "raw", + "records", + ], + ]); + next(); + }, + ); + }); + + it("properties with `columns: true` and `raw: true`", function (next) { + parse( + "a,b\n1,2\n3,4", + { + columns: true, + raw: true, + on_record: (record, context) => { + if (context.lines === 2) { + context.raw?.should.eql("1,2\n"); + } else if (context.lines === 3) { + context.raw?.should.eql("3,4"); + } + return Object.keys(context).sort(); + }, + skip_records_with_error: true, + }, + (err, records) => { + if (err) return next(err); + (records as unknown[] as { record: string; raw: string }[]) + .shift() + ?.should.eql([ + "bytes", + "columns", + "comment_lines", + "empty_lines", + "error", + "header", + "index", + "invalid_field_length", + "lines", + "raw", + "records", + ]); + next(); + }, + ); + }); + + it("values", function (next) { + parse( + "a,b\n1,2\n3,4", + { + on_record: (record, context) => { + record; + return context; + }, + columns: true, // todo, required to satisfy TS type + skip_records_with_error: true, + }, + (err, records) => { + records.should.eql([ + { + bytes: 8, + columns: [{ name: "a" }, { name: "b" }], + comment_lines: 0, + empty_lines: 0, + error: undefined, + header: false, + index: 2, + invalid_field_length: 0, + lines: 2, + raw: undefined, + records: 1, + }, + { + bytes: 11, + columns: [{ name: "a" }, { name: "b" }], + comment_lines: 0, + empty_lines: 0, + error: undefined, + header: false, + index: 2, + invalid_field_length: 0, + lines: 3, + raw: undefined, + records: 2, + }, + ]); + next(); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/option.on_skip.js b/packages/csv-parse/test/option.on_skip.js index 8c0883b3..e30b58d2 100644 --- a/packages/csv-parse/test/option.on_skip.js +++ b/packages/csv-parse/test/option.on_skip.js @@ -1,70 +1,10 @@ import "should"; -import dedent from "dedent"; import { parse } from "../lib/index.js"; -import { assert_error } from "./api.assert_error.js"; describe("Option `on_skip`", function () { it("validation", function () { - parse("", { on_skip: () => {} }, () => {}); (() => { parse("", { on_skip: 1 }, () => {}); }).should.throw("Invalid Option: on_skip must be a function, got 1"); }); - - it("catch thrown error", function (next) { - parse( - dedent` - a,b,c,d - invalid - e,f,g,h - `, - { - bom: true, - skip_records_with_error: true, - on_skip: () => { - throw Error("Catchme"); - }, - }, - (err) => { - err.message.should.eql("Catchme"); - next(); - }, - ); - }); - - it('handle "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH" with bom (fix #411)', function (next) { - let errors = 0; - const parser = parse( - { - bom: true, - skip_records_with_error: true, - on_skip: (err) => { - assert_error(err, { - message: "Invalid Record Length: expect 4, got 3 on line 2", - code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", - record: ["1", "2", "3"], - }); - errors++; - }, - }, - (err, records) => { - if (!err) { - records.should.eql([ - ["a", "b", "c", "d"], - ["e", "f", "g", "h"], - ]); - } - errors.should.eql(1); - next(err); - }, - ); - parser.write( - dedent` - a,b,c,d - 1,2,3 - e,f,g,h - `, - ); - parser.end(); - }); }); diff --git a/packages/csv-parse/test/option.on_skip.ts b/packages/csv-parse/test/option.on_skip.ts new file mode 100644 index 00000000..42cb2335 --- /dev/null +++ b/packages/csv-parse/test/option.on_skip.ts @@ -0,0 +1,69 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `on_skip`", function () { + it("validation", function () { + parse("", { on_skip: () => {} }, () => {}); + }); + + it("catch thrown error", function (next) { + parse( + dedent` + a,b,c,d + invalid + e,f,g,h + `, + { + bom: true, + skip_records_with_error: true, + on_skip: () => { + throw Error("Catchme"); + }, + }, + (err) => { + if (!err) return next(new Error("Invalid assessment")); + err.message.should.eql("Catchme"); + next(); + }, + ); + }); + + it('handle "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH" with bom (fix #411)', function (next) { + let errors = 0; + const parser = parse( + { + bom: true, + skip_records_with_error: true, + on_skip: (err) => { + if (!err) throw Error("Invalid assessment"); + assert_error(err, { + message: "Invalid Record Length: expect 4, got 3 on line 2", + code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", + record: ["1", "2", "3"], + }); + errors++; + }, + }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c", "d"], + ["e", "f", "g", "h"], + ]); + } + errors.should.eql(1); + next(err); + }, + ); + parser.write( + dedent` + a,b,c,d + 1,2,3 + e,f,g,h + `, + ); + parser.end(); + }); +}); diff --git a/packages/csv-parse/test/option.quote.js b/packages/csv-parse/test/option.quote.ts similarity index 95% rename from packages/csv-parse/test/option.quote.js rename to packages/csv-parse/test/option.quote.ts index 1b8dd1ff..0db458e2 100644 --- a/packages/csv-parse/test/option.quote.js +++ b/packages/csv-parse/test/option.quote.ts @@ -20,12 +20,12 @@ describe("Option `quote`", function () { it("default", function () { const parser = parse(); - parser.options.quote.should.eql(Buffer.from('"')); + parser.options.quote?.should.eql(Buffer.from('"')); }); it("normalize", function () { let parser = parse({ quote: true }); - parser.options.quote.should.eql(Buffer.from('"')); + parser.options.quote?.should.eql(Buffer.from('"')); parser = parse({ quote: false }); (parser.options.quote === null).should.be.true(); parser = parse({ quote: null }); @@ -244,6 +244,7 @@ describe("Option `quote`", function () { describe('error "Quoted field not terminated"', function () { it("when unclosed", function (next) { parse(`"",1974,8.8392926E7,"","`, (err) => { + if (!err) return next(Error("Invalid assessment")); assert_error(err, { message: "Quote Not Closed: the parsing is finished with an opening quote at line 1", @@ -257,6 +258,7 @@ describe("Option `quote`", function () { describe('error "Invalid Closing Quote"', function () { it("when followed by a character", function (next) { parse('""!', { quote: '"', escape: '"' }, (err) => { + if (!err) return next(Error("Invalid assessment")); assert_error(err, { message: 'Invalid Closing Quote: got "!" at line 1 instead of delimiter, record delimiter, trimable character (if activated) or comment', @@ -309,6 +311,7 @@ describe("Option `quote`", function () { "and",valid,line,follows... `, (err, records) => { + if (!err) return next(Error("Invalid assessment")); assert_error(err, { message: 'Invalid Opening Quote: a quote is found on field 3 at line 3, value is "invalid h"', @@ -330,6 +333,7 @@ describe("Option `quote`", function () { `, { columns: true }, (err, records) => { + if (!err) return next(Error("Invalid assessment")); assert_error(err, { message: 'Invalid Opening Quote: a quote is found on field "d" at line 3, value is "2"', diff --git a/packages/csv-parse/test/option.raw.js b/packages/csv-parse/test/option.raw.js index 3e83fd56..f64cddc2 100644 --- a/packages/csv-parse/test/option.raw.js +++ b/packages/csv-parse/test/option.raw.js @@ -1,12 +1,8 @@ import "should"; -import dedent from "dedent"; import { parse } from "../lib/index.js"; describe("Option `raw`", function () { it("validation", function () { - parse("", { raw: undefined }, () => {}); - parse("", { raw: null }, () => {}); - parse("", { raw: false }, () => {}); (() => parse("", { raw: "" }, () => {})).should.throw( 'Invalid Option: raw must be true, got ""', ); @@ -14,61 +10,4 @@ describe("Option `raw`", function () { "Invalid Option: raw must be true, got 2", ); }); - - it("includes escape chars", function (next) { - const str = dedent` - "hello""world",LOL - `; - parse(str, { raw: true, escape: '"' }, (err, records) => { - if (err) return next(err); - records[0].raw.should.eql(str); - records[0].record.should.eql(['hello"world', "LOL"]); - next(); - }); - }); - - it("includes line breaks", function (next) { - parse( - dedent` - hello - my - friend - `, - { raw: true, escape: '"' }, - (err, records) => { - if (err) return next(err); - records[1].raw.should.match(/\n$/); - next(); - }, - ); - }); - - it("has the inner line breaks", function (next) { - const str = dedent` - foo,"b - a - r" - `; - parse(str, { raw: true, escape: '"' }, (err, records) => { - if (err) return next(err); - records[0].raw.should.eql(str); - next(); - }); - }); - - it("preserve columns", function (next) { - parse( - dedent` - name,last name - Boudreau,Jonathan - `, - { raw: true, columns: ["FIELD_1", false] }, - (err, records) => { - if (err) return next(err); - records[0].raw.should.eql("name,last name\n"); - records[0].record.should.eql({ FIELD_1: "name" }); - next(); - }, - ); - }); }); diff --git a/packages/csv-parse/test/option.raw.ts b/packages/csv-parse/test/option.raw.ts new file mode 100644 index 00000000..a6fdccfc --- /dev/null +++ b/packages/csv-parse/test/option.raw.ts @@ -0,0 +1,78 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `raw`", function () { + it("validation", function () { + parse("", { raw: undefined }, () => {}); + parse("", { raw: null }, () => {}); + parse("", { raw: false }, () => {}); + }); + + it("includes escape chars", function (next) { + const str = dedent` + "hello""world",LOL + `; + parse(str, { raw: true, escape: '"' }, (err, records) => { + if (err) return next(err); + const record = records[0] as unknown as { record: string[]; raw: string }; + record.raw.should.eql(str); + record.record.should.eql(['hello"world', "LOL"]); + next(); + }); + }); + + it("includes line breaks", function (next) { + parse( + dedent` + hello + my + friend + `, + { raw: true, escape: '"' }, + (err, records) => { + if (err) return next(err); + const record = records[1] as unknown as { + record: string[]; + raw: string; + }; + record.raw.should.match(/\n$/); + next(); + }, + ); + }); + + it("has the inner line breaks", function (next) { + const str = dedent` + foo,"b + a + r" + `; + parse(str, { raw: true, escape: '"' }, (err, records) => { + if (err) return next(err); + const record = records[0] as unknown as { record: string[]; raw: string }; + record.raw.should.eql(str); + next(); + }); + }); + + it("preserve columns", function (next) { + parse( + dedent` + name,last name + Boudreau,Jonathan + `, + { raw: true, columns: ["FIELD_1", false] }, + (err, records) => { + if (err) return next(err); + const record = records[0] as unknown as { + record: string[]; + raw: string; + }; + record.raw.should.eql("name,last name\n"); + record.record.should.eql({ FIELD_1: "name" }); + next(); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.record_delimiter.js b/packages/csv-parse/test/option.record_delimiter.ts similarity index 90% rename from packages/csv-parse/test/option.record_delimiter.js rename to packages/csv-parse/test/option.record_delimiter.ts index f385b7a8..0910faad 100644 --- a/packages/csv-parse/test/option.record_delimiter.js +++ b/packages/csv-parse/test/option.record_delimiter.ts @@ -165,7 +165,7 @@ describe("Option `record_delimiter`", function () { }); it("handle chunks of multiple chars when record_delimiter is a string", function (next) { - const records = []; + const records: string[] = []; const parser = parse({ record_delimiter: "::" }); parser.on("readable", () => { let d; @@ -190,7 +190,7 @@ describe("Option `record_delimiter`", function () { }); it("handle chunks of multiple chars when record_delimiter is an array", function (next) { - const records = []; + const records: string[] = []; const parser = parse({ record_delimiter: ["::", "\r"] }); parser.on("readable", () => { let d; @@ -217,7 +217,7 @@ describe("Option `record_delimiter`", function () { }); it("handle chunks of multiple chars without quotes when record_delimiter is a string", function (next) { - const records = []; + const records: string[] = []; const parser = parse({ record_delimiter: "::" }); parser.on("readable", () => { let d; @@ -242,7 +242,7 @@ describe("Option `record_delimiter`", function () { }); it("handle chunks of multiple chars without quotes when record_delimiter is an array", function (next) { - const records = []; + const records: string[] = []; const parser = parse({ record_delimiter: ["::", "\n", "\r\n"] }); parser.on("readable", () => { let d; @@ -278,7 +278,7 @@ describe("Option `record_delimiter`", function () { }); it("handle chunks in autodiscovery", function (next) { - const records = []; + const records: string[] = []; const parser = parse(); parser.on("readable", () => { let d; @@ -303,7 +303,7 @@ describe("Option `record_delimiter`", function () { }); it("write aggressively", function (next) { - const records = []; + const records: string[] = []; const parser = parse(); parser.on("readable", () => { let d; @@ -333,7 +333,7 @@ describe("Option `record_delimiter`", function () { }); it("ensure autodiscovery support chunck between lines", function (next) { - const records = []; + const records: string[] = []; const parser = parse(); parser.on("readable", () => { let d; @@ -396,8 +396,9 @@ describe("Option `record_delimiter`", function () { } next(err); }); - for (const c of Buffer.from("a,b\r\n1,2", "utf8")) { - parser.write(Buffer.from([c])); + const buf = Buffer.from("a,b\r\n1,2", "utf8"); + for (let i = 0; i < buf.length; i++) { + parser.write(Buffer.from([buf[i]])); } parser.end(); }); @@ -412,8 +413,9 @@ describe("Option `record_delimiter`", function () { } next(err); }); - for (const c of Buffer.from("a,b\r1,2", "utf8")) { - parser.write(Buffer.from([c])); + const buf = Buffer.from("a,b\r1,2", "utf8"); + for (let i = 0; i < buf.length; i++) { + parser.write(Buffer.from([buf[i]])); } parser.end(); }); @@ -428,8 +430,9 @@ describe("Option `record_delimiter`", function () { } next(err); }); - for (const c of Buffer.from("a,b\n1,2", "utf8")) { - parser.write(Buffer.from([c])); + const buf = Buffer.from("a,b\n1,2", "utf8"); + for (let i = 0; i < buf.length; i++) { + parser.write(Buffer.from([buf[i]])); } parser.end(); }); @@ -444,11 +447,12 @@ describe("Option `record_delimiter`", function () { } next(err); }); - for (const c of Buffer.concat([ + const buf = Buffer.concat([ Buffer.from([239, 187, 191]), Buffer.from("a,b\r\n1,2", "utf8"), - ])) { - parser.write(Buffer.from([c])); + ]); + for (let i = 0; i < buf.length; i++) { + parser.write(Buffer.from([buf[i]])); } parser.end(); }); @@ -463,8 +467,9 @@ describe("Option `record_delimiter`", function () { } next(err); }); - for (const c of Buffer.from("a,b\r\n1,2", "utf16le")) { - parser.write(Buffer.from([c])); + const buf = Buffer.from("a,b\r\n1,2", "utf16le"); + for (let i = 0; i < buf.length; i++) { + parser.write(Buffer.from([buf[i]])); } parser.end(); }); @@ -479,8 +484,9 @@ describe("Option `record_delimiter`", function () { } next(err); }); - for (const c of Buffer.from("a,b\r1,2", "utf16le")) { - parser.write(Buffer.from([c])); + const buf = Buffer.from("a,b\r1,2", "utf16le"); + for (let i = 0; i < buf.length; i++) { + parser.write(Buffer.from([buf[i]])); } parser.end(); }); @@ -495,8 +501,9 @@ describe("Option `record_delimiter`", function () { } next(err); }); - for (const c of Buffer.from("a,b\n1,2", "utf16le")) { - parser.write(Buffer.from([c])); + const buf = Buffer.from("a,b\n1,2", "utf16le"); + for (let i = 0; i < buf.length; i++) { + parser.write(Buffer.from([buf[i]])); } parser.end(); }); @@ -511,11 +518,12 @@ describe("Option `record_delimiter`", function () { } next(err); }); - for (const c of Buffer.concat([ + const buf = Buffer.concat([ Buffer.from([255, 254]), Buffer.from("a,b\r\n1,2", "utf16le"), - ])) { - parser.write(Buffer.from([c])); + ]); + for (let i = 0; i < buf.length; i++) { + parser.write(Buffer.from([buf[i]])); } parser.end(); }); diff --git a/packages/csv-parse/test/option.relax_column_count.js b/packages/csv-parse/test/option.relax_column_count.js index 6119ac2c..e4f336b0 100644 --- a/packages/csv-parse/test/option.relax_column_count.js +++ b/packages/csv-parse/test/option.relax_column_count.js @@ -1,14 +1,8 @@ import "should"; -import dedent from "dedent"; import { parse } from "../lib/index.js"; -import { assert_error } from "./api.assert_error.js"; describe("Option `relax_column_count`", function () { it("validation", function () { - parse("", { relax_column_count: true }, () => {}); - parse("", { relax_column_count: false }, () => {}); - parse("", { relax_column_count: null }, () => {}); - parse("", { relax_column_count: undefined }, () => {}); (() => { parse("", { relax_column_count: 1 }, () => {}); }).should.throw( @@ -20,275 +14,4 @@ describe("Option `relax_column_count`", function () { 'Invalid Option: relax_column_count must be a boolean, got "oh no"', ); }); - - it("throw error by default", function (next) { - parse( - dedent` - 1,2,3 - 4,5 - `, - (err) => { - assert_error(err, { - code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", - message: "Invalid Record Length: expect 3, got 2 on line 2", - record: ["4", "5"], - }); - next(); - }, - ); - }); - - it("emit single error when column count is invalid on multiple lines", function (next) { - parse( - dedent` - 1,2 - 1 - 3,4 - 5,6,7 - `, - (err) => { - assert_error(err, { - code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", - message: "Invalid Record Length: expect 2, got 1 on line 2", - record: ["1"], - }); - next(); - }, - ); - }); - - it("dont throw error if true", function (next) { - parse( - dedent` - 1,2,3 - 4,5 - `, - { relax_column_count: true }, - (err, records) => { - if (!err) { - records.should.eql([ - ["1", "2", "3"], - ["4", "5"], - ]); - } - next(err); - }, - ); - }); - - it("with columns bigger than records", function (next) { - parse( - dedent` - 1,2,3 - 4,5 - `, - { columns: ["a", "b", "c", "d"], relax_column_count: true }, - (err, records) => { - if (!err) { - records.should.eql([ - { a: "1", b: "2", c: "3" }, - { a: "4", b: "5" }, - ]); - } - next(err); - }, - ); - }); - - it("with columns smaller than records", function (next) { - parse( - dedent` - 1,2,3,4 - 5,6,7 - `, - { columns: ["a", "b", "c"], relax_column_count: true }, - (err, records) => { - if (!err) { - records.should.eql([ - { a: "1", b: "2", c: "3" }, - { a: "5", b: "6", c: "7" }, - ]); - } - next(err); - }, - ); - }); - - it("with columns and from, doesnt break count and relying options like from", function (next) { - parse( - dedent` - 1,2,3 - 4,5 - 6,7,8 - 9,10 - `, - { relax_column_count: true, columns: ["a", "b", "c", "d"], from: 3 }, - (err, records) => { - if (!err) { - records.should.eql([ - { a: "6", b: "7", c: "8" }, - { a: "9", b: "10" }, - ]); - } - next(err); - }, - ); - }); - - describe("relax_column_count_more", function () { - it("when more", function (next) { - parse( - dedent` - 1,2,3 - a,b,c,d - `, - { relax_column_count_more: true }, - (err, records) => { - if (!err) { - records.should.eql([ - ["1", "2", "3"], - ["a", "b", "c", "d"], - ]); - } - next(err); - }, - ); - }); - - it("when less", function (next) { - parse( - dedent` - 1,2,3 - a,b - `, - { relax_column_count_more: true }, - (err) => { - assert_error(err, { - code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", - message: "Invalid Record Length: expect 3, got 2 on line 2", - record: ["a", "b"], - }); - next(); - }, - ); - }); - }); - - describe("relax_column_count_less", function () { - it("when less", function (next) { - parse( - dedent` - 1,2,3 - a,b - `, - { relax_column_count_less: true }, - (err, records) => { - if (!err) { - records.should.eql([ - ["1", "2", "3"], - ["a", "b"], - ]); - } - next(err); - }, - ); - }); - - it("when more", function (next) { - parse( - dedent` - 1,2,3 - a,b,c,d - `, - { relax_column_count_less: true }, - (err) => { - assert_error(err, { - code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", - message: "Invalid Record Length: expect 3, got 4 on line 2", - record: ["a", "b", "c", "d"], - }); - next(); - }, - ); - }); - }); - - describe("with on_record", function () { - it("and without columns", function (next) { - parse( - dedent` - 1,2 - in:va:lid - 3,4 - `, - { - relax_column_count: true, - raw: true, - on_record: ({ raw, record }, { error }) => { - if (error?.code === "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH") { - return raw.trim().split(":"); - } else { - return record; - } - }, - }, - (err, records) => { - records.should.eql([ - ["1", "2"], - ["in", "va", "lid"], - ["3", "4"], - ]); - next(); - }, - ); - }); - - it("and with columns", function (next) { - parse( - dedent` - 1,2 - in:va:lid - 3,4 - `, - { - columns: ["a", "b"], - relax_column_count: true, - raw: true, - on_record: ({ raw, record }, { error }) => { - if (error?.code === "CSV_RECORD_INCONSISTENT_COLUMNS") { - return raw.trim().split(":"); - } else { - return record; - } - }, - }, - (err, records) => { - records.should.eql([ - { a: "1", b: "2" }, - ["in", "va", "lid"], - { a: "3", b: "4" }, - ]); - next(); - }, - ); - }); - }); - - describe("with skip_records_with_error", function () { - it("dont skip records", function () { - parse( - dedent` - column_a - a,b - `, - { - skip_records_with_error: true, - relax_column_count: true, - }, - (err, records) => { - records.should.eql([["column_a"], ["a", "b"]]); - }, - ); - }); - }); }); diff --git a/packages/csv-parse/test/option.relax_column_count.ts b/packages/csv-parse/test/option.relax_column_count.ts new file mode 100644 index 00000000..a615444a --- /dev/null +++ b/packages/csv-parse/test/option.relax_column_count.ts @@ -0,0 +1,291 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `relax_column_count`", function () { + it("validation", function () { + parse("", { relax_column_count: true }, () => {}); + parse("", { relax_column_count: false }, () => {}); + parse("", { relax_column_count: null }, () => {}); + parse("", { relax_column_count: undefined }, () => {}); + }); + + it("throw error by default", function (next) { + parse( + dedent` + 1,2,3 + 4,5 + `, + (err) => { + if (!err) return next("Invalid assessment"); + assert_error(err, { + code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", + message: "Invalid Record Length: expect 3, got 2 on line 2", + record: ["4", "5"], + }); + next(); + }, + ); + }); + + it("emit single error when column count is invalid on multiple lines", function (next) { + parse( + dedent` + 1,2 + 1 + 3,4 + 5,6,7 + `, + (err) => { + if (!err) return next("Invalid assessment"); + assert_error(err, { + code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", + message: "Invalid Record Length: expect 2, got 1 on line 2", + record: ["1"], + }); + next(); + }, + ); + }); + + it("dont throw error if true", function (next) { + parse( + dedent` + 1,2,3 + 4,5 + `, + { relax_column_count: true }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["1", "2", "3"], + ["4", "5"], + ]); + next(); + }, + ); + }); + + it("with columns bigger than records", function (next) { + parse( + dedent` + 1,2,3 + 4,5 + `, + { columns: ["a", "b", "c", "d"], relax_column_count: true }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "1", b: "2", c: "3" }, + { a: "4", b: "5" }, + ]); + } + next(err); + }, + ); + }); + + it("with columns smaller than records", function (next) { + parse( + dedent` + 1,2,3,4 + 5,6,7 + `, + { columns: ["a", "b", "c"], relax_column_count: true }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "1", b: "2", c: "3" }, + { a: "5", b: "6", c: "7" }, + ]); + } + next(err); + }, + ); + }); + + it("with columns and from, doesnt break count and relying options like from", function (next) { + parse( + dedent` + 1,2,3 + 4,5 + 6,7,8 + 9,10 + `, + { relax_column_count: true, columns: ["a", "b", "c", "d"], from: 3 }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "6", b: "7", c: "8" }, + { a: "9", b: "10" }, + ]); + } + next(err); + }, + ); + }); + + describe("relax_column_count_more", function () { + it("when more", function (next) { + parse( + dedent` + 1,2,3 + a,b,c,d + `, + { relax_column_count_more: true }, + (err, records) => { + if (!err) { + records.should.eql([ + ["1", "2", "3"], + ["a", "b", "c", "d"], + ]); + } + next(err); + }, + ); + }); + + it("when less", function (next) { + parse( + dedent` + 1,2,3 + a,b + `, + { relax_column_count_more: true }, + (err) => { + if (!err) return next("Invalid assessment"); + assert_error(err, { + code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", + message: "Invalid Record Length: expect 3, got 2 on line 2", + record: ["a", "b"], + }); + next(); + }, + ); + }); + }); + + describe("relax_column_count_less", function () { + it("when less", function (next) { + parse( + dedent` + 1,2,3 + a,b + `, + { relax_column_count_less: true }, + (err, records) => { + if (!err) { + records.should.eql([ + ["1", "2", "3"], + ["a", "b"], + ]); + } + next(err); + }, + ); + }); + + it("when more", function (next) { + parse( + dedent` + 1,2,3 + a,b,c,d + `, + { relax_column_count_less: true }, + (err) => { + if (!err) return next("Invalid assessment"); + assert_error(err, { + code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", + message: "Invalid Record Length: expect 3, got 4 on line 2", + record: ["a", "b", "c", "d"], + }); + next(); + }, + ); + }); + }); + + describe("with on_record", function () { + it("and without columns", function (next) { + parse( + dedent` + 1,2 + in:va:lid + 3,4 + `, + { + relax_column_count: true, + raw: true, + on_record: (data, { error }) => { + const { raw, record } = data as unknown as { + record: string[]; + raw: string; + }; + if (error?.code === "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH") { + return raw.trim().split(":"); + } else { + return record; + } + }, + }, + (err, records) => { + records.should.eql([ + ["1", "2"], + ["in", "va", "lid"], + ["3", "4"], + ]); + next(); + }, + ); + }); + + it("and with columns", function (next) { + parse( + dedent` + 1,2 + in:va:lid + 3,4 + `, + { + columns: ["a", "b"], + relax_column_count: true, + raw: true, + on_record: ({ raw, record }, { error }) => { + if (error?.code === "CSV_RECORD_INCONSISTENT_COLUMNS") { + return raw.trim().split(":"); + } else { + return record; + } + }, + }, + (err, records) => { + records.should.eql([ + { a: "1", b: "2" }, + ["in", "va", "lid"], + { a: "3", b: "4" }, + ]); + next(); + }, + ); + }); + }); + + describe("with skip_records_with_error", function () { + it("dont skip records", function () { + parse( + dedent` + column_a + a,b + `, + { + skip_records_with_error: true, + relax_column_count: true, + }, + (err, records) => { + records.should.eql([["column_a"], ["a", "b"]]); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/option.relax_quotes.js b/packages/csv-parse/test/option.relax_quotes.js index d3b5bceb..a20be405 100644 --- a/packages/csv-parse/test/option.relax_quotes.js +++ b/packages/csv-parse/test/option.relax_quotes.js @@ -1,13 +1,8 @@ import "should"; import { parse } from "../lib/index.js"; -import { assert_error } from "./api.assert_error.js"; describe("Option `relax_quotes`", function () { it("validation", function () { - parse("", { relax_quotes: true }, () => {}); - parse("", { relax_quotes: false }, () => {}); - parse("", { relax_quotes: null }, () => {}); - parse("", { relax_quotes: undefined }, () => {}); (() => { parse("", { relax_quotes: 1 }, () => {}); }).should.throw("Invalid Option: relax_quotes must be a boolean, got 1"); @@ -17,108 +12,4 @@ describe("Option `relax_quotes`", function () { 'Invalid Option: relax_quotes must be a boolean, got "oh no"', ); }); - - it("true with invalid quotes in the middle", function (next) { - parse( - `384682,the "SAMAY" Hostel,Jiron Florida 285`, - { relax_quotes: true }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["384682", 'the "SAMAY" Hostel', "Jiron Florida 285"], - ]); - next(); - }, - ); - }); - - it("false with invalid quotes in the middle", function (next) { - parse( - `384682,the "SAMAY" Hostel,Jiron Florida 285`, - { relax_quotes: false }, - (err) => { - assert_error(err, { - message: - 'Invalid Opening Quote: a quote is found on field 1 at line 1, value is "the "', - code: "INVALID_OPENING_QUOTE", - field: "the ", - }); - next(); - }, - ); - }); - - it("true with invalid quotes on the left", function (next) { - parse( - `a,"b" c,d -a,""b" c,d`, - { relax_quotes: true }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["a", '"b" c', "d"], - ["a", '""b" c', "d"], - ]); - next(); - }, - ); - }); - - it("false with invalid quotes on the left", function (next) { - parse(`a,"b" c,d`, { relax_quotes: false }, (err) => { - assert_error(err, { - message: - 'Invalid Closing Quote: got " " at line 1 instead of delimiter, record delimiter, trimable character (if activated) or comment', - code: "CSV_INVALID_CLOSING_QUOTE", - }); - next(); - }); - }); - - it("true with two invalid quotes on the left", function (next) { - parse(`a,""b"" c,d`, { relax_quotes: true }, (err, records) => { - if (err) return next(err); - records.should.eql([["a", '""b"" c', "d"]]); - next(err); - }); - }); - - it("false with two invalid quotes on the left", function (next) { - parse(`a,""b"" c,d`, { relax_quotes: false }, (err) => { - assert_error(err, { - message: - 'Invalid Closing Quote: got "b" at line 1 instead of delimiter, record delimiter, trimable character (if activated) or comment', - code: "CSV_INVALID_CLOSING_QUOTE", - }); - next(); - }); - }); - - it("true with invalid quotes on the right", function (next) { - parse( - `a,b "c",d -Bob"","23",e`, - { relax_quotes: true }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["a", 'b "c"', "d"], - ['Bob""', "23", "e"], - ]); - next(); - }, - ); - }); - - it("false with invalid quotes on the right", function (next) { - parse(`a,b "c"`, { relax_quotes: false }, (err) => { - assert_error(err, { - message: - 'Invalid Opening Quote: a quote is found on field 1 at line 1, value is "b "', - code: "INVALID_OPENING_QUOTE", - field: "b ", - }); - next(); - }); - }); }); diff --git a/packages/csv-parse/test/option.relax_quotes.ts b/packages/csv-parse/test/option.relax_quotes.ts new file mode 100644 index 00000000..e985408e --- /dev/null +++ b/packages/csv-parse/test/option.relax_quotes.ts @@ -0,0 +1,123 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `relax_quotes`", function () { + it("validation", function () { + parse("", { relax_quotes: true }, () => {}); + parse("", { relax_quotes: false }, () => {}); + parse("", { relax_quotes: null }, () => {}); + parse("", { relax_quotes: undefined }, () => {}); + }); + + it("true with invalid quotes in the middle", function (next) { + parse( + `384682,the "SAMAY" Hostel,Jiron Florida 285`, + { relax_quotes: true }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["384682", 'the "SAMAY" Hostel', "Jiron Florida 285"], + ]); + next(); + }, + ); + }); + + it("false with invalid quotes in the middle", function (next) { + parse( + `384682,the "SAMAY" Hostel,Jiron Florida 285`, + { relax_quotes: false }, + (err) => { + if (!err) return next(Error("Invalid assessment")); + assert_error(err, { + message: + 'Invalid Opening Quote: a quote is found on field 1 at line 1, value is "the "', + code: "INVALID_OPENING_QUOTE", + field: "the ", + }); + next(); + }, + ); + }); + + it("true with invalid quotes on the left", function (next) { + parse( + dedent` + a,"b" c,d + a,""b" c,d + `, + { relax_quotes: true }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["a", '"b" c', "d"], + ["a", '""b" c', "d"], + ]); + next(); + }, + ); + }); + + it("false with invalid quotes on the left", function (next) { + parse(`a,"b" c,d`, { relax_quotes: false }, (err) => { + if (!err) return next(Error("Invalid assessment")); + assert_error(err, { + message: + 'Invalid Closing Quote: got " " at line 1 instead of delimiter, record delimiter, trimable character (if activated) or comment', + code: "CSV_INVALID_CLOSING_QUOTE", + }); + next(); + }); + }); + + it("true with two invalid quotes on the left", function (next) { + parse(`a,""b"" c,d`, { relax_quotes: true }, (err, records) => { + if (err) return next(err); + records.should.eql([["a", '""b"" c', "d"]]); + next(err); + }); + }); + + it("false with two invalid quotes on the left", function (next) { + parse(`a,""b"" c,d`, { relax_quotes: false }, (err) => { + if (!err) return next(Error("Invalid assessment")); + assert_error(err, { + message: + 'Invalid Closing Quote: got "b" at line 1 instead of delimiter, record delimiter, trimable character (if activated) or comment', + code: "CSV_INVALID_CLOSING_QUOTE", + }); + next(); + }); + }); + + it("true with invalid quotes on the right", function (next) { + parse( + `a,b "c",d +Bob"","23",e`, + { relax_quotes: true }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["a", 'b "c"', "d"], + ['Bob""', "23", "e"], + ]); + next(); + }, + ); + }); + + it("false with invalid quotes on the right", function (next) { + parse(`a,b "c"`, { relax_quotes: false }, (err) => { + if (!err) return next(Error("Invalid assessment")); + assert_error(err, { + message: + 'Invalid Opening Quote: a quote is found on field 1 at line 1, value is "b "', + code: "INVALID_OPENING_QUOTE", + field: "b ", + }); + next(); + }); + }); +}); diff --git a/packages/csv-parse/test/option.rtrim.js b/packages/csv-parse/test/option.rtrim.js index 46591661..2f485576 100644 --- a/packages/csv-parse/test/option.rtrim.js +++ b/packages/csv-parse/test/option.rtrim.js @@ -1,14 +1,8 @@ import "should"; -import dedent from "dedent"; import { parse } from "../lib/index.js"; -import { assert_error } from "./api.assert_error.js"; describe("Option `rtrim`", function () { it("validation", function () { - parse("", { rtrim: true }, () => {}); - parse("", { rtrim: false }, () => {}); - parse("", { rtrim: null }, () => {}); - parse("", { rtrim: undefined }, () => {}); (() => { parse("", { rtrim: 1 }, () => {}); }).should.throw("Invalid Option: rtrim must be a boolean, got 1"); @@ -16,120 +10,4 @@ describe("Option `rtrim`", function () { parse("", { rtrim: "true" }, () => {}); }).should.throw('Invalid Option: rtrim must be a boolean, got "true"'); }); - - it("plain text", function (next) { - parse( - dedent` - a b ,c d - e f ,g h - `, - { quote: "'", escape: "'", trim: true }, - (err, records) => { - if (!err) - records.should.eql([ - ["a b", "c d"], - ["e f", "g h"], - ]); - next(err); - }, - ); - }); - - it("after quote", function (next) { - const data = "'a' ,'b'\n'c' ,'d'"; - const parser = parse( - { quote: "'", escape: "'", trim: true }, - (err, records) => { - if (!err) - records.should.eql([ - ["a", "b"], - ["c", "d"], - ]); - next(err); - }, - ); - for (const chr of data) { - parser.write(chr); - } - parser.end(); - }); - - it("quote followed by escape", function (next) { - parse( - dedent` - 'a''' ,'b''' - 'c''','d''' - 'e''','f''' - `, - { quote: "'", escape: "'", trim: true }, - (err, records) => { - if (!err) - records.should.eql([ - ["a'", "b'"], - ["c'", "d'"], - ["e'", "f'"], - ]); - next(err); - }, - ); - }); - - it("with whitespaces around quotes", function (next) { - const data = '"a b " ,"c d "\n"e f " ,"g h "'; - const parser = parse({ rtrim: true }, (err, records) => { - if (!err) - records.should.eql([ - ["a b ", "c d "], - ["e f ", "g h "], - ]); - next(err); - }); - for (const chr of data) { - parser.write(chr); - } - parser.end(); - }); - - it("with tags around quotes", function (next) { - const data = [ - `"a\tb\t"\t\t\t,"c\td\t\t\t"\t`, - `"e\tf\t"\t,"g\th\t\t\t"\t\t\t`, - ].join("\n"); - const parser = parse({ rtrim: true }, (err, records) => { - if (!err) - records.should.eql([ - ["a\tb\t", "c\td\t\t\t"], - ["e\tf\t", "g\th\t\t\t"], - ]); - next(err); - }); - for (const chr of data) { - parser.write(chr); - } - parser.end(); - }); - - it("with char after whitespaces", function (next) { - const data = ['"a b " x ,"c d " x', '"e f " x,"g h " x '].join("\n"); - const parser = parse({ rtrim: true }, (err) => { - assert_error(err, { - message: - "Invalid Closing Quote: found non trimable byte after quote at line 1", - code: "CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE", - column: 0, - empty_lines: 0, - header: false, - index: 0, - invalid_field_length: 0, - quoting: true, - lines: 1, - records: 0, - }); - next(); - }); - for (const chr of data) { - parser.write(chr); - } - parser.end(); - }); }); diff --git a/packages/csv-parse/test/option.rtrim.ts b/packages/csv-parse/test/option.rtrim.ts new file mode 100644 index 00000000..920cdad1 --- /dev/null +++ b/packages/csv-parse/test/option.rtrim.ts @@ -0,0 +1,130 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; + +describe("Option `rtrim`", function () { + it("validation", function () { + parse("", { rtrim: true }, () => {}); + parse("", { rtrim: false }, () => {}); + parse("", { rtrim: null }, () => {}); + parse("", { rtrim: undefined }, () => {}); + }); + + it("plain text", function (next) { + parse( + dedent` + a b ,c d + e f ,g h + `, + { quote: "'", escape: "'", trim: true }, + (err, records) => { + if (!err) + records.should.eql([ + ["a b", "c d"], + ["e f", "g h"], + ]); + next(err); + }, + ); + }); + + it("after quote", function (next) { + const data = "'a' ,'b'\n'c' ,'d'"; + const parser = parse( + { quote: "'", escape: "'", trim: true }, + (err, records) => { + if (!err) + records.should.eql([ + ["a", "b"], + ["c", "d"], + ]); + next(err); + }, + ); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); + + it("quote followed by escape", function (next) { + parse( + dedent` + 'a''' ,'b''' + 'c''','d''' + 'e''','f''' + `, + { quote: "'", escape: "'", trim: true }, + (err, records) => { + if (!err) + records.should.eql([ + ["a'", "b'"], + ["c'", "d'"], + ["e'", "f'"], + ]); + next(err); + }, + ); + }); + + it("with whitespaces around quotes", function (next) { + const data = '"a b " ,"c d "\n"e f " ,"g h "'; + const parser = parse({ rtrim: true }, (err, records) => { + if (!err) + records.should.eql([ + ["a b ", "c d "], + ["e f ", "g h "], + ]); + next(err); + }); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); + + it("with tags around quotes", function (next) { + const data = [ + `"a\tb\t"\t\t\t,"c\td\t\t\t"\t`, + `"e\tf\t"\t,"g\th\t\t\t"\t\t\t`, + ].join("\n"); + const parser = parse({ rtrim: true }, (err, records) => { + if (!err) + records.should.eql([ + ["a\tb\t", "c\td\t\t\t"], + ["e\tf\t", "g\th\t\t\t"], + ]); + next(err); + }); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); + + it("with char after whitespaces", function (next) { + const data = ['"a b " x ,"c d " x', '"e f " x,"g h " x '].join("\n"); + const parser = parse({ rtrim: true }, (err) => { + if (!err) return next(Error("Invalid assessment")); + assert_error(err, { + message: + "Invalid Closing Quote: found non trimable byte after quote at line 1", + code: "CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE", + column: 0, + empty_lines: 0, + header: false, + index: 0, + invalid_field_length: 0, + quoting: true, + lines: 1, + records: 0, + }); + next(); + }); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); +}); diff --git a/packages/csv-parse/test/option.skip_empty_lines.js b/packages/csv-parse/test/option.skip_empty_lines.js index 13bcb98a..71e8fa40 100644 --- a/packages/csv-parse/test/option.skip_empty_lines.js +++ b/packages/csv-parse/test/option.skip_empty_lines.js @@ -3,10 +3,6 @@ import { parse } from "../lib/index.js"; describe("Option `skip_empty_lines`", function () { it("validation", function () { - parse("", { skip_empty_lines: true }, () => {}); - parse("", { skip_empty_lines: false }, () => {}); - parse("", { skip_empty_lines: null }, () => {}); - parse("", { skip_empty_lines: undefined }, () => {}); (() => { parse("", { skip_empty_lines: 1 }, () => {}); }).should.throw( @@ -18,81 +14,4 @@ describe("Option `skip_empty_lines`", function () { 'Invalid Option: skip_empty_lines must be a boolean, got "oh no"', ); }); - - describe("false", function () { - it("dont skip by default", function (next) { - parse("ABC\n\nDEF", (err, records) => { - if (!err) { - records.should.eql([["ABC"], [""], ["DEF"]]); - } - next(err); - }); - }); - }); - - describe("usage", function () { - it("skip", function (next) { - parse("ABC\n\nDEF", { skip_empty_lines: true }, (err, records) => { - if (!err) { - records.should.eql([["ABC"], ["DEF"]]); - } - next(err); - }); - }); - - it("quoted fields are not interpreted as empty", function (next) { - parse('ABC\n""\nDEF', { skip_empty_lines: true }, (err, records) => { - if (!err) { - records.should.eql([["ABC"], [""], ["DEF"]]); - } - next(err); - }); - }); - - it("skip respect parser.read", function (next) { - const records = []; - const parser = parse({ skip_empty_lines: true }); - parser.write( - "\n20322051544,1979,8.8017226E7,ABC,45,2000-01-01\n\n28392898392,1974,8.8392926E7,DEF,23,2050-11-27\n", - ); - parser.on("readable", () => { - let d; - while ((d = parser.read())) { - records.push(d); - } - }); - parser.on("error", (err) => { - next(err); - }); - parser.on("end", () => { - records.should.eql([ - ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], - ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], - ]); - next(); - }); - parser.end(); - }); - }); - - describe("with other options", function () { - it("used conjointly with trim to ignore whitespaces", function (next) { - parse( - "a,b,c\n\t\nd,e,f", - { - skip_empty_lines: true, - trim: true, - }, - (err, records) => { - if (!err) { - records.should.eql([ - ["a", "b", "c"], - ["d", "e", "f"], - ]); - } - next(err); - }, - ); - }); - }); }); diff --git a/packages/csv-parse/test/option.skip_empty_lines.ts b/packages/csv-parse/test/option.skip_empty_lines.ts new file mode 100644 index 00000000..79f4f76f --- /dev/null +++ b/packages/csv-parse/test/option.skip_empty_lines.ts @@ -0,0 +1,88 @@ +import "should"; +import { parse } from "../lib/index.js"; + +describe("Option `skip_empty_lines`", function () { + it("validation", function () { + parse("", { skip_empty_lines: true }, () => {}); + parse("", { skip_empty_lines: false }, () => {}); + parse("", { skip_empty_lines: null }, () => {}); + parse("", { skip_empty_lines: undefined }, () => {}); + }); + + describe("false", function () { + it("dont skip by default", function (next) { + parse("ABC\n\nDEF", (err, records) => { + if (!err) { + records.should.eql([["ABC"], [""], ["DEF"]]); + } + next(err); + }); + }); + }); + + describe("usage", function () { + it("skip", function (next) { + parse("ABC\n\nDEF", { skip_empty_lines: true }, (err, records) => { + if (!err) { + records.should.eql([["ABC"], ["DEF"]]); + } + next(err); + }); + }); + + it("quoted fields are not interpreted as empty", function (next) { + parse('ABC\n""\nDEF', { skip_empty_lines: true }, (err, records) => { + if (!err) { + records.should.eql([["ABC"], [""], ["DEF"]]); + } + next(err); + }); + }); + + it("skip respect parser.read", function (next) { + const records: string[] = []; + const parser = parse({ skip_empty_lines: true }); + parser.write( + "\n20322051544,1979,8.8017226E7,ABC,45,2000-01-01\n\n28392898392,1974,8.8392926E7,DEF,23,2050-11-27\n", + ); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("error", (err) => { + next(err); + }); + parser.on("end", () => { + records.should.eql([ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ]); + next(); + }); + parser.end(); + }); + }); + + describe("with other options", function () { + it("used conjointly with trim to ignore whitespaces", function (next) { + parse( + "a,b,c\n\t\nd,e,f", + { + skip_empty_lines: true, + trim: true, + }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["d", "e", "f"], + ]); + } + next(err); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/option.skip_records_with_empty_values.js b/packages/csv-parse/test/option.skip_records_with_empty_values.js index d312ba5a..f43b7f05 100644 --- a/packages/csv-parse/test/option.skip_records_with_empty_values.js +++ b/packages/csv-parse/test/option.skip_records_with_empty_values.js @@ -1,13 +1,8 @@ import "should"; -import dedent from "dedent"; import { parse } from "../lib/index.js"; describe("Option `skip_records_with_empty_values`", function () { it("validation", function () { - parse("", { skip_records_with_empty_values: true }, () => {}); - parse("", { skip_records_with_empty_values: false }, () => {}); - parse("", { skip_records_with_empty_values: null }, () => {}); - parse("", { skip_records_with_empty_values: undefined }, () => {}); (() => { parse("", { skip_records_with_empty_values: 1 }, () => {}); }).should.throw( @@ -19,87 +14,4 @@ describe("Option `skip_records_with_empty_values`", function () { 'Invalid Option: skip_records_with_empty_values must be a boolean, got "oh no"', ); }); - - it("dont skip by default", function (next) { - parse("ABC,DEF\n,\nIJK,LMN", (err, records) => { - if (err) return next(err); - records.should.eql([ - ["ABC", "DEF"], - ["", ""], - ["IJK", "LMN"], - ]); - next(); - }); - }); - - it("skip", function (next) { - parse( - dedent` - ABC,DEF - , - IJK,LMN - , - `, - { skip_records_with_empty_values: true }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["ABC", "DEF"], - ["IJK", "LMN"], - ]); - next(); - }, - ); - }); - - it("skip space and tabs", function (next) { - parse( - "ABC,DEF\n\t , \t\nIJK,LMN\n\t , \t\n", - { skip_records_with_empty_values: true }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["ABC", "DEF"], - ["IJK", "LMN"], - ]); - next(); - }, - ); - }); - - it("handle value which are casted to another type than string", function (next) { - parse( - dedent` - empty_buffer - boolean - integer - null - undefined - `, - { - skip_records_with_empty_values: true, - cast: (value) => { - switch (value) { - case "empty_buffer": - return Buffer.from(""); - case "boolean": - return true; - case "integer": - return 0; - case "null": - return null; - case "undefined": - return undefined; - default: - return value; - } - }, - }, - (err, records) => { - if (err) return next(err); - records.should.eql([[true], [0]]); - next(); - }, - ); - }); }); diff --git a/packages/csv-parse/test/option.skip_records_with_empty_values.ts b/packages/csv-parse/test/option.skip_records_with_empty_values.ts new file mode 100644 index 00000000..485471b9 --- /dev/null +++ b/packages/csv-parse/test/option.skip_records_with_empty_values.ts @@ -0,0 +1,95 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `skip_records_with_empty_values`", function () { + it("validation", function () { + parse("", { skip_records_with_empty_values: true }, () => {}); + parse("", { skip_records_with_empty_values: false }, () => {}); + parse("", { skip_records_with_empty_values: null }, () => {}); + parse("", { skip_records_with_empty_values: undefined }, () => {}); + }); + + it("dont skip by default", function (next) { + parse("ABC,DEF\n,\nIJK,LMN", (err, records) => { + if (err) return next(err); + records.should.eql([ + ["ABC", "DEF"], + ["", ""], + ["IJK", "LMN"], + ]); + next(); + }); + }); + + it("skip", function (next) { + parse( + dedent` + ABC,DEF + , + IJK,LMN + , + `, + { skip_records_with_empty_values: true }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["ABC", "DEF"], + ["IJK", "LMN"], + ]); + next(); + }, + ); + }); + + it("skip space and tabs", function (next) { + parse( + "ABC,DEF\n\t , \t\nIJK,LMN\n\t , \t\n", + { skip_records_with_empty_values: true }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["ABC", "DEF"], + ["IJK", "LMN"], + ]); + next(); + }, + ); + }); + + it("handle value which are casted to another type than string", function (next) { + parse( + dedent` + empty_buffer + boolean + integer + null + undefined + `, + { + skip_records_with_empty_values: true, + cast: (value) => { + switch (value) { + case "empty_buffer": + return Buffer.from(""); + case "boolean": + return true; + case "integer": + return 0; + case "null": + return null; + case "undefined": + return undefined; + default: + return value; + } + }, + }, + (err, records) => { + if (err) return next(err); + records.should.eql([[true], [0]]); + next(); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.skip_records_with_error.js b/packages/csv-parse/test/option.skip_records_with_error.js index 07a52ed0..e283154f 100644 --- a/packages/csv-parse/test/option.skip_records_with_error.js +++ b/packages/csv-parse/test/option.skip_records_with_error.js @@ -1,14 +1,8 @@ import "should"; -import dedent from "dedent"; import { parse } from "../lib/index.js"; -import { assert_error } from "./api.assert_error.js"; describe("Option `skip_records_with_error`", function () { it("validation", function () { - parse("", { skip_records_with_error: true }, () => {}); - parse("", { skip_records_with_error: false }, () => {}); - parse("", { skip_records_with_error: null }, () => {}); - parse("", { skip_records_with_error: undefined }, () => {}); (() => { parse("", { skip_records_with_error: 1 }, () => {}); }).should.throw( @@ -20,212 +14,4 @@ describe("Option `skip_records_with_error`", function () { 'Invalid Option: skip_records_with_error must be a boolean, got "oh no"', ); }); - - it('handle "Invalid closing quote"', function (next) { - let errors = 0; - const parser = parse({ skip_records_with_error: true }, (err, records) => { - if (!err) { - records.should.eql([ - ["a", "b", "c"], - ["one", "two", "three"], - ["seven", "eight", "nine"], - ]); - } - errors.should.eql(1); - next(err); - }); - parser.on("skip", (err) => { - assert_error(err, { - message: - 'Invalid Closing Quote: got " " at line 3 instead of delimiter, record delimiter, trimable character (if activated) or comment', - code: "CSV_INVALID_CLOSING_QUOTE", - }); - errors++; - }); - parser.write( - dedent` - "a","b","c" - "one","two","three" - "four"," " ","six" - "seven","eight","nine" - `, - ); - parser.end(); - }); - - it('handle "Invalid opening quote"', function (next) { - const errors = []; - const parser = parse({ skip_records_with_error: true }, (err, records) => { - if (!err) { - records.should.eql([ - ["line", "1"], - ["line", "3"], - ]); - } - assert_error(errors, [ - { - message: - 'Invalid Opening Quote: a quote is found on field 1 at line 2, value is "invalid h"', - code: "INVALID_OPENING_QUOTE", - field: "invalid h", - }, - { - message: - 'Invalid Opening Quote: a quote is found on field 1 at line 2, value is "invalid h\\"ere"', - code: "INVALID_OPENING_QUOTE", - field: 'invalid h"ere', - }, - ]); - errors.length.should.eql(2); - next(err); - }); - parser.on("skip", (err) => { - errors.push(err); - }); - parser.write(dedent` - "line",1 - "line",invalid h"ere" - line,3 - `); - parser.end(); - }); - - it('handle "Quoted field not terminated"', function (next) { - let errors = 0; - const parser = parse({ skip_records_with_error: true }, (err, records) => { - if (!err) { - records.should.eql([["a", "b", "c", "d"]]); - } - errors.should.eql(1); - next(err); - }); - parser.on("skip", (err) => { - assert_error(err, { - message: - "Quote Not Closed: the parsing is finished with an opening quote at line 2", - code: "CSV_QUOTE_NOT_CLOSED", - }); - errors++; - }); - parser.write(dedent` - "a",b,"c",d - "",1974,8.8392926E7,""," - `); - parser.end(); - }); - - it('handle "CSV_RECORD_INCONSISTENT_COLUMNS"', function (next) { - let errors = 0; - const parser = parse( - { skip_records_with_error: true, columns: ["a", "b", "c", "d"] }, - (err, records) => { - if (!err) { - records.should.eql([ - { a: "4", b: "5", c: "6", d: "x" }, - { a: "7", b: "8", c: "9", d: "y" }, - ]); - } - errors.should.eql(1); - next(err); - }, - ); - parser.on("skip", (err) => { - assert_error(err, { - message: "Invalid Record Length: columns length is 4, got 3 on line 1", - code: "CSV_RECORD_INCONSISTENT_COLUMNS", - record: ["1", "2", "3"], - }); - errors++; - }); - parser.write(dedent` - 1,2,3 - 4,5,6,x - 7,8,9,y - `); - parser.end(); - }); - - it('handle "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH"', function (next) { - let errors = 0; - const parser = parse({ skip_records_with_error: true }, (err, records) => { - if (!err) { - records.should.eql([ - ["a", "b", "c", "d"], - ["e", "f", "g", "h"], - ]); - } - errors.should.eql(1); - next(err); - }); - parser.on("skip", (err) => { - assert_error(err, { - message: "Invalid Record Length: expect 4, got 3 on line 2", - code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", - record: ["1", "2", "3"], - }); - errors++; - }); - parser.write(dedent` - a,b,c,d - 1,2,3 - e,f,g,h - `); - parser.end(); - }); - - describe("with `bom` option", function () { - it('handle "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH" with bom (fix #411)', function (next) { - let errors = 0; - const parser = parse( - { bom: true, skip_records_with_error: true }, - (err, records) => { - if (!err) { - records.should.eql([ - ["a", "b", "c", "d"], - ["e", "f", "g", "h"], - ]); - } - errors.should.eql(1); - next(err); - }, - ); - parser.on("skip", (err) => { - assert_error(err, { - message: "Invalid Record Length: expect 4, got 3 on line 2", - code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", - record: ["1", "2", "3"], - }); - errors++; - }); - parser.write("\ufeffa,b,c,d\n1,2,3\ne,f,g,h"); - parser.end(); - }); - }); - - describe("with `raw` option", function () { - it("print raw record", function (next) { - let errors = 0; - const parser = parse( - dedent` - "a","b","c" - "one","two","three" - "four"," " ","six" - "seven","eight","nine" - `, - { - skip_records_with_error: true, - raw: true, - }, - (err) => { - errors.should.eql(1); - next(err); - }, - ); - parser.on("skip", (err, raw) => { - err.raw.should.eql('"four"," "'); - raw.should.eql('"four"," "'); - errors++; - }); - }); - }); }); diff --git a/packages/csv-parse/test/option.skip_records_with_error.ts b/packages/csv-parse/test/option.skip_records_with_error.ts new file mode 100644 index 00000000..861050fc --- /dev/null +++ b/packages/csv-parse/test/option.skip_records_with_error.ts @@ -0,0 +1,222 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; +import { assert_error } from "./api.assert_error.js"; +import { CsvError } from "../dist/cjs/index.cjs"; + +describe("Option `skip_records_with_error`", function () { + it("validation", function () { + parse("", { skip_records_with_error: true }, () => {}); + parse("", { skip_records_with_error: false }, () => {}); + parse("", { skip_records_with_error: null }, () => {}); + parse("", { skip_records_with_error: undefined }, () => {}); + }); + + it('handle "Invalid closing quote"', function (next) { + let errors = 0; + const parser = parse({ skip_records_with_error: true }, (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["one", "two", "three"], + ["seven", "eight", "nine"], + ]); + } + errors.should.eql(1); + next(err); + }); + parser.on("skip", (err) => { + assert_error(err, { + message: + 'Invalid Closing Quote: got " " at line 3 instead of delimiter, record delimiter, trimable character (if activated) or comment', + code: "CSV_INVALID_CLOSING_QUOTE", + }); + errors++; + }); + parser.write( + dedent` + "a","b","c" + "one","two","three" + "four"," " ","six" + "seven","eight","nine" + `, + ); + parser.end(); + }); + + it('handle "Invalid opening quote"', function (next) { + const errors: CsvError[] = []; + const parser = parse({ skip_records_with_error: true }, (err, records) => { + if (!err) { + records.should.eql([ + ["line", "1"], + ["line", "3"], + ]); + } + assert_error(errors, [ + { + message: + 'Invalid Opening Quote: a quote is found on field 1 at line 2, value is "invalid h"', + code: "INVALID_OPENING_QUOTE", + field: "invalid h", + }, + { + message: + 'Invalid Opening Quote: a quote is found on field 1 at line 2, value is "invalid h\\"ere"', + code: "INVALID_OPENING_QUOTE", + field: 'invalid h"ere', + }, + ]); + errors.length.should.eql(2); + next(err); + }); + parser.on("skip", (err) => { + errors.push(err); + }); + parser.write(dedent` + "line",1 + "line",invalid h"ere" + line,3 + `); + parser.end(); + }); + + it('handle "Quoted field not terminated"', function (next) { + let errors = 0; + const parser = parse({ skip_records_with_error: true }, (err, records) => { + if (!err) { + records.should.eql([["a", "b", "c", "d"]]); + } + errors.should.eql(1); + next(err); + }); + parser.on("skip", (err) => { + assert_error(err, { + message: + "Quote Not Closed: the parsing is finished with an opening quote at line 2", + code: "CSV_QUOTE_NOT_CLOSED", + }); + errors++; + }); + parser.write(dedent` + "a",b,"c",d + "",1974,8.8392926E7,""," + `); + parser.end(); + }); + + it('handle "CSV_RECORD_INCONSISTENT_COLUMNS"', function (next) { + let errors = 0; + const parser = parse( + { skip_records_with_error: true, columns: ["a", "b", "c", "d"] }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "4", b: "5", c: "6", d: "x" }, + { a: "7", b: "8", c: "9", d: "y" }, + ]); + } + errors.should.eql(1); + next(err); + }, + ); + parser.on("skip", (err) => { + assert_error(err, { + message: "Invalid Record Length: columns length is 4, got 3 on line 1", + code: "CSV_RECORD_INCONSISTENT_COLUMNS", + record: ["1", "2", "3"], + }); + errors++; + }); + parser.write(dedent` + 1,2,3 + 4,5,6,x + 7,8,9,y + `); + parser.end(); + }); + + it('handle "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH"', function (next) { + let errors = 0; + const parser = parse({ skip_records_with_error: true }, (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c", "d"], + ["e", "f", "g", "h"], + ]); + } + errors.should.eql(1); + next(err); + }); + parser.on("skip", (err) => { + assert_error(err, { + message: "Invalid Record Length: expect 4, got 3 on line 2", + code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", + record: ["1", "2", "3"], + }); + errors++; + }); + parser.write(dedent` + a,b,c,d + 1,2,3 + e,f,g,h + `); + parser.end(); + }); + + describe("with `bom` option", function () { + it('handle "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH" with bom (fix #411)', function (next) { + let errors = 0; + const parser = parse( + { bom: true, skip_records_with_error: true }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c", "d"], + ["e", "f", "g", "h"], + ]); + } + errors.should.eql(1); + next(err); + }, + ); + parser.on("skip", (err) => { + assert_error(err, { + message: "Invalid Record Length: expect 4, got 3 on line 2", + code: "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH", + record: ["1", "2", "3"], + }); + errors++; + }); + parser.write("\ufeffa,b,c,d\n1,2,3\ne,f,g,h"); + parser.end(); + }); + }); + + describe("with `raw` option", function () { + it("print raw record", function (next) { + let errors = 0; + const parser = parse( + dedent` + "a","b","c" + "one","two","three" + "four"," " ","six" + "seven","eight","nine" + `, + { + skip_records_with_error: true, + raw: true, + }, + (err) => { + errors.should.eql(1); + next(err); + }, + ); + parser.on("skip", (err, raw) => { + err.raw.should.eql('"four"," "'); + raw.should.eql('"four"," "'); + errors++; + }); + }); + }); +}); diff --git a/packages/csv-parse/test/option.to.js b/packages/csv-parse/test/option.to.js index f860aaf0..4b408c7f 100644 --- a/packages/csv-parse/test/option.to.js +++ b/packages/csv-parse/test/option.to.js @@ -1,131 +1,13 @@ import "should"; -import dedent from "dedent"; import { parse } from "../lib/index.js"; describe("Option `to`", function () { it("validation", function () { - parse("", { to: 10 }, () => {}); - parse("", { to: "10" }, () => {}); - (() => { - parse("", { to: -1 }, () => {}); - }).should.throw( - "Invalid Option: to must be a positive integer greater than 0, got -1", - ); - (() => { - parse("", { to: 0 }, () => {}); - }).should.throw( - "Invalid Option: to must be a positive integer greater than 0, got 0", - ); - (() => { - parse("", { to: "0" }, () => {}); - }).should.throw( - 'Invalid Option: to must be a positive integer greater than 0, got "0"', - ); (() => { parse("", { to: true }, () => {}); }).should.throw("Invalid Option: to must be an integer, got true"); (() => { parse("", { to: false }, () => {}); }).should.throw("Invalid Option: to must be an integer, got false"); - (() => { - parse("", { to: "oh no" }, () => {}); - }).should.throw('Invalid Option: to must be an integer, got "oh no"'); - }); - - it("start at defined position", function (next) { - parse( - dedent` - 1,2,3 - 4,5,6 - 7,8,9 - `, - { to: 2 }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["1", "2", "3"], - ["4", "5", "6"], - ]); - next(); - }, - ); - }); - - it("dont count headers", function (next) { - parse( - dedent` - a,b,c - 1,2,3 - 4,5,6 - 7,8,9 - `, - { columns: true, to: 2 }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - { a: "1", b: "2", c: "3" }, - { a: "4", b: "5", c: "6" }, - ]); - next(); - }, - ); - }); - - it('end stream when "to" is reached, further lines are not parsed', function (next) { - parse( - dedent` - 1,2,3\n4,5,6\n7,8 - `, - { to: 2 }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - ["1", "2", "3"], - ["4", "5", "6"], - ]); - next(); - }, - ); - }); - - it("not influenced by lines", function (next) { - parse( - dedent` - 1,2," - 3" - 4,5," - 6" - 7,8," - 9" - `, - { to: 2 }, - (err, records) => { - if (!err) { - records.should.eql([ - ["1", "2", "\n3"], - ["4", "5", "\n6"], - ]); - } - next(err); - }, - ); - }); - - it("not influenced by record delimiter", function (next) { - parse( - dedent` - 1,2,3:4,5,6:7,8,9 - `, - { to: 2, record_delimiter: ":" }, - (err, records) => { - if (!err) { - records.should.eql([ - ["1", "2", "3"], - ["4", "5", "6"], - ]); - } - next(err); - }, - ); }); }); diff --git a/packages/csv-parse/test/option.to.ts b/packages/csv-parse/test/option.to.ts new file mode 100644 index 00000000..e5d72fad --- /dev/null +++ b/packages/csv-parse/test/option.to.ts @@ -0,0 +1,126 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `to`", function () { + it("validation", function () { + parse("", { to: 10 }, () => {}); + parse("", { to: "10" }, () => {}); + parse("", { to: null }, () => {}); + (() => { + parse("", { to: -1 }, () => {}); + }).should.throw( + "Invalid Option: to must be a positive integer greater than 0, got -1", + ); + (() => { + parse("", { to: 0 }, () => {}); + }).should.throw( + "Invalid Option: to must be a positive integer greater than 0, got 0", + ); + (() => { + parse("", { to: "0" }, () => {}); + }).should.throw( + 'Invalid Option: to must be a positive integer greater than 0, got "0"', + ); + (() => { + parse("", { to: "oh no" }, () => {}); + }).should.throw('Invalid Option: to must be an integer, got "oh no"'); + }); + + it("start at defined position", function (next) { + parse( + dedent` + 1,2,3 + 4,5,6 + 7,8,9 + `, + { to: 2 }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["1", "2", "3"], + ["4", "5", "6"], + ]); + next(); + }, + ); + }); + + it("dont count headers", function (next) { + parse( + dedent` + a,b,c + 1,2,3 + 4,5,6 + 7,8,9 + `, + { columns: true, to: 2 }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + { a: "1", b: "2", c: "3" }, + { a: "4", b: "5", c: "6" }, + ]); + next(); + }, + ); + }); + + it('end stream when "to" is reached, further lines are not parsed', function (next) { + parse( + dedent` + 1,2,3\n4,5,6\n7,8 + `, + { to: 2 }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + ["1", "2", "3"], + ["4", "5", "6"], + ]); + next(); + }, + ); + }); + + it("not influenced by lines", function (next) { + parse( + dedent` + 1,2," + 3" + 4,5," + 6" + 7,8," + 9" + `, + { to: 2 }, + (err, records) => { + if (!err) { + records.should.eql([ + ["1", "2", "\n3"], + ["4", "5", "\n6"], + ]); + } + next(err); + }, + ); + }); + + it("not influenced by record delimiter", function (next) { + parse( + dedent` + 1,2,3:4,5,6:7,8,9 + `, + { to: 2, record_delimiter: ":" }, + (err, records) => { + if (!err) { + records.should.eql([ + ["1", "2", "3"], + ["4", "5", "6"], + ]); + } + next(err); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.to_line.js b/packages/csv-parse/test/option.to_line.js index 1f50c1f5..d3026ac4 100644 --- a/packages/csv-parse/test/option.to_line.js +++ b/packages/csv-parse/test/option.to_line.js @@ -1,23 +1,8 @@ import "should"; -import dedent from "dedent"; import { parse } from "../lib/index.js"; describe("Option `to_line`", function () { it("validation", function () { - parse("", { to_line: 10 }, () => {}); - parse("", { to_line: "10" }, () => {}); - parse("", { to_line: null }, () => {}); - parse("", { to_line: undefined }, () => {}); - (() => { - parse("", { to_line: -1 }, () => {}); - }).should.throw( - "Invalid Option: to_line must be a positive integer greater than 0, got -1", - ); - (() => { - parse("", { to_line: 0 }, () => {}); - }).should.throw( - "Invalid Option: to_line must be a positive integer greater than 0, got 0", - ); (() => { parse("", { to_line: "0" }, () => {}); }).should.throw( @@ -33,115 +18,4 @@ describe("Option `to_line`", function () { parse("", { to_line: "oh no" }, () => {}); }).should.throw('Invalid Option: to_line must be an integer, got "oh no"'); }); - - it("start at defined position", function (next) { - parse( - dedent` - 1,2,3 - 4,5,6 - 7,8,9 - `, - { to_line: 2 }, - (err, records) => { - if (!err) { - records.should.eql([ - ["1", "2", "3"], - ["4", "5", "6"], - ]); - } - next(err); - }, - ); - }); - - it("count headers", function (next) { - parse( - dedent` - a,b,c - 1,2,3 - 4,5,6 - 7,8,9 - `, - { columns: true, to_line: 3 }, - (err, records) => { - if (!err) { - records.should.eql([ - { a: "1", b: "2", c: "3" }, - { a: "4", b: "5", c: "6" }, - ]); - } - next(err); - }, - ); - }); - - it("records with quoted line at the end of line", function (next) { - parse( - dedent` - 1,2," - - 3" - 4,5," - 6" - 7,8," - 9" - `, - { to_line: 5 }, - (err, records) => { - if (!err) { - records.should.eql([ - ["1", "2", "\n\n3"], - ["4", "5", "\n6"], - ]); - } - next(err); - }, - ); - }); - - it("records with quoted line in the middle of line", function (next) { - parse( - dedent` - 1,2," - - 3" - 4,5," - 6" - 7,8," - 9" - `, - { to_line: 6 }, - (err, records) => { - if (!err) { - records.should.eql([ - ["1", "2", "\n\n3"], - ["4", "5", "\n6"], - ]); - } - next(err); - }, - ); - }); - - it("not influenced by record delimiter", function (next) { - parse( - dedent` - a,b,c:1,2, - 3:d,e,f:4,5, - 6:g,h,i:7,8, - 9 - `, - { to_line: 2, record_delimiter: ":" }, - (err, records) => { - if (!err) { - records.should.eql([ - ["a", "b", "c"], - ["1", "2", "\n3"], - ["d", "e", "f"], - ]); - } - next(err); - }, - ); - }); }); diff --git a/packages/csv-parse/test/option.to_line.ts b/packages/csv-parse/test/option.to_line.ts new file mode 100644 index 00000000..00e52977 --- /dev/null +++ b/packages/csv-parse/test/option.to_line.ts @@ -0,0 +1,133 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `to_line`", function () { + it("validation", function () { + parse("", { to_line: 10 }, () => {}); + parse("", { to_line: "10" }, () => {}); + parse("", { to_line: null }, () => {}); + parse("", { to_line: undefined }, () => {}); + (() => { + parse("", { to_line: -1 }, () => {}); + }).should.throw( + "Invalid Option: to_line must be a positive integer greater than 0, got -1", + ); + (() => { + parse("", { to_line: 0 }, () => {}); + }).should.throw( + "Invalid Option: to_line must be a positive integer greater than 0, got 0", + ); + }); + + it("start at defined position", function (next) { + parse( + dedent` + 1,2,3 + 4,5,6 + 7,8,9 + `, + { to_line: 2 }, + (err, records) => { + if (!err) { + records.should.eql([ + ["1", "2", "3"], + ["4", "5", "6"], + ]); + } + next(err); + }, + ); + }); + + it("count headers", function (next) { + parse( + dedent` + a,b,c + 1,2,3 + 4,5,6 + 7,8,9 + `, + { columns: true, to_line: 3 }, + (err, records) => { + if (!err) { + records.should.eql([ + { a: "1", b: "2", c: "3" }, + { a: "4", b: "5", c: "6" }, + ]); + } + next(err); + }, + ); + }); + + it("records with quoted line at the end of line", function (next) { + parse( + dedent` + 1,2," + + 3" + 4,5," + 6" + 7,8," + 9" + `, + { to_line: 5 }, + (err, records) => { + if (!err) { + records.should.eql([ + ["1", "2", "\n\n3"], + ["4", "5", "\n6"], + ]); + } + next(err); + }, + ); + }); + + it("records with quoted line in the middle of line", function (next) { + parse( + dedent` + 1,2," + + 3" + 4,5," + 6" + 7,8," + 9" + `, + { to_line: 6 }, + (err, records) => { + if (!err) { + records.should.eql([ + ["1", "2", "\n\n3"], + ["4", "5", "\n6"], + ]); + } + next(err); + }, + ); + }); + + it("not influenced by record delimiter", function (next) { + parse( + dedent` + a,b,c:1,2, + 3:d,e,f:4,5, + 6:g,h,i:7,8, + 9 + `, + { to_line: 2, record_delimiter: ":" }, + (err, records) => { + if (!err) { + records.should.eql([ + ["a", "b", "c"], + ["1", "2", "\n3"], + ["d", "e", "f"], + ]); + } + next(err); + }, + ); + }); +}); diff --git a/packages/csv-parse/test/option.trim.js b/packages/csv-parse/test/option.trim.js index a15d70d9..107d0868 100644 --- a/packages/csv-parse/test/option.trim.js +++ b/packages/csv-parse/test/option.trim.js @@ -1,13 +1,8 @@ import "should"; -import dedent from "dedent"; import { parse } from "../lib/index.js"; describe("Option `trim`", function () { it("validation", function () { - parse("", { trim: true }, () => {}); - parse("", { trim: false }, () => {}); - parse("", { trim: null }, () => {}); - parse("", { trim: undefined }, () => {}); (() => { parse("", { trim: 1 }, () => {}); }).should.throw("Invalid Option: trim must be a boolean, got 1"); @@ -15,295 +10,4 @@ describe("Option `trim`", function () { parse("", { trim: "true" }, () => {}); }).should.throw('Invalid Option: trim must be a boolean, got "true"'); }); - - it("set ltrim", function () { - const parser = parse({ trim: true }); - parser.options.ltrim.should.be.true(); - }); - - it("respect ltrim", function () { - const parser = parse({ trim: true, ltrim: false }); - parser.options.ltrim.should.be.false(); - }); - - it("set rtrim", function () { - const parser = parse({ trim: true }); - parser.options.rtrim.should.be.true(); - }); - - it("respect rtrim", function () { - const parser = parse({ trim: true, rtrim: false }); - parser.options.rtrim.should.be.false(); - }); - - it("interpret whitespaces", function (next) { - parse( - [ - String.fromCharCode(9), // Horizontal tab - String.fromCharCode(10), // NL line feed - String.fromCharCode(12), // NP Form feed - String.fromCharCode(13), // Carriage return - String.fromCharCode(32), // Space - "sth", - ].join(""), - { trim: true, record_delimiter: "|" }, - (err, records) => { - records.should.eql([["sth"]]); - next(); - }, - ); - }); - - it("should ignore the whitespaces immediately preceding and following the delimiter", function (next) { - const records = []; - const parser = parse({ trim: true }); - parser.on("readable", () => { - let d; - while ((d = parser.read())) { - records.push(d); - } - }); - parser.on("end", () => { - records.should.eql([ - ["FIELD 1", "FIELD 2", "FIELD 3", "FIELD 4", "FIELD 5", "FIELD 6"], - ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], - ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], - ]); - next(); - }); - parser.write( - [ - " FIELD 1 , FIELD 2 , FIELD 3,FIELD 4 , FIELD 5,FIELD 6 ", - "20322051544,1979 ,8.8017226E7,ABC , 45 , 2000-01-01", - " 28392898392, 1974,8.8392926E7,DEF , 23 , 2050-11-27", - ].join("\n"), - ); - parser.end(); - }); - - it("should preserve whitespace inside text if there are quotes or not", function (next) { - const records = []; - const parser = parse({ trim: true }); - parser.on("readable", () => { - let d; - while ((d = parser.read())) { - records.push(d); - } - }); - parser.on("end", () => { - records.should.eql([ - ["FIELD 1", "FIELD 2", "FIELD 3", "FIELD 4", "FIELD 5", "FIELD 6"], - ["20322051544", "1979", "8.8017226E7", "ABC DEF", "45", "2000-01-01"], - ["28392898392", "1974", "8.8392926E7", " ABC DEF ", "23", "2050-11-27"], - ]); - next(); - }); - parser.write(dedent` - FIELD 1, FIELD 2, FIELD 3, FIELD 4, FIELD 5, FIELD 6 - 20322051544, 1979, 8.8017226E7, ABC DEF , 45, 2000-01-01 - 28392898392, 1974, 8.8392926E7," ABC DEF ", 23, 2050-11-27 - `); - parser.end(); - }); - - it("with columns and last field is a space", function (next) { - parse( - dedent` - h1,h2,h3, - 1,2,3, - 4,5,6, - `, - { - delimiter: ",", - columns: true, - trim: true, - }, - (err, records) => { - if (!err) { - records.should.eql([ - { h1: "1", h2: "2", h3: "3", "": "" }, - { h1: "4", h2: "5", h3: "6", "": "" }, - ]); - } - next(err); - }, - ); - }); - - it("last field empty", function (next) { - parse("a,", { trim: true }, (err, records) => { - if (!err) { - records.should.eql([["a", ""]]); - } - next(err); - }); - }); - - it("with skip_empty_lines and empty lines at the end", function (next) { - parse( - dedent` - letter,number - a,1 - - b,2 - c,3 - ` + "\n\n", - { - columns: true, - skip_empty_lines: true, - trim: true, - }, - (err, records) => { - if (err) return next(err); - records.should.eql([ - { letter: "a", number: "1" }, - { letter: "b", number: "2" }, - { letter: "c", number: "3" }, - ]); - next(); - }, - ); - }); - - it("write aggressively", function (next) { - const records = []; - const parser = parse({ trim: true }); - parser.on("readable", () => { - let d; - while ((d = parser.read())) { - records.push(d); - } - }); - parser.on("end", () => { - records.should.eql([ - ["Test 0", "", " 0,00 ", '"'], - ["Test 1", "", " 100000,100000 ", '"'], - ["Test 2", "", " 200000,200000 ", '"'], - ["Test 3", "", " 300000,300000 ", '"'], - ["Test 4", "", " 400000,400000 ", '"'], - ["Test 5", "", " 500000,500000 ", '"'], - ["Test 6", "", " 600000,600000 ", '"'], - ["Test 7", "", " 700000,700000 ", '"'], - ["Test 8", "", " 800000,800000 ", '"'], - ["Test 9", "", " 900000,900000 ", '"'], - ]); - next(); - }); - const data = [ - ' Test 0 ,," 0,00 ","""" ', - ' Test 1 ,," 100000,100000 ","""" ', - ' Test 2 ,," 200000,200000 ","""" ', - ' Test 3 ,," 300000,300000 ","""" ', - ' Test 4 ,," 400000,400000 ","""" ', - ' Test 5 ,," 500000,500000 ","""" ', - ' Test 6 ,," 600000,600000 ","""" ', - ' Test 7 ,," 700000,700000 ","""" ', - ' Test 8 ,," 800000,800000 ","""" ', - ' Test 9 ,," 900000,900000 ","""" ', - ].join("\n"); - for (const chr of data) { - parser.write(chr); - } - parser.end(); - }); - - describe("no trim", function () { - it("should preserve surrounding whitespaces", function (next) { - const records = []; - const parser = parse(); - parser.on("readable", () => { - let d; - while ((d = parser.read())) { - records.push(d); - } - }); - parser.on("end", () => { - records.should.eql([ - [ - " FIELD 1 ", - " FIELD 2 ", - " FIELD 3", - "FIELD 4 ", - " FIELD 5", - "FIELD 6 ", - ], - [ - "20322051544", - "1979 ", - "8.8017226E7", - "AB C ", - " 45 ", - " 2000-01-01", - ], - [ - " 28392898392", - " 1974", - "8.8392926E7", - "D EF ", - " 23 ", - " 2050-11-27", - ], - ]); - next(); - }); - parser.write( - [ - " FIELD 1 , FIELD 2 , FIELD 3,FIELD 4 , FIELD 5,FIELD 6 ", - "20322051544,1979 ,8.8017226E7,AB C , 45 , 2000-01-01", - " 28392898392, 1974,8.8392926E7,D EF , 23 , 2050-11-27", - ].join("\n"), - ); - parser.end(); - }); - }); - - describe("options", function () { - it("with encoding", function (next) { - parse( - Buffer.from(" ф , ф ", "utf16le"), - { - encoding: "utf16le", - trim: true, - }, - (err, records) => { - if (!err) { - records.should.eql([["ф", "ф"]]); - } - next(err); - }, - ); - }); - - it("ltrim with encoding", function (next) { - parse( - Buffer.from(" ф , ф ", "utf16le"), - { - encoding: "utf16le", - ltrim: true, - }, - (err, records) => { - if (!err) { - records.should.eql([["ф ", "ф "]]); - } - next(err); - }, - ); - }); - - it("rtrim with encoding", function (next) { - parse( - Buffer.from(" ф , ф ", "utf16le"), - { - encoding: "utf16le", - rtrim: true, - }, - (err, records) => { - if (!err) { - records.should.eql([[" ф", " ф"]]); - } - next(err); - }, - ); - }); - }); }); diff --git a/packages/csv-parse/test/option.trim.ts b/packages/csv-parse/test/option.trim.ts new file mode 100644 index 00000000..7df62767 --- /dev/null +++ b/packages/csv-parse/test/option.trim.ts @@ -0,0 +1,303 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Option `trim`", function () { + it("validation", function () { + parse("", { trim: true }, () => {}); + parse("", { trim: false }, () => {}); + parse("", { trim: null }, () => {}); + parse("", { trim: undefined }, () => {}); + }); + + it("set ltrim", function () { + const parser = parse({ trim: true }); + parser.options.ltrim.should.be.true(); + }); + + it("respect ltrim", function () { + const parser = parse({ trim: true, ltrim: false }); + parser.options.ltrim.should.be.false(); + }); + + it("set rtrim", function () { + const parser = parse({ trim: true }); + parser.options.rtrim.should.be.true(); + }); + + it("respect rtrim", function () { + const parser = parse({ trim: true, rtrim: false }); + parser.options.rtrim.should.be.false(); + }); + + it("interpret whitespaces", function (next) { + parse( + [ + String.fromCharCode(9), // Horizontal tab + String.fromCharCode(10), // NL line feed + String.fromCharCode(12), // NP Form feed + String.fromCharCode(13), // Carriage return + String.fromCharCode(32), // Space + "sth", + ].join(""), + { trim: true, record_delimiter: "|" }, + (err, records) => { + records.should.eql([["sth"]]); + next(); + }, + ); + }); + + it("should ignore the whitespaces immediately preceding and following the delimiter", function (next) { + const records: string[] = []; + const parser = parse({ trim: true }); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([ + ["FIELD 1", "FIELD 2", "FIELD 3", "FIELD 4", "FIELD 5", "FIELD 6"], + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ]); + next(); + }); + parser.write( + [ + " FIELD 1 , FIELD 2 , FIELD 3,FIELD 4 , FIELD 5,FIELD 6 ", + "20322051544,1979 ,8.8017226E7,ABC , 45 , 2000-01-01", + " 28392898392, 1974,8.8392926E7,DEF , 23 , 2050-11-27", + ].join("\n"), + ); + parser.end(); + }); + + it("should preserve whitespace inside text if there are quotes or not", function (next) { + const records: string[] = []; + const parser = parse({ trim: true }); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([ + ["FIELD 1", "FIELD 2", "FIELD 3", "FIELD 4", "FIELD 5", "FIELD 6"], + ["20322051544", "1979", "8.8017226E7", "ABC DEF", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", " ABC DEF ", "23", "2050-11-27"], + ]); + next(); + }); + parser.write(dedent` + FIELD 1, FIELD 2, FIELD 3, FIELD 4, FIELD 5, FIELD 6 + 20322051544, 1979, 8.8017226E7, ABC DEF , 45, 2000-01-01 + 28392898392, 1974, 8.8392926E7," ABC DEF ", 23, 2050-11-27 + `); + parser.end(); + }); + + it("with columns and last field is a space", function (next) { + parse( + dedent` + h1,h2,h3, + 1,2,3, + 4,5,6, + `, + { + delimiter: ",", + columns: true, + trim: true, + }, + (err, records) => { + if (!err) { + records.should.eql([ + { h1: "1", h2: "2", h3: "3", "": "" }, + { h1: "4", h2: "5", h3: "6", "": "" }, + ]); + } + next(err); + }, + ); + }); + + it("last field empty", function (next) { + parse("a,", { trim: true }, (err, records) => { + if (!err) { + records.should.eql([["a", ""]]); + } + next(err); + }); + }); + + it("with skip_empty_lines and empty lines at the end", function (next) { + parse( + dedent` + letter,number + a,1 + + b,2 + c,3 + ` + "\n\n", + { + columns: true, + skip_empty_lines: true, + trim: true, + }, + (err, records) => { + if (err) return next(err); + records.should.eql([ + { letter: "a", number: "1" }, + { letter: "b", number: "2" }, + { letter: "c", number: "3" }, + ]); + next(); + }, + ); + }); + + it("write aggressively", function (next) { + const records: string[] = []; + const parser = parse({ trim: true }); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([ + ["Test 0", "", " 0,00 ", '"'], + ["Test 1", "", " 100000,100000 ", '"'], + ["Test 2", "", " 200000,200000 ", '"'], + ["Test 3", "", " 300000,300000 ", '"'], + ["Test 4", "", " 400000,400000 ", '"'], + ["Test 5", "", " 500000,500000 ", '"'], + ["Test 6", "", " 600000,600000 ", '"'], + ["Test 7", "", " 700000,700000 ", '"'], + ["Test 8", "", " 800000,800000 ", '"'], + ["Test 9", "", " 900000,900000 ", '"'], + ]); + next(); + }); + const data = [ + ' Test 0 ,," 0,00 ","""" ', + ' Test 1 ,," 100000,100000 ","""" ', + ' Test 2 ,," 200000,200000 ","""" ', + ' Test 3 ,," 300000,300000 ","""" ', + ' Test 4 ,," 400000,400000 ","""" ', + ' Test 5 ,," 500000,500000 ","""" ', + ' Test 6 ,," 600000,600000 ","""" ', + ' Test 7 ,," 700000,700000 ","""" ', + ' Test 8 ,," 800000,800000 ","""" ', + ' Test 9 ,," 900000,900000 ","""" ', + ].join("\n"); + for (const chr of data) { + parser.write(chr); + } + parser.end(); + }); + + describe("no trim", function () { + it("should preserve surrounding whitespaces", function (next) { + const records: string[] = []; + const parser = parse(); + parser.on("readable", () => { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("end", () => { + records.should.eql([ + [ + " FIELD 1 ", + " FIELD 2 ", + " FIELD 3", + "FIELD 4 ", + " FIELD 5", + "FIELD 6 ", + ], + [ + "20322051544", + "1979 ", + "8.8017226E7", + "AB C ", + " 45 ", + " 2000-01-01", + ], + [ + " 28392898392", + " 1974", + "8.8392926E7", + "D EF ", + " 23 ", + " 2050-11-27", + ], + ]); + next(); + }); + parser.write( + [ + " FIELD 1 , FIELD 2 , FIELD 3,FIELD 4 , FIELD 5,FIELD 6 ", + "20322051544,1979 ,8.8017226E7,AB C , 45 , 2000-01-01", + " 28392898392, 1974,8.8392926E7,D EF , 23 , 2050-11-27", + ].join("\n"), + ); + parser.end(); + }); + }); + + describe("options", function () { + it("with encoding", function (next) { + parse( + Buffer.from(" ф , ф ", "utf16le"), + { + encoding: "utf16le", + trim: true, + }, + (err, records) => { + if (!err) { + records.should.eql([["ф", "ф"]]); + } + next(err); + }, + ); + }); + + it("ltrim with encoding", function (next) { + parse( + Buffer.from(" ф , ф ", "utf16le"), + { + encoding: "utf16le", + ltrim: true, + }, + (err, records) => { + if (!err) { + records.should.eql([["ф ", "ф "]]); + } + next(err); + }, + ); + }); + + it("rtrim with encoding", function (next) { + parse( + Buffer.from(" ф , ф ", "utf16le"), + { + encoding: "utf16le", + rtrim: true, + }, + (err, records) => { + if (!err) { + records.should.eql([[" ф", " ф"]]); + } + next(err); + }, + ); + }); + }); +}); diff --git a/packages/csv-parse/test/options.js b/packages/csv-parse/test/options.js index e2f5fb58..a347ade1 100644 --- a/packages/csv-parse/test/options.js +++ b/packages/csv-parse/test/options.js @@ -1,28 +1,9 @@ import "should"; -import dedent from "dedent"; import { parse } from "../lib/index.js"; describe("Options", function () { - it("are cloned", function (next) { - const options = { quote: false }; - parse( - dedent` - FIELD_1,FIELD_2 - 20322051544,1979 - 28392898392,1974 - `, - options, - (err) => { - if (err) return next(err); - (options.quote === false).should.be.true(); - next(); - }, - ); - }); - - it("underscore options", function () { + it("camel case options are not disposed", function () { const parser = parse({ recordDelimiter: ":" }); - parser.options.record_delimiter.toString().should.eql(":"); (parser.options.recordDelimiter === undefined).should.be.true(); }); }); diff --git a/packages/csv-parse/test/options.ts b/packages/csv-parse/test/options.ts new file mode 100644 index 00000000..0437ca2a --- /dev/null +++ b/packages/csv-parse/test/options.ts @@ -0,0 +1,27 @@ +import "should"; +import dedent from "dedent"; +import { parse } from "../lib/index.js"; + +describe("Options", function () { + it("are cloned", function (next) { + const options = { quote: false }; + parse( + dedent` + FIELD_1,FIELD_2 + 20322051544,1979 + 28392898392,1974 + `, + options, + (err) => { + if (err) return next(err); + (options.quote === false).should.be.true(); + next(); + }, + ); + }); + + it("camelcase options are converted to underscore", function () { + const parser = parse({ recordDelimiter: ":" }); + parser.options.record_delimiter.toString().should.eql(":"); + }); +}); From e85beb308dba6e7f7c94085cfcf2819dac3828b8 Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 13 Jun 2025 12:13:44 +0200 Subject: [PATCH 36/49] refactor(csv-parse): re-order error codes --- packages/csv-parse/lib/index.d.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/csv-parse/lib/index.d.ts b/packages/csv-parse/lib/index.d.ts index 8fadf007..513335f8 100644 --- a/packages/csv-parse/lib/index.d.ts +++ b/packages/csv-parse/lib/index.d.ts @@ -435,26 +435,26 @@ export interface Options { } export type CsvErrorCode = + | "CSV_INVALID_ARGUMENT" + | "CSV_INVALID_CLOSING_QUOTE" + | "CSV_INVALID_COLUMN_DEFINITION" + | "CSV_INVALID_COLUMN_MAPPING" | "CSV_INVALID_OPTION_BOM" | "CSV_INVALID_OPTION_CAST" | "CSV_INVALID_OPTION_CAST_DATE" | "CSV_INVALID_OPTION_COLUMNS" - | "CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME" | "CSV_INVALID_OPTION_COMMENT" | "CSV_INVALID_OPTION_DELIMITER" + | "CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME" | "CSV_INVALID_OPTION_ON_RECORD" - | "CSV_INVALID_CLOSING_QUOTE" - | "INVALID_OPENING_QUOTE" - | "CSV_INVALID_COLUMN_MAPPING" - | "CSV_INVALID_ARGUMENT" - | "CSV_INVALID_COLUMN_DEFINITION" | "CSV_MAX_RECORD_SIZE" | "CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE" + | "CSV_OPTION_COLUMNS_MISSING_NAME" | "CSV_QUOTE_NOT_CLOSED" | "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH" | "CSV_RECORD_INCONSISTENT_COLUMNS" - | "CSV_OPTION_COLUMNS_MISSING_NAME" - | "CSV_UNKNOWN_ERROR"; + | "CSV_UNKNOWN_ERROR" + | "INVALID_OPENING_QUOTE"; export class CsvError extends Error { readonly code: CsvErrorCode; From 388daf860e40651e88f5853f0071386c1e6fab43 Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 13 Jun 2025 12:14:33 +0200 Subject: [PATCH 37/49] test(csv-parse): api ts conversion --- packages/csv-parse/test/api.arguments.js | 146 +---------------- packages/csv-parse/test/api.arguments.ts | 152 ++++++++++++++++++ .../test/{api.error.js => api.error.ts} | 15 +- .../test/{api.info.js => api.info.ts} | 4 + ...tream.destroy.js => api.stream.destroy.ts} | 24 +-- ....stream.events.js => api.stream.events.ts} | 5 +- ...eam.finished.js => api.stream.finished.ts} | 2 +- ...eam.iterator.js => api.stream.iterator.ts} | 0 ...{api.stream.pipe.js => api.stream.pipe.ts} | 6 +- ...pi.stream.write.js => api.stream.write.ts} | 8 +- 10 files changed, 193 insertions(+), 169 deletions(-) create mode 100644 packages/csv-parse/test/api.arguments.ts rename packages/csv-parse/test/{api.error.js => api.error.ts} (63%) rename packages/csv-parse/test/{api.info.js => api.info.ts} (86%) rename packages/csv-parse/test/{api.stream.destroy.js => api.stream.destroy.ts} (78%) rename packages/csv-parse/test/{api.stream.events.js => api.stream.events.ts} (95%) rename packages/csv-parse/test/{api.stream.finished.js => api.stream.finished.ts} (98%) rename packages/csv-parse/test/{api.stream.iterator.js => api.stream.iterator.ts} (100%) rename packages/csv-parse/test/{api.stream.pipe.js => api.stream.pipe.ts} (93%) rename packages/csv-parse/test/{api.stream.write.js => api.stream.write.ts} (88%) diff --git a/packages/csv-parse/test/api.arguments.js b/packages/csv-parse/test/api.arguments.js index f5856364..ea81a563 100644 --- a/packages/csv-parse/test/api.arguments.js +++ b/packages/csv-parse/test/api.arguments.js @@ -1,121 +1,8 @@ import "should"; -import { generate } from "csv-generate"; -import { parse, Parser } from "../lib/index.js"; +import { parse } from "../lib/index.js"; describe("API arguments", function () { - it("exports Parser class", function () { - Parser.should.be.a.Function; - }); - - describe("0 arg", function () { - it("no arguments", function (next) { - const records = []; - const parser = parse(); - parser.on("readable", function () { - let d; - while ((d = this.read())) { - records.push(d); - } - }); - parser.on("err", (err) => { - next(err); - }); - parser.on("end", () => { - records.should.eql([ - ["field_1", "field_2"], - ["value 1", "value 2"], - ]); - next(); - }); - parser.write("field_1,field_2\nvalue 1,value 2"); - parser.end(); - }); - }); - - describe("1 arg", function () { - it("callback:function; pipe data and get result in callback", function (next) { - generate({ length: 2, seed: 1, columns: 2, fixed_size: true }).pipe( - parse((err, records) => { - records.should.eql([ - ["OMH", "ONKCHhJmjadoA"], - ["D", "GeACHiN"], - ]); - next(err); - }), - ); - }); - - it("options:object; write data and read stream", function (next) { - const records = []; - const parser = parse({ columns: true }); - parser.on("readable", function () { - let d; - while ((d = parser.read())) { - records.push(d); - } - }); - parser.on("err", (err) => { - next(err); - }); - parser.on("end", () => { - records.should.eql([{ field_1: "value 1", field_2: "value 2" }]); - next(); - }); - parser.write("field_1,field_2\nvalue 1,value 2"); - parser.end(); - }); - }); - describe("2 args", function () { - it("data:string, options:object; read stream", function (next) { - const records = []; - const parser = parse("field_1,field_2\nvalue 1,value 2", { - columns: true, - }); - parser.on("readable", function () { - let d; - while ((d = parser.read())) { - records.push(d); - } - }); - parser.on("err", (err) => { - next(err); - }); - parser.on("end", () => { - records.should.eql([{ field_1: "value 1", field_2: "value 2" }]); - next(); - }); - }); - - it("options:object, callback:function; write data and get result in callback", function (next) { - const parser = parse({ columns: true }, (err, records) => { - records.should.eql([{ field_1: "value 1", field_2: "value 2" }]); - next(err); - }); - parser.write("field_1,field_2\nvalue 1,value 2"); - parser.end(); - }); - - it("data:string, callback:function", function (next) { - parse("value a,value b\nvalue 1,value 2", (err, records) => { - records.should.eql([ - ["value a", "value b"], - ["value 1", "value 2"], - ]); - next(err); - }); - }); - - it("data:buffer, callback:function", function (next) { - parse(Buffer.from("value a,value b\nvalue 1,value 2"), (err, records) => { - records.should.eql([ - ["value a", "value b"], - ["value 1", "value 2"], - ]); - next(err); - }); - }); - it("data:undefined, options:object", function () { (() => { parse(undefined, {}); @@ -155,28 +42,6 @@ describe("API arguments", function () { }); describe("3 args", function () { - it("data:string, options:object, callback:function", function (next) { - parse( - "field_1,field_2\nvalue 1,value 2", - { columns: true }, - (err, records) => { - records.should.eql([{ field_1: "value 1", field_2: "value 2" }]); - next(err); - }, - ); - }); - - it("data:buffer, options:object, callback:function", function (next) { - parse( - Buffer.from("field_1,field_2\nvalue 1,value 2"), - { columns: true }, - (err, records) => { - records.should.eql([{ field_1: "value 1", field_2: "value 2" }]); - next(err); - }, - ); - }); - it("data:undefined, options:object, callback:function", function () { (() => { parse(undefined, { columns: true }, () => {}); @@ -185,14 +50,5 @@ describe("API arguments", function () { code: "CSV_INVALID_ARGUMENT", }); }); - - it("data:string, options:object, callback:undefined", function () { - (() => { - parse("field_1,field_2\nvalue 1,value 2", { columns: true }, undefined); - }).should.throw({ - message: "Invalid argument: got undefined at index 2", - code: "CSV_INVALID_ARGUMENT", - }); - }); }); }); diff --git a/packages/csv-parse/test/api.arguments.ts b/packages/csv-parse/test/api.arguments.ts new file mode 100644 index 00000000..c79194e6 --- /dev/null +++ b/packages/csv-parse/test/api.arguments.ts @@ -0,0 +1,152 @@ +import "should"; +import { generate } from "csv-generate"; +import { parse, Parser } from "../lib/index.js"; + +describe("API arguments", function () { + it("exports Parser class", function () { + Parser.should.be.a.Function; + }); + + describe("0 arg", function () { + it("no arguments", function (next) { + const records: string[] = []; + const parser = parse(); + parser.on("readable", function () { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("err", (err) => { + next(err); + }); + parser.on("end", () => { + records.should.eql([ + ["field_1", "field_2"], + ["value 1", "value 2"], + ]); + next(); + }); + parser.write("field_1,field_2\nvalue 1,value 2"); + parser.end(); + }); + }); + + describe("1 arg", function () { + it("callback:function; pipe data and get result in callback", function (next) { + generate({ length: 2, seed: 1, columns: 2, fixed_size: true }).pipe( + parse((err, records) => { + records.should.eql([ + ["OMH", "ONKCHhJmjadoA"], + ["D", "GeACHiN"], + ]); + next(err); + }), + ); + }); + + it("options:object; write data and read stream", function (next) { + const records: string[] = []; + const parser = parse({ columns: true }); + parser.on("readable", function () { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("err", (err) => { + next(err); + }); + parser.on("end", () => { + records.should.eql([{ field_1: "value 1", field_2: "value 2" }]); + next(); + }); + parser.write("field_1,field_2\nvalue 1,value 2"); + parser.end(); + }); + }); + + describe("2 args", function () { + it("data:string, options:object; read stream", function (next) { + const records: string[] = []; + const parser = parse("field_1,field_2\nvalue 1,value 2", { + columns: true, + }); + parser.on("readable", function () { + let d; + while ((d = parser.read())) { + records.push(d); + } + }); + parser.on("err", (err) => { + next(err); + }); + parser.on("end", () => { + records.should.eql([{ field_1: "value 1", field_2: "value 2" }]); + next(); + }); + }); + + it("options:object, callback:function; write data and get result in callback", function (next) { + const parser = parse({ columns: true }, (err, records) => { + records.should.eql([{ field_1: "value 1", field_2: "value 2" }]); + next(err); + }); + parser.write("field_1,field_2\nvalue 1,value 2"); + parser.end(); + }); + + it("data:string, callback:function", function (next) { + parse("value a,value b\nvalue 1,value 2", (err, records) => { + records.should.eql([ + ["value a", "value b"], + ["value 1", "value 2"], + ]); + next(err); + }); + }); + + it("data:buffer, callback:function", function (next) { + parse(Buffer.from("value a,value b\nvalue 1,value 2"), (err, records) => { + records.should.eql([ + ["value a", "value b"], + ["value 1", "value 2"], + ]); + next(err); + }); + }); + }); + + describe("3 args", function () { + it("data:string, options:object, callback:function", function (next) { + parse( + "field_1,field_2\nvalue 1,value 2", + { columns: true }, + (err, records) => { + records.should.eql([{ field_1: "value 1", field_2: "value 2" }]); + next(err); + }, + ); + }); + + it("data:buffer, options:object, callback:function", function (next) { + parse( + Buffer.from("field_1,field_2\nvalue 1,value 2"), + { columns: true }, + (err, records) => { + records.should.eql([{ field_1: "value 1", field_2: "value 2" }]); + next(err); + }, + ); + }); + + it("data:string, options:object, callback:undefined", function () { + (() => { + parse("field_1,field_2\nvalue 1,value 2", { columns: true }, undefined); + }).should.throw({ + message: "Invalid argument: got undefined at index 2", + code: "CSV_INVALID_ARGUMENT", + }); + }); + }); +}); diff --git a/packages/csv-parse/test/api.error.js b/packages/csv-parse/test/api.error.ts similarity index 63% rename from packages/csv-parse/test/api.error.js rename to packages/csv-parse/test/api.error.ts index f3520a52..1b0b50a0 100644 --- a/packages/csv-parse/test/api.error.js +++ b/packages/csv-parse/test/api.error.ts @@ -1,26 +1,31 @@ import "should"; -import { parse, CsvError } from "../lib/index.js"; +import { parse, CsvError, normalize_options } from "../lib/index.js"; import { assert_error } from "./api.assert_error.js"; describe("API error", function () { it("set code", function () { - const err = new CsvError("MY_CODE", ["a", "b", "c"]); - err.code.should.eql("MY_CODE"); + const err = new CsvError("CSV_UNKNOWN_ERROR", ["a", "b", "c"]); + err.code.should.eql("CSV_UNKNOWN_ERROR"); }); it("convert array message to string", function () { - const err = new CsvError("MY_CODE", ["a", "b", "c"]); + const err = new CsvError("CSV_UNKNOWN_ERROR", ["a", "b", "c"]); err.message.should.eql("a b c"); }); it("set additional context information", function () { - const err = new CsvError("MY_CODE", "msg", {}, { a: 1, b: 2 }); + const options = normalize_options({}); + const err = new CsvError("CSV_UNKNOWN_ERROR", "msg", options, { + a: 1, + b: 2, + }); err.a.should.eql(1); err.b.should.eql(2); }); it("errors are enriched by context", function () { parse('a"b', (err) => { + if (!err) throw Error("Invalid assertion"); assert_error(err, { message: /Invalid Opening Quote/, code: "INVALID_OPENING_QUOTE", diff --git a/packages/csv-parse/test/api.info.js b/packages/csv-parse/test/api.info.ts similarity index 86% rename from packages/csv-parse/test/api.info.js rename to packages/csv-parse/test/api.info.ts index 84bdf8d6..90f81e67 100644 --- a/packages/csv-parse/test/api.info.js +++ b/packages/csv-parse/test/api.info.ts @@ -4,6 +4,7 @@ import { parse } from "../lib/index.js"; describe("API info", function () { it("is exported in the callback on error", function (next) { parse("1,2,3\na,b,", (err, records, info) => { + if (!info) return next(Error("Invalid assessment")); info.should.eql({ bytes: 10, columns: false, @@ -19,6 +20,7 @@ describe("API info", function () { it("is exported in the callback on success", function (next) { parse("1,2,3\na,b,c", (err, records, info) => { + if (!info) return next(Error("Invalid assessment")); info.should.eql({ bytes: 11, columns: false, @@ -34,6 +36,7 @@ describe("API info", function () { it("discovered columns are included", function (next) { parse("a,b,c\n1,2,3", { columns: true }, (err, records, info) => { + if (!info) return next(Error("Invalid assessment")); info.should.eql({ bytes: 11, comment_lines: 0, @@ -49,6 +52,7 @@ describe("API info", function () { it("with multiline records", function (next) { parse('a,b,c\nd,"e\n",f\ng,h,i', (err, records, info) => { + if (!info) return next(Error("Invalid assessment")); info.should.eql({ bytes: 20, columns: false, diff --git a/packages/csv-parse/test/api.stream.destroy.js b/packages/csv-parse/test/api.stream.destroy.ts similarity index 78% rename from packages/csv-parse/test/api.stream.destroy.js rename to packages/csv-parse/test/api.stream.destroy.ts index f57e3bc8..5b01fffe 100644 --- a/packages/csv-parse/test/api.stream.destroy.js +++ b/packages/csv-parse/test/api.stream.destroy.ts @@ -2,13 +2,19 @@ import fs from "fs"; import os from "os"; import "should"; import { generate } from "csv-generate"; -import { parse } from "../lib/index.js"; +import { parse, Parser } from "../lib/index.js"; + +interface ParserPrivate { + _readableState: { + destroyed: boolean; + }; +} describe("API destroy", function () { it("inside readable with input string", function (next) { - const parser = parse(); + const parser = parse() as Parser & ParserPrivate; parser.on("readable", function () { - while (this.read()) { + while (parser.read()) { parser.destroy(Error("Catch me")); } }); @@ -30,9 +36,9 @@ describe("API destroy", function () { it("inside readable with fs input stream", function (next) { fs.writeFile(`${os.tmpdir()}/data.csv`, "a,b,c\n1,2,3", (err) => { if (err) return next(err); - const parser = parse(); + const parser = parse() as Parser & ParserPrivate; parser.on("readable", function () { - while (this.read()) { + while (parser.read()) { parser.destroy(Error("Catch me")); } }); @@ -50,17 +56,17 @@ describe("API destroy", function () { it("inside readable with generator input stream", function (next) { // csv-generate emit data synchronously, it cant detect error on time - const parser = parse(); + const parser = parse() as Parser & ParserPrivate; parser.on("readable", function () { - while (this.read()) { + while (parser.read()) { parser.destroy(Error("Catch me")); } }); parser.on("error", (err) => { err.message.should.eql("Catch me"); parser._readableState.destroyed.should.be.true(); - const version = parseInt(/^v(\d+)/.exec(process.version)[1], 10); - if (version >= 14) next(); + const version = /^v(\d+)/.exec(process.version); + if (version && parseInt(version[1], 10) >= 14) next(); }); parser.on("end", () => { next(); diff --git a/packages/csv-parse/test/api.stream.events.js b/packages/csv-parse/test/api.stream.events.ts similarity index 95% rename from packages/csv-parse/test/api.stream.events.js rename to packages/csv-parse/test/api.stream.events.ts index f51dd392..5c8f0a7c 100644 --- a/packages/csv-parse/test/api.stream.events.js +++ b/packages/csv-parse/test/api.stream.events.ts @@ -4,7 +4,7 @@ import { assert_error } from "./api.assert_error.js"; describe("API events", function () { it("emit `readable` event", function (next) { - const records = []; + const records: string[] = []; const parser = parse(); parser.on("readable", () => { let record; @@ -24,7 +24,7 @@ describe("API events", function () { }); it("emit `data` event", function (next) { - const records = []; + const records: string[] = []; const parser = parse(); parser.on("data", (record) => { records.push(record); @@ -43,6 +43,7 @@ describe("API events", function () { it("ensure error in _transform is called once", function (next) { const data = ' x " a b",x " c d"\nx " e f", x " g h"'; const parser = parse((err) => { + if (!err) return next(Error("Invalid assessment")); assert_error(err, { message: 'Invalid Opening Quote: a quote is found on field 0 at line 1, value is " x "', diff --git a/packages/csv-parse/test/api.stream.finished.js b/packages/csv-parse/test/api.stream.finished.ts similarity index 98% rename from packages/csv-parse/test/api.stream.finished.js rename to packages/csv-parse/test/api.stream.finished.ts index 6704f030..43bae666 100644 --- a/packages/csv-parse/test/api.stream.finished.js +++ b/packages/csv-parse/test/api.stream.finished.ts @@ -39,7 +39,7 @@ describe("API stream.finished", function () { // See https://github.com/adaltas/node-csv/issues/333 // See https://github.com/adaltas/node-csv/issues/410 // Prevent `Error [ERR_STREAM_PREMATURE_CLOSE]: Premature close` - const records = []; + const records: string[] = []; const reader = new Readable({ highWaterMark: 10, read: function (size) { diff --git a/packages/csv-parse/test/api.stream.iterator.js b/packages/csv-parse/test/api.stream.iterator.ts similarity index 100% rename from packages/csv-parse/test/api.stream.iterator.js rename to packages/csv-parse/test/api.stream.iterator.ts diff --git a/packages/csv-parse/test/api.stream.pipe.js b/packages/csv-parse/test/api.stream.pipe.ts similarity index 93% rename from packages/csv-parse/test/api.stream.pipe.js rename to packages/csv-parse/test/api.stream.pipe.ts index 863af3e6..3c187065 100644 --- a/packages/csv-parse/test/api.stream.pipe.js +++ b/packages/csv-parse/test/api.stream.pipe.ts @@ -2,13 +2,13 @@ import "should"; import fs from "fs"; import { Readable } from "stream"; import { generate } from "csv-generate"; -import { parse } from "../lib/index.js"; +import { parse, CsvError } from "../lib/index.js"; describe("API pipe", function () { it("piping in and reading out", function (next) { let finished = false; const parser = parse(); - const records = []; + const records: string[] = []; const generator = generate({ length: 2, seed: 1, @@ -63,7 +63,7 @@ describe("API pipe", function () { }); const rs = fs.createReadStream("/doesnotexist"); rs.on("error", (err) => { - err.code.should.eql("ENOENT"); + (err as CsvError).code.should.eql("ENOENT"); next(); }); rs.pipe(parser); diff --git a/packages/csv-parse/test/api.stream.write.js b/packages/csv-parse/test/api.stream.write.ts similarity index 88% rename from packages/csv-parse/test/api.stream.write.js rename to packages/csv-parse/test/api.stream.write.ts index 6e8c5c0c..5424aac7 100644 --- a/packages/csv-parse/test/api.stream.write.js +++ b/packages/csv-parse/test/api.stream.write.ts @@ -3,7 +3,7 @@ import { parse } from "../lib/index.js"; describe("API write", function () { it("string randomly splited", function (next) { - const records = []; + const records: string[] = []; const parser = parse(); parser.on("readable", () => { let d; @@ -28,10 +28,10 @@ describe("API write", function () { }); let buffer = ""; for (let i = 0; i < 10; i++) { - buffer += "".concat(`Test ${i}`, ",", i, ",", '""""', "\n"); + buffer += "".concat(`Test ${i}`, ",", `${i}`, ",", '""""', "\n"); if (buffer.length > 250) { - parser.write(buffer.substr(0, 250)); - buffer = buffer.substr(250); + parser.write(buffer.substring(0, 250)); + buffer = buffer.substring(250); } } parser.write(buffer); From 24af4615343bf6f167adf2226d6906cf0e2cf89d Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 13 Jun 2025 12:16:02 +0200 Subject: [PATCH 38/49] feat(csv-parse): input as Uint8Array (fix #458) --- packages/csv-parse/lib/index.d.ts | 9 ++++++--- packages/csv-parse/lib/sync.d.ts | 9 ++++++--- packages/csv-parse/test/{api.sync.js => api.sync.ts} | 3 ++- 3 files changed, 14 insertions(+), 7 deletions(-) rename packages/csv-parse/test/{api.sync.js => api.sync.ts} (95%) diff --git a/packages/csv-parse/lib/index.d.ts b/packages/csv-parse/lib/index.d.ts index 513335f8..07b6ec47 100644 --- a/packages/csv-parse/lib/index.d.ts +++ b/packages/csv-parse/lib/index.d.ts @@ -473,12 +473,12 @@ type OptionsWithColumns = Omit, "columns"> & { }; declare function parse( - input: string | Buffer, + input: string | Buffer | Uint8Array, options: OptionsWithColumns, callback?: Callback, ): Parser; declare function parse( - input: string | Buffer, + input: string | Buffer | Uint8Array, options: Options, callback?: Callback, ): Parser; @@ -489,7 +489,10 @@ declare function parse( ): Parser; declare function parse(options: Options, callback?: Callback): Parser; -declare function parse(input: string | Buffer, callback?: Callback): Parser; +declare function parse( + input: string | Buffer | Uint8Array, + callback?: Callback, +): Parser; declare function parse(callback?: Callback): Parser; // export default parse; diff --git a/packages/csv-parse/lib/sync.d.ts b/packages/csv-parse/lib/sync.d.ts index 015bfceb..035fb595 100644 --- a/packages/csv-parse/lib/sync.d.ts +++ b/packages/csv-parse/lib/sync.d.ts @@ -5,11 +5,14 @@ type OptionsWithColumns = Omit, "columns"> & { }; declare function parse( - input: Buffer | string, + input: Buffer | string | Uint8Array, options: OptionsWithColumns, ): T[]; -declare function parse(input: Buffer | string, options: Options): string[][]; -declare function parse(input: Buffer | string): string[][]; +declare function parse( + input: Buffer | string | Uint8Array, + options: Options, +): string[][]; +declare function parse(input: Buffer | string | Uint8Array): string[][]; // export default parse; export { parse }; diff --git a/packages/csv-parse/test/api.sync.js b/packages/csv-parse/test/api.sync.ts similarity index 95% rename from packages/csv-parse/test/api.sync.js rename to packages/csv-parse/test/api.sync.ts index c85d8eec..d04a3f6e 100644 --- a/packages/csv-parse/test/api.sync.js +++ b/packages/csv-parse/test/api.sync.ts @@ -57,7 +57,8 @@ describe("API sync", function () { parse("A,B\nB\nC,K", { trim: true }); throw Error("Error not catched"); } catch (err) { - err.message.should.eql( + if (!err) throw Error("Invalid assessment"); + (err as Error).message.should.eql( "Invalid Record Length: expect 2, got 1 on line 2", ); } From a47badf599211ad12c4dd1ffac800adb3da393b7 Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 13 Jun 2025 12:27:00 +0200 Subject: [PATCH 39/49] feat(csv-parse): use ts unknown instead of any when possible --- packages/csv-parse/lib/index.d.ts | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/csv-parse/lib/index.d.ts b/packages/csv-parse/lib/index.d.ts index 07b6ec47..403243a6 100644 --- a/packages/csv-parse/lib/index.d.ts +++ b/packages/csv-parse/lib/index.d.ts @@ -10,14 +10,16 @@ export type Callback = ( info?: Info, ) => void; -export interface Parser extends stream.Transform {} +// export interface Parser extends stream.Transform {} -export class Parser { +// export class Parser extends stream.Transform { +export class Parser extends stream.Transform { constructor(options: Options); - __push(line: any): any; + // __push(line: T): CsvError | undefined; + __push(line: any): CsvError | undefined; - __write(chars: any, end: any, callback: any): any; + // __write(chars: any, end: any, callback: any): any; readonly options: OptionsNormalized; @@ -68,7 +70,10 @@ export interface CastingContext { readonly invalid_field_length: number; } -export type CastingFunction = (value: string, context: CastingContext) => any; +export type CastingFunction = ( + value: string, + context: CastingContext, +) => unknown; export type CastingDateFunction = ( value: string, @@ -464,7 +469,7 @@ export class CsvError extends Error { code: CsvErrorCode, message: string | string[], options?: OptionsNormalized, - ...contexts: any[] + ...contexts: unknown[] ); } From f0b31fba69f0fd8b37d54b2accfa50639626a997 Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 13 Jun 2025 14:55:25 +0200 Subject: [PATCH 40/49] test(csv-stringify): option ts conversion --- packages/csv-stringify/lib/index.d.ts | 84 ++++- packages/csv-stringify/lib/sync.d.ts | 1 + packages/csv-stringify/test/option.bom.js | 66 ---- packages/csv-stringify/test/option.bom.ts | 73 ++++ packages/csv-stringify/test/option.cast.js | 299 ----------------- packages/csv-stringify/test/option.cast.ts | 311 ++++++++++++++++++ packages/csv-stringify/test/option.columns.js | 129 -------- packages/csv-stringify/test/option.columns.ts | 135 ++++++++ .../csv-stringify/test/option.delimiter.js | 77 ----- .../csv-stringify/test/option.delimiter.ts | 84 +++++ .../test/{option.eof.js => option.eof.ts} | 0 packages/csv-stringify/test/option.escape.js | 78 ----- packages/csv-stringify/test/option.escape.ts | 85 +++++ .../test/option.escape_formulas.js | 73 ---- .../test/option.escape_formulas.ts | 77 +++++ .../{option.header.js => option.header.ts} | 1 + packages/csv-stringify/test/option.quote.js | 221 ------------- packages/csv-stringify/test/option.quote.ts | 228 +++++++++++++ .../{option.quoted.js => option.quoted.ts} | 0 ...quoted_empty.js => option.quoted_empty.ts} | 0 ...quoted_match.js => option.quoted_match.ts} | 0 ...oted_string.js => option.quoted_string.ts} | 0 .../test/option.record_delimiter.js | 123 ------- .../test/option.record_delimiter.ts | 129 ++++++++ 24 files changed, 1205 insertions(+), 1069 deletions(-) create mode 100644 packages/csv-stringify/test/option.bom.ts create mode 100644 packages/csv-stringify/test/option.cast.ts create mode 100644 packages/csv-stringify/test/option.columns.ts create mode 100644 packages/csv-stringify/test/option.delimiter.ts rename packages/csv-stringify/test/{option.eof.js => option.eof.ts} (100%) create mode 100644 packages/csv-stringify/test/option.escape.ts create mode 100644 packages/csv-stringify/test/option.escape_formulas.ts rename packages/csv-stringify/test/{option.header.js => option.header.ts} (99%) create mode 100644 packages/csv-stringify/test/option.quote.ts rename packages/csv-stringify/test/{option.quoted.js => option.quoted.ts} (100%) rename packages/csv-stringify/test/{option.quoted_empty.js => option.quoted_empty.ts} (100%) rename packages/csv-stringify/test/{option.quoted_match.js => option.quoted_match.ts} (100%) rename packages/csv-stringify/test/{option.quoted_string.js => option.quoted_string.ts} (100%) create mode 100644 packages/csv-stringify/test/option.record_delimiter.ts diff --git a/packages/csv-stringify/lib/index.d.ts b/packages/csv-stringify/lib/index.d.ts index 82dab660..4ce56ced 100644 --- a/packages/csv-stringify/lib/index.d.ts +++ b/packages/csv-stringify/lib/index.d.ts @@ -27,7 +27,7 @@ export type CastReturnObject = { value: string } & Pick< export type Cast = ( value: T, context: CastingContext, -) => string | CastReturnObject; +) => string | null | CastReturnObject; export type PlainObject = Record; export type Input = any[]; @@ -41,6 +41,84 @@ export interface CastingContext { readonly index: number; readonly records: number; } + +export interface OptionsNormalized extends stream.TransformOptions { + /** + * Prepend the byte order mark (BOM) to the output stream. + */ + bom: boolean; + /** + * Key-value object which defines custom cast for certain data types + */ + cast?: { + boolean?: Cast; + date?: Cast; + number?: Cast; + bigint?: Cast; + /** + * Custom formatter for generic object values + */ + object?: Cast>; + string?: Cast; + }; + /** + * List of fields, applied when `transform` returns an object + * order matters + * read the transformer documentation for additionnal information + * columns are auto discovered in the first record when the user write objects + * can refer to nested properties of the input JSON + * see the "header" option on how to print columns names on the first line + */ + columns: ReadonlyArray | PlainObject; + /** + * Set the field delimiter, one character only, defaults to a comma. + */ + delimiter: string; + /** + * Add the value of "options.RecordDelimiter" on the last line, default to true. + */ + eof: boolean; + /** + * Defaults to the escape read option. + */ + escape: string; + /** + * Display the column names on the first line if the columns option is provided or discovered. + */ + header: boolean; + /** + * The quote characters, defaults to the ", an empty quote value will preserve the original field. + */ + quote: string; + /** + * Boolean, default to false, quote all the non-empty fields even if not required. + */ + quoted: boolean; + + /** + * Boolean, no default, quote empty fields and overrides `quoted_string` on empty strings when defined. + */ + quoted_empty: boolean; + /** + * String or RegExp, no default, quote all fields matching a regular expression. + */ + quoted_match: null | (string | RegExp)[]; + /** + * Boolean, default to false, quote all fields of type string even if not required. + */ + quoted_string: boolean; + /** + * String used to delimit record rows or a special value + * special values are 'unix', 'mac', 'windows', 'ascii', 'unicode' + * defaults to '\n'. + */ + record_delimiter: RecordDelimiter; + /** + * Boolean, default to false, if true, fields that begin with `=`, `+`, `-`, `@`, `\t`, or `\r` will be prepended with a `'` to protected agains csv injection attacks + */ + escape_formulas: boolean; +} + export interface Options extends stream.TransformOptions { /** * Prepend the byte order mark (BOM) to the output stream. @@ -101,7 +179,7 @@ export interface Options extends stream.TransformOptions { /** * String or RegExp, no default, quote all fields matching a regular expression. */ - quoted_match?: string | RegExp | (string | RegExp)[]; + quoted_match?: null | string | RegExp | (string | RegExp)[]; /** * Boolean, default to false, quote all fields of type string even if not required. */ @@ -120,7 +198,7 @@ export interface Options extends stream.TransformOptions { export class Stringifier extends stream.Transform { constructor(options: Options); - readonly options: Options; + readonly options: OptionsNormalized; } declare function stringify(callback?: Callback): Stringifier; diff --git a/packages/csv-stringify/lib/sync.d.ts b/packages/csv-stringify/lib/sync.d.ts index 097e2774..9e6140e9 100644 --- a/packages/csv-stringify/lib/sync.d.ts +++ b/packages/csv-stringify/lib/sync.d.ts @@ -13,4 +13,5 @@ export { ColumnOption, CastingContext, Options, + OptionsNormalized, } from "./index.js"; diff --git a/packages/csv-stringify/test/option.bom.js b/packages/csv-stringify/test/option.bom.js index 82e6a882..36e431af 100644 --- a/packages/csv-stringify/test/option.bom.js +++ b/packages/csv-stringify/test/option.bom.js @@ -13,43 +13,6 @@ describe("Option `bom`", function () { }); }); - it("empty", function (next) { - stringify([], { bom: true }, (err, data) => { - data.should.eql(Buffer.from([239, 187, 191]).toString()); - next(); - }); - }); - - it("value is `true`", function (next) { - stringify( - [ - { - value: "ok", - }, - ], - { bom: true }, - (err, data) => { - data.should.eql(Buffer.from([239, 187, 191]).toString() + "ok\n"); - next(); - }, - ); - }); - - it("value is `false`", function (next) { - stringify( - [ - { - value: "ok", - }, - ], - { bom: false }, - (err, data) => { - data.should.eql("ok\n"); - next(); - }, - ); - }); - describe("sync ", function () { it("validate", function () { (() => { @@ -60,34 +23,5 @@ describe("Option `bom`", function () { 'option `bom` is optional and must be a boolean value, got "invalid"', }); }); - - it("empty", function () { - const data = stringifySync([], { bom: true }); - data.should.eql(Buffer.from([239, 187, 191]).toString()); - }); - - it("value is `true`", function () { - const res = stringifySync( - [ - { - value: "ok", - }, - ], - { bom: true }, - ); - res.should.eql("\ufeffok\n"); - }); - - it("value is `false`", function () { - const res = stringifySync( - [ - { - value: "ok", - }, - ], - { bom: false }, - ); - res.should.eql("ok\n"); - }); }); }); diff --git a/packages/csv-stringify/test/option.bom.ts b/packages/csv-stringify/test/option.bom.ts new file mode 100644 index 00000000..0512d580 --- /dev/null +++ b/packages/csv-stringify/test/option.bom.ts @@ -0,0 +1,73 @@ +import "should"; +import { stringify } from "../lib/index.js"; +import { stringify as stringifySync } from "../lib/sync.js"; + +describe("Option `bom`", function () { + it("empty", function (next) { + stringify([], { bom: true }, (err, data) => { + data.should.eql(Buffer.from([239, 187, 191]).toString()); + next(); + }); + }); + + it("value is `true`", function (next) { + stringify( + [ + { + value: "ok", + }, + ], + { bom: true }, + (err, data) => { + data.should.eql(Buffer.from([239, 187, 191]).toString() + "ok\n"); + next(); + }, + ); + }); + + it("value is `false`", function (next) { + stringify( + [ + { + value: "ok", + }, + ], + { bom: false }, + (err, data) => { + data.should.eql("ok\n"); + next(); + }, + ); + }); + + describe("sync ", function () { + it("empty", function () { + const data = stringifySync([], { bom: true }); + data.should.eql(Buffer.from([239, 187, 191]).toString()); + }); + + it("value is `true`", function () { + const res = stringifySync( + [ + { + value: "ok", + }, + ], + { bom: true }, + ); + res.should.eql("\ufeffok\n"); + }); + + it("value is `false`", function () { + const res = stringifySync( + [ + { + value: "ok", + }, + ], + { bom: false }, + ); + res.should.eql("ok\n"); + }); + }); +}); diff --git a/packages/csv-stringify/test/option.cast.js b/packages/csv-stringify/test/option.cast.js index 68be293a..643c3c24 100644 --- a/packages/csv-stringify/test/option.cast.js +++ b/packages/csv-stringify/test/option.cast.js @@ -1,152 +1,8 @@ import "should"; -import dedent from "dedent"; import { stringify } from "../lib/index.js"; describe("Option `cast`", function () { - describe("default", function () { - it("default BigInt formatter", function (next) { - stringify( - [ - { - value: BigInt(9007199254740991), - }, - ], - (err, data) => { - if (!err) data.should.eql("9007199254740991\n"); - next(err); - }, - ); - }); - }); - describe("udf", function () { - it("handle string formatter", function (next) { - stringify( - [ - { - value: "ok", - }, - ], - { cast: { string: () => "X" } }, - (err, data) => { - if (!err) data.should.eql("X\n"); - next(err); - }, - ); - }); - - it("handle boolean formatter", function (next) { - stringify( - [ - { - value: true, - }, - ], - { cast: { boolean: () => "X" } }, - (err, data) => { - if (!err) data.should.eql("X\n"); - next(err); - }, - ); - }); - - it("handle date formatter", function (next) { - stringify( - [ - { - value: new Date(), - }, - ], - { cast: { date: () => "X" } }, - (err, data) => { - if (!err) data.should.eql("X\n"); - next(err); - }, - ); - }); - - it("handle number formatter", function (next) { - stringify( - [ - { - value: 3.14, - }, - ], - { cast: { number: (value) => "" + value * 2 } }, - (err, data) => { - if (!err) data.should.eql("6.28\n"); - next(err); - }, - ); - }); - - it("handle bigint formatter", function (next) { - stringify( - [ - { - value: BigInt(9007199254740991), - }, - ], - { cast: { bigint: (value) => "" + value / BigInt(2) } }, - (err, data) => { - if (!err) data.should.eql("4503599627370495\n"); - next(err); - }, - ); - }); - - it("handle object formatter", function (next) { - stringify( - [ - { - value: { a: 1 }, - }, - ], - { cast: { object: () => "X" } }, - (err, data) => { - if (!err) data.should.eql("X\n"); - next(err); - }, - ); - }); - - it("catch error", function (next) { - stringify( - [ - { - value: true, - }, - ], - { - cast: { - boolean: () => { - throw Error("Catchme"); - }, - }, - }, - (err) => { - err.message.should.eql("Catchme"); - next(); - }, - ); - }); - - it("return null", function (next) { - stringify( - [ - { a: true, b: true }, - { a: false, b: true }, - { a: true, b: false }, - { a: false, b: false }, - ], - { cast: { boolean: (value) => (value ? "1" : null) } }, - (err, data) => { - data.trim().should.eql("1,1\n,1\n1,\n,"); - next(); - }, - ); - }); - it("boolean must return a string", function (next) { stringify( [ @@ -165,162 +21,7 @@ describe("Option `cast`", function () { }); }); - describe("context", function () { - it("expose the expected properties", function (next) { - stringify( - [["a"]], - { - cast: { - string: (value, context) => { - Object.keys(context) - .sort() - .should.eql(["column", "header", "index", "records"]); - return null; - }, - }, - }, - next, - ); - }); - - it("index and column on array", function (next) { - stringify( - [[true, false]], - { - cast: { - boolean: (value, context) => { - if (value) { - context.index.should.equal(0); - context.column.should.equal(0); - return "yes"; - } else { - context.index.should.equal(1); - context.column.should.equal(1); - return "no"; - } - }, - }, - }, - (err, data) => { - if (!err) data.trim().should.eql("yes,no"); - next(err); - }, - ); - }); - - it("index and column on object", function (next) { - stringify( - [ - { - is_true: true, - is_false: false, - }, - ], - { - cast: { - boolean: (value, context) => { - if (value) { - context.index.should.equal(0); - context.column.should.equal("is_true"); - return "yes"; - } else { - context.index.should.equal(1); - context.column.should.equal("is_false"); - return "no"; - } - }, - }, - }, - (err, data) => { - if (!err) data.trim().should.eql("yes,no"); - next(err); - }, - ); - }); - - it("header", function (next) { - stringify( - [["value 1"], ["value 2"]], - { - header: true, - columns: ["header"], - cast: { - string: (value, context) => `${value} | ${context.header}`, - }, - }, - (err, data) => { - if (!err) - data - .trim() - .should.eql("header | true\nvalue 1 | false\nvalue 2 | false"); - next(err); - }, - ); - }); - }); - - describe("option header", function () { - it("records with header and columns as array", function (next) { - stringify( - [["value 1"], ["value 2"]], - { - header: true, - columns: ["header"], - cast: { - string: (value, context) => `${context.records}`, - }, - }, - (err, data) => { - if (!err) data.trim().should.eql("0\n0\n1"); - next(err); - }, - ); - }); - - it("records without header", function (next) { - stringify( - [["record 1"], ["record 2"]], - { - cast: { - string: (value, context) => `${context.records}`, - }, - }, - (err, data) => { - if (!err) data.trim().should.eql("0\n1"); - next(err); - }, - ); - }); - }); - describe("info object", function () { - it("modify escape", function (next) { - stringify( - [['record " 1'], ['record " 2'], ['record " 3']], - { - eof: false, - escape: "#", - cast: { - string: (value, context) => { - if (context.records === 2) return value; - return { - value: value, - escape: ["\\", '"'][context.records], - }; - }, - }, - }, - (err, data) => { - data.should.eql(dedent` - "record \" 1" - "record "" 2" - "record #" 3" - `); - next(err); - }, - ); - }); - it("validate and normalize local options", function (next) { stringify( [["invalid cast"]], diff --git a/packages/csv-stringify/test/option.cast.ts b/packages/csv-stringify/test/option.cast.ts new file mode 100644 index 00000000..f966eb77 --- /dev/null +++ b/packages/csv-stringify/test/option.cast.ts @@ -0,0 +1,311 @@ +import "should"; +import dedent from "dedent"; +import { stringify } from "../lib/index.js"; + +describe("Option `cast`", function () { + describe("default", function () { + it("default BigInt formatter", function (next) { + stringify( + [ + { + value: BigInt(9007199254740991), + }, + ], + (err, data) => { + if (!err) data.should.eql("9007199254740991\n"); + next(err); + }, + ); + }); + }); + + describe("udf", function () { + it("handle string formatter", function (next) { + stringify( + [ + { + value: "ok", + }, + ], + { cast: { string: () => "X" } }, + (err, data) => { + if (!err) data.should.eql("X\n"); + next(err); + }, + ); + }); + + it("handle boolean formatter", function (next) { + stringify( + [ + { + value: true, + }, + ], + { cast: { boolean: () => "X" } }, + (err, data) => { + if (!err) data.should.eql("X\n"); + next(err); + }, + ); + }); + + it("handle date formatter", function (next) { + stringify( + [ + { + value: new Date(), + }, + ], + { cast: { date: () => "X" } }, + (err, data) => { + if (!err) data.should.eql("X\n"); + next(err); + }, + ); + }); + + it("handle number formatter", function (next) { + stringify( + [ + { + value: 3.14, + }, + ], + { cast: { number: (value) => "" + value * 2 } }, + (err, data) => { + if (!err) data.should.eql("6.28\n"); + next(err); + }, + ); + }); + + it("handle bigint formatter", function (next) { + stringify( + [ + { + value: BigInt(9007199254740991), + }, + ], + { cast: { bigint: (value) => "" + value / BigInt(2) } }, + (err, data) => { + if (!err) data.should.eql("4503599627370495\n"); + next(err); + }, + ); + }); + + it("handle object formatter", function (next) { + stringify( + [ + { + value: { a: 1 }, + }, + ], + { cast: { object: () => "X" } }, + (err, data) => { + if (!err) data.should.eql("X\n"); + next(err); + }, + ); + }); + + it("catch error", function (next) { + stringify( + [ + { + value: true, + }, + ], + { + cast: { + boolean: () => { + throw Error("Catchme"); + }, + }, + }, + (err) => { + if (!err) return next(Error("Invalid assessment")); + err.message.should.eql("Catchme"); + next(); + }, + ); + }); + + it("return null", function (next) { + stringify( + [ + { a: true, b: true }, + { a: false, b: true }, + { a: true, b: false }, + { a: false, b: false }, + ], + { cast: { boolean: (value) => (value ? "1" : null) } }, + (err, data) => { + if (err) return next(err); + data.trim().should.eql("1,1\n,1\n1,\n,"); + next(); + }, + ); + }); + }); + + describe("context", function () { + it("expose the expected properties", function (next) { + stringify( + [["a"]], + { + cast: { + string: (value, context) => { + Object.keys(context) + .sort() + .should.eql(["column", "header", "index", "records"]); + return ""; + }, + }, + }, + next, + ); + }); + + it("index and column on array", function (next) { + stringify( + [[true, false]], + { + cast: { + boolean: (value, context) => { + if (context.column == null) throw Error("Invalid assessment"); + if (value) { + context.index.should.equal(0); + context.column.should.equal(0); + return "yes"; + } else { + context.index.should.equal(1); + context.column.should.equal(1); + return "no"; + } + }, + }, + }, + (err, data) => { + if (!err) data.trim().should.eql("yes,no"); + next(err); + }, + ); + }); + + it("index and column on object", function (next) { + stringify( + [ + { + is_true: true, + is_false: false, + }, + ], + { + cast: { + boolean: (value, context) => { + if (!context.column) throw Error("Invalid assessment"); + if (value) { + context.index.should.equal(0); + context.column.should.equal("is_true"); + return "yes"; + } else { + context.index.should.equal(1); + context.column.should.equal("is_false"); + return "no"; + } + }, + }, + }, + (err, data) => { + if (!err) data.trim().should.eql("yes,no"); + next(err); + }, + ); + }); + + it("header", function (next) { + stringify( + [["value 1"], ["value 2"]], + { + header: true, + columns: ["header"], + cast: { + string: (value, context) => `${value} | ${context.header}`, + }, + }, + (err, data) => { + if (!err) + data + .trim() + .should.eql("header | true\nvalue 1 | false\nvalue 2 | false"); + next(err); + }, + ); + }); + }); + + describe("option header", function () { + it("records with header and columns as array", function (next) { + stringify( + [["value 1"], ["value 2"]], + { + header: true, + columns: ["header"], + cast: { + string: (value, context) => `${context.records}`, + }, + }, + (err, data) => { + if (!err) data.trim().should.eql("0\n0\n1"); + next(err); + }, + ); + }); + + it("records without header", function (next) { + stringify( + [["record 1"], ["record 2"]], + { + cast: { + string: (value, context) => `${context.records}`, + }, + }, + (err, data) => { + if (!err) data.trim().should.eql("0\n1"); + next(err); + }, + ); + }); + }); + + describe("info object", function () { + it("modify escape", function (next) { + stringify( + [['record " 1'], ['record " 2'], ['record " 3']], + { + eof: false, + escape: "#", + cast: { + string: (value, context) => { + if (context.records === 2) return value; + return { + value: value, + escape: ["\\", '"'][context.records], + }; + }, + }, + }, + (err, data) => { + data.should.eql(dedent` + "record \" 1" + "record "" 2" + "record #" 3" + `); + next(err); + }, + ); + }); + }); +}); diff --git a/packages/csv-stringify/test/option.columns.js b/packages/csv-stringify/test/option.columns.js index 8a12c48d..a83bd1dd 100644 --- a/packages/csv-stringify/test/option.columns.js +++ b/packages/csv-stringify/test/option.columns.js @@ -44,134 +44,5 @@ describe("Option `columns`", function () { "Invalid column definition: expect a string or an object", ); }); - - it("is an array with column object", function (next) { - stringify( - [ - { a: "11", b: "12" }, - { a: "21", b: "22" }, - ], - { - columns: [{ key: "b" }, { key: "a" }], - }, - (err, records) => { - records.should.eql("12,11\n22,21\n"); - next(err); - }, - ); - }); - - it("is an array of strings", function (next) { - stringify( - [ - { a: "11", b: "12" }, - { a: "21", b: "22" }, - ], - { - columns: ["b", "a"], - }, - (err, records) => { - records.should.eql("12,11\n22,21\n"); - next(err); - }, - ); - }); - - it("is an array of strings matching nested object", function (next) { - stringify( - [ - { a: { a1: "1a1", a2: "1a2" }, b: "1b" }, - { a: { a1: "2a1", a2: "2a2" }, b: "2b" }, - ], - { - columns: ["b", "a.a2"], - }, - (err, records) => { - records.should.eql("1b,1a2\n2b,2a2\n"); - next(err); - }, - ); - }); - - it("is an array of strings matching nested [object]", function (next) { - stringify( - [ - { a: [{}, { a1: "1a1", a2: "1a2" }], b: "1b" }, - { a: [{}, { a1: "2a1", a2: "2a2" }], b: "2b" }, - ], - { - columns: ["b", "a[1].a2"], - }, - (err, records) => { - records.should.eql("1b,1a2\n2b,2a2\n"); - next(err); - }, - ); - }); - - it("is an array of strings with parent key not matching a nested object", function (next) { - stringify( - [ - { a: undefined, b: "1b" }, - { a: null, b: "2b" }, - { a: false, b: "3b" }, - ], - { - columns: ["b", "a.a2"], - }, - (err, records) => { - records.should.eql("1b,\n2b,\n3b,\n"); - next(err); - }, - ); - }); - - it("can still access fields with dots", function (next) { - stringify( - [{ "foo.bar": "1" }, { "foo.bar": "2" }], - { - header: true, - }, - (err, records) => { - if (!err) records.should.eql("foo.bar\n1\n2\n"); - next(err); - }, - ); - }); - }); - - describe("input", function () { - it("is an array, should be the same length", function (next) { - stringify( - [ - ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], - ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], - ], - { - columns: ["FIELD_1", "FIELD_2"], - }, - (err, data) => { - if (!err) data.should.eql("20322051544,1979\n28392898392,1974\n"); - next(err); - }, - ); - }); - - it("is a readable stream", function (next) { - const ws = stringify( - { - header: true, - columns: { field1: "column1", field3: "column3" }, - }, - (err, data) => { - if (!err) - data.should.eql("column1,column3\nval11,val13\nval21,val23\n"); - next(err); - }, - ); - ws.write({ field1: "val11", field2: "val12", field3: "val13" }); - ws.write({ field1: "val21", field2: "val22", field3: "val23" }); - ws.end(); - }); }); }); diff --git a/packages/csv-stringify/test/option.columns.ts b/packages/csv-stringify/test/option.columns.ts new file mode 100644 index 00000000..c5e5783f --- /dev/null +++ b/packages/csv-stringify/test/option.columns.ts @@ -0,0 +1,135 @@ +import "should"; +import { stringify } from "../lib/index.js"; + +describe("Option `columns`", function () { + describe("definition", function () { + it("is an array with column object", function (next) { + stringify( + [ + { a: "11", b: "12" }, + { a: "21", b: "22" }, + ], + { + columns: [{ key: "b" }, { key: "a" }], + }, + (err, records) => { + records.should.eql("12,11\n22,21\n"); + next(err); + }, + ); + }); + + it("is an array of strings", function (next) { + stringify( + [ + { a: "11", b: "12" }, + { a: "21", b: "22" }, + ], + { + columns: ["b", "a"], + }, + (err, records) => { + records.should.eql("12,11\n22,21\n"); + next(err); + }, + ); + }); + + it("is an array of strings matching nested object", function (next) { + stringify( + [ + { a: { a1: "1a1", a2: "1a2" }, b: "1b" }, + { a: { a1: "2a1", a2: "2a2" }, b: "2b" }, + ], + { + columns: ["b", "a.a2"], + }, + (err, records) => { + records.should.eql("1b,1a2\n2b,2a2\n"); + next(err); + }, + ); + }); + + it("is an array of strings matching nested [object]", function (next) { + stringify( + [ + { a: [{}, { a1: "1a1", a2: "1a2" }], b: "1b" }, + { a: [{}, { a1: "2a1", a2: "2a2" }], b: "2b" }, + ], + { + columns: ["b", "a[1].a2"], + }, + (err, records) => { + records.should.eql("1b,1a2\n2b,2a2\n"); + next(err); + }, + ); + }); + + it("is an array of strings with parent key not matching a nested object", function (next) { + stringify( + [ + { a: undefined, b: "1b" }, + { a: null, b: "2b" }, + { a: false, b: "3b" }, + ], + { + columns: ["b", "a.a2"], + }, + (err, records) => { + records.should.eql("1b,\n2b,\n3b,\n"); + next(err); + }, + ); + }); + + it("can still access fields with dots", function (next) { + stringify( + [{ "foo.bar": "1" }, { "foo.bar": "2" }], + { + header: true, + }, + (err, records) => { + if (!err) records.should.eql("foo.bar\n1\n2\n"); + next(err); + }, + ); + }); + }); + + describe("input", function () { + it("is an array, should be the same length", function (next) { + stringify( + [ + ["20322051544", "1979", "8.8017226E7", "ABC", "45", "2000-01-01"], + ["28392898392", "1974", "8.8392926E7", "DEF", "23", "2050-11-27"], + ], + { + columns: ["FIELD_1", "FIELD_2"], + }, + (err, data) => { + if (!err) data.should.eql("20322051544,1979\n28392898392,1974\n"); + next(err); + }, + ); + }); + + it("is a readable stream", function (next) { + const ws = stringify( + { + header: true, + columns: { field1: "column1", field3: "column3" }, + }, + (err, data) => { + if (!err) + data.should.eql("column1,column3\nval11,val13\nval21,val23\n"); + next(err); + }, + ); + ws.write({ field1: "val11", field2: "val12", field3: "val13" }); + ws.write({ field1: "val21", field2: "val22", field3: "val23" }); + ws.end(); + }); + }); +}); diff --git a/packages/csv-stringify/test/option.delimiter.js b/packages/csv-stringify/test/option.delimiter.js index 10c07c79..4c5217cb 100644 --- a/packages/csv-stringify/test/option.delimiter.js +++ b/packages/csv-stringify/test/option.delimiter.js @@ -3,10 +3,6 @@ import { stringify } from "../lib/index.js"; describe("Option `delimiter`", function () { it("validation", function () { - stringify([], { delimiter: "" }); - stringify([], { delimiter: "," }); - stringify([], { delimiter: ",," }); - stringify([], { delimiter: Buffer.from(",") }); (() => { stringify([], { delimiter: true }); }).should.throw({ @@ -26,77 +22,4 @@ describe("Option `delimiter`", function () { message: "option `delimiter` must be a buffer or a string, got 123", }); }); - - it("with default value", function (next) { - stringify( - [ - ["20322051544", "", "8.8017226E7", "45", ""], - ["", "1974", "8.8392926E7", "", ""], - ], - { - eof: false, - }, - (err, data) => { - if (err) return next(err); - data.should.eql("20322051544,,8.8017226E7,45,\n,1974,8.8392926E7,,"); - next(); - }, - ); - }); - - it("disabled if empty", function (next) { - stringify( - [ - ["a", 1], - ["b", 2], - ], - { - delimiter: "", - eof: false, - }, - (err, data) => { - if (err) return next(err); - data.should.eql("a1\nb2"); - next(); - }, - ); - }); - - it("with on character", function (next) { - stringify( - [ - ["20322051544", "", "8.8017226E7", "45", ""], - ["", "1974", "8.8392926E7", "", ""], - ], - { - delimiter: "\t", - eof: false, - }, - (err, data) => { - if (err) return next(err); - data.should.eql( - "20322051544\t\t8.8017226E7\t45\t\n\t1974\t8.8392926E7\t\t", - ); - next(); - }, - ); - }); - - it("with multiple character", function (next) { - stringify( - [ - ["a", "b"], - ["c", "d"], - ], - { - delimiter: ":)(:", - eof: false, - }, - (err, data) => { - if (err) return next(err); - data.should.eql("a:)(:b\nc:)(:d"); - next(); - }, - ); - }); }); diff --git a/packages/csv-stringify/test/option.delimiter.ts b/packages/csv-stringify/test/option.delimiter.ts new file mode 100644 index 00000000..38b20572 --- /dev/null +++ b/packages/csv-stringify/test/option.delimiter.ts @@ -0,0 +1,84 @@ +import "should"; +import { stringify } from "../lib/index.js"; + +describe("Option `delimiter`", function () { + it("validation", function () { + stringify([], { delimiter: "" }); + stringify([], { delimiter: "," }); + stringify([], { delimiter: ",," }); + stringify([], { delimiter: Buffer.from(",") }); + }); + + it("with default value", function (next) { + stringify( + [ + ["20322051544", "", "8.8017226E7", "45", ""], + ["", "1974", "8.8392926E7", "", ""], + ], + { + eof: false, + }, + (err, data) => { + if (err) return next(err); + data.should.eql("20322051544,,8.8017226E7,45,\n,1974,8.8392926E7,,"); + next(); + }, + ); + }); + + it("disabled if empty", function (next) { + stringify( + [ + ["a", 1], + ["b", 2], + ], + { + delimiter: "", + eof: false, + }, + (err, data) => { + if (err) return next(err); + data.should.eql("a1\nb2"); + next(); + }, + ); + }); + + it("with on character", function (next) { + stringify( + [ + ["20322051544", "", "8.8017226E7", "45", ""], + ["", "1974", "8.8392926E7", "", ""], + ], + { + delimiter: "\t", + eof: false, + }, + (err, data) => { + if (err) return next(err); + data.should.eql( + "20322051544\t\t8.8017226E7\t45\t\n\t1974\t8.8392926E7\t\t", + ); + next(); + }, + ); + }); + + it("with multiple character", function (next) { + stringify( + [ + ["a", "b"], + ["c", "d"], + ], + { + delimiter: ":)(:", + eof: false, + }, + (err, data) => { + if (err) return next(err); + data.should.eql("a:)(:b\nc:)(:d"); + next(); + }, + ); + }); +}); diff --git a/packages/csv-stringify/test/option.eof.js b/packages/csv-stringify/test/option.eof.ts similarity index 100% rename from packages/csv-stringify/test/option.eof.js rename to packages/csv-stringify/test/option.eof.ts diff --git a/packages/csv-stringify/test/option.escape.js b/packages/csv-stringify/test/option.escape.js index 0cf19e17..b4026dc4 100644 --- a/packages/csv-stringify/test/option.escape.js +++ b/packages/csv-stringify/test/option.escape.js @@ -1,18 +1,8 @@ import "should"; -import dedent from "dedent"; import { stringify } from "../lib/index.js"; describe("Option `escape`", function () { - it("default", function (next) { - const stringifier = stringify([["abc", "def"]], () => { - stringifier.options.escape.should.eql('"'); - next(); - }); - }); - it("validation", function () { - stringify([], { escape: "," }); - stringify([], { escape: Buffer.from(",") }); (() => { stringify([], { escape: true }); }).should.throw( @@ -34,72 +24,4 @@ describe("Option `escape`", function () { "Invalid Option: escape must be one character, got 2 characters", ); }); - - it("only apply to quote and escape characters", function (next) { - stringify( - [ - ["-", '1"2'], - ["-", '"'], - ["-", '"abc'], - ["-", 'def"'], - ], - { escape: '"', eof: false }, - (err, data) => { - if (err) return next(err); - data.should.eql(dedent` - -,"1""2" - -,"""" - -,"""abc" - -,"def""" - `); - next(); - }, - ); - }); - - it("escape delimiter", function (next) { - stringify( - [["a", "b,c", "d"]], - { escape: '"', delimiter: ",", eof: false }, - (err, data) => { - if (err) return next(err); - data.should.eql('a,"b,c",d'); - next(); - }, - ); - }); - - it("escape record_delimiter", function (next) { - stringify( - [["a", "b\nc", "d"]], - { escape: '"', record_delimiter: "\n", eof: false }, - (err, data) => { - if (err) return next(err); - data.should.eql('a,"b\nc",d'); - next(); - }, - ); - }); - - it("should honor the backslash escape characters", function (next) { - stringify( - [ - ['1"2', '3"4"5'], - ["\\abc", "def\\"], - ["escape and quote", '\\"'], - ], - { escape: "\\", eof: false }, - (err, data) => { - if (err) return next(err); - data.should.eql( - [ - '"1\\"2","3\\"4\\"5"', - "\\abc,def\\", - 'escape and quote,"\\\\\\""', - ].join("\n"), - ); - next(); - }, - ); - }); }); diff --git a/packages/csv-stringify/test/option.escape.ts b/packages/csv-stringify/test/option.escape.ts new file mode 100644 index 00000000..d84143b6 --- /dev/null +++ b/packages/csv-stringify/test/option.escape.ts @@ -0,0 +1,85 @@ +import "should"; +import dedent from "dedent"; +import { stringify } from "../lib/index.js"; + +describe("Option `escape`", function () { + it("default", function (next) { + const stringifier = stringify([["abc", "def"]], () => { + stringifier.options.escape.should.eql('"'); + next(); + }); + }); + + it("validation", function () { + stringify([], { escape: "," }); + stringify([], { escape: Buffer.from(",") }); + }); + + it("only apply to quote and escape characters", function (next) { + stringify( + [ + ["-", '1"2'], + ["-", '"'], + ["-", '"abc'], + ["-", 'def"'], + ], + { escape: '"', eof: false }, + (err, data) => { + if (err) return next(err); + data.should.eql(dedent` + -,"1""2" + -,"""" + -,"""abc" + -,"def""" + `); + next(); + }, + ); + }); + + it("escape delimiter", function (next) { + stringify( + [["a", "b,c", "d"]], + { escape: '"', delimiter: ",", eof: false }, + (err, data) => { + if (err) return next(err); + data.should.eql('a,"b,c",d'); + next(); + }, + ); + }); + + it("escape record_delimiter", function (next) { + stringify( + [["a", "b\nc", "d"]], + { escape: '"', record_delimiter: "\n", eof: false }, + (err, data) => { + if (err) return next(err); + data.should.eql('a,"b\nc",d'); + next(); + }, + ); + }); + + it("should honor the backslash escape characters", function (next) { + stringify( + [ + ['1"2', '3"4"5'], + ["\\abc", "def\\"], + ["escape and quote", '\\"'], + ], + { escape: "\\", eof: false }, + (err, data) => { + if (err) return next(err); + data.should.eql( + [ + '"1\\"2","3\\"4\\"5"', + "\\abc,def\\", + 'escape and quote,"\\\\\\""', + ].join("\n"), + ); + next(); + }, + ); + }); +}); diff --git a/packages/csv-stringify/test/option.escape_formulas.js b/packages/csv-stringify/test/option.escape_formulas.js index 294ef4af..a9abe00e 100644 --- a/packages/csv-stringify/test/option.escape_formulas.js +++ b/packages/csv-stringify/test/option.escape_formulas.js @@ -1,15 +1,7 @@ import "should"; -import dedent from "dedent"; import { stringify } from "../lib/index.js"; describe("Option `escape_formulas`", function () { - it("default to `false`", function (next) { - const stringifier = stringify([["abc", "def"]], () => { - stringifier.options.escape_formulas.should.be.false(); - next(); - }); - }); - it("validation", function () { (() => { stringify([["abc", "def"]], { escape_formulas: "invalid" }); @@ -18,69 +10,4 @@ describe("Option `escape_formulas`", function () { message: 'option `escape_formulas` must be a boolean, got "invalid"', }); }); - - it("escape =, +, -, @, \\t, \\r and unicode equivalent signs", function (next) { - stringify( - [ - ["=a", 1], - ["+b", 2], - ["-c", 3], - ["@d", 4], - ["\te", 5], - ["\rf", 6], - ["g", 7], - ["\uFF1Dh", 8], - ["\uFF0Bi", 9], - ["\uFF0Dj", 10], - ["\uFF20k", 11], - ["\uFF0Cl", 12], // \uFF0C is 'full width comma' and should not be escaped - ], - { - escape_formulas: true, - eof: false, - }, - (err, data) => { - if (err) return next(err); - data.should.eql( - [ - "'=a,1", - "'+b,2", - "'-c,3", - "'@d,4", - "'\te,5", - "'\rf,6", - "g,7", - "'\uFF1Dh,8", - "'\uFF0Bi,9", - "'\uFF0Dj,10", - "'\uFF20k,11", - "\uFF0Cl,12", - ].join("\n"), - ); - next(); - }, - ); - }); - - it("with `quoted` option", function (next) { - stringify( - [ - ["=a", 1], - ["b", 2], - ], - { - escape_formulas: true, - quoted: true, - eof: false, - }, - (err, data) => { - if (err) return next(err); - data.should.eql(dedent` - "'=a","1" - "b","2" - `); - next(); - }, - ); - }); }); diff --git a/packages/csv-stringify/test/option.escape_formulas.ts b/packages/csv-stringify/test/option.escape_formulas.ts new file mode 100644 index 00000000..9963c653 --- /dev/null +++ b/packages/csv-stringify/test/option.escape_formulas.ts @@ -0,0 +1,77 @@ +import "should"; +import dedent from "dedent"; +import { stringify } from "../lib/index.js"; + +describe("Option `escape_formulas`", function () { + it("default to `false`", function (next) { + const stringifier = stringify([["abc", "def"]], () => { + stringifier.options.escape_formulas.should.be.false(); + next(); + }); + }); + + it("escape =, +, -, @, \\t, \\r and unicode equivalent signs", function (next) { + stringify( + [ + ["=a", 1], + ["+b", 2], + ["-c", 3], + ["@d", 4], + ["\te", 5], + ["\rf", 6], + ["g", 7], + ["\uFF1Dh", 8], + ["\uFF0Bi", 9], + ["\uFF0Dj", 10], + ["\uFF20k", 11], + ["\uFF0Cl", 12], // \uFF0C is 'full width comma' and should not be escaped + ], + { + escape_formulas: true, + eof: false, + }, + (err, data) => { + if (err) return next(err); + data.should.eql( + [ + "'=a,1", + "'+b,2", + "'-c,3", + "'@d,4", + "'\te,5", + "'\rf,6", + "g,7", + "'\uFF1Dh,8", + "'\uFF0Bi,9", + "'\uFF0Dj,10", + "'\uFF20k,11", + "\uFF0Cl,12", + ].join("\n"), + ); + next(); + }, + ); + }); + + it("with `quoted` option", function (next) { + stringify( + [ + ["=a", 1], + ["b", 2], + ], + { + escape_formulas: true, + quoted: true, + eof: false, + }, + (err, data) => { + if (err) return next(err); + data.should.eql(dedent` + "'=a","1" + "b","2" + `); + next(); + }, + ); + }); +}); diff --git a/packages/csv-stringify/test/option.header.js b/packages/csv-stringify/test/option.header.ts similarity index 99% rename from packages/csv-stringify/test/option.header.js rename to packages/csv-stringify/test/option.header.ts index 275a51c5..296d07dc 100644 --- a/packages/csv-stringify/test/option.header.js +++ b/packages/csv-stringify/test/option.header.ts @@ -38,6 +38,7 @@ describe("Option `header`", function () { header: true, }, (err) => { + if (!err) return next(Error("Invalid assessment")); err.message.should.eql( "Undiscoverable Columns: header option requires column option or object records", ); diff --git a/packages/csv-stringify/test/option.quote.js b/packages/csv-stringify/test/option.quote.js index f29a1e46..dde617a7 100644 --- a/packages/csv-stringify/test/option.quote.js +++ b/packages/csv-stringify/test/option.quote.js @@ -1,233 +1,12 @@ import "should"; -import dedent from "dedent"; import { stringify } from "../lib/index.js"; describe("Option `quote`", function () { - it("default", function (next) { - const stringifier = stringify([], () => { - stringifier.options.quote.should.eql('"'); - next(); - }); - }); - it("validation", function () { - stringify([], { quote: "" }); - stringify([], { quote: '"' }); - stringify([], { quote: "||" }); - stringify([], { quote: Buffer.from('"') }); - stringify([], { quote: true }); - stringify([], { quote: false }); (() => { stringify([], { quote: 123 }); }).should.throw( "option `quote` must be a boolean, a buffer or a string, got 123", ); }); - - it("disabled if empty", function (next) { - stringify( - [ - ["20322051544", '"', "8.8017226E7", 45, '"ok"'], - ["", "1974", "8.8392926E7", "", ""], - ], - { - eof: false, - quote: "", - }, - (err, data) => { - data.should.eql( - dedent` - 20322051544,",8.8017226E7,45,"ok" - ,1974,8.8392926E7,, - `, - ); - next(); - }, - ); - }); - - it("custom value with quoted", function (next) { - stringify( - [ - ["a", "", "b"], - ["", "c", ""], - ], - { - eof: false, - quote: "|", - quoted: true, - }, - (err, data) => { - data.should.eql("|a|,,|b|\n,|c|,"); - next(); - }, - ); - }); - - it("fields with separator inside fields", function (next) { - stringify( - [ - ["20322051544", "1979.0", "8.8017226E7", "ABC,45", "2000-01-01"], - ["28392898392", "1974.0", "8.8392926E7", "DEF", "23", "2050-11-27"], - ], - { - eof: false, - }, - (err, data) => { - data.should.eql( - dedent` - 20322051544,1979.0,8.8017226E7,"ABC,45",2000-01-01 - 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 - `, - ); - next(); - }, - ); - }); - - it("fields containing delimiters", function (next) { - stringify( - [ - ["20322051544", ",1979.0,8.8017226E7,ABC,45,2000-01-01"], - ["28392898392", "1974.0", "8.8392926E7", "DEF", "23", "2050-11-27"], - ["28392898392,1974.0", "8.8392926E7", "DEF,23,2050-11-27,"], - ], - { - eof: false, - }, - (err, data) => { - data.should.eql( - dedent` - 20322051544,",1979.0,8.8017226E7,ABC,45,2000-01-01" - 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27\n"28392898392,1974.0",8.8392926E7,"DEF,23,2050-11-27," - `, - ); - next(); - }, - ); - }); - - it("fields containing quotes", function (next) { - stringify( - [ - ["20322051544", "1979.0", '8.801"7226E7', "ABC", "45", "2000-01-01"], - ["28392898392", "1974.0", "8.8392926E7", "DEF", '2"3', "2050-11-27"], - ], - { - eof: false, - }, - (err, data) => { - data.should.eql( - dedent` - 20322051544,1979.0,"8.801""7226E7",ABC,45,2000-01-01 - 28392898392,1974.0,8.8392926E7,DEF,"2""3",2050-11-27 - `, - ); - next(); - }, - ); - }); - - it("empty fields", function (next) { - stringify( - [ - ["20322051544", "", "8.8017226E7", "45", ""], - ["", "1974", "8.8392926E7", "", ""], - ], - { - eof: false, - }, - (err, data) => { - data.should.eql(dedent` - 20322051544,,8.8017226E7,45, - ,1974,8.8392926E7,, - `); - next(); - }, - ); - }); - - it("fields containing quotes and double quotes escape", function (next) { - stringify( - [ - ["20322051544", '"', "8.8017226E7", 45, '"ok"'], - ["", "1974", "8.8392926E7", "", ""], - ], - { - eof: false, - }, - (err, data) => { - data.should.eql( - dedent` - 20322051544,"""",8.8017226E7,45,"""ok""" - ,1974,8.8392926E7,, - `, - ); - next(); - }, - ); - }); - - it("fields with line breaks inside quotes", function (next) { - stringify( - [ - ["20322051544", "\n", ",8.8017226E7", 45, "\nok\n"], - ["\n", "1974", "8.8392926E7", "", "\n"], - ], - { - eof: false, - }, - (err, data) => { - data.should.eql( - dedent` - 20322051544,"\n",",8.8017226E7",45,"\nok\n" - "\n",1974,8.8392926E7,,"\n" - `, - ); - next(); - }, - ); - }); - - it("field where quote string is empty", function (next) { - stringify( - [ - ["20322051544", '"', "8.8017226E7", 45, '"ok"'], - ["", "1974", "8.8392926E7", "", ""], - ], - { - eof: false, - quote: "", - }, - (err, data) => { - data.should.eql( - dedent` - 20322051544,",8.8017226E7,45,"ok" - ,1974,8.8392926E7,, - `, - ); - next(); - }, - ); - }); - - it("fields with linebreaks and different record delimiter", function (next) { - stringify( - [ - ["123\n456", 789], - ["", "1974"], - ], - { - eof: false, - record_delimiter: "__", - }, - (err, data) => { - data.should.eql(dedent` - 123 - 456,789__,1974 - `); - next(); - }, - ); - }); }); diff --git a/packages/csv-stringify/test/option.quote.ts b/packages/csv-stringify/test/option.quote.ts new file mode 100644 index 00000000..851b3150 --- /dev/null +++ b/packages/csv-stringify/test/option.quote.ts @@ -0,0 +1,228 @@ +import "should"; +import dedent from "dedent"; +import { stringify } from "../lib/index.js"; + +describe("Option `quote`", function () { + it("default", function (next) { + const stringifier = stringify([], () => { + stringifier.options.quote.should.eql('"'); + next(); + }); + }); + + it("validation", function () { + stringify([], { quote: "" }); + stringify([], { quote: '"' }); + stringify([], { quote: "||" }); + stringify([], { quote: Buffer.from('"') }); + stringify([], { quote: true }); + stringify([], { quote: false }); + }); + + it("disabled if empty", function (next) { + stringify( + [ + ["20322051544", '"', "8.8017226E7", 45, '"ok"'], + ["", "1974", "8.8392926E7", "", ""], + ], + { + eof: false, + quote: "", + }, + (err, data) => { + data.should.eql( + dedent` + 20322051544,",8.8017226E7,45,"ok" + ,1974,8.8392926E7,, + `, + ); + next(); + }, + ); + }); + + it("custom value with quoted", function (next) { + stringify( + [ + ["a", "", "b"], + ["", "c", ""], + ], + { + eof: false, + quote: "|", + quoted: true, + }, + (err, data) => { + data.should.eql("|a|,,|b|\n,|c|,"); + next(); + }, + ); + }); + + it("fields with separator inside fields", function (next) { + stringify( + [ + ["20322051544", "1979.0", "8.8017226E7", "ABC,45", "2000-01-01"], + ["28392898392", "1974.0", "8.8392926E7", "DEF", "23", "2050-11-27"], + ], + { + eof: false, + }, + (err, data) => { + data.should.eql( + dedent` + 20322051544,1979.0,8.8017226E7,"ABC,45",2000-01-01 + 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 + `, + ); + next(); + }, + ); + }); + + it("fields containing delimiters", function (next) { + stringify( + [ + ["20322051544", ",1979.0,8.8017226E7,ABC,45,2000-01-01"], + ["28392898392", "1974.0", "8.8392926E7", "DEF", "23", "2050-11-27"], + ["28392898392,1974.0", "8.8392926E7", "DEF,23,2050-11-27,"], + ], + { + eof: false, + }, + (err, data) => { + data.should.eql( + dedent` + 20322051544,",1979.0,8.8017226E7,ABC,45,2000-01-01" + 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27\n"28392898392,1974.0",8.8392926E7,"DEF,23,2050-11-27," + `, + ); + next(); + }, + ); + }); + + it("fields containing quotes", function (next) { + stringify( + [ + ["20322051544", "1979.0", '8.801"7226E7', "ABC", "45", "2000-01-01"], + ["28392898392", "1974.0", "8.8392926E7", "DEF", '2"3', "2050-11-27"], + ], + { + eof: false, + }, + (err, data) => { + data.should.eql( + dedent` + 20322051544,1979.0,"8.801""7226E7",ABC,45,2000-01-01 + 28392898392,1974.0,8.8392926E7,DEF,"2""3",2050-11-27 + `, + ); + next(); + }, + ); + }); + + it("empty fields", function (next) { + stringify( + [ + ["20322051544", "", "8.8017226E7", "45", ""], + ["", "1974", "8.8392926E7", "", ""], + ], + { + eof: false, + }, + (err, data) => { + data.should.eql(dedent` + 20322051544,,8.8017226E7,45, + ,1974,8.8392926E7,, + `); + next(); + }, + ); + }); + + it("fields containing quotes and double quotes escape", function (next) { + stringify( + [ + ["20322051544", '"', "8.8017226E7", 45, '"ok"'], + ["", "1974", "8.8392926E7", "", ""], + ], + { + eof: false, + }, + (err, data) => { + data.should.eql( + dedent` + 20322051544,"""",8.8017226E7,45,"""ok""" + ,1974,8.8392926E7,, + `, + ); + next(); + }, + ); + }); + + it("fields with line breaks inside quotes", function (next) { + stringify( + [ + ["20322051544", "\n", ",8.8017226E7", 45, "\nok\n"], + ["\n", "1974", "8.8392926E7", "", "\n"], + ], + { + eof: false, + }, + (err, data) => { + data.should.eql( + dedent` + 20322051544,"\n",",8.8017226E7",45,"\nok\n" + "\n",1974,8.8392926E7,,"\n" + `, + ); + next(); + }, + ); + }); + + it("field where quote string is empty", function (next) { + stringify( + [ + ["20322051544", '"', "8.8017226E7", 45, '"ok"'], + ["", "1974", "8.8392926E7", "", ""], + ], + { + eof: false, + quote: "", + }, + (err, data) => { + data.should.eql( + dedent` + 20322051544,",8.8017226E7,45,"ok" + ,1974,8.8392926E7,, + `, + ); + next(); + }, + ); + }); + + it("fields with linebreaks and different record delimiter", function (next) { + stringify( + [ + ["123\n456", 789], + ["", "1974"], + ], + { + eof: false, + record_delimiter: "__", + }, + (err, data) => { + data.should.eql(dedent` + 123 + 456,789__,1974 + `); + next(); + }, + ); + }); +}); diff --git a/packages/csv-stringify/test/option.quoted.js b/packages/csv-stringify/test/option.quoted.ts similarity index 100% rename from packages/csv-stringify/test/option.quoted.js rename to packages/csv-stringify/test/option.quoted.ts diff --git a/packages/csv-stringify/test/option.quoted_empty.js b/packages/csv-stringify/test/option.quoted_empty.ts similarity index 100% rename from packages/csv-stringify/test/option.quoted_empty.js rename to packages/csv-stringify/test/option.quoted_empty.ts diff --git a/packages/csv-stringify/test/option.quoted_match.js b/packages/csv-stringify/test/option.quoted_match.ts similarity index 100% rename from packages/csv-stringify/test/option.quoted_match.js rename to packages/csv-stringify/test/option.quoted_match.ts diff --git a/packages/csv-stringify/test/option.quoted_string.js b/packages/csv-stringify/test/option.quoted_string.ts similarity index 100% rename from packages/csv-stringify/test/option.quoted_string.js rename to packages/csv-stringify/test/option.quoted_string.ts diff --git a/packages/csv-stringify/test/option.record_delimiter.js b/packages/csv-stringify/test/option.record_delimiter.js index fe3fc920..86b74582 100644 --- a/packages/csv-stringify/test/option.record_delimiter.js +++ b/packages/csv-stringify/test/option.record_delimiter.js @@ -2,10 +2,6 @@ import { stringify } from "../lib/index.js"; describe("Option `record_delimiter`", function () { it("validation", function () { - stringify([], { record_delimiter: "" }); - stringify([], { record_delimiter: "," }); - stringify([], { record_delimiter: ",," }); - stringify([], { record_delimiter: Buffer.from(",") }); (() => { stringify([], { record_delimiter: true }); }).should.throw( @@ -22,123 +18,4 @@ describe("Option `record_delimiter`", function () { "Invalid Option: record_delimiter must be a buffer or a string, got 123", ); }); - - it("Test line breaks custom string", function (next) { - stringify( - [ - ["20322051544", "8.8017226E7", "ABC"], - ["28392898392", "8.8392926E7", "DEF"], - ], - { record_delimiter: "::" }, - (err, result) => { - if (err) return next(err); - result.should.eql( - "20322051544,8.8017226E7,ABC::28392898392,8.8392926E7,DEF::", - ); - next(); - }, - ); - }); - - it("Test line breaks custom buffer", function (next) { - stringify( - [ - ["20322051544", "8.8017226E7", "ABC"], - ["28392898392", "8.8392926E7", "DEF"], - ], - { record_delimiter: Buffer.from("::") }, - (err, result) => { - if (err) return next(err); - result.should.eql( - "20322051544,8.8017226E7,ABC::28392898392,8.8392926E7,DEF::", - ); - next(); - }, - ); - }); - - it("Test line breaks unix", function (next) { - stringify( - [ - ["20322051544", "8.8017226E7", "ABC"], - ["28392898392", "8.8392926E7", "DEF"], - ], - { record_delimiter: "unix" }, - (err, result) => { - if (err) return next(err); - result.should.eql( - "20322051544,8.8017226E7,ABC\n28392898392,8.8392926E7,DEF\n", - ); - next(); - }, - ); - }); - - it("Test line breaks unicode", function (next) { - stringify( - [ - ["20322051544", "8.8017226E7", "ABC"], - ["28392898392", "8.8392926E7", "DEF"], - ], - { record_delimiter: "unicode" }, - (err, result) => { - if (err) return next(err); - result.should.eql( - "20322051544,8.8017226E7,ABC\u202828392898392,8.8392926E7,DEF\u2028", - ); - next(); - }, - ); - }); - - it("Test line breaks mac", function (next) { - stringify( - [ - ["20322051544", "8.8017226E7", "ABC"], - ["28392898392", "8.8392926E7", "DEF"], - ], - { record_delimiter: "mac" }, - (err, result) => { - if (err) return next(err); - result.should.eql( - "20322051544,8.8017226E7,ABC\r28392898392,8.8392926E7,DEF\r", - ); - next(); - }, - ); - }); - - it("Test line breaks windows", function (next) { - stringify( - [ - ["20322051544", "8.8017226E7", "ABC"], - ["28392898392", "8.8392926E7", "DEF"], - ], - { record_delimiter: "windows" }, - (err, result) => { - if (err) return next(err); - result.should.eql( - "20322051544,8.8017226E7,ABC\r\n28392898392,8.8392926E7,DEF\r\n", - ); - next(); - }, - ); - }); - - it("Test line breaks ascii", function (next) { - stringify( - [ - ["20322051544", "8.8017226E7", "ABC"], - ["28392898392", "8.8392926E7", "DEF"], - ], - { record_delimiter: "ascii", delimiter: "\u001f" }, - (err, result) => { - if (err) return next(err); - result.should.eql( - "20322051544\u001f8.8017226E7\u001fABC\u001e28392898392\u001f8.8392926E7\u001fDEF\u001e", - ); - next(); - }, - ); - }); }); diff --git a/packages/csv-stringify/test/option.record_delimiter.ts b/packages/csv-stringify/test/option.record_delimiter.ts new file mode 100644 index 00000000..d8b53982 --- /dev/null +++ b/packages/csv-stringify/test/option.record_delimiter.ts @@ -0,0 +1,129 @@ +import { stringify } from "../lib/index.js"; + +describe("Option `record_delimiter`", function () { + it("validation", function () { + stringify([], { record_delimiter: "" }); + stringify([], { record_delimiter: "," }); + stringify([], { record_delimiter: ",," }); + stringify([], { record_delimiter: Buffer.from(",") }); + }); + + it("Test line breaks custom string", function (next) { + stringify( + [ + ["20322051544", "8.8017226E7", "ABC"], + ["28392898392", "8.8392926E7", "DEF"], + ], + { record_delimiter: "::" }, + (err, result) => { + if (err) return next(err); + result.should.eql( + "20322051544,8.8017226E7,ABC::28392898392,8.8392926E7,DEF::", + ); + next(); + }, + ); + }); + + it("Test line breaks custom buffer", function (next) { + stringify( + [ + ["20322051544", "8.8017226E7", "ABC"], + ["28392898392", "8.8392926E7", "DEF"], + ], + { record_delimiter: Buffer.from("::") }, + (err, result) => { + if (err) return next(err); + result.should.eql( + "20322051544,8.8017226E7,ABC::28392898392,8.8392926E7,DEF::", + ); + next(); + }, + ); + }); + + it("Test line breaks unix", function (next) { + stringify( + [ + ["20322051544", "8.8017226E7", "ABC"], + ["28392898392", "8.8392926E7", "DEF"], + ], + { record_delimiter: "unix" }, + (err, result) => { + if (err) return next(err); + result.should.eql( + "20322051544,8.8017226E7,ABC\n28392898392,8.8392926E7,DEF\n", + ); + next(); + }, + ); + }); + + it("Test line breaks unicode", function (next) { + stringify( + [ + ["20322051544", "8.8017226E7", "ABC"], + ["28392898392", "8.8392926E7", "DEF"], + ], + { record_delimiter: "unicode" }, + (err, result) => { + if (err) return next(err); + result.should.eql( + "20322051544,8.8017226E7,ABC\u202828392898392,8.8392926E7,DEF\u2028", + ); + next(); + }, + ); + }); + + it("Test line breaks mac", function (next) { + stringify( + [ + ["20322051544", "8.8017226E7", "ABC"], + ["28392898392", "8.8392926E7", "DEF"], + ], + { record_delimiter: "mac" }, + (err, result) => { + if (err) return next(err); + result.should.eql( + "20322051544,8.8017226E7,ABC\r28392898392,8.8392926E7,DEF\r", + ); + next(); + }, + ); + }); + + it("Test line breaks windows", function (next) { + stringify( + [ + ["20322051544", "8.8017226E7", "ABC"], + ["28392898392", "8.8392926E7", "DEF"], + ], + { record_delimiter: "windows" }, + (err, result) => { + if (err) return next(err); + result.should.eql( + "20322051544,8.8017226E7,ABC\r\n28392898392,8.8392926E7,DEF\r\n", + ); + next(); + }, + ); + }); + + it("Test line breaks ascii", function (next) { + stringify( + [ + ["20322051544", "8.8017226E7", "ABC"], + ["28392898392", "8.8392926E7", "DEF"], + ], + { record_delimiter: "ascii", delimiter: "\u001f" }, + (err, result) => { + if (err) return next(err); + result.should.eql( + "20322051544\u001f8.8017226E7\u001fABC\u001e28392898392\u001f8.8392926E7\u001fDEF\u001e", + ); + next(); + }, + ); + }); +}); From e3923c3a16f60d38b8f93b39269823f9da0376de Mon Sep 17 00:00:00 2001 From: David Worms Date: Fri, 13 Jun 2025 15:02:40 +0200 Subject: [PATCH 41/49] test(csv-parse): update legacy exclusion list --- packages/csv-parse/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/csv-parse/package.json b/packages/csv-parse/package.json index 669c2fff..c8e33b6e 100644 --- a/packages/csv-parse/package.json +++ b/packages/csv-parse/package.json @@ -120,7 +120,7 @@ "lint:ts": "tsc --noEmit true", "preversion": "npm run build && git add dist", "test": "mocha 'test/**/*.{js,ts}'", - "test:legacy": "mocha --ignore test/api.web_stream.js --ignore test/api.web_stream.ts --ignore test/api.stream.finished.js --ignore test/api.stream.iterator.js 'test/**/*.{js,ts}'" + "test:legacy": "mocha --ignore test/api.web_stream.js --ignore test/api.web_stream.ts --ignore test/api.stream.finished.ts --ignore test/api.stream.iterator.ts 'test/**/*.{js,ts}'" }, "type": "module", "types": "dist/esm/index.d.ts", From 928b7f23f9d2fdfae572d872c3a5233ad28b254b Mon Sep 17 00:00:00 2001 From: David Worms Date: Tue, 8 Jul 2025 09:49:10 +0200 Subject: [PATCH 42/49] test(csv): ts type returned by parse (fix #459) --- packages/csv/test/api.types.sync.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/csv/test/api.types.sync.ts b/packages/csv/test/api.types.sync.ts index 225bcf1c..f61e98fc 100644 --- a/packages/csv/test/api.types.sync.ts +++ b/packages/csv/test/api.types.sync.ts @@ -10,7 +10,7 @@ describe("API Types", function () { }); it("parse", function () { - const output: string = parse(""); + const output: string[][] = parse(""); return output; }); From f70e280ddb51b76f0024448c4daec69e50649696 Mon Sep 17 00:00:00 2001 From: David Worms Date: Tue, 8 Jul 2025 10:35:50 +0200 Subject: [PATCH 43/49] build: husky latest scripts --- .husky/commit-msg | 3 +-- .husky/pre-commit | 1 + package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.husky/commit-msg b/.husky/commit-msg index 7398961c..1ba698a9 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,3 +1,2 @@ -#!/bin/sh -npx commitlint --edit $1 +npx --no-install commitlint --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit index 1fb913e3..cec3fa55 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1 +1,2 @@ + npm run lint:staged diff --git a/package.json b/package.json index a983139c..8af0ae7e 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ }, "scripts": { "build": "lerna run build", - "postinstall": "husky install", + "prepare": "husky", "publish": "lerna publish from-git --yes", "lint:check": "eslint", "lint:fix": "eslint --fix", From de8aba652c5b6d905e741958dc91022f07fb402a Mon Sep 17 00:00:00 2001 From: David Worms Date: Thu, 10 Jul 2025 11:53:48 +0200 Subject: [PATCH 44/49] chore(csv-demo-browser): dump test script --- demo/browser/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/demo/browser/package.json b/demo/browser/package.json index 82d474da..02e4cc81 100644 --- a/demo/browser/package.json +++ b/demo/browser/package.json @@ -17,7 +17,8 @@ "timeout": 40000 }, "scripts": { - "start": "node server.js" + "start": "node server.js", + "test": "exit 0" }, "dependencies": { "csv": "^6.3.11", From 9bb1bf8e0084cd38f788dd56851b9af4149ac49d Mon Sep 17 00:00:00 2001 From: David Worms Date: Thu, 10 Jul 2025 12:28:50 +0200 Subject: [PATCH 45/49] fix(csv-demo-cjs): ts type --- demo/cjs/lib/parse_sync.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/cjs/lib/parse_sync.ts b/demo/cjs/lib/parse_sync.ts index a3bafd76..55eb79da 100644 --- a/demo/cjs/lib/parse_sync.ts +++ b/demo/cjs/lib/parse_sync.ts @@ -5,7 +5,7 @@ import { parse } from "csv-parse/sync"; // import { parse } from 'csv-parse/dist/cjs/sync' // Create the parser -const records: [] = parse(["a:b:c\n", "1:2:3\n"].join(""), { +const records: string[][] = parse(["a:b:c\n", "1:2:3\n"].join(""), { delimiter: ":", }); // Test that the parsed records matched what's expected From 5ad1f2db3229867d0e2f58f056752e65e4e37102 Mon Sep 17 00:00:00 2001 From: David Worms Date: Thu, 10 Jul 2025 12:29:03 +0200 Subject: [PATCH 46/49] fix(csv-demo-esm): ts type --- demo/esm/lib/parse_sync.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/esm/lib/parse_sync.ts b/demo/esm/lib/parse_sync.ts index 271c3ecc..e7e3c3e4 100644 --- a/demo/esm/lib/parse_sync.ts +++ b/demo/esm/lib/parse_sync.ts @@ -2,7 +2,7 @@ import assert from "assert"; import { parse } from "csv-parse/sync"; // Create the parser -const records: [] = parse(["a:b:c\n", "1:2:3\n"].join(""), { +const records: string[][] = parse(["a:b:c\n", "1:2:3\n"].join(""), { delimiter: ":", }); // Test that the parsed records matched what's expected From d6b53b3d22404e5cd7dbe8b171c0e6504850d4ee Mon Sep 17 00:00:00 2001 From: David Worms Date: Thu, 10 Jul 2025 13:39:58 +0200 Subject: [PATCH 47/49] chore(release): publish - csv-demo-browser@0.2.0 - csv-demo-cjs@0.3.0 - csv-demo-eslint@0.2.0 - csv-demo-esm@0.0.34 - csv-issues-cjs@0.3.0 - csv-issues-esm@0.5.0 - csv-demo-ts-cjs-node16@0.2.20 - csv-demo-ts-module-node16@0.2.20 - csv-demo-webpack@0.2.0 - csv-demo-webpack-ts@0.2.0 - csv@6.4.0 - csv-generate@4.5.0 - csv-parse@6.0.0 - csv-stringify@6.6.0 - stream-transform@3.4.0 --- demo/browser/CHANGELOG.md | 10 + demo/browser/package.json | 12 +- demo/cjs/CHANGELOG.md | 13 + demo/cjs/package.json | 8 +- demo/eslint/CHANGELOG.md | 12 + demo/eslint/package.json | 4 +- demo/esm/CHANGELOG.md | 7 + demo/esm/package.json | 6 +- demo/issues-cjs/CHANGELOG.md | 14 + demo/issues-cjs/package.json | 6 +- demo/issues-esm/CHANGELOG.md | 22 + demo/issues-esm/package.json | 8 +- demo/ts-cjs-node16/CHANGELOG.md | 7 + demo/ts-cjs-node16/package.json | 10 +- demo/ts-esm-node16/CHANGELOG.md | 7 + demo/ts-esm-node16/package.json | 10 +- demo/webpack-ts/CHANGELOG.md | 13 + demo/webpack-ts/package.json | 10 +- demo/webpack/CHANGELOG.md | 13 + demo/webpack/package.json | 12 +- package-lock.json | 113 ++- packages/csv-generate/CHANGELOG.md | 36 + packages/csv-generate/dist/cjs/index.d.cts | 143 ++-- packages/csv-generate/dist/cjs/stream.d.cts | 3 +- packages/csv-generate/dist/cjs/sync.d.cts | 7 +- packages/csv-generate/dist/esm/index.d.ts | 143 ++-- packages/csv-generate/dist/esm/index.js | 97 +-- packages/csv-generate/dist/esm/stream.d.ts | 3 +- packages/csv-generate/dist/esm/sync.d.ts | 7 +- packages/csv-generate/dist/esm/sync.js | 97 +-- packages/csv-generate/dist/iife/index.js | 97 +-- packages/csv-generate/dist/iife/sync.js | 97 +-- packages/csv-generate/dist/umd/index.js | 97 +-- packages/csv-generate/dist/umd/sync.js | 97 +-- packages/csv-generate/package.json | 2 +- packages/csv-parse/CHANGELOG.md | 82 ++ packages/csv-parse/dist/cjs/index.cjs | 15 +- packages/csv-parse/dist/cjs/index.d.cts | 728 ++++++++++++------ packages/csv-parse/dist/cjs/sync.cjs | 25 +- packages/csv-parse/dist/cjs/sync.d.cts | 29 +- packages/csv-parse/dist/esm/index.d.ts | 728 ++++++++++++------ packages/csv-parse/dist/esm/index.js | 113 +-- packages/csv-parse/dist/esm/stream.d.ts | 16 +- packages/csv-parse/dist/esm/sync.d.ts | 29 +- packages/csv-parse/dist/esm/sync.js | 39 +- packages/csv-parse/dist/iife/index.js | 112 +-- packages/csv-parse/dist/iife/sync.js | 39 +- packages/csv-parse/dist/umd/index.js | 112 +-- packages/csv-parse/dist/umd/sync.js | 39 +- packages/csv-parse/package.json | 6 +- packages/csv-stringify/CHANGELOG.md | 45 ++ packages/csv-stringify/dist/cjs/index.cjs | 1 + packages/csv-stringify/dist/cjs/index.d.cts | 289 ++++--- packages/csv-stringify/dist/cjs/sync.cjs | 1 + packages/csv-stringify/dist/cjs/sync.d.cts | 17 +- packages/csv-stringify/dist/esm/index.d.ts | 289 ++++--- packages/csv-stringify/dist/esm/index.js | 98 +-- packages/csv-stringify/dist/esm/sync.d.ts | 17 +- packages/csv-stringify/dist/esm/sync.js | 15 +- packages/csv-stringify/dist/iife/index.js | 98 +-- packages/csv-stringify/dist/iife/sync.js | 15 +- packages/csv-stringify/dist/umd/index.js | 98 +-- packages/csv-stringify/dist/umd/sync.js | 15 +- packages/csv-stringify/package.json | 4 +- packages/csv/CHANGELOG.md | 35 + packages/csv/dist/cjs/index.cjs | 15 +- packages/csv/dist/cjs/index.d.cts | 17 +- packages/csv/dist/cjs/sync.cjs | 26 +- packages/csv/dist/cjs/sync.d.cts | 19 +- packages/csv/dist/esm/index.d.ts | 17 +- packages/csv/dist/esm/index.js | 112 +-- packages/csv/dist/esm/sync.d.ts | 19 +- packages/csv/dist/esm/sync.js | 123 +-- packages/csv/dist/iife/index.js | 112 +-- packages/csv/dist/iife/sync.js | 123 +-- packages/csv/dist/umd/index.js | 112 +-- packages/csv/dist/umd/sync.js | 123 +-- packages/csv/package.json | 10 +- packages/stream-transform/CHANGELOG.md | 35 + .../stream-transform/dist/cjs/index.d.cts | 72 +- packages/stream-transform/dist/cjs/sync.d.cts | 15 +- packages/stream-transform/dist/esm/index.d.ts | 72 +- packages/stream-transform/dist/esm/index.js | 97 +-- packages/stream-transform/dist/esm/sync.d.ts | 15 +- packages/stream-transform/dist/esm/sync.js | 97 +-- packages/stream-transform/dist/iife/index.js | 97 +-- packages/stream-transform/dist/iife/sync.js | 97 +-- packages/stream-transform/dist/umd/index.js | 97 +-- packages/stream-transform/dist/umd/sync.js | 97 +-- packages/stream-transform/package.json | 4 +- 90 files changed, 2724 insertions(+), 3291 deletions(-) diff --git a/demo/browser/CHANGELOG.md b/demo/browser/CHANGELOG.md index b407c055..c37fb24f 100644 --- a/demo/browser/CHANGELOG.md +++ b/demo/browser/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 0.2.0 (2025-07-10) + +### Features + +- **csv-demo-webpack:** split usages by packages ([214c759](https://github.com/adaltas/node-csv/commit/214c75980d61bf96ec1d6892858887ba29235987)) + +### Bug Fixes + +- support ts node16 resolution in cjs ([#354](https://github.com/adaltas/node-csv/issues/354)) ([fa09d03](https://github.com/adaltas/node-csv/commit/fa09d03aaf0008b2790656871ca6b2c4be12d14c)) + ## [0.1.21](https://github.com/adaltas/node-csv/compare/csv-demo-browser@0.1.20...csv-demo-browser@0.1.21) (2024-11-21) **Note:** Version bump only for package csv-demo-browser diff --git a/demo/browser/package.json b/demo/browser/package.json index 02e4cc81..bd34460a 100644 --- a/demo/browser/package.json +++ b/demo/browser/package.json @@ -1,6 +1,6 @@ { "name": "csv-demo-browser", - "version": "0.1.21", + "version": "0.2.0", "main": "index.js", "license": "MIT", "type": "module", @@ -21,11 +21,11 @@ "test": "exit 0" }, "dependencies": { - "csv": "^6.3.11", - "csv-generate": "^4.4.2", - "csv-parse": "^5.6.0", - "csv-stringify": "^6.5.2", + "csv": "^6.4.0", + "csv-generate": "^4.5.0", + "csv-parse": "^6.0.0", + "csv-stringify": "^6.6.0", "express": "^5.1.0", - "stream-transform": "^3.3.3" + "stream-transform": "^3.4.0" } } diff --git a/demo/cjs/CHANGELOG.md b/demo/cjs/CHANGELOG.md index 481b189d..1e219305 100644 --- a/demo/cjs/CHANGELOG.md +++ b/demo/cjs/CHANGELOG.md @@ -3,6 +3,19 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 0.3.0 (2025-07-10) + +### Features + +- backward support for node 8 ([496231d](https://github.com/adaltas/node-csv/commit/496231dfd838f0a6a72269a5a2390a4c637cef95)) +- **csv-demo-cjs:** new stringify.ts sample ([b44de05](https://github.com/adaltas/node-csv/commit/b44de05d70b4577cdb85c4f285321eea840f8fa3)) + +### Bug Fixes + +- **csv-demo-cjs:** ts type ([9bb1bf8](https://github.com/adaltas/node-csv/commit/9bb1bf8e0084cd38f788dd56851b9af4149ac49d)) +- **csv-demo-ts-cjs-node16:** upgrade module definition after latest typescript ([87fe919](https://github.com/adaltas/node-csv/commit/87fe91996fb2a8895c252177fca4f0cb59a518f9)) +- support ts node16 resolution in cjs ([#354](https://github.com/adaltas/node-csv/issues/354)) ([fa09d03](https://github.com/adaltas/node-csv/commit/fa09d03aaf0008b2790656871ca6b2c4be12d14c)) + ## [0.2.19](https://github.com/adaltas/node-csv/compare/csv-demo-cjs@0.2.18...csv-demo-cjs@0.2.19) (2024-11-21) **Note:** Version bump only for package csv-demo-cjs diff --git a/demo/cjs/package.json b/demo/cjs/package.json index 9b746dd9..ffcb7550 100644 --- a/demo/cjs/package.json +++ b/demo/cjs/package.json @@ -1,14 +1,14 @@ { "name": "csv-demo-cjs", - "version": "0.2.19", + "version": "0.3.0", "main": "index.js", "license": "MIT", "type": "commonjs", "private": true, "dependencies": { - "csv": "^6.3.11", - "csv-parse": "^5.6.0", - "csv-stringify": "^6.5.2" + "csv": "^6.4.0", + "csv-parse": "^6.0.0", + "csv-stringify": "^6.6.0" }, "devDependencies": { "@types/node": "^22.15.30", diff --git a/demo/eslint/CHANGELOG.md b/demo/eslint/CHANGELOG.md index 27d1a34f..a9335752 100644 --- a/demo/eslint/CHANGELOG.md +++ b/demo/eslint/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 0.2.0 (2025-07-10) + +### Features + +- wg stream api ([8a5eb7d](https://github.com/adaltas/node-csv/commit/8a5eb7dfd31b22217db4fbbc832d707221850785)) + +### Bug Fixes + +- commonjs types, run tsc and lint to validate changes ([#397](https://github.com/adaltas/node-csv/issues/397)) ([e6870fe](https://github.com/adaltas/node-csv/commit/e6870fe272c119e273196522c9771d12ff8b2a35)) +- **csv-demo-eslint:** private package ([28d6066](https://github.com/adaltas/node-csv/commit/28d60660de1c886e51e9cc16771f17fc4257a304)) +- **csv-demo-ts-cjs-node16:** upgrade module definition after latest typescript ([87fe919](https://github.com/adaltas/node-csv/commit/87fe91996fb2a8895c252177fca4f0cb59a518f9)) + ## [0.1.23](https://github.com/adaltas/node-csv/compare/csv-demo-eslint@0.1.22...csv-demo-eslint@0.1.23) (2024-11-21) **Note:** Version bump only for package csv-demo-eslint diff --git a/demo/eslint/package.json b/demo/eslint/package.json index 36b7672a..c88a8f7e 100644 --- a/demo/eslint/package.json +++ b/demo/eslint/package.json @@ -1,6 +1,6 @@ { "name": "csv-demo-eslint", - "version": "0.1.23", + "version": "0.2.0", "description": "", "main": "index.js", "private": true, @@ -10,7 +10,7 @@ }, "license": "MIT", "dependencies": { - "csv-stringify": "^6.5.2" + "csv-stringify": "^6.6.0" }, "devDependencies": { "eslint": "^9.28.0", diff --git a/demo/esm/CHANGELOG.md b/demo/esm/CHANGELOG.md index 704e0528..d68d971e 100644 --- a/demo/esm/CHANGELOG.md +++ b/demo/esm/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 0.0.34 (2025-07-10) + +### Bug Fixes + +- **csv-demo-esm:** csv dependencies ([64afead](https://github.com/adaltas/node-csv/commit/64afead8dc41b9d379c9761ddb70d6a29251b4e2)) +- **csv-demo-esm:** ts type ([5ad1f2d](https://github.com/adaltas/node-csv/commit/5ad1f2db3229867d0e2f58f056752e65e4e37102)) + ## [0.0.33](https://github.com/adaltas/node-csv/compare/csv-demo-esm@0.0.32...csv-demo-esm@0.0.33) (2024-11-21) **Note:** Version bump only for package csv-demo-esm diff --git a/demo/esm/package.json b/demo/esm/package.json index b9916bb3..2d800a38 100644 --- a/demo/esm/package.json +++ b/demo/esm/package.json @@ -1,13 +1,13 @@ { "name": "csv-demo-esm", - "version": "0.0.33", + "version": "0.0.34", "main": "index.js", "license": "MIT", "type": "module", "private": true, "dependencies": { - "csv": "^6.3.11", - "csv-parse": "^5.6.0" + "csv": "^6.4.0", + "csv-parse": "^6.0.0" }, "devDependencies": { "coffeescript": "^2.7.0", diff --git a/demo/issues-cjs/CHANGELOG.md b/demo/issues-cjs/CHANGELOG.md index df19e590..57a287b8 100644 --- a/demo/issues-cjs/CHANGELOG.md +++ b/demo/issues-cjs/CHANGELOG.md @@ -3,6 +3,20 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 0.3.0 (2025-07-10) + +### Features + +- **csv-issues-cjs:** 330 sample code ([3d85a41](https://github.com/adaltas/node-csv/commit/3d85a411007416f3cb750ca6b427f55c0331a8b8)) +- **csv-issues-cjs:** 399 issue ([b8df8db](https://github.com/adaltas/node-csv/commit/b8df8dbf071021aa398ea82dbe650ab3e7b16a0b)) + +### Bug Fixes + +- **csv-issues-esm:** illustrate issue [#300](https://github.com/adaltas/node-csv/issues/300) ([7358f9d](https://github.com/adaltas/node-csv/commit/7358f9d2b150655579dadf2af1aa64206fc7e2fa)) +- **csv-stringify:** catch error with sync api, fix [#296](https://github.com/adaltas/node-csv/issues/296) ([e157f40](https://github.com/adaltas/node-csv/commit/e157f407eeffe5bcfb179cb20476169037bfb4f1)) +- dont insert polyfills in cjs [#303](https://github.com/adaltas/node-csv/issues/303) ([9baf334](https://github.com/adaltas/node-csv/commit/9baf334044dab90b4a0d096a7e456d0fd5807d5b)) +- support ts node16 resolution in cjs ([#354](https://github.com/adaltas/node-csv/issues/354)) ([fa09d03](https://github.com/adaltas/node-csv/commit/fa09d03aaf0008b2790656871ca6b2c4be12d14c)) + ## [0.2.8](https://github.com/adaltas/node-csv/compare/csv-issues-cjs@0.2.7...csv-issues-cjs@0.2.8) (2024-11-21) **Note:** Version bump only for package csv-issues-cjs diff --git a/demo/issues-cjs/package.json b/demo/issues-cjs/package.json index 422e004e..35d54b37 100644 --- a/demo/issues-cjs/package.json +++ b/demo/issues-cjs/package.json @@ -1,12 +1,12 @@ { "name": "csv-issues-cjs", - "version": "0.2.8", + "version": "0.3.0", "main": "index.js", "license": "MIT", "private": true, "dependencies": { - "csv-parse": "^5.6.0", - "csv-stringify": "^6.5.2" + "csv-parse": "^6.0.0", + "csv-stringify": "^6.6.0" }, "devDependencies": { "coffeescript": "^2.7.0", diff --git a/demo/issues-esm/CHANGELOG.md b/demo/issues-esm/CHANGELOG.md index b0316ff2..0dc48e04 100644 --- a/demo/issues-esm/CHANGELOG.md +++ b/demo/issues-esm/CHANGELOG.md @@ -3,6 +3,28 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 0.5.0 (2025-07-10) + +### Features + +- **csv-issues-esm:** 437 sample with endable transformer ([bec3f12](https://github.com/adaltas/node-csv/commit/bec3f12072f47f2eaf7f67b25d081d292c36de26)) +- **csv-issues-esm:** issue 411 reproductible 2nd attempt ([41fca27](https://github.com/adaltas/node-csv/commit/41fca279cb10e7bb1a97e09c301e52cfd07856f0)) +- **csv-issues-esm:** issue 411 reproductible attempt ([6c5cb5e](https://github.com/adaltas/node-csv/commit/6c5cb5efb333ed0f6e3f64d2a8cddb2d4f813521)) +- **csv-issues-esm:** issue 423 ([c255eb5](https://github.com/adaltas/node-csv/commit/c255eb57015f821c4dea6558ddb5f58ae908b616)) +- **csv-issues-esm:** issue 436 ([0cbe4c7](https://github.com/adaltas/node-csv/commit/0cbe4c781dcd77b9e4354f9b12abe8dfca539771)) +- **csv-issues-esm:** issue 441 ([6ecf900](https://github.com/adaltas/node-csv/commit/6ecf90049a7e08a3fe9ff2f99c53ab032d91ff05)) +- **csv-issues-esm:** more transform config in sample ([0c2acf1](https://github.com/adaltas/node-csv/commit/0c2acf10ca61faa4d97fae147596905e7316ac95)) +- **csv-issues-esm:** reproduce issue [#415](https://github.com/adaltas/node-csv/issues/415) ([28088bc](https://github.com/adaltas/node-csv/commit/28088bcfb72331fe6ba26046a0af283c8dc0c40d)) + +### Bug Fixes + +- **csv-issues-esm:** illustrate cas [#381](https://github.com/adaltas/node-csv/issues/381) ([5f8fcb6](https://github.com/adaltas/node-csv/commit/5f8fcb639af87d04f96115ddc811df90f435c483)) +- **csv-parse:** comment infix when comment first field char (fix [#415](https://github.com/adaltas/node-csv/issues/415)) ([8e0f8b8](https://github.com/adaltas/node-csv/commit/8e0f8b8e11736f1223b0bda4dd2a3b37506dd531)) +- **csv-parse:** record_delimiter and non default encoding (fix [#365](https://github.com/adaltas/node-csv/issues/365)) ([16fdb2d](https://github.com/adaltas/node-csv/commit/16fdb2dd2c3221d00568f28bed44106ffc0d49ef)) +- **csv-parse:** skip event not raised with bom (fix [#411](https://github.com/adaltas/node-csv/issues/411)) ([1326351](https://github.com/adaltas/node-csv/commit/13263514ef6ec02000cf2da39ba6aa2ff92f00ae)) +- **stream-transform:** backpressure after push ([3e83f4e](https://github.com/adaltas/node-csv/commit/3e83f4e604b7b944835de18afcb41716ce4bbfad)) +- support ts node16 resolution in cjs ([#354](https://github.com/adaltas/node-csv/issues/354)) ([fa09d03](https://github.com/adaltas/node-csv/commit/fa09d03aaf0008b2790656871ca6b2c4be12d14c)) + ## [0.4.0](https://github.com/adaltas/node-csv/compare/csv-issues-esm@0.3.1...csv-issues-esm@0.4.0) (2024-11-21) ### Features diff --git a/demo/issues-esm/package.json b/demo/issues-esm/package.json index 1f765721..093bf3b0 100644 --- a/demo/issues-esm/package.json +++ b/demo/issues-esm/package.json @@ -1,6 +1,6 @@ { "name": "csv-issues-esm", - "version": "0.4.0", + "version": "0.5.0", "main": "index.js", "license": "MIT", "type": "module", @@ -33,9 +33,9 @@ "test": "mocha 'test/**/*.coffee'" }, "dependencies": { - "csv-generate": "^4.4.2", - "csv-parse": "^5.6.0", - "csv-stringify": "^6.5.2", + "csv-generate": "^4.5.0", + "csv-parse": "^6.0.0", + "csv-stringify": "^6.6.0", "dedent": "^1.6.0", "desm": "^1.3.1", "duckdb-async": "^1.2.1" diff --git a/demo/ts-cjs-node16/CHANGELOG.md b/demo/ts-cjs-node16/CHANGELOG.md index 2ffd376d..61d2b954 100644 --- a/demo/ts-cjs-node16/CHANGELOG.md +++ b/demo/ts-cjs-node16/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 0.2.20 (2025-07-10) + +### Bug Fixes + +- **csv-demo-ts-cjs-node16:** upgrade module definition after latest typescript ([87fe919](https://github.com/adaltas/node-csv/commit/87fe91996fb2a8895c252177fca4f0cb59a518f9)) +- support ts node16 resolution in cjs ([#354](https://github.com/adaltas/node-csv/issues/354)) ([fa09d03](https://github.com/adaltas/node-csv/commit/fa09d03aaf0008b2790656871ca6b2c4be12d14c)) + ## [0.2.19](https://github.com/adaltas/node-csv/compare/csv-demo-ts-cjs-node16@0.2.18...csv-demo-ts-cjs-node16@0.2.19) (2024-11-21) **Note:** Version bump only for package csv-demo-ts-cjs-node16 diff --git a/demo/ts-cjs-node16/package.json b/demo/ts-cjs-node16/package.json index 8c736cef..35692232 100644 --- a/demo/ts-cjs-node16/package.json +++ b/demo/ts-cjs-node16/package.json @@ -1,11 +1,11 @@ { "name": "csv-demo-ts-cjs-node16", - "version": "0.2.19", + "version": "0.2.20", "dependencies": { - "csv-generate": "^4.4.2", - "csv-parse": "^5.6.0", - "csv-stringify": "^6.5.2", - "stream-transform": "^3.3.3" + "csv-generate": "^4.5.0", + "csv-parse": "^6.0.0", + "csv-stringify": "^6.6.0", + "stream-transform": "^3.4.0" }, "main": "index.js", "license": "MIT", diff --git a/demo/ts-esm-node16/CHANGELOG.md b/demo/ts-esm-node16/CHANGELOG.md index 543532b7..ee5ec348 100644 --- a/demo/ts-esm-node16/CHANGELOG.md +++ b/demo/ts-esm-node16/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 0.2.20 (2025-07-10) + +### Bug Fixes + +- **csv-demo-ts-cjs-node16:** upgrade module definition after latest typescript ([87fe919](https://github.com/adaltas/node-csv/commit/87fe91996fb2a8895c252177fca4f0cb59a518f9)) +- support ts node16 resolution in cjs ([#354](https://github.com/adaltas/node-csv/issues/354)) ([fa09d03](https://github.com/adaltas/node-csv/commit/fa09d03aaf0008b2790656871ca6b2c4be12d14c)) + ## [0.2.19](https://github.com/adaltas/node-csv/compare/csv-demo-ts-module-node16@0.2.18...csv-demo-ts-module-node16@0.2.19) (2024-11-21) **Note:** Version bump only for package csv-demo-ts-module-node16 diff --git a/demo/ts-esm-node16/package.json b/demo/ts-esm-node16/package.json index e09ed317..06d093e4 100644 --- a/demo/ts-esm-node16/package.json +++ b/demo/ts-esm-node16/package.json @@ -1,15 +1,15 @@ { "name": "csv-demo-ts-module-node16", - "version": "0.2.19", + "version": "0.2.20", "main": "index.js", "license": "MIT", "type": "module", "private": true, "dependencies": { - "csv-generate": "^4.4.2", - "csv-parse": "^5.6.0", - "csv-stringify": "^6.5.2", - "stream-transform": "^3.3.3" + "csv-generate": "^4.5.0", + "csv-parse": "^6.0.0", + "csv-stringify": "^6.6.0", + "stream-transform": "^3.4.0" }, "devDependencies": { "@types/node": "^22.15.30", diff --git a/demo/webpack-ts/CHANGELOG.md b/demo/webpack-ts/CHANGELOG.md index 41280c1c..dca5f9e5 100644 --- a/demo/webpack-ts/CHANGELOG.md +++ b/demo/webpack-ts/CHANGELOG.md @@ -3,6 +3,19 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 0.2.0 (2025-07-10) + +### Features + +- **csv-demo-webpack-ts:** new demo webpack with TypeScript ([624c62d](https://github.com/adaltas/node-csv/commit/624c62d465f65a33fd43c0cf75eda1ae01388b1d)) + +### Bug Fixes + +- **csv-demo-ts-cjs-node16:** upgrade module definition after latest typescript ([87fe919](https://github.com/adaltas/node-csv/commit/87fe91996fb2a8895c252177fca4f0cb59a518f9)) +- **csv-demo-webpack-ts:** remove polyfill ([47a99bd](https://github.com/adaltas/node-csv/commit/47a99bd944d1d943e6374227dbc4e20aaa2c8c7f)) +- **csv-demo-webpack-ts:** simplify export paths ([8d63a14](https://github.com/adaltas/node-csv/commit/8d63a14313bb6b26f13fafb740cc686f1dfaa65f)) +- support ts node16 resolution in cjs ([#354](https://github.com/adaltas/node-csv/issues/354)) ([fa09d03](https://github.com/adaltas/node-csv/commit/fa09d03aaf0008b2790656871ca6b2c4be12d14c)) + ## [0.1.21](https://github.com/adaltas/node-csv/compare/csv-demo-webpack-ts@0.1.20...csv-demo-webpack-ts@0.1.21) (2024-11-21) **Note:** Version bump only for package csv-demo-webpack-ts diff --git a/demo/webpack-ts/package.json b/demo/webpack-ts/package.json index 95ddc62d..1748c49f 100644 --- a/demo/webpack-ts/package.json +++ b/demo/webpack-ts/package.json @@ -1,17 +1,17 @@ { "name": "csv-demo-webpack-ts", - "version": "0.1.21", + "version": "0.2.0", "description": "", "private": true, "keywords": [], "author": "", "license": "ISC", "dependencies": { - "csv-generate": "^4.4.2", - "csv-parse": "^5.6.0", - "csv-stringify": "^6.5.2", + "csv-generate": "^4.5.0", + "csv-parse": "^6.0.0", + "csv-stringify": "^6.6.0", "http-server": "^14.1.1", - "stream-transform": "^3.3.3" + "stream-transform": "^3.4.0" }, "devDependencies": { "buffer-browserify": "^0.2.5", diff --git a/demo/webpack/CHANGELOG.md b/demo/webpack/CHANGELOG.md index 6a88c70b..e7b4b8e3 100644 --- a/demo/webpack/CHANGELOG.md +++ b/demo/webpack/CHANGELOG.md @@ -3,6 +3,19 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 0.2.0 (2025-07-10) + +### Features + +- **csv-demo-webpack:** split usages by packages ([214c759](https://github.com/adaltas/node-csv/commit/214c75980d61bf96ec1d6892858887ba29235987)) + +### Bug Fixes + +- correct exports in package.json with webpack ([154eafb](https://github.com/adaltas/node-csv/commit/154eafbac866eb4499a0d392f8dcd057695c2586)) +- **csv-demo-webpack-ts:** simplify export paths ([8d63a14](https://github.com/adaltas/node-csv/commit/8d63a14313bb6b26f13fafb740cc686f1dfaa65f)) +- **csv-demo-webpack:** start with version 0.0.0 ([3369efa](https://github.com/adaltas/node-csv/commit/3369efa09831fabb57fef9c94cd4ca14e0b05981)) +- support ts node16 resolution in cjs ([#354](https://github.com/adaltas/node-csv/issues/354)) ([fa09d03](https://github.com/adaltas/node-csv/commit/fa09d03aaf0008b2790656871ca6b2c4be12d14c)) + ## [0.1.23](https://github.com/adaltas/node-csv/compare/csv-demo-webpack@0.1.22...csv-demo-webpack@0.1.23) (2024-11-21) **Note:** Version bump only for package csv-demo-webpack diff --git a/demo/webpack/package.json b/demo/webpack/package.json index e2a95382..b8315e42 100644 --- a/demo/webpack/package.json +++ b/demo/webpack/package.json @@ -1,6 +1,6 @@ { "name": "csv-demo-webpack", - "version": "0.1.23", + "version": "0.2.0", "description": "", "private": true, "scripts": { @@ -16,12 +16,12 @@ "webpack-cli": "^6.0.1" }, "dependencies": { - "csv": "^6.3.11", - "csv-generate": "^4.4.2", - "csv-parse": "^5.6.0", - "csv-stringify": "^6.5.2", + "csv": "^6.4.0", + "csv-generate": "^4.5.0", + "csv-parse": "^6.0.0", + "csv-stringify": "^6.6.0", "http-server": "^14.1.1", "stream-browserify": "^3.0.0", - "stream-transform": "^3.3.3" + "stream-transform": "^3.4.0" } } diff --git a/package-lock.json b/package-lock.json index 493441f9..89d6708c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,7 +4,6 @@ "requires": true, "packages": { "": { - "hasInstallScript": true, "devDependencies": { "@commitlint/cli": "^19.8.1", "@commitlint/config-conventional": "^19.8.1", @@ -33,25 +32,25 @@ }, "demo/browser": { "name": "csv-demo-browser", - "version": "0.1.21", + "version": "0.2.0", "license": "MIT", "dependencies": { - "csv": "^6.3.11", - "csv-generate": "^4.4.2", - "csv-parse": "^5.6.0", - "csv-stringify": "^6.5.2", + "csv": "^6.4.0", + "csv-generate": "^4.5.0", + "csv-parse": "^6.0.0", + "csv-stringify": "^6.6.0", "express": "^5.1.0", - "stream-transform": "^3.3.3" + "stream-transform": "^3.4.0" } }, "demo/cjs": { "name": "csv-demo-cjs", - "version": "0.2.19", + "version": "0.3.0", "license": "MIT", "dependencies": { - "csv": "^6.3.11", - "csv-parse": "^5.6.0", - "csv-stringify": "^6.5.2" + "csv": "^6.4.0", + "csv-parse": "^6.0.0", + "csv-stringify": "^6.6.0" }, "devDependencies": { "@types/node": "^22.15.30", @@ -64,10 +63,10 @@ }, "demo/eslint": { "name": "csv-demo-eslint", - "version": "0.1.23", + "version": "0.2.0", "license": "MIT", "dependencies": { - "csv-stringify": "^6.5.2" + "csv-stringify": "^6.6.0" }, "devDependencies": { "eslint": "^9.28.0", @@ -77,11 +76,11 @@ }, "demo/esm": { "name": "csv-demo-esm", - "version": "0.0.33", + "version": "0.0.34", "license": "MIT", "dependencies": { - "csv": "^6.3.11", - "csv-parse": "^5.6.0" + "csv": "^6.4.0", + "csv-parse": "^6.0.0" }, "devDependencies": { "coffeescript": "^2.7.0", @@ -91,11 +90,11 @@ }, "demo/issues-cjs": { "name": "csv-issues-cjs", - "version": "0.2.8", + "version": "0.3.0", "license": "MIT", "dependencies": { - "csv-parse": "^5.6.0", - "csv-stringify": "^6.5.2" + "csv-parse": "^6.0.0", + "csv-stringify": "^6.6.0" }, "devDependencies": { "coffeescript": "^2.7.0", @@ -105,12 +104,12 @@ }, "demo/issues-esm": { "name": "csv-issues-esm", - "version": "0.4.0", + "version": "0.5.0", "license": "MIT", "dependencies": { - "csv-generate": "^4.4.2", - "csv-parse": "^5.6.0", - "csv-stringify": "^6.5.2", + "csv-generate": "^4.5.0", + "csv-parse": "^6.0.0", + "csv-stringify": "^6.6.0", "dedent": "^1.6.0", "desm": "^1.3.1", "duckdb-async": "^1.2.1" @@ -136,13 +135,13 @@ }, "demo/ts-cjs-node16": { "name": "csv-demo-ts-cjs-node16", - "version": "0.2.19", + "version": "0.2.20", "license": "MIT", "dependencies": { - "csv-generate": "^4.4.2", - "csv-parse": "^5.6.0", - "csv-stringify": "^6.5.2", - "stream-transform": "^3.3.3" + "csv-generate": "^4.5.0", + "csv-parse": "^6.0.0", + "csv-stringify": "^6.6.0", + "stream-transform": "^3.4.0" }, "devDependencies": { "typescript": "^5.8.3" @@ -150,13 +149,13 @@ }, "demo/ts-esm-node16": { "name": "csv-demo-ts-module-node16", - "version": "0.2.19", + "version": "0.2.20", "license": "MIT", "dependencies": { - "csv-generate": "^4.4.2", - "csv-parse": "^5.6.0", - "csv-stringify": "^6.5.2", - "stream-transform": "^3.3.3" + "csv-generate": "^4.5.0", + "csv-parse": "^6.0.0", + "csv-stringify": "^6.6.0", + "stream-transform": "^3.4.0" }, "devDependencies": { "@types/node": "^22.15.30", @@ -169,16 +168,16 @@ }, "demo/webpack": { "name": "csv-demo-webpack", - "version": "0.1.23", + "version": "0.2.0", "license": "ISC", "dependencies": { - "csv": "^6.3.11", - "csv-generate": "^4.4.2", - "csv-parse": "^5.6.0", - "csv-stringify": "^6.5.2", + "csv": "^6.4.0", + "csv-generate": "^4.5.0", + "csv-parse": "^6.0.0", + "csv-stringify": "^6.6.0", "http-server": "^14.1.1", "stream-browserify": "^3.0.0", - "stream-transform": "^3.3.3" + "stream-transform": "^3.4.0" }, "devDependencies": { "webpack": "^5.99.9", @@ -187,14 +186,14 @@ }, "demo/webpack-ts": { "name": "csv-demo-webpack-ts", - "version": "0.1.21", + "version": "0.2.0", "license": "ISC", "dependencies": { - "csv-generate": "^4.4.2", - "csv-parse": "^5.6.0", - "csv-stringify": "^6.5.2", + "csv-generate": "^4.5.0", + "csv-parse": "^6.0.0", + "csv-stringify": "^6.6.0", "http-server": "^14.1.1", - "stream-transform": "^3.3.3" + "stream-transform": "^3.4.0" }, "devDependencies": { "buffer-browserify": "^0.2.5", @@ -19313,13 +19312,13 @@ } }, "packages/csv": { - "version": "6.3.11", + "version": "6.4.0", "license": "MIT", "dependencies": { - "csv-generate": "^4.4.2", - "csv-parse": "^5.6.0", - "csv-stringify": "^6.5.2", - "stream-transform": "^3.3.3" + "csv-generate": "^4.5.0", + "csv-parse": "^6.0.0", + "csv-stringify": "^6.6.0", + "stream-transform": "^3.4.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^16.0.1", @@ -19340,7 +19339,7 @@ } }, "packages/csv-generate": { - "version": "4.4.2", + "version": "4.5.0", "license": "MIT", "devDependencies": { "@rollup/plugin-node-resolve": "^16.0.1", @@ -19372,13 +19371,13 @@ } }, "packages/csv-parse": { - "version": "5.6.0", + "version": "6.0.0", "license": "MIT", "devDependencies": { "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.30", - "csv-generate": "^4.4.2", + "csv-generate": "^4.5.0", "csv-spectrum": "^2.0.0", "dedent": "^1.6.0", "each": "^2.7.2", @@ -19389,7 +19388,7 @@ "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "^13.2.3", - "stream-transform": "^3.3.3", + "stream-transform": "^3.4.0", "ts-node": "^10.9.2", "typescript": "^5.8.3" } @@ -19408,13 +19407,13 @@ } }, "packages/csv-stringify": { - "version": "6.5.2", + "version": "6.6.0", "license": "MIT", "devDependencies": { "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.30", - "csv-generate": "^4.4.2", + "csv-generate": "^4.5.0", "dedent": "^1.6.0", "each": "^2.7.2", "express": "^5.1.0", @@ -19442,13 +19441,13 @@ } }, "packages/stream-transform": { - "version": "3.3.3", + "version": "3.4.0", "license": "MIT", "devDependencies": { "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.30", - "csv-generate": "^4.4.2", + "csv-generate": "^4.5.0", "each": "^2.7.2", "mocha": "~11.5.0", "pad": "~3.3.0", diff --git a/packages/csv-generate/CHANGELOG.md b/packages/csv-generate/CHANGELOG.md index 2294a55b..c08a6640 100644 --- a/packages/csv-generate/CHANGELOG.md +++ b/packages/csv-generate/CHANGELOG.md @@ -3,6 +3,42 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 4.5.0 (2025-07-10) + +### Features + +- backport support for node 14 ([dbfeb78](https://github.com/adaltas/node-csv/commit/dbfeb78f61ed36f02936d63a53345708ca213e45)) +- backward support for node 8 ([496231d](https://github.com/adaltas/node-csv/commit/496231dfd838f0a6a72269a5a2390a4c637cef95)) +- **csv-generate:** breathe between async reads ([b1da5a1](https://github.com/adaltas/node-csv/commit/b1da5a13cf4dbbf0dd62f2e28e5dee8767ad0151)) +- **csv-generate:** set highWaterMark to default ([8e758cf](https://github.com/adaltas/node-csv/commit/8e758cf79ab8b089e9a6a80a1f06be524a208f35)) +- **csv-generate:** ts extends options with stream.ReadableOptions ([ef84fb2](https://github.com/adaltas/node-csv/commit/ef84fb2f980b5d39e2df2b61d012769119f31001)) +- **csv-generate:** types column option defined as an udf (fix [#417](https://github.com/adaltas/node-csv/issues/417)) ([65f1ace](https://github.com/adaltas/node-csv/commit/65f1aceede14e9136b347e8ef9e2019a81a51010)) +- esm migration ([b5c0d4b](https://github.com/adaltas/node-csv/commit/b5c0d4b191c8b57397808c0922a3f08248506a9f)) +- export ts types in sync ([890bf8d](https://github.com/adaltas/node-csv/commit/890bf8d950c18a05cab5e35a461d0847d9425156)) +- replace ts types with typesVersions ([acb41d5](https://github.com/adaltas/node-csv/commit/acb41d5031669f2d582e40da1c80f5fd4738fee4)) +- ts module Node16 and type declaration to exports field ([#341](https://github.com/adaltas/node-csv/issues/341)) ([4b0283d](https://github.com/adaltas/node-csv/commit/4b0283d17b7fa46daa1f87380759ba72c71ec79b)) +- wg stream api ([8a5eb7d](https://github.com/adaltas/node-csv/commit/8a5eb7dfd31b22217db4fbbc832d707221850785)) + +### Bug Fixes + +- commonjs types, run tsc and lint to validate changes ([#397](https://github.com/adaltas/node-csv/issues/397)) ([e6870fe](https://github.com/adaltas/node-csv/commit/e6870fe272c119e273196522c9771d12ff8b2a35)) +- correct exports in package.json with webpack ([154eafb](https://github.com/adaltas/node-csv/commit/154eafbac866eb4499a0d392f8dcd057695c2586)) +- **csv-demo-ts-cjs-node16:** upgrade module definition after latest typescript ([87fe919](https://github.com/adaltas/node-csv/commit/87fe91996fb2a8895c252177fca4f0cb59a518f9)) +- **csv-demo-webpack-ts:** remove polyfill ([47a99bd](https://github.com/adaltas/node-csv/commit/47a99bd944d1d943e6374227dbc4e20aaa2c8c7f)) +- **csv-demo-webpack-ts:** simplify export paths ([8d63a14](https://github.com/adaltas/node-csv/commit/8d63a14313bb6b26f13fafb740cc686f1dfaa65f)) +- **csv-generate:** catch invalid value error ([f031542](https://github.com/adaltas/node-csv/commit/f0315423ba576551f2bd08f3e1c3bc85e9003926)) +- **csv-generate:** coffee migration in sync incompatible with node < 14, fix [#289](https://github.com/adaltas/node-csv/issues/289) ([a5e14d8](https://github.com/adaltas/node-csv/commit/a5e14d82562e87c650af561ed7058bf91ef7d7f4)) +- **csv-generate:** record emited after end with sleep ([6632e63](https://github.com/adaltas/node-csv/commit/6632e63a7aff7d33f47aae91347a39649d5248c6)) +- **csv-generate:** stream.push after EOF ([97a3f58](https://github.com/adaltas/node-csv/commit/97a3f58dd73b6452b32cc39511b3ec145fe23c00)) +- dont insert polyfills in cjs [#303](https://github.com/adaltas/node-csv/issues/303) ([9baf334](https://github.com/adaltas/node-csv/commit/9baf334044dab90b4a0d096a7e456d0fd5807d5b)) +- esm exports in package.json files ([c48fe47](https://github.com/adaltas/node-csv/commit/c48fe478ced7560aa078fbc36ec33d6007111e2b)), closes [#308](https://github.com/adaltas/node-csv/issues/308) +- export original lib esm modules ([be25349](https://github.com/adaltas/node-csv/commit/be2534928ba21156e9cde1e15d2e8593d62ffe71)) +- expose browser esm modules ([eb87355](https://github.com/adaltas/node-csv/commit/eb873557c65912f065d2581d30a17a96b0bfd2d6)) +- refer to esm files in dist ([b780fbd](https://github.com/adaltas/node-csv/commit/b780fbd26f5e54494e511eb2e004d3cdedee3593)) +- remove samples from publicatgion ([12c221d](https://github.com/adaltas/node-csv/commit/12c221dc37add26f094e3bb7f94b50ee06ff5be6)) +- support ts node16 resolution in cjs ([#354](https://github.com/adaltas/node-csv/issues/354)) ([fa09d03](https://github.com/adaltas/node-csv/commit/fa09d03aaf0008b2790656871ca6b2c4be12d14c)) +- support TypeScript moduleResolution node16 ([#368](https://github.com/adaltas/node-csv/issues/368)) ([f4d7c97](https://github.com/adaltas/node-csv/commit/f4d7c97f39fb73e9d248eee21e61e7dc48015c78)) + ## [4.4.2](https://github.com/adaltas/node-csv/compare/csv-generate@4.4.1...csv-generate@4.4.2) (2024-11-21) **Note:** Version bump only for package csv-generate diff --git a/packages/csv-generate/dist/cjs/index.d.cts b/packages/csv-generate/dist/cjs/index.d.cts index c5528cfc..86f12688 100644 --- a/packages/csv-generate/dist/cjs/index.d.cts +++ b/packages/csv-generate/dist/cjs/index.d.cts @@ -1,4 +1,3 @@ - /// import * as stream from "stream"; @@ -6,89 +5,89 @@ import * as stream from "stream"; type Callback = (err?: Error, records?: any) => void; export class Generator extends stream.Readable { - constructor(options?: Options); - - readonly options: Options; + constructor(options?: Options); + + readonly options: Options; } export type ColumnsFunctionArgs = { - options: Options; - state: State; + options: Options; + state: State; }; export type ColumnsFunction = (args: ColumnsFunctionArgs) => string; export type State = { - start_time: number, - fixed_size_buffer: number, - count_written: number, - count_created: number, -} + start_time: number; + fixed_size_buffer: number; + count_written: number; + count_created: number; +}; export interface Options extends stream.ReadableOptions { - /** - * Define the number of generated fields and the generation method. - */ - columns?: number | (string | ColumnsFunction)[]; - /** - * Set the field delimiter. - */ - delimiter?: string; - /** - * Period to run in milliseconds. - */ - duration?: number; - /** - * If specified, then buffers will be decoded to strings using the specified encoding. - */ - encoding?: BufferEncoding | undefined; - /** - * When to stop the generation. - */ - end?: number | Date; - /** - * One or multiple characters to print at the end of the file; only apply when objectMode is disabled. - */ - eof?: boolean | string; - /** - * Generate buffers equals length as defined by the `highWaterMark` option. - */ - fixed_size?: boolean; - fixedSize?: boolean; - /** - * The maximum number of bytes to store in the internal buffer before ceasing to read from the underlying resource. - */ - high_water_mark?: number; - highWaterMark?: number; - /** - * Number of lines or records to generate. - */ - length?: number; - /** - * Maximum number of characters per word. - */ - max_word_length?: number; - maxWordLength?: number; - /** - * Whether this stream should behave as a stream of objects. - */ - object_mode?: boolean - objectMode?: boolean; - /** - * One or multiple characters used to delimit records. - */ - row_delimiter?: string; - /** - * Generate idempotent random characters if a number provided. - */ - seed?: boolean | number; - /** - * The time to wait between the generation of each records - */ - sleep?: number; + /** + * Define the number of generated fields and the generation method. + */ + columns?: number | (string | ColumnsFunction)[]; + /** + * Set the field delimiter. + */ + delimiter?: string; + /** + * Period to run in milliseconds. + */ + duration?: number; + /** + * If specified, then buffers will be decoded to strings using the specified encoding. + */ + encoding?: BufferEncoding | undefined; + /** + * When to stop the generation. + */ + end?: number | Date; + /** + * One or multiple characters to print at the end of the file; only apply when objectMode is disabled. + */ + eof?: boolean | string; + /** + * Generate buffers equals length as defined by the `highWaterMark` option. + */ + fixed_size?: boolean; + fixedSize?: boolean; + /** + * The maximum number of bytes to store in the internal buffer before ceasing to read from the underlying resource. + */ + high_water_mark?: number; + highWaterMark?: number; + /** + * Number of lines or records to generate. + */ + length?: number; + /** + * Maximum number of characters per word. + */ + max_word_length?: number; + maxWordLength?: number; + /** + * Whether this stream should behave as a stream of objects. + */ + object_mode?: boolean; + objectMode?: boolean; + /** + * One or multiple characters used to delimit records. + */ + row_delimiter?: string; + /** + * Generate idempotent random characters if a number provided. + */ + seed?: boolean | number; + /** + * The time to wait between the generation of each records + */ + sleep?: number; } declare function generate(options?: Options, callback?: Callback): Generator; declare function generate(callback?: Callback): Generator; // export default generate; -export {generate}; +export { generate }; diff --git a/packages/csv-generate/dist/cjs/stream.d.cts b/packages/csv-generate/dist/cjs/stream.d.cts index d577d3d3..92fbf4b6 100644 --- a/packages/csv-generate/dist/cjs/stream.d.cts +++ b/packages/csv-generate/dist/cjs/stream.d.cts @@ -1,5 +1,4 @@ - -import { Options } from './index.cjs'; +import { Options } from "./index.cjs"; declare function generate(options?: Options): ReadableStream; // export default generate; diff --git a/packages/csv-generate/dist/cjs/sync.d.cts b/packages/csv-generate/dist/cjs/sync.d.cts index 3a415aca..591f87dc 100644 --- a/packages/csv-generate/dist/cjs/sync.d.cts +++ b/packages/csv-generate/dist/cjs/sync.d.cts @@ -1,6 +1,7 @@ +import { Options } from "./index.cjs"; -import { Options } from './index.cjs'; - -declare function generate(options: number | Options): string & Array; +declare function generate( + options: number | Options, +): string & Array; // export default generate; export { generate, Options }; diff --git a/packages/csv-generate/dist/esm/index.d.ts b/packages/csv-generate/dist/esm/index.d.ts index c5528cfc..86f12688 100644 --- a/packages/csv-generate/dist/esm/index.d.ts +++ b/packages/csv-generate/dist/esm/index.d.ts @@ -1,4 +1,3 @@ - /// import * as stream from "stream"; @@ -6,89 +5,89 @@ import * as stream from "stream"; type Callback = (err?: Error, records?: any) => void; export class Generator extends stream.Readable { - constructor(options?: Options); - - readonly options: Options; + constructor(options?: Options); + + readonly options: Options; } export type ColumnsFunctionArgs = { - options: Options; - state: State; + options: Options; + state: State; }; export type ColumnsFunction = (args: ColumnsFunctionArgs) => string; export type State = { - start_time: number, - fixed_size_buffer: number, - count_written: number, - count_created: number, -} + start_time: number; + fixed_size_buffer: number; + count_written: number; + count_created: number; +}; export interface Options extends stream.ReadableOptions { - /** - * Define the number of generated fields and the generation method. - */ - columns?: number | (string | ColumnsFunction)[]; - /** - * Set the field delimiter. - */ - delimiter?: string; - /** - * Period to run in milliseconds. - */ - duration?: number; - /** - * If specified, then buffers will be decoded to strings using the specified encoding. - */ - encoding?: BufferEncoding | undefined; - /** - * When to stop the generation. - */ - end?: number | Date; - /** - * One or multiple characters to print at the end of the file; only apply when objectMode is disabled. - */ - eof?: boolean | string; - /** - * Generate buffers equals length as defined by the `highWaterMark` option. - */ - fixed_size?: boolean; - fixedSize?: boolean; - /** - * The maximum number of bytes to store in the internal buffer before ceasing to read from the underlying resource. - */ - high_water_mark?: number; - highWaterMark?: number; - /** - * Number of lines or records to generate. - */ - length?: number; - /** - * Maximum number of characters per word. - */ - max_word_length?: number; - maxWordLength?: number; - /** - * Whether this stream should behave as a stream of objects. - */ - object_mode?: boolean - objectMode?: boolean; - /** - * One or multiple characters used to delimit records. - */ - row_delimiter?: string; - /** - * Generate idempotent random characters if a number provided. - */ - seed?: boolean | number; - /** - * The time to wait between the generation of each records - */ - sleep?: number; + /** + * Define the number of generated fields and the generation method. + */ + columns?: number | (string | ColumnsFunction)[]; + /** + * Set the field delimiter. + */ + delimiter?: string; + /** + * Period to run in milliseconds. + */ + duration?: number; + /** + * If specified, then buffers will be decoded to strings using the specified encoding. + */ + encoding?: BufferEncoding | undefined; + /** + * When to stop the generation. + */ + end?: number | Date; + /** + * One or multiple characters to print at the end of the file; only apply when objectMode is disabled. + */ + eof?: boolean | string; + /** + * Generate buffers equals length as defined by the `highWaterMark` option. + */ + fixed_size?: boolean; + fixedSize?: boolean; + /** + * The maximum number of bytes to store in the internal buffer before ceasing to read from the underlying resource. + */ + high_water_mark?: number; + highWaterMark?: number; + /** + * Number of lines or records to generate. + */ + length?: number; + /** + * Maximum number of characters per word. + */ + max_word_length?: number; + maxWordLength?: number; + /** + * Whether this stream should behave as a stream of objects. + */ + object_mode?: boolean; + objectMode?: boolean; + /** + * One or multiple characters used to delimit records. + */ + row_delimiter?: string; + /** + * Generate idempotent random characters if a number provided. + */ + seed?: boolean | number; + /** + * The time to wait between the generation of each records + */ + sleep?: number; } declare function generate(options?: Options, callback?: Callback): Generator; declare function generate(callback?: Callback): Generator; // export default generate; -export {generate}; +export { generate }; diff --git a/packages/csv-generate/dist/esm/index.js b/packages/csv-generate/dist/esm/index.js index 79c042d6..4b097d02 100644 --- a/packages/csv-generate/dist/esm/index.js +++ b/packages/csv-generate/dist/esm/index.js @@ -831,8 +831,8 @@ function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1591,7 +1591,7 @@ Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, no Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1601,7 +1601,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1614,7 +1614,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1627,7 +1627,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1642,7 +1642,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2000,7 +2000,9 @@ EventEmitter.init = function() { this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -2569,94 +2571,19 @@ function Item(fun, array) { Item.prototype.run = function () { this.fun.apply(null, this.array); }; -var title = 'browser'; -var platform = 'browser'; -var browser = true; var env = {}; -var argv = []; -var version = ''; // empty string to avoid regexp issues -var versions = {}; -var release = {}; -var config = {}; - -function noop() {} - -var on = noop; -var addListener = noop; -var once = noop; -var off = noop; -var removeListener = noop; -var removeAllListeners = noop; -var emit = noop; - -function binding(name) { - throw new Error('process.binding is not supported'); -} - -function cwd () { return '/' } -function chdir (dir) { - throw new Error('process.chdir is not supported'); -}function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; -var performanceNow = - performance.now || +performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; -// generate timestamp or delta -// see http://nodejs.org/api/process.html#process_process_hrtime -function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] -} - -var startTime = new Date(); -function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; -} - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime -}; + env: env}; var inherits; if (typeof Object.create === 'function'){ diff --git a/packages/csv-generate/dist/esm/stream.d.ts b/packages/csv-generate/dist/esm/stream.d.ts index d53894a7..79188667 100644 --- a/packages/csv-generate/dist/esm/stream.d.ts +++ b/packages/csv-generate/dist/esm/stream.d.ts @@ -1,5 +1,4 @@ - -import { Options } from './index.js'; +import { Options } from "./index.js"; declare function generate(options?: Options): ReadableStream; // export default generate; diff --git a/packages/csv-generate/dist/esm/sync.d.ts b/packages/csv-generate/dist/esm/sync.d.ts index 965ad634..a93ff8c4 100644 --- a/packages/csv-generate/dist/esm/sync.d.ts +++ b/packages/csv-generate/dist/esm/sync.d.ts @@ -1,6 +1,7 @@ +import { Options } from "./index.js"; -import { Options } from './index.js'; - -declare function generate(options: number | Options): string & Array; +declare function generate( + options: number | Options, +): string & Array; // export default generate; export { generate, Options }; diff --git a/packages/csv-generate/dist/esm/sync.js b/packages/csv-generate/dist/esm/sync.js index 6c0f32d1..099a9e2f 100644 --- a/packages/csv-generate/dist/esm/sync.js +++ b/packages/csv-generate/dist/esm/sync.js @@ -831,8 +831,8 @@ function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1591,7 +1591,7 @@ Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, no Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1601,7 +1601,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1614,7 +1614,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1627,7 +1627,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1642,7 +1642,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2000,7 +2000,9 @@ EventEmitter.init = function() { this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -2569,94 +2571,19 @@ function Item(fun, array) { Item.prototype.run = function () { this.fun.apply(null, this.array); }; -var title = 'browser'; -var platform = 'browser'; -var browser = true; var env = {}; -var argv = []; -var version = ''; // empty string to avoid regexp issues -var versions = {}; -var release = {}; -var config = {}; - -function noop() {} - -var on = noop; -var addListener = noop; -var once = noop; -var off = noop; -var removeListener = noop; -var removeAllListeners = noop; -var emit = noop; - -function binding(name) { - throw new Error('process.binding is not supported'); -} - -function cwd () { return '/' } -function chdir (dir) { - throw new Error('process.chdir is not supported'); -}function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; -var performanceNow = - performance.now || +performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; -// generate timestamp or delta -// see http://nodejs.org/api/process.html#process_process_hrtime -function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] -} - -var startTime = new Date(); -function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; -} - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime -}; + env: env}; var inherits; if (typeof Object.create === 'function'){ diff --git a/packages/csv-generate/dist/iife/index.js b/packages/csv-generate/dist/iife/index.js index 2301b7b2..1b2b03a8 100644 --- a/packages/csv-generate/dist/iife/index.js +++ b/packages/csv-generate/dist/iife/index.js @@ -834,8 +834,8 @@ var csv_generate = (function (exports) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1594,7 +1594,7 @@ var csv_generate = (function (exports) { Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1604,7 +1604,7 @@ var csv_generate = (function (exports) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1617,7 +1617,7 @@ var csv_generate = (function (exports) { Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1630,7 +1630,7 @@ var csv_generate = (function (exports) { Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1645,7 +1645,7 @@ var csv_generate = (function (exports) { Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2003,7 +2003,9 @@ var csv_generate = (function (exports) { this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -2572,94 +2574,19 @@ var csv_generate = (function (exports) { Item.prototype.run = function () { this.fun.apply(null, this.array); }; - var title = 'browser'; - var platform = 'browser'; - var browser = true; var env = {}; - var argv = []; - var version = ''; // empty string to avoid regexp issues - var versions = {}; - var release = {}; - var config = {}; - - function noop() {} - - var on = noop; - var addListener = noop; - var once = noop; - var off = noop; - var removeListener = noop; - var removeAllListeners = noop; - var emit = noop; - - function binding(name) { - throw new Error('process.binding is not supported'); - } - - function cwd () { return '/' } - function chdir (dir) { - throw new Error('process.chdir is not supported'); - }function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; - var performanceNow = - performance.now || + performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; - // generate timestamp or delta - // see http://nodejs.org/api/process.html#process_process_hrtime - function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] - } - - var startTime = new Date(); - function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; - } - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime - }; + env: env}; var inherits; if (typeof Object.create === 'function'){ diff --git a/packages/csv-generate/dist/iife/sync.js b/packages/csv-generate/dist/iife/sync.js index 9b1463a1..3ac7ad9f 100644 --- a/packages/csv-generate/dist/iife/sync.js +++ b/packages/csv-generate/dist/iife/sync.js @@ -834,8 +834,8 @@ var csv_generate_sync = (function (exports) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1594,7 +1594,7 @@ var csv_generate_sync = (function (exports) { Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1604,7 +1604,7 @@ var csv_generate_sync = (function (exports) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1617,7 +1617,7 @@ var csv_generate_sync = (function (exports) { Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1630,7 +1630,7 @@ var csv_generate_sync = (function (exports) { Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1645,7 +1645,7 @@ var csv_generate_sync = (function (exports) { Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2003,7 +2003,9 @@ var csv_generate_sync = (function (exports) { this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -2572,94 +2574,19 @@ var csv_generate_sync = (function (exports) { Item.prototype.run = function () { this.fun.apply(null, this.array); }; - var title = 'browser'; - var platform = 'browser'; - var browser = true; var env = {}; - var argv = []; - var version = ''; // empty string to avoid regexp issues - var versions = {}; - var release = {}; - var config = {}; - - function noop() {} - - var on = noop; - var addListener = noop; - var once = noop; - var off = noop; - var removeListener = noop; - var removeAllListeners = noop; - var emit = noop; - - function binding(name) { - throw new Error('process.binding is not supported'); - } - - function cwd () { return '/' } - function chdir (dir) { - throw new Error('process.chdir is not supported'); - }function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; - var performanceNow = - performance.now || + performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; - // generate timestamp or delta - // see http://nodejs.org/api/process.html#process_process_hrtime - function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] - } - - var startTime = new Date(); - function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; - } - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime - }; + env: env}; var inherits; if (typeof Object.create === 'function'){ diff --git a/packages/csv-generate/dist/umd/index.js b/packages/csv-generate/dist/umd/index.js index 09d7900b..4ec027e5 100644 --- a/packages/csv-generate/dist/umd/index.js +++ b/packages/csv-generate/dist/umd/index.js @@ -837,8 +837,8 @@ byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1597,7 +1597,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1607,7 +1607,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1620,7 +1620,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1633,7 +1633,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1648,7 +1648,7 @@ Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2006,7 +2006,9 @@ this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -2575,94 +2577,19 @@ Item.prototype.run = function () { this.fun.apply(null, this.array); }; - var title = 'browser'; - var platform = 'browser'; - var browser = true; var env = {}; - var argv = []; - var version = ''; // empty string to avoid regexp issues - var versions = {}; - var release = {}; - var config = {}; - - function noop() {} - - var on = noop; - var addListener = noop; - var once = noop; - var off = noop; - var removeListener = noop; - var removeAllListeners = noop; - var emit = noop; - - function binding(name) { - throw new Error('process.binding is not supported'); - } - - function cwd () { return '/' } - function chdir (dir) { - throw new Error('process.chdir is not supported'); - }function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; - var performanceNow = - performance.now || + performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; - // generate timestamp or delta - // see http://nodejs.org/api/process.html#process_process_hrtime - function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] - } - - var startTime = new Date(); - function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; - } - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime - }; + env: env}; var inherits; if (typeof Object.create === 'function'){ diff --git a/packages/csv-generate/dist/umd/sync.js b/packages/csv-generate/dist/umd/sync.js index e1d938dd..d10aa6aa 100644 --- a/packages/csv-generate/dist/umd/sync.js +++ b/packages/csv-generate/dist/umd/sync.js @@ -837,8 +837,8 @@ byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1597,7 +1597,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1607,7 +1607,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1620,7 +1620,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1633,7 +1633,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1648,7 +1648,7 @@ Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2006,7 +2006,9 @@ this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -2575,94 +2577,19 @@ Item.prototype.run = function () { this.fun.apply(null, this.array); }; - var title = 'browser'; - var platform = 'browser'; - var browser = true; var env = {}; - var argv = []; - var version = ''; // empty string to avoid regexp issues - var versions = {}; - var release = {}; - var config = {}; - - function noop() {} - - var on = noop; - var addListener = noop; - var once = noop; - var off = noop; - var removeListener = noop; - var removeAllListeners = noop; - var emit = noop; - - function binding(name) { - throw new Error('process.binding is not supported'); - } - - function cwd () { return '/' } - function chdir (dir) { - throw new Error('process.chdir is not supported'); - }function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; - var performanceNow = - performance.now || + performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; - // generate timestamp or delta - // see http://nodejs.org/api/process.html#process_process_hrtime - function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] - } - - var startTime = new Date(); - function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; - } - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime - }; + env: env}; var inherits; if (typeof Object.create === 'function'){ diff --git a/packages/csv-generate/package.json b/packages/csv-generate/package.json index a85c52bc..91d520f4 100644 --- a/packages/csv-generate/package.json +++ b/packages/csv-generate/package.json @@ -1,5 +1,5 @@ { - "version": "4.4.2", + "version": "4.5.0", "name": "csv-generate", "description": "CSV and object generation implementing the Node.js `stream.Readable` API", "keywords": [ diff --git a/packages/csv-parse/CHANGELOG.md b/packages/csv-parse/CHANGELOG.md index 14826337..5fc5fff4 100644 --- a/packages/csv-parse/CHANGELOG.md +++ b/packages/csv-parse/CHANGELOG.md @@ -3,6 +3,88 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 6.0.0 (2025-07-10) + +### ⚠ BREAKING CHANGES + +- **csv-parse:** rename group_columns_by_name option +- **csv-parse:** rename RECORD_INCONSISTENT_FIELDS_LENGTH +- **csv-parse:** rename RECORD_DONT_MATCH_COLUMNS_LENGTH +- **csv-parse:** rename skip_records_with_error +- **csv-parse:** rename skip_records_with_empty_values +- **csv-parse:** rename relax to relax_quotes + +### Features + +- backport support for node 14 ([dbfeb78](https://github.com/adaltas/node-csv/commit/dbfeb78f61ed36f02936d63a53345708ca213e45)) +- backward support for node 8 ([496231d](https://github.com/adaltas/node-csv/commit/496231dfd838f0a6a72269a5a2390a4c637cef95)) +- **csv-parse:** add `columns` property in `Info` object type ([#390](https://github.com/adaltas/node-csv/issues/390)) ([2dd2a92](https://github.com/adaltas/node-csv/commit/2dd2a92d0376c3cee3a4a39334f9828874f422bd)) +- **csv-parse:** add generic type argument ([#457](https://github.com/adaltas/node-csv/issues/457)) ([ef71342](https://github.com/adaltas/node-csv/commit/ef713422d75812f2d4634c0c3f1d1f46a68ad186)), closes [#278](https://github.com/adaltas/node-csv/issues/278) [#407](https://github.com/adaltas/node-csv/issues/407) +- **csv-parse:** boolean and null comment type ([b9ac1f0](https://github.com/adaltas/node-csv/commit/b9ac1f0ce8d10a157d189ff4277a668ec2680b07)) +- **csv-parse:** callback records defined type ([3d4f225](https://github.com/adaltas/node-csv/commit/3d4f22549941766ecec87c962f4bb5058b996c24)) +- **csv-parse:** cast_date as a function (fix [#342](https://github.com/adaltas/node-csv/issues/342)) ([2807d29](https://github.com/adaltas/node-csv/commit/2807d292c8987f5dedde4f7fe0bd0ac7f75c8755)) +- **csv-parse:** casting context raw export ([a26f5d7](https://github.com/adaltas/node-csv/commit/a26f5d71c82dcdda01037965330919344eedaf47)) +- **csv-parse:** implement TransformStream ([#445](https://github.com/adaltas/node-csv/issues/445)) ([1213de8](https://github.com/adaltas/node-csv/commit/1213de8f032432ac09dd34861446b91ae85220ef)) +- **csv-parse:** improve record_delimiter validation ([67b7da8](https://github.com/adaltas/node-csv/commit/67b7da892db7f0f426b9f0fa12063e81eafe8a9b)) +- **csv-parse:** input as Uint8Array (fix [#458](https://github.com/adaltas/node-csv/issues/458)) ([24af461](https://github.com/adaltas/node-csv/commit/24af4615343bf6f167adf2226d6906cf0e2cf89d)) +- **csv-parse:** new comment_no_infix option (fix [#325](https://github.com/adaltas/node-csv/issues/325)) ([caca5c3](https://github.com/adaltas/node-csv/commit/caca5c3044541acfc9fe4a7f32167bb1179b6253)) +- **csv-parse:** normailzsed options type ([da7a62e](https://github.com/adaltas/node-csv/commit/da7a62e3b30fdc1fbd6293cbc9289a8ff6f5f64a)) +- **csv-parse:** normalize_options export ([9056293](https://github.com/adaltas/node-csv/commit/9056293960a2e0bdc0e4bae30d819ca794407fed)) +- **csv-parse:** null comment_no_infix type ([d8bf4fd](https://github.com/adaltas/node-csv/commit/d8bf4fd1fb813553a0e312b44374877b4dace52d)) +- **csv-parse:** objname index ([015b936](https://github.com/adaltas/node-csv/commit/015b936ea42026efa52263a7687f886463263ed8)) +- **csv-parse:** on_skip catch thrown error ([987a3a9](https://github.com/adaltas/node-csv/commit/987a3a9a6873c06c7e2256a2bd83415b3fe0323b)) +- **csv-parse:** skip_line_with_errors used with raw print current buffer (fix [#292](https://github.com/adaltas/node-csv/issues/292)) ([2741990](https://github.com/adaltas/node-csv/commit/27419908b9ce5319307bb6647335d5c07cd1e3a4)) +- **csv-parse:** ts type encoding with BufferEncoding ([39a4388](https://github.com/adaltas/node-csv/commit/39a43886904801d47a92a3cb5722409f36020534)) +- **csv-parse:** use ts unknown instead of any when possible ([a47badf](https://github.com/adaltas/node-csv/commit/a47badf599211ad12c4dd1ffac800adb3da393b7)) +- esm migration ([b5c0d4b](https://github.com/adaltas/node-csv/commit/b5c0d4b191c8b57397808c0922a3f08248506a9f)) +- export ts types in sync ([890bf8d](https://github.com/adaltas/node-csv/commit/890bf8d950c18a05cab5e35a461d0847d9425156)) +- replace ts types with typesVersions ([acb41d5](https://github.com/adaltas/node-csv/commit/acb41d5031669f2d582e40da1c80f5fd4738fee4)) +- ts module Node16 and type declaration to exports field ([#341](https://github.com/adaltas/node-csv/issues/341)) ([4b0283d](https://github.com/adaltas/node-csv/commit/4b0283d17b7fa46daa1f87380759ba72c71ec79b)) +- wg stream api ([8a5eb7d](https://github.com/adaltas/node-csv/commit/8a5eb7dfd31b22217db4fbbc832d707221850785)) + +### Bug Fixes + +- commonjs types, run tsc and lint to validate changes ([#397](https://github.com/adaltas/node-csv/issues/397)) ([e6870fe](https://github.com/adaltas/node-csv/commit/e6870fe272c119e273196522c9771d12ff8b2a35)) +- correct exports in package.json with webpack ([154eafb](https://github.com/adaltas/node-csv/commit/154eafbac866eb4499a0d392f8dcd057695c2586)) +- **csv-demo-ts-cjs-node16:** upgrade module definition after latest typescript ([87fe919](https://github.com/adaltas/node-csv/commit/87fe91996fb2a8895c252177fca4f0cb59a518f9)) +- **csv-demo-webpack-ts:** remove polyfill ([47a99bd](https://github.com/adaltas/node-csv/commit/47a99bd944d1d943e6374227dbc4e20aaa2c8c7f)) +- **csv-demo-webpack-ts:** simplify export paths ([8d63a14](https://github.com/adaltas/node-csv/commit/8d63a14313bb6b26f13fafb740cc686f1dfaa65f)) +- **csv-parse:** build from previus commit ([29a0916](https://github.com/adaltas/node-csv/commit/29a0916026429d648e8c515ada4a452036e0736d)) +- **csv-parse:** call destroy on end (fix [#410](https://github.com/adaltas/node-csv/issues/410)) ([0df32c6](https://github.com/adaltas/node-csv/commit/0df32c6a3500d2541451846c6a152ff991a2f2ff)) +- **csv-parse:** comment infix when comment first field char (fix [#415](https://github.com/adaltas/node-csv/issues/415)) ([8e0f8b8](https://github.com/adaltas/node-csv/commit/8e0f8b8e11736f1223b0bda4dd2a3b37506dd531)) +- **csv-parse:** destroy on end and call close event (fix [#333](https://github.com/adaltas/node-csv/issues/333)) ([ca3f55b](https://github.com/adaltas/node-csv/commit/ca3f55b7cf556b45377677428783608a2d9ebbb2)) +- **csv-parse:** encoding detection with bom ([#350](https://github.com/adaltas/node-csv/issues/350)) ([fd75e66](https://github.com/adaltas/node-csv/commit/fd75e6626c1c549936bf35a2247ebefa0f3d5ec3)) +- **csv-parse:** export csv error class in sync ([fc89380](https://github.com/adaltas/node-csv/commit/fc8938090141861dcbcae214f64e52a0aa6cc691)) +- **csv-parse:** improve INVALID_OPENING_QUOTE error message (fix adaltas/node-csv-docs[#120](https://github.com/adaltas/node-csv/issues/120)) ([3639780](https://github.com/adaltas/node-csv/commit/36397800a9b479658e6497bb521a27c037fc3abb)) +- **csv-parse:** premature close error ([c6473a9](https://github.com/adaltas/node-csv/commit/c6473a9cb6c5e4c94e42c30c2b9d15b049f16a6b)) +- **csv-parse:** record_delimiter and non default encoding (fix [#365](https://github.com/adaltas/node-csv/issues/365)) ([16fdb2d](https://github.com/adaltas/node-csv/commit/16fdb2dd2c3221d00568f28bed44106ffc0d49ef)) +- **csv-parse:** remove support for cast_date, no test ([5471985](https://github.com/adaltas/node-csv/commit/5471985e7e5f603ee1e3dd7bcf203415d94978f5)) +- **csv-parse:** rtrim encoding support (fix [#349](https://github.com/adaltas/node-csv/issues/349)) ([8bf52f0](https://github.com/adaltas/node-csv/commit/8bf52f0d5c25ee2423cb1629d3e9103534668c83)) +- **csv-parse:** skip event not raised with bom (fix [#411](https://github.com/adaltas/node-csv/issues/411)) ([1326351](https://github.com/adaltas/node-csv/commit/13263514ef6ec02000cf2da39ba6aa2ff92f00ae)) +- **csv-parse:** ts callback CsvError argument ([899dc67](https://github.com/adaltas/node-csv/commit/899dc67ed6256478e8eecbcc5b925f238ce367d5)) +- dont insert polyfills in cjs [#303](https://github.com/adaltas/node-csv/issues/303) ([9baf334](https://github.com/adaltas/node-csv/commit/9baf334044dab90b4a0d096a7e456d0fd5807d5b)) +- esm exports in package.json files ([c48fe47](https://github.com/adaltas/node-csv/commit/c48fe478ced7560aa078fbc36ec33d6007111e2b)), closes [#308](https://github.com/adaltas/node-csv/issues/308) +- export original lib esm modules ([be25349](https://github.com/adaltas/node-csv/commit/be2534928ba21156e9cde1e15d2e8593d62ffe71)) +- expose browser esm modules ([eb87355](https://github.com/adaltas/node-csv/commit/eb873557c65912f065d2581d30a17a96b0bfd2d6)) +- fallback to setTimeout is setImmediate is undefined ([3d6a2d0](https://github.com/adaltas/node-csv/commit/3d6a2d0a655af342f28456b46db7ccfe7ee9d664)) +- refer to esm files in dist ([b780fbd](https://github.com/adaltas/node-csv/commit/b780fbd26f5e54494e511eb2e004d3cdedee3593)) +- remove samples from publicatgion ([12c221d](https://github.com/adaltas/node-csv/commit/12c221dc37add26f094e3bb7f94b50ee06ff5be6)) +- support ts node16 resolution in cjs ([#354](https://github.com/adaltas/node-csv/issues/354)) ([fa09d03](https://github.com/adaltas/node-csv/commit/fa09d03aaf0008b2790656871ca6b2c4be12d14c)) +- support TypeScript moduleResolution node16 ([#368](https://github.com/adaltas/node-csv/issues/368)) ([f4d7c97](https://github.com/adaltas/node-csv/commit/f4d7c97f39fb73e9d248eee21e61e7dc48015c78)) + +### Performance Improvements + +- **csv-parse:** buffer unsafe allocation ([35c1f4a](https://github.com/adaltas/node-csv/commit/35c1f4a9dd806adc4de749c2e211bd436224d7f0)) + +### Code Refactoring + +- **csv-parse:** rename group_columns_by_name option ([74334cf](https://github.com/adaltas/node-csv/commit/74334cf0e85e005a878c0597b3300f4762116a0d)) +- **csv-parse:** rename RECORD_DONT_MATCH_COLUMNS_LENGTH ([fb391c9](https://github.com/adaltas/node-csv/commit/fb391c92fa248bda30b816930cac88a5d9026b04)) +- **csv-parse:** rename RECORD_INCONSISTENT_FIELDS_LENGTH ([7b55f05](https://github.com/adaltas/node-csv/commit/7b55f050df327939efcb65d4e76d27f98c89d925)) +- **csv-parse:** rename relax to relax_quotes ([9fffd50](https://github.com/adaltas/node-csv/commit/9fffd50762e10b3794883c6b3751ad209510f82e)) +- **csv-parse:** rename skip_records_with_empty_values ([aa432c1](https://github.com/adaltas/node-csv/commit/aa432c1251327b579ee7f71bd9fd776021ac1f1e)) +- **csv-parse:** rename skip_records_with_error ([0376af7](https://github.com/adaltas/node-csv/commit/0376af7984caa6726d12980edecccda1bbbbcacc)) + ## [5.6.0](https://github.com/adaltas/node-csv/compare/csv-parse@5.5.6...csv-parse@5.6.0) (2024-11-21) ### Features diff --git a/packages/csv-parse/dist/cjs/index.cjs b/packages/csv-parse/dist/cjs/index.cjs index df3086ab..9fb5144b 100644 --- a/packages/csv-parse/dist/cjs/index.cjs +++ b/packages/csv-parse/dist/cjs/index.cjs @@ -281,7 +281,7 @@ const normalize_options = function (opts) { ); } // Normalize option `columns` - options.cast_first_line_to_header = null; + options.cast_first_line_to_header = undefined; if (options.columns === true) { // Fields in the first line are converted as-is to columns options.cast_first_line_to_header = undefined; @@ -1709,10 +1709,14 @@ const transform = function (original_options = {}) { if (skip_records_with_error) { this.state.recordHasError = true; if (this.options.on_skip !== undefined) { - this.options.on_skip( - err, - raw ? this.state.rawBuffer.toString(encoding) : undefined, - ); + try { + this.options.on_skip( + err, + raw ? this.state.rawBuffer.toString(encoding) : undefined, + ); + } catch (err) { + return err; + } } // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined); return undefined; @@ -1886,4 +1890,5 @@ const parse = function () { exports.CsvError = CsvError; exports.Parser = Parser; +exports.normalize_options = normalize_options; exports.parse = parse; diff --git a/packages/csv-parse/dist/cjs/index.d.cts b/packages/csv-parse/dist/cjs/index.d.cts index ec8aa027..403243a6 100644 --- a/packages/csv-parse/dist/cjs/index.d.cts +++ b/packages/csv-parse/dist/cjs/index.d.cts @@ -4,280 +4,504 @@ import * as stream from "stream"; -export type Callback = (err: CsvError | undefined, records: any | undefined, info: Info) => void; +export type Callback = ( + err: CsvError | undefined, + records: T[], + info?: Info, +) => void; -export interface Parser extends stream.Transform {} +// export interface Parser extends stream.Transform {} -export class Parser { - constructor(options: Options); - - __push(line: any): any; - - __write(chars: any, end: any, callback: any): any; - - readonly options: Options - - readonly info: Info; +// export class Parser extends stream.Transform { +export class Parser extends stream.Transform { + constructor(options: Options); + + // __push(line: T): CsvError | undefined; + __push(line: any): CsvError | undefined; + + // __write(chars: any, end: any, callback: any): any; + + readonly options: OptionsNormalized; + + readonly info: Info; +} + +export interface Info { + /** + * Count the number of lines being fully commented. + */ + readonly comment_lines: number; + /** + * Count the number of processed empty lines. + */ + readonly empty_lines: number; + /** + * The number of lines encountered in the source dataset, start at 1 for the first line. + */ + readonly lines: number; + /** + * Count the number of processed records. + */ + readonly records: number; + /** + * Count of the number of processed bytes. + */ + readonly bytes: number; + /** + * Number of non uniform records when `relax_column_count` is true. + */ + readonly invalid_field_length: number; + /** + * Normalized verion of `options.columns` when `options.columns` is true, boolean otherwise. + */ + readonly columns: boolean | { name: string }[] | { disabled: true }[]; } export interface CastingContext { - readonly column: number | string; - readonly empty_lines: number; - readonly error: CsvError; - readonly header: boolean; - readonly index: number; - readonly quoting: boolean; - readonly lines: number; - readonly records: number; - readonly invalid_field_length: number; + readonly column: number | string; + readonly empty_lines: number; + readonly error: CsvError; + readonly header: boolean; + readonly index: number; + readonly quoting: boolean; + readonly lines: number; + readonly raw: string | undefined; + readonly records: number; + readonly invalid_field_length: number; } -export type CastingFunction = (value: string, context: CastingContext) => any; +export type CastingFunction = ( + value: string, + context: CastingContext, +) => unknown; + +export type CastingDateFunction = ( + value: string, + context: CastingContext, +) => Date; -export type CastingDateFunction = (value: string, context: CastingContext) => Date; +export type ColumnOption = + | K + | undefined + | null + | false + | { name: K }; -export type ColumnOption = string | undefined | null | false | { name: string }; +export interface OptionsNormalized { + auto_parse?: boolean | CastingFunction; + auto_parse_date?: boolean | CastingDateFunction; + /** + * If true, detect and exclude the byte order mark (BOM) from the CSV input if present. + */ + bom?: boolean; + /** + * If true, the parser will attempt to convert input string to native types. + * If a function, receive the value as first argument, a context as second argument and return a new value. More information about the context properties is available below. + */ + cast?: boolean | CastingFunction; + /** + * If true, the parser will attempt to convert input string to dates. + * If a function, receive the value as argument and return a new value. It requires the "auto_parse" option. Be careful, it relies on Date.parse. + */ + cast_date?: boolean | CastingDateFunction; + /** + * Internal property string the function to + */ + cast_first_line_to_header?: ( + record: T, + ) => ColumnOption< + T extends string[] ? string : T extends unknown ? string : keyof T + >[]; + /** + * List of fields as an array, a user defined callback accepting the first + * line and returning the column names or true if autodiscovered in the first + * CSV line, default to null, affect the result data set in the sense that + * records will be objects instead of arrays. + */ + columns: + | boolean + | ColumnOption< + T extends string[] ? string : T extends unknown ? string : keyof T + >[]; + /** + * Convert values into an array of values when columns are activated and + * when multiple columns of the same name are found. + */ + group_columns_by_name: boolean; + /** + * Treat all the characters after this one as a comment, default to '' (disabled). + */ + comment: string | null; + /** + * Restrict the definition of comments to a full line. Comment characters + * defined in the middle of the line are not interpreted as such. The + * option require the activation of comments. + */ + comment_no_infix: boolean; + /** + * Set the field delimiter. One character only, defaults to comma. + */ + delimiter: Buffer[]; + /** + * Set the source and destination encoding, a value of `null` returns buffer instead of strings. + */ + encoding: BufferEncoding | null; + /** + * Set the escape character, one character only, defaults to double quotes. + */ + escape: null | Buffer; + /** + * Start handling records from the requested number of records. + */ + from: number; + /** + * Start handling records from the requested line number. + */ + from_line: number; + /** + * Don't interpret delimiters as such in the last field according to the number of fields calculated from the number of columns, the option require the presence of the `column` option when `true`. + */ + ignore_last_delimiters: boolean | number; + /** + * Generate two properties `info` and `record` where `info` is a snapshot of the info object at the time the record was created and `record` is the parsed array or object. + */ + info: boolean; + /** + * If true, ignore whitespace immediately following the delimiter (i.e. left-trim all fields), defaults to false. + * Does not remove whitespace in a quoted field. + */ + ltrim: boolean; + /** + * Maximum numer of characters to be contained in the field and line buffers before an exception is raised, + * used to guard against a wrong delimiter or record_delimiter, + * default to 128000 characters. + */ + max_record_size: number; + /** + * Name of header-record title to name objects by. + */ + objname: number | string | undefined; + /** + * Alter and filter records by executing a user defined function. + */ + on_record?: (record: T, context: CastingContext) => T | undefined; + /** + * Optional character surrounding a field, one character only, defaults to double quotes. + */ + quote?: Buffer | null; + /** + * Generate two properties raw and row where raw is the original CSV row content and row is the parsed array or object. + */ + raw: boolean; + /** + * Discard inconsistent columns count, default to false. + */ + relax_column_count: boolean; + /** + * Discard inconsistent columns count when the record contains less fields than expected, default to false. + */ + relax_column_count_less: boolean; + /** + * Discard inconsistent columns count when the record contains more fields than expected, default to false. + */ + relax_column_count_more: boolean; + /** + * Preserve quotes inside unquoted field. + */ + relax_quotes: boolean; + /** + * One or multiple characters used to delimit record rows; defaults to auto discovery if not provided. + * Supported auto discovery method are Linux ("\n"), Apple ("\r") and Windows ("\r\n") row delimiters. + */ + record_delimiter: Buffer[]; + /** + * If true, ignore whitespace immediately preceding the delimiter (i.e. right-trim all fields), defaults to false. + * Does not remove whitespace in a quoted field. + */ + rtrim: boolean; + /** + * Dont generate empty values for empty lines. + * Defaults to false + */ + skip_empty_lines: boolean; + /** + * Skip a line with error found inside and directly go process the next line. + */ + skip_records_with_error: boolean; + /** + * Don't generate records for lines containing empty column values (column matching /\s*\/), defaults to false. + */ + skip_records_with_empty_values: boolean; + /** + * Stop handling records after the requested number of records. + */ + to: number; + /** + * Stop handling records after the requested line number. + */ + to_line: number; + /** + * If true, ignore whitespace immediately around the delimiter, defaults to false. + * Does not remove whitespace in a quoted field. + */ + trim: boolean; +} /* Note, could not `extends stream.TransformOptions` because encoding can be BufferEncoding and undefined as well as null which is not defined in the extended type. */ -export interface Options { - /** - * If true, the parser will attempt to convert read data types to native types. - * @deprecated Use {@link cast} - */ - auto_parse?: boolean | CastingFunction; - autoParse?: boolean | CastingFunction; - /** - * If true, the parser will attempt to convert read data types to dates. It requires the "auto_parse" option. - * @deprecated Use {@link cast_date} - */ - auto_parse_date?: boolean | CastingDateFunction; - autoParseDate?: boolean | CastingDateFunction; - /** - * If true, detect and exclude the byte order mark (BOM) from the CSV input if present. - */ - bom?: boolean; - /** - * If true, the parser will attempt to convert input string to native types. - * If a function, receive the value as first argument, a context as second argument and return a new value. More information about the context properties is available below. - */ - cast?: boolean | CastingFunction; - /** - * If true, the parser will attempt to convert input string to dates. - * If a function, receive the value as argument and return a new value. It requires the "auto_parse" option. Be careful, it relies on Date.parse. - */ - cast_date?: boolean | CastingDateFunction; - castDate?: boolean | CastingDateFunction; - /** - * List of fields as an array, - * a user defined callback accepting the first line and returning the column names or true if autodiscovered in the first CSV line, - * default to null, - * affect the result data set in the sense that records will be objects instead of arrays. - */ - columns?: ColumnOption[] | boolean | ((record: any) => ColumnOption[]); - /** - * Convert values into an array of values when columns are activated and - * when multiple columns of the same name are found. - */ - group_columns_by_name?: boolean; - groupColumnsByName?: boolean; - /** - * Treat all the characters after this one as a comment, default to '' (disabled). - */ - comment?: string; - /** - * Restrict the definition of comments to a full line. Comment characters - * defined in the middle of the line are not interpreted as such. The - * option require the activation of comments. - */ - comment_no_infix?: boolean; - /** - * Set the field delimiter. One character only, defaults to comma. - */ - delimiter?: string | string[] | Buffer; - /** - * Set the source and destination encoding, a value of `null` returns buffer instead of strings. - */ - encoding?: BufferEncoding | undefined; - /** - * Set the escape character, one character only, defaults to double quotes. - */ - escape?: string | null | false | Buffer; - /** - * Start handling records from the requested number of records. - */ - from?: number; - /** - * Start handling records from the requested line number. - */ - from_line?: number; - fromLine?: number; - /** - * Don't interpret delimiters as such in the last field according to the number of fields calculated from the number of columns, the option require the presence of the `column` option when `true`. - */ - ignore_last_delimiters?: boolean | number; - /** - * Generate two properties `info` and `record` where `info` is a snapshot of the info object at the time the record was created and `record` is the parsed array or object. - */ - info?: boolean; - /** - * If true, ignore whitespace immediately following the delimiter (i.e. left-trim all fields), defaults to false. - * Does not remove whitespace in a quoted field. - */ - ltrim?: boolean; - /** - * Maximum numer of characters to be contained in the field and line buffers before an exception is raised, - * used to guard against a wrong delimiter or record_delimiter, - * default to 128000 characters. - */ - max_record_size?: number; - maxRecordSize?: number; - /** - * Name of header-record title to name objects by. - */ - objname?: string; - /** - * Alter and filter records by executing a user defined function. - */ - on_record?: (record: any, context: CastingContext) => any; - onRecord?: (record: any, context: CastingContext) => any; - /** - * Optional character surrounding a field, one character only, defaults to double quotes. - */ - quote?: string | boolean | Buffer | null; - /** - * Generate two properties raw and row where raw is the original CSV row content and row is the parsed array or object. - */ - raw?: boolean; - /** - * Discard inconsistent columns count, default to false. - */ - relax_column_count?: boolean; - relaxColumnCount?: boolean; - /** - * Discard inconsistent columns count when the record contains less fields than expected, default to false. - */ - relax_column_count_less?: boolean; - relaxColumnCountLess?: boolean; - /** - * Discard inconsistent columns count when the record contains more fields than expected, default to false. - */ - relax_column_count_more?: boolean; - relaxColumnCountMore?: boolean; - /** - * Preserve quotes inside unquoted field. - */ - relax_quotes?: boolean; - relaxQuotes?: boolean; - /** - * One or multiple characters used to delimit record rows; defaults to auto discovery if not provided. - * Supported auto discovery method are Linux ("\n"), Apple ("\r") and Windows ("\r\n") row delimiters. - */ - record_delimiter?: string | string[] | Buffer | Buffer[]; - recordDelimiter?: string | string[] | Buffer | Buffer[]; - /** - * If true, ignore whitespace immediately preceding the delimiter (i.e. right-trim all fields), defaults to false. - * Does not remove whitespace in a quoted field. - */ - rtrim?: boolean; - /** - * Dont generate empty values for empty lines. - * Defaults to false - */ - skip_empty_lines?: boolean; - skipEmptyLines?: boolean; - /** - * Skip a line with error found inside and directly go process the next line. - */ - skip_records_with_error?: boolean; - skipRecordsWithError?: boolean; - /** - * Don't generate records for lines containing empty column values (column matching /\s*\/), defaults to false. - */ - skip_records_with_empty_values?: boolean; - skipRecordsWithEmptyValues?: boolean; - /** - * Stop handling records after the requested number of records. - */ - to?: number; - /** - * Stop handling records after the requested line number. - */ - to_line?: number; - toLine?: number; - /** - * If true, ignore whitespace immediately around the delimiter, defaults to false. - * Does not remove whitespace in a quoted field. - */ - trim?: boolean; -} - -export interface Info { - /** - * Count the number of lines being fully commented. - */ - readonly comment_lines: number; - /** - * Count the number of processed empty lines. - */ - readonly empty_lines: number; - /** - * The number of lines encountered in the source dataset, start at 1 for the first line. - */ - readonly lines: number; - /** - * Count the number of processed records. - */ - readonly records: number; - /** - * Count of the number of processed bytes. - */ - readonly bytes: number; - /** - * Number of non uniform records when `relax_column_count` is true. - */ - readonly invalid_field_length: number; - /** - * Normalized verion of `options.columns` when `options.columns` is true, boolean otherwise. - */ - readonly columns: boolean | { name: string }[] | { disabled: true }[]; +export interface Options { + /** + * If true, the parser will attempt to convert read data types to native types. + * @deprecated Use {@link cast} + */ + auto_parse?: boolean | CastingFunction; + autoParse?: boolean | CastingFunction; + /** + * If true, the parser will attempt to convert read data types to dates. It requires the "auto_parse" option. + * @deprecated Use {@link cast_date} + */ + auto_parse_date?: boolean | CastingDateFunction; + autoParseDate?: boolean | CastingDateFunction; + /** + * If true, detect and exclude the byte order mark (BOM) from the CSV input if present. + */ + bom?: boolean; + /** + * If true, the parser will attempt to convert input string to native types. + * If a function, receive the value as first argument, a context as second argument and return a new value. More information about the context properties is available below. + */ + cast?: boolean | CastingFunction; + /** + * If true, the parser will attempt to convert input string to dates. + * If a function, receive the value as argument and return a new value. It requires the "auto_parse" option. Be careful, it relies on Date.parse. + */ + cast_date?: boolean | CastingDateFunction; + castDate?: boolean | CastingDateFunction; + /** + * List of fields as an array, + * a user defined callback accepting the first line and returning the column names or true if autodiscovered in the first CSV line, + * default to null, + * affect the result data set in the sense that records will be objects instead of arrays. + */ + columns?: + | boolean + | ColumnOption< + T extends string[] ? string : T extends unknown ? string : keyof T + >[] + | (( + record: T, + ) => ColumnOption< + T extends string[] ? string : T extends unknown ? string : keyof T + >[]); + /** + * Convert values into an array of values when columns are activated and + * when multiple columns of the same name are found. + */ + group_columns_by_name?: boolean; + groupColumnsByName?: boolean; + /** + * Treat all the characters after this one as a comment, default to '' (disabled). + */ + comment?: string | boolean | null; + /** + * Restrict the definition of comments to a full line. Comment characters + * defined in the middle of the line are not interpreted as such. The + * option require the activation of comments. + */ + comment_no_infix?: boolean | null; + /** + * Set the field delimiter. One character only, defaults to comma. + */ + delimiter?: string | string[] | Buffer; + /** + * Set the source and destination encoding, a value of `null` returns buffer instead of strings. + */ + encoding?: BufferEncoding | boolean | null | undefined; + /** + * Set the escape character, one character only, defaults to double quotes. + */ + escape?: string | null | boolean | Buffer; + /** + * Start handling records from the requested number of records. + */ + from?: number | string; + /** + * Start handling records from the requested line number. + */ + from_line?: null | number | string; + fromLine?: null | number | string; + /** + * Don't interpret delimiters as such in the last field according to the number of fields calculated from the number of columns, the option require the presence of the `column` option when `true`. + */ + ignore_last_delimiters?: boolean | number; + /** + * Generate two properties `info` and `record` where `info` is a snapshot of the info object at the time the record was created and `record` is the parsed array or object. + */ + info?: boolean; + /** + * If true, ignore whitespace immediately following the delimiter (i.e. left-trim all fields), defaults to false. + * Does not remove whitespace in a quoted field. + */ + ltrim?: boolean | null; + /** + * Maximum numer of characters to be contained in the field and line buffers before an exception is raised, + * used to guard against a wrong delimiter or record_delimiter, + * default to 128000 characters. + */ + max_record_size?: number | null | string; + maxRecordSize?: number; + /** + * Name of header-record title to name objects by. + */ + objname?: Buffer | null | number | string; + /** + * Alter and filter records by executing a user defined function. + */ + on_record?: (record: T, context: CastingContext) => T | null | undefined; + onRecord?: (record: T, context: CastingContext) => T | null | undefined; + /** + * Function called when an error occured if the `skip_records_with_error` + * option is activated. + */ + on_skip?: (err: CsvError | undefined, raw: string | undefined) => undefined; + onSkip?: (err: CsvError | undefined, raw: string | undefined) => undefined; + /** + * Optional character surrounding a field, one character only, defaults to double quotes. + */ + quote?: string | boolean | Buffer | null; + /** + * Generate two properties raw and row where raw is the original CSV row content and row is the parsed array or object. + */ + raw?: boolean | null; + /** + * One or multiple characters used to delimit record rows; defaults to auto discovery if not provided. + * Supported auto discovery method are Linux ("\n"), Apple ("\r") and Windows ("\r\n") row delimiters. + */ + record_delimiter?: string | Buffer | null | (string | Buffer | null)[]; + recordDelimiter?: string | Buffer | null | (string | Buffer | null)[]; + /** + * Discard inconsistent columns count, default to false. + */ + relax_column_count?: boolean | null; + relaxColumnCount?: boolean | null; + /** + * Discard inconsistent columns count when the record contains less fields than expected, default to false. + */ + relax_column_count_less?: boolean | null; + relaxColumnCountLess?: boolean | null; + /** + * Discard inconsistent columns count when the record contains more fields than expected, default to false. + */ + relax_column_count_more?: boolean | null; + relaxColumnCountMore?: boolean | null; + /** + * Preserve quotes inside unquoted field. + */ + relax_quotes?: boolean | null; + relaxQuotes?: boolean | null; + /** + * If true, ignore whitespace immediately preceding the delimiter (i.e. right-trim all fields), defaults to false. + * Does not remove whitespace in a quoted field. + */ + rtrim?: boolean | null; + /** + * Dont generate empty values for empty lines. + * Defaults to false + */ + skip_empty_lines?: boolean | null; + skipEmptyLines?: boolean | null; + /** + * Don't generate records for lines containing empty column values (column matching /\s*\/), defaults to false. + */ + skip_records_with_empty_values?: boolean | null; + skipRecordsWithEmptyValues?: boolean | null; + /** + * Skip a line with error found inside and directly go process the next line. + */ + skip_records_with_error?: boolean | null; + skipRecordsWithError?: boolean | null; + /** + * Stop handling records after the requested number of records. + */ + to?: null | number | string; + /** + * Stop handling records after the requested line number. + */ + to_line?: null | number | string; + toLine?: null | number | string; + /** + * If true, ignore whitespace immediately around the delimiter, defaults to false. + * Does not remove whitespace in a quoted field. + */ + trim?: boolean | null; } -export type CsvErrorCode = - 'CSV_INVALID_OPTION_BOM' - | 'CSV_INVALID_OPTION_CAST' - | 'CSV_INVALID_OPTION_CAST_DATE' - | 'CSV_INVALID_OPTION_COLUMNS' - | 'CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME' - | 'CSV_INVALID_OPTION_COMMENT' - | 'CSV_INVALID_OPTION_DELIMITER' - | 'CSV_INVALID_OPTION_ON_RECORD' - | 'CSV_INVALID_CLOSING_QUOTE' - | 'INVALID_OPENING_QUOTE' - | 'CSV_INVALID_COLUMN_MAPPING' - | 'CSV_INVALID_ARGUMENT' - | 'CSV_INVALID_COLUMN_DEFINITION' - | 'CSV_MAX_RECORD_SIZE' - | 'CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE' - | 'CSV_QUOTE_NOT_CLOSED' - | 'CSV_RECORD_INCONSISTENT_FIELDS_LENGTH' - | 'CSV_RECORD_INCONSISTENT_COLUMNS' - | 'CSV_OPTION_COLUMNS_MISSING_NAME' +export type CsvErrorCode = + | "CSV_INVALID_ARGUMENT" + | "CSV_INVALID_CLOSING_QUOTE" + | "CSV_INVALID_COLUMN_DEFINITION" + | "CSV_INVALID_COLUMN_MAPPING" + | "CSV_INVALID_OPTION_BOM" + | "CSV_INVALID_OPTION_CAST" + | "CSV_INVALID_OPTION_CAST_DATE" + | "CSV_INVALID_OPTION_COLUMNS" + | "CSV_INVALID_OPTION_COMMENT" + | "CSV_INVALID_OPTION_DELIMITER" + | "CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME" + | "CSV_INVALID_OPTION_ON_RECORD" + | "CSV_MAX_RECORD_SIZE" + | "CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE" + | "CSV_OPTION_COLUMNS_MISSING_NAME" + | "CSV_QUOTE_NOT_CLOSED" + | "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH" + | "CSV_RECORD_INCONSISTENT_COLUMNS" + | "CSV_UNKNOWN_ERROR" + | "INVALID_OPENING_QUOTE"; export class CsvError extends Error { - readonly code: CsvErrorCode; - [key: string]: any; + readonly code: CsvErrorCode; + [key: string]: any; - constructor(code: CsvErrorCode, message: string | string[], options?: Options, ...contexts: any[]); + constructor( + code: CsvErrorCode, + message: string | string[], + options?: OptionsNormalized, + ...contexts: unknown[] + ); } -declare function parse(input: Buffer | string, options?: Options, callback?: Callback): Parser; -declare function parse(input: Buffer | string, callback?: Callback): Parser; -declare function parse(options?: Options, callback?: Callback): Parser; +type OptionsWithColumns = Omit, "columns"> & { + columns: Exclude; +}; + +declare function parse( + input: string | Buffer | Uint8Array, + options: OptionsWithColumns, + callback?: Callback, +): Parser; +declare function parse( + input: string | Buffer | Uint8Array, + options: Options, + callback?: Callback, +): Parser; + +declare function parse( + options: OptionsWithColumns, + callback?: Callback, +): Parser; +declare function parse(options: Options, callback?: Callback): Parser; + +declare function parse( + input: string | Buffer | Uint8Array, + callback?: Callback, +): Parser; declare function parse(callback?: Callback): Parser; // export default parse; -export { parse } +export { parse }; + +declare function normalize_options(opts: Options): OptionsNormalized; +export { normalize_options }; diff --git a/packages/csv-parse/dist/cjs/sync.cjs b/packages/csv-parse/dist/cjs/sync.cjs index dc6113ad..f0c86214 100644 --- a/packages/csv-parse/dist/cjs/sync.cjs +++ b/packages/csv-parse/dist/cjs/sync.cjs @@ -279,7 +279,7 @@ const normalize_options = function (opts) { ); } // Normalize option `columns` - options.cast_first_line_to_header = null; + options.cast_first_line_to_header = undefined; if (options.columns === true) { // Fields in the first line are converted as-is to columns options.cast_first_line_to_header = undefined; @@ -1707,10 +1707,14 @@ const transform = function (original_options = {}) { if (skip_records_with_error) { this.state.recordHasError = true; if (this.options.on_skip !== undefined) { - this.options.on_skip( - err, - raw ? this.state.rawBuffer.toString(encoding) : undefined, - ); + try { + this.options.on_skip( + err, + raw ? this.state.rawBuffer.toString(encoding) : undefined, + ); + } catch (err) { + return err; + } } // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined); return undefined; @@ -1764,10 +1768,13 @@ const parse = function (data, opts = {}) { } }; const close = () => {}; - const err1 = parser.parse(data, false, push, close); - if (err1 !== undefined) throw err1; - const err2 = parser.parse(undefined, true, push, close); - if (err2 !== undefined) throw err2; + const error = parser.parse(data, true, push, close); + if (error !== undefined) throw error; + // 250606: `parser.parse` was implemented as 2 calls: + // const err1 = parser.parse(data, false, push, close); + // if (err1 !== undefined) throw err1; + // const err2 = parser.parse(undefined, true, push, close); + // if (err2 !== undefined) throw err2; return records; }; diff --git a/packages/csv-parse/dist/cjs/sync.d.cts b/packages/csv-parse/dist/cjs/sync.d.cts index 835666e5..ff2e55c1 100644 --- a/packages/csv-parse/dist/cjs/sync.d.cts +++ b/packages/csv-parse/dist/cjs/sync.d.cts @@ -1,11 +1,30 @@ +import { Options } from "./index.cjs"; -import { Options } from './index.cjs'; +type OptionsWithColumns = Omit, "columns"> & { + columns: Exclude; +}; + +declare function parse( + input: Buffer | string | Uint8Array, + options: OptionsWithColumns, +): T[]; +declare function parse( + input: Buffer | string | Uint8Array, + options: Options, +): string[][]; +declare function parse(input: Buffer | string | Uint8Array): string[][]; -declare function parse(input: Buffer | string, options?: Options): any; // export default parse; export { parse }; export { - CastingContext, CastingFunction, CastingDateFunction, - ColumnOption, Options, Info, CsvErrorCode, CsvError -} from './index.cjs'; + CastingContext, + CastingFunction, + CastingDateFunction, + ColumnOption, + Options, + OptionsNormalized, + Info, + CsvErrorCode, + CsvError, +} from "./index.cjs"; diff --git a/packages/csv-parse/dist/esm/index.d.ts b/packages/csv-parse/dist/esm/index.d.ts index ec8aa027..403243a6 100644 --- a/packages/csv-parse/dist/esm/index.d.ts +++ b/packages/csv-parse/dist/esm/index.d.ts @@ -4,280 +4,504 @@ import * as stream from "stream"; -export type Callback = (err: CsvError | undefined, records: any | undefined, info: Info) => void; +export type Callback = ( + err: CsvError | undefined, + records: T[], + info?: Info, +) => void; -export interface Parser extends stream.Transform {} +// export interface Parser extends stream.Transform {} -export class Parser { - constructor(options: Options); - - __push(line: any): any; - - __write(chars: any, end: any, callback: any): any; - - readonly options: Options - - readonly info: Info; +// export class Parser extends stream.Transform { +export class Parser extends stream.Transform { + constructor(options: Options); + + // __push(line: T): CsvError | undefined; + __push(line: any): CsvError | undefined; + + // __write(chars: any, end: any, callback: any): any; + + readonly options: OptionsNormalized; + + readonly info: Info; +} + +export interface Info { + /** + * Count the number of lines being fully commented. + */ + readonly comment_lines: number; + /** + * Count the number of processed empty lines. + */ + readonly empty_lines: number; + /** + * The number of lines encountered in the source dataset, start at 1 for the first line. + */ + readonly lines: number; + /** + * Count the number of processed records. + */ + readonly records: number; + /** + * Count of the number of processed bytes. + */ + readonly bytes: number; + /** + * Number of non uniform records when `relax_column_count` is true. + */ + readonly invalid_field_length: number; + /** + * Normalized verion of `options.columns` when `options.columns` is true, boolean otherwise. + */ + readonly columns: boolean | { name: string }[] | { disabled: true }[]; } export interface CastingContext { - readonly column: number | string; - readonly empty_lines: number; - readonly error: CsvError; - readonly header: boolean; - readonly index: number; - readonly quoting: boolean; - readonly lines: number; - readonly records: number; - readonly invalid_field_length: number; + readonly column: number | string; + readonly empty_lines: number; + readonly error: CsvError; + readonly header: boolean; + readonly index: number; + readonly quoting: boolean; + readonly lines: number; + readonly raw: string | undefined; + readonly records: number; + readonly invalid_field_length: number; } -export type CastingFunction = (value: string, context: CastingContext) => any; +export type CastingFunction = ( + value: string, + context: CastingContext, +) => unknown; + +export type CastingDateFunction = ( + value: string, + context: CastingContext, +) => Date; -export type CastingDateFunction = (value: string, context: CastingContext) => Date; +export type ColumnOption = + | K + | undefined + | null + | false + | { name: K }; -export type ColumnOption = string | undefined | null | false | { name: string }; +export interface OptionsNormalized { + auto_parse?: boolean | CastingFunction; + auto_parse_date?: boolean | CastingDateFunction; + /** + * If true, detect and exclude the byte order mark (BOM) from the CSV input if present. + */ + bom?: boolean; + /** + * If true, the parser will attempt to convert input string to native types. + * If a function, receive the value as first argument, a context as second argument and return a new value. More information about the context properties is available below. + */ + cast?: boolean | CastingFunction; + /** + * If true, the parser will attempt to convert input string to dates. + * If a function, receive the value as argument and return a new value. It requires the "auto_parse" option. Be careful, it relies on Date.parse. + */ + cast_date?: boolean | CastingDateFunction; + /** + * Internal property string the function to + */ + cast_first_line_to_header?: ( + record: T, + ) => ColumnOption< + T extends string[] ? string : T extends unknown ? string : keyof T + >[]; + /** + * List of fields as an array, a user defined callback accepting the first + * line and returning the column names or true if autodiscovered in the first + * CSV line, default to null, affect the result data set in the sense that + * records will be objects instead of arrays. + */ + columns: + | boolean + | ColumnOption< + T extends string[] ? string : T extends unknown ? string : keyof T + >[]; + /** + * Convert values into an array of values when columns are activated and + * when multiple columns of the same name are found. + */ + group_columns_by_name: boolean; + /** + * Treat all the characters after this one as a comment, default to '' (disabled). + */ + comment: string | null; + /** + * Restrict the definition of comments to a full line. Comment characters + * defined in the middle of the line are not interpreted as such. The + * option require the activation of comments. + */ + comment_no_infix: boolean; + /** + * Set the field delimiter. One character only, defaults to comma. + */ + delimiter: Buffer[]; + /** + * Set the source and destination encoding, a value of `null` returns buffer instead of strings. + */ + encoding: BufferEncoding | null; + /** + * Set the escape character, one character only, defaults to double quotes. + */ + escape: null | Buffer; + /** + * Start handling records from the requested number of records. + */ + from: number; + /** + * Start handling records from the requested line number. + */ + from_line: number; + /** + * Don't interpret delimiters as such in the last field according to the number of fields calculated from the number of columns, the option require the presence of the `column` option when `true`. + */ + ignore_last_delimiters: boolean | number; + /** + * Generate two properties `info` and `record` where `info` is a snapshot of the info object at the time the record was created and `record` is the parsed array or object. + */ + info: boolean; + /** + * If true, ignore whitespace immediately following the delimiter (i.e. left-trim all fields), defaults to false. + * Does not remove whitespace in a quoted field. + */ + ltrim: boolean; + /** + * Maximum numer of characters to be contained in the field and line buffers before an exception is raised, + * used to guard against a wrong delimiter or record_delimiter, + * default to 128000 characters. + */ + max_record_size: number; + /** + * Name of header-record title to name objects by. + */ + objname: number | string | undefined; + /** + * Alter and filter records by executing a user defined function. + */ + on_record?: (record: T, context: CastingContext) => T | undefined; + /** + * Optional character surrounding a field, one character only, defaults to double quotes. + */ + quote?: Buffer | null; + /** + * Generate two properties raw and row where raw is the original CSV row content and row is the parsed array or object. + */ + raw: boolean; + /** + * Discard inconsistent columns count, default to false. + */ + relax_column_count: boolean; + /** + * Discard inconsistent columns count when the record contains less fields than expected, default to false. + */ + relax_column_count_less: boolean; + /** + * Discard inconsistent columns count when the record contains more fields than expected, default to false. + */ + relax_column_count_more: boolean; + /** + * Preserve quotes inside unquoted field. + */ + relax_quotes: boolean; + /** + * One or multiple characters used to delimit record rows; defaults to auto discovery if not provided. + * Supported auto discovery method are Linux ("\n"), Apple ("\r") and Windows ("\r\n") row delimiters. + */ + record_delimiter: Buffer[]; + /** + * If true, ignore whitespace immediately preceding the delimiter (i.e. right-trim all fields), defaults to false. + * Does not remove whitespace in a quoted field. + */ + rtrim: boolean; + /** + * Dont generate empty values for empty lines. + * Defaults to false + */ + skip_empty_lines: boolean; + /** + * Skip a line with error found inside and directly go process the next line. + */ + skip_records_with_error: boolean; + /** + * Don't generate records for lines containing empty column values (column matching /\s*\/), defaults to false. + */ + skip_records_with_empty_values: boolean; + /** + * Stop handling records after the requested number of records. + */ + to: number; + /** + * Stop handling records after the requested line number. + */ + to_line: number; + /** + * If true, ignore whitespace immediately around the delimiter, defaults to false. + * Does not remove whitespace in a quoted field. + */ + trim: boolean; +} /* Note, could not `extends stream.TransformOptions` because encoding can be BufferEncoding and undefined as well as null which is not defined in the extended type. */ -export interface Options { - /** - * If true, the parser will attempt to convert read data types to native types. - * @deprecated Use {@link cast} - */ - auto_parse?: boolean | CastingFunction; - autoParse?: boolean | CastingFunction; - /** - * If true, the parser will attempt to convert read data types to dates. It requires the "auto_parse" option. - * @deprecated Use {@link cast_date} - */ - auto_parse_date?: boolean | CastingDateFunction; - autoParseDate?: boolean | CastingDateFunction; - /** - * If true, detect and exclude the byte order mark (BOM) from the CSV input if present. - */ - bom?: boolean; - /** - * If true, the parser will attempt to convert input string to native types. - * If a function, receive the value as first argument, a context as second argument and return a new value. More information about the context properties is available below. - */ - cast?: boolean | CastingFunction; - /** - * If true, the parser will attempt to convert input string to dates. - * If a function, receive the value as argument and return a new value. It requires the "auto_parse" option. Be careful, it relies on Date.parse. - */ - cast_date?: boolean | CastingDateFunction; - castDate?: boolean | CastingDateFunction; - /** - * List of fields as an array, - * a user defined callback accepting the first line and returning the column names or true if autodiscovered in the first CSV line, - * default to null, - * affect the result data set in the sense that records will be objects instead of arrays. - */ - columns?: ColumnOption[] | boolean | ((record: any) => ColumnOption[]); - /** - * Convert values into an array of values when columns are activated and - * when multiple columns of the same name are found. - */ - group_columns_by_name?: boolean; - groupColumnsByName?: boolean; - /** - * Treat all the characters after this one as a comment, default to '' (disabled). - */ - comment?: string; - /** - * Restrict the definition of comments to a full line. Comment characters - * defined in the middle of the line are not interpreted as such. The - * option require the activation of comments. - */ - comment_no_infix?: boolean; - /** - * Set the field delimiter. One character only, defaults to comma. - */ - delimiter?: string | string[] | Buffer; - /** - * Set the source and destination encoding, a value of `null` returns buffer instead of strings. - */ - encoding?: BufferEncoding | undefined; - /** - * Set the escape character, one character only, defaults to double quotes. - */ - escape?: string | null | false | Buffer; - /** - * Start handling records from the requested number of records. - */ - from?: number; - /** - * Start handling records from the requested line number. - */ - from_line?: number; - fromLine?: number; - /** - * Don't interpret delimiters as such in the last field according to the number of fields calculated from the number of columns, the option require the presence of the `column` option when `true`. - */ - ignore_last_delimiters?: boolean | number; - /** - * Generate two properties `info` and `record` where `info` is a snapshot of the info object at the time the record was created and `record` is the parsed array or object. - */ - info?: boolean; - /** - * If true, ignore whitespace immediately following the delimiter (i.e. left-trim all fields), defaults to false. - * Does not remove whitespace in a quoted field. - */ - ltrim?: boolean; - /** - * Maximum numer of characters to be contained in the field and line buffers before an exception is raised, - * used to guard against a wrong delimiter or record_delimiter, - * default to 128000 characters. - */ - max_record_size?: number; - maxRecordSize?: number; - /** - * Name of header-record title to name objects by. - */ - objname?: string; - /** - * Alter and filter records by executing a user defined function. - */ - on_record?: (record: any, context: CastingContext) => any; - onRecord?: (record: any, context: CastingContext) => any; - /** - * Optional character surrounding a field, one character only, defaults to double quotes. - */ - quote?: string | boolean | Buffer | null; - /** - * Generate two properties raw and row where raw is the original CSV row content and row is the parsed array or object. - */ - raw?: boolean; - /** - * Discard inconsistent columns count, default to false. - */ - relax_column_count?: boolean; - relaxColumnCount?: boolean; - /** - * Discard inconsistent columns count when the record contains less fields than expected, default to false. - */ - relax_column_count_less?: boolean; - relaxColumnCountLess?: boolean; - /** - * Discard inconsistent columns count when the record contains more fields than expected, default to false. - */ - relax_column_count_more?: boolean; - relaxColumnCountMore?: boolean; - /** - * Preserve quotes inside unquoted field. - */ - relax_quotes?: boolean; - relaxQuotes?: boolean; - /** - * One or multiple characters used to delimit record rows; defaults to auto discovery if not provided. - * Supported auto discovery method are Linux ("\n"), Apple ("\r") and Windows ("\r\n") row delimiters. - */ - record_delimiter?: string | string[] | Buffer | Buffer[]; - recordDelimiter?: string | string[] | Buffer | Buffer[]; - /** - * If true, ignore whitespace immediately preceding the delimiter (i.e. right-trim all fields), defaults to false. - * Does not remove whitespace in a quoted field. - */ - rtrim?: boolean; - /** - * Dont generate empty values for empty lines. - * Defaults to false - */ - skip_empty_lines?: boolean; - skipEmptyLines?: boolean; - /** - * Skip a line with error found inside and directly go process the next line. - */ - skip_records_with_error?: boolean; - skipRecordsWithError?: boolean; - /** - * Don't generate records for lines containing empty column values (column matching /\s*\/), defaults to false. - */ - skip_records_with_empty_values?: boolean; - skipRecordsWithEmptyValues?: boolean; - /** - * Stop handling records after the requested number of records. - */ - to?: number; - /** - * Stop handling records after the requested line number. - */ - to_line?: number; - toLine?: number; - /** - * If true, ignore whitespace immediately around the delimiter, defaults to false. - * Does not remove whitespace in a quoted field. - */ - trim?: boolean; -} - -export interface Info { - /** - * Count the number of lines being fully commented. - */ - readonly comment_lines: number; - /** - * Count the number of processed empty lines. - */ - readonly empty_lines: number; - /** - * The number of lines encountered in the source dataset, start at 1 for the first line. - */ - readonly lines: number; - /** - * Count the number of processed records. - */ - readonly records: number; - /** - * Count of the number of processed bytes. - */ - readonly bytes: number; - /** - * Number of non uniform records when `relax_column_count` is true. - */ - readonly invalid_field_length: number; - /** - * Normalized verion of `options.columns` when `options.columns` is true, boolean otherwise. - */ - readonly columns: boolean | { name: string }[] | { disabled: true }[]; +export interface Options { + /** + * If true, the parser will attempt to convert read data types to native types. + * @deprecated Use {@link cast} + */ + auto_parse?: boolean | CastingFunction; + autoParse?: boolean | CastingFunction; + /** + * If true, the parser will attempt to convert read data types to dates. It requires the "auto_parse" option. + * @deprecated Use {@link cast_date} + */ + auto_parse_date?: boolean | CastingDateFunction; + autoParseDate?: boolean | CastingDateFunction; + /** + * If true, detect and exclude the byte order mark (BOM) from the CSV input if present. + */ + bom?: boolean; + /** + * If true, the parser will attempt to convert input string to native types. + * If a function, receive the value as first argument, a context as second argument and return a new value. More information about the context properties is available below. + */ + cast?: boolean | CastingFunction; + /** + * If true, the parser will attempt to convert input string to dates. + * If a function, receive the value as argument and return a new value. It requires the "auto_parse" option. Be careful, it relies on Date.parse. + */ + cast_date?: boolean | CastingDateFunction; + castDate?: boolean | CastingDateFunction; + /** + * List of fields as an array, + * a user defined callback accepting the first line and returning the column names or true if autodiscovered in the first CSV line, + * default to null, + * affect the result data set in the sense that records will be objects instead of arrays. + */ + columns?: + | boolean + | ColumnOption< + T extends string[] ? string : T extends unknown ? string : keyof T + >[] + | (( + record: T, + ) => ColumnOption< + T extends string[] ? string : T extends unknown ? string : keyof T + >[]); + /** + * Convert values into an array of values when columns are activated and + * when multiple columns of the same name are found. + */ + group_columns_by_name?: boolean; + groupColumnsByName?: boolean; + /** + * Treat all the characters after this one as a comment, default to '' (disabled). + */ + comment?: string | boolean | null; + /** + * Restrict the definition of comments to a full line. Comment characters + * defined in the middle of the line are not interpreted as such. The + * option require the activation of comments. + */ + comment_no_infix?: boolean | null; + /** + * Set the field delimiter. One character only, defaults to comma. + */ + delimiter?: string | string[] | Buffer; + /** + * Set the source and destination encoding, a value of `null` returns buffer instead of strings. + */ + encoding?: BufferEncoding | boolean | null | undefined; + /** + * Set the escape character, one character only, defaults to double quotes. + */ + escape?: string | null | boolean | Buffer; + /** + * Start handling records from the requested number of records. + */ + from?: number | string; + /** + * Start handling records from the requested line number. + */ + from_line?: null | number | string; + fromLine?: null | number | string; + /** + * Don't interpret delimiters as such in the last field according to the number of fields calculated from the number of columns, the option require the presence of the `column` option when `true`. + */ + ignore_last_delimiters?: boolean | number; + /** + * Generate two properties `info` and `record` where `info` is a snapshot of the info object at the time the record was created and `record` is the parsed array or object. + */ + info?: boolean; + /** + * If true, ignore whitespace immediately following the delimiter (i.e. left-trim all fields), defaults to false. + * Does not remove whitespace in a quoted field. + */ + ltrim?: boolean | null; + /** + * Maximum numer of characters to be contained in the field and line buffers before an exception is raised, + * used to guard against a wrong delimiter or record_delimiter, + * default to 128000 characters. + */ + max_record_size?: number | null | string; + maxRecordSize?: number; + /** + * Name of header-record title to name objects by. + */ + objname?: Buffer | null | number | string; + /** + * Alter and filter records by executing a user defined function. + */ + on_record?: (record: T, context: CastingContext) => T | null | undefined; + onRecord?: (record: T, context: CastingContext) => T | null | undefined; + /** + * Function called when an error occured if the `skip_records_with_error` + * option is activated. + */ + on_skip?: (err: CsvError | undefined, raw: string | undefined) => undefined; + onSkip?: (err: CsvError | undefined, raw: string | undefined) => undefined; + /** + * Optional character surrounding a field, one character only, defaults to double quotes. + */ + quote?: string | boolean | Buffer | null; + /** + * Generate two properties raw and row where raw is the original CSV row content and row is the parsed array or object. + */ + raw?: boolean | null; + /** + * One or multiple characters used to delimit record rows; defaults to auto discovery if not provided. + * Supported auto discovery method are Linux ("\n"), Apple ("\r") and Windows ("\r\n") row delimiters. + */ + record_delimiter?: string | Buffer | null | (string | Buffer | null)[]; + recordDelimiter?: string | Buffer | null | (string | Buffer | null)[]; + /** + * Discard inconsistent columns count, default to false. + */ + relax_column_count?: boolean | null; + relaxColumnCount?: boolean | null; + /** + * Discard inconsistent columns count when the record contains less fields than expected, default to false. + */ + relax_column_count_less?: boolean | null; + relaxColumnCountLess?: boolean | null; + /** + * Discard inconsistent columns count when the record contains more fields than expected, default to false. + */ + relax_column_count_more?: boolean | null; + relaxColumnCountMore?: boolean | null; + /** + * Preserve quotes inside unquoted field. + */ + relax_quotes?: boolean | null; + relaxQuotes?: boolean | null; + /** + * If true, ignore whitespace immediately preceding the delimiter (i.e. right-trim all fields), defaults to false. + * Does not remove whitespace in a quoted field. + */ + rtrim?: boolean | null; + /** + * Dont generate empty values for empty lines. + * Defaults to false + */ + skip_empty_lines?: boolean | null; + skipEmptyLines?: boolean | null; + /** + * Don't generate records for lines containing empty column values (column matching /\s*\/), defaults to false. + */ + skip_records_with_empty_values?: boolean | null; + skipRecordsWithEmptyValues?: boolean | null; + /** + * Skip a line with error found inside and directly go process the next line. + */ + skip_records_with_error?: boolean | null; + skipRecordsWithError?: boolean | null; + /** + * Stop handling records after the requested number of records. + */ + to?: null | number | string; + /** + * Stop handling records after the requested line number. + */ + to_line?: null | number | string; + toLine?: null | number | string; + /** + * If true, ignore whitespace immediately around the delimiter, defaults to false. + * Does not remove whitespace in a quoted field. + */ + trim?: boolean | null; } -export type CsvErrorCode = - 'CSV_INVALID_OPTION_BOM' - | 'CSV_INVALID_OPTION_CAST' - | 'CSV_INVALID_OPTION_CAST_DATE' - | 'CSV_INVALID_OPTION_COLUMNS' - | 'CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME' - | 'CSV_INVALID_OPTION_COMMENT' - | 'CSV_INVALID_OPTION_DELIMITER' - | 'CSV_INVALID_OPTION_ON_RECORD' - | 'CSV_INVALID_CLOSING_QUOTE' - | 'INVALID_OPENING_QUOTE' - | 'CSV_INVALID_COLUMN_MAPPING' - | 'CSV_INVALID_ARGUMENT' - | 'CSV_INVALID_COLUMN_DEFINITION' - | 'CSV_MAX_RECORD_SIZE' - | 'CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE' - | 'CSV_QUOTE_NOT_CLOSED' - | 'CSV_RECORD_INCONSISTENT_FIELDS_LENGTH' - | 'CSV_RECORD_INCONSISTENT_COLUMNS' - | 'CSV_OPTION_COLUMNS_MISSING_NAME' +export type CsvErrorCode = + | "CSV_INVALID_ARGUMENT" + | "CSV_INVALID_CLOSING_QUOTE" + | "CSV_INVALID_COLUMN_DEFINITION" + | "CSV_INVALID_COLUMN_MAPPING" + | "CSV_INVALID_OPTION_BOM" + | "CSV_INVALID_OPTION_CAST" + | "CSV_INVALID_OPTION_CAST_DATE" + | "CSV_INVALID_OPTION_COLUMNS" + | "CSV_INVALID_OPTION_COMMENT" + | "CSV_INVALID_OPTION_DELIMITER" + | "CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME" + | "CSV_INVALID_OPTION_ON_RECORD" + | "CSV_MAX_RECORD_SIZE" + | "CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE" + | "CSV_OPTION_COLUMNS_MISSING_NAME" + | "CSV_QUOTE_NOT_CLOSED" + | "CSV_RECORD_INCONSISTENT_FIELDS_LENGTH" + | "CSV_RECORD_INCONSISTENT_COLUMNS" + | "CSV_UNKNOWN_ERROR" + | "INVALID_OPENING_QUOTE"; export class CsvError extends Error { - readonly code: CsvErrorCode; - [key: string]: any; + readonly code: CsvErrorCode; + [key: string]: any; - constructor(code: CsvErrorCode, message: string | string[], options?: Options, ...contexts: any[]); + constructor( + code: CsvErrorCode, + message: string | string[], + options?: OptionsNormalized, + ...contexts: unknown[] + ); } -declare function parse(input: Buffer | string, options?: Options, callback?: Callback): Parser; -declare function parse(input: Buffer | string, callback?: Callback): Parser; -declare function parse(options?: Options, callback?: Callback): Parser; +type OptionsWithColumns = Omit, "columns"> & { + columns: Exclude; +}; + +declare function parse( + input: string | Buffer | Uint8Array, + options: OptionsWithColumns, + callback?: Callback, +): Parser; +declare function parse( + input: string | Buffer | Uint8Array, + options: Options, + callback?: Callback, +): Parser; + +declare function parse( + options: OptionsWithColumns, + callback?: Callback, +): Parser; +declare function parse(options: Options, callback?: Callback): Parser; + +declare function parse( + input: string | Buffer | Uint8Array, + callback?: Callback, +): Parser; declare function parse(callback?: Callback): Parser; // export default parse; -export { parse } +export { parse }; + +declare function normalize_options(opts: Options): OptionsNormalized; +export { normalize_options }; diff --git a/packages/csv-parse/dist/esm/index.js b/packages/csv-parse/dist/esm/index.js index 5b396c3a..a16d997b 100644 --- a/packages/csv-parse/dist/esm/index.js +++ b/packages/csv-parse/dist/esm/index.js @@ -831,8 +831,8 @@ function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1591,7 +1591,7 @@ Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, no Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1601,7 +1601,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1614,7 +1614,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1627,7 +1627,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1642,7 +1642,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2000,7 +2000,9 @@ EventEmitter.init = function() { this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -2569,94 +2571,19 @@ function Item(fun, array) { Item.prototype.run = function () { this.fun.apply(null, this.array); }; -var title = 'browser'; -var platform = 'browser'; -var browser = true; var env = {}; -var argv = []; -var version = ''; // empty string to avoid regexp issues -var versions = {}; -var release = {}; -var config = {}; - -function noop() {} - -var on = noop; -var addListener = noop; -var once = noop; -var off = noop; -var removeListener = noop; -var removeAllListeners = noop; -var emit = noop; - -function binding(name) { - throw new Error('process.binding is not supported'); -} - -function cwd () { return '/' } -function chdir (dir) { - throw new Error('process.chdir is not supported'); -}function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; -var performanceNow = - performance.now || +performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; -// generate timestamp or delta -// see http://nodejs.org/api/process.html#process_process_hrtime -function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] -} - -var startTime = new Date(); -function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; -} - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime -}; + env: env}; var inherits; if (typeof Object.create === 'function'){ @@ -5403,7 +5330,7 @@ const normalize_options = function (opts) { ); } // Normalize option `columns` - options.cast_first_line_to_header = null; + options.cast_first_line_to_header = undefined; if (options.columns === true) { // Fields in the first line are converted as-is to columns options.cast_first_line_to_header = undefined; @@ -6831,10 +6758,14 @@ const transform = function (original_options = {}) { if (skip_records_with_error) { this.state.recordHasError = true; if (this.options.on_skip !== undefined) { - this.options.on_skip( - err, - raw ? this.state.rawBuffer.toString(encoding) : undefined, - ); + try { + this.options.on_skip( + err, + raw ? this.state.rawBuffer.toString(encoding) : undefined, + ); + } catch (err) { + return err; + } } // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined); return undefined; @@ -6998,4 +6929,4 @@ const parse = function () { return parser; }; -export { CsvError, Parser, parse }; +export { CsvError, Parser, normalize_options, parse }; diff --git a/packages/csv-parse/dist/esm/stream.d.ts b/packages/csv-parse/dist/esm/stream.d.ts index f3b4068f..02cb2c1d 100644 --- a/packages/csv-parse/dist/esm/stream.d.ts +++ b/packages/csv-parse/dist/esm/stream.d.ts @@ -1,11 +1,17 @@ - -import { Options } from './index.js'; +import { Options } from "./index.js"; declare function parse(options?: Options): TransformStream; // export default parse; export { parse }; export { - CastingContext, CastingFunction, CastingDateFunction, - ColumnOption, Options, Info, CsvErrorCode, CsvError -} from './index.js'; + CastingContext, + CastingFunction, + CastingDateFunction, + ColumnOption, + Options, + OptionsNormalized, + Info, + CsvErrorCode, + CsvError, +} from "./index.js"; diff --git a/packages/csv-parse/dist/esm/sync.d.ts b/packages/csv-parse/dist/esm/sync.d.ts index b507e8b9..035fb595 100644 --- a/packages/csv-parse/dist/esm/sync.d.ts +++ b/packages/csv-parse/dist/esm/sync.d.ts @@ -1,11 +1,30 @@ +import { Options } from "./index.js"; -import { Options } from './index.js'; +type OptionsWithColumns = Omit, "columns"> & { + columns: Exclude; +}; + +declare function parse( + input: Buffer | string | Uint8Array, + options: OptionsWithColumns, +): T[]; +declare function parse( + input: Buffer | string | Uint8Array, + options: Options, +): string[][]; +declare function parse(input: Buffer | string | Uint8Array): string[][]; -declare function parse(input: Buffer | string, options?: Options): any; // export default parse; export { parse }; export { - CastingContext, CastingFunction, CastingDateFunction, - ColumnOption, Options, Info, CsvErrorCode, CsvError -} from './index.js'; + CastingContext, + CastingFunction, + CastingDateFunction, + ColumnOption, + Options, + OptionsNormalized, + Info, + CsvErrorCode, + CsvError, +} from "./index.js"; diff --git a/packages/csv-parse/dist/esm/sync.js b/packages/csv-parse/dist/esm/sync.js index fc824a42..f208caab 100644 --- a/packages/csv-parse/dist/esm/sync.js +++ b/packages/csv-parse/dist/esm/sync.js @@ -831,8 +831,8 @@ function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1591,7 +1591,7 @@ Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, no Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1601,7 +1601,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1614,7 +1614,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1627,7 +1627,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1642,7 +1642,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2249,7 +2249,7 @@ const normalize_options = function (opts) { ); } // Normalize option `columns` - options.cast_first_line_to_header = null; + options.cast_first_line_to_header = undefined; if (options.columns === true) { // Fields in the first line are converted as-is to columns options.cast_first_line_to_header = undefined; @@ -3677,10 +3677,14 @@ const transform = function (original_options = {}) { if (skip_records_with_error) { this.state.recordHasError = true; if (this.options.on_skip !== undefined) { - this.options.on_skip( - err, - raw ? this.state.rawBuffer.toString(encoding) : undefined, - ); + try { + this.options.on_skip( + err, + raw ? this.state.rawBuffer.toString(encoding) : undefined, + ); + } catch (err) { + return err; + } } // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined); return undefined; @@ -3734,10 +3738,13 @@ const parse = function (data, opts = {}) { } }; const close = () => {}; - const err1 = parser.parse(data, false, push, close); - if (err1 !== undefined) throw err1; - const err2 = parser.parse(undefined, true, push, close); - if (err2 !== undefined) throw err2; + const error = parser.parse(data, true, push, close); + if (error !== undefined) throw error; + // 250606: `parser.parse` was implemented as 2 calls: + // const err1 = parser.parse(data, false, push, close); + // if (err1 !== undefined) throw err1; + // const err2 = parser.parse(undefined, true, push, close); + // if (err2 !== undefined) throw err2; return records; }; diff --git a/packages/csv-parse/dist/iife/index.js b/packages/csv-parse/dist/iife/index.js index 16f849e6..bdf524a1 100644 --- a/packages/csv-parse/dist/iife/index.js +++ b/packages/csv-parse/dist/iife/index.js @@ -834,8 +834,8 @@ var csv_parse = (function (exports) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1594,7 +1594,7 @@ var csv_parse = (function (exports) { Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1604,7 +1604,7 @@ var csv_parse = (function (exports) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1617,7 +1617,7 @@ var csv_parse = (function (exports) { Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1630,7 +1630,7 @@ var csv_parse = (function (exports) { Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1645,7 +1645,7 @@ var csv_parse = (function (exports) { Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2003,7 +2003,9 @@ var csv_parse = (function (exports) { this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -2572,94 +2574,19 @@ var csv_parse = (function (exports) { Item.prototype.run = function () { this.fun.apply(null, this.array); }; - var title = 'browser'; - var platform = 'browser'; - var browser = true; var env = {}; - var argv = []; - var version = ''; // empty string to avoid regexp issues - var versions = {}; - var release = {}; - var config = {}; - - function noop() {} - - var on = noop; - var addListener = noop; - var once = noop; - var off = noop; - var removeListener = noop; - var removeAllListeners = noop; - var emit = noop; - - function binding(name) { - throw new Error('process.binding is not supported'); - } - - function cwd () { return '/' } - function chdir (dir) { - throw new Error('process.chdir is not supported'); - }function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; - var performanceNow = - performance.now || + performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; - // generate timestamp or delta - // see http://nodejs.org/api/process.html#process_process_hrtime - function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] - } - - var startTime = new Date(); - function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; - } - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime - }; + env: env}; var inherits; if (typeof Object.create === 'function'){ @@ -5406,7 +5333,7 @@ var csv_parse = (function (exports) { ); } // Normalize option `columns` - options.cast_first_line_to_header = null; + options.cast_first_line_to_header = undefined; if (options.columns === true) { // Fields in the first line are converted as-is to columns options.cast_first_line_to_header = undefined; @@ -6834,10 +6761,14 @@ var csv_parse = (function (exports) { if (skip_records_with_error) { this.state.recordHasError = true; if (this.options.on_skip !== undefined) { - this.options.on_skip( - err, - raw ? this.state.rawBuffer.toString(encoding) : undefined, - ); + try { + this.options.on_skip( + err, + raw ? this.state.rawBuffer.toString(encoding) : undefined, + ); + } catch (err) { + return err; + } } // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined); return undefined; @@ -7003,6 +6934,7 @@ var csv_parse = (function (exports) { exports.CsvError = CsvError; exports.Parser = Parser; + exports.normalize_options = normalize_options; exports.parse = parse; return exports; diff --git a/packages/csv-parse/dist/iife/sync.js b/packages/csv-parse/dist/iife/sync.js index bf710048..95a4806d 100644 --- a/packages/csv-parse/dist/iife/sync.js +++ b/packages/csv-parse/dist/iife/sync.js @@ -834,8 +834,8 @@ var csv_parse_sync = (function (exports) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1594,7 +1594,7 @@ var csv_parse_sync = (function (exports) { Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1604,7 +1604,7 @@ var csv_parse_sync = (function (exports) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1617,7 +1617,7 @@ var csv_parse_sync = (function (exports) { Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1630,7 +1630,7 @@ var csv_parse_sync = (function (exports) { Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1645,7 +1645,7 @@ var csv_parse_sync = (function (exports) { Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2252,7 +2252,7 @@ var csv_parse_sync = (function (exports) { ); } // Normalize option `columns` - options.cast_first_line_to_header = null; + options.cast_first_line_to_header = undefined; if (options.columns === true) { // Fields in the first line are converted as-is to columns options.cast_first_line_to_header = undefined; @@ -3680,10 +3680,14 @@ var csv_parse_sync = (function (exports) { if (skip_records_with_error) { this.state.recordHasError = true; if (this.options.on_skip !== undefined) { - this.options.on_skip( - err, - raw ? this.state.rawBuffer.toString(encoding) : undefined, - ); + try { + this.options.on_skip( + err, + raw ? this.state.rawBuffer.toString(encoding) : undefined, + ); + } catch (err) { + return err; + } } // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined); return undefined; @@ -3737,10 +3741,13 @@ var csv_parse_sync = (function (exports) { } }; const close = () => {}; - const err1 = parser.parse(data, false, push, close); - if (err1 !== undefined) throw err1; - const err2 = parser.parse(undefined, true, push, close); - if (err2 !== undefined) throw err2; + const error = parser.parse(data, true, push, close); + if (error !== undefined) throw error; + // 250606: `parser.parse` was implemented as 2 calls: + // const err1 = parser.parse(data, false, push, close); + // if (err1 !== undefined) throw err1; + // const err2 = parser.parse(undefined, true, push, close); + // if (err2 !== undefined) throw err2; return records; }; diff --git a/packages/csv-parse/dist/umd/index.js b/packages/csv-parse/dist/umd/index.js index 688695bd..786854c8 100644 --- a/packages/csv-parse/dist/umd/index.js +++ b/packages/csv-parse/dist/umd/index.js @@ -837,8 +837,8 @@ byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1597,7 +1597,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1607,7 +1607,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1620,7 +1620,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1633,7 +1633,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1648,7 +1648,7 @@ Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2006,7 +2006,9 @@ this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -2575,94 +2577,19 @@ Item.prototype.run = function () { this.fun.apply(null, this.array); }; - var title = 'browser'; - var platform = 'browser'; - var browser = true; var env = {}; - var argv = []; - var version = ''; // empty string to avoid regexp issues - var versions = {}; - var release = {}; - var config = {}; - - function noop() {} - - var on = noop; - var addListener = noop; - var once = noop; - var off = noop; - var removeListener = noop; - var removeAllListeners = noop; - var emit = noop; - - function binding(name) { - throw new Error('process.binding is not supported'); - } - - function cwd () { return '/' } - function chdir (dir) { - throw new Error('process.chdir is not supported'); - }function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; - var performanceNow = - performance.now || + performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; - // generate timestamp or delta - // see http://nodejs.org/api/process.html#process_process_hrtime - function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] - } - - var startTime = new Date(); - function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; - } - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime - }; + env: env}; var inherits; if (typeof Object.create === 'function'){ @@ -5409,7 +5336,7 @@ ); } // Normalize option `columns` - options.cast_first_line_to_header = null; + options.cast_first_line_to_header = undefined; if (options.columns === true) { // Fields in the first line are converted as-is to columns options.cast_first_line_to_header = undefined; @@ -6837,10 +6764,14 @@ if (skip_records_with_error) { this.state.recordHasError = true; if (this.options.on_skip !== undefined) { - this.options.on_skip( - err, - raw ? this.state.rawBuffer.toString(encoding) : undefined, - ); + try { + this.options.on_skip( + err, + raw ? this.state.rawBuffer.toString(encoding) : undefined, + ); + } catch (err) { + return err; + } } // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined); return undefined; @@ -7006,6 +6937,7 @@ exports.CsvError = CsvError; exports.Parser = Parser; + exports.normalize_options = normalize_options; exports.parse = parse; })); diff --git a/packages/csv-parse/dist/umd/sync.js b/packages/csv-parse/dist/umd/sync.js index 8aef129f..ab393dc7 100644 --- a/packages/csv-parse/dist/umd/sync.js +++ b/packages/csv-parse/dist/umd/sync.js @@ -837,8 +837,8 @@ byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1597,7 +1597,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1607,7 +1607,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1620,7 +1620,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1633,7 +1633,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1648,7 +1648,7 @@ Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2255,7 +2255,7 @@ ); } // Normalize option `columns` - options.cast_first_line_to_header = null; + options.cast_first_line_to_header = undefined; if (options.columns === true) { // Fields in the first line are converted as-is to columns options.cast_first_line_to_header = undefined; @@ -3683,10 +3683,14 @@ if (skip_records_with_error) { this.state.recordHasError = true; if (this.options.on_skip !== undefined) { - this.options.on_skip( - err, - raw ? this.state.rawBuffer.toString(encoding) : undefined, - ); + try { + this.options.on_skip( + err, + raw ? this.state.rawBuffer.toString(encoding) : undefined, + ); + } catch (err) { + return err; + } } // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined); return undefined; @@ -3740,10 +3744,13 @@ } }; const close = () => {}; - const err1 = parser.parse(data, false, push, close); - if (err1 !== undefined) throw err1; - const err2 = parser.parse(undefined, true, push, close); - if (err2 !== undefined) throw err2; + const error = parser.parse(data, true, push, close); + if (error !== undefined) throw error; + // 250606: `parser.parse` was implemented as 2 calls: + // const err1 = parser.parse(data, false, push, close); + // if (err1 !== undefined) throw err1; + // const err2 = parser.parse(undefined, true, push, close); + // if (err2 !== undefined) throw err2; return records; }; diff --git a/packages/csv-parse/package.json b/packages/csv-parse/package.json index c8e33b6e..10206c09 100644 --- a/packages/csv-parse/package.json +++ b/packages/csv-parse/package.json @@ -1,5 +1,5 @@ { - "version": "5.6.0", + "version": "6.0.0", "name": "csv-parse", "description": "CSV parsing implementing the Node.js `stream.Transform` API", "keywords": [ @@ -75,7 +75,7 @@ "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.30", - "csv-generate": "^4.4.2", + "csv-generate": "^4.5.0", "csv-spectrum": "^2.0.0", "dedent": "^1.6.0", "each": "^2.7.2", @@ -86,7 +86,7 @@ "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "should": "^13.2.3", - "stream-transform": "^3.3.3", + "stream-transform": "^3.4.0", "ts-node": "^10.9.2", "typescript": "^5.8.3" }, diff --git a/packages/csv-stringify/CHANGELOG.md b/packages/csv-stringify/CHANGELOG.md index 47814ccc..583b5873 100644 --- a/packages/csv-stringify/CHANGELOG.md +++ b/packages/csv-stringify/CHANGELOG.md @@ -3,6 +3,51 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 6.6.0 (2025-07-10) + +### Features + +- add unicode chars to formula escape ([#387](https://github.com/adaltas/node-csv/issues/387)) ([1fc177c](https://github.com/adaltas/node-csv/commit/1fc177c605e8a88e403539806890695a6ba72dec)) +- backport support for node 14 ([dbfeb78](https://github.com/adaltas/node-csv/commit/dbfeb78f61ed36f02936d63a53345708ca213e45)) +- backward support for node 8 ([496231d](https://github.com/adaltas/node-csv/commit/496231dfd838f0a6a72269a5a2390a4c637cef95)) +- **csv-parse:** set `columns` type as `readonly` ([#358](https://github.com/adaltas/node-csv/issues/358)) ([44f2e7c](https://github.com/adaltas/node-csv/commit/44f2e7c2d1c36adf2b1f5a32ee181b3c4c4b50d7)) +- **csv-stringify:** Add escape_formulas to defend against injection attacks ([#380](https://github.com/adaltas/node-csv/issues/380)) ([47ac4bd](https://github.com/adaltas/node-csv/commit/47ac4bd7f5838e28daf889528fd6427ad0934076)) +- **csv-stringify:** ts extends options with stream.TransformOptions ([#301](https://github.com/adaltas/node-csv/issues/301)) ([cc30d66](https://github.com/adaltas/node-csv/commit/cc30d66e0f07686d2c42670ead10246ebcf37a67)) +- esm migration ([b5c0d4b](https://github.com/adaltas/node-csv/commit/b5c0d4b191c8b57397808c0922a3f08248506a9f)) +- export ts types in sync ([890bf8d](https://github.com/adaltas/node-csv/commit/890bf8d950c18a05cab5e35a461d0847d9425156)) +- replace ts types with typesVersions ([acb41d5](https://github.com/adaltas/node-csv/commit/acb41d5031669f2d582e40da1c80f5fd4738fee4)) +- ts module Node16 and type declaration to exports field ([#341](https://github.com/adaltas/node-csv/issues/341)) ([4b0283d](https://github.com/adaltas/node-csv/commit/4b0283d17b7fa46daa1f87380759ba72c71ec79b)) +- wg stream api ([8a5eb7d](https://github.com/adaltas/node-csv/commit/8a5eb7dfd31b22217db4fbbc832d707221850785)) + +### Bug Fixes + +- commonjs types, run tsc and lint to validate changes ([#397](https://github.com/adaltas/node-csv/issues/397)) ([e6870fe](https://github.com/adaltas/node-csv/commit/e6870fe272c119e273196522c9771d12ff8b2a35)) +- correct exports in package.json with webpack ([154eafb](https://github.com/adaltas/node-csv/commit/154eafbac866eb4499a0d392f8dcd057695c2586)) +- **csv-demo-ts-cjs-node16:** upgrade module definition after latest typescript ([87fe919](https://github.com/adaltas/node-csv/commit/87fe91996fb2a8895c252177fca4f0cb59a518f9)) +- **csv-demo-webpack-ts:** remove polyfill ([47a99bd](https://github.com/adaltas/node-csv/commit/47a99bd944d1d943e6374227dbc4e20aaa2c8c7f)) +- **csv-demo-webpack-ts:** simplify export paths ([8d63a14](https://github.com/adaltas/node-csv/commit/8d63a14313bb6b26f13fafb740cc686f1dfaa65f)) +- **csv-stringify:** add missing type definition for bigint cast option ([#369](https://github.com/adaltas/node-csv/issues/369)) ([764e748](https://github.com/adaltas/node-csv/commit/764e7486971835189364ea7a0103798e5c07fb2b)) +- **csv-stringify:** allow mixed string and object columns typedef ([#456](https://github.com/adaltas/node-csv/issues/456)) ([c40c0d2](https://github.com/adaltas/node-csv/commit/c40c0d2114d7800cca8da2d685ad1e49bf4cc7eb)) +- **csv-stringify:** bom and header in sync mode with no records (fix [#343](https://github.com/adaltas/node-csv/issues/343)) ([bff158f](https://github.com/adaltas/node-csv/commit/bff158fbc9001b2cf7177ecd0f16dc97edac55f2)) +- **csv-stringify:** catch error with sync api, fix [#296](https://github.com/adaltas/node-csv/issues/296) ([e157f40](https://github.com/adaltas/node-csv/commit/e157f407eeffe5bcfb179cb20476169037bfb4f1)) +- **csv-stringify:** node 12 compatibility in flush ([9145b75](https://github.com/adaltas/node-csv/commit/9145b75012ec71a0b4152036af2275bf28c460e0)) +- **csv-stringify:** quote_match with empty string pattern quotes empty strings ([#345](https://github.com/adaltas/node-csv/issues/345)) ([1c22d2e](https://github.com/adaltas/node-csv/commit/1c22d2e07f66dd747150b5a7499b5ebd5bc0f25c)), closes [#344](https://github.com/adaltas/node-csv/issues/344) +- **csv-stringify:** remove non-functional auto value ([6e8a9ca](https://github.com/adaltas/node-csv/commit/6e8a9ca0a712c56c73eabeb8aa052bd6d197cb3f)) +- **csv-stringify:** throw err with no records and header in sync mode ([5c8ef2e](https://github.com/adaltas/node-csv/commit/5c8ef2e25618b122982e01c22bcfa3f8ed5db8aa)) +- **csv-stringify:** update quoted_match config option to accept arrays ([#371](https://github.com/adaltas/node-csv/issues/371)) ([42c468b](https://github.com/adaltas/node-csv/commit/42c468b188d9f0370d0f7ccf2b20c8f477b751d8)) +- **csv-stringify:** update TS types to allow cast to return an object ([#339](https://github.com/adaltas/node-csv/issues/339)) ([60efa78](https://github.com/adaltas/node-csv/commit/60efa7862ed43bd2fd19d1f027a1809e9df6a67e)) +- **csv-stringify:** use removeListener instead of off ([2c2623f](https://github.com/adaltas/node-csv/commit/2c2623f01a4985c5d248e1557a32a70350e825f6)) +- dont insert polyfills in cjs [#303](https://github.com/adaltas/node-csv/issues/303) ([9baf334](https://github.com/adaltas/node-csv/commit/9baf334044dab90b4a0d096a7e456d0fd5807d5b)) +- esm exports in package.json files ([c48fe47](https://github.com/adaltas/node-csv/commit/c48fe478ced7560aa078fbc36ec33d6007111e2b)), closes [#308](https://github.com/adaltas/node-csv/issues/308) +- export original lib esm modules ([be25349](https://github.com/adaltas/node-csv/commit/be2534928ba21156e9cde1e15d2e8593d62ffe71)) +- expose browser esm modules ([eb87355](https://github.com/adaltas/node-csv/commit/eb873557c65912f065d2581d30a17a96b0bfd2d6)) +- fallback to setTimeout is setImmediate is undefined ([3d6a2d0](https://github.com/adaltas/node-csv/commit/3d6a2d0a655af342f28456b46db7ccfe7ee9d664)) +- refer to esm files in dist ([b780fbd](https://github.com/adaltas/node-csv/commit/b780fbd26f5e54494e511eb2e004d3cdedee3593)) +- remove samples from publicatgion ([12c221d](https://github.com/adaltas/node-csv/commit/12c221dc37add26f094e3bb7f94b50ee06ff5be6)) +- support ts node16 resolution in cjs ([#354](https://github.com/adaltas/node-csv/issues/354)) ([fa09d03](https://github.com/adaltas/node-csv/commit/fa09d03aaf0008b2790656871ca6b2c4be12d14c)) +- support TypeScript moduleResolution node16 ([#368](https://github.com/adaltas/node-csv/issues/368)) ([f4d7c97](https://github.com/adaltas/node-csv/commit/f4d7c97f39fb73e9d248eee21e61e7dc48015c78)) +- uncaught errors with large stream chunks (fix [#386](https://github.com/adaltas/node-csv/issues/386)) ([1d500ed](https://github.com/adaltas/node-csv/commit/1d500edf38ba06fc80409974e08c37c6a40f27a1)) + ## [6.5.2](https://github.com/adaltas/node-csv/compare/csv-stringify@6.5.1...csv-stringify@6.5.2) (2024-11-21) **Note:** Version bump only for package csv-stringify diff --git a/packages/csv-stringify/dist/cjs/index.cjs b/packages/csv-stringify/dist/cjs/index.cjs index 7e170d78..22f55819 100644 --- a/packages/csv-stringify/dist/cjs/index.cjs +++ b/packages/csv-stringify/dist/cjs/index.cjs @@ -52,6 +52,7 @@ const reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/; const reIsPlainProp = /^\w*$/; const getTag = function (value) { + // if (!value) value === undefined ? "[object Undefined]" : "[object Null]"; return Object.prototype.toString.call(value); }; diff --git a/packages/csv-stringify/dist/cjs/index.d.cts b/packages/csv-stringify/dist/cjs/index.d.cts index 618b7ee6..4ce56ced 100644 --- a/packages/csv-stringify/dist/cjs/index.d.cts +++ b/packages/csv-stringify/dist/cjs/index.d.cts @@ -2,124 +2,213 @@ import * as stream from "stream"; -export type Callback = (err: Error | undefined, output: string) => void -export type RecordDelimiter = string | Buffer | 'unix' | 'mac' | 'windows' | 'ascii' | 'unicode' +export type Callback = (err: Error | undefined, output: string) => void; +export type RecordDelimiter = + | string + | Buffer + | "unix" + | "mac" + | "windows" + | "ascii" + | "unicode"; export type CastReturnObject = { value: string } & Pick< - Options, - | 'delimiter' - | 'escape' - | 'quote' - | 'quoted' - | 'quoted_empty' - | 'quoted_string' - | 'quoted_match' - | 'record_delimiter' -> + Options, + | "delimiter" + | "escape" + | "quote" + | "quoted" + | "quoted_empty" + | "quoted_string" + | "quoted_match" + | "record_delimiter" +>; export type Cast = ( - value: T, - context: CastingContext -) => string | CastReturnObject; + value: T, + context: CastingContext, +) => string | null | CastReturnObject; -export type PlainObject = Record -export type Input = any[] +export type PlainObject = Record; +export type Input = any[]; export interface ColumnOption { - key: string - header?: string + key: string; + header?: string; } export interface CastingContext { - readonly column?: number | string; - readonly header: boolean; - readonly index: number; - readonly records: number; + readonly column?: number | string; + readonly header: boolean; + readonly index: number; + readonly records: number; } -export interface Options extends stream.TransformOptions { - /** - * Prepend the byte order mark (BOM) to the output stream. - */ - bom?: boolean - /** - * Key-value object which defines custom cast for certain data types - */ - cast?: { - boolean?: Cast - date?: Cast - number?: Cast - bigint?: Cast - /** - * Custom formatter for generic object values - */ - object?: Cast> - string?: Cast - } - /** - * List of fields, applied when `transform` returns an object - * order matters - * read the transformer documentation for additionnal information - * columns are auto discovered in the first record when the user write objects - * can refer to nested properties of the input JSON - * see the "header" option on how to print columns names on the first line - */ - columns?: readonly string[] | PlainObject | readonly ColumnOption[] - /** - * Set the field delimiter, one character only, defaults to a comma. - */ - delimiter?: string | Buffer - /** - * Add the value of "options.RecordDelimiter" on the last line, default to true. - */ - eof?: boolean - /** - * Defaults to the escape read option. - */ - escape?: string | Buffer - /** - * Display the column names on the first line if the columns option is provided or discovered. - */ - header?: boolean - /** - * The quote characters, defaults to the ", an empty quote value will preserve the original field. - */ - quote?: string | Buffer | boolean - /** - * Boolean, default to false, quote all the non-empty fields even if not required. - */ - quoted?: boolean +export interface OptionsNormalized extends stream.TransformOptions { + /** + * Prepend the byte order mark (BOM) to the output stream. + */ + bom: boolean; + /** + * Key-value object which defines custom cast for certain data types + */ + cast?: { + boolean?: Cast; + date?: Cast; + number?: Cast; + bigint?: Cast; /** - * Boolean, no default, quote empty fields and overrides `quoted_string` on empty strings when defined. - */ - quoted_empty?: boolean - /** - * String or RegExp, no default, quote all fields matching a regular expression. - */ - quoted_match?: string | RegExp | (string | RegExp)[] - /** - * Boolean, default to false, quote all fields of type string even if not required. + * Custom formatter for generic object values */ - quoted_string?: boolean - /** - * String used to delimit record rows or a special value - * special values are 'unix', 'mac', 'windows', 'ascii', 'unicode' - * defaults to '\n'. - */ - record_delimiter?: RecordDelimiter + object?: Cast>; + string?: Cast; + }; + /** + * List of fields, applied when `transform` returns an object + * order matters + * read the transformer documentation for additionnal information + * columns are auto discovered in the first record when the user write objects + * can refer to nested properties of the input JSON + * see the "header" option on how to print columns names on the first line + */ + columns: ReadonlyArray | PlainObject; + /** + * Set the field delimiter, one character only, defaults to a comma. + */ + delimiter: string; + /** + * Add the value of "options.RecordDelimiter" on the last line, default to true. + */ + eof: boolean; + /** + * Defaults to the escape read option. + */ + escape: string; + /** + * Display the column names on the first line if the columns option is provided or discovered. + */ + header: boolean; + /** + * The quote characters, defaults to the ", an empty quote value will preserve the original field. + */ + quote: string; + /** + * Boolean, default to false, quote all the non-empty fields even if not required. + */ + quoted: boolean; + + /** + * Boolean, no default, quote empty fields and overrides `quoted_string` on empty strings when defined. + */ + quoted_empty: boolean; + /** + * String or RegExp, no default, quote all fields matching a regular expression. + */ + quoted_match: null | (string | RegExp)[]; + /** + * Boolean, default to false, quote all fields of type string even if not required. + */ + quoted_string: boolean; + /** + * String used to delimit record rows or a special value + * special values are 'unix', 'mac', 'windows', 'ascii', 'unicode' + * defaults to '\n'. + */ + record_delimiter: RecordDelimiter; + /** + * Boolean, default to false, if true, fields that begin with `=`, `+`, `-`, `@`, `\t`, or `\r` will be prepended with a `'` to protected agains csv injection attacks + */ + escape_formulas: boolean; +} + +export interface Options extends stream.TransformOptions { + /** + * Prepend the byte order mark (BOM) to the output stream. + */ + bom?: boolean; + /** + * Key-value object which defines custom cast for certain data types + */ + cast?: { + boolean?: Cast; + date?: Cast; + number?: Cast; + bigint?: Cast; /** - * Boolean, default to false, if true, fields that begin with `=`, `+`, `-`, `@`, `\t`, or `\r` will be prepended with a `'` to protected agains csv injection attacks + * Custom formatter for generic object values */ - escape_formulas?: boolean + object?: Cast>; + string?: Cast; + }; + /** + * List of fields, applied when `transform` returns an object + * order matters + * read the transformer documentation for additionnal information + * columns are auto discovered in the first record when the user write objects + * can refer to nested properties of the input JSON + * see the "header" option on how to print columns names on the first line + */ + columns?: ReadonlyArray | PlainObject; + /** + * Set the field delimiter, one character only, defaults to a comma. + */ + delimiter?: string | Buffer; + /** + * Add the value of "options.RecordDelimiter" on the last line, default to true. + */ + eof?: boolean; + /** + * Defaults to the escape read option. + */ + escape?: string | Buffer; + /** + * Display the column names on the first line if the columns option is provided or discovered. + */ + header?: boolean; + /** + * The quote characters, defaults to the ", an empty quote value will preserve the original field. + */ + quote?: string | Buffer | boolean; + /** + * Boolean, default to false, quote all the non-empty fields even if not required. + */ + quoted?: boolean; + + /** + * Boolean, no default, quote empty fields and overrides `quoted_string` on empty strings when defined. + */ + quoted_empty?: boolean; + /** + * String or RegExp, no default, quote all fields matching a regular expression. + */ + quoted_match?: null | string | RegExp | (string | RegExp)[]; + /** + * Boolean, default to false, quote all fields of type string even if not required. + */ + quoted_string?: boolean; + /** + * String used to delimit record rows or a special value + * special values are 'unix', 'mac', 'windows', 'ascii', 'unicode' + * defaults to '\n'. + */ + record_delimiter?: RecordDelimiter; + /** + * Boolean, default to false, if true, fields that begin with `=`, `+`, `-`, `@`, `\t`, or `\r` will be prepended with a `'` to protected agains csv injection attacks + */ + escape_formulas?: boolean; } export class Stringifier extends stream.Transform { - constructor(options: Options) - readonly options: Options + constructor(options: Options); + readonly options: OptionsNormalized; } -declare function stringify(callback?: Callback): Stringifier -declare function stringify(options: Options, callback?: Callback): Stringifier -declare function stringify(input: Input, callback?: Callback): Stringifier -declare function stringify(input: Input, options?: Options, callback?: Callback): Stringifier +declare function stringify(callback?: Callback): Stringifier; +declare function stringify(options: Options, callback?: Callback): Stringifier; +declare function stringify(input: Input, callback?: Callback): Stringifier; +declare function stringify( + input: Input, + options?: Options, + callback?: Callback, +): Stringifier; // export default stringify -export { stringify } +export { stringify }; diff --git a/packages/csv-stringify/dist/cjs/sync.cjs b/packages/csv-stringify/dist/cjs/sync.cjs index 4e6b3252..412a50f6 100644 --- a/packages/csv-stringify/dist/cjs/sync.cjs +++ b/packages/csv-stringify/dist/cjs/sync.cjs @@ -25,6 +25,7 @@ const reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/; const reIsPlainProp = /^\w*$/; const getTag = function (value) { + // if (!value) value === undefined ? "[object Undefined]" : "[object Null]"; return Object.prototype.toString.call(value); }; diff --git a/packages/csv-stringify/dist/cjs/sync.d.cts b/packages/csv-stringify/dist/cjs/sync.d.cts index 98699bd2..dfc5bffc 100644 --- a/packages/csv-stringify/dist/cjs/sync.d.cts +++ b/packages/csv-stringify/dist/cjs/sync.d.cts @@ -1,12 +1,17 @@ +import { Input, Options } from "./index.cjs"; -import { Input, Options } from './index.cjs' - -declare function stringify(input: Input, options?: Options): string +declare function stringify(input: Input, options?: Options): string; // export default stringify; export { stringify }; export { - RecordDelimiter, Cast, PlainObject, Input, ColumnOption, CastingContext, - Options -} from './index.cjs'; + RecordDelimiter, + Cast, + PlainObject, + Input, + ColumnOption, + CastingContext, + Options, + OptionsNormalized, +} from "./index.cjs"; diff --git a/packages/csv-stringify/dist/esm/index.d.ts b/packages/csv-stringify/dist/esm/index.d.ts index 618b7ee6..4ce56ced 100644 --- a/packages/csv-stringify/dist/esm/index.d.ts +++ b/packages/csv-stringify/dist/esm/index.d.ts @@ -2,124 +2,213 @@ import * as stream from "stream"; -export type Callback = (err: Error | undefined, output: string) => void -export type RecordDelimiter = string | Buffer | 'unix' | 'mac' | 'windows' | 'ascii' | 'unicode' +export type Callback = (err: Error | undefined, output: string) => void; +export type RecordDelimiter = + | string + | Buffer + | "unix" + | "mac" + | "windows" + | "ascii" + | "unicode"; export type CastReturnObject = { value: string } & Pick< - Options, - | 'delimiter' - | 'escape' - | 'quote' - | 'quoted' - | 'quoted_empty' - | 'quoted_string' - | 'quoted_match' - | 'record_delimiter' -> + Options, + | "delimiter" + | "escape" + | "quote" + | "quoted" + | "quoted_empty" + | "quoted_string" + | "quoted_match" + | "record_delimiter" +>; export type Cast = ( - value: T, - context: CastingContext -) => string | CastReturnObject; + value: T, + context: CastingContext, +) => string | null | CastReturnObject; -export type PlainObject = Record -export type Input = any[] +export type PlainObject = Record; +export type Input = any[]; export interface ColumnOption { - key: string - header?: string + key: string; + header?: string; } export interface CastingContext { - readonly column?: number | string; - readonly header: boolean; - readonly index: number; - readonly records: number; + readonly column?: number | string; + readonly header: boolean; + readonly index: number; + readonly records: number; } -export interface Options extends stream.TransformOptions { - /** - * Prepend the byte order mark (BOM) to the output stream. - */ - bom?: boolean - /** - * Key-value object which defines custom cast for certain data types - */ - cast?: { - boolean?: Cast - date?: Cast - number?: Cast - bigint?: Cast - /** - * Custom formatter for generic object values - */ - object?: Cast> - string?: Cast - } - /** - * List of fields, applied when `transform` returns an object - * order matters - * read the transformer documentation for additionnal information - * columns are auto discovered in the first record when the user write objects - * can refer to nested properties of the input JSON - * see the "header" option on how to print columns names on the first line - */ - columns?: readonly string[] | PlainObject | readonly ColumnOption[] - /** - * Set the field delimiter, one character only, defaults to a comma. - */ - delimiter?: string | Buffer - /** - * Add the value of "options.RecordDelimiter" on the last line, default to true. - */ - eof?: boolean - /** - * Defaults to the escape read option. - */ - escape?: string | Buffer - /** - * Display the column names on the first line if the columns option is provided or discovered. - */ - header?: boolean - /** - * The quote characters, defaults to the ", an empty quote value will preserve the original field. - */ - quote?: string | Buffer | boolean - /** - * Boolean, default to false, quote all the non-empty fields even if not required. - */ - quoted?: boolean +export interface OptionsNormalized extends stream.TransformOptions { + /** + * Prepend the byte order mark (BOM) to the output stream. + */ + bom: boolean; + /** + * Key-value object which defines custom cast for certain data types + */ + cast?: { + boolean?: Cast; + date?: Cast; + number?: Cast; + bigint?: Cast; /** - * Boolean, no default, quote empty fields and overrides `quoted_string` on empty strings when defined. - */ - quoted_empty?: boolean - /** - * String or RegExp, no default, quote all fields matching a regular expression. - */ - quoted_match?: string | RegExp | (string | RegExp)[] - /** - * Boolean, default to false, quote all fields of type string even if not required. + * Custom formatter for generic object values */ - quoted_string?: boolean - /** - * String used to delimit record rows or a special value - * special values are 'unix', 'mac', 'windows', 'ascii', 'unicode' - * defaults to '\n'. - */ - record_delimiter?: RecordDelimiter + object?: Cast>; + string?: Cast; + }; + /** + * List of fields, applied when `transform` returns an object + * order matters + * read the transformer documentation for additionnal information + * columns are auto discovered in the first record when the user write objects + * can refer to nested properties of the input JSON + * see the "header" option on how to print columns names on the first line + */ + columns: ReadonlyArray | PlainObject; + /** + * Set the field delimiter, one character only, defaults to a comma. + */ + delimiter: string; + /** + * Add the value of "options.RecordDelimiter" on the last line, default to true. + */ + eof: boolean; + /** + * Defaults to the escape read option. + */ + escape: string; + /** + * Display the column names on the first line if the columns option is provided or discovered. + */ + header: boolean; + /** + * The quote characters, defaults to the ", an empty quote value will preserve the original field. + */ + quote: string; + /** + * Boolean, default to false, quote all the non-empty fields even if not required. + */ + quoted: boolean; + + /** + * Boolean, no default, quote empty fields and overrides `quoted_string` on empty strings when defined. + */ + quoted_empty: boolean; + /** + * String or RegExp, no default, quote all fields matching a regular expression. + */ + quoted_match: null | (string | RegExp)[]; + /** + * Boolean, default to false, quote all fields of type string even if not required. + */ + quoted_string: boolean; + /** + * String used to delimit record rows or a special value + * special values are 'unix', 'mac', 'windows', 'ascii', 'unicode' + * defaults to '\n'. + */ + record_delimiter: RecordDelimiter; + /** + * Boolean, default to false, if true, fields that begin with `=`, `+`, `-`, `@`, `\t`, or `\r` will be prepended with a `'` to protected agains csv injection attacks + */ + escape_formulas: boolean; +} + +export interface Options extends stream.TransformOptions { + /** + * Prepend the byte order mark (BOM) to the output stream. + */ + bom?: boolean; + /** + * Key-value object which defines custom cast for certain data types + */ + cast?: { + boolean?: Cast; + date?: Cast; + number?: Cast; + bigint?: Cast; /** - * Boolean, default to false, if true, fields that begin with `=`, `+`, `-`, `@`, `\t`, or `\r` will be prepended with a `'` to protected agains csv injection attacks + * Custom formatter for generic object values */ - escape_formulas?: boolean + object?: Cast>; + string?: Cast; + }; + /** + * List of fields, applied when `transform` returns an object + * order matters + * read the transformer documentation for additionnal information + * columns are auto discovered in the first record when the user write objects + * can refer to nested properties of the input JSON + * see the "header" option on how to print columns names on the first line + */ + columns?: ReadonlyArray | PlainObject; + /** + * Set the field delimiter, one character only, defaults to a comma. + */ + delimiter?: string | Buffer; + /** + * Add the value of "options.RecordDelimiter" on the last line, default to true. + */ + eof?: boolean; + /** + * Defaults to the escape read option. + */ + escape?: string | Buffer; + /** + * Display the column names on the first line if the columns option is provided or discovered. + */ + header?: boolean; + /** + * The quote characters, defaults to the ", an empty quote value will preserve the original field. + */ + quote?: string | Buffer | boolean; + /** + * Boolean, default to false, quote all the non-empty fields even if not required. + */ + quoted?: boolean; + + /** + * Boolean, no default, quote empty fields and overrides `quoted_string` on empty strings when defined. + */ + quoted_empty?: boolean; + /** + * String or RegExp, no default, quote all fields matching a regular expression. + */ + quoted_match?: null | string | RegExp | (string | RegExp)[]; + /** + * Boolean, default to false, quote all fields of type string even if not required. + */ + quoted_string?: boolean; + /** + * String used to delimit record rows or a special value + * special values are 'unix', 'mac', 'windows', 'ascii', 'unicode' + * defaults to '\n'. + */ + record_delimiter?: RecordDelimiter; + /** + * Boolean, default to false, if true, fields that begin with `=`, `+`, `-`, `@`, `\t`, or `\r` will be prepended with a `'` to protected agains csv injection attacks + */ + escape_formulas?: boolean; } export class Stringifier extends stream.Transform { - constructor(options: Options) - readonly options: Options + constructor(options: Options); + readonly options: OptionsNormalized; } -declare function stringify(callback?: Callback): Stringifier -declare function stringify(options: Options, callback?: Callback): Stringifier -declare function stringify(input: Input, callback?: Callback): Stringifier -declare function stringify(input: Input, options?: Options, callback?: Callback): Stringifier +declare function stringify(callback?: Callback): Stringifier; +declare function stringify(options: Options, callback?: Callback): Stringifier; +declare function stringify(input: Input, callback?: Callback): Stringifier; +declare function stringify( + input: Input, + options?: Options, + callback?: Callback, +): Stringifier; // export default stringify -export { stringify } +export { stringify }; diff --git a/packages/csv-stringify/dist/esm/index.js b/packages/csv-stringify/dist/esm/index.js index 47013ff0..db36122b 100644 --- a/packages/csv-stringify/dist/esm/index.js +++ b/packages/csv-stringify/dist/esm/index.js @@ -28,7 +28,9 @@ EventEmitter.init = function() { this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -1297,8 +1299,8 @@ function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -2057,7 +2059,7 @@ Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, no Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -2067,7 +2069,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -2080,7 +2082,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -2093,7 +2095,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -2108,7 +2110,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2569,94 +2571,19 @@ function Item(fun, array) { Item.prototype.run = function () { this.fun.apply(null, this.array); }; -var title = 'browser'; -var platform = 'browser'; -var browser = true; var env = {}; -var argv = []; -var version = ''; // empty string to avoid regexp issues -var versions = {}; -var release = {}; -var config = {}; - -function noop() {} - -var on = noop; -var addListener = noop; -var once = noop; -var off = noop; -var removeListener = noop; -var removeAllListeners = noop; -var emit = noop; - -function binding(name) { - throw new Error('process.binding is not supported'); -} - -function cwd () { return '/' } -function chdir (dir) { - throw new Error('process.chdir is not supported'); -}function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; -var performanceNow = - performance.now || +performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; -// generate timestamp or delta -// see http://nodejs.org/api/process.html#process_process_hrtime -function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] -} - -var startTime = new Date(); -function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; -} - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime -}; + env: env}; var inherits; if (typeof Object.create === 'function'){ @@ -5174,6 +5101,7 @@ const reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/; const reIsPlainProp = /^\w*$/; const getTag = function (value) { + // if (!value) value === undefined ? "[object Undefined]" : "[object Null]"; return Object.prototype.toString.call(value); }; diff --git a/packages/csv-stringify/dist/esm/sync.d.ts b/packages/csv-stringify/dist/esm/sync.d.ts index 3814c21d..9e6140e9 100644 --- a/packages/csv-stringify/dist/esm/sync.d.ts +++ b/packages/csv-stringify/dist/esm/sync.d.ts @@ -1,12 +1,17 @@ +import { Input, Options } from "./index.js"; -import { Input, Options } from './index.js' - -declare function stringify(input: Input, options?: Options): string +declare function stringify(input: Input, options?: Options): string; // export default stringify; export { stringify }; export { - RecordDelimiter, Cast, PlainObject, Input, ColumnOption, CastingContext, - Options -} from './index.js'; + RecordDelimiter, + Cast, + PlainObject, + Input, + ColumnOption, + CastingContext, + Options, + OptionsNormalized, +} from "./index.js"; diff --git a/packages/csv-stringify/dist/esm/sync.js b/packages/csv-stringify/dist/esm/sync.js index 3348f7ae..58ebc60e 100644 --- a/packages/csv-stringify/dist/esm/sync.js +++ b/packages/csv-stringify/dist/esm/sync.js @@ -831,8 +831,8 @@ function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1591,7 +1591,7 @@ Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, no Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1601,7 +1601,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1614,7 +1614,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1627,7 +1627,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1642,7 +1642,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -1995,6 +1995,7 @@ const reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/; const reIsPlainProp = /^\w*$/; const getTag = function (value) { + // if (!value) value === undefined ? "[object Undefined]" : "[object Null]"; return Object.prototype.toString.call(value); }; diff --git a/packages/csv-stringify/dist/iife/index.js b/packages/csv-stringify/dist/iife/index.js index 4b540a2d..fb5febc2 100644 --- a/packages/csv-stringify/dist/iife/index.js +++ b/packages/csv-stringify/dist/iife/index.js @@ -31,7 +31,9 @@ var csv_stringify = (function (exports) { this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -1300,8 +1302,8 @@ var csv_stringify = (function (exports) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -2060,7 +2062,7 @@ var csv_stringify = (function (exports) { Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -2070,7 +2072,7 @@ var csv_stringify = (function (exports) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -2083,7 +2085,7 @@ var csv_stringify = (function (exports) { Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -2096,7 +2098,7 @@ var csv_stringify = (function (exports) { Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -2111,7 +2113,7 @@ var csv_stringify = (function (exports) { Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2572,94 +2574,19 @@ var csv_stringify = (function (exports) { Item.prototype.run = function () { this.fun.apply(null, this.array); }; - var title = 'browser'; - var platform = 'browser'; - var browser = true; var env = {}; - var argv = []; - var version = ''; // empty string to avoid regexp issues - var versions = {}; - var release = {}; - var config = {}; - - function noop() {} - - var on = noop; - var addListener = noop; - var once = noop; - var off = noop; - var removeListener = noop; - var removeAllListeners = noop; - var emit = noop; - - function binding(name) { - throw new Error('process.binding is not supported'); - } - - function cwd () { return '/' } - function chdir (dir) { - throw new Error('process.chdir is not supported'); - }function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; - var performanceNow = - performance.now || + performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; - // generate timestamp or delta - // see http://nodejs.org/api/process.html#process_process_hrtime - function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] - } - - var startTime = new Date(); - function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; - } - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime - }; + env: env}; var inherits; if (typeof Object.create === 'function'){ @@ -5177,6 +5104,7 @@ var csv_stringify = (function (exports) { const reIsPlainProp = /^\w*$/; const getTag = function (value) { + // if (!value) value === undefined ? "[object Undefined]" : "[object Null]"; return Object.prototype.toString.call(value); }; diff --git a/packages/csv-stringify/dist/iife/sync.js b/packages/csv-stringify/dist/iife/sync.js index 2473d394..e4be39a4 100644 --- a/packages/csv-stringify/dist/iife/sync.js +++ b/packages/csv-stringify/dist/iife/sync.js @@ -834,8 +834,8 @@ var csv_stringify_sync = (function (exports) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1594,7 +1594,7 @@ var csv_stringify_sync = (function (exports) { Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1604,7 +1604,7 @@ var csv_stringify_sync = (function (exports) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1617,7 +1617,7 @@ var csv_stringify_sync = (function (exports) { Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1630,7 +1630,7 @@ var csv_stringify_sync = (function (exports) { Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1645,7 +1645,7 @@ var csv_stringify_sync = (function (exports) { Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -1998,6 +1998,7 @@ var csv_stringify_sync = (function (exports) { const reIsPlainProp = /^\w*$/; const getTag = function (value) { + // if (!value) value === undefined ? "[object Undefined]" : "[object Null]"; return Object.prototype.toString.call(value); }; diff --git a/packages/csv-stringify/dist/umd/index.js b/packages/csv-stringify/dist/umd/index.js index b27b478d..3321216a 100644 --- a/packages/csv-stringify/dist/umd/index.js +++ b/packages/csv-stringify/dist/umd/index.js @@ -34,7 +34,9 @@ this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -1303,8 +1305,8 @@ byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -2063,7 +2065,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -2073,7 +2075,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -2086,7 +2088,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -2099,7 +2101,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -2114,7 +2116,7 @@ Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2575,94 +2577,19 @@ Item.prototype.run = function () { this.fun.apply(null, this.array); }; - var title = 'browser'; - var platform = 'browser'; - var browser = true; var env = {}; - var argv = []; - var version = ''; // empty string to avoid regexp issues - var versions = {}; - var release = {}; - var config = {}; - - function noop() {} - - var on = noop; - var addListener = noop; - var once = noop; - var off = noop; - var removeListener = noop; - var removeAllListeners = noop; - var emit = noop; - - function binding(name) { - throw new Error('process.binding is not supported'); - } - - function cwd () { return '/' } - function chdir (dir) { - throw new Error('process.chdir is not supported'); - }function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; - var performanceNow = - performance.now || + performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; - // generate timestamp or delta - // see http://nodejs.org/api/process.html#process_process_hrtime - function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] - } - - var startTime = new Date(); - function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; - } - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime - }; + env: env}; var inherits; if (typeof Object.create === 'function'){ @@ -5180,6 +5107,7 @@ const reIsPlainProp = /^\w*$/; const getTag = function (value) { + // if (!value) value === undefined ? "[object Undefined]" : "[object Null]"; return Object.prototype.toString.call(value); }; diff --git a/packages/csv-stringify/dist/umd/sync.js b/packages/csv-stringify/dist/umd/sync.js index cdb9332a..ab1911b0 100644 --- a/packages/csv-stringify/dist/umd/sync.js +++ b/packages/csv-stringify/dist/umd/sync.js @@ -837,8 +837,8 @@ byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1597,7 +1597,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1607,7 +1607,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1620,7 +1620,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1633,7 +1633,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1648,7 +1648,7 @@ Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2001,6 +2001,7 @@ const reIsPlainProp = /^\w*$/; const getTag = function (value) { + // if (!value) value === undefined ? "[object Undefined]" : "[object Null]"; return Object.prototype.toString.call(value); }; diff --git a/packages/csv-stringify/package.json b/packages/csv-stringify/package.json index be8e7a57..0fb0b336 100644 --- a/packages/csv-stringify/package.json +++ b/packages/csv-stringify/package.json @@ -1,5 +1,5 @@ { - "version": "6.5.2", + "version": "6.6.0", "name": "csv-stringify", "description": "CSV stringifier implementing the Node.js `stream.Transform` API", "keywords": [ @@ -14,7 +14,7 @@ "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.30", - "csv-generate": "^4.4.2", + "csv-generate": "^4.5.0", "dedent": "^1.6.0", "each": "^2.7.2", "express": "^5.1.0", diff --git a/packages/csv/CHANGELOG.md b/packages/csv/CHANGELOG.md index 643fc6c6..fe90313f 100644 --- a/packages/csv/CHANGELOG.md +++ b/packages/csv/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 6.4.0 (2025-07-10) + +### Features + +- add unicode chars to formula escape ([#387](https://github.com/adaltas/node-csv/issues/387)) ([1fc177c](https://github.com/adaltas/node-csv/commit/1fc177c605e8a88e403539806890695a6ba72dec)) +- backport support for node 14 ([dbfeb78](https://github.com/adaltas/node-csv/commit/dbfeb78f61ed36f02936d63a53345708ca213e45)) +- backward support for node 8 ([496231d](https://github.com/adaltas/node-csv/commit/496231dfd838f0a6a72269a5a2390a4c637cef95)) +- esm migration ([b5c0d4b](https://github.com/adaltas/node-csv/commit/b5c0d4b191c8b57397808c0922a3f08248506a9f)) +- export ts types in sync ([890bf8d](https://github.com/adaltas/node-csv/commit/890bf8d950c18a05cab5e35a461d0847d9425156)) +- replace ts types with typesVersions ([acb41d5](https://github.com/adaltas/node-csv/commit/acb41d5031669f2d582e40da1c80f5fd4738fee4)) +- ts module Node16 and type declaration to exports field ([#341](https://github.com/adaltas/node-csv/issues/341)) ([4b0283d](https://github.com/adaltas/node-csv/commit/4b0283d17b7fa46daa1f87380759ba72c71ec79b)) +- wg stream api ([8a5eb7d](https://github.com/adaltas/node-csv/commit/8a5eb7dfd31b22217db4fbbc832d707221850785)) + +### Bug Fixes + +- commonjs types, run tsc and lint to validate changes ([#397](https://github.com/adaltas/node-csv/issues/397)) ([e6870fe](https://github.com/adaltas/node-csv/commit/e6870fe272c119e273196522c9771d12ff8b2a35)) +- correct exports in package.json with webpack ([154eafb](https://github.com/adaltas/node-csv/commit/154eafbac866eb4499a0d392f8dcd057695c2586)) +- **csv-demo-ts-cjs-node16:** upgrade module definition after latest typescript ([87fe919](https://github.com/adaltas/node-csv/commit/87fe91996fb2a8895c252177fca4f0cb59a518f9)) +- **csv-demo-webpack-ts:** simplify export paths ([8d63a14](https://github.com/adaltas/node-csv/commit/8d63a14313bb6b26f13fafb740cc686f1dfaa65f)) +- **csv-generate:** finish called twice in node 16 ([3decdf1](https://github.com/adaltas/node-csv/commit/3decdf169ce3b8e0c5cadd257816c346c8e4d3fa)) +- **csv-stringify:** bom and header in sync mode with no records (fix [#343](https://github.com/adaltas/node-csv/issues/343)) ([bff158f](https://github.com/adaltas/node-csv/commit/bff158fbc9001b2cf7177ecd0f16dc97edac55f2)) +- **csv-stringify:** node 12 compatibility in flush ([9145b75](https://github.com/adaltas/node-csv/commit/9145b75012ec71a0b4152036af2275bf28c460e0)) +- **csv-stringify:** quote_match with empty string pattern quotes empty strings ([#345](https://github.com/adaltas/node-csv/issues/345)) ([1c22d2e](https://github.com/adaltas/node-csv/commit/1c22d2e07f66dd747150b5a7499b5ebd5bc0f25c)), closes [#344](https://github.com/adaltas/node-csv/issues/344) +- **csv:** export csv_sync ([1353284](https://github.com/adaltas/node-csv/commit/1353284aa02bb9f4f727d2653e398a869eebe20d)) +- **csv:** fixed CJS types under modern `modernResolution` options ([#388](https://github.com/adaltas/node-csv/issues/388)) ([54d03e4](https://github.com/adaltas/node-csv/commit/54d03e4779033ef7d574dffa98a7c3ce93da345d)) +- **csv:** remove ts files in cjs dist ([d0d1089](https://github.com/adaltas/node-csv/commit/d0d1089c3ef9053c9adb9a9747ce11d5ea5cfe49)) +- dont insert polyfills in cjs [#303](https://github.com/adaltas/node-csv/issues/303) ([9baf334](https://github.com/adaltas/node-csv/commit/9baf334044dab90b4a0d096a7e456d0fd5807d5b)) +- esm exports in package.json files ([c48fe47](https://github.com/adaltas/node-csv/commit/c48fe478ced7560aa078fbc36ec33d6007111e2b)), closes [#308](https://github.com/adaltas/node-csv/issues/308) +- export original lib esm modules ([be25349](https://github.com/adaltas/node-csv/commit/be2534928ba21156e9cde1e15d2e8593d62ffe71)) +- expose browser esm modules ([eb87355](https://github.com/adaltas/node-csv/commit/eb873557c65912f065d2581d30a17a96b0bfd2d6)) +- fallback to setTimeout is setImmediate is undefined ([3d6a2d0](https://github.com/adaltas/node-csv/commit/3d6a2d0a655af342f28456b46db7ccfe7ee9d664)) +- refer to esm files in dist ([b780fbd](https://github.com/adaltas/node-csv/commit/b780fbd26f5e54494e511eb2e004d3cdedee3593)) +- remove samples from publicatgion ([12c221d](https://github.com/adaltas/node-csv/commit/12c221dc37add26f094e3bb7f94b50ee06ff5be6)) +- uncaught errors with large stream chunks (fix [#386](https://github.com/adaltas/node-csv/issues/386)) ([1d500ed](https://github.com/adaltas/node-csv/commit/1d500edf38ba06fc80409974e08c37c6a40f27a1)) + ## [6.3.11](https://github.com/adaltas/node-csv/compare/csv@6.3.10...csv@6.3.11) (2024-11-21) **Note:** Version bump only for package csv diff --git a/packages/csv/dist/cjs/index.cjs b/packages/csv/dist/cjs/index.cjs index c3947d6e..a0762c66 100644 --- a/packages/csv/dist/cjs/index.cjs +++ b/packages/csv/dist/cjs/index.cjs @@ -579,7 +579,7 @@ const normalize_options$1 = function (opts) { ); } // Normalize option `columns` - options.cast_first_line_to_header = null; + options.cast_first_line_to_header = undefined; if (options.columns === true) { // Fields in the first line are converted as-is to columns options.cast_first_line_to_header = undefined; @@ -2007,10 +2007,14 @@ const transform$1 = function (original_options = {}) { if (skip_records_with_error) { this.state.recordHasError = true; if (this.options.on_skip !== undefined) { - this.options.on_skip( - err, - raw ? this.state.rawBuffer.toString(encoding) : undefined, - ); + try { + this.options.on_skip( + err, + raw ? this.state.rawBuffer.toString(encoding) : undefined, + ); + } catch (err) { + return err; + } } // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined); return undefined; @@ -2402,6 +2406,7 @@ const reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/; const reIsPlainProp = /^\w*$/; const getTag = function (value) { + // if (!value) value === undefined ? "[object Undefined]" : "[object Null]"; return Object.prototype.toString.call(value); }; diff --git a/packages/csv/dist/cjs/index.d.cts b/packages/csv/dist/cjs/index.d.cts index c9770f8d..9dc9a1ee 100644 --- a/packages/csv/dist/cjs/index.d.cts +++ b/packages/csv/dist/cjs/index.d.cts @@ -1,14 +1,13 @@ - // Alias to the modules exposing the stream and callback APIs -import { generate } from 'csv-generate'; -import { parse } from 'csv-parse'; -import { transform } from 'stream-transform'; -import { stringify } from 'csv-stringify'; +import { generate } from "csv-generate"; +import { parse } from "csv-parse"; +import { transform } from "stream-transform"; +import { stringify } from "csv-stringify"; export { generate, parse, transform, stringify }; -export * as generator from 'csv-generate'; -export * as parser from 'csv-parse'; -export * as transformer from 'stream-transform'; -export * as stringifier from 'csv-stringify'; +export * as generator from "csv-generate"; +export * as parser from "csv-parse"; +export * as transformer from "stream-transform"; +export * as stringifier from "csv-stringify"; diff --git a/packages/csv/dist/cjs/sync.cjs b/packages/csv/dist/cjs/sync.cjs index 527f8b58..d2238612 100644 --- a/packages/csv/dist/cjs/sync.cjs +++ b/packages/csv/dist/cjs/sync.cjs @@ -577,7 +577,7 @@ const normalize_options$1 = function (opts) { ); } // Normalize option `columns` - options.cast_first_line_to_header = null; + options.cast_first_line_to_header = undefined; if (options.columns === true) { // Fields in the first line are converted as-is to columns options.cast_first_line_to_header = undefined; @@ -2005,10 +2005,14 @@ const transform$1 = function (original_options = {}) { if (skip_records_with_error) { this.state.recordHasError = true; if (this.options.on_skip !== undefined) { - this.options.on_skip( - err, - raw ? this.state.rawBuffer.toString(encoding) : undefined, - ); + try { + this.options.on_skip( + err, + raw ? this.state.rawBuffer.toString(encoding) : undefined, + ); + } catch (err) { + return err; + } } // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined); return undefined; @@ -2062,10 +2066,13 @@ const parse = function (data, opts = {}) { } }; const close = () => {}; - const err1 = parser.parse(data, false, push, close); - if (err1 !== undefined) throw err1; - const err2 = parser.parse(undefined, true, push, close); - if (err2 !== undefined) throw err2; + const error = parser.parse(data, true, push, close); + if (error !== undefined) throw error; + // 250606: `parser.parse` was implemented as 2 calls: + // const err1 = parser.parse(data, false, push, close); + // if (err1 !== undefined) throw err1; + // const err2 = parser.parse(undefined, true, push, close); + // if (err2 !== undefined) throw err2; return records; }; @@ -2094,6 +2101,7 @@ const reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/; const reIsPlainProp = /^\w*$/; const getTag = function (value) { + // if (!value) value === undefined ? "[object Undefined]" : "[object Null]"; return Object.prototype.toString.call(value); }; diff --git a/packages/csv/dist/cjs/sync.d.cts b/packages/csv/dist/cjs/sync.d.cts index b1812592..8bdf6763 100644 --- a/packages/csv/dist/cjs/sync.d.cts +++ b/packages/csv/dist/cjs/sync.d.cts @@ -1,14 +1,13 @@ - // Alias to the modules exposing the sync APIs -import { generate } from 'csv-generate/sync' -import { parse } from 'csv-parse/sync'; -import { transform } from 'stream-transform/sync'; -import { stringify } from 'csv-stringify/sync'; +import { generate } from "csv-generate/sync"; +import { parse } from "csv-parse/sync"; +import { transform } from "stream-transform/sync"; +import { stringify } from "csv-stringify/sync"; -export { generate, parse, transform, stringify } +export { generate, parse, transform, stringify }; -export * as generator from 'csv-generate/sync'; -export * as parser from 'csv-parse/sync'; -export * as transformer from 'stream-transform/sync'; -export * as stringifier from 'csv-stringify/sync'; +export * as generator from "csv-generate/sync"; +export * as parser from "csv-parse/sync"; +export * as transformer from "stream-transform/sync"; +export * as stringifier from "csv-stringify/sync"; diff --git a/packages/csv/dist/esm/index.d.ts b/packages/csv/dist/esm/index.d.ts index c9770f8d..9dc9a1ee 100644 --- a/packages/csv/dist/esm/index.d.ts +++ b/packages/csv/dist/esm/index.d.ts @@ -1,14 +1,13 @@ - // Alias to the modules exposing the stream and callback APIs -import { generate } from 'csv-generate'; -import { parse } from 'csv-parse'; -import { transform } from 'stream-transform'; -import { stringify } from 'csv-stringify'; +import { generate } from "csv-generate"; +import { parse } from "csv-parse"; +import { transform } from "stream-transform"; +import { stringify } from "csv-stringify"; export { generate, parse, transform, stringify }; -export * as generator from 'csv-generate'; -export * as parser from 'csv-parse'; -export * as transformer from 'stream-transform'; -export * as stringifier from 'csv-stringify'; +export * as generator from "csv-generate"; +export * as parser from "csv-parse"; +export * as transformer from "stream-transform"; +export * as stringifier from "csv-stringify"; diff --git a/packages/csv/dist/esm/index.js b/packages/csv/dist/esm/index.js index 93a5b12f..9a139eb4 100644 --- a/packages/csv/dist/esm/index.js +++ b/packages/csv/dist/esm/index.js @@ -831,8 +831,8 @@ function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1591,7 +1591,7 @@ Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, no Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1601,7 +1601,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1614,7 +1614,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1627,7 +1627,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1642,7 +1642,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2000,7 +2000,9 @@ EventEmitter.init = function() { this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -2569,94 +2571,19 @@ function Item(fun, array) { Item.prototype.run = function () { this.fun.apply(null, this.array); }; -var title = 'browser'; -var platform = 'browser'; -var browser = true; var env = {}; -var argv = []; -var version = ''; // empty string to avoid regexp issues -var versions = {}; -var release = {}; -var config = {}; - -function noop() {} - -var on = noop; -var addListener = noop; -var once = noop; -var off = noop; -var removeListener = noop; -var removeAllListeners = noop; -var emit = noop; - -function binding(name) { - throw new Error('process.binding is not supported'); -} - -function cwd () { return '/' } -function chdir (dir) { - throw new Error('process.chdir is not supported'); -}function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; -var performanceNow = - performance.now || +performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; -// generate timestamp or delta -// see http://nodejs.org/api/process.html#process_process_hrtime -function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] -} - -var startTime = new Date(); -function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; -} - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime -}; + env: env}; var inherits; if (typeof Object.create === 'function'){ @@ -5762,7 +5689,7 @@ const normalize_options$1 = function (opts) { ); } // Normalize option `columns` - options.cast_first_line_to_header = null; + options.cast_first_line_to_header = undefined; if (options.columns === true) { // Fields in the first line are converted as-is to columns options.cast_first_line_to_header = undefined; @@ -7190,10 +7117,14 @@ const transform$1 = function (original_options = {}) { if (skip_records_with_error) { this.state.recordHasError = true; if (this.options.on_skip !== undefined) { - this.options.on_skip( - err, - raw ? this.state.rawBuffer.toString(encoding) : undefined, - ); + try { + this.options.on_skip( + err, + raw ? this.state.rawBuffer.toString(encoding) : undefined, + ); + } catch (err) { + return err; + } } // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined); return undefined; @@ -7577,6 +7508,7 @@ const reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/; const reIsPlainProp = /^\w*$/; const getTag = function (value) { + // if (!value) value === undefined ? "[object Undefined]" : "[object Null]"; return Object.prototype.toString.call(value); }; diff --git a/packages/csv/dist/esm/sync.d.ts b/packages/csv/dist/esm/sync.d.ts index b1812592..8bdf6763 100644 --- a/packages/csv/dist/esm/sync.d.ts +++ b/packages/csv/dist/esm/sync.d.ts @@ -1,14 +1,13 @@ - // Alias to the modules exposing the sync APIs -import { generate } from 'csv-generate/sync' -import { parse } from 'csv-parse/sync'; -import { transform } from 'stream-transform/sync'; -import { stringify } from 'csv-stringify/sync'; +import { generate } from "csv-generate/sync"; +import { parse } from "csv-parse/sync"; +import { transform } from "stream-transform/sync"; +import { stringify } from "csv-stringify/sync"; -export { generate, parse, transform, stringify } +export { generate, parse, transform, stringify }; -export * as generator from 'csv-generate/sync'; -export * as parser from 'csv-parse/sync'; -export * as transformer from 'stream-transform/sync'; -export * as stringifier from 'csv-stringify/sync'; +export * as generator from "csv-generate/sync"; +export * as parser from "csv-parse/sync"; +export * as transformer from "stream-transform/sync"; +export * as stringifier from "csv-stringify/sync"; diff --git a/packages/csv/dist/esm/sync.js b/packages/csv/dist/esm/sync.js index efc0e6d3..0f96c0c4 100644 --- a/packages/csv/dist/esm/sync.js +++ b/packages/csv/dist/esm/sync.js @@ -831,8 +831,8 @@ function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1591,7 +1591,7 @@ Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, no Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1601,7 +1601,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1614,7 +1614,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1627,7 +1627,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1642,7 +1642,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2000,7 +2000,9 @@ EventEmitter.init = function() { this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -2569,94 +2571,19 @@ function Item(fun, array) { Item.prototype.run = function () { this.fun.apply(null, this.array); }; -var title = 'browser'; -var platform = 'browser'; -var browser = true; var env = {}; -var argv = []; -var version = ''; // empty string to avoid regexp issues -var versions = {}; -var release = {}; -var config = {}; - -function noop() {} - -var on = noop; -var addListener = noop; -var once = noop; -var off = noop; -var removeListener = noop; -var removeAllListeners = noop; -var emit = noop; - -function binding(name) { - throw new Error('process.binding is not supported'); -} - -function cwd () { return '/' } -function chdir (dir) { - throw new Error('process.chdir is not supported'); -}function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; -var performanceNow = - performance.now || +performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; -// generate timestamp or delta -// see http://nodejs.org/api/process.html#process_process_hrtime -function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] -} - -var startTime = new Date(); -function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; -} - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime -}; + env: env}; var inherits; if (typeof Object.create === 'function'){ @@ -5760,7 +5687,7 @@ const normalize_options$1 = function (opts) { ); } // Normalize option `columns` - options.cast_first_line_to_header = null; + options.cast_first_line_to_header = undefined; if (options.columns === true) { // Fields in the first line are converted as-is to columns options.cast_first_line_to_header = undefined; @@ -7188,10 +7115,14 @@ const transform$1 = function (original_options = {}) { if (skip_records_with_error) { this.state.recordHasError = true; if (this.options.on_skip !== undefined) { - this.options.on_skip( - err, - raw ? this.state.rawBuffer.toString(encoding) : undefined, - ); + try { + this.options.on_skip( + err, + raw ? this.state.rawBuffer.toString(encoding) : undefined, + ); + } catch (err) { + return err; + } } // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined); return undefined; @@ -7245,10 +7176,13 @@ const parse = function (data, opts = {}) { } }; const close = () => {}; - const err1 = parser.parse(data, false, push, close); - if (err1 !== undefined) throw err1; - const err2 = parser.parse(undefined, true, push, close); - if (err2 !== undefined) throw err2; + const error = parser.parse(data, true, push, close); + if (error !== undefined) throw error; + // 250606: `parser.parse` was implemented as 2 calls: + // const err1 = parser.parse(data, false, push, close); + // if (err1 !== undefined) throw err1; + // const err2 = parser.parse(undefined, true, push, close); + // if (err2 !== undefined) throw err2; return records; }; @@ -7277,6 +7211,7 @@ const reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/; const reIsPlainProp = /^\w*$/; const getTag = function (value) { + // if (!value) value === undefined ? "[object Undefined]" : "[object Null]"; return Object.prototype.toString.call(value); }; diff --git a/packages/csv/dist/iife/index.js b/packages/csv/dist/iife/index.js index 3665e743..e74b906c 100644 --- a/packages/csv/dist/iife/index.js +++ b/packages/csv/dist/iife/index.js @@ -834,8 +834,8 @@ var csv = (function (exports) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1594,7 +1594,7 @@ var csv = (function (exports) { Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1604,7 +1604,7 @@ var csv = (function (exports) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1617,7 +1617,7 @@ var csv = (function (exports) { Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1630,7 +1630,7 @@ var csv = (function (exports) { Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1645,7 +1645,7 @@ var csv = (function (exports) { Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2003,7 +2003,9 @@ var csv = (function (exports) { this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -2572,94 +2574,19 @@ var csv = (function (exports) { Item.prototype.run = function () { this.fun.apply(null, this.array); }; - var title = 'browser'; - var platform = 'browser'; - var browser = true; var env = {}; - var argv = []; - var version = ''; // empty string to avoid regexp issues - var versions = {}; - var release = {}; - var config = {}; - - function noop() {} - - var on = noop; - var addListener = noop; - var once = noop; - var off = noop; - var removeListener = noop; - var removeAllListeners = noop; - var emit = noop; - - function binding(name) { - throw new Error('process.binding is not supported'); - } - - function cwd () { return '/' } - function chdir (dir) { - throw new Error('process.chdir is not supported'); - }function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; - var performanceNow = - performance.now || + performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; - // generate timestamp or delta - // see http://nodejs.org/api/process.html#process_process_hrtime - function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] - } - - var startTime = new Date(); - function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; - } - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime - }; + env: env}; var inherits; if (typeof Object.create === 'function'){ @@ -5765,7 +5692,7 @@ var csv = (function (exports) { ); } // Normalize option `columns` - options.cast_first_line_to_header = null; + options.cast_first_line_to_header = undefined; if (options.columns === true) { // Fields in the first line are converted as-is to columns options.cast_first_line_to_header = undefined; @@ -7193,10 +7120,14 @@ var csv = (function (exports) { if (skip_records_with_error) { this.state.recordHasError = true; if (this.options.on_skip !== undefined) { - this.options.on_skip( - err, - raw ? this.state.rawBuffer.toString(encoding) : undefined, - ); + try { + this.options.on_skip( + err, + raw ? this.state.rawBuffer.toString(encoding) : undefined, + ); + } catch (err) { + return err; + } } // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined); return undefined; @@ -7580,6 +7511,7 @@ var csv = (function (exports) { const reIsPlainProp = /^\w*$/; const getTag = function (value) { + // if (!value) value === undefined ? "[object Undefined]" : "[object Null]"; return Object.prototype.toString.call(value); }; diff --git a/packages/csv/dist/iife/sync.js b/packages/csv/dist/iife/sync.js index 30438d4f..71e08fbb 100644 --- a/packages/csv/dist/iife/sync.js +++ b/packages/csv/dist/iife/sync.js @@ -834,8 +834,8 @@ var csv_sync = (function (exports) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1594,7 +1594,7 @@ var csv_sync = (function (exports) { Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1604,7 +1604,7 @@ var csv_sync = (function (exports) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1617,7 +1617,7 @@ var csv_sync = (function (exports) { Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1630,7 +1630,7 @@ var csv_sync = (function (exports) { Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1645,7 +1645,7 @@ var csv_sync = (function (exports) { Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2003,7 +2003,9 @@ var csv_sync = (function (exports) { this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -2572,94 +2574,19 @@ var csv_sync = (function (exports) { Item.prototype.run = function () { this.fun.apply(null, this.array); }; - var title = 'browser'; - var platform = 'browser'; - var browser = true; var env = {}; - var argv = []; - var version = ''; // empty string to avoid regexp issues - var versions = {}; - var release = {}; - var config = {}; - - function noop() {} - - var on = noop; - var addListener = noop; - var once = noop; - var off = noop; - var removeListener = noop; - var removeAllListeners = noop; - var emit = noop; - - function binding(name) { - throw new Error('process.binding is not supported'); - } - - function cwd () { return '/' } - function chdir (dir) { - throw new Error('process.chdir is not supported'); - }function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; - var performanceNow = - performance.now || + performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; - // generate timestamp or delta - // see http://nodejs.org/api/process.html#process_process_hrtime - function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] - } - - var startTime = new Date(); - function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; - } - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime - }; + env: env}; var inherits; if (typeof Object.create === 'function'){ @@ -5763,7 +5690,7 @@ var csv_sync = (function (exports) { ); } // Normalize option `columns` - options.cast_first_line_to_header = null; + options.cast_first_line_to_header = undefined; if (options.columns === true) { // Fields in the first line are converted as-is to columns options.cast_first_line_to_header = undefined; @@ -7191,10 +7118,14 @@ var csv_sync = (function (exports) { if (skip_records_with_error) { this.state.recordHasError = true; if (this.options.on_skip !== undefined) { - this.options.on_skip( - err, - raw ? this.state.rawBuffer.toString(encoding) : undefined, - ); + try { + this.options.on_skip( + err, + raw ? this.state.rawBuffer.toString(encoding) : undefined, + ); + } catch (err) { + return err; + } } // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined); return undefined; @@ -7248,10 +7179,13 @@ var csv_sync = (function (exports) { } }; const close = () => {}; - const err1 = parser.parse(data, false, push, close); - if (err1 !== undefined) throw err1; - const err2 = parser.parse(undefined, true, push, close); - if (err2 !== undefined) throw err2; + const error = parser.parse(data, true, push, close); + if (error !== undefined) throw error; + // 250606: `parser.parse` was implemented as 2 calls: + // const err1 = parser.parse(data, false, push, close); + // if (err1 !== undefined) throw err1; + // const err2 = parser.parse(undefined, true, push, close); + // if (err2 !== undefined) throw err2; return records; }; @@ -7280,6 +7214,7 @@ var csv_sync = (function (exports) { const reIsPlainProp = /^\w*$/; const getTag = function (value) { + // if (!value) value === undefined ? "[object Undefined]" : "[object Null]"; return Object.prototype.toString.call(value); }; diff --git a/packages/csv/dist/umd/index.js b/packages/csv/dist/umd/index.js index f20f7f8e..75355624 100644 --- a/packages/csv/dist/umd/index.js +++ b/packages/csv/dist/umd/index.js @@ -837,8 +837,8 @@ byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1597,7 +1597,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1607,7 +1607,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1620,7 +1620,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1633,7 +1633,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1648,7 +1648,7 @@ Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2006,7 +2006,9 @@ this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -2575,94 +2577,19 @@ Item.prototype.run = function () { this.fun.apply(null, this.array); }; - var title = 'browser'; - var platform = 'browser'; - var browser = true; var env = {}; - var argv = []; - var version = ''; // empty string to avoid regexp issues - var versions = {}; - var release = {}; - var config = {}; - - function noop() {} - - var on = noop; - var addListener = noop; - var once = noop; - var off = noop; - var removeListener = noop; - var removeAllListeners = noop; - var emit = noop; - - function binding(name) { - throw new Error('process.binding is not supported'); - } - - function cwd () { return '/' } - function chdir (dir) { - throw new Error('process.chdir is not supported'); - }function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; - var performanceNow = - performance.now || + performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; - // generate timestamp or delta - // see http://nodejs.org/api/process.html#process_process_hrtime - function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] - } - - var startTime = new Date(); - function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; - } - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime - }; + env: env}; var inherits; if (typeof Object.create === 'function'){ @@ -5768,7 +5695,7 @@ ); } // Normalize option `columns` - options.cast_first_line_to_header = null; + options.cast_first_line_to_header = undefined; if (options.columns === true) { // Fields in the first line are converted as-is to columns options.cast_first_line_to_header = undefined; @@ -7196,10 +7123,14 @@ if (skip_records_with_error) { this.state.recordHasError = true; if (this.options.on_skip !== undefined) { - this.options.on_skip( - err, - raw ? this.state.rawBuffer.toString(encoding) : undefined, - ); + try { + this.options.on_skip( + err, + raw ? this.state.rawBuffer.toString(encoding) : undefined, + ); + } catch (err) { + return err; + } } // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined); return undefined; @@ -7583,6 +7514,7 @@ const reIsPlainProp = /^\w*$/; const getTag = function (value) { + // if (!value) value === undefined ? "[object Undefined]" : "[object Null]"; return Object.prototype.toString.call(value); }; diff --git a/packages/csv/dist/umd/sync.js b/packages/csv/dist/umd/sync.js index b9c23d14..358def64 100644 --- a/packages/csv/dist/umd/sync.js +++ b/packages/csv/dist/umd/sync.js @@ -837,8 +837,8 @@ byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -1597,7 +1597,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -1607,7 +1607,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1620,7 +1620,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -1633,7 +1633,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -1648,7 +1648,7 @@ Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2006,7 +2006,9 @@ this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -2575,94 +2577,19 @@ Item.prototype.run = function () { this.fun.apply(null, this.array); }; - var title = 'browser'; - var platform = 'browser'; - var browser = true; var env = {}; - var argv = []; - var version = ''; // empty string to avoid regexp issues - var versions = {}; - var release = {}; - var config = {}; - - function noop() {} - - var on = noop; - var addListener = noop; - var once = noop; - var off = noop; - var removeListener = noop; - var removeAllListeners = noop; - var emit = noop; - - function binding(name) { - throw new Error('process.binding is not supported'); - } - - function cwd () { return '/' } - function chdir (dir) { - throw new Error('process.chdir is not supported'); - }function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; - var performanceNow = - performance.now || + performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; - // generate timestamp or delta - // see http://nodejs.org/api/process.html#process_process_hrtime - function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] - } - - var startTime = new Date(); - function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; - } - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime - }; + env: env}; var inherits; if (typeof Object.create === 'function'){ @@ -5766,7 +5693,7 @@ ); } // Normalize option `columns` - options.cast_first_line_to_header = null; + options.cast_first_line_to_header = undefined; if (options.columns === true) { // Fields in the first line are converted as-is to columns options.cast_first_line_to_header = undefined; @@ -7194,10 +7121,14 @@ if (skip_records_with_error) { this.state.recordHasError = true; if (this.options.on_skip !== undefined) { - this.options.on_skip( - err, - raw ? this.state.rawBuffer.toString(encoding) : undefined, - ); + try { + this.options.on_skip( + err, + raw ? this.state.rawBuffer.toString(encoding) : undefined, + ); + } catch (err) { + return err; + } } // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined); return undefined; @@ -7251,10 +7182,13 @@ } }; const close = () => {}; - const err1 = parser.parse(data, false, push, close); - if (err1 !== undefined) throw err1; - const err2 = parser.parse(undefined, true, push, close); - if (err2 !== undefined) throw err2; + const error = parser.parse(data, true, push, close); + if (error !== undefined) throw error; + // 250606: `parser.parse` was implemented as 2 calls: + // const err1 = parser.parse(data, false, push, close); + // if (err1 !== undefined) throw err1; + // const err2 = parser.parse(undefined, true, push, close); + // if (err2 !== undefined) throw err2; return records; }; @@ -7283,6 +7217,7 @@ const reIsPlainProp = /^\w*$/; const getTag = function (value) { + // if (!value) value === undefined ? "[object Undefined]" : "[object Null]"; return Object.prototype.toString.call(value); }; diff --git a/packages/csv/package.json b/packages/csv/package.json index b1b2650d..a1153860 100644 --- a/packages/csv/package.json +++ b/packages/csv/package.json @@ -1,6 +1,6 @@ { "name": "csv", - "version": "6.3.11", + "version": "6.4.0", "description": "A mature CSV toolset with simple api, full of options and tested against large datasets.", "keywords": [ "node", @@ -23,10 +23,10 @@ "David Worms (https://www.adaltas.com)" ], "dependencies": { - "csv-generate": "^4.4.2", - "csv-parse": "^5.6.0", - "csv-stringify": "^6.5.2", - "stream-transform": "^3.3.3" + "csv-generate": "^4.5.0", + "csv-parse": "^6.0.0", + "csv-stringify": "^6.6.0", + "stream-transform": "^3.4.0" }, "devDependencies": { "@rollup/plugin-node-resolve": "^16.0.1", diff --git a/packages/stream-transform/CHANGELOG.md b/packages/stream-transform/CHANGELOG.md index 89ca86de..7a750552 100644 --- a/packages/stream-transform/CHANGELOG.md +++ b/packages/stream-transform/CHANGELOG.md @@ -3,6 +3,41 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 3.4.0 (2025-07-10) + +### Features + +- backport support for node 14 ([dbfeb78](https://github.com/adaltas/node-csv/commit/dbfeb78f61ed36f02936d63a53345708ca213e45)) +- backward support for node 8 ([496231d](https://github.com/adaltas/node-csv/commit/496231dfd838f0a6a72269a5a2390a4c637cef95)) +- esm migration ([b5c0d4b](https://github.com/adaltas/node-csv/commit/b5c0d4b191c8b57397808c0922a3f08248506a9f)) +- export ts types in sync ([890bf8d](https://github.com/adaltas/node-csv/commit/890bf8d950c18a05cab5e35a461d0847d9425156)) +- replace ts types with typesVersions ([acb41d5](https://github.com/adaltas/node-csv/commit/acb41d5031669f2d582e40da1c80f5fd4738fee4)) +- **stream-transform:** handler promise support ([df337ec](https://github.com/adaltas/node-csv/commit/df337ec44cfd9a4536641ca7e2f0f5c1404ea74d)) +- **stream-transform:** ts extends options with stream.TransformOptions ([eb64b12](https://github.com/adaltas/node-csv/commit/eb64b12774e8371cb1043a0c4a33ed9dc73a1c50)) +- ts module Node16 and type declaration to exports field ([#341](https://github.com/adaltas/node-csv/issues/341)) ([4b0283d](https://github.com/adaltas/node-csv/commit/4b0283d17b7fa46daa1f87380759ba72c71ec79b)) +- wg stream api ([8a5eb7d](https://github.com/adaltas/node-csv/commit/8a5eb7dfd31b22217db4fbbc832d707221850785)) + +### Bug Fixes + +- commonjs types, run tsc and lint to validate changes ([#397](https://github.com/adaltas/node-csv/issues/397)) ([e6870fe](https://github.com/adaltas/node-csv/commit/e6870fe272c119e273196522c9771d12ff8b2a35)) +- correct exports in package.json with webpack ([154eafb](https://github.com/adaltas/node-csv/commit/154eafbac866eb4499a0d392f8dcd057695c2586)) +- **csv-demo-ts-cjs-node16:** upgrade module definition after latest typescript ([87fe919](https://github.com/adaltas/node-csv/commit/87fe91996fb2a8895c252177fca4f0cb59a518f9)) +- **csv-demo-webpack-ts:** remove polyfill ([47a99bd](https://github.com/adaltas/node-csv/commit/47a99bd944d1d943e6374227dbc4e20aaa2c8c7f)) +- **csv-demo-webpack-ts:** simplify export paths ([8d63a14](https://github.com/adaltas/node-csv/commit/8d63a14313bb6b26f13fafb740cc686f1dfaa65f)) +- **csv-generate:** finish called twice in node 16 ([3decdf1](https://github.com/adaltas/node-csv/commit/3decdf169ce3b8e0c5cadd257816c346c8e4d3fa)) +- dont insert polyfills in cjs [#303](https://github.com/adaltas/node-csv/issues/303) ([9baf334](https://github.com/adaltas/node-csv/commit/9baf334044dab90b4a0d096a7e456d0fd5807d5b)) +- esm exports in package.json files ([c48fe47](https://github.com/adaltas/node-csv/commit/c48fe478ced7560aa078fbc36ec33d6007111e2b)), closes [#308](https://github.com/adaltas/node-csv/issues/308) +- export original lib esm modules ([be25349](https://github.com/adaltas/node-csv/commit/be2534928ba21156e9cde1e15d2e8593d62ffe71)) +- expose browser esm modules ([eb87355](https://github.com/adaltas/node-csv/commit/eb873557c65912f065d2581d30a17a96b0bfd2d6)) +- fallback to setTimeout is setImmediate is undefined ([3d6a2d0](https://github.com/adaltas/node-csv/commit/3d6a2d0a655af342f28456b46db7ccfe7ee9d664)) +- refer to esm files in dist ([b780fbd](https://github.com/adaltas/node-csv/commit/b780fbd26f5e54494e511eb2e004d3cdedee3593)) +- remove samples from publicatgion ([12c221d](https://github.com/adaltas/node-csv/commit/12c221dc37add26f094e3bb7f94b50ee06ff5be6)) +- **stream-transform:** backpressure after push ([3e83f4e](https://github.com/adaltas/node-csv/commit/3e83f4e604b7b944835de18afcb41716ce4bbfad)) +- **stream-transform:** finish event call multiple times ([4f45103](https://github.com/adaltas/node-csv/commit/4f451038ef083b65d58ccee6fe3d041b106cc1cf)) +- **stream-transform:** sync callback usage in async handler ([4dd562b](https://github.com/adaltas/node-csv/commit/4dd562b65b99803b45858f449f67e52e2ef15726)) +- support ts node16 resolution in cjs ([#354](https://github.com/adaltas/node-csv/issues/354)) ([fa09d03](https://github.com/adaltas/node-csv/commit/fa09d03aaf0008b2790656871ca6b2c4be12d14c)) +- support TypeScript moduleResolution node16 ([#368](https://github.com/adaltas/node-csv/issues/368)) ([f4d7c97](https://github.com/adaltas/node-csv/commit/f4d7c97f39fb73e9d248eee21e61e7dc48015c78)) + ## [3.3.3](https://github.com/adaltas/node-csv/compare/stream-transform@3.3.2...stream-transform@3.3.3) (2024-11-21) **Note:** Version bump only for package stream-transform diff --git a/packages/stream-transform/dist/cjs/index.d.cts b/packages/stream-transform/dist/cjs/index.d.cts index 39662986..fb703dbd 100644 --- a/packages/stream-transform/dist/cjs/index.d.cts +++ b/packages/stream-transform/dist/cjs/index.d.cts @@ -2,39 +2,59 @@ import * as stream from "stream"; -export type Handler = (record: T, callback: HandlerCallback, params?: any) => U -export type HandlerCallback = (err?: null | Error, record?: T) => void -export type Callback = (err?: null | Error, output?: string) => void +export type Handler = ( + record: T, + callback: HandlerCallback, + params?: any, +) => U; +export type HandlerCallback = (err?: null | Error, record?: T) => void; +export type Callback = (err?: null | Error, output?: string) => void; export interface Options extends stream.TransformOptions { - /** - * In the absence of a consumer, like a `stream.Readable`, trigger the consumption of the stream. - */ - consume?: boolean - /** - * The number of transformation callbacks to run in parallel; only apply with asynchronous handlers; default to "100". - */ - parallel?: number - /** - * Pass user defined parameters to the user handler as last argument. - */ - params?: any + /** + * In the absence of a consumer, like a `stream.Readable`, trigger the consumption of the stream. + */ + consume?: boolean; + /** + * The number of transformation callbacks to run in parallel; only apply with asynchronous handlers; default to "100". + */ + parallel?: number; + /** + * Pass user defined parameters to the user handler as last argument. + */ + params?: any; } export interface State { - finished: number - running: number - started: number + finished: number; + running: number; + started: number; } export class Transformer extends stream.Transform { - constructor(options: Options) - readonly options: Options - readonly state: State + constructor(options: Options); + readonly options: Options; + readonly state: State; } -declare function transform(handler: Handler, callback?: Callback): Transformer -declare function transform(records: Array, handler: Handler, callback?: Callback): Transformer -declare function transform(options: Options, handler: Handler, callback?: Callback): Transformer -declare function transform(records: Array, options: Options, handler: Handler, callback?: Callback): Transformer +declare function transform( + handler: Handler, + callback?: Callback, +): Transformer; +declare function transform( + records: Array, + handler: Handler, + callback?: Callback, +): Transformer; +declare function transform( + options: Options, + handler: Handler, + callback?: Callback, +): Transformer; +declare function transform( + records: Array, + options: Options, + handler: Handler, + callback?: Callback, +): Transformer; export default transform; -export { transform } +export { transform }; diff --git a/packages/stream-transform/dist/cjs/sync.d.cts b/packages/stream-transform/dist/cjs/sync.d.cts index 03f42170..772b9ce2 100644 --- a/packages/stream-transform/dist/cjs/sync.d.cts +++ b/packages/stream-transform/dist/cjs/sync.d.cts @@ -1,10 +1,17 @@ /// -import { Options } from './index.cjs'; +import { Options } from "./index.cjs"; -export type Handler = (record: T) => U +export type Handler = (record: T) => U; // export default transform; -export function transform(records: Array, handler: Handler): Array -export function transform(records: Array, options: Options, handler: Handler): Array +export function transform( + records: Array, + handler: Handler, +): Array; +export function transform( + records: Array, + options: Options, + handler: Handler, +): Array; export { Options }; diff --git a/packages/stream-transform/dist/esm/index.d.ts b/packages/stream-transform/dist/esm/index.d.ts index 39662986..fb703dbd 100644 --- a/packages/stream-transform/dist/esm/index.d.ts +++ b/packages/stream-transform/dist/esm/index.d.ts @@ -2,39 +2,59 @@ import * as stream from "stream"; -export type Handler = (record: T, callback: HandlerCallback, params?: any) => U -export type HandlerCallback = (err?: null | Error, record?: T) => void -export type Callback = (err?: null | Error, output?: string) => void +export type Handler = ( + record: T, + callback: HandlerCallback, + params?: any, +) => U; +export type HandlerCallback = (err?: null | Error, record?: T) => void; +export type Callback = (err?: null | Error, output?: string) => void; export interface Options extends stream.TransformOptions { - /** - * In the absence of a consumer, like a `stream.Readable`, trigger the consumption of the stream. - */ - consume?: boolean - /** - * The number of transformation callbacks to run in parallel; only apply with asynchronous handlers; default to "100". - */ - parallel?: number - /** - * Pass user defined parameters to the user handler as last argument. - */ - params?: any + /** + * In the absence of a consumer, like a `stream.Readable`, trigger the consumption of the stream. + */ + consume?: boolean; + /** + * The number of transformation callbacks to run in parallel; only apply with asynchronous handlers; default to "100". + */ + parallel?: number; + /** + * Pass user defined parameters to the user handler as last argument. + */ + params?: any; } export interface State { - finished: number - running: number - started: number + finished: number; + running: number; + started: number; } export class Transformer extends stream.Transform { - constructor(options: Options) - readonly options: Options - readonly state: State + constructor(options: Options); + readonly options: Options; + readonly state: State; } -declare function transform(handler: Handler, callback?: Callback): Transformer -declare function transform(records: Array, handler: Handler, callback?: Callback): Transformer -declare function transform(options: Options, handler: Handler, callback?: Callback): Transformer -declare function transform(records: Array, options: Options, handler: Handler, callback?: Callback): Transformer +declare function transform( + handler: Handler, + callback?: Callback, +): Transformer; +declare function transform( + records: Array, + handler: Handler, + callback?: Callback, +): Transformer; +declare function transform( + options: Options, + handler: Handler, + callback?: Callback, +): Transformer; +declare function transform( + records: Array, + options: Options, + handler: Handler, + callback?: Callback, +): Transformer; export default transform; -export { transform } +export { transform }; diff --git a/packages/stream-transform/dist/esm/index.js b/packages/stream-transform/dist/esm/index.js index 9fa056bf..4452b7ec 100644 --- a/packages/stream-transform/dist/esm/index.js +++ b/packages/stream-transform/dist/esm/index.js @@ -28,7 +28,9 @@ EventEmitter.init = function() { this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -1297,8 +1299,8 @@ function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -2057,7 +2059,7 @@ Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, no Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -2067,7 +2069,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -2080,7 +2082,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -2093,7 +2095,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -2108,7 +2110,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2569,94 +2571,19 @@ function Item(fun, array) { Item.prototype.run = function () { this.fun.apply(null, this.array); }; -var title = 'browser'; -var platform = 'browser'; -var browser = true; var env = {}; -var argv = []; -var version = ''; // empty string to avoid regexp issues -var versions = {}; -var release = {}; -var config = {}; - -function noop() {} - -var on = noop; -var addListener = noop; -var once = noop; -var off = noop; -var removeListener = noop; -var removeAllListeners = noop; -var emit = noop; - -function binding(name) { - throw new Error('process.binding is not supported'); -} - -function cwd () { return '/' } -function chdir (dir) { - throw new Error('process.chdir is not supported'); -}function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; -var performanceNow = - performance.now || +performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; -// generate timestamp or delta -// see http://nodejs.org/api/process.html#process_process_hrtime -function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] -} - -var startTime = new Date(); -function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; -} - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime -}; + env: env}; var inherits; if (typeof Object.create === 'function'){ diff --git a/packages/stream-transform/dist/esm/sync.d.ts b/packages/stream-transform/dist/esm/sync.d.ts index 538c3e5f..1e7bd798 100644 --- a/packages/stream-transform/dist/esm/sync.d.ts +++ b/packages/stream-transform/dist/esm/sync.d.ts @@ -1,10 +1,17 @@ /// -import { Options } from './index.js'; +import { Options } from "./index.js"; -export type Handler = (record: T) => U +export type Handler = (record: T) => U; // export default transform; -export function transform(records: Array, handler: Handler): Array -export function transform(records: Array, options: Options, handler: Handler): Array +export function transform( + records: Array, + handler: Handler, +): Array; +export function transform( + records: Array, + options: Options, + handler: Handler, +): Array; export { Options }; diff --git a/packages/stream-transform/dist/esm/sync.js b/packages/stream-transform/dist/esm/sync.js index b16eb109..301803a9 100644 --- a/packages/stream-transform/dist/esm/sync.js +++ b/packages/stream-transform/dist/esm/sync.js @@ -28,7 +28,9 @@ EventEmitter.init = function() { this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -1297,8 +1299,8 @@ function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -2057,7 +2059,7 @@ Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, no Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -2067,7 +2069,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -2080,7 +2082,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -2093,7 +2095,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -2108,7 +2110,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2569,94 +2571,19 @@ function Item(fun, array) { Item.prototype.run = function () { this.fun.apply(null, this.array); }; -var title = 'browser'; -var platform = 'browser'; -var browser = true; var env = {}; -var argv = []; -var version = ''; // empty string to avoid regexp issues -var versions = {}; -var release = {}; -var config = {}; - -function noop() {} - -var on = noop; -var addListener = noop; -var once = noop; -var off = noop; -var removeListener = noop; -var removeAllListeners = noop; -var emit = noop; - -function binding(name) { - throw new Error('process.binding is not supported'); -} - -function cwd () { return '/' } -function chdir (dir) { - throw new Error('process.chdir is not supported'); -}function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; -var performanceNow = - performance.now || +performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; -// generate timestamp or delta -// see http://nodejs.org/api/process.html#process_process_hrtime -function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] -} - -var startTime = new Date(); -function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; -} - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime -}; + env: env}; var inherits; if (typeof Object.create === 'function'){ diff --git a/packages/stream-transform/dist/iife/index.js b/packages/stream-transform/dist/iife/index.js index 4f79bdd7..8c9a0490 100644 --- a/packages/stream-transform/dist/iife/index.js +++ b/packages/stream-transform/dist/iife/index.js @@ -31,7 +31,9 @@ var stream_transform = (function (exports) { this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -1300,8 +1302,8 @@ var stream_transform = (function (exports) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -2060,7 +2062,7 @@ var stream_transform = (function (exports) { Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -2070,7 +2072,7 @@ var stream_transform = (function (exports) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -2083,7 +2085,7 @@ var stream_transform = (function (exports) { Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -2096,7 +2098,7 @@ var stream_transform = (function (exports) { Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -2111,7 +2113,7 @@ var stream_transform = (function (exports) { Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2572,94 +2574,19 @@ var stream_transform = (function (exports) { Item.prototype.run = function () { this.fun.apply(null, this.array); }; - var title = 'browser'; - var platform = 'browser'; - var browser = true; var env = {}; - var argv = []; - var version = ''; // empty string to avoid regexp issues - var versions = {}; - var release = {}; - var config = {}; - - function noop() {} - - var on = noop; - var addListener = noop; - var once = noop; - var off = noop; - var removeListener = noop; - var removeAllListeners = noop; - var emit = noop; - - function binding(name) { - throw new Error('process.binding is not supported'); - } - - function cwd () { return '/' } - function chdir (dir) { - throw new Error('process.chdir is not supported'); - }function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; - var performanceNow = - performance.now || + performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; - // generate timestamp or delta - // see http://nodejs.org/api/process.html#process_process_hrtime - function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] - } - - var startTime = new Date(); - function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; - } - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime - }; + env: env}; var inherits; if (typeof Object.create === 'function'){ diff --git a/packages/stream-transform/dist/iife/sync.js b/packages/stream-transform/dist/iife/sync.js index ca4cc08c..6aebe58a 100644 --- a/packages/stream-transform/dist/iife/sync.js +++ b/packages/stream-transform/dist/iife/sync.js @@ -31,7 +31,9 @@ var stream_transform_sync = (function (exports) { this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -1300,8 +1302,8 @@ var stream_transform_sync = (function (exports) { byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -2060,7 +2062,7 @@ var stream_transform_sync = (function (exports) { Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -2070,7 +2072,7 @@ var stream_transform_sync = (function (exports) { Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -2083,7 +2085,7 @@ var stream_transform_sync = (function (exports) { Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -2096,7 +2098,7 @@ var stream_transform_sync = (function (exports) { Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -2111,7 +2113,7 @@ var stream_transform_sync = (function (exports) { Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2572,94 +2574,19 @@ var stream_transform_sync = (function (exports) { Item.prototype.run = function () { this.fun.apply(null, this.array); }; - var title = 'browser'; - var platform = 'browser'; - var browser = true; var env = {}; - var argv = []; - var version = ''; // empty string to avoid regexp issues - var versions = {}; - var release = {}; - var config = {}; - - function noop() {} - - var on = noop; - var addListener = noop; - var once = noop; - var off = noop; - var removeListener = noop; - var removeAllListeners = noop; - var emit = noop; - - function binding(name) { - throw new Error('process.binding is not supported'); - } - - function cwd () { return '/' } - function chdir (dir) { - throw new Error('process.chdir is not supported'); - }function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; - var performanceNow = - performance.now || + performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; - // generate timestamp or delta - // see http://nodejs.org/api/process.html#process_process_hrtime - function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] - } - - var startTime = new Date(); - function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; - } - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime - }; + env: env}; var inherits; if (typeof Object.create === 'function'){ diff --git a/packages/stream-transform/dist/umd/index.js b/packages/stream-transform/dist/umd/index.js index 3992db38..b6ee5684 100644 --- a/packages/stream-transform/dist/umd/index.js +++ b/packages/stream-transform/dist/umd/index.js @@ -34,7 +34,9 @@ this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -1303,8 +1305,8 @@ byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -2063,7 +2065,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -2073,7 +2075,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -2086,7 +2088,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -2099,7 +2101,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -2114,7 +2116,7 @@ Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2575,94 +2577,19 @@ Item.prototype.run = function () { this.fun.apply(null, this.array); }; - var title = 'browser'; - var platform = 'browser'; - var browser = true; var env = {}; - var argv = []; - var version = ''; // empty string to avoid regexp issues - var versions = {}; - var release = {}; - var config = {}; - - function noop() {} - - var on = noop; - var addListener = noop; - var once = noop; - var off = noop; - var removeListener = noop; - var removeAllListeners = noop; - var emit = noop; - - function binding(name) { - throw new Error('process.binding is not supported'); - } - - function cwd () { return '/' } - function chdir (dir) { - throw new Error('process.chdir is not supported'); - }function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; - var performanceNow = - performance.now || + performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; - // generate timestamp or delta - // see http://nodejs.org/api/process.html#process_process_hrtime - function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] - } - - var startTime = new Date(); - function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; - } - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime - }; + env: env}; var inherits; if (typeof Object.create === 'function'){ diff --git a/packages/stream-transform/dist/umd/sync.js b/packages/stream-transform/dist/umd/sync.js index c5e97998..33a0957d 100644 --- a/packages/stream-transform/dist/umd/sync.js +++ b/packages/stream-transform/dist/umd/sync.js @@ -34,7 +34,9 @@ this.domain = null; if (EventEmitter.usingDomains) { // if there is an active domain, then attach to it. - if (domain.active) ; + if (domain.active && !(this instanceof domain.Domain)) { + this.domain = domain.active; + } } if (!this._events || this._events === Object.getPrototypeOf(this)._events) { @@ -1303,8 +1305,8 @@ byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000; + } else if (byteOffset < -2147483648) { + byteOffset = -2147483648; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { @@ -2063,7 +2065,7 @@ Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = (value & 0xff); @@ -2073,7 +2075,7 @@ Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -2086,7 +2088,7 @@ Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 8); this[offset + 1] = (value & 0xff); @@ -2099,7 +2101,7 @@ Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value & 0xff); this[offset + 1] = (value >>> 8); @@ -2114,7 +2116,7 @@ Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value; offset = offset | 0; - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = (value >>> 24); @@ -2575,94 +2577,19 @@ Item.prototype.run = function () { this.fun.apply(null, this.array); }; - var title = 'browser'; - var platform = 'browser'; - var browser = true; var env = {}; - var argv = []; - var version = ''; // empty string to avoid regexp issues - var versions = {}; - var release = {}; - var config = {}; - - function noop() {} - - var on = noop; - var addListener = noop; - var once = noop; - var off = noop; - var removeListener = noop; - var removeAllListeners = noop; - var emit = noop; - - function binding(name) { - throw new Error('process.binding is not supported'); - } - - function cwd () { return '/' } - function chdir (dir) { - throw new Error('process.chdir is not supported'); - }function umask() { return 0; } // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js var performance = global$1.performance || {}; - var performanceNow = - performance.now || + performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function(){ return (new Date()).getTime() }; - // generate timestamp or delta - // see http://nodejs.org/api/process.html#process_process_hrtime - function hrtime(previousTimestamp){ - var clocktime = performanceNow.call(performance)*1e-3; - var seconds = Math.floor(clocktime); - var nanoseconds = Math.floor((clocktime%1)*1e9); - if (previousTimestamp) { - seconds = seconds - previousTimestamp[0]; - nanoseconds = nanoseconds - previousTimestamp[1]; - if (nanoseconds<0) { - seconds--; - nanoseconds += 1e9; - } - } - return [seconds,nanoseconds] - } - - var startTime = new Date(); - function uptime() { - var currentTime = new Date(); - var dif = currentTime - startTime; - return dif / 1000; - } - var process = { - nextTick: nextTick, - title: title, - browser: browser, - env: env, - argv: argv, - version: version, - versions: versions, - on: on, - addListener: addListener, - once: once, - off: off, - removeListener: removeListener, - removeAllListeners: removeAllListeners, - emit: emit, - binding: binding, - cwd: cwd, - chdir: chdir, - umask: umask, - hrtime: hrtime, - platform: platform, - release: release, - config: config, - uptime: uptime - }; + env: env}; var inherits; if (typeof Object.create === 'function'){ diff --git a/packages/stream-transform/package.json b/packages/stream-transform/package.json index 5b4aef52..e3a068dc 100644 --- a/packages/stream-transform/package.json +++ b/packages/stream-transform/package.json @@ -1,5 +1,5 @@ { - "version": "3.3.3", + "version": "3.4.0", "name": "stream-transform", "description": "Object transformations implementing the Node.js `stream.Transform` API", "keywords": [ @@ -15,7 +15,7 @@ "@rollup/plugin-node-resolve": "^16.0.1", "@types/mocha": "^10.0.10", "@types/node": "^22.15.30", - "csv-generate": "^4.4.2", + "csv-generate": "^4.5.0", "each": "^2.7.2", "mocha": "~11.5.0", "pad": "~3.3.0", From 4abcc445ccdd566df8a3e827b6d6a881bebb6518 Mon Sep 17 00:00:00 2001 From: David Worms Date: Wed, 16 Jul 2025 19:51:23 +0200 Subject: [PATCH 48/49] fix(csv-parse): normalized columns with auto-detected bom (fix #460) --- packages/csv-parse/lib/api/index.js | 6 +++++- packages/csv-parse/lib/api/normalize_options.js | 4 ++-- packages/csv-parse/test/option.bom.ts | 14 ++++++++++++++ packages/csv-parse/test/option.to.ts | 4 ++-- packages/csv-parse/test/option.to_line.ts | 4 ++-- 5 files changed, 25 insertions(+), 7 deletions(-) diff --git a/packages/csv-parse/lib/api/index.js b/packages/csv-parse/lib/api/index.js index 83c025f2..5dffecc8 100644 --- a/packages/csv-parse/lib/api/index.js +++ b/packages/csv-parse/lib/api/index.js @@ -115,10 +115,14 @@ const transform = function (original_options = {}) { this.state.bufBytesStart += bomLength; buf = buf.slice(bomLength); // Renormalize original options with the new encoding - this.options = normalize_options({ + const options = normalize_options({ ...this.original_options, encoding: encoding, }); + // Properties are merged with the existing options instance + for (const key in options) { + this.options[key] = options[key]; + } // Options will re-evaluate the Buffer with the new encoding ({ comment, escape, quote } = this.options); break; diff --git a/packages/csv-parse/lib/api/normalize_options.js b/packages/csv-parse/lib/api/normalize_options.js index c6f1f6db..440addfd 100644 --- a/packages/csv-parse/lib/api/normalize_options.js +++ b/packages/csv-parse/lib/api/normalize_options.js @@ -650,7 +650,7 @@ const normalize_options = function (opts) { // Normalize option `to` if (options.to === undefined || options.to === null) { options.to = -1; - } else { + } else if (options.to !== -1) { if (typeof options.to === "string" && /\d+/.test(options.to)) { options.to = parseInt(options.to); } @@ -669,7 +669,7 @@ const normalize_options = function (opts) { // Normalize option `to_line` if (options.to_line === undefined || options.to_line === null) { options.to_line = -1; - } else { + } else if (options.to_line !== -1) { if (typeof options.to_line === "string" && /\d+/.test(options.to_line)) { options.to_line = parseInt(options.to_line); } diff --git a/packages/csv-parse/test/option.bom.ts b/packages/csv-parse/test/option.bom.ts index 706a657d..c831a9e7 100644 --- a/packages/csv-parse/test/option.bom.ts +++ b/packages/csv-parse/test/option.bom.ts @@ -127,4 +127,18 @@ describe("Option `bom`", function () { parser.write(Buffer.from([239, 187])); parser.end(); }); + + it("options instance is updated and not re-created (see #460)", async function () { + // https://github.com/adaltas/node-csv/issues/460 + const parser = parse({ + columns: true, + bom: true, + from_line: 2, + }); + parser.write(Buffer.from("\ufeffa,b\n")); + parser.write(Buffer.from("1,2\n")); + parser.write(Buffer.from("3,4\n")); + parser.end(); + parser.options?.columns.should.eql([{ name: "1" }, { name: "2" }]); + }); }); diff --git a/packages/csv-parse/test/option.to.ts b/packages/csv-parse/test/option.to.ts index e5d72fad..129eefed 100644 --- a/packages/csv-parse/test/option.to.ts +++ b/packages/csv-parse/test/option.to.ts @@ -8,9 +8,9 @@ describe("Option `to`", function () { parse("", { to: "10" }, () => {}); parse("", { to: null }, () => {}); (() => { - parse("", { to: -1 }, () => {}); + parse("", { to: -2 }, () => {}); }).should.throw( - "Invalid Option: to must be a positive integer greater than 0, got -1", + "Invalid Option: to must be a positive integer greater than 0, got -2", ); (() => { parse("", { to: 0 }, () => {}); diff --git a/packages/csv-parse/test/option.to_line.ts b/packages/csv-parse/test/option.to_line.ts index 00e52977..1b128cf4 100644 --- a/packages/csv-parse/test/option.to_line.ts +++ b/packages/csv-parse/test/option.to_line.ts @@ -9,9 +9,9 @@ describe("Option `to_line`", function () { parse("", { to_line: null }, () => {}); parse("", { to_line: undefined }, () => {}); (() => { - parse("", { to_line: -1 }, () => {}); + parse("", { to_line: -2 }, () => {}); }).should.throw( - "Invalid Option: to_line must be a positive integer greater than 0, got -1", + "Invalid Option: to_line must be a positive integer greater than 0, got -2", ); (() => { parse("", { to_line: 0 }, () => {}); From c0e42c9cf0ec6b9e1f453279e36f621ce782d2eb Mon Sep 17 00:00:00 2001 From: David Worms Date: Wed, 16 Jul 2025 20:13:48 +0200 Subject: [PATCH 49/49] chore(release): publish - csv-demo-browser@0.2.1 - csv-demo-cjs@0.3.1 - csv-demo-esm@0.0.35 - csv-issues-cjs@0.3.1 - csv-issues-esm@0.5.1 - csv-demo-ts-cjs-node16@0.2.21 - csv-demo-ts-module-node16@0.2.21 - csv-demo-webpack@0.2.1 - csv-demo-webpack-ts@0.2.1 - csv@6.4.1 - csv-parse@6.1.0 --- demo/browser/CHANGELOG.md | 4 +++ demo/browser/package.json | 6 ++-- demo/cjs/CHANGELOG.md | 6 ++++ demo/cjs/package.json | 6 ++-- demo/esm/CHANGELOG.md | 6 ++++ demo/esm/package.json | 6 ++-- demo/issues-cjs/CHANGELOG.md | 4 +++ demo/issues-cjs/package.json | 4 +-- demo/issues-esm/CHANGELOG.md | 4 +++ demo/issues-esm/package.json | 4 +-- demo/ts-cjs-node16/CHANGELOG.md | 4 +++ demo/ts-cjs-node16/package.json | 4 +-- demo/ts-esm-node16/CHANGELOG.md | 4 +++ demo/ts-esm-node16/package.json | 4 +-- demo/webpack-ts/CHANGELOG.md | 4 +++ demo/webpack-ts/package.json | 4 +-- demo/webpack/CHANGELOG.md | 4 +++ demo/webpack/package.json | 6 ++-- package-lock.json | 50 +++++++++++++-------------- packages/csv-parse/CHANGELOG.md | 19 ++++++++++ packages/csv-parse/dist/cjs/index.cjs | 10 ++++-- packages/csv-parse/dist/cjs/sync.cjs | 10 ++++-- packages/csv-parse/dist/esm/index.js | 10 ++++-- packages/csv-parse/dist/esm/sync.js | 10 ++++-- packages/csv-parse/dist/iife/index.js | 10 ++++-- packages/csv-parse/dist/iife/sync.js | 10 ++++-- packages/csv-parse/dist/umd/index.js | 10 ++++-- packages/csv-parse/dist/umd/sync.js | 10 ++++-- packages/csv-parse/package.json | 2 +- packages/csv/CHANGELOG.md | 4 +++ packages/csv/dist/cjs/index.cjs | 10 ++++-- packages/csv/dist/cjs/sync.cjs | 10 ++++-- packages/csv/dist/esm/index.js | 10 ++++-- packages/csv/dist/esm/sync.js | 10 ++++-- packages/csv/dist/iife/index.js | 10 ++++-- packages/csv/dist/iife/sync.js | 10 ++++-- packages/csv/dist/umd/index.js | 10 ++++-- packages/csv/dist/umd/sync.js | 10 ++++-- packages/csv/package.json | 4 +-- 39 files changed, 225 insertions(+), 98 deletions(-) diff --git a/demo/browser/CHANGELOG.md b/demo/browser/CHANGELOG.md index c37fb24f..95fc362c 100644 --- a/demo/browser/CHANGELOG.md +++ b/demo/browser/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.1](https://github.com/adaltas/node-csv/compare/csv-demo-browser@0.1.21...csv-demo-browser@0.2.1) (2025-07-16) + +**Note:** Version bump only for package csv-demo-browser + ## 0.2.0 (2025-07-10) ### Features diff --git a/demo/browser/package.json b/demo/browser/package.json index bd34460a..b1c4e1dd 100644 --- a/demo/browser/package.json +++ b/demo/browser/package.json @@ -1,6 +1,6 @@ { "name": "csv-demo-browser", - "version": "0.2.0", + "version": "0.2.1", "main": "index.js", "license": "MIT", "type": "module", @@ -21,9 +21,9 @@ "test": "exit 0" }, "dependencies": { - "csv": "^6.4.0", + "csv": "^6.4.1", "csv-generate": "^4.5.0", - "csv-parse": "^6.0.0", + "csv-parse": "^6.1.0", "csv-stringify": "^6.6.0", "express": "^5.1.0", "stream-transform": "^3.4.0" diff --git a/demo/cjs/CHANGELOG.md b/demo/cjs/CHANGELOG.md index 1e219305..e7a0ef84 100644 --- a/demo/cjs/CHANGELOG.md +++ b/demo/cjs/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.3.1](https://github.com/adaltas/node-csv/compare/csv-demo-cjs@0.2.19...csv-demo-cjs@0.3.1) (2025-07-16) + +### Bug Fixes + +- **csv-demo-cjs:** ts type ([9bb1bf8](https://github.com/adaltas/node-csv/commit/9bb1bf8e0084cd38f788dd56851b9af4149ac49d)) + ## 0.3.0 (2025-07-10) ### Features diff --git a/demo/cjs/package.json b/demo/cjs/package.json index ffcb7550..f97bd231 100644 --- a/demo/cjs/package.json +++ b/demo/cjs/package.json @@ -1,13 +1,13 @@ { "name": "csv-demo-cjs", - "version": "0.3.0", + "version": "0.3.1", "main": "index.js", "license": "MIT", "type": "commonjs", "private": true, "dependencies": { - "csv": "^6.4.0", - "csv-parse": "^6.0.0", + "csv": "^6.4.1", + "csv-parse": "^6.1.0", "csv-stringify": "^6.6.0" }, "devDependencies": { diff --git a/demo/esm/CHANGELOG.md b/demo/esm/CHANGELOG.md index d68d971e..be1d51ea 100644 --- a/demo/esm/CHANGELOG.md +++ b/demo/esm/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.0.35](https://github.com/adaltas/node-csv/compare/csv-demo-esm@0.0.33...csv-demo-esm@0.0.35) (2025-07-16) + +### Bug Fixes + +- **csv-demo-esm:** ts type ([5ad1f2d](https://github.com/adaltas/node-csv/commit/5ad1f2db3229867d0e2f58f056752e65e4e37102)) + ## 0.0.34 (2025-07-10) ### Bug Fixes diff --git a/demo/esm/package.json b/demo/esm/package.json index 2d800a38..541801cf 100644 --- a/demo/esm/package.json +++ b/demo/esm/package.json @@ -1,13 +1,13 @@ { "name": "csv-demo-esm", - "version": "0.0.34", + "version": "0.0.35", "main": "index.js", "license": "MIT", "type": "module", "private": true, "dependencies": { - "csv": "^6.4.0", - "csv-parse": "^6.0.0" + "csv": "^6.4.1", + "csv-parse": "^6.1.0" }, "devDependencies": { "coffeescript": "^2.7.0", diff --git a/demo/issues-cjs/CHANGELOG.md b/demo/issues-cjs/CHANGELOG.md index 57a287b8..b5593e78 100644 --- a/demo/issues-cjs/CHANGELOG.md +++ b/demo/issues-cjs/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.3.1](https://github.com/adaltas/node-csv/compare/csv-issues-cjs@0.2.8...csv-issues-cjs@0.3.1) (2025-07-16) + +**Note:** Version bump only for package csv-issues-cjs + ## 0.3.0 (2025-07-10) ### Features diff --git a/demo/issues-cjs/package.json b/demo/issues-cjs/package.json index 35d54b37..b37b4f07 100644 --- a/demo/issues-cjs/package.json +++ b/demo/issues-cjs/package.json @@ -1,11 +1,11 @@ { "name": "csv-issues-cjs", - "version": "0.3.0", + "version": "0.3.1", "main": "index.js", "license": "MIT", "private": true, "dependencies": { - "csv-parse": "^6.0.0", + "csv-parse": "^6.1.0", "csv-stringify": "^6.6.0" }, "devDependencies": { diff --git a/demo/issues-esm/CHANGELOG.md b/demo/issues-esm/CHANGELOG.md index 0dc48e04..e0e3e0f0 100644 --- a/demo/issues-esm/CHANGELOG.md +++ b/demo/issues-esm/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.5.1](https://github.com/adaltas/node-csv/compare/csv-issues-esm@0.4.0...csv-issues-esm@0.5.1) (2025-07-16) + +**Note:** Version bump only for package csv-issues-esm + ## 0.5.0 (2025-07-10) ### Features diff --git a/demo/issues-esm/package.json b/demo/issues-esm/package.json index 093bf3b0..12e415a8 100644 --- a/demo/issues-esm/package.json +++ b/demo/issues-esm/package.json @@ -1,6 +1,6 @@ { "name": "csv-issues-esm", - "version": "0.5.0", + "version": "0.5.1", "main": "index.js", "license": "MIT", "type": "module", @@ -34,7 +34,7 @@ }, "dependencies": { "csv-generate": "^4.5.0", - "csv-parse": "^6.0.0", + "csv-parse": "^6.1.0", "csv-stringify": "^6.6.0", "dedent": "^1.6.0", "desm": "^1.3.1", diff --git a/demo/ts-cjs-node16/CHANGELOG.md b/demo/ts-cjs-node16/CHANGELOG.md index 61d2b954..8d541536 100644 --- a/demo/ts-cjs-node16/CHANGELOG.md +++ b/demo/ts-cjs-node16/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.21](https://github.com/adaltas/node-csv/compare/csv-demo-ts-cjs-node16@0.2.19...csv-demo-ts-cjs-node16@0.2.21) (2025-07-16) + +**Note:** Version bump only for package csv-demo-ts-cjs-node16 + ## 0.2.20 (2025-07-10) ### Bug Fixes diff --git a/demo/ts-cjs-node16/package.json b/demo/ts-cjs-node16/package.json index 35692232..47241202 100644 --- a/demo/ts-cjs-node16/package.json +++ b/demo/ts-cjs-node16/package.json @@ -1,9 +1,9 @@ { "name": "csv-demo-ts-cjs-node16", - "version": "0.2.20", + "version": "0.2.21", "dependencies": { "csv-generate": "^4.5.0", - "csv-parse": "^6.0.0", + "csv-parse": "^6.1.0", "csv-stringify": "^6.6.0", "stream-transform": "^3.4.0" }, diff --git a/demo/ts-esm-node16/CHANGELOG.md b/demo/ts-esm-node16/CHANGELOG.md index ee5ec348..78bd5a43 100644 --- a/demo/ts-esm-node16/CHANGELOG.md +++ b/demo/ts-esm-node16/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.21](https://github.com/adaltas/node-csv/compare/csv-demo-ts-module-node16@0.2.19...csv-demo-ts-module-node16@0.2.21) (2025-07-16) + +**Note:** Version bump only for package csv-demo-ts-module-node16 + ## 0.2.20 (2025-07-10) ### Bug Fixes diff --git a/demo/ts-esm-node16/package.json b/demo/ts-esm-node16/package.json index 06d093e4..bcfe5d34 100644 --- a/demo/ts-esm-node16/package.json +++ b/demo/ts-esm-node16/package.json @@ -1,13 +1,13 @@ { "name": "csv-demo-ts-module-node16", - "version": "0.2.20", + "version": "0.2.21", "main": "index.js", "license": "MIT", "type": "module", "private": true, "dependencies": { "csv-generate": "^4.5.0", - "csv-parse": "^6.0.0", + "csv-parse": "^6.1.0", "csv-stringify": "^6.6.0", "stream-transform": "^3.4.0" }, diff --git a/demo/webpack-ts/CHANGELOG.md b/demo/webpack-ts/CHANGELOG.md index dca5f9e5..4e9dec12 100644 --- a/demo/webpack-ts/CHANGELOG.md +++ b/demo/webpack-ts/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.1](https://github.com/adaltas/node-csv/compare/csv-demo-webpack-ts@0.1.21...csv-demo-webpack-ts@0.2.1) (2025-07-16) + +**Note:** Version bump only for package csv-demo-webpack-ts + ## 0.2.0 (2025-07-10) ### Features diff --git a/demo/webpack-ts/package.json b/demo/webpack-ts/package.json index 1748c49f..88c41950 100644 --- a/demo/webpack-ts/package.json +++ b/demo/webpack-ts/package.json @@ -1,6 +1,6 @@ { "name": "csv-demo-webpack-ts", - "version": "0.2.0", + "version": "0.2.1", "description": "", "private": true, "keywords": [], @@ -8,7 +8,7 @@ "license": "ISC", "dependencies": { "csv-generate": "^4.5.0", - "csv-parse": "^6.0.0", + "csv-parse": "^6.1.0", "csv-stringify": "^6.6.0", "http-server": "^14.1.1", "stream-transform": "^3.4.0" diff --git a/demo/webpack/CHANGELOG.md b/demo/webpack/CHANGELOG.md index e7b4b8e3..7fd54e0d 100644 --- a/demo/webpack/CHANGELOG.md +++ b/demo/webpack/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.1](https://github.com/adaltas/node-csv/compare/csv-demo-webpack@0.1.23...csv-demo-webpack@0.2.1) (2025-07-16) + +**Note:** Version bump only for package csv-demo-webpack + ## 0.2.0 (2025-07-10) ### Features diff --git a/demo/webpack/package.json b/demo/webpack/package.json index b8315e42..c7fc14e6 100644 --- a/demo/webpack/package.json +++ b/demo/webpack/package.json @@ -1,6 +1,6 @@ { "name": "csv-demo-webpack", - "version": "0.2.0", + "version": "0.2.1", "description": "", "private": true, "scripts": { @@ -16,9 +16,9 @@ "webpack-cli": "^6.0.1" }, "dependencies": { - "csv": "^6.4.0", + "csv": "^6.4.1", "csv-generate": "^4.5.0", - "csv-parse": "^6.0.0", + "csv-parse": "^6.1.0", "csv-stringify": "^6.6.0", "http-server": "^14.1.1", "stream-browserify": "^3.0.0", diff --git a/package-lock.json b/package-lock.json index 89d6708c..5c7426de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,12 +32,12 @@ }, "demo/browser": { "name": "csv-demo-browser", - "version": "0.2.0", + "version": "0.2.1", "license": "MIT", "dependencies": { - "csv": "^6.4.0", + "csv": "^6.4.1", "csv-generate": "^4.5.0", - "csv-parse": "^6.0.0", + "csv-parse": "^6.1.0", "csv-stringify": "^6.6.0", "express": "^5.1.0", "stream-transform": "^3.4.0" @@ -45,11 +45,11 @@ }, "demo/cjs": { "name": "csv-demo-cjs", - "version": "0.3.0", + "version": "0.3.1", "license": "MIT", "dependencies": { - "csv": "^6.4.0", - "csv-parse": "^6.0.0", + "csv": "^6.4.1", + "csv-parse": "^6.1.0", "csv-stringify": "^6.6.0" }, "devDependencies": { @@ -76,11 +76,11 @@ }, "demo/esm": { "name": "csv-demo-esm", - "version": "0.0.34", + "version": "0.0.35", "license": "MIT", "dependencies": { - "csv": "^6.4.0", - "csv-parse": "^6.0.0" + "csv": "^6.4.1", + "csv-parse": "^6.1.0" }, "devDependencies": { "coffeescript": "^2.7.0", @@ -90,10 +90,10 @@ }, "demo/issues-cjs": { "name": "csv-issues-cjs", - "version": "0.3.0", + "version": "0.3.1", "license": "MIT", "dependencies": { - "csv-parse": "^6.0.0", + "csv-parse": "^6.1.0", "csv-stringify": "^6.6.0" }, "devDependencies": { @@ -104,11 +104,11 @@ }, "demo/issues-esm": { "name": "csv-issues-esm", - "version": "0.5.0", + "version": "0.5.1", "license": "MIT", "dependencies": { "csv-generate": "^4.5.0", - "csv-parse": "^6.0.0", + "csv-parse": "^6.1.0", "csv-stringify": "^6.6.0", "dedent": "^1.6.0", "desm": "^1.3.1", @@ -135,11 +135,11 @@ }, "demo/ts-cjs-node16": { "name": "csv-demo-ts-cjs-node16", - "version": "0.2.20", + "version": "0.2.21", "license": "MIT", "dependencies": { "csv-generate": "^4.5.0", - "csv-parse": "^6.0.0", + "csv-parse": "^6.1.0", "csv-stringify": "^6.6.0", "stream-transform": "^3.4.0" }, @@ -149,11 +149,11 @@ }, "demo/ts-esm-node16": { "name": "csv-demo-ts-module-node16", - "version": "0.2.20", + "version": "0.2.21", "license": "MIT", "dependencies": { "csv-generate": "^4.5.0", - "csv-parse": "^6.0.0", + "csv-parse": "^6.1.0", "csv-stringify": "^6.6.0", "stream-transform": "^3.4.0" }, @@ -168,12 +168,12 @@ }, "demo/webpack": { "name": "csv-demo-webpack", - "version": "0.2.0", + "version": "0.2.1", "license": "ISC", "dependencies": { - "csv": "^6.4.0", + "csv": "^6.4.1", "csv-generate": "^4.5.0", - "csv-parse": "^6.0.0", + "csv-parse": "^6.1.0", "csv-stringify": "^6.6.0", "http-server": "^14.1.1", "stream-browserify": "^3.0.0", @@ -186,11 +186,11 @@ }, "demo/webpack-ts": { "name": "csv-demo-webpack-ts", - "version": "0.2.0", + "version": "0.2.1", "license": "ISC", "dependencies": { "csv-generate": "^4.5.0", - "csv-parse": "^6.0.0", + "csv-parse": "^6.1.0", "csv-stringify": "^6.6.0", "http-server": "^14.1.1", "stream-transform": "^3.4.0" @@ -19312,11 +19312,11 @@ } }, "packages/csv": { - "version": "6.4.0", + "version": "6.4.1", "license": "MIT", "dependencies": { "csv-generate": "^4.5.0", - "csv-parse": "^6.0.0", + "csv-parse": "^6.1.0", "csv-stringify": "^6.6.0", "stream-transform": "^3.4.0" }, @@ -19371,7 +19371,7 @@ } }, "packages/csv-parse": { - "version": "6.0.0", + "version": "6.1.0", "license": "MIT", "devDependencies": { "@rollup/plugin-node-resolve": "^16.0.1", diff --git a/packages/csv-parse/CHANGELOG.md b/packages/csv-parse/CHANGELOG.md index 5fc5fff4..52340018 100644 --- a/packages/csv-parse/CHANGELOG.md +++ b/packages/csv-parse/CHANGELOG.md @@ -3,6 +3,25 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.1.0](https://github.com/adaltas/node-csv/compare/csv-parse@5.6.0...csv-parse@6.1.0) (2025-07-16) + +### Features + +- **csv-parse:** add generic type argument ([#457](https://github.com/adaltas/node-csv/issues/457)) ([ef71342](https://github.com/adaltas/node-csv/commit/ef713422d75812f2d4634c0c3f1d1f46a68ad186)), closes [#278](https://github.com/adaltas/node-csv/issues/278) [#407](https://github.com/adaltas/node-csv/issues/407) +- **csv-parse:** boolean and null comment type ([b9ac1f0](https://github.com/adaltas/node-csv/commit/b9ac1f0ce8d10a157d189ff4277a668ec2680b07)) +- **csv-parse:** callback records defined type ([3d4f225](https://github.com/adaltas/node-csv/commit/3d4f22549941766ecec87c962f4bb5058b996c24)) +- **csv-parse:** casting context raw export ([a26f5d7](https://github.com/adaltas/node-csv/commit/a26f5d71c82dcdda01037965330919344eedaf47)) +- **csv-parse:** input as Uint8Array (fix [#458](https://github.com/adaltas/node-csv/issues/458)) ([24af461](https://github.com/adaltas/node-csv/commit/24af4615343bf6f167adf2226d6906cf0e2cf89d)) +- **csv-parse:** normailzsed options type ([da7a62e](https://github.com/adaltas/node-csv/commit/da7a62e3b30fdc1fbd6293cbc9289a8ff6f5f64a)) +- **csv-parse:** normalize_options export ([9056293](https://github.com/adaltas/node-csv/commit/9056293960a2e0bdc0e4bae30d819ca794407fed)) +- **csv-parse:** null comment_no_infix type ([d8bf4fd](https://github.com/adaltas/node-csv/commit/d8bf4fd1fb813553a0e312b44374877b4dace52d)) +- **csv-parse:** on_skip catch thrown error ([987a3a9](https://github.com/adaltas/node-csv/commit/987a3a9a6873c06c7e2256a2bd83415b3fe0323b)) +- **csv-parse:** use ts unknown instead of any when possible ([a47badf](https://github.com/adaltas/node-csv/commit/a47badf599211ad12c4dd1ffac800adb3da393b7)) + +### Bug Fixes + +- **csv-parse:** normalized columns with auto-detected bom (fix [#460](https://github.com/adaltas/node-csv/issues/460)) ([4abcc44](https://github.com/adaltas/node-csv/commit/4abcc445ccdd566df8a3e827b6d6a881bebb6518)) + ## 6.0.0 (2025-07-10) ### ⚠ BREAKING CHANGES diff --git a/packages/csv-parse/dist/cjs/index.cjs b/packages/csv-parse/dist/cjs/index.cjs index 9fb5144b..9060294a 100644 --- a/packages/csv-parse/dist/cjs/index.cjs +++ b/packages/csv-parse/dist/cjs/index.cjs @@ -813,7 +813,7 @@ const normalize_options = function (opts) { // Normalize option `to` if (options.to === undefined || options.to === null) { options.to = -1; - } else { + } else if (options.to !== -1) { if (typeof options.to === "string" && /\d+/.test(options.to)) { options.to = parseInt(options.to); } @@ -832,7 +832,7 @@ const normalize_options = function (opts) { // Normalize option `to_line` if (options.to_line === undefined || options.to_line === null) { options.to_line = -1; - } else { + } else if (options.to_line !== -1) { if (typeof options.to_line === "string" && /\d+/.test(options.to_line)) { options.to_line = parseInt(options.to_line); } @@ -963,10 +963,14 @@ const transform = function (original_options = {}) { this.state.bufBytesStart += bomLength; buf = buf.slice(bomLength); // Renormalize original options with the new encoding - this.options = normalize_options({ + const options = normalize_options({ ...this.original_options, encoding: encoding, }); + // Properties are merged with the existing options instance + for (const key in options) { + this.options[key] = options[key]; + } // Options will re-evaluate the Buffer with the new encoding ({ comment, escape, quote } = this.options); break; diff --git a/packages/csv-parse/dist/cjs/sync.cjs b/packages/csv-parse/dist/cjs/sync.cjs index f0c86214..7ba901d3 100644 --- a/packages/csv-parse/dist/cjs/sync.cjs +++ b/packages/csv-parse/dist/cjs/sync.cjs @@ -811,7 +811,7 @@ const normalize_options = function (opts) { // Normalize option `to` if (options.to === undefined || options.to === null) { options.to = -1; - } else { + } else if (options.to !== -1) { if (typeof options.to === "string" && /\d+/.test(options.to)) { options.to = parseInt(options.to); } @@ -830,7 +830,7 @@ const normalize_options = function (opts) { // Normalize option `to_line` if (options.to_line === undefined || options.to_line === null) { options.to_line = -1; - } else { + } else if (options.to_line !== -1) { if (typeof options.to_line === "string" && /\d+/.test(options.to_line)) { options.to_line = parseInt(options.to_line); } @@ -961,10 +961,14 @@ const transform = function (original_options = {}) { this.state.bufBytesStart += bomLength; buf = buf.slice(bomLength); // Renormalize original options with the new encoding - this.options = normalize_options({ + const options = normalize_options({ ...this.original_options, encoding: encoding, }); + // Properties are merged with the existing options instance + for (const key in options) { + this.options[key] = options[key]; + } // Options will re-evaluate the Buffer with the new encoding ({ comment, escape, quote } = this.options); break; diff --git a/packages/csv-parse/dist/esm/index.js b/packages/csv-parse/dist/esm/index.js index a16d997b..d76c43fa 100644 --- a/packages/csv-parse/dist/esm/index.js +++ b/packages/csv-parse/dist/esm/index.js @@ -5862,7 +5862,7 @@ const normalize_options = function (opts) { // Normalize option `to` if (options.to === undefined || options.to === null) { options.to = -1; - } else { + } else if (options.to !== -1) { if (typeof options.to === "string" && /\d+/.test(options.to)) { options.to = parseInt(options.to); } @@ -5881,7 +5881,7 @@ const normalize_options = function (opts) { // Normalize option `to_line` if (options.to_line === undefined || options.to_line === null) { options.to_line = -1; - } else { + } else if (options.to_line !== -1) { if (typeof options.to_line === "string" && /\d+/.test(options.to_line)) { options.to_line = parseInt(options.to_line); } @@ -6012,10 +6012,14 @@ const transform = function (original_options = {}) { this.state.bufBytesStart += bomLength; buf = buf.slice(bomLength); // Renormalize original options with the new encoding - this.options = normalize_options({ + const options = normalize_options({ ...this.original_options, encoding: encoding, }); + // Properties are merged with the existing options instance + for (const key in options) { + this.options[key] = options[key]; + } // Options will re-evaluate the Buffer with the new encoding ({ comment, escape, quote } = this.options); break; diff --git a/packages/csv-parse/dist/esm/sync.js b/packages/csv-parse/dist/esm/sync.js index f208caab..22c54d35 100644 --- a/packages/csv-parse/dist/esm/sync.js +++ b/packages/csv-parse/dist/esm/sync.js @@ -2781,7 +2781,7 @@ const normalize_options = function (opts) { // Normalize option `to` if (options.to === undefined || options.to === null) { options.to = -1; - } else { + } else if (options.to !== -1) { if (typeof options.to === "string" && /\d+/.test(options.to)) { options.to = parseInt(options.to); } @@ -2800,7 +2800,7 @@ const normalize_options = function (opts) { // Normalize option `to_line` if (options.to_line === undefined || options.to_line === null) { options.to_line = -1; - } else { + } else if (options.to_line !== -1) { if (typeof options.to_line === "string" && /\d+/.test(options.to_line)) { options.to_line = parseInt(options.to_line); } @@ -2931,10 +2931,14 @@ const transform = function (original_options = {}) { this.state.bufBytesStart += bomLength; buf = buf.slice(bomLength); // Renormalize original options with the new encoding - this.options = normalize_options({ + const options = normalize_options({ ...this.original_options, encoding: encoding, }); + // Properties are merged with the existing options instance + for (const key in options) { + this.options[key] = options[key]; + } // Options will re-evaluate the Buffer with the new encoding ({ comment, escape, quote } = this.options); break; diff --git a/packages/csv-parse/dist/iife/index.js b/packages/csv-parse/dist/iife/index.js index bdf524a1..6be17e80 100644 --- a/packages/csv-parse/dist/iife/index.js +++ b/packages/csv-parse/dist/iife/index.js @@ -5865,7 +5865,7 @@ var csv_parse = (function (exports) { // Normalize option `to` if (options.to === undefined || options.to === null) { options.to = -1; - } else { + } else if (options.to !== -1) { if (typeof options.to === "string" && /\d+/.test(options.to)) { options.to = parseInt(options.to); } @@ -5884,7 +5884,7 @@ var csv_parse = (function (exports) { // Normalize option `to_line` if (options.to_line === undefined || options.to_line === null) { options.to_line = -1; - } else { + } else if (options.to_line !== -1) { if (typeof options.to_line === "string" && /\d+/.test(options.to_line)) { options.to_line = parseInt(options.to_line); } @@ -6015,10 +6015,14 @@ var csv_parse = (function (exports) { this.state.bufBytesStart += bomLength; buf = buf.slice(bomLength); // Renormalize original options with the new encoding - this.options = normalize_options({ + const options = normalize_options({ ...this.original_options, encoding: encoding, }); + // Properties are merged with the existing options instance + for (const key in options) { + this.options[key] = options[key]; + } // Options will re-evaluate the Buffer with the new encoding ({ comment, escape, quote } = this.options); break; diff --git a/packages/csv-parse/dist/iife/sync.js b/packages/csv-parse/dist/iife/sync.js index 95a4806d..7917bdad 100644 --- a/packages/csv-parse/dist/iife/sync.js +++ b/packages/csv-parse/dist/iife/sync.js @@ -2784,7 +2784,7 @@ var csv_parse_sync = (function (exports) { // Normalize option `to` if (options.to === undefined || options.to === null) { options.to = -1; - } else { + } else if (options.to !== -1) { if (typeof options.to === "string" && /\d+/.test(options.to)) { options.to = parseInt(options.to); } @@ -2803,7 +2803,7 @@ var csv_parse_sync = (function (exports) { // Normalize option `to_line` if (options.to_line === undefined || options.to_line === null) { options.to_line = -1; - } else { + } else if (options.to_line !== -1) { if (typeof options.to_line === "string" && /\d+/.test(options.to_line)) { options.to_line = parseInt(options.to_line); } @@ -2934,10 +2934,14 @@ var csv_parse_sync = (function (exports) { this.state.bufBytesStart += bomLength; buf = buf.slice(bomLength); // Renormalize original options with the new encoding - this.options = normalize_options({ + const options = normalize_options({ ...this.original_options, encoding: encoding, }); + // Properties are merged with the existing options instance + for (const key in options) { + this.options[key] = options[key]; + } // Options will re-evaluate the Buffer with the new encoding ({ comment, escape, quote } = this.options); break; diff --git a/packages/csv-parse/dist/umd/index.js b/packages/csv-parse/dist/umd/index.js index 786854c8..8f506acf 100644 --- a/packages/csv-parse/dist/umd/index.js +++ b/packages/csv-parse/dist/umd/index.js @@ -5868,7 +5868,7 @@ // Normalize option `to` if (options.to === undefined || options.to === null) { options.to = -1; - } else { + } else if (options.to !== -1) { if (typeof options.to === "string" && /\d+/.test(options.to)) { options.to = parseInt(options.to); } @@ -5887,7 +5887,7 @@ // Normalize option `to_line` if (options.to_line === undefined || options.to_line === null) { options.to_line = -1; - } else { + } else if (options.to_line !== -1) { if (typeof options.to_line === "string" && /\d+/.test(options.to_line)) { options.to_line = parseInt(options.to_line); } @@ -6018,10 +6018,14 @@ this.state.bufBytesStart += bomLength; buf = buf.slice(bomLength); // Renormalize original options with the new encoding - this.options = normalize_options({ + const options = normalize_options({ ...this.original_options, encoding: encoding, }); + // Properties are merged with the existing options instance + for (const key in options) { + this.options[key] = options[key]; + } // Options will re-evaluate the Buffer with the new encoding ({ comment, escape, quote } = this.options); break; diff --git a/packages/csv-parse/dist/umd/sync.js b/packages/csv-parse/dist/umd/sync.js index ab393dc7..755bbd0d 100644 --- a/packages/csv-parse/dist/umd/sync.js +++ b/packages/csv-parse/dist/umd/sync.js @@ -2787,7 +2787,7 @@ // Normalize option `to` if (options.to === undefined || options.to === null) { options.to = -1; - } else { + } else if (options.to !== -1) { if (typeof options.to === "string" && /\d+/.test(options.to)) { options.to = parseInt(options.to); } @@ -2806,7 +2806,7 @@ // Normalize option `to_line` if (options.to_line === undefined || options.to_line === null) { options.to_line = -1; - } else { + } else if (options.to_line !== -1) { if (typeof options.to_line === "string" && /\d+/.test(options.to_line)) { options.to_line = parseInt(options.to_line); } @@ -2937,10 +2937,14 @@ this.state.bufBytesStart += bomLength; buf = buf.slice(bomLength); // Renormalize original options with the new encoding - this.options = normalize_options({ + const options = normalize_options({ ...this.original_options, encoding: encoding, }); + // Properties are merged with the existing options instance + for (const key in options) { + this.options[key] = options[key]; + } // Options will re-evaluate the Buffer with the new encoding ({ comment, escape, quote } = this.options); break; diff --git a/packages/csv-parse/package.json b/packages/csv-parse/package.json index 10206c09..cdc1846c 100644 --- a/packages/csv-parse/package.json +++ b/packages/csv-parse/package.json @@ -1,5 +1,5 @@ { - "version": "6.0.0", + "version": "6.1.0", "name": "csv-parse", "description": "CSV parsing implementing the Node.js `stream.Transform` API", "keywords": [ diff --git a/packages/csv/CHANGELOG.md b/packages/csv/CHANGELOG.md index fe90313f..fd910b4b 100644 --- a/packages/csv/CHANGELOG.md +++ b/packages/csv/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.4.1](https://github.com/adaltas/node-csv/compare/csv@6.3.11...csv@6.4.1) (2025-07-16) + +**Note:** Version bump only for package csv + ## 6.4.0 (2025-07-10) ### Features diff --git a/packages/csv/dist/cjs/index.cjs b/packages/csv/dist/cjs/index.cjs index a0762c66..d4aa04a4 100644 --- a/packages/csv/dist/cjs/index.cjs +++ b/packages/csv/dist/cjs/index.cjs @@ -1111,7 +1111,7 @@ const normalize_options$1 = function (opts) { // Normalize option `to` if (options.to === undefined || options.to === null) { options.to = -1; - } else { + } else if (options.to !== -1) { if (typeof options.to === "string" && /\d+/.test(options.to)) { options.to = parseInt(options.to); } @@ -1130,7 +1130,7 @@ const normalize_options$1 = function (opts) { // Normalize option `to_line` if (options.to_line === undefined || options.to_line === null) { options.to_line = -1; - } else { + } else if (options.to_line !== -1) { if (typeof options.to_line === "string" && /\d+/.test(options.to_line)) { options.to_line = parseInt(options.to_line); } @@ -1261,10 +1261,14 @@ const transform$1 = function (original_options = {}) { this.state.bufBytesStart += bomLength; buf = buf.slice(bomLength); // Renormalize original options with the new encoding - this.options = normalize_options$1({ + const options = normalize_options$1({ ...this.original_options, encoding: encoding, }); + // Properties are merged with the existing options instance + for (const key in options) { + this.options[key] = options[key]; + } // Options will re-evaluate the Buffer with the new encoding ({ comment, escape, quote } = this.options); break; diff --git a/packages/csv/dist/cjs/sync.cjs b/packages/csv/dist/cjs/sync.cjs index d2238612..b762dc8e 100644 --- a/packages/csv/dist/cjs/sync.cjs +++ b/packages/csv/dist/cjs/sync.cjs @@ -1109,7 +1109,7 @@ const normalize_options$1 = function (opts) { // Normalize option `to` if (options.to === undefined || options.to === null) { options.to = -1; - } else { + } else if (options.to !== -1) { if (typeof options.to === "string" && /\d+/.test(options.to)) { options.to = parseInt(options.to); } @@ -1128,7 +1128,7 @@ const normalize_options$1 = function (opts) { // Normalize option `to_line` if (options.to_line === undefined || options.to_line === null) { options.to_line = -1; - } else { + } else if (options.to_line !== -1) { if (typeof options.to_line === "string" && /\d+/.test(options.to_line)) { options.to_line = parseInt(options.to_line); } @@ -1259,10 +1259,14 @@ const transform$1 = function (original_options = {}) { this.state.bufBytesStart += bomLength; buf = buf.slice(bomLength); // Renormalize original options with the new encoding - this.options = normalize_options$1({ + const options = normalize_options$1({ ...this.original_options, encoding: encoding, }); + // Properties are merged with the existing options instance + for (const key in options) { + this.options[key] = options[key]; + } // Options will re-evaluate the Buffer with the new encoding ({ comment, escape, quote } = this.options); break; diff --git a/packages/csv/dist/esm/index.js b/packages/csv/dist/esm/index.js index 9a139eb4..3c7b1f8a 100644 --- a/packages/csv/dist/esm/index.js +++ b/packages/csv/dist/esm/index.js @@ -6221,7 +6221,7 @@ const normalize_options$1 = function (opts) { // Normalize option `to` if (options.to === undefined || options.to === null) { options.to = -1; - } else { + } else if (options.to !== -1) { if (typeof options.to === "string" && /\d+/.test(options.to)) { options.to = parseInt(options.to); } @@ -6240,7 +6240,7 @@ const normalize_options$1 = function (opts) { // Normalize option `to_line` if (options.to_line === undefined || options.to_line === null) { options.to_line = -1; - } else { + } else if (options.to_line !== -1) { if (typeof options.to_line === "string" && /\d+/.test(options.to_line)) { options.to_line = parseInt(options.to_line); } @@ -6371,10 +6371,14 @@ const transform$1 = function (original_options = {}) { this.state.bufBytesStart += bomLength; buf = buf.slice(bomLength); // Renormalize original options with the new encoding - this.options = normalize_options$1({ + const options = normalize_options$1({ ...this.original_options, encoding: encoding, }); + // Properties are merged with the existing options instance + for (const key in options) { + this.options[key] = options[key]; + } // Options will re-evaluate the Buffer with the new encoding ({ comment, escape, quote } = this.options); break; diff --git a/packages/csv/dist/esm/sync.js b/packages/csv/dist/esm/sync.js index 0f96c0c4..d49b9aca 100644 --- a/packages/csv/dist/esm/sync.js +++ b/packages/csv/dist/esm/sync.js @@ -6219,7 +6219,7 @@ const normalize_options$1 = function (opts) { // Normalize option `to` if (options.to === undefined || options.to === null) { options.to = -1; - } else { + } else if (options.to !== -1) { if (typeof options.to === "string" && /\d+/.test(options.to)) { options.to = parseInt(options.to); } @@ -6238,7 +6238,7 @@ const normalize_options$1 = function (opts) { // Normalize option `to_line` if (options.to_line === undefined || options.to_line === null) { options.to_line = -1; - } else { + } else if (options.to_line !== -1) { if (typeof options.to_line === "string" && /\d+/.test(options.to_line)) { options.to_line = parseInt(options.to_line); } @@ -6369,10 +6369,14 @@ const transform$1 = function (original_options = {}) { this.state.bufBytesStart += bomLength; buf = buf.slice(bomLength); // Renormalize original options with the new encoding - this.options = normalize_options$1({ + const options = normalize_options$1({ ...this.original_options, encoding: encoding, }); + // Properties are merged with the existing options instance + for (const key in options) { + this.options[key] = options[key]; + } // Options will re-evaluate the Buffer with the new encoding ({ comment, escape, quote } = this.options); break; diff --git a/packages/csv/dist/iife/index.js b/packages/csv/dist/iife/index.js index e74b906c..c06182ad 100644 --- a/packages/csv/dist/iife/index.js +++ b/packages/csv/dist/iife/index.js @@ -6224,7 +6224,7 @@ var csv = (function (exports) { // Normalize option `to` if (options.to === undefined || options.to === null) { options.to = -1; - } else { + } else if (options.to !== -1) { if (typeof options.to === "string" && /\d+/.test(options.to)) { options.to = parseInt(options.to); } @@ -6243,7 +6243,7 @@ var csv = (function (exports) { // Normalize option `to_line` if (options.to_line === undefined || options.to_line === null) { options.to_line = -1; - } else { + } else if (options.to_line !== -1) { if (typeof options.to_line === "string" && /\d+/.test(options.to_line)) { options.to_line = parseInt(options.to_line); } @@ -6374,10 +6374,14 @@ var csv = (function (exports) { this.state.bufBytesStart += bomLength; buf = buf.slice(bomLength); // Renormalize original options with the new encoding - this.options = normalize_options$1({ + const options = normalize_options$1({ ...this.original_options, encoding: encoding, }); + // Properties are merged with the existing options instance + for (const key in options) { + this.options[key] = options[key]; + } // Options will re-evaluate the Buffer with the new encoding ({ comment, escape, quote } = this.options); break; diff --git a/packages/csv/dist/iife/sync.js b/packages/csv/dist/iife/sync.js index 71e08fbb..b856d5f2 100644 --- a/packages/csv/dist/iife/sync.js +++ b/packages/csv/dist/iife/sync.js @@ -6222,7 +6222,7 @@ var csv_sync = (function (exports) { // Normalize option `to` if (options.to === undefined || options.to === null) { options.to = -1; - } else { + } else if (options.to !== -1) { if (typeof options.to === "string" && /\d+/.test(options.to)) { options.to = parseInt(options.to); } @@ -6241,7 +6241,7 @@ var csv_sync = (function (exports) { // Normalize option `to_line` if (options.to_line === undefined || options.to_line === null) { options.to_line = -1; - } else { + } else if (options.to_line !== -1) { if (typeof options.to_line === "string" && /\d+/.test(options.to_line)) { options.to_line = parseInt(options.to_line); } @@ -6372,10 +6372,14 @@ var csv_sync = (function (exports) { this.state.bufBytesStart += bomLength; buf = buf.slice(bomLength); // Renormalize original options with the new encoding - this.options = normalize_options$1({ + const options = normalize_options$1({ ...this.original_options, encoding: encoding, }); + // Properties are merged with the existing options instance + for (const key in options) { + this.options[key] = options[key]; + } // Options will re-evaluate the Buffer with the new encoding ({ comment, escape, quote } = this.options); break; diff --git a/packages/csv/dist/umd/index.js b/packages/csv/dist/umd/index.js index 75355624..a9cc1bd7 100644 --- a/packages/csv/dist/umd/index.js +++ b/packages/csv/dist/umd/index.js @@ -6227,7 +6227,7 @@ // Normalize option `to` if (options.to === undefined || options.to === null) { options.to = -1; - } else { + } else if (options.to !== -1) { if (typeof options.to === "string" && /\d+/.test(options.to)) { options.to = parseInt(options.to); } @@ -6246,7 +6246,7 @@ // Normalize option `to_line` if (options.to_line === undefined || options.to_line === null) { options.to_line = -1; - } else { + } else if (options.to_line !== -1) { if (typeof options.to_line === "string" && /\d+/.test(options.to_line)) { options.to_line = parseInt(options.to_line); } @@ -6377,10 +6377,14 @@ this.state.bufBytesStart += bomLength; buf = buf.slice(bomLength); // Renormalize original options with the new encoding - this.options = normalize_options$1({ + const options = normalize_options$1({ ...this.original_options, encoding: encoding, }); + // Properties are merged with the existing options instance + for (const key in options) { + this.options[key] = options[key]; + } // Options will re-evaluate the Buffer with the new encoding ({ comment, escape, quote } = this.options); break; diff --git a/packages/csv/dist/umd/sync.js b/packages/csv/dist/umd/sync.js index 358def64..391b52b1 100644 --- a/packages/csv/dist/umd/sync.js +++ b/packages/csv/dist/umd/sync.js @@ -6225,7 +6225,7 @@ // Normalize option `to` if (options.to === undefined || options.to === null) { options.to = -1; - } else { + } else if (options.to !== -1) { if (typeof options.to === "string" && /\d+/.test(options.to)) { options.to = parseInt(options.to); } @@ -6244,7 +6244,7 @@ // Normalize option `to_line` if (options.to_line === undefined || options.to_line === null) { options.to_line = -1; - } else { + } else if (options.to_line !== -1) { if (typeof options.to_line === "string" && /\d+/.test(options.to_line)) { options.to_line = parseInt(options.to_line); } @@ -6375,10 +6375,14 @@ this.state.bufBytesStart += bomLength; buf = buf.slice(bomLength); // Renormalize original options with the new encoding - this.options = normalize_options$1({ + const options = normalize_options$1({ ...this.original_options, encoding: encoding, }); + // Properties are merged with the existing options instance + for (const key in options) { + this.options[key] = options[key]; + } // Options will re-evaluate the Buffer with the new encoding ({ comment, escape, quote } = this.options); break; diff --git a/packages/csv/package.json b/packages/csv/package.json index a1153860..471d4ed3 100644 --- a/packages/csv/package.json +++ b/packages/csv/package.json @@ -1,6 +1,6 @@ { "name": "csv", - "version": "6.4.0", + "version": "6.4.1", "description": "A mature CSV toolset with simple api, full of options and tested against large datasets.", "keywords": [ "node", @@ -24,7 +24,7 @@ ], "dependencies": { "csv-generate": "^4.5.0", - "csv-parse": "^6.0.0", + "csv-parse": "^6.1.0", "csv-stringify": "^6.6.0", "stream-transform": "^3.4.0" },