From 5273cddfbe1fedcde966403805bdb462bdbfb4b6 Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Tue, 12 Nov 2024 18:00:14 +0100 Subject: [PATCH 01/23] refactor: Changed stringify and parse params refactor: Changed customParse params --- lib/parse.d.ts | 4 +-- lib/parse.js | 33 +++++++++++------------ lib/stringify.d.ts | 7 ++--- lib/stringify.js | 8 +++--- lib/types.d.ts | 14 ++++++++-- src/__tests__/typed-stringify.test.ts | 22 +++++++-------- src/parse.ts | 39 +++++++++++++-------------- src/stringify.ts | 17 ++++-------- src/types.ts | 20 ++++++++++++-- 9 files changed, 87 insertions(+), 77 deletions(-) diff --git a/lib/parse.d.ts b/lib/parse.d.ts index dfe2267..3d2c3b7 100644 --- a/lib/parse.d.ts +++ b/lib/parse.d.ts @@ -1,3 +1,3 @@ -import { CustomParse, TypedValue } from './types'; +import { ParseOptions, TypedValue } from './types'; export declare const isTypedValue: (obj: unknown) => obj is TypedValue; -export declare const parse: (s: string, customParse?: CustomParse | undefined) => unknown; +export declare const parse: (s: string, options?: ParseOptions) => unknown; diff --git a/lib/parse.js b/lib/parse.js index a01db94..95f2254 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -1,13 +1,11 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parse = exports.isTypedValue = void 0; +const hasOwnProperty = (object, property) => Object.prototype.hasOwnProperty.call(object, property); const isTypedValue = (obj) => { - const tmpObj = obj; - if (tmpObj && typeof tmpObj === 'object') { - const keys = Object.keys(tmpObj); - return (keys.includes('t') && - typeof tmpObj.t === 'string' && - (keys.length === 1 || (keys.length === 2 && keys.includes('v') && typeof tmpObj.v === 'string'))); + if (typeof obj === 'object' && hasOwnProperty(obj, 't') && typeof obj.t === 'string') { + const keys = Object.keys(obj); + return keys.length === 1 || (keys.length === 2 && hasOwnProperty(obj, 'v') && typeof obj.v === 'string'); } return false; }; @@ -41,29 +39,30 @@ const convertType = ({ t, v }) => { throw new Error(`Unknown type: ${t}`); } }; -const decent = (obj, customParse) => { - if (customParse) { - const { useResult, result } = customParse(obj); - if (useResult) { - return result; - } - } +const decent = (obj, options) => { if (Array.isArray(obj)) { - return obj.map((obj) => decent(obj, customParse)); + return obj.map((obj) => decent(obj, options)); } else if (obj && typeof obj === 'object') { if ((0, exports.isTypedValue)(obj)) { + const { customParse } = options; + if (customParse) { + const { useResult, result } = customParse(obj); + if (useResult) { + return result; + } + } return convertType(obj); } const tmpObj = {}; for (const [key, value] of Object.entries(obj)) { - tmpObj[key] = decent(value, customParse); + tmpObj[key] = decent(value, options); } return tmpObj; } throw new Error('Invalid structure'); }; -const parse = (s, customParse) => { - return decent(JSON.parse(s), customParse); +const parse = (s, options = {}) => { + return decent(JSON.parse(s), options); }; exports.parse = parse; diff --git a/lib/stringify.d.ts b/lib/stringify.d.ts index 73f866d..05764e2 100644 --- a/lib/stringify.d.ts +++ b/lib/stringify.d.ts @@ -1,5 +1,2 @@ -import { CustomStringify, StringifyType } from './types'; -export declare const stringify: (obj: T, options?: { - customStringify?: CustomStringify | undefined; - ignoreDataLoss?: boolean | undefined; -} | undefined) => string; +import { StringifyOptions, StringifyType } from './types'; +export declare const stringify: (obj: unknown, options?: StringifyOptions) => string; diff --git a/lib/stringify.js b/lib/stringify.js index 8310ee7..4796cd5 100644 --- a/lib/stringify.js +++ b/lib/stringify.js @@ -30,10 +30,10 @@ const convertType = (obj, ignoreDataLoss) => { } throw new Error(`Unknown datatype: ${typeof obj}`); }; -const decent = (obj, options = {}) => { +const decent = (obj, options) => { const { customStringify, ignoreDataLoss = false } = options; if (customStringify) { - const tmpObj = customStringify(obj); + const tmpObj = customStringify(obj, { ignoreDataLoss }); if (tmpObj) { return tmpObj; } @@ -50,7 +50,5 @@ const decent = (obj, options = {}) => { } return convertType(obj, ignoreDataLoss); }; -const stringify = (obj, options) => { - return JSON.stringify(decent(obj, options)); -}; +const stringify = (obj, options = {}) => JSON.stringify(decent(obj, options)); exports.stringify = stringify; diff --git a/lib/types.d.ts b/lib/types.d.ts index ba1895e..75496a8 100644 --- a/lib/types.d.ts +++ b/lib/types.d.ts @@ -3,8 +3,18 @@ export interface TypedValue { t: T; v?: string; } -export declare type CustomStringify = (obj: unknown) => TypedValue | undefined; -export declare type CustomParse = (obj: unknown) => { +export interface CustomStringifyOptions { + ignoreDataLoss?: boolean; +} +export declare type CustomStringify = (obj: unknown, options: CustomStringifyOptions) => TypedValue | undefined; +export interface StringifyOptions { + customStringify?: CustomStringify; + ignoreDataLoss?: boolean; +} +export declare type CustomParse = (obj: TypedValue) => { useResult: boolean; result?: unknown; }; +export interface ParseOptions { + customParse?: CustomParse; +} diff --git a/src/__tests__/typed-stringify.test.ts b/src/__tests__/typed-stringify.test.ts index 1976864..0733394 100644 --- a/src/__tests__/typed-stringify.test.ts +++ b/src/__tests__/typed-stringify.test.ts @@ -1,6 +1,6 @@ import BigNumber from 'bignumber.js'; import { isEqual } from 'lodash'; -import { CustomParse, CustomStringify, isTypedValue, parse, stringify, StringifyType, TypedValue } from '../index'; +import { CustomParse, CustomStringify, parse, stringify, StringifyType, TypedValue } from '../index'; type TestType = StringifyType | 'BigNumber'; @@ -11,15 +11,13 @@ const customStringify: CustomStringify = (obj) => { return undefined; }; -const customParse: CustomParse = (obj) => { - if (isTypedValue(obj)) { - const { t, v } = obj as TypedValue; - if (t === 'BigNumber') { - if (v === undefined) { - throw new Error('No value'); - } - return { useResult: true, result: new BigNumber(v) }; +const customParse: CustomParse = (typedValue: TypedValue) => { + const { t, v } = typedValue; + if (t === 'BigNumber') { + if (v === undefined) { + throw new Error('No value'); } + return { useResult: true, result: new BigNumber(v) }; } return { useResult: false }; }; @@ -96,17 +94,17 @@ test('Date', () => { }); test('Big object', () => { - expect(isEqual(bigTestObject, parse(stringify(bigTestObject, { customStringify }), customParse))).toBe(true); + expect(isEqual(bigTestObject, parse(stringify(bigTestObject, { customStringify }), { customParse }))).toBe(true); }); test('Big array', () => { const obj = (Object.keys(bigTestObject) as Array).map((key) => bigTestObject[key]); - expect(isEqual(obj, parse(stringify(obj, { customStringify }), customParse))).toBe(true); + expect(isEqual(obj, parse(stringify(obj, { customStringify }), { customParse }))).toBe(true); }); test('BigNumber', () => { const obj = new BigNumber(34345.4243234); - expect(isEqual(obj, parse(stringify(obj, { customStringify }), customParse))).toBe(true); + expect(isEqual(obj, parse(stringify(obj, { customStringify }), { customParse }))).toBe(true); }); test('Symbol()', () => { diff --git a/src/parse.ts b/src/parse.ts index 6f858fa..a1c532c 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -1,14 +1,12 @@ -import { CustomParse, TypedValue } from './types'; +import { ParseOptions, TypedValue } from './types'; + +const hasOwnProperty = (object: X, property: Y): object is X & Record => + Object.prototype.hasOwnProperty.call(object, property); export const isTypedValue = (obj: unknown): obj is TypedValue => { - const tmpObj = obj as TypedValue; - if (tmpObj && typeof tmpObj === 'object') { - const keys = Object.keys(tmpObj); - return ( - keys.includes('t') && - typeof tmpObj.t === 'string' && - (keys.length === 1 || (keys.length === 2 && keys.includes('v') && typeof tmpObj.v === 'string')) - ); + if (typeof obj === 'object' && hasOwnProperty(obj, 't') && typeof obj.t === 'string') { + const keys = Object.keys(obj); + return keys.length === 1 || (keys.length === 2 && hasOwnProperty(obj, 'v') && typeof obj.v === 'string'); } return false; }; @@ -43,28 +41,29 @@ const convertType = ({ t, v }: TypedValue): bigint | boolean | Date | null | num } }; -const decent = (obj: unknown, customParse?: CustomParse): unknown => { - if (customParse) { - const { useResult, result } = customParse(obj); - if (useResult) { - return result; - } - } +const decent = (obj: unknown, options: ParseOptions): unknown => { if (Array.isArray(obj)) { - return obj.map((obj) => decent(obj, customParse)); + return obj.map((obj) => decent(obj, options)); } else if (obj && typeof obj === 'object') { if (isTypedValue(obj)) { + const { customParse } = options; + if (customParse) { + const { useResult, result } = customParse(obj); + if (useResult) { + return result; + } + } return convertType(obj); } const tmpObj: { [key: string]: unknown } = {}; for (const [key, value] of Object.entries(obj)) { - tmpObj[key] = decent(value, customParse); + tmpObj[key] = decent(value, options); } return tmpObj; } throw new Error('Invalid structure'); }; -export const parse = (s: string, customParse?: CustomParse): unknown => { - return decent(JSON.parse(s), customParse); +export const parse = (s: string, options: ParseOptions = {}): unknown => { + return decent(JSON.parse(s), options); }; diff --git a/src/stringify.ts b/src/stringify.ts index 3ff3c9a..ad38351 100644 --- a/src/stringify.ts +++ b/src/stringify.ts @@ -1,4 +1,4 @@ -import { CustomStringify, StringifyType, TypedValue } from './types'; +import { StringifyOptions, StringifyType, TypedValue } from './types'; const convertType = (obj: unknown, ignoreDataLoss: boolean): TypedValue => { if (obj === null) { @@ -30,13 +30,10 @@ const convertType = (obj: unknown, ignoreDataLoss: boolean): TypedValue => { throw new Error(`Unknown datatype: ${typeof obj}`); }; -const decent = ( - obj: unknown, - options: { customStringify?: CustomStringify; ignoreDataLoss?: boolean } = {} -): unknown => { +const decent = (obj: unknown, options: StringifyOptions): unknown => { const { customStringify, ignoreDataLoss = false } = options; if (customStringify) { - const tmpObj = customStringify(obj); + const tmpObj = customStringify(obj, { ignoreDataLoss }); if (tmpObj) { return tmpObj; } @@ -53,9 +50,5 @@ const decent = ( return convertType(obj, ignoreDataLoss); }; -export const stringify = ( - obj: T, - options?: { customStringify?: CustomStringify; ignoreDataLoss?: boolean } -): string => { - return JSON.stringify(decent(obj, options)); -}; +export const stringify = (obj: unknown, options: StringifyOptions = {}): string => + JSON.stringify(decent(obj, options)); diff --git a/src/types.ts b/src/types.ts index 00f2148..1b3c207 100644 --- a/src/types.ts +++ b/src/types.ts @@ -14,6 +14,22 @@ export interface TypedValue { v?: string; } -export type CustomStringify = (obj: unknown) => TypedValue | undefined; +export interface CustomStringifyOptions { + ignoreDataLoss?: boolean; +} + +export type CustomStringify = ( + obj: unknown, + options: CustomStringifyOptions +) => TypedValue | undefined; + +export interface StringifyOptions { + customStringify?: CustomStringify; + ignoreDataLoss?: boolean; +} + +export type CustomParse = (obj: TypedValue) => { useResult: boolean; result?: unknown }; -export type CustomParse = (obj: unknown) => { useResult: boolean; result?: unknown }; +export interface ParseOptions { + customParse?: CustomParse; +} From 4fcfbb4fbc26d61c71a2f8291c623de8672054e6 Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Tue, 12 Nov 2024 18:50:25 +0100 Subject: [PATCH 02/23] feat: Updated devDependencies feat: Added more eslint rules feat: Added ESM support feat: Added source map --- .eslintignore | 1 - .eslintrc.js | 11 - .prettierignore | 5 +- .prettierrc.json | 6 - .vscode/settings.json | 7 + README.md | 2 +- {lib => dist/cjs}/index.js | 1 + dist/cjs/index.js.map | 1 + {lib => dist/cjs}/parse.js | 33 +- dist/cjs/parse.js.map | 1 + {lib => dist/cjs}/stringify.js | 19 +- dist/cjs/stringify.js.map | 1 + dist/cjs/tsconfig.cjs.tsbuildinfo | 1 + {lib => dist/cjs}/types.js | 1 + dist/cjs/types.js.map | 1 + dist/esm/index.js | 4 + dist/esm/index.js.map | 1 + dist/esm/parse.js | 74 + dist/esm/parse.js.map | 1 + dist/esm/stringify.js | 57 + dist/esm/stringify.js.map | 1 + dist/esm/tsconfig.esm.tsbuildinfo | 1 + dist/esm/types.js | 2 + dist/esm/types.js.map | 1 + {lib => dist/types}/index.d.ts | 0 {lib => dist/types}/parse.d.ts | 2 +- {lib => dist/types}/stringify.d.ts | 0 dist/types/tsconfig.types.tsbuildinfo | 1 + {lib => dist/types}/types.d.ts | 6 +- eslint.config.mjs | 29 + package-lock.json | 8518 +++++------------ package.json | 49 +- prettier.config.mjs | 17 + ...ringify.test.ts => typedStringify.test.ts} | 16 +- src/examples/bigNumber.js.ts | 2 +- src/parse.ts | 32 +- src/stringify.ts | 18 +- src/types.ts | 2 +- tsconfig.base.json | 11 + tsconfig.cjs.json | 7 + tsconfig.esm.json | 8 + tsconfig.json | 10 +- tsconfig.types.json | 8 + 43 files changed, 2680 insertions(+), 6289 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.js delete mode 100644 .prettierrc.json create mode 100644 .vscode/settings.json rename {lib => dist/cjs}/index.js (96%) create mode 100644 dist/cjs/index.js.map rename {lib => dist/cjs}/parse.js (80%) create mode 100644 dist/cjs/parse.js.map rename {lib => dist/cjs}/stringify.js (86%) create mode 100644 dist/cjs/stringify.js.map create mode 100644 dist/cjs/tsconfig.cjs.tsbuildinfo rename {lib => dist/cjs}/types.js (70%) create mode 100644 dist/cjs/types.js.map create mode 100644 dist/esm/index.js create mode 100644 dist/esm/index.js.map create mode 100644 dist/esm/parse.js create mode 100644 dist/esm/parse.js.map create mode 100644 dist/esm/stringify.js create mode 100644 dist/esm/stringify.js.map create mode 100644 dist/esm/tsconfig.esm.tsbuildinfo create mode 100644 dist/esm/types.js create mode 100644 dist/esm/types.js.map rename {lib => dist/types}/index.d.ts (100%) rename {lib => dist/types}/parse.d.ts (82%) rename {lib => dist/types}/stringify.d.ts (100%) create mode 100644 dist/types/tsconfig.types.tsbuildinfo rename {lib => dist/types}/types.d.ts (55%) create mode 100644 eslint.config.mjs create mode 100644 prettier.config.mjs rename src/__tests__/{typed-stringify.test.ts => typedStringify.test.ts} (88%) create mode 100644 tsconfig.base.json create mode 100644 tsconfig.cjs.json create mode 100644 tsconfig.esm.json create mode 100644 tsconfig.types.json diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index c2658d7..0000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 22500c1..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - root: true, - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint'], - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/eslint-recommended', - 'plugin:@typescript-eslint/recommended', - 'prettier', - ], -}; diff --git a/.prettierignore b/.prettierignore index 85dcc16..8814504 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1,3 @@ -.git -node_modules +.git/ +dist/ +node_modules/ diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index a78b764..0000000 --- a/.prettierrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "useTabs": true, - "singleQuote": true, - "semi": true, - "printWidth": 120 -} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..d1e935e --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.codeActionsOnSave": { + "source.sortImports": "explicit" + }, + "editor.formatOnSave": true +} diff --git a/README.md b/README.md index 9434a2c..79ff09e 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ console.log(obj); const s = stringify(obj, { customStringify }); console.log(s); // {"a":{"t":"string","v":"hello"},"b":[{"t":"BigNumber","v":"1"},{"t":"BigNumber","v":"2"},{"t":"BigNumber","v":"3"},{"t":"BigNumber","v":"4"},{"t":"BigNumber","v":"5"}]} -const d = parse(s, customParse); +const d = parse(s, { customParse }); console.log(d); // { // a: 'hello', diff --git a/lib/index.js b/dist/cjs/index.js similarity index 96% rename from lib/index.js rename to dist/cjs/index.js index 88465bb..0a73d1f 100644 --- a/lib/index.js +++ b/dist/cjs/index.js @@ -17,3 +17,4 @@ Object.defineProperty(exports, "__esModule", { value: true }); __exportStar(require("./parse"), exports); __exportStar(require("./stringify"), exports); __exportStar(require("./types"), exports); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/cjs/index.js.map b/dist/cjs/index.js.map new file mode 100644 index 0000000..26b4e01 --- /dev/null +++ b/dist/cjs/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,8CAA4B;AAC5B,0CAAwB"} \ No newline at end of file diff --git a/lib/parse.js b/dist/cjs/parse.js similarity index 80% rename from lib/parse.js rename to dist/cjs/parse.js index 95f2254..c8c8eb8 100644 --- a/lib/parse.js +++ b/dist/cjs/parse.js @@ -12,31 +12,41 @@ const isTypedValue = (obj) => { exports.isTypedValue = isTypedValue; const convertType = ({ t, v }) => { switch (t) { - case 'function': + case 'function': { return undefined; - case 'null': - return null; - case 'symbol': + } + case 'null': { + return null; // eslint-disable-line unicorn/no-null + } + case 'symbol': { return v === undefined ? Symbol() : Symbol.for(v); - case 'undefined': + } + case 'undefined': { return undefined; + } } if (v === undefined) { throw new Error('No value'); } switch (t) { - case 'bigint': + case 'bigint': { return BigInt(v); - case 'boolean': + } + case 'boolean': { return v === '1'; - case 'Date': + } + case 'Date': { return new Date(v); - case 'number': + } + case 'number': { return Number(v); - case 'string': + } + case 'string': { return v; - default: + } + default: { throw new Error(`Unknown type: ${t}`); + } } }; const decent = (obj, options) => { @@ -66,3 +76,4 @@ const parse = (s, options = {}) => { return decent(JSON.parse(s), options); }; exports.parse = parse; +//# sourceMappingURL=parse.js.map \ No newline at end of file diff --git a/dist/cjs/parse.js.map b/dist/cjs/parse.js.map new file mode 100644 index 0000000..e176b9e --- /dev/null +++ b/dist/cjs/parse.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/stringify.js b/dist/cjs/stringify.js similarity index 86% rename from lib/stringify.js rename to dist/cjs/stringify.js index 4796cd5..3e6d1ff 100644 --- a/lib/stringify.js +++ b/dist/cjs/stringify.js @@ -12,21 +12,27 @@ const convertType = (obj, ignoreDataLoss) => { return { t: 'Date', v: obj.toISOString() }; } switch (typeof obj) { - case 'bigint': + case 'bigint': { return { t: 'bigint', v: obj.toString() }; - case 'boolean': + } + case 'boolean': { return { t: 'boolean', v: obj ? '1' : '0' }; - case 'function': + } + case 'function': { if (!ignoreDataLoss) { throw new Error('Function can not be stringified without data loss'); } return { t: 'function' }; - case 'number': + } + case 'number': { return { t: 'number', v: obj.toString() }; - case 'string': + } + case 'string': { return { t: 'string', v: obj }; - case 'symbol': + } + case 'symbol': { return { t: 'symbol', v: Symbol.keyFor(obj) }; + } } throw new Error(`Unknown datatype: ${typeof obj}`); }; @@ -52,3 +58,4 @@ const decent = (obj, options) => { }; const stringify = (obj, options = {}) => JSON.stringify(decent(obj, options)); exports.stringify = stringify; +//# sourceMappingURL=stringify.js.map \ No newline at end of file diff --git a/dist/cjs/stringify.js.map b/dist/cjs/stringify.js.map new file mode 100644 index 0000000..be3be13 --- /dev/null +++ b/dist/cjs/stringify.js.map @@ -0,0 +1 @@ +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/tsconfig.cjs.tsbuildinfo b/dist/cjs/tsconfig.cjs.tsbuildinfo new file mode 100644 index 0000000..93ccb56 --- /dev/null +++ b/dist/cjs/tsconfig.cjs.tsbuildinfo @@ -0,0 +1 @@ +{"root":["../../src/index.ts","../../src/parse.ts","../../src/stringify.ts","../../src/types.ts"],"version":"5.6.3"} \ No newline at end of file diff --git a/lib/types.js b/dist/cjs/types.js similarity index 70% rename from lib/types.js rename to dist/cjs/types.js index c8ad2e5..11e638d 100644 --- a/lib/types.js +++ b/dist/cjs/types.js @@ -1,2 +1,3 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/dist/cjs/types.js.map b/dist/cjs/types.js.map new file mode 100644 index 0000000..7b5fff8 --- /dev/null +++ b/dist/cjs/types.js.map @@ -0,0 +1 @@ +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/esm/index.js b/dist/esm/index.js new file mode 100644 index 0000000..e400e98 --- /dev/null +++ b/dist/esm/index.js @@ -0,0 +1,4 @@ +export * from './parse'; +export * from './stringify'; +export * from './types'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/esm/index.js.map b/dist/esm/index.js.map new file mode 100644 index 0000000..fa776d8 --- /dev/null +++ b/dist/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"} \ No newline at end of file diff --git a/dist/esm/parse.js b/dist/esm/parse.js new file mode 100644 index 0000000..207eafe --- /dev/null +++ b/dist/esm/parse.js @@ -0,0 +1,74 @@ +const hasOwnProperty = (object, property) => Object.prototype.hasOwnProperty.call(object, property); +export const isTypedValue = (obj) => { + if (typeof obj === 'object' && hasOwnProperty(obj, 't') && typeof obj.t === 'string') { + const keys = Object.keys(obj); + return keys.length === 1 || (keys.length === 2 && hasOwnProperty(obj, 'v') && typeof obj.v === 'string'); + } + return false; +}; +const convertType = ({ t, v }) => { + switch (t) { + case 'function': { + return undefined; + } + case 'null': { + return null; // eslint-disable-line unicorn/no-null + } + case 'symbol': { + return v === undefined ? Symbol() : Symbol.for(v); + } + case 'undefined': { + return undefined; + } + } + if (v === undefined) { + throw new Error('No value'); + } + switch (t) { + case 'bigint': { + return BigInt(v); + } + case 'boolean': { + return v === '1'; + } + case 'Date': { + return new Date(v); + } + case 'number': { + return Number(v); + } + case 'string': { + return v; + } + default: { + throw new Error(`Unknown type: ${t}`); + } + } +}; +const decent = (obj, options) => { + if (Array.isArray(obj)) { + return obj.map((obj) => decent(obj, options)); + } + else if (obj && typeof obj === 'object') { + if (isTypedValue(obj)) { + const { customParse } = options; + if (customParse) { + const { useResult, result } = customParse(obj); + if (useResult) { + return result; + } + } + return convertType(obj); + } + const tmpObj = {}; + for (const [key, value] of Object.entries(obj)) { + tmpObj[key] = decent(value, options); + } + return tmpObj; + } + throw new Error('Invalid structure'); +}; +export const parse = (s, options = {}) => { + return decent(JSON.parse(s), options); +}; +//# sourceMappingURL=parse.js.map \ No newline at end of file diff --git a/dist/esm/parse.js.map b/dist/esm/parse.js.map new file mode 100644 index 0000000..2395df9 --- /dev/null +++ b/dist/esm/parse.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/stringify.js b/dist/esm/stringify.js new file mode 100644 index 0000000..6332275 --- /dev/null +++ b/dist/esm/stringify.js @@ -0,0 +1,57 @@ +const convertType = (obj, ignoreDataLoss) => { + if (obj === null) { + return { t: 'null' }; + } + if (obj === undefined) { + return { t: 'undefined' }; + } + if (obj instanceof Date) { + return { t: 'Date', v: obj.toISOString() }; + } + switch (typeof obj) { + case 'bigint': { + return { t: 'bigint', v: obj.toString() }; + } + case 'boolean': { + return { t: 'boolean', v: obj ? '1' : '0' }; + } + case 'function': { + if (!ignoreDataLoss) { + throw new Error('Function can not be stringified without data loss'); + } + return { t: 'function' }; + } + case 'number': { + return { t: 'number', v: obj.toString() }; + } + case 'string': { + return { t: 'string', v: obj }; + } + case 'symbol': { + return { t: 'symbol', v: Symbol.keyFor(obj) }; + } + } + throw new Error(`Unknown datatype: ${typeof obj}`); +}; +const decent = (obj, options) => { + const { customStringify, ignoreDataLoss = false } = options; + if (customStringify) { + const tmpObj = customStringify(obj, { ignoreDataLoss }); + if (tmpObj) { + return tmpObj; + } + } + if (Array.isArray(obj)) { + return obj.map((obj) => decent(obj, options)); + } + else if (obj && typeof obj === 'object' && !(obj instanceof Date)) { + const tmpObj = {}; + for (const [key, value] of Object.entries(obj)) { + tmpObj[key] = decent(value, options); + } + return tmpObj; + } + return convertType(obj, ignoreDataLoss); +}; +export const stringify = (obj, options = {}) => JSON.stringify(decent(obj, options)); +//# sourceMappingURL=stringify.js.map \ No newline at end of file diff --git a/dist/esm/stringify.js.map b/dist/esm/stringify.js.map new file mode 100644 index 0000000..a485d78 --- /dev/null +++ b/dist/esm/stringify.js.map @@ -0,0 +1 @@ +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/tsconfig.esm.tsbuildinfo b/dist/esm/tsconfig.esm.tsbuildinfo new file mode 100644 index 0000000..93ccb56 --- /dev/null +++ b/dist/esm/tsconfig.esm.tsbuildinfo @@ -0,0 +1 @@ +{"root":["../../src/index.ts","../../src/parse.ts","../../src/stringify.ts","../../src/types.ts"],"version":"5.6.3"} \ No newline at end of file diff --git a/dist/esm/types.js b/dist/esm/types.js new file mode 100644 index 0000000..718fd38 --- /dev/null +++ b/dist/esm/types.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/dist/esm/types.js.map b/dist/esm/types.js.map new file mode 100644 index 0000000..7b5fff8 --- /dev/null +++ b/dist/esm/types.js.map @@ -0,0 +1 @@ +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/lib/index.d.ts b/dist/types/index.d.ts similarity index 100% rename from lib/index.d.ts rename to dist/types/index.d.ts diff --git a/lib/parse.d.ts b/dist/types/parse.d.ts similarity index 82% rename from lib/parse.d.ts rename to dist/types/parse.d.ts index 3d2c3b7..a0f672f 100644 --- a/lib/parse.d.ts +++ b/dist/types/parse.d.ts @@ -1,3 +1,3 @@ import { ParseOptions, TypedValue } from './types'; -export declare const isTypedValue: (obj: unknown) => obj is TypedValue; +export declare const isTypedValue: (obj: unknown) => obj is TypedValue; export declare const parse: (s: string, options?: ParseOptions) => unknown; diff --git a/lib/stringify.d.ts b/dist/types/stringify.d.ts similarity index 100% rename from lib/stringify.d.ts rename to dist/types/stringify.d.ts diff --git a/dist/types/tsconfig.types.tsbuildinfo b/dist/types/tsconfig.types.tsbuildinfo new file mode 100644 index 0000000..93ccb56 --- /dev/null +++ b/dist/types/tsconfig.types.tsbuildinfo @@ -0,0 +1 @@ +{"root":["../../src/index.ts","../../src/parse.ts","../../src/stringify.ts","../../src/types.ts"],"version":"5.6.3"} \ No newline at end of file diff --git a/lib/types.d.ts b/dist/types/types.d.ts similarity index 55% rename from lib/types.d.ts rename to dist/types/types.d.ts index 75496a8..8ba1130 100644 --- a/lib/types.d.ts +++ b/dist/types/types.d.ts @@ -1,4 +1,4 @@ -export declare type StringifyType = 'bigint' | 'boolean' | 'Date' | 'function' | 'null' | 'number' | 'string' | 'symbol' | 'undefined'; +export type StringifyType = 'bigint' | 'boolean' | 'Date' | 'function' | 'null' | 'number' | 'string' | 'symbol' | 'undefined'; export interface TypedValue { t: T; v?: string; @@ -6,12 +6,12 @@ export interface TypedValue { export interface CustomStringifyOptions { ignoreDataLoss?: boolean; } -export declare type CustomStringify = (obj: unknown, options: CustomStringifyOptions) => TypedValue | undefined; +export type CustomStringify = (obj: unknown, options: CustomStringifyOptions) => TypedValue | undefined; export interface StringifyOptions { customStringify?: CustomStringify; ignoreDataLoss?: boolean; } -export declare type CustomParse = (obj: TypedValue) => { +export type CustomParse = (obj: TypedValue) => { useResult: boolean; result?: unknown; }; diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..95a8ab0 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,29 @@ +import pluginJs from '@eslint/js'; +import eslintConfigPrettier from 'eslint-config-prettier'; +import eslintPluginUnicorn from 'eslint-plugin-unicorn'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; + +export default [ + { files: ['**/*.{js,mjs,cjs,ts}'] }, + { ignores: ['**/dist/**'] }, + { languageOptions: { globals: globals.node } }, + pluginJs.configs.recommended, + ...tseslint.configs.strict, + eslintPluginUnicorn.configs['flat/recommended'], + { + rules: { + '@typescript-eslint/explicit-function-return-type': 'error', + 'unicorn/filename-case': ['error', { cases: { camelCase: true, pascalCase: true } }], + 'unicorn/no-useless-undefined': 'off', + 'unicorn/prefer-ternary': 'off', + 'unicorn/prevent-abbreviations': [ + 'error', + { + replacements: { obj: false, tmp: false }, + }, + ], + }, + }, + eslintConfigPrettier, +]; diff --git a/package-lock.json b/package-lock.json index d9b3264..627286b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,81 +1,90 @@ { - "name": "typed-stringify", + "name": "@softstack/typed-stringify", "version": "2.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "typed-stringify", + "name": "@softstack/typed-stringify", "version": "2.0.0", + "license": "MIT", "devDependencies": { - "@types/jest": "^27.4.1", - "@types/lodash": "^4.14.180", - "@typescript-eslint/eslint-plugin": "^5.15.0", - "@typescript-eslint/parser": "^5.15.0", - "bignumber.js": "^9.0.2", - "eslint": "^8.11.0", - "eslint-config-prettier": "^8.5.0", - "jest": "^27.5.1", + "@types/jest": "^29.5.14", + "@types/lodash": "^4.17.13", + "bignumber.js": "^9.1.2", + "eslint": "^9.14.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-unicorn": "^56.0.0", + "globals": "^15.12.0", + "jest": "^29.7.0", "lodash": "^4.17.21", - "prettier": "^2.6.0", - "ts-jest": "^27.1.3", - "typescript": "^4.6.2" + "prettier": "^3.3.3", + "ts-jest": "^29.2.5", + "typescript": "^5.6.3", + "typescript-eslint": "^8.14.0" } }, "node_modules/@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz", - "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.7.tgz", - "integrity": "sha512-djHlEfFHnSnTAcPb7dATbiM5HxGOP98+3JLBZtjRb5I7RXrw7kFRoG2dXM8cm3H+o11A8IFH/uprmJpwFynRNQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.7", - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.7", - "@babel/parser": "^7.17.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0", - "convert-source-map": "^1.7.0", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -86,300 +95,154 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "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/@babel/generator": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", - "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", - "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "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/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", - "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", - "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", "dev": true, - "dependencies": { - "@babel/types": "^7.17.0" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.7.tgz", - "integrity": "sha512-TKsj9NkjJfTBxM7Phfy7kv6yYc4ZcOo+AaWGqQOKTPDOmcGkIFb5xNA746eKisQkm4yavUYh4InYM9S+VnO01w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/types": "^7.26.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.7.tgz", - "integrity": "sha512-bm3AQf45vR4gKggRfvJdYJ0gFLoCbsPxiFLSH6hTVYABptNHY6l9NrhnucVjQ/X+SPtLANT9lc0fFhikj+VBRA==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -392,6 +255,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -404,6 +268,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -416,6 +281,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -423,11 +289,44 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -440,6 +339,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -447,11 +347,28 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -464,6 +381,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -476,6 +394,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -488,6 +407,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -500,6 +420,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -512,6 +433,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -519,11 +441,28 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -535,12 +474,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -550,34 +490,33 @@ } }, "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", - "@babel/types": "^7.17.0", - "debug": "^4.1.0", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -589,18 +528,20 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -610,78 +551,205 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "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==", "dev": true, - "optional": true, - "peer": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "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": { - "node": ">= 12" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", "dev": true, - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "@cspotcode/source-map-consumer": "0.8.0" + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" }, "engines": { - "node": ">=12" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", + "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/eslintrc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", - "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/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": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz", + "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "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==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "node_modules/@eslint/plugin-kit": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz", + "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "levn": "^0.4.1" }, "engines": { - "node": ">=10.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "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": { + "node": ">=18.18.0" + } + }, + "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": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "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": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "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": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "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==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -698,6 +766,7 @@ "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" } @@ -707,6 +776,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -720,6 +790,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -729,64 +800,67 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", "micromatch": "^4.0.4", - "rimraf": "^3.0.0", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -798,85 +872,116 @@ } }, "node_modules/@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^27.5.1" + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, + "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", - "glob": "^7.1.2", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "slash": "^3.0.0", - "source-map": "^0.6.0", "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -887,115 +992,162 @@ } } }, + "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": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, + "license": "MIT", "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" + "graceful-fs": "^4.2.9" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/test-result": "^27.5.1", + "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, + "license": "MIT", "dependencies": { + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "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==", "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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": { + "node": ">=6.0.0" + } + }, + "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": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", - "dev": true + "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.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "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": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@nodelib/fs.scandir": { @@ -1003,6 +1155,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1016,6 +1169,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -1025,6 +1179,7 @@ "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": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1033,220 +1188,215 @@ "node": ">= 8" } }, + "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/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.3.0" + "@babel/types": "^7.20.7" } }, + "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==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jest": { - "version": "27.4.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.1.tgz", - "integrity": "sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw==", + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, + "license": "MIT", "dependencies": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, "node_modules/@types/json-schema": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.10.tgz", - "integrity": "sha512-BLO9bBq59vW3fxCpD4o0N4U+DXsvwvIcl+jofw0frQo/GrBFC+/jRZj1E7kgp6dvTyNmA4y6JCV5Id/r3mNP5A==", - "dev": true + "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/lodash": { - "version": "4.14.180", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.180.tgz", - "integrity": "sha512-XOKXa1KIxtNXgASAnwj7cnttJxS4fksBRywK/9LzRV5YxrF80BXZIGeQSuoESQ/VkUj30Ae0+YcuHc15wJCB2g==", - "dev": true + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz", + "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==", + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true + "version": "22.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", + "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.8" + } }, - "node_modules/@types/prettier": { + "node_modules/@types/normalize-package-data": { "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz", - "integrity": "sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==", - "dev": true + "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/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.15.0.tgz", - "integrity": "sha512-u6Db5JfF0Esn3tiAKELvoU5TpXVSkOpZ78cEGn/wXtT2RVqs2vkt4ge6N8cRCyw7YVKhmmLDbwI2pg92mlv7cA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.15.0", - "@typescript-eslint/type-utils": "5.15.0", - "@typescript-eslint/utils": "5.15.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.14.0.tgz", + "integrity": "sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/type-utils": "8.14.0", + "@typescript-eslint/utils": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1255,25 +1405,27 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.15.0.tgz", - "integrity": "sha512-NGAYP/+RDM2sVfmKiKOCgJYPstAO40vPAgACoWPO/+yoYKSgAXIFaBKsV8P0Cc7fwKgvj27SjRNX4L7f4/jCKQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.14.0.tgz", + "integrity": "sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "5.15.0", - "@typescript-eslint/types": "5.15.0", - "@typescript-eslint/typescript-estree": "5.15.0", - "debug": "^4.3.2" + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/typescript-estree": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", + "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1282,16 +1434,17 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.15.0.tgz", - "integrity": "sha512-EFiZcSKrHh4kWk0pZaa+YNJosvKE50EnmN4IfgjkA3bTHElPtYcd2U37QQkNTqwMCS7LXeDeZzEqnsOH8chjSg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.14.0.tgz", + "integrity": "sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.15.0", - "@typescript-eslint/visitor-keys": "5.15.0" + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -1299,25 +1452,24 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.15.0.tgz", - "integrity": "sha512-KGeDoEQ7gHieLydujGEFLyLofipe9PIzfvA/41urz4hv+xVxPEbmMQonKSynZ0Ks2xDhJQ4VYjB3DnRiywvKDA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.14.0.tgz", + "integrity": "sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "5.15.0", - "debug": "^4.3.2", - "tsutils": "^3.21.0" + "@typescript-eslint/typescript-estree": "8.14.0", + "@typescript-eslint/utils": "8.14.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "eslint": "*" - }, "peerDependenciesMeta": { "typescript": { "optional": true @@ -1325,12 +1477,13 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.15.0.tgz", - "integrity": "sha512-yEiTN4MDy23vvsIksrShjNwQl2vl6kJeG9YkVJXjXZnkJElzVK8nfPsWKYxcsGWG8GhurYXP4/KGj3aZAxbeOA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.14.0.tgz", + "integrity": "sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==", "dev": true, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -1338,21 +1491,23 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.15.0.tgz", - "integrity": "sha512-Hb0e3dGc35b75xLzixM3cSbG1sSbrTBQDfIScqdyvrfJZVEi4XWAT+UL/HMxEdrJNB8Yk28SKxPLtAhfCbBInA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.14.0.tgz", + "integrity": "sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "5.15.0", - "@typescript-eslint/visitor-keys": "5.15.0", - "debug": "^4.3.2", - "globby": "^11.0.4", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -1364,80 +1519,79 @@ } } }, + "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": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.15.0.tgz", - "integrity": "sha512-081rWu2IPKOgTOhHUk/QfxuFog8m4wxW43sXNOMSCdh578tGJ1PAaWPsj42LOa7pguh173tNlMigsbrHvh/mtA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.14.0.tgz", + "integrity": "sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.15.0", - "@typescript-eslint/types": "5.15.0", - "@typescript-eslint/typescript-estree": "5.15.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/typescript-estree": "8.14.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.15.0.tgz", - "integrity": "sha512-+vX5FKtgvyHbmIJdxMJ2jKm9z2BIlXJiuewI8dsDYMp5LzPUcuTT78Ya5iwvQg3VqSVdmxyM8Anj1Jeq7733ZQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.14.0.tgz", + "integrity": "sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.15.0", - "eslint-visitor-keys": "^3.0.0" + "@typescript-eslint/types": "8.14.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, "node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -1445,52 +1599,22 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-globals/node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "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": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/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", @@ -1507,6 +1631,7 @@ "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": { "type-fest": "^0.21.3" }, @@ -1517,23 +1642,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1554,10 +1668,11 @@ } }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "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" @@ -1566,52 +1681,37 @@ "node": ">= 8" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "engines": { - "node": ">=8" - } + "license": "Python-2.0" }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "node_modules/async": { + "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/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", + "babel-preset-jest": "^29.6.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" @@ -1622,6 +1722,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -1633,55 +1734,88 @@ "node": ">=8" } }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "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/babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", + "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", + "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" @@ -1694,10 +1828,11 @@ "dev": true }, "node_modules/bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -1713,27 +1848,22 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "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": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, "node_modules/browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "dev": true, "funding": [ { @@ -1743,14 +1873,18 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -1776,6 +1910,7 @@ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } @@ -1784,7 +1919,21 @@ "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 + "dev": true, + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/callsites": { "version": "3.1.0", @@ -1800,19 +1949,31 @@ "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.30001317", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001317.tgz", - "integrity": "sha512-xIZLh8gBm4dqNX0gkzrBeyI86J2eCjWzYAs40q88smG844YIrN4tVQl/RhquHvKEKImWWFIVh1Lxe5n1G/N+GQ==", + "version": "1.0.30001680", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz", + "integrity": "sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==", "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", @@ -1835,48 +1996,89 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } }, "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/clean-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", + "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/clean-regexp/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/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "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": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" }, "node_modules/color-convert": { "version": "2.0.1", @@ -1896,18 +2098,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1915,21 +2105,47 @@ "dev": true }, "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", + "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.1" + "browserslist": "^4.24.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "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==", + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, - "optional": true, - "peer": true + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, "node_modules/cross-spawn": { "version": "7.0.3", @@ -1945,51 +2161,14 @@ "node": ">= 8" } }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -2000,17 +2179,20 @@ } } }, - "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true + "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/deep-is": { "version": "0.1.4", @@ -2019,110 +2201,66 @@ "dev": true }, "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "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": { "node": ">=0.10.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "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, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "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==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "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": { - "esutils": "^2.0.2" + "jake": "^10.8.5" }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "dependencies": { - "webidl-conversions": "^5.0.0" + "bin": { + "ejs": "bin/cli.js" }, "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "node_modules/electron-to-chromium": { - "version": "1.4.86", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.86.tgz", - "integrity": "sha512-EVTZ+igi8x63pK4bPuA95PXIs2b2Cowi3WQwI9f9qManLiZJOD1Lash1J3W4TvvcUCcIR4o/rgi9o8UicXSO+w==", - "dev": true + "version": "1.5.56", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.56.tgz", + "integrity": "sha512-7lXb9dAvimCFdvUMTyucD4mnIndt/xhRKFAlky0CyFogdnNmdPQNoHI23msF/2V4mpTxMzgMdjK4+YRlFlRQZw==", + "dev": true, + "license": "ISC" }, "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sindresorhus/emittery?sponsor=1" @@ -2132,22 +2270,25 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "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": { "is-arrayish": "^0.2.1" } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "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": ">=6" } @@ -2164,145 +2305,73 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/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, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.11.0.tgz", - "integrity": "sha512-/KRpd9mIRg2raGxHRGwW9ZywYNAClZrHjdueHcrVDuO3a6bj83eoTirCCk0M0yPwOjWYKHwRVRid+xK4F/GHgA==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.2.1", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.14.0.tgz", + "integrity": "sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.7.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.14.0", + "@eslint/plugin-kit": "^0.2.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.0", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.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": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.3", + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, + "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -2310,89 +2379,177 @@ "eslint": ">=7.0.0" } }, - "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==", + "node_modules/eslint-plugin-unicorn": { + "version": "56.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-56.0.0.tgz", + "integrity": "sha512-aXpddVz/PQMmd69uxO98PA4iidiVNvA0xOtbpUoz1WhBd4RxOQQYqN618v68drY0hmy5uU2jy1bheKEVWBjlPw==", "dev": true, + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@babel/helper-validator-identifier": "^7.24.7", + "@eslint-community/eslint-utils": "^4.4.0", + "ci-info": "^4.0.0", + "clean-regexp": "^1.0.0", + "core-js-compat": "^3.38.1", + "esquery": "^1.6.0", + "globals": "^15.9.0", + "indent-string": "^4.0.0", + "is-builtin-module": "^3.2.1", + "jsesc": "^3.0.2", + "pluralize": "^8.0.0", + "read-pkg-up": "^7.0.1", + "regexp-tree": "^0.1.27", + "regjsparser": "^0.10.0", + "semver": "^7.6.3", + "strip-indent": "^3.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=18.18" + }, + "funding": { + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" + }, + "peerDependencies": { + "eslint": ">=8.56.0" } }, - "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/eslint-plugin-unicorn/node_modules/ci-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz", + "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://opencollective.com/eslint" + } + }, + "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": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "eslint": ">=5" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "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==", + "node_modules/eslint/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": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "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": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "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": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "p-locate": "^5.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/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/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": { + "p-limit": "^3.0.2" + }, "engines": { - "node": ">=4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "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": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.3.0" + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/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/esprima": { @@ -2400,6 +2557,7 @@ "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": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -2409,10 +2567,11 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "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": { "estraverse": "^5.1.0" }, @@ -2420,15 +2579,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/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, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -2441,20 +2591,12 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "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, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -2473,6 +2615,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -2494,38 +2637,42 @@ "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.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", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -2542,6 +2689,7 @@ "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" }, @@ -2562,40 +2710,77 @@ "dev": true }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "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/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "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": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "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": { + "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", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { - "flat-cache": "^3.0.4" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=10" } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "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": { "to-regex-range": "^5.0.1" }, @@ -2608,6 +2793,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -2617,50 +2803,40 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "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.1.0", - "rimraf": "^3.0.2" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } + "license": "ISC" }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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" @@ -2670,22 +2846,21 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2695,6 +2870,7 @@ "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": { "node": "6.* || 8.* || >= 10.*" } @@ -2704,6 +2880,7 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -2713,6 +2890,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2721,15 +2899,17 @@ } }, "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "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": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -2753,57 +2933,31 @@ } }, "node_modules/globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "version": "15.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz", + "integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==", "dev": true, - "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" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true + "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==", + "dev": true, + "license": "ISC" }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } + "license": "MIT" }, "node_modules/has-flag": { "version": "4.0.0", @@ -2814,77 +2968,49 @@ "node": ">=8" } }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { - "whatwg-encoding": "^1.0.5" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, + "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/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } + "license": "MIT" }, "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": { "node": ">=10.17.0" } }, - "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, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "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": ">= 4" } @@ -2894,6 +3020,7 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -2906,10 +3033,11 @@ } }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -2933,11 +3061,23 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "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.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -2947,21 +3087,43 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, + "license": "MIT", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2981,6 +3143,7 @@ "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": { "node": ">=8" } @@ -2990,6 +3153,7 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3011,21 +3175,17 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -3033,12 +3193,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -3046,51 +3200,45 @@ "dev": true }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" + "semver": "^7.5.4" }, "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node": ">=10" } }, "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/istanbul-lib-source-maps": { @@ -3098,6 +3246,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -3108,10 +3257,11 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -3120,21 +3270,42 @@ "node": ">=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": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/core": "^27.5.1", + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^27.5.1" + "jest-cli": "^29.7.0" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -3146,73 +3317,76 @@ } }, "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", "execa": "^5.0.0", - "throat": "^6.0.1" + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", + "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" + "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", + "create-jest": "^29.7.0", "exit": "^0.1.2", - "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -3224,255 +3398,223 @@ } }, "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", - "glob": "^7.1.1", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { + "@types/node": "*", "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, "ts-node": { "optional": true } } }, "node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "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": { "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "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": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "license": "MIT", "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -3486,167 +3628,157 @@ } }, "node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, + "license": "MIT", "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", + "jest-haste-map": "^29.7.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", + "resolve.exports": "^2.0.0", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.7.2", + "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.5.1", + "expect": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -3654,24 +3786,25 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", + "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^27.5.1" + "pretty-format": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-validate/node_modules/camelcase": { @@ -3679,6 +3812,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3687,35 +3821,39 @@ } }, "node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.5.1", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", "string-length": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "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==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-worker/node_modules/supports-color": { @@ -3723,6 +3861,7 @@ "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" }, @@ -3737,13 +3876,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "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": { "argparse": "^2.0.1" }, @@ -3751,75 +3892,39 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, + "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-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 + "dev": true, + "license": "MIT" }, "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 + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -3828,13 +3933,11 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -3842,11 +3945,22 @@ "node": ">=6" } }, + "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": { + "json-buffer": "3.0.1" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3856,6 +3970,7 @@ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3865,6 +3980,7 @@ "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" @@ -3877,13 +3993,15 @@ "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 + "dev": true, + "license": "MIT" }, "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": { "p-locate": "^4.1.0" }, @@ -3910,41 +4028,31 @@ "dev": true }, "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==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "yallist": "^3.0.2" } }, "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==", + "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": "^6.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -3956,6 +4064,7 @@ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } @@ -3964,60 +4073,53 @@ "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 + "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": { "node": ">= 8" } }, "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "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": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, - "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, - "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, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=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": { + "node": ">=4" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -4030,17 +4132,12 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", @@ -4051,20 +4148,46 @@ "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", - "dev": true + "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/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/normalize-package-data/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" + } }, "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" } @@ -4074,6 +4197,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -4081,17 +4205,12 @@ "node": ">=8" } }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -4101,6 +4220,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -4112,32 +4232,34 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "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": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4148,6 +4270,7 @@ "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": { "p-limit": "^2.2.0" }, @@ -4155,11 +4278,28 @@ "node": ">=8" } }, + "node_modules/p-locate/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": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4169,6 +4309,7 @@ "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": { "callsites": "^3.0.0" }, @@ -4181,6 +4322,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -4194,12 +4336,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -4212,8 +4348,9 @@ "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4231,28 +4368,22 @@ "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 - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "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": "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" }, @@ -4261,10 +4392,11 @@ } }, "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -4274,6 +4406,7 @@ "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": { "find-up": "^4.0.0" }, @@ -4281,42 +4414,55 @@ "node": ">=8" } }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "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": { "node": ">= 0.8.0" } }, "node_modules/prettier": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.0.tgz", - "integrity": "sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, + "license": "MIT", "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "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": { - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { @@ -4324,6 +4470,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4336,6 +4483,7 @@ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -4344,12 +4492,6 @@ "node": ">= 6" } }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -4359,6 +4501,23 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -4377,42 +4536,120 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "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/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "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": { + "@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": ">=8" + } + }, + "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": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/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": { + "node": ">=8" + } + }, + "node_modules/regexp-tree": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", + "dev": true, + "license": "MIT", + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, + "node_modules/regjsparser": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz", + "integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" } }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -4428,6 +4665,7 @@ "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": { "resolve-from": "^5.0.0" }, @@ -4440,6 +4678,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4449,15 +4688,17 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -4467,26 +4708,12 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -4506,42 +4733,17 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, - "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 - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4574,19 +4776,22 @@ "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 + "dev": true, + "license": "ISC" }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "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": { "node": ">=8" } @@ -4596,31 +4801,71 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "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==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, + "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": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "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": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "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==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -4633,6 +4878,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4642,6 +4888,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -4655,6 +4902,7 @@ "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": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -4669,6 +4917,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -4681,6 +4930,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4690,10 +4940,24 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=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": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=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", @@ -4718,24 +4982,12 @@ "node": ">=8" } }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "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": { "node": ">= 0.4" }, @@ -4743,33 +4995,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -4785,32 +5016,19 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "node_modules/throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true, - "engines": { - "node": ">=4" - } + "license": "BSD-3-Clause" }, "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": { "is-number": "^7.0.0" }, @@ -4818,66 +5036,58 @@ "node": ">=8.0" } }, - "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "node_modules/ts-api-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", + "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, + "license": "MIT", "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" + "node": ">=16" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "typescript": ">=4.2.0" } }, "node_modules/ts-jest": { - "version": "27.1.3", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.3.tgz", - "integrity": "sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" + "version": "29.2.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", + "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.6.3", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@types/jest": "^27.0.0", - "babel-jest": ">=27.0.0 <28", - "esbuild": "~0.14.0", - "jest": "^27.0.0", - "typescript": ">=3.8 <5.0" + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, - "@types/jest": { + "@jest/transform": { + "optional": true + }, + "@jest/types": { "optional": true }, "babel-jest": { @@ -4888,82 +5098,17 @@ } } }, - "node_modules/ts-node": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", - "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", + "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, - "optional": true, - "peer": true, - "dependencies": { - "@cspotcode/source-map-support": "0.7.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.0", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" + "engines": { + "node": ">= 0.8.0" } }, "node_modules/type-detect": { @@ -4971,15 +5116,17 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "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==", + "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": { "node": ">=10" }, @@ -4987,35 +5134,80 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, "node_modules/typescript": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", - "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/typescript-eslint": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.14.0.tgz", + "integrity": "sha512-K8fBJHxVL3kxMmwByvz8hNdBJ8a0YqKzKDX6jRlrjMuNXyd5T2V02HIq37+OiWXvUUOXgOOGiSSOh26Mh8pC3w==", "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.14.0", + "@typescript-eslint/parser": "8.14.0", + "@typescript-eslint/utils": "8.14.0" + }, "engines": { - "node": ">= 4.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, "node_modules/uri-js": { @@ -5023,66 +5215,35 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", - "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "convert-source-map": "^2.0.0" }, "engines": { "node": ">=10.12.0" } }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "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": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "node_modules/walker": { @@ -5090,48 +5251,11 @@ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -5148,10 +5272,11 @@ } }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "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": { "node": ">=0.10.0" } @@ -5161,6 +5286,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -5176,4072 +5302,82 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "signal-exit": "^3.0.7" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "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": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "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==", + "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": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "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, - "optional": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=6" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.0" - } - }, - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/compat-data": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz", - "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", - "dev": true - }, - "@babel/core": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.7.tgz", - "integrity": "sha512-djHlEfFHnSnTAcPb7dATbiM5HxGOP98+3JLBZtjRb5I7RXrw7kFRoG2dXM8cm3H+o11A8IFH/uprmJpwFynRNQ==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.7", - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.7", - "@babel/parser": "^7.17.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", - "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", - "dev": true, - "requires": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", - "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-transforms": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", - "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", - "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", - "dev": true, - "requires": { - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true - }, - "@babel/helpers": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.7.tgz", - "integrity": "sha512-TKsj9NkjJfTBxM7Phfy7kv6yYc4ZcOo+AaWGqQOKTPDOmcGkIFb5xNA746eKisQkm4yavUYh4InYM9S+VnO01w==", - "dev": true, - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" - } - }, - "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "node": ">=10" }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.7.tgz", - "integrity": "sha512-bm3AQf45vR4gKggRfvJdYJ0gFLoCbsPxiFLSH6hTVYABptNHY6l9NrhnucVjQ/X+SPtLANT9lc0fFhikj+VBRA==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", - "@babel/types": "^7.17.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true, - "optional": true, - "peer": true - }, - "@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@cspotcode/source-map-consumer": "0.8.0" - } - }, - "@eslint/eslintrc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", - "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "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 - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - } - }, - "@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - } - }, - "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - } - }, - "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "dev": true, - "requires": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - } - }, - "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@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, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@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 - }, - "@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, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true, - "optional": true, - "peer": true - }, - "@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true, - "optional": true, - "peer": true - }, - "@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true, - "optional": true, - "peer": true - }, - "@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true, - "optional": true, - "peer": true - }, - "@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "27.4.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.1.tgz", - "integrity": "sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw==", - "dev": true, - "requires": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, - "@types/json-schema": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.10.tgz", - "integrity": "sha512-BLO9bBq59vW3fxCpD4o0N4U+DXsvwvIcl+jofw0frQo/GrBFC+/jRZj1E7kgp6dvTyNmA4y6JCV5Id/r3mNP5A==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.180", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.180.tgz", - "integrity": "sha512-XOKXa1KIxtNXgASAnwj7cnttJxS4fksBRywK/9LzRV5YxrF80BXZIGeQSuoESQ/VkUj30Ae0+YcuHc15wJCB2g==", - "dev": true - }, - "@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==", - "dev": true - }, - "@types/prettier": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz", - "integrity": "sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.15.0.tgz", - "integrity": "sha512-u6Db5JfF0Esn3tiAKELvoU5TpXVSkOpZ78cEGn/wXtT2RVqs2vkt4ge6N8cRCyw7YVKhmmLDbwI2pg92mlv7cA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.15.0", - "@typescript-eslint/type-utils": "5.15.0", - "@typescript-eslint/utils": "5.15.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.15.0.tgz", - "integrity": "sha512-NGAYP/+RDM2sVfmKiKOCgJYPstAO40vPAgACoWPO/+yoYKSgAXIFaBKsV8P0Cc7fwKgvj27SjRNX4L7f4/jCKQ==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.15.0", - "@typescript-eslint/types": "5.15.0", - "@typescript-eslint/typescript-estree": "5.15.0", - "debug": "^4.3.2" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.15.0.tgz", - "integrity": "sha512-EFiZcSKrHh4kWk0pZaa+YNJosvKE50EnmN4IfgjkA3bTHElPtYcd2U37QQkNTqwMCS7LXeDeZzEqnsOH8chjSg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.15.0", - "@typescript-eslint/visitor-keys": "5.15.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.15.0.tgz", - "integrity": "sha512-KGeDoEQ7gHieLydujGEFLyLofipe9PIzfvA/41urz4hv+xVxPEbmMQonKSynZ0Ks2xDhJQ4VYjB3DnRiywvKDA==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.15.0", - "debug": "^4.3.2", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.15.0.tgz", - "integrity": "sha512-yEiTN4MDy23vvsIksrShjNwQl2vl6kJeG9YkVJXjXZnkJElzVK8nfPsWKYxcsGWG8GhurYXP4/KGj3aZAxbeOA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.15.0.tgz", - "integrity": "sha512-Hb0e3dGc35b75xLzixM3cSbG1sSbrTBQDfIScqdyvrfJZVEi4XWAT+UL/HMxEdrJNB8Yk28SKxPLtAhfCbBInA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.15.0", - "@typescript-eslint/visitor-keys": "5.15.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.15.0.tgz", - "integrity": "sha512-081rWu2IPKOgTOhHUk/QfxuFog8m4wxW43sXNOMSCdh578tGJ1PAaWPsj42LOa7pguh173tNlMigsbrHvh/mtA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.15.0", - "@typescript-eslint/types": "5.15.0", - "@typescript-eslint/typescript-estree": "5.15.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.15.0.tgz", - "integrity": "sha512-+vX5FKtgvyHbmIJdxMJ2jKm9z2BIlXJiuewI8dsDYMp5LzPUcuTT78Ya5iwvQg3VqSVdmxyM8Anj1Jeq7733ZQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.15.0", - "eslint-visitor-keys": "^3.0.0" - } - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - } - } - }, - "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, - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "optional": true, - "peer": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "optional": true, - "peer": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "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 - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", - "dev": true, - "requires": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" - } - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "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 - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001317", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001317.tgz", - "integrity": "sha512-xIZLh8gBm4dqNX0gkzrBeyI86J2eCjWzYAs40q88smG844YIrN4tVQl/RhquHvKEKImWWFIVh1Lxe5n1G/N+GQ==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "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, - "optional": true, - "peer": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-is": { - "version": "0.1.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 - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "optional": true, - "peer": true - }, - "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "electron-to-chromium": { - "version": "1.4.86", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.86.tgz", - "integrity": "sha512-EVTZ+igi8x63pK4bPuA95PXIs2b2Cowi3WQwI9f9qManLiZJOD1Lash1J3W4TvvcUCcIR4o/rgi9o8UicXSO+w==", - "dev": true - }, - "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, - "eslint": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.11.0.tgz", - "integrity": "sha512-/KRpd9mIRg2raGxHRGwW9ZywYNAClZrHjdueHcrVDuO3a6bj83eoTirCCk0M0yPwOjWYKHwRVRid+xK4F/GHgA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.2.1", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "requires": {} - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "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 - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", - "dev": true, - "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - } - }, - "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 - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "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" - } - }, - "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "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, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "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, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", - "dev": true, - "requires": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - } - }, - "jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - } - }, - "jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - } - }, - "jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "dev": true, - "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - } - }, - "jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "dev": true, - "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - } - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - } - }, - "jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - } - }, - "jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "dev": true, - "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true - }, - "jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - } - }, - "jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - } - }, - "jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - } - }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, - "jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", - "dev": true, - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", - "dev": true, - "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - } - }, - "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, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "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, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "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 - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "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 - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "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 - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "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, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.0.tgz", - "integrity": "sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A==", - "dev": true - }, - "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "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 - } - } - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "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 - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "requires": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "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, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "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 - } - } - }, - "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 - }, - "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "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 - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "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 - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "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 - }, - "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, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "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, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "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, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "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 - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "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 - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "ts-jest": { - "version": "27.1.3", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.3.tgz", - "integrity": "sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - } - }, - "ts-node": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", - "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@cspotcode/source-map-support": "0.7.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.0", - "yn": "3.1.1" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", - "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", - "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", - "dev": true, - "optional": true, - "peer": true - }, - "v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", - "dev": true, - "requires": {} - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "optional": true, - "peer": true } } } diff --git a/package.json b/package.json index d4f4b57..8fb4343 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,17 @@ "name": "@softstack/typed-stringify", "version": "2.0.0", "description": "Stringifies and parses objects while restoring the proper type on parse", - "main": "lib/index.js", - "types": "lib/index.d.ts", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + "require": "./dist/cjs/index.js", + "import": "./dist/esm/index.js", + "types": "./dist/types/index.d.ts" + }, + "files": [ + "dist/**/*" + ], "repository": { "type": "git", "url": "https://github.com/chainsulting/typed-stringify" @@ -11,9 +20,11 @@ "homepage": "https://github.com/chainsulting/typed-stringify#readme", "scripts": { "test": "jest --config jestconfig.json", - "build": "tsc", - "prettier": "prettier --write \"src/**/*.ts\"", - "lint": "eslint ./src --ext .js,.jsx,.ts,.tsx", + "prettier": "prettier --write \"./**/*.js\" \"./**/*.json\" \"./**/*.mjs\" \"./**/*.ts\"", + "lint": "eslint ./src", + "compile": "tsc -b ./tsconfig.cjs.json ./tsconfig.esm.json ./tsconfig.types.json", + "build:clean": "rm -rf ./dist", + "build": "npm run build:clean && npm run compile", "prepare": "npm run build", "prepublishOnly": "npm test && npm run lint", "preversion": "npm test && npm run lint", @@ -26,20 +37,18 @@ "author": "Softstack GmbH (https://softstack.de)", "license": "MIT", "devDependencies": { - "@types/jest": "^27.4.1", - "@types/lodash": "^4.14.180", - "@typescript-eslint/eslint-plugin": "^5.15.0", - "@typescript-eslint/parser": "^5.15.0", - "bignumber.js": "^9.0.2", - "eslint": "^8.11.0", - "eslint-config-prettier": "^8.5.0", - "jest": "^27.5.1", + "@types/jest": "^29.5.14", + "@types/lodash": "^4.17.13", + "bignumber.js": "^9.1.2", + "eslint": "^9.14.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-unicorn": "^56.0.0", + "globals": "^15.12.0", + "jest": "^29.7.0", "lodash": "^4.17.21", - "prettier": "^2.6.0", - "ts-jest": "^27.1.3", - "typescript": "^4.6.2" - }, - "files": [ - "lib/**/*" - ] + "prettier": "^3.3.3", + "ts-jest": "^29.2.5", + "typescript": "^5.6.3", + "typescript-eslint": "^8.14.0" + } } diff --git a/prettier.config.mjs b/prettier.config.mjs new file mode 100644 index 0000000..baadd8b --- /dev/null +++ b/prettier.config.mjs @@ -0,0 +1,17 @@ +export default { + arrowParens: 'always', // Default 'always' + bracketSameLine: false, // Default false + bracketSpacing: true, // Default true + embeddedLanguageFormatting: 'auto', // Default 'auto' + endOfLine: 'lf', // Default 'lf' + htmlWhitespaceSensitivity: 'css', // Default 'css' + jsxSingleQuote: false, // Default false + semi: true, // Default true + singleAttributePerLine: false, // Default false + singleQuote: true, // Default false + printWidth: 120, // Default 80 + proseWrap: 'preserve', // Default 'preserve' + quoteProps: 'as-needed', // Default 'as-needed' + trailingComma: 'all', // Default 'all' + useTabs: true, // Default false +}; diff --git a/src/__tests__/typed-stringify.test.ts b/src/__tests__/typedStringify.test.ts similarity index 88% rename from src/__tests__/typed-stringify.test.ts rename to src/__tests__/typedStringify.test.ts index 0733394..b3fee52 100644 --- a/src/__tests__/typed-stringify.test.ts +++ b/src/__tests__/typedStringify.test.ts @@ -26,10 +26,10 @@ const bigTestObject = { t: { a: 2, b: 'bbbbbbbbbbb', - c: null, + c: null, // eslint-disable-line unicorn/no-null d: undefined, e: new Date(), - f: new BigNumber(12345.6789), + f: new BigNumber(12_345.6789), }, v: { t: '4444', @@ -54,7 +54,7 @@ test('Empty array', () => { }); test('null', () => { - const obj = null; + const obj = null; // eslint-disable-line unicorn/no-null expect(isEqual(obj, parse(stringify(obj)))).toBe(true); }); @@ -103,7 +103,7 @@ test('Big array', () => { }); test('BigNumber', () => { - const obj = new BigNumber(34345.4243234); + const obj = new BigNumber(34_345.424_323_4); expect(isEqual(obj, parse(stringify(obj, { customStringify }), { customParse }))).toBe(true); }); @@ -118,12 +118,12 @@ test('Symbol.for("test")', () => { }); test('Function', () => { - const obj = () => undefined; + const obj = (): void => undefined; expect(isEqual(undefined, parse(stringify(obj, { ignoreDataLoss: true })))).toBe(true); }); test('Function without "ignoreDataLoss = true" should throw an error', () => { - const obj = () => undefined; - expect(() => parse(stringify(obj))).toThrowError(); - expect(() => parse(stringify(obj, { ignoreDataLoss: false }))).toThrowError(); + const obj = (): void => undefined; // eslint-disable-line unicorn/consistent-function-scoping + expect(() => parse(stringify(obj))).toThrow(); + expect(() => parse(stringify(obj, { ignoreDataLoss: false }))).toThrow(); }); diff --git a/src/examples/bigNumber.js.ts b/src/examples/bigNumber.js.ts index b80afc7..ad71c22 100644 --- a/src/examples/bigNumber.js.ts +++ b/src/examples/bigNumber.js.ts @@ -42,7 +42,7 @@ console.log(obj); const s = stringify(obj, { customStringify }); console.log(s); // {"a":{"t":"string","v":"hello"},"b":[{"t":"BigNumber","v":"1"},{"t":"BigNumber","v":"2"},{"t":"BigNumber","v":"3"},{"t":"BigNumber","v":"4"},{"t":"BigNumber","v":"5"}]} -const d = parse(s, customParse); +const d = parse(s, { customParse }); console.log(d); // { // a: 'hello', diff --git a/src/parse.ts b/src/parse.ts index a1c532c..55dd4c4 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -13,31 +13,41 @@ export const isTypedValue = (obj: unknown): obj is TypedValue => { const convertType = ({ t, v }: TypedValue): bigint | boolean | Date | null | number | string | symbol | undefined => { switch (t) { - case 'function': + case 'function': { return undefined; - case 'null': - return null; - case 'symbol': + } + case 'null': { + return null; // eslint-disable-line unicorn/no-null + } + case 'symbol': { return v === undefined ? Symbol() : Symbol.for(v); - case 'undefined': + } + case 'undefined': { return undefined; + } } if (v === undefined) { throw new Error('No value'); } switch (t) { - case 'bigint': + case 'bigint': { return BigInt(v); - case 'boolean': + } + case 'boolean': { return v === '1'; - case 'Date': + } + case 'Date': { return new Date(v); - case 'number': + } + case 'number': { return Number(v); - case 'string': + } + case 'string': { return v; - default: + } + default: { throw new Error(`Unknown type: ${t}`); + } } }; diff --git a/src/stringify.ts b/src/stringify.ts index ad38351..2b9dcae 100644 --- a/src/stringify.ts +++ b/src/stringify.ts @@ -11,21 +11,27 @@ const convertType = (obj: unknown, ignoreDataLoss: boolean): TypedValue => { return { t: 'Date', v: obj.toISOString() }; } switch (typeof obj) { - case 'bigint': + case 'bigint': { return { t: 'bigint', v: obj.toString() }; - case 'boolean': + } + case 'boolean': { return { t: 'boolean', v: obj ? '1' : '0' }; - case 'function': + } + case 'function': { if (!ignoreDataLoss) { throw new Error('Function can not be stringified without data loss'); } return { t: 'function' }; - case 'number': + } + case 'number': { return { t: 'number', v: obj.toString() }; - case 'string': + } + case 'string': { return { t: 'string', v: obj }; - case 'symbol': + } + case 'symbol': { return { t: 'symbol', v: Symbol.keyFor(obj) }; + } } throw new Error(`Unknown datatype: ${typeof obj}`); }; diff --git a/src/types.ts b/src/types.ts index 1b3c207..dd6cfe3 100644 --- a/src/types.ts +++ b/src/types.ts @@ -20,7 +20,7 @@ export interface CustomStringifyOptions { export type CustomStringify = ( obj: unknown, - options: CustomStringifyOptions + options: CustomStringifyOptions, ) => TypedValue | undefined; export interface StringifyOptions { diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000..bc3bb7a --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ES2018", + "module": "CommonJS", + "strict": true, + "sourceMap": true, + "noImplicitAny": true + }, + "include": ["src"], + "exclude": ["*/__tests__/**/*", "src/examples/**/*"] +} diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json new file mode 100644 index 0000000..c2391ec --- /dev/null +++ b/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/cjs", + "module": "commonjs" + } +} diff --git a/tsconfig.esm.json b/tsconfig.esm.json new file mode 100644 index 0000000..ec8616b --- /dev/null +++ b/tsconfig.esm.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm", + "module": "esnext", + "moduleResolution": "node" + } +} diff --git a/tsconfig.json b/tsconfig.json index a454845..e0b2b76 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,11 +1,3 @@ { - "compilerOptions": { - "target": "ES2018", - "module": "CommonJS", - "declaration": true, - "outDir": "./lib", - "strict": true - }, - "include": ["src"], - "exclude": ["node_modules", "**/__tests__/*", "src/examples/*"] + "extends": "./tsconfig.base.json" } diff --git a/tsconfig.types.json b/tsconfig.types.json new file mode 100644 index 0000000..0ef7cb3 --- /dev/null +++ b/tsconfig.types.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types", + "declaration": true, + "emitDeclarationOnly": true + } +} From d252d64b6fd53f5a4249ee6c58cd1d416169e564 Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Tue, 12 Nov 2024 19:06:35 +0100 Subject: [PATCH 03/23] feat: Added Buffer example feat: Changed README from bignumber.js to Buffer example --- README.md | 96 +++---- package-lock.json | 492 +++++++++++++++++++++++++++++++++++ package.json | 1 + src/examples/Buffer.ts | 60 +++++ src/examples/basic.ts | 13 +- src/examples/bigNumber.js.ts | 56 ---- src/examples/bignumber.js.ts | 61 +++++ 7 files changed, 675 insertions(+), 104 deletions(-) create mode 100644 src/examples/Buffer.ts delete mode 100644 src/examples/bigNumber.js.ts create mode 100644 src/examples/bignumber.js.ts diff --git a/README.md b/README.md index 79ff09e..d798488 100644 --- a/README.md +++ b/README.md @@ -13,80 +13,84 @@ import { parse, stringify } from '@softstack/typed-stringify'; const obj = { a: 'hello', b: [1, 2, 3, 4, 5] }; console.log(obj); -// { a: 'hello', b: [ 1, 2, 3, 4, 5 ] } +/* +{ a: 'hello', b: [ 1, 2, 3, 4, 5 ] } +*/ + const s = stringify(obj); console.log(s); -// {"a":{"t":"string","v":"hello"},"b":[{"t":"number","v":"1"},{"t":"number","v":"2"},{"t":"number","v":"3"},{"t":"number","v":"4"},{"t":"number","v":"5"}]} +/* +{"a":{"t":"string","v":"hello"},"b":[{"t":"number","v":"1"},{"t":"number","v":"2"},{"t":"number","v":"3"},{"t":"number","v":"4"},{"t":"number","v":"5"}]} +*/ + const d = parse(s); console.log(d); -// { a: 'hello', b: [ 1, 2, 3, 4, 5 ] } +/* +{ a: 'hello', b: [ 1, 2, 3, 4, 5 ] } +*/ ``` -Example which adds BigNumber +Example which adds Buffer ```typescript -import BigNumber from 'bignumber.js'; -import { - CustomParse, - CustomStringify, - isTypedValue, - parse, - stringify, - StringifyType, - TypedValue, -} from '@softstack/typed-stringify'; +import { CustomParse, CustomStringify, parse, stringify, StringifyType, TypedValue } from '@softstack/typed-stringify'; -type MyType = StringifyType | 'BigNumber'; +type MyType = StringifyType | 'Buffer'; const customStringify: CustomStringify = (obj) => { - if (obj instanceof BigNumber) { - return { t: 'BigNumber', v: obj.toString() }; + if (obj instanceof Buffer) { + return { t: 'Buffer', v: obj.toString('base64') }; } return undefined; }; const customParse: CustomParse = (obj) => { - if (isTypedValue(obj)) { - const { t, v } = obj as TypedValue; - if (t === 'BigNumber') { - if (v === undefined) { - throw new Error('No value'); - } - return { useResult: true, result: new BigNumber(v) }; + const { t, v } = obj as TypedValue; + if (t === 'Buffer') { + if (v === undefined) { + throw new Error('No value'); } + return { useResult: true, result: Buffer.from(v, 'base64') }; } return { useResult: false }; }; const obj = { a: 'hello', - b: [new BigNumber(1), new BigNumber(2), new BigNumber(3), new BigNumber(4), new BigNumber(5)], + b: [ + Buffer.from('123456789a', 'hex'), + Buffer.from('abcdefabcdef', 'hex'), + Buffer.from('123456789abcdef123456789abcdef', 'hex'), + ], }; console.log(obj); -// { -// a: 'hello', -// b: [ -// BigNumber { s: 1, e: 0, c: [Array] }, -// BigNumber { s: 1, e: 0, c: [Array] }, -// BigNumber { s: 1, e: 0, c: [Array] }, -// BigNumber { s: 1, e: 0, c: [Array] }, -// BigNumber { s: 1, e: 0, c: [Array] } -// ] -// } +/* +{ + a: 'hello', + b: [ + , + , + + ] +} +*/ const s = stringify(obj, { customStringify }); console.log(s); -// {"a":{"t":"string","v":"hello"},"b":[{"t":"BigNumber","v":"1"},{"t":"BigNumber","v":"2"},{"t":"BigNumber","v":"3"},{"t":"BigNumber","v":"4"},{"t":"BigNumber","v":"5"}]} +/* +{"a":{"t":"string","v":"hello"},"b":[{"t":"Buffer","v":"EjRWeJo="},{"t":"Buffer","v":"q83vq83v"},{"t":"Buffer","v":"EjRWeJq83vEjRWeJq83v"}]} +*/ + const d = parse(s, { customParse }); console.log(d); -// { -// a: 'hello', -// b: [ -// BigNumber { s: 1, e: 0, c: [Array] }, -// BigNumber { s: 1, e: 0, c: [Array] }, -// BigNumber { s: 1, e: 0, c: [Array] }, -// BigNumber { s: 1, e: 0, c: [Array] }, -// BigNumber { s: 1, e: 0, c: [Array] } -// ] -// } +/* +{ + a: 'hello', + b: [ + , + , + + ] +} +*/ ``` diff --git a/package-lock.json b/package-lock.json index 627286b..77100da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "lodash": "^4.17.21", "prettier": "^3.3.3", "ts-jest": "^29.2.5", + "tsx": "^4.19.2", "typescript": "^5.6.3", "typescript-eslint": "^8.14.0" } @@ -554,6 +555,414 @@ "dev": true, "license": "MIT" }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "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", @@ -2283,6 +2692,46 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -2898,6 +3347,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -4693,6 +5155,16 @@ "node": ">=4" } }, + "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.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", @@ -5098,6 +5570,26 @@ } } }, + "node_modules/tsx": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.2.tgz", + "integrity": "sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.23.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/package.json b/package.json index 8fb4343..f779333 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "lodash": "^4.17.21", "prettier": "^3.3.3", "ts-jest": "^29.2.5", + "tsx": "^4.19.2", "typescript": "^5.6.3", "typescript-eslint": "^8.14.0" } diff --git a/src/examples/Buffer.ts b/src/examples/Buffer.ts new file mode 100644 index 0000000..0e2bf50 --- /dev/null +++ b/src/examples/Buffer.ts @@ -0,0 +1,60 @@ +import { CustomParse, CustomStringify, parse, stringify, StringifyType, TypedValue } from '../index'; + +type MyType = StringifyType | 'Buffer'; + +const customStringify: CustomStringify = (obj) => { + if (obj instanceof Buffer) { + return { t: 'Buffer', v: obj.toString('base64') }; + } + return undefined; +}; + +const customParse: CustomParse = (obj) => { + const { t, v } = obj as TypedValue; + if (t === 'Buffer') { + if (v === undefined) { + throw new Error('No value'); + } + return { useResult: true, result: Buffer.from(v, 'base64') }; + } + return { useResult: false }; +}; + +const obj = { + a: 'hello', + b: [ + Buffer.from('123456789a', 'hex'), + Buffer.from('abcdefabcdef', 'hex'), + Buffer.from('123456789abcdef123456789abcdef', 'hex'), + ], +}; +console.log(obj); +/* +{ + a: 'hello', + b: [ + , + , + + ] +} +*/ + +const s = stringify(obj, { customStringify }); +console.log(s); +/* +{"a":{"t":"string","v":"hello"},"b":[{"t":"Buffer","v":"EjRWeJo="},{"t":"Buffer","v":"q83vq83v"},{"t":"Buffer","v":"EjRWeJq83vEjRWeJq83v"}]} +*/ + +const d = parse(s, { customParse }); +console.log(d); +/* +{ + a: 'hello', + b: [ + , + , + + ] +} +*/ diff --git a/src/examples/basic.ts b/src/examples/basic.ts index 94d53c7..e5fff6a 100644 --- a/src/examples/basic.ts +++ b/src/examples/basic.ts @@ -2,9 +2,18 @@ import { parse, stringify } from '../index'; const obj = { a: 'hello', b: [1, 2, 3, 4, 5] }; console.log(obj); +/* +{ a: 'hello', b: [ 1, 2, 3, 4, 5 ] } +*/ + const s = stringify(obj); console.log(s); -// {"a":{"t":"string","v":"hello"},"b":[{"t":"number","v":"1"},{"t":"number","v":"2"},{"t":"number","v":"3"},{"t":"number","v":"4"},{"t":"number","v":"5"}]} +/* +{"a":{"t":"string","v":"hello"},"b":[{"t":"number","v":"1"},{"t":"number","v":"2"},{"t":"number","v":"3"},{"t":"number","v":"4"},{"t":"number","v":"5"}]} +*/ + const d = parse(s); console.log(d); -// { a: 'hello', b: [ 1, 2, 3, 4, 5 ] } +/* +{ a: 'hello', b: [ 1, 2, 3, 4, 5 ] } +*/ diff --git a/src/examples/bigNumber.js.ts b/src/examples/bigNumber.js.ts deleted file mode 100644 index ad71c22..0000000 --- a/src/examples/bigNumber.js.ts +++ /dev/null @@ -1,56 +0,0 @@ -import BigNumber from 'bignumber.js'; -import { CustomParse, CustomStringify, isTypedValue, parse, stringify, StringifyType, TypedValue } from '../index'; - -type MyType = StringifyType | 'BigNumber'; - -const customStringify: CustomStringify = (obj) => { - if (obj instanceof BigNumber) { - return { t: 'BigNumber', v: obj.toString() }; - } - return undefined; -}; - -const customParse: CustomParse = (obj) => { - if (isTypedValue(obj)) { - const { t, v } = obj as TypedValue; - if (t === 'BigNumber') { - if (v === undefined) { - throw new Error('No value'); - } - return { useResult: true, result: new BigNumber(v) }; - } - } - return { useResult: false }; -}; - -const obj = { - a: 'hello', - b: [new BigNumber(1), new BigNumber(2), new BigNumber(3), new BigNumber(4), new BigNumber(5)], -}; -console.log(obj); -// { -// a: 'hello', -// b: [ -// BigNumber { s: 1, e: 0, c: [Array] }, -// BigNumber { s: 1, e: 0, c: [Array] }, -// BigNumber { s: 1, e: 0, c: [Array] }, -// BigNumber { s: 1, e: 0, c: [Array] }, -// BigNumber { s: 1, e: 0, c: [Array] } -// ] -// } - -const s = stringify(obj, { customStringify }); -console.log(s); -// {"a":{"t":"string","v":"hello"},"b":[{"t":"BigNumber","v":"1"},{"t":"BigNumber","v":"2"},{"t":"BigNumber","v":"3"},{"t":"BigNumber","v":"4"},{"t":"BigNumber","v":"5"}]} -const d = parse(s, { customParse }); -console.log(d); -// { -// a: 'hello', -// b: [ -// BigNumber { s: 1, e: 0, c: [Array] }, -// BigNumber { s: 1, e: 0, c: [Array] }, -// BigNumber { s: 1, e: 0, c: [Array] }, -// BigNumber { s: 1, e: 0, c: [Array] }, -// BigNumber { s: 1, e: 0, c: [Array] } -// ] -// } diff --git a/src/examples/bignumber.js.ts b/src/examples/bignumber.js.ts new file mode 100644 index 0000000..427a3d6 --- /dev/null +++ b/src/examples/bignumber.js.ts @@ -0,0 +1,61 @@ +import BigNumber from 'bignumber.js'; +import { CustomParse, CustomStringify, parse, stringify, StringifyType, TypedValue } from '../index'; + +type MyType = StringifyType | 'BigNumber'; + +const customStringify: CustomStringify = (obj) => { + if (obj instanceof BigNumber) { + return { t: 'BigNumber', v: obj.toString() }; + } + return undefined; +}; + +const customParse: CustomParse = (obj) => { + const { t, v } = obj as TypedValue; + if (t === 'BigNumber') { + if (v === undefined) { + throw new Error('No value'); + } + return { useResult: true, result: new BigNumber(v) }; + } + return { useResult: false }; +}; + +const obj = { + a: 'hello', + b: [new BigNumber(1), new BigNumber(2), new BigNumber(3), new BigNumber(4), new BigNumber(5)], +}; +console.log(obj); +/* +{ + a: 'hello', + b: [ + BigNumber { s: 1, e: 0, c: [Array] }, + BigNumber { s: 1, e: 0, c: [Array] }, + BigNumber { s: 1, e: 0, c: [Array] }, + BigNumber { s: 1, e: 0, c: [Array] }, + BigNumber { s: 1, e: 0, c: [Array] } + ] +} +*/ + +const s = stringify(obj, { customStringify }); +console.log(s); +/* +{"a":{"t":"string","v":"hello"},"b":[{"t":"BigNumber","v":"1"},{"t":"BigNumber","v":"2"},{"t":"BigNumber","v":"3"},{"t":"BigNumber","v":"4"},{"t":"BigNumber","v":"5"}]} +*/ + +const d = parse(s, { customParse }); +console.log(d); +/* +{ + a: 'hello', + b: [ + BigNumber { s: 1, e: 0, c: [Array] }, + BigNumber { s: 1, e: 0, c: [Array] }, + BigNumber { s: 1, e: 0, c: [Array] }, + BigNumber { s: 1, e: 0, c: [Array] }, + BigNumber { s: 1, e: 0, c: [Array] } + ] +} +*/ From 9715b7822594970189fa54c5e91ed539f87aa5b3 Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Tue, 12 Nov 2024 19:21:40 +0100 Subject: [PATCH 04/23] feat: Improved basic example --- README.md | 20 ++++++++++++++++---- src/examples/basic.ts | 20 ++++++++++++++++---- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index d798488..53098a5 100644 --- a/README.md +++ b/README.md @@ -11,22 +11,34 @@ Basic example ```typescript import { parse, stringify } from '@softstack/typed-stringify'; -const obj = { a: 'hello', b: [1, 2, 3, 4, 5] }; +const obj = { a: 'hello', b: [1, 2, 3, 4, 5], c: new Date(1_731_319_860_000), d: 123_345_789n, e: true }; console.log(obj); /* -{ a: 'hello', b: [ 1, 2, 3, 4, 5 ] } +{ + a: 'hello', + b: [ 1, 2, 3, 4, 5 ], + c: 2024-11-11T10:11:00.000Z, + d: 123345789n, + e: true +} */ const s = stringify(obj); console.log(s); /* -{"a":{"t":"string","v":"hello"},"b":[{"t":"number","v":"1"},{"t":"number","v":"2"},{"t":"number","v":"3"},{"t":"number","v":"4"},{"t":"number","v":"5"}]} +{"a":{"t":"string","v":"hello"},"b":[{"t":"number","v":"1"},{"t":"number","v":"2"},{"t":"number","v":"3"},{"t":"number","v":"4"},{"t":"number","v":"5"}],"c":{"t":"Date","v":"2024-11-11T10:11:00.000Z"},"d":{"t":"bigint","v":"123345789"},"e":{"t":"boolean","v":"1"}} */ const d = parse(s); console.log(d); /* -{ a: 'hello', b: [ 1, 2, 3, 4, 5 ] } +{ + a: 'hello', + b: [ 1, 2, 3, 4, 5 ], + c: 2024-11-11T10:11:00.000Z, + d: 123345789n, + e: true +} */ ``` diff --git a/src/examples/basic.ts b/src/examples/basic.ts index e5fff6a..aa61c00 100644 --- a/src/examples/basic.ts +++ b/src/examples/basic.ts @@ -1,19 +1,31 @@ import { parse, stringify } from '../index'; -const obj = { a: 'hello', b: [1, 2, 3, 4, 5] }; +const obj = { a: 'hello', b: [1, 2, 3, 4, 5], c: new Date(1_731_319_860_000), d: 123_345_789n, e: true }; console.log(obj); /* -{ a: 'hello', b: [ 1, 2, 3, 4, 5 ] } +{ + a: 'hello', + b: [ 1, 2, 3, 4, 5 ], + c: 2024-11-11T10:11:00.000Z, + d: 123345789n, + e: true +} */ const s = stringify(obj); console.log(s); /* -{"a":{"t":"string","v":"hello"},"b":[{"t":"number","v":"1"},{"t":"number","v":"2"},{"t":"number","v":"3"},{"t":"number","v":"4"},{"t":"number","v":"5"}]} +{"a":{"t":"string","v":"hello"},"b":[{"t":"number","v":"1"},{"t":"number","v":"2"},{"t":"number","v":"3"},{"t":"number","v":"4"},{"t":"number","v":"5"}],"c":{"t":"Date","v":"2024-11-11T10:11:00.000Z"},"d":{"t":"bigint","v":"123345789"},"e":{"t":"boolean","v":"1"}} */ const d = parse(s); console.log(d); /* -{ a: 'hello', b: [ 1, 2, 3, 4, 5 ] } +{ + a: 'hello', + b: [ 1, 2, 3, 4, 5 ], + c: 2024-11-11T10:11:00.000Z, + d: 123345789n, + e: true +} */ From 8a511f5fb4298a5a7d7f76171a46c838a2d5d5c6 Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Tue, 12 Nov 2024 20:17:54 +0100 Subject: [PATCH 05/23] feat: bigint can be stringified with radix between 2 and 36 --- dist/cjs/parse.js | 10 ++++++++++ dist/cjs/parse.js.map | 2 +- dist/cjs/stringify.js | 16 +++++++++++----- dist/cjs/stringify.js.map | 2 +- dist/esm/parse.js | 10 ++++++++++ dist/esm/parse.js.map | 2 +- dist/esm/stringify.js | 16 +++++++++++----- dist/esm/stringify.js.map | 2 +- dist/types/types.d.ts | 8 +++++++- src/__tests__/typedStringify.test.ts | 28 ++++++++++++++++++++++++---- src/parse.ts | 13 +++++++++++++ src/stringify.ts | 17 +++++++++++------ src/types.ts | 9 ++++++++- 13 files changed, 109 insertions(+), 26 deletions(-) diff --git a/dist/cjs/parse.js b/dist/cjs/parse.js index c8c8eb8..5b98cd2 100644 --- a/dist/cjs/parse.js +++ b/dist/cjs/parse.js @@ -30,6 +30,16 @@ const convertType = ({ t, v }) => { } switch (t) { case 'bigint': { + if (v.startsWith('r')) { + let radix = Number.parseInt(v[1], 36); + if (radix === 1) { + radix = 36; + } + const negative = v[2] === '-'; + const startIndex = negative ? 3 : 2; + const value = [v.slice(startIndex)].reduce((r, v) => r * BigInt(radix) + BigInt(Number.parseInt(v, radix)), BigInt(0)); + return negative ? -value : value; + } return BigInt(v); } case 'boolean': { diff --git a/dist/cjs/parse.js.map b/dist/cjs/parse.js.map index e176b9e..58b740c 100644 --- a/dist/cjs/parse.js.map +++ b/dist/cjs/parse.js.map @@ -1 +1 @@ -{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/stringify.js b/dist/cjs/stringify.js index 3e6d1ff..6a4bf53 100644 --- a/dist/cjs/stringify.js +++ b/dist/cjs/stringify.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.stringify = void 0; -const convertType = (obj, ignoreDataLoss) => { +const convertType = (obj, { ignoreDataLoss, bigintRadix }) => { if (obj === null) { return { t: 'null' }; } @@ -13,7 +13,13 @@ const convertType = (obj, ignoreDataLoss) => { } switch (typeof obj) { case 'bigint': { - return { t: 'bigint', v: obj.toString() }; + if (bigintRadix === 10) { + return { t: 'bigint', v: obj.toString() }; + } + else if (bigintRadix === 36) { + return { t: 'bigint', v: 'r1' + obj.toString(bigintRadix) }; + } + return { t: 'bigint', v: 'r' + bigintRadix.toString(36) + obj.toString(bigintRadix) }; } case 'boolean': { return { t: 'boolean', v: obj ? '1' : '0' }; @@ -37,9 +43,9 @@ const convertType = (obj, ignoreDataLoss) => { throw new Error(`Unknown datatype: ${typeof obj}`); }; const decent = (obj, options) => { - const { customStringify, ignoreDataLoss = false } = options; + const { customStringify, ignoreDataLoss = false, bigintRadix = 10 } = options; if (customStringify) { - const tmpObj = customStringify(obj, { ignoreDataLoss }); + const tmpObj = customStringify(obj, { ignoreDataLoss, bigintRadix }); if (tmpObj) { return tmpObj; } @@ -54,7 +60,7 @@ const decent = (obj, options) => { } return tmpObj; } - return convertType(obj, ignoreDataLoss); + return convertType(obj, { ignoreDataLoss, bigintRadix }); }; const stringify = (obj, options = {}) => JSON.stringify(decent(obj, options)); exports.stringify = stringify; diff --git a/dist/cjs/stringify.js.map b/dist/cjs/stringify.js.map index be3be13..77178ea 100644 --- a/dist/cjs/stringify.js.map +++ b/dist/cjs/stringify.js.map @@ -1 +1 @@ -{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":";;;AAEA,MAAM,WAAW,GAAG,CAAC,GAAY,EAAE,cAAuB,EAAc,EAAE;IACzE,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,CAAC;IACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI,GAAG,YAAY,IAAI,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;IAC5C,CAAC;IACD,QAAQ,OAAO,GAAG,EAAE,CAAC;QACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC3C,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7C,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACtE,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;QAC1B,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC3C,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QAChC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,CAAC;IACF,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,GAAG,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAmC,GAAY,EAAE,OAA4B,EAAW,EAAE;IACxG,MAAM,EAAE,eAAe,EAAE,cAAc,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAC5D,IAAI,eAAe,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;QACxD,IAAI,MAAM,EAAE,CAAC;YACZ,OAAO,MAAM,CAAC;QACf,CAAC;IACF,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC,EAAE,CAAC;QACrE,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IACD,OAAO,WAAW,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AACzC,CAAC,CAAC;AAEK,MAAM,SAAS,GAAG,CAAmC,GAAY,EAAE,UAA+B,EAAE,EAAU,EAAE,CACtH,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AADzB,QAAA,SAAS,aACgB"} \ No newline at end of file +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/parse.js b/dist/esm/parse.js index 207eafe..6623e7c 100644 --- a/dist/esm/parse.js +++ b/dist/esm/parse.js @@ -26,6 +26,16 @@ const convertType = ({ t, v }) => { } switch (t) { case 'bigint': { + if (v.startsWith('r')) { + let radix = Number.parseInt(v[1], 36); + if (radix === 1) { + radix = 36; + } + const negative = v[2] === '-'; + const startIndex = negative ? 3 : 2; + const value = [v.slice(startIndex)].reduce((r, v) => r * BigInt(radix) + BigInt(Number.parseInt(v, radix)), BigInt(0)); + return negative ? -value : value; + } return BigInt(v); } case 'boolean': { diff --git a/dist/esm/parse.js.map b/dist/esm/parse.js.map index 2395df9..00f35b0 100644 --- a/dist/esm/parse.js.map +++ b/dist/esm/parse.js.map @@ -1 +1 @@ -{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAG,CAA2B,MAAS,EAAE,QAAW,EAAoC,EAAE,CAC7G,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAExD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAY,EAAqB,EAAE;IAC/D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACtF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC1G,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAc,EAAyE,EAAE;IACnH,QAAQ,CAAC,EAAE,CAAC;QACX,KAAK,UAAU,CAAC,CAAC,CAAC;YACjB,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,OAAO,IAAI,CAAC,CAAC,sCAAsC;QACpD,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YAClB,OAAO,SAAS,CAAC;QAClB,CAAC;IACF,CAAC;IACD,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7B,CAAC;IACD,QAAQ,CAAC,EAAE,CAAC;QACX,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,KAAK,GAAG,CAAC;QAClB,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,CAAC,CAAC;QACV,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC;IACF,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,GAAY,EAAE,OAAqB,EAAW,EAAE;IAC/D,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC3C,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;YAChC,IAAI,WAAW,EAAE,CAAC;gBACjB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gBAC/C,IAAI,SAAS,EAAE,CAAC;oBACf,OAAO,MAAM,CAAC;gBACf,CAAC;YACF,CAAC;YACD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,UAAwB,EAAE,EAAW,EAAE;IACvE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/stringify.js b/dist/esm/stringify.js index 6332275..ff32b02 100644 --- a/dist/esm/stringify.js +++ b/dist/esm/stringify.js @@ -1,4 +1,4 @@ -const convertType = (obj, ignoreDataLoss) => { +const convertType = (obj, { ignoreDataLoss, bigintRadix }) => { if (obj === null) { return { t: 'null' }; } @@ -10,7 +10,13 @@ const convertType = (obj, ignoreDataLoss) => { } switch (typeof obj) { case 'bigint': { - return { t: 'bigint', v: obj.toString() }; + if (bigintRadix === 10) { + return { t: 'bigint', v: obj.toString() }; + } + else if (bigintRadix === 36) { + return { t: 'bigint', v: 'r1' + obj.toString(bigintRadix) }; + } + return { t: 'bigint', v: 'r' + bigintRadix.toString(36) + obj.toString(bigintRadix) }; } case 'boolean': { return { t: 'boolean', v: obj ? '1' : '0' }; @@ -34,9 +40,9 @@ const convertType = (obj, ignoreDataLoss) => { throw new Error(`Unknown datatype: ${typeof obj}`); }; const decent = (obj, options) => { - const { customStringify, ignoreDataLoss = false } = options; + const { customStringify, ignoreDataLoss = false, bigintRadix = 10 } = options; if (customStringify) { - const tmpObj = customStringify(obj, { ignoreDataLoss }); + const tmpObj = customStringify(obj, { ignoreDataLoss, bigintRadix }); if (tmpObj) { return tmpObj; } @@ -51,7 +57,7 @@ const decent = (obj, options) => { } return tmpObj; } - return convertType(obj, ignoreDataLoss); + return convertType(obj, { ignoreDataLoss, bigintRadix }); }; export const stringify = (obj, options = {}) => JSON.stringify(decent(obj, options)); //# sourceMappingURL=stringify.js.map \ No newline at end of file diff --git a/dist/esm/stringify.js.map b/dist/esm/stringify.js.map index a485d78..22400e5 100644 --- a/dist/esm/stringify.js.map +++ b/dist/esm/stringify.js.map @@ -1 +1 @@ -{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types/types.d.ts b/dist/types/types.d.ts index 8ba1130..b799d58 100644 --- a/dist/types/types.d.ts +++ b/dist/types/types.d.ts @@ -4,12 +4,18 @@ export interface TypedValue { v?: string; } export interface CustomStringifyOptions { - ignoreDataLoss?: boolean; + ignoreDataLoss: boolean; + bigintRadix: number; } export type CustomStringify = (obj: unknown, options: CustomStringifyOptions) => TypedValue | undefined; export interface StringifyOptions { customStringify?: CustomStringify; ignoreDataLoss?: boolean; + bigintRadix?: number; +} +export interface ConvertTypeOptions { + ignoreDataLoss: boolean; + bigintRadix: number; } export type CustomParse = (obj: TypedValue) => { useResult: boolean; diff --git a/src/__tests__/typedStringify.test.ts b/src/__tests__/typedStringify.test.ts index b3fee52..00118e7 100644 --- a/src/__tests__/typedStringify.test.ts +++ b/src/__tests__/typedStringify.test.ts @@ -28,7 +28,7 @@ const bigTestObject = { b: 'bbbbbbbbbbb', c: null, // eslint-disable-line unicorn/no-null d: undefined, - e: new Date(), + e: new Date(1_731_319_860_000), f: new BigNumber(12_345.6789), }, v: { @@ -88,8 +88,28 @@ test('bigint', () => { expect(isEqual(obj, parse(stringify(obj)))).toBe(true); }); +test('bigint radix 16', () => { + const obj = BigInt(123); + expect(isEqual(obj, parse(stringify(obj, { bigintRadix: 16 })))).toBe(true); +}); + +test('bigint radix 36', () => { + const obj = BigInt(123_456_789); + expect(isEqual(obj, parse(stringify(obj, { bigintRadix: 16 })))).toBe(true); +}); + +test('negative bigint radix 36', () => { + const obj = BigInt(-123_456_789); + expect(isEqual(obj, parse(stringify(obj, { bigintRadix: 16 })))).toBe(true); +}); + +test('bigint radix 37', () => { + const obj = BigInt(123_456_789); + expect(() => parse(stringify(obj, { bigintRadix: 37 }))).toThrow(RangeError); +}); + test('Date', () => { - const obj = new Date(); + const obj = new Date(1_731_319_860_000); expect(isEqual(obj, parse(stringify(obj)))).toBe(true); }); @@ -124,6 +144,6 @@ test('Function', () => { test('Function without "ignoreDataLoss = true" should throw an error', () => { const obj = (): void => undefined; // eslint-disable-line unicorn/consistent-function-scoping - expect(() => parse(stringify(obj))).toThrow(); - expect(() => parse(stringify(obj, { ignoreDataLoss: false }))).toThrow(); + expect(() => parse(stringify(obj))).toThrow(Error); + expect(() => parse(stringify(obj, { ignoreDataLoss: false }))).toThrow(Error); }); diff --git a/src/parse.ts b/src/parse.ts index 55dd4c4..0b5e1e5 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -31,6 +31,19 @@ const convertType = ({ t, v }: TypedValue): bigint | boolean | Date | null | num } switch (t) { case 'bigint': { + if (v.startsWith('r')) { + let radix = Number.parseInt(v[1], 36); + if (radix === 1) { + radix = 36; + } + const negative = v[2] === '-'; + const startIndex = negative ? 3 : 2; + const value = [v.slice(startIndex)].reduce( + (r, v) => r * BigInt(radix) + BigInt(Number.parseInt(v, radix)), + BigInt(0), + ); + return negative ? -value : value; + } return BigInt(v); } case 'boolean': { diff --git a/src/stringify.ts b/src/stringify.ts index 2b9dcae..7a5eb7f 100644 --- a/src/stringify.ts +++ b/src/stringify.ts @@ -1,6 +1,6 @@ -import { StringifyOptions, StringifyType, TypedValue } from './types'; +import { ConvertTypeOptions, StringifyOptions, StringifyType, TypedValue } from './types'; -const convertType = (obj: unknown, ignoreDataLoss: boolean): TypedValue => { +const convertType = (obj: unknown, { ignoreDataLoss, bigintRadix }: ConvertTypeOptions): TypedValue => { if (obj === null) { return { t: 'null' }; } @@ -12,7 +12,12 @@ const convertType = (obj: unknown, ignoreDataLoss: boolean): TypedValue => { } switch (typeof obj) { case 'bigint': { - return { t: 'bigint', v: obj.toString() }; + if (bigintRadix === 10) { + return { t: 'bigint', v: obj.toString() }; + } else if (bigintRadix === 36) { + return { t: 'bigint', v: 'r1' + obj.toString(bigintRadix) }; + } + return { t: 'bigint', v: 'r' + bigintRadix.toString(36) + obj.toString(bigintRadix) }; } case 'boolean': { return { t: 'boolean', v: obj ? '1' : '0' }; @@ -37,9 +42,9 @@ const convertType = (obj: unknown, ignoreDataLoss: boolean): TypedValue => { }; const decent = (obj: unknown, options: StringifyOptions): unknown => { - const { customStringify, ignoreDataLoss = false } = options; + const { customStringify, ignoreDataLoss = false, bigintRadix = 10 } = options; if (customStringify) { - const tmpObj = customStringify(obj, { ignoreDataLoss }); + const tmpObj = customStringify(obj, { ignoreDataLoss, bigintRadix }); if (tmpObj) { return tmpObj; } @@ -53,7 +58,7 @@ const decent = (obj: unknown, options: Stringi } return tmpObj; } - return convertType(obj, ignoreDataLoss); + return convertType(obj, { ignoreDataLoss, bigintRadix }); }; export const stringify = (obj: unknown, options: StringifyOptions = {}): string => diff --git a/src/types.ts b/src/types.ts index dd6cfe3..79583b7 100644 --- a/src/types.ts +++ b/src/types.ts @@ -15,7 +15,8 @@ export interface TypedValue { } export interface CustomStringifyOptions { - ignoreDataLoss?: boolean; + ignoreDataLoss: boolean; + bigintRadix: number; } export type CustomStringify = ( @@ -26,6 +27,12 @@ export type CustomStringify = ( export interface StringifyOptions { customStringify?: CustomStringify; ignoreDataLoss?: boolean; + bigintRadix?: number; +} + +export interface ConvertTypeOptions { + ignoreDataLoss: boolean; + bigintRadix: number; } export type CustomParse = (obj: TypedValue) => { useResult: boolean; result?: unknown }; From 567c5b88107bcdb38b27811336a6d2dd5b32c323 Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Wed, 13 Nov 2024 12:48:40 +0100 Subject: [PATCH 06/23] feat: Changed bigint radix coding refactor: Renamed ignoreDataLoss to ignoreFunctions feat: Added Buffer to tests --- dist/cjs/parse.js | 2 +- dist/cjs/stringify.js | 18 ++++++++-------- dist/cjs/stringify.js.map | 2 +- dist/esm/parse.js | 2 +- dist/esm/stringify.js | 18 ++++++++-------- dist/esm/stringify.js.map | 2 +- dist/types/types.d.ts | 6 +++--- src/__tests__/typedStringify.test.ts | 31 +++++++++++++++++++++------- src/parse.ts | 2 +- src/stringify.ts | 17 ++++++++------- src/types.ts | 6 +++--- 11 files changed, 61 insertions(+), 45 deletions(-) diff --git a/dist/cjs/parse.js b/dist/cjs/parse.js index 5b98cd2..b6df70b 100644 --- a/dist/cjs/parse.js +++ b/dist/cjs/parse.js @@ -32,7 +32,7 @@ const convertType = ({ t, v }) => { case 'bigint': { if (v.startsWith('r')) { let radix = Number.parseInt(v[1], 36); - if (radix === 1) { + if (radix === 0) { radix = 36; } const negative = v[2] === '-'; diff --git a/dist/cjs/stringify.js b/dist/cjs/stringify.js index 6a4bf53..425dfb8 100644 --- a/dist/cjs/stringify.js +++ b/dist/cjs/stringify.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.stringify = void 0; -const convertType = (obj, { ignoreDataLoss, bigintRadix }) => { +const convertType = (obj, { ignoreFunctions, bigintRadix }) => { if (obj === null) { return { t: 'null' }; } @@ -13,19 +13,19 @@ const convertType = (obj, { ignoreDataLoss, bigintRadix }) => { } switch (typeof obj) { case 'bigint': { + if (!Number.isInteger(bigintRadix) || bigintRadix < 2 || bigintRadix > 36) { + throw new RangeError('bigintRadix must be an integer between 2 and 36'); + } if (bigintRadix === 10) { return { t: 'bigint', v: obj.toString() }; } - else if (bigintRadix === 36) { - return { t: 'bigint', v: 'r1' + obj.toString(bigintRadix) }; - } - return { t: 'bigint', v: 'r' + bigintRadix.toString(36) + obj.toString(bigintRadix) }; + return { t: 'bigint', v: 'r' + bigintRadix.toString(36).slice(-1) + obj.toString(bigintRadix) }; } case 'boolean': { return { t: 'boolean', v: obj ? '1' : '0' }; } case 'function': { - if (!ignoreDataLoss) { + if (!ignoreFunctions) { throw new Error('Function can not be stringified without data loss'); } return { t: 'function' }; @@ -43,9 +43,9 @@ const convertType = (obj, { ignoreDataLoss, bigintRadix }) => { throw new Error(`Unknown datatype: ${typeof obj}`); }; const decent = (obj, options) => { - const { customStringify, ignoreDataLoss = false, bigintRadix = 10 } = options; + const { customStringify, ignoreFunctions = false, bigintRadix = 10 } = options; if (customStringify) { - const tmpObj = customStringify(obj, { ignoreDataLoss, bigintRadix }); + const tmpObj = customStringify(obj, { ignoreFunctions, bigintRadix }); if (tmpObj) { return tmpObj; } @@ -60,7 +60,7 @@ const decent = (obj, options) => { } return tmpObj; } - return convertType(obj, { ignoreDataLoss, bigintRadix }); + return convertType(obj, { ignoreFunctions, bigintRadix }); }; const stringify = (obj, options = {}) => JSON.stringify(decent(obj, options)); exports.stringify = stringify; diff --git a/dist/cjs/stringify.js.map b/dist/cjs/stringify.js.map index 77178ea..ecdd565 100644 --- a/dist/cjs/stringify.js.map +++ b/dist/cjs/stringify.js.map @@ -1 +1 @@ -{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/parse.js b/dist/esm/parse.js index 6623e7c..c871272 100644 --- a/dist/esm/parse.js +++ b/dist/esm/parse.js @@ -28,7 +28,7 @@ const convertType = ({ t, v }) => { case 'bigint': { if (v.startsWith('r')) { let radix = Number.parseInt(v[1], 36); - if (radix === 1) { + if (radix === 0) { radix = 36; } const negative = v[2] === '-'; diff --git a/dist/esm/stringify.js b/dist/esm/stringify.js index ff32b02..1c181c2 100644 --- a/dist/esm/stringify.js +++ b/dist/esm/stringify.js @@ -1,4 +1,4 @@ -const convertType = (obj, { ignoreDataLoss, bigintRadix }) => { +const convertType = (obj, { ignoreFunctions, bigintRadix }) => { if (obj === null) { return { t: 'null' }; } @@ -10,19 +10,19 @@ const convertType = (obj, { ignoreDataLoss, bigintRadix }) => { } switch (typeof obj) { case 'bigint': { + if (!Number.isInteger(bigintRadix) || bigintRadix < 2 || bigintRadix > 36) { + throw new RangeError('bigintRadix must be an integer between 2 and 36'); + } if (bigintRadix === 10) { return { t: 'bigint', v: obj.toString() }; } - else if (bigintRadix === 36) { - return { t: 'bigint', v: 'r1' + obj.toString(bigintRadix) }; - } - return { t: 'bigint', v: 'r' + bigintRadix.toString(36) + obj.toString(bigintRadix) }; + return { t: 'bigint', v: 'r' + bigintRadix.toString(36).slice(-1) + obj.toString(bigintRadix) }; } case 'boolean': { return { t: 'boolean', v: obj ? '1' : '0' }; } case 'function': { - if (!ignoreDataLoss) { + if (!ignoreFunctions) { throw new Error('Function can not be stringified without data loss'); } return { t: 'function' }; @@ -40,9 +40,9 @@ const convertType = (obj, { ignoreDataLoss, bigintRadix }) => { throw new Error(`Unknown datatype: ${typeof obj}`); }; const decent = (obj, options) => { - const { customStringify, ignoreDataLoss = false, bigintRadix = 10 } = options; + const { customStringify, ignoreFunctions = false, bigintRadix = 10 } = options; if (customStringify) { - const tmpObj = customStringify(obj, { ignoreDataLoss, bigintRadix }); + const tmpObj = customStringify(obj, { ignoreFunctions, bigintRadix }); if (tmpObj) { return tmpObj; } @@ -57,7 +57,7 @@ const decent = (obj, options) => { } return tmpObj; } - return convertType(obj, { ignoreDataLoss, bigintRadix }); + return convertType(obj, { ignoreFunctions, bigintRadix }); }; export const stringify = (obj, options = {}) => JSON.stringify(decent(obj, options)); //# sourceMappingURL=stringify.js.map \ No newline at end of file diff --git a/dist/esm/stringify.js.map b/dist/esm/stringify.js.map index 22400e5..d0a733b 100644 --- a/dist/esm/stringify.js.map +++ b/dist/esm/stringify.js.map @@ -1 +1 @@ -{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types/types.d.ts b/dist/types/types.d.ts index b799d58..0233b8a 100644 --- a/dist/types/types.d.ts +++ b/dist/types/types.d.ts @@ -4,17 +4,17 @@ export interface TypedValue { v?: string; } export interface CustomStringifyOptions { - ignoreDataLoss: boolean; + ignoreFunctions: boolean; bigintRadix: number; } export type CustomStringify = (obj: unknown, options: CustomStringifyOptions) => TypedValue | undefined; export interface StringifyOptions { customStringify?: CustomStringify; - ignoreDataLoss?: boolean; + ignoreFunctions?: boolean; bigintRadix?: number; } export interface ConvertTypeOptions { - ignoreDataLoss: boolean; + ignoreFunctions: boolean; bigintRadix: number; } export type CustomParse = (obj: TypedValue) => { diff --git a/src/__tests__/typedStringify.test.ts b/src/__tests__/typedStringify.test.ts index 00118e7..2a0b30c 100644 --- a/src/__tests__/typedStringify.test.ts +++ b/src/__tests__/typedStringify.test.ts @@ -2,22 +2,32 @@ import BigNumber from 'bignumber.js'; import { isEqual } from 'lodash'; import { CustomParse, CustomStringify, parse, stringify, StringifyType, TypedValue } from '../index'; -type TestType = StringifyType | 'BigNumber'; +type TestType = StringifyType | 'BigNumber' | 'Buffer'; const customStringify: CustomStringify = (obj) => { if (obj instanceof BigNumber) { return { t: 'BigNumber', v: obj.toString() }; + } else if (obj instanceof Buffer) { + return { t: 'Buffer', v: obj.toString('base64') }; } return undefined; }; const customParse: CustomParse = (typedValue: TypedValue) => { const { t, v } = typedValue; - if (t === 'BigNumber') { - if (v === undefined) { - throw new Error('No value'); + switch (t) { + case 'BigNumber': { + if (v === undefined) { + throw new Error("Value of BigNumber can't be undefined"); + } + return { useResult: true, result: new BigNumber(v) }; + } + case 'Buffer': { + if (v === undefined) { + throw new Error("Value of Buffer can't be undefined"); + } + return { useResult: true, result: Buffer.from(v, 'base64') }; } - return { useResult: true, result: new BigNumber(v) }; } return { useResult: false }; }; @@ -127,6 +137,11 @@ test('BigNumber', () => { expect(isEqual(obj, parse(stringify(obj, { customStringify }), { customParse }))).toBe(true); }); +test('Buffer', () => { + const obj = Buffer.from('Hello world!'); + expect(isEqual(obj, parse(stringify(obj, { customStringify }), { customParse }))).toBe(true); +}); + test('Symbol()', () => { const obj = Symbol(); expect(typeof parse(stringify(obj)) === 'symbol').toBe(true); @@ -139,11 +154,11 @@ test('Symbol.for("test")', () => { test('Function', () => { const obj = (): void => undefined; - expect(isEqual(undefined, parse(stringify(obj, { ignoreDataLoss: true })))).toBe(true); + expect(isEqual(undefined, parse(stringify(obj, { ignoreFunctions: true })))).toBe(true); }); -test('Function without "ignoreDataLoss = true" should throw an error', () => { +test('Function without "ignoreFunctions = true" should throw an error', () => { const obj = (): void => undefined; // eslint-disable-line unicorn/consistent-function-scoping expect(() => parse(stringify(obj))).toThrow(Error); - expect(() => parse(stringify(obj, { ignoreDataLoss: false }))).toThrow(Error); + expect(() => parse(stringify(obj, { ignoreFunctions: false }))).toThrow(Error); }); diff --git a/src/parse.ts b/src/parse.ts index 0b5e1e5..f9ae302 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -33,7 +33,7 @@ const convertType = ({ t, v }: TypedValue): bigint | boolean | Date | null | num case 'bigint': { if (v.startsWith('r')) { let radix = Number.parseInt(v[1], 36); - if (radix === 1) { + if (radix === 0) { radix = 36; } const negative = v[2] === '-'; diff --git a/src/stringify.ts b/src/stringify.ts index 7a5eb7f..c079e60 100644 --- a/src/stringify.ts +++ b/src/stringify.ts @@ -1,6 +1,6 @@ import { ConvertTypeOptions, StringifyOptions, StringifyType, TypedValue } from './types'; -const convertType = (obj: unknown, { ignoreDataLoss, bigintRadix }: ConvertTypeOptions): TypedValue => { +const convertType = (obj: unknown, { ignoreFunctions, bigintRadix }: ConvertTypeOptions): TypedValue => { if (obj === null) { return { t: 'null' }; } @@ -12,18 +12,19 @@ const convertType = (obj: unknown, { ignoreDataLoss, bigintRadix }: ConvertTypeO } switch (typeof obj) { case 'bigint': { + if (!Number.isInteger(bigintRadix) || bigintRadix < 2 || bigintRadix > 36) { + throw new RangeError('bigintRadix must be an integer between 2 and 36'); + } if (bigintRadix === 10) { return { t: 'bigint', v: obj.toString() }; - } else if (bigintRadix === 36) { - return { t: 'bigint', v: 'r1' + obj.toString(bigintRadix) }; } - return { t: 'bigint', v: 'r' + bigintRadix.toString(36) + obj.toString(bigintRadix) }; + return { t: 'bigint', v: 'r' + bigintRadix.toString(36).slice(-1) + obj.toString(bigintRadix) }; } case 'boolean': { return { t: 'boolean', v: obj ? '1' : '0' }; } case 'function': { - if (!ignoreDataLoss) { + if (!ignoreFunctions) { throw new Error('Function can not be stringified without data loss'); } return { t: 'function' }; @@ -42,9 +43,9 @@ const convertType = (obj: unknown, { ignoreDataLoss, bigintRadix }: ConvertTypeO }; const decent = (obj: unknown, options: StringifyOptions): unknown => { - const { customStringify, ignoreDataLoss = false, bigintRadix = 10 } = options; + const { customStringify, ignoreFunctions = false, bigintRadix = 10 } = options; if (customStringify) { - const tmpObj = customStringify(obj, { ignoreDataLoss, bigintRadix }); + const tmpObj = customStringify(obj, { ignoreFunctions, bigintRadix }); if (tmpObj) { return tmpObj; } @@ -58,7 +59,7 @@ const decent = (obj: unknown, options: Stringi } return tmpObj; } - return convertType(obj, { ignoreDataLoss, bigintRadix }); + return convertType(obj, { ignoreFunctions, bigintRadix }); }; export const stringify = (obj: unknown, options: StringifyOptions = {}): string => diff --git a/src/types.ts b/src/types.ts index 79583b7..da83c72 100644 --- a/src/types.ts +++ b/src/types.ts @@ -15,7 +15,7 @@ export interface TypedValue { } export interface CustomStringifyOptions { - ignoreDataLoss: boolean; + ignoreFunctions: boolean; bigintRadix: number; } @@ -26,12 +26,12 @@ export type CustomStringify = ( export interface StringifyOptions { customStringify?: CustomStringify; - ignoreDataLoss?: boolean; + ignoreFunctions?: boolean; bigintRadix?: number; } export interface ConvertTypeOptions { - ignoreDataLoss: boolean; + ignoreFunctions: boolean; bigintRadix: number; } From 457d221e17607a1342b70cdd6ea0562476e38cd2 Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Wed, 13 Nov 2024 14:16:23 +0100 Subject: [PATCH 07/23] feat: Added dateFormat option feat: Added skipNull option feat: Added skipUndefined option feat: Added more tests --- dist/cjs/parse.js | 2 +- dist/cjs/parse.js.map | 2 +- dist/cjs/stringify.js | 36 +++++++++++++++-------- dist/cjs/stringify.js.map | 2 +- dist/esm/parse.js | 2 +- dist/esm/parse.js.map | 2 +- dist/esm/stringify.js | 36 +++++++++++++++-------- dist/esm/stringify.js.map | 2 +- dist/types/types.d.ts | 24 +++++++++------ src/__tests__/typedStringify.test.ts | 38 ++++++++++++++++++++---- src/parse.ts | 2 +- src/stringify.ts | 44 +++++++++++++++++----------- src/types.ts | 24 +++++++++------ 13 files changed, 142 insertions(+), 74 deletions(-) diff --git a/dist/cjs/parse.js b/dist/cjs/parse.js index b6df70b..35ebd2c 100644 --- a/dist/cjs/parse.js +++ b/dist/cjs/parse.js @@ -46,7 +46,7 @@ const convertType = ({ t, v }) => { return v === '1'; } case 'Date': { - return new Date(v); + return v.includes('T') ? new Date(v) : new Date(Number(v)); } case 'number': { return Number(v); diff --git a/dist/cjs/parse.js.map b/dist/cjs/parse.js.map index 58b740c..bbf8fc6 100644 --- a/dist/cjs/parse.js.map +++ b/dist/cjs/parse.js.map @@ -1 +1 @@ -{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/stringify.js b/dist/cjs/stringify.js index 425dfb8..02ef9ec 100644 --- a/dist/cjs/stringify.js +++ b/dist/cjs/stringify.js @@ -1,15 +1,15 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.stringify = void 0; -const convertType = (obj, { ignoreFunctions, bigintRadix }) => { +const convertType = (obj, { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined }) => { if (obj === null) { - return { t: 'null' }; + return skipNull ? undefined : { t: 'null' }; } - if (obj === undefined) { - return { t: 'undefined' }; + else if (obj === undefined) { + return skipUndefined ? undefined : { t: 'undefined' }; } - if (obj instanceof Date) { - return { t: 'Date', v: obj.toISOString() }; + else if (obj instanceof Date) { + return { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() }; } switch (typeof obj) { case 'bigint': { @@ -26,7 +26,7 @@ const convertType = (obj, { ignoreFunctions, bigintRadix }) => { } case 'function': { if (!ignoreFunctions) { - throw new Error('Function can not be stringified without data loss'); + throw new Error('Functions can not be stringified'); } return { t: 'function' }; } @@ -43,11 +43,11 @@ const convertType = (obj, { ignoreFunctions, bigintRadix }) => { throw new Error(`Unknown datatype: ${typeof obj}`); }; const decent = (obj, options) => { - const { customStringify, ignoreFunctions = false, bigintRadix = 10 } = options; + const { customStringify } = options; if (customStringify) { - const tmpObj = customStringify(obj, { ignoreFunctions, bigintRadix }); - if (tmpObj) { - return tmpObj; + const { useResult, result } = customStringify(obj, options); + if (useResult) { + return result; } } if (Array.isArray(obj)) { @@ -60,8 +60,18 @@ const decent = (obj, options) => { } return tmpObj; } - return convertType(obj, { ignoreFunctions, bigintRadix }); + return convertType(obj, options); +}; +const stringify = (obj, options = {}) => { + var _a, _b, _c, _d, _e; + return JSON.stringify(decent(obj, { + bigintRadix: (_a = options.bigintRadix) !== null && _a !== void 0 ? _a : 10, + customStringify: options.customStringify, + dateFormat: (_b = options.dateFormat) !== null && _b !== void 0 ? _b : 'iso', + ignoreFunctions: (_c = options.ignoreFunctions) !== null && _c !== void 0 ? _c : false, + skipNull: (_d = options.skipNull) !== null && _d !== void 0 ? _d : false, + skipUndefined: (_e = options.skipUndefined) !== null && _e !== void 0 ? _e : false, + })); }; -const stringify = (obj, options = {}) => JSON.stringify(decent(obj, options)); exports.stringify = stringify; //# sourceMappingURL=stringify.js.map \ No newline at end of file diff --git a/dist/cjs/stringify.js.map b/dist/cjs/stringify.js.map index ecdd565..ac6bf50 100644 --- a/dist/cjs/stringify.js.map +++ b/dist/cjs/stringify.js.map @@ -1 +1 @@ -{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/parse.js b/dist/esm/parse.js index c871272..61adc4f 100644 --- a/dist/esm/parse.js +++ b/dist/esm/parse.js @@ -42,7 +42,7 @@ const convertType = ({ t, v }) => { return v === '1'; } case 'Date': { - return new Date(v); + return v.includes('T') ? new Date(v) : new Date(Number(v)); } case 'number': { return Number(v); diff --git a/dist/esm/parse.js.map b/dist/esm/parse.js.map index 00f35b0..5fca2dd 100644 --- a/dist/esm/parse.js.map +++ b/dist/esm/parse.js.map @@ -1 +1 @@ -{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/stringify.js b/dist/esm/stringify.js index 1c181c2..8eb07bb 100644 --- a/dist/esm/stringify.js +++ b/dist/esm/stringify.js @@ -1,12 +1,12 @@ -const convertType = (obj, { ignoreFunctions, bigintRadix }) => { +const convertType = (obj, { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined }) => { if (obj === null) { - return { t: 'null' }; + return skipNull ? undefined : { t: 'null' }; } - if (obj === undefined) { - return { t: 'undefined' }; + else if (obj === undefined) { + return skipUndefined ? undefined : { t: 'undefined' }; } - if (obj instanceof Date) { - return { t: 'Date', v: obj.toISOString() }; + else if (obj instanceof Date) { + return { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() }; } switch (typeof obj) { case 'bigint': { @@ -23,7 +23,7 @@ const convertType = (obj, { ignoreFunctions, bigintRadix }) => { } case 'function': { if (!ignoreFunctions) { - throw new Error('Function can not be stringified without data loss'); + throw new Error('Functions can not be stringified'); } return { t: 'function' }; } @@ -40,11 +40,11 @@ const convertType = (obj, { ignoreFunctions, bigintRadix }) => { throw new Error(`Unknown datatype: ${typeof obj}`); }; const decent = (obj, options) => { - const { customStringify, ignoreFunctions = false, bigintRadix = 10 } = options; + const { customStringify } = options; if (customStringify) { - const tmpObj = customStringify(obj, { ignoreFunctions, bigintRadix }); - if (tmpObj) { - return tmpObj; + const { useResult, result } = customStringify(obj, options); + if (useResult) { + return result; } } if (Array.isArray(obj)) { @@ -57,7 +57,17 @@ const decent = (obj, options) => { } return tmpObj; } - return convertType(obj, { ignoreFunctions, bigintRadix }); + return convertType(obj, options); +}; +export const stringify = (obj, options = {}) => { + var _a, _b, _c, _d, _e; + return JSON.stringify(decent(obj, { + bigintRadix: (_a = options.bigintRadix) !== null && _a !== void 0 ? _a : 10, + customStringify: options.customStringify, + dateFormat: (_b = options.dateFormat) !== null && _b !== void 0 ? _b : 'iso', + ignoreFunctions: (_c = options.ignoreFunctions) !== null && _c !== void 0 ? _c : false, + skipNull: (_d = options.skipNull) !== null && _d !== void 0 ? _d : false, + skipUndefined: (_e = options.skipUndefined) !== null && _e !== void 0 ? _e : false, + })); }; -export const stringify = (obj, options = {}) => JSON.stringify(decent(obj, options)); //# sourceMappingURL=stringify.js.map \ No newline at end of file diff --git a/dist/esm/stringify.js.map b/dist/esm/stringify.js.map index d0a733b..812f4f1 100644 --- a/dist/esm/stringify.js.map +++ b/dist/esm/stringify.js.map @@ -1 +1 @@ -{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAG,CACnB,GAAY,EACZ,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAsB,EAChE,EAAE;IAC3B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7C,CAAC;SAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;IACvD,CAAC;SAAM,IAAI,GAAG,YAAY,IAAI,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9F,CAAC;IACD,QAAQ,OAAO,GAAG,EAAE,CAAC;QACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,EAAE,EAAE,CAAC;gBAC3E,MAAM,IAAI,UAAU,CAAC,iDAAiD,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;gBACxB,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3C,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACjG,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7C,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,eAAe,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;QAC1B,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC3C,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QAChC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,CAAC;IACF,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,GAAG,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAmC,GAAY,EAAE,OAAyB,EAAW,EAAE;IACrG,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IACpC,IAAI,eAAe,EAAE,CAAC;QACrB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC5D,IAAI,SAAS,EAAE,CAAC;YACf,OAAO,MAAM,CAAC;QACf,CAAC;IACF,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC,EAAE,CAAC;QACrE,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IACD,OAAO,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAmC,GAAY,EAAE,UAA+B,EAAE,EAAU,EAAE;;IACtH,OAAA,IAAI,CAAC,SAAS,CACb,MAAM,CAAC,GAAG,EAAE;QACX,WAAW,EAAE,MAAA,OAAO,CAAC,WAAW,mCAAI,EAAE;QACtC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,UAAU,EAAE,MAAA,OAAO,CAAC,UAAU,mCAAI,KAAK;QACvC,eAAe,EAAE,MAAA,OAAO,CAAC,eAAe,mCAAI,KAAK;QACjD,QAAQ,EAAE,MAAA,OAAO,CAAC,QAAQ,mCAAI,KAAK;QACnC,aAAa,EAAE,MAAA,OAAO,CAAC,aAAa,mCAAI,KAAK;KAC7C,CAAC,CACF,CAAA;CAAA,CAAC"} \ No newline at end of file diff --git a/dist/types/types.d.ts b/dist/types/types.d.ts index 0233b8a..bffb9f4 100644 --- a/dist/types/types.d.ts +++ b/dist/types/types.d.ts @@ -1,22 +1,28 @@ export type StringifyType = 'bigint' | 'boolean' | 'Date' | 'function' | 'null' | 'number' | 'string' | 'symbol' | 'undefined'; +export type DateFormat = 'iso' | 'number'; export interface TypedValue { t: T; v?: string; } -export interface CustomStringifyOptions { - ignoreFunctions: boolean; +export interface BaseOptions { bigintRadix: number; + dateFormat: DateFormat; + ignoreFunctions: boolean; + skipNull: boolean; + skipUndefined: boolean; } -export type CustomStringify = (obj: unknown, options: CustomStringifyOptions) => TypedValue | undefined; -export interface StringifyOptions { +export type CustomStringifyOptions = BaseOptions; +export type CustomStringify = (obj: unknown, options: CustomStringifyOptions) => { + useResult: boolean; + result?: TypedValue; +}; +export interface DecentOptions extends BaseOptions { customStringify?: CustomStringify; - ignoreFunctions?: boolean; - bigintRadix?: number; } -export interface ConvertTypeOptions { - ignoreFunctions: boolean; - bigintRadix: number; +export interface StringifyOptions extends Partial { + customStringify?: CustomStringify; } +export type ConvertTypeOptions = BaseOptions; export type CustomParse = (obj: TypedValue) => { useResult: boolean; result?: unknown; diff --git a/src/__tests__/typedStringify.test.ts b/src/__tests__/typedStringify.test.ts index 2a0b30c..97da04c 100644 --- a/src/__tests__/typedStringify.test.ts +++ b/src/__tests__/typedStringify.test.ts @@ -1,16 +1,16 @@ import BigNumber from 'bignumber.js'; -import { isEqual } from 'lodash'; +import { cloneDeep, isEqual } from 'lodash'; import { CustomParse, CustomStringify, parse, stringify, StringifyType, TypedValue } from '../index'; type TestType = StringifyType | 'BigNumber' | 'Buffer'; const customStringify: CustomStringify = (obj) => { if (obj instanceof BigNumber) { - return { t: 'BigNumber', v: obj.toString() }; + return { useResult: true, result: { t: 'BigNumber', v: obj.toString() } }; } else if (obj instanceof Buffer) { - return { t: 'Buffer', v: obj.toString('base64') }; + return { useResult: true, result: { t: 'Buffer', v: obj.toString('base64') } }; } - return undefined; + return { useResult: false }; }; const customParse: CustomParse = (typedValue: TypedValue) => { @@ -18,13 +18,13 @@ const customParse: CustomParse = (typedValue: TypedValue) => { switch (t) { case 'BigNumber': { if (v === undefined) { - throw new Error("Value of BigNumber can't be undefined"); + throw new Error('Value of BigNumber can not be undefined'); } return { useResult: true, result: new BigNumber(v) }; } case 'Buffer': { if (v === undefined) { - throw new Error("Value of Buffer can't be undefined"); + throw new Error('Value of Buffer can not be undefined'); } return { useResult: true, result: Buffer.from(v, 'base64') }; } @@ -83,6 +83,11 @@ test('string', () => { expect(isEqual(obj, parse(stringify(obj)))).toBe(true); }); +test('string with quotes', () => { + const obj = '"hello"'; + expect(isEqual(obj, parse(stringify(obj)))).toBe(true); +}); + test('number', () => { const obj = 123; expect(isEqual(obj, parse(stringify(obj)))).toBe(true); @@ -123,10 +128,31 @@ test('Date', () => { expect(isEqual(obj, parse(stringify(obj)))).toBe(true); }); +test('Date with dateFormat = "number"', () => { + const obj = new Date(1_731_319_860_000); + expect(isEqual(obj, parse(stringify(obj, { dateFormat: 'number' })))).toBe(true); +}); + test('Big object', () => { expect(isEqual(bigTestObject, parse(stringify(bigTestObject, { customStringify }), { customParse }))).toBe(true); }); +test('Big object with skipNull', () => { + const obj = cloneDeep(bigTestObject); + delete (obj.t as any).c; // eslint-disable-line @typescript-eslint/no-explicit-any + expect(isEqual(obj, parse(stringify(bigTestObject, { customStringify, skipNull: true }), { customParse }))).toBe( + true, + ); +}); + +test('Big object with skipUndefined', () => { + const obj = cloneDeep(bigTestObject); + delete (obj.t as any).d; // eslint-disable-line @typescript-eslint/no-explicit-any + expect(isEqual(obj, parse(stringify(bigTestObject, { customStringify, skipUndefined: true }), { customParse }))).toBe( + true, + ); +}); + test('Big array', () => { const obj = (Object.keys(bigTestObject) as Array).map((key) => bigTestObject[key]); expect(isEqual(obj, parse(stringify(obj, { customStringify }), { customParse }))).toBe(true); diff --git a/src/parse.ts b/src/parse.ts index f9ae302..9ab7816 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -50,7 +50,7 @@ const convertType = ({ t, v }: TypedValue): bigint | boolean | Date | null | num return v === '1'; } case 'Date': { - return new Date(v); + return v.includes('T') ? new Date(v) : new Date(Number(v)); } case 'number': { return Number(v); diff --git a/src/stringify.ts b/src/stringify.ts index c079e60..b330d99 100644 --- a/src/stringify.ts +++ b/src/stringify.ts @@ -1,14 +1,15 @@ -import { ConvertTypeOptions, StringifyOptions, StringifyType, TypedValue } from './types'; +import { ConvertTypeOptions, DecentOptions, StringifyOptions, StringifyType, TypedValue } from './types'; -const convertType = (obj: unknown, { ignoreFunctions, bigintRadix }: ConvertTypeOptions): TypedValue => { +const convertType = ( + obj: unknown, + { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined }: ConvertTypeOptions, +): TypedValue | undefined => { if (obj === null) { - return { t: 'null' }; - } - if (obj === undefined) { - return { t: 'undefined' }; - } - if (obj instanceof Date) { - return { t: 'Date', v: obj.toISOString() }; + return skipNull ? undefined : { t: 'null' }; + } else if (obj === undefined) { + return skipUndefined ? undefined : { t: 'undefined' }; + } else if (obj instanceof Date) { + return { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() }; } switch (typeof obj) { case 'bigint': { @@ -25,7 +26,7 @@ const convertType = (obj: unknown, { ignoreFunctions, bigintRadix }: ConvertType } case 'function': { if (!ignoreFunctions) { - throw new Error('Function can not be stringified without data loss'); + throw new Error('Functions can not be stringified'); } return { t: 'function' }; } @@ -42,12 +43,12 @@ const convertType = (obj: unknown, { ignoreFunctions, bigintRadix }: ConvertType throw new Error(`Unknown datatype: ${typeof obj}`); }; -const decent = (obj: unknown, options: StringifyOptions): unknown => { - const { customStringify, ignoreFunctions = false, bigintRadix = 10 } = options; +const decent = (obj: unknown, options: DecentOptions): unknown => { + const { customStringify } = options; if (customStringify) { - const tmpObj = customStringify(obj, { ignoreFunctions, bigintRadix }); - if (tmpObj) { - return tmpObj; + const { useResult, result } = customStringify(obj, options); + if (useResult) { + return result; } } if (Array.isArray(obj)) { @@ -59,8 +60,17 @@ const decent = (obj: unknown, options: Stringi } return tmpObj; } - return convertType(obj, { ignoreFunctions, bigintRadix }); + return convertType(obj, options); }; export const stringify = (obj: unknown, options: StringifyOptions = {}): string => - JSON.stringify(decent(obj, options)); + JSON.stringify( + decent(obj, { + bigintRadix: options.bigintRadix ?? 10, + customStringify: options.customStringify, + dateFormat: options.dateFormat ?? 'iso', + ignoreFunctions: options.ignoreFunctions ?? false, + skipNull: options.skipNull ?? false, + skipUndefined: options.skipUndefined ?? false, + }), + ); diff --git a/src/types.ts b/src/types.ts index da83c72..275fefe 100644 --- a/src/types.ts +++ b/src/types.ts @@ -9,32 +9,38 @@ export type StringifyType = | 'symbol' | 'undefined'; +export type DateFormat = 'iso' | 'number'; + export interface TypedValue { t: T; v?: string; } -export interface CustomStringifyOptions { - ignoreFunctions: boolean; +export interface BaseOptions { bigintRadix: number; + dateFormat: DateFormat; + ignoreFunctions: boolean; + skipNull: boolean; + skipUndefined: boolean; } +export type CustomStringifyOptions = BaseOptions; + export type CustomStringify = ( obj: unknown, options: CustomStringifyOptions, -) => TypedValue | undefined; +) => { useResult: boolean; result?: TypedValue }; -export interface StringifyOptions { +export interface DecentOptions extends BaseOptions { customStringify?: CustomStringify; - ignoreFunctions?: boolean; - bigintRadix?: number; } -export interface ConvertTypeOptions { - ignoreFunctions: boolean; - bigintRadix: number; +export interface StringifyOptions extends Partial { + customStringify?: CustomStringify; } +export type ConvertTypeOptions = BaseOptions; + export type CustomParse = (obj: TypedValue) => { useResult: boolean; result?: unknown }; export interface ParseOptions { From 54a2d3c5f0e8adf2b7b6b17e74eba1fd9b18043b Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Wed, 13 Nov 2024 17:05:26 +0100 Subject: [PATCH 08/23] bug: Fixed examples bug: Fixed README examples feat: Added API description to README bug: Fixed typing issues --- README.md | 106 ++++++++++++++++++++++++--- dist/cjs/parse.js | 7 +- dist/cjs/parse.js.map | 2 +- dist/cjs/stringify.js.map | 2 +- dist/esm/parse.js | 4 +- dist/esm/parse.js.map | 2 +- dist/esm/stringify.js.map | 2 +- dist/types/parse.d.ts | 5 +- dist/types/types.d.ts | 12 +-- src/__tests__/typedStringify.test.ts | 2 +- src/examples/Buffer.ts | 10 +-- src/examples/bignumber.js.ts | 6 +- src/parse.ts | 17 +++-- src/stringify.ts | 4 +- src/types.ts | 14 ++-- 15 files changed, 143 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index 53098a5..af373ce 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,96 @@ -## Features +# @softstack/typed-stringify -- Stringifies and parses objects while restoring the proper type on parse -- Built in types: bigint, boolean, Date, number, null, string, symbol and undefined -- Supports restoring custom types +@softstack/typed-stringify is a powerful TypeScript library designed to serialize and deserialize JavaScript objects while preserving their original types. This library ensures that complex data structures, including custom types, are accurately represented in JSON format and can be restored to their original form upon parsing. With a focus on type safety, modularity, and performance, @softstack/typed-stringify is an ideal solution for applications that require reliable and efficient data serialization. + +## Built-in Types + +- Primitive Types: + - bigint + - boolean + - null + - number + - string + - symbol + - undefined +- Complex Types: + - Array + - Date + - Object + +## API + +### stringify() + +The `stringify` function converts a JavaScript object into a JSON string while preserving the types of the values. It accepts an object and an optional configuration object as parameters. + +#### Parameters + +- `obj` (unknown): The object to be stringified. +- `options` (StringifyOptions): An optional configuration object that can include: + - `bigintRadix` (number): The radix to use for bigint serialization (default is 10). + - `customStringify` (CustomStringify): A custom stringify function for handling additional types. + - `dateFormat` ('iso' | 'number'): The format to use for Date serialization (default is 'iso'). + - `ignoreFunctions` (boolean): Whether to ignore functions during serialization (default is false). + - `skipNull` (boolean): Whether to skip null values during serialization (default is false). + - `skipUndefined` (boolean): Whether to skip undefined values during serialization (default is false). + +#### Returns + +- `string`: The JSON string representation of the object. + +### parse() + +The `parse` function converts a JSON string back into a JavaScript object while restoring the types of the values. It accepts a JSON string and an optional configuration object as parameters. + +#### Parameters + +- `s` (string): The JSON string to be parsed. +- `options` (ParseOptions): An optional configuration object that can include: + - `customParse` (CustomParse): A custom parse function for handling additional types. + +#### Returns + +- `unknown`: The JavaScript object representation of the JSON string. + +## Custom Functions + +### customStringify() + +The `customStringify` function allows you to define custom serialization logic for additional types that are not handled by the default `stringify` function. This function can be provided as part of the `options` parameter when calling `stringify`. + +#### Parameters + +- `obj` (unknown): The object to be stringified. +- `options` (CustomStringifyOptions): An optional configuration object that can include: + - `bigintRadix` (number): The radix to use for bigint serialization (default is 10). + - `dateFormat` ('iso' | 'number'): The format to use for Date serialization (default is 'iso'). + - `ignoreFunctions` (boolean): Whether to ignore functions during serialization (default is false). + - `skipNull` (boolean): Whether to skip null values during serialization (default is false). + - `skipUndefined` (boolean): Whether to skip undefined values during serialization (default is false). + +#### Returns + +- (CustomStringifyResult): An object containing: + - `useResult` (boolean): Indicates whether the custom serialization result should be used. + - `result` (object | undefined): The custom serialized representation of the object if `useResult` is `true`. + +### customParse() + +The `customParse` function provides custom deserialization logic for additional types that are not handled by the default `parse` function. This function can be provided as part of the `options` parameter when calling `parse`. + +#### Parameters + +- `obj` (TypedValue): The object to be parsed. + +#### Returns + +- (CustomParseResult): An object containing: + - `useResult` (boolean): Indicates whether the custom deserialization result should be used. + - `result` (unknown | undefined): The custom deserialized representation of the object if `useResult` is `true`. ## Usage -Basic example +### A basic example ```typescript import { parse, stringify } from '@softstack/typed-stringify'; @@ -42,22 +126,22 @@ console.log(d); */ ``` -Example which adds Buffer +### An example which adds Buffer ```typescript -import { CustomParse, CustomStringify, parse, stringify, StringifyType, TypedValue } from '@softstack/typed-stringify'; +import { CustomParse, CustomStringify, parse, stringify, StringifyType } from '@softstack/typed-stringify'; type MyType = StringifyType | 'Buffer'; const customStringify: CustomStringify = (obj) => { if (obj instanceof Buffer) { - return { t: 'Buffer', v: obj.toString('base64') }; + return { useResult: true, result: { t: 'Buffer', v: obj.toString('base64') } }; } - return undefined; + return { useResult: false }; }; -const customParse: CustomParse = (obj) => { - const { t, v } = obj as TypedValue; +const customParse: CustomParse = (obj) => { + const { t, v } = obj; if (t === 'Buffer') { if (v === undefined) { throw new Error('No value'); diff --git a/dist/cjs/parse.js b/dist/cjs/parse.js index 35ebd2c..8736582 100644 --- a/dist/cjs/parse.js +++ b/dist/cjs/parse.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.parse = exports.isTypedValue = void 0; +exports.parse = void 0; const hasOwnProperty = (object, property) => Object.prototype.hasOwnProperty.call(object, property); const isTypedValue = (obj) => { if (typeof obj === 'object' && hasOwnProperty(obj, 't') && typeof obj.t === 'string') { @@ -9,8 +9,7 @@ const isTypedValue = (obj) => { } return false; }; -exports.isTypedValue = isTypedValue; -const convertType = ({ t, v }) => { +const convertType = ({ t, v, }) => { switch (t) { case 'function': { return undefined; @@ -64,7 +63,7 @@ const decent = (obj, options) => { return obj.map((obj) => decent(obj, options)); } else if (obj && typeof obj === 'object') { - if ((0, exports.isTypedValue)(obj)) { + if (isTypedValue(obj)) { const { customParse } = options; if (customParse) { const { useResult, result } = customParse(obj); diff --git a/dist/cjs/parse.js.map b/dist/cjs/parse.js.map index bbf8fc6..3d3fc3e 100644 --- a/dist/cjs/parse.js.map +++ b/dist/cjs/parse.js.map @@ -1 +1 @@ -{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/stringify.js.map b/dist/cjs/stringify.js.map index ac6bf50..2737ba8 100644 --- a/dist/cjs/stringify.js.map +++ b/dist/cjs/stringify.js.map @@ -1 +1 @@ -{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/parse.js b/dist/esm/parse.js index 61adc4f..a766244 100644 --- a/dist/esm/parse.js +++ b/dist/esm/parse.js @@ -1,12 +1,12 @@ const hasOwnProperty = (object, property) => Object.prototype.hasOwnProperty.call(object, property); -export const isTypedValue = (obj) => { +const isTypedValue = (obj) => { if (typeof obj === 'object' && hasOwnProperty(obj, 't') && typeof obj.t === 'string') { const keys = Object.keys(obj); return keys.length === 1 || (keys.length === 2 && hasOwnProperty(obj, 'v') && typeof obj.v === 'string'); } return false; }; -const convertType = ({ t, v }) => { +const convertType = ({ t, v, }) => { switch (t) { case 'function': { return undefined; diff --git a/dist/esm/parse.js.map b/dist/esm/parse.js.map index 5fca2dd..e9b944b 100644 --- a/dist/esm/parse.js.map +++ b/dist/esm/parse.js.map @@ -1 +1 @@ -{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/stringify.js.map b/dist/esm/stringify.js.map index 812f4f1..51438dd 100644 --- a/dist/esm/stringify.js.map +++ b/dist/esm/stringify.js.map @@ -1 +1 @@ -{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAG,CACnB,GAAY,EACZ,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAsB,EACjD,EAAE;IAC1C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7C,CAAC;SAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;IACvD,CAAC;SAAM,IAAI,GAAG,YAAY,IAAI,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9F,CAAC;IACD,QAAQ,OAAO,GAAG,EAAE,CAAC;QACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,EAAE,EAAE,CAAC;gBAC3E,MAAM,IAAI,UAAU,CAAC,iDAAiD,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;gBACxB,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3C,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACjG,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7C,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,eAAe,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;QAC1B,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC3C,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QAChC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,CAAC;IACF,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,GAAG,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAmB,GAAY,EAAE,OAAyB,EAAW,EAAE;IACrF,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IACpC,IAAI,eAAe,EAAE,CAAC;QACrB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC5D,IAAI,SAAS,EAAE,CAAC;YACf,OAAO,MAAM,CAAC;QACf,CAAC;IACF,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC,EAAE,CAAC;QACrE,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IACD,OAAO,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAmC,GAAY,EAAE,UAA+B,EAAE,EAAU,EAAE;;IACtH,OAAA,IAAI,CAAC,SAAS,CACb,MAAM,CAAC,GAAG,EAAE;QACX,WAAW,EAAE,MAAA,OAAO,CAAC,WAAW,mCAAI,EAAE;QACtC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,UAAU,EAAE,MAAA,OAAO,CAAC,UAAU,mCAAI,KAAK;QACvC,eAAe,EAAE,MAAA,OAAO,CAAC,eAAe,mCAAI,KAAK;QACjD,QAAQ,EAAE,MAAA,OAAO,CAAC,QAAQ,mCAAI,KAAK;QACnC,aAAa,EAAE,MAAA,OAAO,CAAC,aAAa,mCAAI,KAAK;KAC7C,CAAC,CACF,CAAA;CAAA,CAAC"} \ No newline at end of file diff --git a/dist/types/parse.d.ts b/dist/types/parse.d.ts index a0f672f..2724810 100644 --- a/dist/types/parse.d.ts +++ b/dist/types/parse.d.ts @@ -1,3 +1,2 @@ -import { ParseOptions, TypedValue } from './types'; -export declare const isTypedValue: (obj: unknown) => obj is TypedValue; -export declare const parse: (s: string, options?: ParseOptions) => unknown; +import { ParseOptions } from './types'; +export declare const parse: (s: string, options?: ParseOptions) => unknown; diff --git a/dist/types/types.d.ts b/dist/types/types.d.ts index bffb9f4..53cd0f9 100644 --- a/dist/types/types.d.ts +++ b/dist/types/types.d.ts @@ -1,6 +1,6 @@ export type StringifyType = 'bigint' | 'boolean' | 'Date' | 'function' | 'null' | 'number' | 'string' | 'symbol' | 'undefined'; export type DateFormat = 'iso' | 'number'; -export interface TypedValue { +export interface TypedValue { t: T; v?: string; } @@ -12,10 +12,11 @@ export interface BaseOptions { skipUndefined: boolean; } export type CustomStringifyOptions = BaseOptions; -export type CustomStringify = (obj: unknown, options: CustomStringifyOptions) => { +export type CustomStringifyResult = { useResult: boolean; result?: TypedValue; }; +export type CustomStringify = (obj: unknown, options: CustomStringifyOptions) => CustomStringifyResult; export interface DecentOptions extends BaseOptions { customStringify?: CustomStringify; } @@ -23,10 +24,11 @@ export interface StringifyOptions extends Partial customStringify?: CustomStringify; } export type ConvertTypeOptions = BaseOptions; -export type CustomParse = (obj: TypedValue) => { +export type CustomParseResult = { useResult: boolean; result?: unknown; }; -export interface ParseOptions { - customParse?: CustomParse; +export type CustomParse = (obj: TypedValue) => CustomParseResult; +export interface ParseOptions { + customParse?: CustomParse; } diff --git a/src/__tests__/typedStringify.test.ts b/src/__tests__/typedStringify.test.ts index 97da04c..4a52145 100644 --- a/src/__tests__/typedStringify.test.ts +++ b/src/__tests__/typedStringify.test.ts @@ -13,7 +13,7 @@ const customStringify: CustomStringify = (obj) => { return { useResult: false }; }; -const customParse: CustomParse = (typedValue: TypedValue) => { +const customParse: CustomParse = (typedValue: TypedValue) => { const { t, v } = typedValue; switch (t) { case 'BigNumber': { diff --git a/src/examples/Buffer.ts b/src/examples/Buffer.ts index 0e2bf50..498da77 100644 --- a/src/examples/Buffer.ts +++ b/src/examples/Buffer.ts @@ -1,16 +1,16 @@ -import { CustomParse, CustomStringify, parse, stringify, StringifyType, TypedValue } from '../index'; +import { CustomParse, CustomStringify, parse, stringify, StringifyType } from '../index'; type MyType = StringifyType | 'Buffer'; const customStringify: CustomStringify = (obj) => { if (obj instanceof Buffer) { - return { t: 'Buffer', v: obj.toString('base64') }; + return { useResult: true, result: { t: 'Buffer', v: obj.toString('base64') } }; } - return undefined; + return { useResult: false }; }; -const customParse: CustomParse = (obj) => { - const { t, v } = obj as TypedValue; +const customParse: CustomParse = (obj) => { + const { t, v } = obj; if (t === 'Buffer') { if (v === undefined) { throw new Error('No value'); diff --git a/src/examples/bignumber.js.ts b/src/examples/bignumber.js.ts index 427a3d6..6488527 100644 --- a/src/examples/bignumber.js.ts +++ b/src/examples/bignumber.js.ts @@ -5,12 +5,12 @@ type MyType = StringifyType | 'BigNumber'; const customStringify: CustomStringify = (obj) => { if (obj instanceof BigNumber) { - return { t: 'BigNumber', v: obj.toString() }; + return { useResult: true, result: { t: 'BigNumber', v: obj.toString() } }; } - return undefined; + return { useResult: false }; }; -const customParse: CustomParse = (obj) => { +const customParse: CustomParse = (obj) => { const { t, v } = obj as TypedValue; if (t === 'BigNumber') { if (v === undefined) { diff --git a/src/parse.ts b/src/parse.ts index 9ab7816..1ea9571 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -1,9 +1,9 @@ -import { ParseOptions, TypedValue } from './types'; +import { ParseOptions, StringifyType, TypedValue } from './types'; const hasOwnProperty = (object: X, property: Y): object is X & Record => Object.prototype.hasOwnProperty.call(object, property); -export const isTypedValue = (obj: unknown): obj is TypedValue => { +const isTypedValue = (obj: unknown): obj is TypedValue => { if (typeof obj === 'object' && hasOwnProperty(obj, 't') && typeof obj.t === 'string') { const keys = Object.keys(obj); return keys.length === 1 || (keys.length === 2 && hasOwnProperty(obj, 'v') && typeof obj.v === 'string'); @@ -11,7 +11,10 @@ export const isTypedValue = (obj: unknown): obj is TypedValue => { return false; }; -const convertType = ({ t, v }: TypedValue): bigint | boolean | Date | null | number | string | symbol | undefined => { +const convertType = ({ + t, + v, +}: TypedValue): bigint | boolean | Date | null | number | string | symbol | undefined => { switch (t) { case 'function': { return undefined; @@ -64,19 +67,19 @@ const convertType = ({ t, v }: TypedValue): bigint | boolean | Date | null | num } }; -const decent = (obj: unknown, options: ParseOptions): unknown => { +const decent = (obj: unknown, options: ParseOptions): unknown => { if (Array.isArray(obj)) { return obj.map((obj) => decent(obj, options)); } else if (obj && typeof obj === 'object') { if (isTypedValue(obj)) { const { customParse } = options; if (customParse) { - const { useResult, result } = customParse(obj); + const { useResult, result } = customParse(obj as TypedValue); if (useResult) { return result; } } - return convertType(obj); + return convertType(obj as TypedValue); } const tmpObj: { [key: string]: unknown } = {}; for (const [key, value] of Object.entries(obj)) { @@ -87,6 +90,6 @@ const decent = (obj: unknown, options: ParseOptions): unknown => { throw new Error('Invalid structure'); }; -export const parse = (s: string, options: ParseOptions = {}): unknown => { +export const parse = (s: string, options: ParseOptions = {}): unknown => { return decent(JSON.parse(s), options); }; diff --git a/src/stringify.ts b/src/stringify.ts index b330d99..d185949 100644 --- a/src/stringify.ts +++ b/src/stringify.ts @@ -3,7 +3,7 @@ import { ConvertTypeOptions, DecentOptions, StringifyOptions, StringifyType, Typ const convertType = ( obj: unknown, { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined }: ConvertTypeOptions, -): TypedValue | undefined => { +): TypedValue | undefined => { if (obj === null) { return skipNull ? undefined : { t: 'null' }; } else if (obj === undefined) { @@ -43,7 +43,7 @@ const convertType = ( throw new Error(`Unknown datatype: ${typeof obj}`); }; -const decent = (obj: unknown, options: DecentOptions): unknown => { +const decent = (obj: unknown, options: DecentOptions): unknown => { const { customStringify } = options; if (customStringify) { const { useResult, result } = customStringify(obj, options); diff --git a/src/types.ts b/src/types.ts index 275fefe..1006a6a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -11,7 +11,7 @@ export type StringifyType = export type DateFormat = 'iso' | 'number'; -export interface TypedValue { +export interface TypedValue { t: T; v?: string; } @@ -26,10 +26,12 @@ export interface BaseOptions { export type CustomStringifyOptions = BaseOptions; +export type CustomStringifyResult = { useResult: boolean; result?: TypedValue }; + export type CustomStringify = ( obj: unknown, options: CustomStringifyOptions, -) => { useResult: boolean; result?: TypedValue }; +) => CustomStringifyResult; export interface DecentOptions extends BaseOptions { customStringify?: CustomStringify; @@ -41,8 +43,10 @@ export interface StringifyOptions extends Partial export type ConvertTypeOptions = BaseOptions; -export type CustomParse = (obj: TypedValue) => { useResult: boolean; result?: unknown }; +export type CustomParseResult = { useResult: boolean; result?: unknown }; + +export type CustomParse = (obj: TypedValue) => CustomParseResult; -export interface ParseOptions { - customParse?: CustomParse; +export interface ParseOptions { + customParse?: CustomParse; } From f56b444d207c2c66663da1b22d5e12f2b59de9d0 Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Wed, 13 Nov 2024 17:45:45 +0100 Subject: [PATCH 09/23] bug: Fixed README refactor: Renamed stringify parameter --- README.md | 16 ++++++++-------- dist/cjs/parse.js | 4 ++-- dist/cjs/parse.js.map | 2 +- dist/esm/parse.js | 4 ++-- dist/esm/parse.js.map | 2 +- dist/types/parse.d.ts | 2 +- src/parse.ts | 4 ++-- 7 files changed, 17 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index af373ce..eeaea9c 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ The `stringify` function converts a JavaScript object into a JSON string while p #### Returns -- `string`: The JSON string representation of the object. +- (string): The JSON string representation of the object. ### parse() @@ -44,13 +44,13 @@ The `parse` function converts a JSON string back into a JavaScript object while #### Parameters -- `s` (string): The JSON string to be parsed. +- `json` (string): The JSON string to be parsed. - `options` (ParseOptions): An optional configuration object that can include: - `customParse` (CustomParse): A custom parse function for handling additional types. #### Returns -- `unknown`: The JavaScript object representation of the JSON string. +- (unknown): The JavaScript object representation of the JSON string. ## Custom Functions @@ -62,11 +62,11 @@ The `customStringify` function allows you to define custom serialization logic f - `obj` (unknown): The object to be stringified. - `options` (CustomStringifyOptions): An optional configuration object that can include: - - `bigintRadix` (number): The radix to use for bigint serialization (default is 10). - - `dateFormat` ('iso' | 'number'): The format to use for Date serialization (default is 'iso'). - - `ignoreFunctions` (boolean): Whether to ignore functions during serialization (default is false). - - `skipNull` (boolean): Whether to skip null values during serialization (default is false). - - `skipUndefined` (boolean): Whether to skip undefined values during serialization (default is false). + - `bigintRadix` (number): The radix to use for bigint serialization. + - `dateFormat` ('iso' | 'number'): The format to use for Date serialization. + - `ignoreFunctions` (boolean): Whether to ignore functions during serialization. + - `skipNull` (boolean): Whether to skip null values during serialization. + - `skipUndefined` (boolean): Whether to skip undefined values during serialization. #### Returns diff --git a/dist/cjs/parse.js b/dist/cjs/parse.js index 8736582..b02a1f3 100644 --- a/dist/cjs/parse.js +++ b/dist/cjs/parse.js @@ -81,8 +81,8 @@ const decent = (obj, options) => { } throw new Error('Invalid structure'); }; -const parse = (s, options = {}) => { - return decent(JSON.parse(s), options); +const parse = (json, options = {}) => { + return decent(JSON.parse(json), options); }; exports.parse = parse; //# sourceMappingURL=parse.js.map \ No newline at end of file diff --git a/dist/cjs/parse.js.map b/dist/cjs/parse.js.map index 3d3fc3e..72584e0 100644 --- a/dist/cjs/parse.js.map +++ b/dist/cjs/parse.js.map @@ -1 +1 @@ -{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/parse.js b/dist/esm/parse.js index a766244..7e672bd 100644 --- a/dist/esm/parse.js +++ b/dist/esm/parse.js @@ -78,7 +78,7 @@ const decent = (obj, options) => { } throw new Error('Invalid structure'); }; -export const parse = (s, options = {}) => { - return decent(JSON.parse(s), options); +export const parse = (json, options = {}) => { + return decent(JSON.parse(json), options); }; //# sourceMappingURL=parse.js.map \ No newline at end of file diff --git a/dist/esm/parse.js.map b/dist/esm/parse.js.map index e9b944b..6a8437d 100644 --- a/dist/esm/parse.js.map +++ b/dist/esm/parse.js.map @@ -1 +1 @@ -{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types/parse.d.ts b/dist/types/parse.d.ts index 2724810..dd2d23b 100644 --- a/dist/types/parse.d.ts +++ b/dist/types/parse.d.ts @@ -1,2 +1,2 @@ import { ParseOptions } from './types'; -export declare const parse: (s: string, options?: ParseOptions) => unknown; +export declare const parse: (json: string, options?: ParseOptions) => unknown; diff --git a/src/parse.ts b/src/parse.ts index 1ea9571..7ecfbde 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -90,6 +90,6 @@ const decent = (obj: unknown, options: ParseOptions): unkno throw new Error('Invalid structure'); }; -export const parse = (s: string, options: ParseOptions = {}): unknown => { - return decent(JSON.parse(s), options); +export const parse = (json: string, options: ParseOptions = {}): unknown => { + return decent(JSON.parse(json), options); }; From bb1566b5ae4e683c7197763b0c796183864a9a5c Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Wed, 13 Nov 2024 18:44:21 +0100 Subject: [PATCH 10/23] feat: Added Set --- README.md | 1 + dist/cjs/parse.js | 9 +++++--- dist/cjs/parse.js.map | 2 +- dist/cjs/stringify.js | 8 +++++-- dist/cjs/stringify.js.map | 2 +- dist/cjs/types.js | 1 + dist/cjs/types.js.map | 2 +- dist/esm/parse.js | 9 +++++--- dist/esm/parse.js.map | 2 +- dist/esm/stringify.js | 8 +++++-- dist/esm/stringify.js.map | 2 +- dist/esm/types.js | 1 + dist/esm/types.js.map | 2 +- dist/types/types.d.ts | 24 ++++++++++---------- src/__tests__/typedStringify.test.ts | 5 +++++ src/parse.ts | 17 ++++++++------ src/stringify.ts | 21 +++++++++++++----- src/types.ts | 33 ++++++++++++++++++---------- 18 files changed, 96 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index eeaea9c..084c909 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ - Array - Date - Object + - Set ## API diff --git a/dist/cjs/parse.js b/dist/cjs/parse.js index b02a1f3..945bd1b 100644 --- a/dist/cjs/parse.js +++ b/dist/cjs/parse.js @@ -9,7 +9,7 @@ const isTypedValue = (obj) => { } return false; }; -const convertType = ({ t, v, }) => { +const convertType = ({ t, v }, options) => { switch (t) { case 'function': { return undefined; @@ -50,6 +50,9 @@ const convertType = ({ t, v, }) => { case 'number': { return Number(v); } + case 'Set': { + return new Set((0, exports.parse)(v, options)); + } case 'string': { return v; } @@ -66,12 +69,12 @@ const decent = (obj, options) => { if (isTypedValue(obj)) { const { customParse } = options; if (customParse) { - const { useResult, result } = customParse(obj); + const { useResult, result } = customParse(obj, options); if (useResult) { return result; } } - return convertType(obj); + return convertType(obj, options); } const tmpObj = {}; for (const [key, value] of Object.entries(obj)) { diff --git a/dist/cjs/parse.js.map b/dist/cjs/parse.js.map index 72584e0..5bc9348 100644 --- a/dist/cjs/parse.js.map +++ b/dist/cjs/parse.js.map @@ -1 +1 @@ -{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/stringify.js b/dist/cjs/stringify.js index 02ef9ec..465d716 100644 --- a/dist/cjs/stringify.js +++ b/dist/cjs/stringify.js @@ -1,7 +1,8 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.stringify = void 0; -const convertType = (obj, { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined }) => { +const convertType = (obj, options) => { + const { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined } = options; if (obj === null) { return skipNull ? undefined : { t: 'null' }; } @@ -11,6 +12,9 @@ const convertType = (obj, { bigintRadix, dateFormat, ignoreFunctions, skipNull, else if (obj instanceof Date) { return { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() }; } + else if (obj instanceof Set) { + return { t: 'Set', v: (0, exports.stringify)([...obj], options) }; + } switch (typeof obj) { case 'bigint': { if (!Number.isInteger(bigintRadix) || bigintRadix < 2 || bigintRadix > 36) { @@ -53,7 +57,7 @@ const decent = (obj, options) => { if (Array.isArray(obj)) { return obj.map((obj) => decent(obj, options)); } - else if (obj && typeof obj === 'object' && !(obj instanceof Date)) { + else if (obj && typeof obj === 'object' && !(obj instanceof Date) && !(obj instanceof Set)) { const tmpObj = {}; for (const [key, value] of Object.entries(obj)) { tmpObj[key] = decent(value, options); diff --git a/dist/cjs/stringify.js.map b/dist/cjs/stringify.js.map index 2737ba8..6cc8dc2 100644 --- a/dist/cjs/stringify.js.map +++ b/dist/cjs/stringify.js.map @@ -1 +1 @@ -{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":";;;AAEA,MAAM,WAAW,GAAG,CACnB,GAAY,EACZ,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAsB,EACjD,EAAE;IAC1C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7C,CAAC;SAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;IACvD,CAAC;SAAM,IAAI,GAAG,YAAY,IAAI,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9F,CAAC;IACD,QAAQ,OAAO,GAAG,EAAE,CAAC;QACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,EAAE,EAAE,CAAC;gBAC3E,MAAM,IAAI,UAAU,CAAC,iDAAiD,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;gBACxB,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3C,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACjG,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7C,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,eAAe,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;QAC1B,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC3C,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QAChC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,CAAC;IACF,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,GAAG,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAmB,GAAY,EAAE,OAAyB,EAAW,EAAE;IACrF,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IACpC,IAAI,eAAe,EAAE,CAAC;QACrB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC5D,IAAI,SAAS,EAAE,CAAC;YACf,OAAO,MAAM,CAAC;QACf,CAAC;IACF,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC,EAAE,CAAC;QACrE,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IACD,OAAO,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC,CAAC;AAEK,MAAM,SAAS,GAAG,CAAmC,GAAY,EAAE,UAA+B,EAAE,EAAU,EAAE;;IACtH,OAAA,IAAI,CAAC,SAAS,CACb,MAAM,CAAC,GAAG,EAAE;QACX,WAAW,EAAE,MAAA,OAAO,CAAC,WAAW,mCAAI,EAAE;QACtC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,UAAU,EAAE,MAAA,OAAO,CAAC,UAAU,mCAAI,KAAK;QACvC,eAAe,EAAE,MAAA,OAAO,CAAC,eAAe,mCAAI,KAAK;QACjD,QAAQ,EAAE,MAAA,OAAO,CAAC,QAAQ,mCAAI,KAAK;QACnC,aAAa,EAAE,MAAA,OAAO,CAAC,aAAa,mCAAI,KAAK;KAC7C,CAAC,CACF,CAAA;CAAA,CAAC;AAVU,QAAA,SAAS,aAUnB"} \ No newline at end of file +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/types.js b/dist/cjs/types.js index 11e638d..9a5f7b2 100644 --- a/dist/cjs/types.js +++ b/dist/cjs/types.js @@ -1,3 +1,4 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +// End parse //# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/dist/cjs/types.js.map b/dist/cjs/types.js.map index 7b5fff8..be8e639 100644 --- a/dist/cjs/types.js.map +++ b/dist/cjs/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;AA4DA,YAAY"} \ No newline at end of file diff --git a/dist/esm/parse.js b/dist/esm/parse.js index 7e672bd..5447fc3 100644 --- a/dist/esm/parse.js +++ b/dist/esm/parse.js @@ -6,7 +6,7 @@ const isTypedValue = (obj) => { } return false; }; -const convertType = ({ t, v, }) => { +const convertType = ({ t, v }, options) => { switch (t) { case 'function': { return undefined; @@ -47,6 +47,9 @@ const convertType = ({ t, v, }) => { case 'number': { return Number(v); } + case 'Set': { + return new Set(parse(v, options)); + } case 'string': { return v; } @@ -63,12 +66,12 @@ const decent = (obj, options) => { if (isTypedValue(obj)) { const { customParse } = options; if (customParse) { - const { useResult, result } = customParse(obj); + const { useResult, result } = customParse(obj, options); if (useResult) { return result; } } - return convertType(obj); + return convertType(obj, options); } const tmpObj = {}; for (const [key, value] of Object.entries(obj)) { diff --git a/dist/esm/parse.js.map b/dist/esm/parse.js.map index 6a8437d..8fe5233 100644 --- a/dist/esm/parse.js.map +++ b/dist/esm/parse.js.map @@ -1 +1 @@ -{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/stringify.js b/dist/esm/stringify.js index 8eb07bb..2f8ecc2 100644 --- a/dist/esm/stringify.js +++ b/dist/esm/stringify.js @@ -1,4 +1,5 @@ -const convertType = (obj, { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined }) => { +const convertType = (obj, options) => { + const { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined } = options; if (obj === null) { return skipNull ? undefined : { t: 'null' }; } @@ -8,6 +9,9 @@ const convertType = (obj, { bigintRadix, dateFormat, ignoreFunctions, skipNull, else if (obj instanceof Date) { return { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() }; } + else if (obj instanceof Set) { + return { t: 'Set', v: stringify([...obj], options) }; + } switch (typeof obj) { case 'bigint': { if (!Number.isInteger(bigintRadix) || bigintRadix < 2 || bigintRadix > 36) { @@ -50,7 +54,7 @@ const decent = (obj, options) => { if (Array.isArray(obj)) { return obj.map((obj) => decent(obj, options)); } - else if (obj && typeof obj === 'object' && !(obj instanceof Date)) { + else if (obj && typeof obj === 'object' && !(obj instanceof Date) && !(obj instanceof Set)) { const tmpObj = {}; for (const [key, value] of Object.entries(obj)) { tmpObj[key] = decent(value, options); diff --git a/dist/esm/stringify.js.map b/dist/esm/stringify.js.map index 51438dd..dc64e5b 100644 --- a/dist/esm/stringify.js.map +++ b/dist/esm/stringify.js.map @@ -1 +1 @@ -{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/types.js b/dist/esm/types.js index 718fd38..af6a0d7 100644 --- a/dist/esm/types.js +++ b/dist/esm/types.js @@ -1,2 +1,3 @@ export {}; +// End parse //# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/dist/esm/types.js.map b/dist/esm/types.js.map index 7b5fff8..8ac1384 100644 --- a/dist/esm/types.js.map +++ b/dist/esm/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AA4DA,YAAY"} \ No newline at end of file diff --git a/dist/types/types.d.ts b/dist/types/types.d.ts index 53cd0f9..9cbfdc5 100644 --- a/dist/types/types.d.ts +++ b/dist/types/types.d.ts @@ -1,34 +1,34 @@ -export type StringifyType = 'bigint' | 'boolean' | 'Date' | 'function' | 'null' | 'number' | 'string' | 'symbol' | 'undefined'; +export type StringifyType = 'bigint' | 'boolean' | 'Date' | 'function' | 'null' | 'number' | 'Set' | 'string' | 'symbol' | 'undefined'; export type DateFormat = 'iso' | 'number'; export interface TypedValue { t: T; v?: string; } -export interface BaseOptions { +export interface BaseStringifyOptions { bigintRadix: number; dateFormat: DateFormat; ignoreFunctions: boolean; skipNull: boolean; skipUndefined: boolean; } -export type CustomStringifyOptions = BaseOptions; +export interface CustomStringifyOptions extends BaseStringifyOptions { + customStringify: CustomStringify; +} export type CustomStringifyResult = { useResult: boolean; result?: TypedValue; }; -export type CustomStringify = (obj: unknown, options: CustomStringifyOptions) => CustomStringifyResult; -export interface DecentOptions extends BaseOptions { +export type CustomStringify = (obj: unknown, options: CustomStringifyOptions) => CustomStringifyResult; +export interface DefaultedStringifyOptions extends BaseStringifyOptions { customStringify?: CustomStringify; } -export interface StringifyOptions extends Partial { - customStringify?: CustomStringify; +export type StringifyOptions = Partial>; +export interface CustomParseOptions { + customParse: CustomParse; } -export type ConvertTypeOptions = BaseOptions; export type CustomParseResult = { useResult: boolean; result?: unknown; }; -export type CustomParse = (obj: TypedValue) => CustomParseResult; -export interface ParseOptions { - customParse?: CustomParse; -} +export type CustomParse = (obj: TypedValue, options: CustomParseOptions) => CustomParseResult; +export type ParseOptions = Partial>; diff --git a/src/__tests__/typedStringify.test.ts b/src/__tests__/typedStringify.test.ts index 4a52145..3e9f2ad 100644 --- a/src/__tests__/typedStringify.test.ts +++ b/src/__tests__/typedStringify.test.ts @@ -188,3 +188,8 @@ test('Function without "ignoreFunctions = true" should throw an error', () => { expect(() => parse(stringify(obj))).toThrow(Error); expect(() => parse(stringify(obj, { ignoreFunctions: false }))).toThrow(Error); }); + +test('Set', () => { + const obj = new Set([1, '2', 3, 4, 5]); + expect(isEqual(obj, parse(stringify(obj)))).toBe(true); +}); diff --git a/src/parse.ts b/src/parse.ts index 7ecfbde..3d4f6f5 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -1,4 +1,4 @@ -import { ParseOptions, StringifyType, TypedValue } from './types'; +import { CustomParseOptions, ParseOptions, StringifyType, TypedValue } from './types'; const hasOwnProperty = (object: X, property: Y): object is X & Record => Object.prototype.hasOwnProperty.call(object, property); @@ -11,10 +11,10 @@ const isTypedValue = (obj: unknown): obj is TypedValue => { return false; }; -const convertType = ({ - t, - v, -}: TypedValue): bigint | boolean | Date | null | number | string | symbol | undefined => { +const convertType = ( + { t, v }: TypedValue, + options: ParseOptions, +): bigint | boolean | Date | null | number | Set | string | symbol | undefined => { switch (t) { case 'function': { return undefined; @@ -58,6 +58,9 @@ const convertType = ({ case 'number': { return Number(v); } + case 'Set': { + return new Set(parse(v, options) as Array); + } case 'string': { return v; } @@ -74,12 +77,12 @@ const decent = (obj: unknown, options: ParseOptions): unkno if (isTypedValue(obj)) { const { customParse } = options; if (customParse) { - const { useResult, result } = customParse(obj as TypedValue); + const { useResult, result } = customParse(obj as TypedValue, options as CustomParseOptions); if (useResult) { return result; } } - return convertType(obj as TypedValue); + return convertType(obj as TypedValue, options); } const tmpObj: { [key: string]: unknown } = {}; for (const [key, value] of Object.entries(obj)) { diff --git a/src/stringify.ts b/src/stringify.ts index d185949..210e142 100644 --- a/src/stringify.ts +++ b/src/stringify.ts @@ -1,15 +1,24 @@ -import { ConvertTypeOptions, DecentOptions, StringifyOptions, StringifyType, TypedValue } from './types'; +import { + CustomStringifyOptions, + DefaultedStringifyOptions, + StringifyOptions, + StringifyType, + TypedValue, +} from './types'; -const convertType = ( +const convertType = ( obj: unknown, - { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined }: ConvertTypeOptions, + options: DefaultedStringifyOptions, ): TypedValue | undefined => { + const { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined } = options; if (obj === null) { return skipNull ? undefined : { t: 'null' }; } else if (obj === undefined) { return skipUndefined ? undefined : { t: 'undefined' }; } else if (obj instanceof Date) { return { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() }; + } else if (obj instanceof Set) { + return { t: 'Set', v: stringify([...obj], options) }; } switch (typeof obj) { case 'bigint': { @@ -43,17 +52,17 @@ const convertType = ( throw new Error(`Unknown datatype: ${typeof obj}`); }; -const decent = (obj: unknown, options: DecentOptions): unknown => { +const decent = (obj: unknown, options: DefaultedStringifyOptions): unknown => { const { customStringify } = options; if (customStringify) { - const { useResult, result } = customStringify(obj, options); + const { useResult, result } = customStringify(obj, options as CustomStringifyOptions); if (useResult) { return result; } } if (Array.isArray(obj)) { return obj.map((obj) => decent(obj, options)); - } else if (obj && typeof obj === 'object' && !(obj instanceof Date)) { + } else if (obj && typeof obj === 'object' && !(obj instanceof Date) && !(obj instanceof Set)) { const tmpObj: { [key: string]: unknown } = {}; for (const [key, value] of Object.entries(obj)) { tmpObj[key] = decent(value, options); diff --git a/src/types.ts b/src/types.ts index 1006a6a..bd72b41 100644 --- a/src/types.ts +++ b/src/types.ts @@ -5,6 +5,7 @@ export type StringifyType = | 'function' | 'null' | 'number' + | 'Set' | 'string' | 'symbol' | 'undefined'; @@ -16,7 +17,9 @@ export interface TypedValue { v?: string; } -export interface BaseOptions { +// Start stringify + +export interface BaseStringifyOptions { bigintRadix: number; dateFormat: DateFormat; ignoreFunctions: boolean; @@ -24,29 +27,35 @@ export interface BaseOptions { skipUndefined: boolean; } -export type CustomStringifyOptions = BaseOptions; +export interface CustomStringifyOptions extends BaseStringifyOptions { + customStringify: CustomStringify; +} export type CustomStringifyResult = { useResult: boolean; result?: TypedValue }; export type CustomStringify = ( obj: unknown, - options: CustomStringifyOptions, + options: CustomStringifyOptions, ) => CustomStringifyResult; -export interface DecentOptions extends BaseOptions { +export interface DefaultedStringifyOptions extends BaseStringifyOptions { customStringify?: CustomStringify; } -export interface StringifyOptions extends Partial { - customStringify?: CustomStringify; -} +export type StringifyOptions = Partial>; + +// End stringify -export type ConvertTypeOptions = BaseOptions; +// Start parse + +export interface CustomParseOptions { + customParse: CustomParse; +} export type CustomParseResult = { useResult: boolean; result?: unknown }; -export type CustomParse = (obj: TypedValue) => CustomParseResult; +export type CustomParse = (obj: TypedValue, options: CustomParseOptions) => CustomParseResult; -export interface ParseOptions { - customParse?: CustomParse; -} +export type ParseOptions = Partial>; + +// End parse From eefdb7164f430f2cc4c302e37283b634cfe1d85e Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Thu, 14 Nov 2024 11:26:18 +0100 Subject: [PATCH 11/23] feat: Added Map --- README.md | 1 + dist/cjs/parse.js | 3 +++ dist/cjs/parse.js.map | 2 +- dist/cjs/stringify.js | 9 ++++++++- dist/cjs/stringify.js.map | 2 +- dist/cjs/types.js.map | 2 +- dist/esm/parse.js | 3 +++ dist/esm/parse.js.map | 2 +- dist/esm/stringify.js | 9 ++++++++- dist/esm/stringify.js.map | 2 +- dist/esm/types.js.map | 2 +- dist/types/types.d.ts | 2 +- src/__tests__/typedStringify.test.ts | 21 +++++++++++++++++++-- src/parse.ts | 5 ++++- src/stringify.ts | 10 +++++++++- src/types.ts | 1 + 16 files changed, 63 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 084c909..19d6f73 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ - Complex Types: - Array - Date + - Map - Object - Set diff --git a/dist/cjs/parse.js b/dist/cjs/parse.js index 945bd1b..85038d2 100644 --- a/dist/cjs/parse.js +++ b/dist/cjs/parse.js @@ -47,6 +47,9 @@ const convertType = ({ t, v }, options) => { case 'Date': { return v.includes('T') ? new Date(v) : new Date(Number(v)); } + case 'Map': { + return new Map((0, exports.parse)(v, options)); + } case 'number': { return Number(v); } diff --git a/dist/cjs/parse.js.map b/dist/cjs/parse.js.map index 5bc9348..f401863 100644 --- a/dist/cjs/parse.js.map +++ b/dist/cjs/parse.js.map @@ -1 +1 @@ -{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/stringify.js b/dist/cjs/stringify.js index 465d716..e9483ac 100644 --- a/dist/cjs/stringify.js +++ b/dist/cjs/stringify.js @@ -12,6 +12,9 @@ const convertType = (obj, options) => { else if (obj instanceof Date) { return { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() }; } + else if (obj instanceof Map) { + return { t: 'Map', v: (0, exports.stringify)([...obj], options) }; + } else if (obj instanceof Set) { return { t: 'Set', v: (0, exports.stringify)([...obj], options) }; } @@ -57,7 +60,11 @@ const decent = (obj, options) => { if (Array.isArray(obj)) { return obj.map((obj) => decent(obj, options)); } - else if (obj && typeof obj === 'object' && !(obj instanceof Date) && !(obj instanceof Set)) { + else if (obj && + typeof obj === 'object' && + !(obj instanceof Date) && + !(obj instanceof Map) && + !(obj instanceof Set)) { const tmpObj = {}; for (const [key, value] of Object.entries(obj)) { tmpObj[key] = decent(value, options); diff --git a/dist/cjs/stringify.js.map b/dist/cjs/stringify.js.map index 6cc8dc2..ed88646 100644 --- a/dist/cjs/stringify.js.map +++ b/dist/cjs/stringify.js.map @@ -1 +1 @@ -{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cjs/types.js.map b/dist/cjs/types.js.map index be8e639..f553a73 100644 --- a/dist/cjs/types.js.map +++ b/dist/cjs/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;AA4DA,YAAY"} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;AA6DA,YAAY"} \ No newline at end of file diff --git a/dist/esm/parse.js b/dist/esm/parse.js index 5447fc3..d52719d 100644 --- a/dist/esm/parse.js +++ b/dist/esm/parse.js @@ -44,6 +44,9 @@ const convertType = ({ t, v }, options) => { case 'Date': { return v.includes('T') ? new Date(v) : new Date(Number(v)); } + case 'Map': { + return new Map(parse(v, options)); + } case 'number': { return Number(v); } diff --git a/dist/esm/parse.js.map b/dist/esm/parse.js.map index 8fe5233..afc8bbf 100644 --- a/dist/esm/parse.js.map +++ b/dist/esm/parse.js.map @@ -1 +1 @@ -{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAG,CAA2B,MAAS,EAAE,QAAW,EAAoC,EAAE,CAC7G,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAExD,MAAM,YAAY,GAAG,CAAmB,GAAY,EAAwB,EAAE;IAC7E,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACtF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC1G,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CACnB,EAAE,CAAC,EAAE,CAAC,EAA6B,EACnC,OAAwB,EAC+D,EAAE;IACzF,QAAQ,CAAC,EAAE,CAAC;QACX,KAAK,UAAU,CAAC,CAAC,CAAC;YACjB,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,OAAO,IAAI,CAAC,CAAC,sCAAsC;QACpD,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YAClB,OAAO,SAAS,CAAC;QAClB,CAAC;IACF,CAAC;IACD,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7B,CAAC;IACD,QAAQ,CAAC,EAAE,CAAC;QACX,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;oBACjB,KAAK,GAAG,EAAE,CAAC;gBACZ,CAAC;gBACD,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;gBAC9B,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CACzC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAC/D,MAAM,CAAC,CAAC,CAAC,CACT,CAAC;gBACF,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YAClC,CAAC;YACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,KAAK,GAAG,CAAC;QAClB,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACZ,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAmB,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,CAAC,CAAC;QACV,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC;IACF,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAmB,GAAY,EAAE,OAAwB,EAAW,EAAE;IACpF,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC3C,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;YAChC,IAAI,WAAW,EAAE,CAAC;gBACjB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,GAAoB,EAAE,OAAgC,CAAC,CAAC;gBAClG,IAAI,SAAS,EAAE,CAAC;oBACf,OAAO,MAAM,CAAC;gBACf,CAAC;YACF,CAAC;YACD,OAAO,WAAW,CAAC,GAAgC,EAAE,OAAO,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAmB,IAAY,EAAE,UAA2B,EAAE,EAAW,EAAE;IAC/F,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/stringify.js b/dist/esm/stringify.js index 2f8ecc2..e049df6 100644 --- a/dist/esm/stringify.js +++ b/dist/esm/stringify.js @@ -9,6 +9,9 @@ const convertType = (obj, options) => { else if (obj instanceof Date) { return { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() }; } + else if (obj instanceof Map) { + return { t: 'Map', v: stringify([...obj], options) }; + } else if (obj instanceof Set) { return { t: 'Set', v: stringify([...obj], options) }; } @@ -54,7 +57,11 @@ const decent = (obj, options) => { if (Array.isArray(obj)) { return obj.map((obj) => decent(obj, options)); } - else if (obj && typeof obj === 'object' && !(obj instanceof Date) && !(obj instanceof Set)) { + else if (obj && + typeof obj === 'object' && + !(obj instanceof Date) && + !(obj instanceof Map) && + !(obj instanceof Set)) { const tmpObj = {}; for (const [key, value] of Object.entries(obj)) { tmpObj[key] = decent(value, options); diff --git a/dist/esm/stringify.js.map b/dist/esm/stringify.js.map index dc64e5b..de37bb1 100644 --- a/dist/esm/stringify.js.map +++ b/dist/esm/stringify.js.map @@ -1 +1 @@ -{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/types.js.map b/dist/esm/types.js.map index 8ac1384..b9f6907 100644 --- a/dist/esm/types.js.map +++ b/dist/esm/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AA4DA,YAAY"} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AA6DA,YAAY"} \ No newline at end of file diff --git a/dist/types/types.d.ts b/dist/types/types.d.ts index 9cbfdc5..8a15d02 100644 --- a/dist/types/types.d.ts +++ b/dist/types/types.d.ts @@ -1,4 +1,4 @@ -export type StringifyType = 'bigint' | 'boolean' | 'Date' | 'function' | 'null' | 'number' | 'Set' | 'string' | 'symbol' | 'undefined'; +export type StringifyType = 'bigint' | 'boolean' | 'Date' | 'function' | 'Map' | 'null' | 'number' | 'Set' | 'string' | 'symbol' | 'undefined'; export type DateFormat = 'iso' | 'number'; export interface TypedValue { t: T; diff --git a/src/__tests__/typedStringify.test.ts b/src/__tests__/typedStringify.test.ts index 3e9f2ad..f91214e 100644 --- a/src/__tests__/typedStringify.test.ts +++ b/src/__tests__/typedStringify.test.ts @@ -40,6 +40,13 @@ const bigTestObject = { d: undefined, e: new Date(1_731_319_860_000), f: new BigNumber(12_345.6789), + g: new Set([1, '2', 3, 4, 5]), + h: new Map([ + ['a', { a: 1 }], + ['b', {}], + ['c', { b: new Date(1_731_319_860_000) }], + ['d', { a: BigInt(8) }], + ]), }, v: { t: '4444', @@ -190,6 +197,16 @@ test('Function without "ignoreFunctions = true" should throw an error', () => { }); test('Set', () => { - const obj = new Set([1, '2', 3, 4, 5]); - expect(isEqual(obj, parse(stringify(obj)))).toBe(true); + const set = new Set([1, '2', 3, 4, 5]); + expect(isEqual(set, parse(stringify(set)))).toBe(true); +}); + +test('Map', () => { + const map = new Map([ + ['a', { a: 1 }], + ['b', {}], + ['c', { b: new Date(1_731_319_860_000) }], + ['d', { a: BigInt(8) }], + ]); + expect(isEqual(map, parse(stringify(map)))).toBe(true); }); diff --git a/src/parse.ts b/src/parse.ts index 3d4f6f5..0c11cfe 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -14,7 +14,7 @@ const isTypedValue = (obj: unknown): obj is TypedValue => { const convertType = ( { t, v }: TypedValue, options: ParseOptions, -): bigint | boolean | Date | null | number | Set | string | symbol | undefined => { +): bigint | boolean | Date | Map | null | number | Set | string | symbol | undefined => { switch (t) { case 'function': { return undefined; @@ -55,6 +55,9 @@ const convertType = ( case 'Date': { return v.includes('T') ? new Date(v) : new Date(Number(v)); } + case 'Map': { + return new Map(parse(v, options) as Array<[unknown, unknown]>); + } case 'number': { return Number(v); } diff --git a/src/stringify.ts b/src/stringify.ts index 210e142..843006f 100644 --- a/src/stringify.ts +++ b/src/stringify.ts @@ -17,6 +17,8 @@ const convertType = ( return skipUndefined ? undefined : { t: 'undefined' }; } else if (obj instanceof Date) { return { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() }; + } else if (obj instanceof Map) { + return { t: 'Map', v: stringify([...obj], options) }; } else if (obj instanceof Set) { return { t: 'Set', v: stringify([...obj], options) }; } @@ -62,7 +64,13 @@ const decent = (obj: unknown, options: DefaultedStringifyOptio } if (Array.isArray(obj)) { return obj.map((obj) => decent(obj, options)); - } else if (obj && typeof obj === 'object' && !(obj instanceof Date) && !(obj instanceof Set)) { + } else if ( + obj && + typeof obj === 'object' && + !(obj instanceof Date) && + !(obj instanceof Map) && + !(obj instanceof Set) + ) { const tmpObj: { [key: string]: unknown } = {}; for (const [key, value] of Object.entries(obj)) { tmpObj[key] = decent(value, options); diff --git a/src/types.ts b/src/types.ts index bd72b41..916e394 100644 --- a/src/types.ts +++ b/src/types.ts @@ -3,6 +3,7 @@ export type StringifyType = | 'boolean' | 'Date' | 'function' + | 'Map' | 'null' | 'number' | 'Set' From f4840ad3d412d0f52ee14fbac9a5be955811714e Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Thu, 14 Nov 2024 11:30:17 +0100 Subject: [PATCH 12/23] 3.0.0-alpha.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 77100da..0366717 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@softstack/typed-stringify", - "version": "2.0.0", + "version": "3.0.0-alpha.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@softstack/typed-stringify", - "version": "2.0.0", + "version": "3.0.0-alpha.0", "license": "MIT", "devDependencies": { "@types/jest": "^29.5.14", diff --git a/package.json b/package.json index f779333..33b4a01 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@softstack/typed-stringify", - "version": "2.0.0", + "version": "3.0.0-alpha.0", "description": "Stringifies and parses objects while restoring the proper type on parse", "main": "dist/cjs/index.js", "module": "dist/esm/index.js", From d1a5cc2608b567590dc4a69e78cb1cb52613fda1 Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Thu, 14 Nov 2024 11:38:19 +0100 Subject: [PATCH 13/23] bug: Fixed repository url --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 33b4a01..1ece76b 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ ], "repository": { "type": "git", - "url": "https://github.com/chainsulting/typed-stringify" + "url": "git+https://github.com/chainsulting/typed-stringify.git" }, "homepage": "https://github.com/chainsulting/typed-stringify#readme", "scripts": { From e3086f4834613894630c377f7a37b024f4e7c81a Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Thu, 14 Nov 2024 11:40:02 +0100 Subject: [PATCH 14/23] 3.0.0-alpha.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0366717..03ae5c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@softstack/typed-stringify", - "version": "3.0.0-alpha.0", + "version": "3.0.0-alpha.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@softstack/typed-stringify", - "version": "3.0.0-alpha.0", + "version": "3.0.0-alpha.1", "license": "MIT", "devDependencies": { "@types/jest": "^29.5.14", diff --git a/package.json b/package.json index 1ece76b..8c4409a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@softstack/typed-stringify", - "version": "3.0.0-alpha.0", + "version": "3.0.0-alpha.1", "description": "Stringifies and parses objects while restoring the proper type on parse", "main": "dist/cjs/index.js", "module": "dist/esm/index.js", From a1efc1e1a9242de1bb6ede461e2d2d030e15bf4e Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Thu, 14 Nov 2024 20:20:58 +0100 Subject: [PATCH 15/23] feat: Added TypeScript source to source maps --- dist/cjs/index.js.map | 2 +- dist/cjs/parse.js.map | 2 +- dist/cjs/stringify.js.map | 2 +- dist/cjs/types.js.map | 2 +- dist/esm/index.js.map | 2 +- dist/esm/parse.js.map | 2 +- dist/esm/stringify.js.map | 2 +- dist/esm/types.js.map | 2 +- tsconfig.base.json | 3 ++- 9 files changed, 10 insertions(+), 9 deletions(-) diff --git a/dist/cjs/index.js.map b/dist/cjs/index.js.map index 26b4e01..355fa7d 100644 --- a/dist/cjs/index.js.map +++ b/dist/cjs/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,8CAA4B;AAC5B,0CAAwB"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,8CAA4B;AAC5B,0CAAwB","sourcesContent":["export * from './parse';\nexport * from './stringify';\nexport * from './types';\n"]} \ No newline at end of file diff --git a/dist/cjs/parse.js.map b/dist/cjs/parse.js.map index f401863..20af596 100644 --- a/dist/cjs/parse.js.map +++ b/dist/cjs/parse.js.map @@ -1 +1 @@ -{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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","sourcesContent":["import { CustomParseOptions, ParseOptions, StringifyType, TypedValue } from './types';\n\nconst hasOwnProperty = (object: X, property: Y): object is X & Record =>\n\tObject.prototype.hasOwnProperty.call(object, property);\n\nconst isTypedValue = (obj: unknown): obj is TypedValue => {\n\tif (typeof obj === 'object' && hasOwnProperty(obj, 't') && typeof obj.t === 'string') {\n\t\tconst keys = Object.keys(obj);\n\t\treturn keys.length === 1 || (keys.length === 2 && hasOwnProperty(obj, 'v') && typeof obj.v === 'string');\n\t}\n\treturn false;\n};\n\nconst convertType = (\n\t{ t, v }: TypedValue,\n\toptions: ParseOptions,\n): bigint | boolean | Date | Map | null | number | Set | string | symbol | undefined => {\n\tswitch (t) {\n\t\tcase 'function': {\n\t\t\treturn undefined;\n\t\t}\n\t\tcase 'null': {\n\t\t\treturn null; // eslint-disable-line unicorn/no-null\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn v === undefined ? Symbol() : Symbol.for(v);\n\t\t}\n\t\tcase 'undefined': {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\tif (v === undefined) {\n\t\tthrow new Error('No value');\n\t}\n\tswitch (t) {\n\t\tcase 'bigint': {\n\t\t\tif (v.startsWith('r')) {\n\t\t\t\tlet radix = Number.parseInt(v[1], 36);\n\t\t\t\tif (radix === 0) {\n\t\t\t\t\tradix = 36;\n\t\t\t\t}\n\t\t\t\tconst negative = v[2] === '-';\n\t\t\t\tconst startIndex = negative ? 3 : 2;\n\t\t\t\tconst value = [v.slice(startIndex)].reduce(\n\t\t\t\t\t(r, v) => r * BigInt(radix) + BigInt(Number.parseInt(v, radix)),\n\t\t\t\t\tBigInt(0),\n\t\t\t\t);\n\t\t\t\treturn negative ? -value : value;\n\t\t\t}\n\t\t\treturn BigInt(v);\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn v === '1';\n\t\t}\n\t\tcase 'Date': {\n\t\t\treturn v.includes('T') ? new Date(v) : new Date(Number(v));\n\t\t}\n\t\tcase 'Map': {\n\t\t\treturn new Map(parse(v, options) as Array<[unknown, unknown]>);\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn Number(v);\n\t\t}\n\t\tcase 'Set': {\n\t\t\treturn new Set(parse(v, options) as Array);\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn v;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown type: ${t}`);\n\t\t}\n\t}\n};\n\nconst decent = (obj: unknown, options: ParseOptions): unknown => {\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, options));\n\t} else if (obj && typeof obj === 'object') {\n\t\tif (isTypedValue(obj)) {\n\t\t\tconst { customParse } = options;\n\t\t\tif (customParse) {\n\t\t\t\tconst { useResult, result } = customParse(obj as TypedValue, options as CustomParseOptions);\n\t\t\t\tif (useResult) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn convertType(obj as TypedValue, options);\n\t\t}\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, options);\n\t\t}\n\t\treturn tmpObj;\n\t}\n\tthrow new Error('Invalid structure');\n};\n\nexport const parse = (json: string, options: ParseOptions = {}): unknown => {\n\treturn decent(JSON.parse(json), options);\n};\n"]} \ No newline at end of file diff --git a/dist/cjs/stringify.js.map b/dist/cjs/stringify.js.map index ed88646..508483f 100644 --- a/dist/cjs/stringify.js.map +++ b/dist/cjs/stringify.js.map @@ -1 +1 @@ -{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":";;;AAQA,MAAM,WAAW,GAAG,CACnB,GAAY,EACZ,OAAqC,EACG,EAAE;IAC1C,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IACtF,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7C,CAAC;SAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;IACvD,CAAC;SAAM,IAAI,GAAG,YAAY,IAAI,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9F,CAAC;SAAM,IAAI,GAAG,YAAY,GAAG,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAA,iBAAS,EAAC,CAAC,GAAG,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;IACtD,CAAC;SAAM,IAAI,GAAG,YAAY,GAAG,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAA,iBAAS,EAAC,CAAC,GAAG,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;IACtD,CAAC;IACD,QAAQ,OAAO,GAAG,EAAE,CAAC;QACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,EAAE,EAAE,CAAC;gBAC3E,MAAM,IAAI,UAAU,CAAC,iDAAiD,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;gBACxB,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3C,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACjG,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7C,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,eAAe,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;QAC1B,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC3C,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QAChC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,CAAC;IACF,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,GAAG,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAmB,GAAY,EAAE,OAAqC,EAAW,EAAE;IACjG,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IACpC,IAAI,eAAe,EAAE,CAAC;QACrB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,OAAoC,CAAC,CAAC;QACzF,IAAI,SAAS,EAAE,CAAC;YACf,OAAO,MAAM,CAAC;QACf,CAAC;IACF,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,IACN,GAAG;QACH,OAAO,GAAG,KAAK,QAAQ;QACvB,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC;QACtB,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC;QACrB,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC,EACpB,CAAC;QACF,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IACD,OAAO,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC,CAAC;AAEK,MAAM,SAAS,GAAG,CAAmC,GAAY,EAAE,UAA+B,EAAE,EAAU,EAAE;;IACtH,OAAA,IAAI,CAAC,SAAS,CACb,MAAM,CAAC,GAAG,EAAE;QACX,WAAW,EAAE,MAAA,OAAO,CAAC,WAAW,mCAAI,EAAE;QACtC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,UAAU,EAAE,MAAA,OAAO,CAAC,UAAU,mCAAI,KAAK;QACvC,eAAe,EAAE,MAAA,OAAO,CAAC,eAAe,mCAAI,KAAK;QACjD,QAAQ,EAAE,MAAA,OAAO,CAAC,QAAQ,mCAAI,KAAK;QACnC,aAAa,EAAE,MAAA,OAAO,CAAC,aAAa,mCAAI,KAAK;KAC7C,CAAC,CACF,CAAA;CAAA,CAAC;AAVU,QAAA,SAAS,aAUnB","sourcesContent":["import {\n\tCustomStringifyOptions,\n\tDefaultedStringifyOptions,\n\tStringifyOptions,\n\tStringifyType,\n\tTypedValue,\n} from './types';\n\nconst convertType = (\n\tobj: unknown,\n\toptions: DefaultedStringifyOptions,\n): TypedValue | undefined => {\n\tconst { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined } = options;\n\tif (obj === null) {\n\t\treturn skipNull ? undefined : { t: 'null' };\n\t} else if (obj === undefined) {\n\t\treturn skipUndefined ? undefined : { t: 'undefined' };\n\t} else if (obj instanceof Date) {\n\t\treturn { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() };\n\t} else if (obj instanceof Map) {\n\t\treturn { t: 'Map', v: stringify([...obj], options) };\n\t} else if (obj instanceof Set) {\n\t\treturn { t: 'Set', v: stringify([...obj], options) };\n\t}\n\tswitch (typeof obj) {\n\t\tcase 'bigint': {\n\t\t\tif (!Number.isInteger(bigintRadix) || bigintRadix < 2 || bigintRadix > 36) {\n\t\t\t\tthrow new RangeError('bigintRadix must be an integer between 2 and 36');\n\t\t\t}\n\t\t\tif (bigintRadix === 10) {\n\t\t\t\treturn { t: 'bigint', v: obj.toString() };\n\t\t\t}\n\t\t\treturn { t: 'bigint', v: 'r' + bigintRadix.toString(36).slice(-1) + obj.toString(bigintRadix) };\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn { t: 'boolean', v: obj ? '1' : '0' };\n\t\t}\n\t\tcase 'function': {\n\t\t\tif (!ignoreFunctions) {\n\t\t\t\tthrow new Error('Functions can not be stringified');\n\t\t\t}\n\t\t\treturn { t: 'function' };\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn { t: 'number', v: obj.toString() };\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn { t: 'string', v: obj };\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn { t: 'symbol', v: Symbol.keyFor(obj) };\n\t\t}\n\t}\n\tthrow new Error(`Unknown datatype: ${typeof obj}`);\n};\n\nconst decent = (obj: unknown, options: DefaultedStringifyOptions): unknown => {\n\tconst { customStringify } = options;\n\tif (customStringify) {\n\t\tconst { useResult, result } = customStringify(obj, options as CustomStringifyOptions);\n\t\tif (useResult) {\n\t\t\treturn result;\n\t\t}\n\t}\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, options));\n\t} else if (\n\t\tobj &&\n\t\ttypeof obj === 'object' &&\n\t\t!(obj instanceof Date) &&\n\t\t!(obj instanceof Map) &&\n\t\t!(obj instanceof Set)\n\t) {\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, options);\n\t\t}\n\t\treturn tmpObj;\n\t}\n\treturn convertType(obj, options);\n};\n\nexport const stringify = (obj: unknown, options: StringifyOptions = {}): string =>\n\tJSON.stringify(\n\t\tdecent(obj, {\n\t\t\tbigintRadix: options.bigintRadix ?? 10,\n\t\t\tcustomStringify: options.customStringify,\n\t\t\tdateFormat: options.dateFormat ?? 'iso',\n\t\t\tignoreFunctions: options.ignoreFunctions ?? false,\n\t\t\tskipNull: options.skipNull ?? false,\n\t\t\tskipUndefined: options.skipUndefined ?? false,\n\t\t}),\n\t);\n"]} \ No newline at end of file diff --git a/dist/cjs/types.js.map b/dist/cjs/types.js.map index f553a73..f672c3f 100644 --- a/dist/cjs/types.js.map +++ b/dist/cjs/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;AA6DA,YAAY"} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;AA6DA,YAAY","sourcesContent":["export type StringifyType =\n\t| 'bigint'\n\t| 'boolean'\n\t| 'Date'\n\t| 'function'\n\t| 'Map'\n\t| 'null'\n\t| 'number'\n\t| 'Set'\n\t| 'string'\n\t| 'symbol'\n\t| 'undefined';\n\nexport type DateFormat = 'iso' | 'number';\n\nexport interface TypedValue {\n\tt: T;\n\tv?: string;\n}\n\n// Start stringify\n\nexport interface BaseStringifyOptions {\n\tbigintRadix: number;\n\tdateFormat: DateFormat;\n\tignoreFunctions: boolean;\n\tskipNull: boolean;\n\tskipUndefined: boolean;\n}\n\nexport interface CustomStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify: CustomStringify;\n}\n\nexport type CustomStringifyResult = { useResult: boolean; result?: TypedValue };\n\nexport type CustomStringify = (\n\tobj: unknown,\n\toptions: CustomStringifyOptions,\n) => CustomStringifyResult;\n\nexport interface DefaultedStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify?: CustomStringify;\n}\n\nexport type StringifyOptions = Partial>;\n\n// End stringify\n\n// Start parse\n\nexport interface CustomParseOptions {\n\tcustomParse: CustomParse;\n}\n\nexport type CustomParseResult = { useResult: boolean; result?: unknown };\n\nexport type CustomParse = (obj: TypedValue, options: CustomParseOptions) => CustomParseResult;\n\nexport type ParseOptions = Partial>;\n\n// End parse\n"]} \ No newline at end of file diff --git a/dist/esm/index.js.map b/dist/esm/index.js.map index fa776d8..c796cfd 100644 --- a/dist/esm/index.js.map +++ b/dist/esm/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC","sourcesContent":["export * from './parse';\nexport * from './stringify';\nexport * from './types';\n"]} \ No newline at end of file diff --git a/dist/esm/parse.js.map b/dist/esm/parse.js.map index afc8bbf..feb177d 100644 --- a/dist/esm/parse.js.map +++ b/dist/esm/parse.js.map @@ -1 +1 @@ -{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAG,CAA2B,MAAS,EAAE,QAAW,EAAoC,EAAE,CAC7G,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAExD,MAAM,YAAY,GAAG,CAAmB,GAAY,EAAwB,EAAE;IAC7E,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACtF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC1G,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CACnB,EAAE,CAAC,EAAE,CAAC,EAA6B,EACnC,OAAwB,EACuF,EAAE;IACjH,QAAQ,CAAC,EAAE,CAAC;QACX,KAAK,UAAU,CAAC,CAAC,CAAC;YACjB,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,OAAO,IAAI,CAAC,CAAC,sCAAsC;QACpD,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YAClB,OAAO,SAAS,CAAC;QAClB,CAAC;IACF,CAAC;IACD,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7B,CAAC;IACD,QAAQ,CAAC,EAAE,CAAC;QACX,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;oBACjB,KAAK,GAAG,EAAE,CAAC;gBACZ,CAAC;gBACD,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;gBAC9B,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CACzC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAC/D,MAAM,CAAC,CAAC,CAAC,CACT,CAAC;gBACF,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YAClC,CAAC;YACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,KAAK,GAAG,CAAC;QAClB,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACZ,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAA8B,CAAC,CAAC;QAChE,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACZ,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAmB,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,CAAC,CAAC;QACV,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC;IACF,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAmB,GAAY,EAAE,OAAwB,EAAW,EAAE;IACpF,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC3C,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;YAChC,IAAI,WAAW,EAAE,CAAC;gBACjB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,GAAoB,EAAE,OAAgC,CAAC,CAAC;gBAClG,IAAI,SAAS,EAAE,CAAC;oBACf,OAAO,MAAM,CAAC;gBACf,CAAC;YACF,CAAC;YACD,OAAO,WAAW,CAAC,GAAgC,EAAE,OAAO,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAmB,IAAY,EAAE,UAA2B,EAAE,EAAW,EAAE;IAC/F,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAG,CAA2B,MAAS,EAAE,QAAW,EAAoC,EAAE,CAC7G,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAExD,MAAM,YAAY,GAAG,CAAmB,GAAY,EAAwB,EAAE;IAC7E,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACtF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC1G,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CACnB,EAAE,CAAC,EAAE,CAAC,EAA6B,EACnC,OAAwB,EACuF,EAAE;IACjH,QAAQ,CAAC,EAAE,CAAC;QACX,KAAK,UAAU,CAAC,CAAC,CAAC;YACjB,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,OAAO,IAAI,CAAC,CAAC,sCAAsC;QACpD,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YAClB,OAAO,SAAS,CAAC;QAClB,CAAC;IACF,CAAC;IACD,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7B,CAAC;IACD,QAAQ,CAAC,EAAE,CAAC;QACX,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;oBACjB,KAAK,GAAG,EAAE,CAAC;gBACZ,CAAC;gBACD,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;gBAC9B,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CACzC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAC/D,MAAM,CAAC,CAAC,CAAC,CACT,CAAC;gBACF,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YAClC,CAAC;YACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,KAAK,GAAG,CAAC;QAClB,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACZ,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAA8B,CAAC,CAAC;QAChE,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACZ,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAmB,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,CAAC,CAAC;QACV,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC;IACF,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAmB,GAAY,EAAE,OAAwB,EAAW,EAAE;IACpF,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC3C,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;YAChC,IAAI,WAAW,EAAE,CAAC;gBACjB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,GAAoB,EAAE,OAAgC,CAAC,CAAC;gBAClG,IAAI,SAAS,EAAE,CAAC;oBACf,OAAO,MAAM,CAAC;gBACf,CAAC;YACF,CAAC;YACD,OAAO,WAAW,CAAC,GAAgC,EAAE,OAAO,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAmB,IAAY,EAAE,UAA2B,EAAE,EAAW,EAAE;IAC/F,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC,CAAC","sourcesContent":["import { CustomParseOptions, ParseOptions, StringifyType, TypedValue } from './types';\n\nconst hasOwnProperty = (object: X, property: Y): object is X & Record =>\n\tObject.prototype.hasOwnProperty.call(object, property);\n\nconst isTypedValue = (obj: unknown): obj is TypedValue => {\n\tif (typeof obj === 'object' && hasOwnProperty(obj, 't') && typeof obj.t === 'string') {\n\t\tconst keys = Object.keys(obj);\n\t\treturn keys.length === 1 || (keys.length === 2 && hasOwnProperty(obj, 'v') && typeof obj.v === 'string');\n\t}\n\treturn false;\n};\n\nconst convertType = (\n\t{ t, v }: TypedValue,\n\toptions: ParseOptions,\n): bigint | boolean | Date | Map | null | number | Set | string | symbol | undefined => {\n\tswitch (t) {\n\t\tcase 'function': {\n\t\t\treturn undefined;\n\t\t}\n\t\tcase 'null': {\n\t\t\treturn null; // eslint-disable-line unicorn/no-null\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn v === undefined ? Symbol() : Symbol.for(v);\n\t\t}\n\t\tcase 'undefined': {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\tif (v === undefined) {\n\t\tthrow new Error('No value');\n\t}\n\tswitch (t) {\n\t\tcase 'bigint': {\n\t\t\tif (v.startsWith('r')) {\n\t\t\t\tlet radix = Number.parseInt(v[1], 36);\n\t\t\t\tif (radix === 0) {\n\t\t\t\t\tradix = 36;\n\t\t\t\t}\n\t\t\t\tconst negative = v[2] === '-';\n\t\t\t\tconst startIndex = negative ? 3 : 2;\n\t\t\t\tconst value = [v.slice(startIndex)].reduce(\n\t\t\t\t\t(r, v) => r * BigInt(radix) + BigInt(Number.parseInt(v, radix)),\n\t\t\t\t\tBigInt(0),\n\t\t\t\t);\n\t\t\t\treturn negative ? -value : value;\n\t\t\t}\n\t\t\treturn BigInt(v);\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn v === '1';\n\t\t}\n\t\tcase 'Date': {\n\t\t\treturn v.includes('T') ? new Date(v) : new Date(Number(v));\n\t\t}\n\t\tcase 'Map': {\n\t\t\treturn new Map(parse(v, options) as Array<[unknown, unknown]>);\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn Number(v);\n\t\t}\n\t\tcase 'Set': {\n\t\t\treturn new Set(parse(v, options) as Array);\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn v;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown type: ${t}`);\n\t\t}\n\t}\n};\n\nconst decent = (obj: unknown, options: ParseOptions): unknown => {\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, options));\n\t} else if (obj && typeof obj === 'object') {\n\t\tif (isTypedValue(obj)) {\n\t\t\tconst { customParse } = options;\n\t\t\tif (customParse) {\n\t\t\t\tconst { useResult, result } = customParse(obj as TypedValue, options as CustomParseOptions);\n\t\t\t\tif (useResult) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn convertType(obj as TypedValue, options);\n\t\t}\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, options);\n\t\t}\n\t\treturn tmpObj;\n\t}\n\tthrow new Error('Invalid structure');\n};\n\nexport const parse = (json: string, options: ParseOptions = {}): unknown => {\n\treturn decent(JSON.parse(json), options);\n};\n"]} \ No newline at end of file diff --git a/dist/esm/stringify.js.map b/dist/esm/stringify.js.map index de37bb1..c40970a 100644 --- a/dist/esm/stringify.js.map +++ b/dist/esm/stringify.js.map @@ -1 +1 @@ -{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tCustomStringifyOptions,\n\tDefaultedStringifyOptions,\n\tStringifyOptions,\n\tStringifyType,\n\tTypedValue,\n} from './types';\n\nconst convertType = (\n\tobj: unknown,\n\toptions: DefaultedStringifyOptions,\n): TypedValue | undefined => {\n\tconst { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined } = options;\n\tif (obj === null) {\n\t\treturn skipNull ? undefined : { t: 'null' };\n\t} else if (obj === undefined) {\n\t\treturn skipUndefined ? undefined : { t: 'undefined' };\n\t} else if (obj instanceof Date) {\n\t\treturn { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() };\n\t} else if (obj instanceof Map) {\n\t\treturn { t: 'Map', v: stringify([...obj], options) };\n\t} else if (obj instanceof Set) {\n\t\treturn { t: 'Set', v: stringify([...obj], options) };\n\t}\n\tswitch (typeof obj) {\n\t\tcase 'bigint': {\n\t\t\tif (!Number.isInteger(bigintRadix) || bigintRadix < 2 || bigintRadix > 36) {\n\t\t\t\tthrow new RangeError('bigintRadix must be an integer between 2 and 36');\n\t\t\t}\n\t\t\tif (bigintRadix === 10) {\n\t\t\t\treturn { t: 'bigint', v: obj.toString() };\n\t\t\t}\n\t\t\treturn { t: 'bigint', v: 'r' + bigintRadix.toString(36).slice(-1) + obj.toString(bigintRadix) };\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn { t: 'boolean', v: obj ? '1' : '0' };\n\t\t}\n\t\tcase 'function': {\n\t\t\tif (!ignoreFunctions) {\n\t\t\t\tthrow new Error('Functions can not be stringified');\n\t\t\t}\n\t\t\treturn { t: 'function' };\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn { t: 'number', v: obj.toString() };\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn { t: 'string', v: obj };\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn { t: 'symbol', v: Symbol.keyFor(obj) };\n\t\t}\n\t}\n\tthrow new Error(`Unknown datatype: ${typeof obj}`);\n};\n\nconst decent = (obj: unknown, options: DefaultedStringifyOptions): unknown => {\n\tconst { customStringify } = options;\n\tif (customStringify) {\n\t\tconst { useResult, result } = customStringify(obj, options as CustomStringifyOptions);\n\t\tif (useResult) {\n\t\t\treturn result;\n\t\t}\n\t}\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, options));\n\t} else if (\n\t\tobj &&\n\t\ttypeof obj === 'object' &&\n\t\t!(obj instanceof Date) &&\n\t\t!(obj instanceof Map) &&\n\t\t!(obj instanceof Set)\n\t) {\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, options);\n\t\t}\n\t\treturn tmpObj;\n\t}\n\treturn convertType(obj, options);\n};\n\nexport const stringify = (obj: unknown, options: StringifyOptions = {}): string =>\n\tJSON.stringify(\n\t\tdecent(obj, {\n\t\t\tbigintRadix: options.bigintRadix ?? 10,\n\t\t\tcustomStringify: options.customStringify,\n\t\t\tdateFormat: options.dateFormat ?? 'iso',\n\t\t\tignoreFunctions: options.ignoreFunctions ?? false,\n\t\t\tskipNull: options.skipNull ?? false,\n\t\t\tskipUndefined: options.skipUndefined ?? false,\n\t\t}),\n\t);\n"]} \ No newline at end of file diff --git a/dist/esm/types.js.map b/dist/esm/types.js.map index b9f6907..8a95b2c 100644 --- a/dist/esm/types.js.map +++ b/dist/esm/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AA6DA,YAAY"} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AA6DA,YAAY","sourcesContent":["export type StringifyType =\n\t| 'bigint'\n\t| 'boolean'\n\t| 'Date'\n\t| 'function'\n\t| 'Map'\n\t| 'null'\n\t| 'number'\n\t| 'Set'\n\t| 'string'\n\t| 'symbol'\n\t| 'undefined';\n\nexport type DateFormat = 'iso' | 'number';\n\nexport interface TypedValue {\n\tt: T;\n\tv?: string;\n}\n\n// Start stringify\n\nexport interface BaseStringifyOptions {\n\tbigintRadix: number;\n\tdateFormat: DateFormat;\n\tignoreFunctions: boolean;\n\tskipNull: boolean;\n\tskipUndefined: boolean;\n}\n\nexport interface CustomStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify: CustomStringify;\n}\n\nexport type CustomStringifyResult = { useResult: boolean; result?: TypedValue };\n\nexport type CustomStringify = (\n\tobj: unknown,\n\toptions: CustomStringifyOptions,\n) => CustomStringifyResult;\n\nexport interface DefaultedStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify?: CustomStringify;\n}\n\nexport type StringifyOptions = Partial>;\n\n// End stringify\n\n// Start parse\n\nexport interface CustomParseOptions {\n\tcustomParse: CustomParse;\n}\n\nexport type CustomParseResult = { useResult: boolean; result?: unknown };\n\nexport type CustomParse = (obj: TypedValue, options: CustomParseOptions) => CustomParseResult;\n\nexport type ParseOptions = Partial>;\n\n// End parse\n"]} \ No newline at end of file diff --git a/tsconfig.base.json b/tsconfig.base.json index bc3bb7a..bf04282 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -3,8 +3,9 @@ "target": "ES2018", "module": "CommonJS", "strict": true, + "noImplicitAny": true, "sourceMap": true, - "noImplicitAny": true + "inlineSources": true }, "include": ["src"], "exclude": ["*/__tests__/**/*", "src/examples/**/*"] From 163c6ab5758e74262ada1e41b042c2d5981d7113 Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Fri, 15 Nov 2024 11:00:21 +0100 Subject: [PATCH 16/23] feat: Added src to files which will be provided on npmjs.com. This is for code mapping --- {src/__tests__ => __tests__}/typedStringify.test.ts | 2 +- eslint.config.mjs | 2 +- {src/examples => examples}/Buffer.ts | 2 +- {src/examples => examples}/basic.ts | 2 +- {src/examples => examples}/bignumber.js.ts | 2 +- package.json | 3 ++- tsconfig.base.json | 4 ++-- tsconfig.cjs.json | 2 +- tsconfig.esm.json | 2 +- 9 files changed, 11 insertions(+), 10 deletions(-) rename {src/__tests__ => __tests__}/typedStringify.test.ts (99%) rename {src/examples => examples}/Buffer.ts (97%) rename {src/examples => examples}/basic.ts (93%) rename {src/examples => examples}/bignumber.js.ts (97%) diff --git a/src/__tests__/typedStringify.test.ts b/__tests__/typedStringify.test.ts similarity index 99% rename from src/__tests__/typedStringify.test.ts rename to __tests__/typedStringify.test.ts index f91214e..7921187 100644 --- a/src/__tests__/typedStringify.test.ts +++ b/__tests__/typedStringify.test.ts @@ -1,6 +1,6 @@ import BigNumber from 'bignumber.js'; import { cloneDeep, isEqual } from 'lodash'; -import { CustomParse, CustomStringify, parse, stringify, StringifyType, TypedValue } from '../index'; +import { CustomParse, CustomStringify, parse, stringify, StringifyType, TypedValue } from '../src/index'; type TestType = StringifyType | 'BigNumber' | 'Buffer'; diff --git a/eslint.config.mjs b/eslint.config.mjs index 95a8ab0..33380c7 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -5,7 +5,7 @@ import globals from 'globals'; import tseslint from 'typescript-eslint'; export default [ - { files: ['**/*.{js,mjs,cjs,ts}'] }, + { files: ['**/*.{cjs,js,mjs,ts}'] }, { ignores: ['**/dist/**'] }, { languageOptions: { globals: globals.node } }, pluginJs.configs.recommended, diff --git a/src/examples/Buffer.ts b/examples/Buffer.ts similarity index 97% rename from src/examples/Buffer.ts rename to examples/Buffer.ts index 498da77..ed227e2 100644 --- a/src/examples/Buffer.ts +++ b/examples/Buffer.ts @@ -1,4 +1,4 @@ -import { CustomParse, CustomStringify, parse, stringify, StringifyType } from '../index'; +import { CustomParse, CustomStringify, parse, stringify, StringifyType } from '../src/index'; type MyType = StringifyType | 'Buffer'; diff --git a/src/examples/basic.ts b/examples/basic.ts similarity index 93% rename from src/examples/basic.ts rename to examples/basic.ts index aa61c00..61800a4 100644 --- a/src/examples/basic.ts +++ b/examples/basic.ts @@ -1,4 +1,4 @@ -import { parse, stringify } from '../index'; +import { parse, stringify } from '../src/index'; const obj = { a: 'hello', b: [1, 2, 3, 4, 5], c: new Date(1_731_319_860_000), d: 123_345_789n, e: true }; console.log(obj); diff --git a/src/examples/bignumber.js.ts b/examples/bignumber.js.ts similarity index 97% rename from src/examples/bignumber.js.ts rename to examples/bignumber.js.ts index 6488527..95c2e9b 100644 --- a/src/examples/bignumber.js.ts +++ b/examples/bignumber.js.ts @@ -1,5 +1,5 @@ import BigNumber from 'bignumber.js'; -import { CustomParse, CustomStringify, parse, stringify, StringifyType, TypedValue } from '../index'; +import { CustomParse, CustomStringify, parse, stringify, StringifyType, TypedValue } from '../src/index'; type MyType = StringifyType | 'BigNumber'; diff --git a/package.json b/package.json index 8c4409a..a754855 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "types": "./dist/types/index.d.ts" }, "files": [ - "dist/**/*" + "dist/**/*", + "src/**/*" ], "repository": { "type": "git", diff --git a/tsconfig.base.json b/tsconfig.base.json index bf04282..1dce578 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -4,9 +4,9 @@ "module": "CommonJS", "strict": true, "noImplicitAny": true, + "esModuleInterop": true, "sourceMap": true, "inlineSources": true }, - "include": ["src"], - "exclude": ["*/__tests__/**/*", "src/examples/**/*"] + "include": ["src"] } diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json index c2391ec..b4e98de 100644 --- a/tsconfig.cjs.json +++ b/tsconfig.cjs.json @@ -2,6 +2,6 @@ "extends": "./tsconfig.base.json", "compilerOptions": { "outDir": "./dist/cjs", - "module": "commonjs" + "module": "CommonJS" } } diff --git a/tsconfig.esm.json b/tsconfig.esm.json index ec8616b..3d0feb6 100644 --- a/tsconfig.esm.json +++ b/tsconfig.esm.json @@ -2,7 +2,7 @@ "extends": "./tsconfig.base.json", "compilerOptions": { "outDir": "./dist/esm", - "module": "esnext", + "module": "ESNext", "moduleResolution": "node" } } From d0fe237a07679ffd5ed46f5539a0579604ef1427 Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Fri, 15 Nov 2024 11:04:00 +0100 Subject: [PATCH 17/23] 3.0.0-alpha.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 03ae5c3..57afdb4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@softstack/typed-stringify", - "version": "3.0.0-alpha.1", + "version": "3.0.0-alpha.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@softstack/typed-stringify", - "version": "3.0.0-alpha.1", + "version": "3.0.0-alpha.2", "license": "MIT", "devDependencies": { "@types/jest": "^29.5.14", diff --git a/package.json b/package.json index a754855..9a13f1a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@softstack/typed-stringify", - "version": "3.0.0-alpha.1", + "version": "3.0.0-alpha.2", "description": "Stringifies and parses objects while restoring the proper type on parse", "main": "dist/cjs/index.js", "module": "dist/esm/index.js", From 65bafca840e04ffd77f1aea348fb7a37085abf3a Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Fri, 15 Nov 2024 12:52:10 +0100 Subject: [PATCH 18/23] feat: Removed *.tsbuildinfo files feat: Added keywords --- dist/cjs/tsconfig.cjs.tsbuildinfo | 1 - dist/esm/tsconfig.esm.tsbuildinfo | 1 - dist/types/tsconfig.types.tsbuildinfo | 1 - package.json | 5 ++++- 4 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 dist/cjs/tsconfig.cjs.tsbuildinfo delete mode 100644 dist/esm/tsconfig.esm.tsbuildinfo delete mode 100644 dist/types/tsconfig.types.tsbuildinfo diff --git a/dist/cjs/tsconfig.cjs.tsbuildinfo b/dist/cjs/tsconfig.cjs.tsbuildinfo deleted file mode 100644 index 93ccb56..0000000 --- a/dist/cjs/tsconfig.cjs.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"root":["../../src/index.ts","../../src/parse.ts","../../src/stringify.ts","../../src/types.ts"],"version":"5.6.3"} \ No newline at end of file diff --git a/dist/esm/tsconfig.esm.tsbuildinfo b/dist/esm/tsconfig.esm.tsbuildinfo deleted file mode 100644 index 93ccb56..0000000 --- a/dist/esm/tsconfig.esm.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"root":["../../src/index.ts","../../src/parse.ts","../../src/stringify.ts","../../src/types.ts"],"version":"5.6.3"} \ No newline at end of file diff --git a/dist/types/tsconfig.types.tsbuildinfo b/dist/types/tsconfig.types.tsbuildinfo deleted file mode 100644 index 93ccb56..0000000 --- a/dist/types/tsconfig.types.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"root":["../../src/index.ts","../../src/parse.ts","../../src/stringify.ts","../../src/types.ts"],"version":"5.6.3"} \ No newline at end of file diff --git a/package.json b/package.json index 9a13f1a..d958ca9 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "lint": "eslint ./src", "compile": "tsc -b ./tsconfig.cjs.json ./tsconfig.esm.json ./tsconfig.types.json", "build:clean": "rm -rf ./dist", - "build": "npm run build:clean && npm run compile", + "build": "npm run build:clean && npm run compile && rm ./dist/**/*.tsbuildinfo", "prepare": "npm run build", "prepublishOnly": "npm test && npm run lint", "preversion": "npm test && npm run lint", @@ -33,6 +33,9 @@ "postversion": "git push && git push --tags" }, "keywords": [ + "json", + "serialize", + "serializer", "stringify" ], "author": "Softstack GmbH (https://softstack.de)", From 7dae6785851530f1df2b249c700c19c548bb9d30 Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Fri, 15 Nov 2024 17:02:54 +0100 Subject: [PATCH 19/23] feat: Can stringify Error classes --- README.md | 1 + __tests__/typedStringify.test.ts | 10 +++++++++ dist/cjs/constants.js | 37 +++++++++++++++++++++++++++++++ dist/cjs/constants.js.map | 1 + dist/cjs/parse.js | 9 ++++++++ dist/cjs/parse.js.map | 2 +- dist/cjs/stringify.js | 7 ++++++ dist/cjs/stringify.js.map | 2 +- dist/cjs/types.js.map | 2 +- dist/esm/constants.js | 34 ++++++++++++++++++++++++++++ dist/esm/constants.js.map | 1 + dist/esm/parse.js | 9 ++++++++ dist/esm/parse.js.map | 2 +- dist/esm/stringify.js | 7 ++++++ dist/esm/stringify.js.map | 2 +- dist/esm/types.js.map | 2 +- dist/types/constants.d.ts | 1 + dist/types/types.d.ts | 2 +- src/constants.ts | 38 ++++++++++++++++++++++++++++++++ src/parse.ts | 25 ++++++++++++++++++++- src/stringify.ts | 6 +++++ src/types.ts | 1 + 22 files changed, 193 insertions(+), 8 deletions(-) create mode 100644 dist/cjs/constants.js create mode 100644 dist/cjs/constants.js.map create mode 100644 dist/esm/constants.js create mode 100644 dist/esm/constants.js.map create mode 100644 dist/types/constants.d.ts create mode 100644 src/constants.ts diff --git a/README.md b/README.md index 19d6f73..ea0526d 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ - Complex Types: - Array - Date + - Error - Map - Object - Set diff --git a/__tests__/typedStringify.test.ts b/__tests__/typedStringify.test.ts index 7921187..19a56d8 100644 --- a/__tests__/typedStringify.test.ts +++ b/__tests__/typedStringify.test.ts @@ -210,3 +210,13 @@ test('Map', () => { ]); expect(isEqual(map, parse(stringify(map)))).toBe(true); }); + +test('Error', () => { + const error = new Error('error message'); + expect(isEqual(error, parse(stringify(error)))).toBe(true); +}); + +test('RangeError', () => { + const error = new Error('error message'); + expect(isEqual(error, parse(stringify(error)))).toBe(true); +}); diff --git a/dist/cjs/constants.js b/dist/cjs/constants.js new file mode 100644 index 0000000..d1fe80b --- /dev/null +++ b/dist/cjs/constants.js @@ -0,0 +1,37 @@ +"use strict"; +/* +The code to generate ERROR_CONSTRUCTORS is from the following source: + +https://github.com/sindresorhus/serialize-error/blob/a2df3aeea73e39482eeb7d2fe445ac7120231593/error-constructors.js + +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ERROR_CONSTRUCTORS = void 0; +exports.ERROR_CONSTRUCTORS = new Map([ + // Native ES errors https://262.ecma-international.org/12.0/#sec-well-known-intrinsic-objects + EvalError, + RangeError, + ReferenceError, + SyntaxError, + TypeError, + URIError, + // Built-in errors + globalThis.DOMException, + // Node-specific errors + // https://nodejs.org/api/errors.html + globalThis.AssertionError, // eslint-disable-line @typescript-eslint/no-explicit-any + globalThis.SystemError, // eslint-disable-line @typescript-eslint/no-explicit-any +] + // Non-native Errors are used with `globalThis` because they might be missing. This filter drops them when undefined. + .filter(Boolean) + .map((constructor) => [constructor.name, constructor])); +//# sourceMappingURL=constants.js.map \ No newline at end of file diff --git a/dist/cjs/constants.js.map b/dist/cjs/constants.js.map new file mode 100644 index 0000000..b64b244 --- /dev/null +++ b/dist/cjs/constants.js.map @@ -0,0 +1 @@ +{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;EAcE;;;AAEW,QAAA,kBAAkB,GAAG,IAAI,GAAG,CACxC;IACC,6FAA6F;IAC7F,SAAS;IACT,UAAU;IACV,cAAc;IACd,WAAW;IACX,SAAS;IACT,QAAQ;IAER,kBAAkB;IAClB,UAAU,CAAC,YAAY;IAEvB,uBAAuB;IACvB,qCAAqC;IACpC,UAAkB,CAAC,cAAc,EAAE,yDAAyD;IAC5F,UAAkB,CAAC,WAAW,EAAE,yDAAyD;CAC1F;IACA,qHAAqH;KACpH,MAAM,CAAC,OAAO,CAAC;KACf,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CACvD,CAAC","sourcesContent":["/*\nThe code to generate ERROR_CONSTRUCTORS is from the following source:\n\nhttps://github.com/sindresorhus/serialize-error/blob/a2df3aeea73e39482eeb7d2fe445ac7120231593/error-constructors.js\n\nMIT License\n\nCopyright (c) Sindre Sorhus (https://sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nexport const ERROR_CONSTRUCTORS = new Map(\n\t[\n\t\t// Native ES errors https://262.ecma-international.org/12.0/#sec-well-known-intrinsic-objects\n\t\tEvalError,\n\t\tRangeError,\n\t\tReferenceError,\n\t\tSyntaxError,\n\t\tTypeError,\n\t\tURIError,\n\n\t\t// Built-in errors\n\t\tglobalThis.DOMException,\n\n\t\t// Node-specific errors\n\t\t// https://nodejs.org/api/errors.html\n\t\t(globalThis as any).AssertionError, // eslint-disable-line @typescript-eslint/no-explicit-any\n\t\t(globalThis as any).SystemError, // eslint-disable-line @typescript-eslint/no-explicit-any\n\t]\n\t\t// Non-native Errors are used with `globalThis` because they might be missing. This filter drops them when undefined.\n\t\t.filter(Boolean)\n\t\t.map((constructor) => [constructor.name, constructor]),\n);\n"]} \ No newline at end of file diff --git a/dist/cjs/parse.js b/dist/cjs/parse.js index 85038d2..ecb3de3 100644 --- a/dist/cjs/parse.js +++ b/dist/cjs/parse.js @@ -1,6 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parse = void 0; +const constants_1 = require("./constants"); const hasOwnProperty = (object, property) => Object.prototype.hasOwnProperty.call(object, property); const isTypedValue = (obj) => { if (typeof obj === 'object' && hasOwnProperty(obj, 't') && typeof obj.t === 'string') { @@ -10,6 +11,7 @@ const isTypedValue = (obj) => { return false; }; const convertType = ({ t, v }, options) => { + var _a; switch (t) { case 'function': { return undefined; @@ -47,6 +49,13 @@ const convertType = ({ t, v }, options) => { case 'Date': { return v.includes('T') ? new Date(v) : new Date(Number(v)); } + case 'Error': { + const { name, message, stack } = (0, exports.parse)(v, options); + const ErrorConstructor = (_a = constants_1.ERROR_CONSTRUCTORS.get(name)) !== null && _a !== void 0 ? _a : Error; + const error = new ErrorConstructor(message); + error.stack = stack; + return error; + } case 'Map': { return new Map((0, exports.parse)(v, options)); } diff --git a/dist/cjs/parse.js.map b/dist/cjs/parse.js.map index 20af596..3d322dd 100644 --- a/dist/cjs/parse.js.map +++ b/dist/cjs/parse.js.map @@ -1 +1 @@ -{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":";;;AAEA,MAAM,cAAc,GAAG,CAA2B,MAAS,EAAE,QAAW,EAAoC,EAAE,CAC7G,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAExD,MAAM,YAAY,GAAG,CAAmB,GAAY,EAAwB,EAAE;IAC7E,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACtF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC1G,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CACnB,EAAE,CAAC,EAAE,CAAC,EAA6B,EACnC,OAAwB,EACuF,EAAE;IACjH,QAAQ,CAAC,EAAE,CAAC;QACX,KAAK,UAAU,CAAC,CAAC,CAAC;YACjB,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,OAAO,IAAI,CAAC,CAAC,sCAAsC;QACpD,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YAClB,OAAO,SAAS,CAAC;QAClB,CAAC;IACF,CAAC;IACD,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7B,CAAC;IACD,QAAQ,CAAC,EAAE,CAAC;QACX,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;oBACjB,KAAK,GAAG,EAAE,CAAC;gBACZ,CAAC;gBACD,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;gBAC9B,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CACzC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAC/D,MAAM,CAAC,CAAC,CAAC,CACT,CAAC;gBACF,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YAClC,CAAC;YACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,KAAK,GAAG,CAAC;QAClB,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACZ,OAAO,IAAI,GAAG,CAAC,IAAA,aAAK,EAAC,CAAC,EAAE,OAAO,CAA8B,CAAC,CAAC;QAChE,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACZ,OAAO,IAAI,GAAG,CAAC,IAAA,aAAK,EAAC,CAAC,EAAE,OAAO,CAAmB,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,CAAC,CAAC;QACV,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC;IACF,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAmB,GAAY,EAAE,OAAwB,EAAW,EAAE;IACpF,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC3C,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;YAChC,IAAI,WAAW,EAAE,CAAC;gBACjB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,GAAoB,EAAE,OAAgC,CAAC,CAAC;gBAClG,IAAI,SAAS,EAAE,CAAC;oBACf,OAAO,MAAM,CAAC;gBACf,CAAC;YACF,CAAC;YACD,OAAO,WAAW,CAAC,GAAgC,EAAE,OAAO,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACtC,CAAC,CAAC;AAEK,MAAM,KAAK,GAAG,CAAmB,IAAY,EAAE,UAA2B,EAAE,EAAW,EAAE;IAC/F,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC,CAAC;AAFW,QAAA,KAAK,SAEhB","sourcesContent":["import { CustomParseOptions, ParseOptions, StringifyType, TypedValue } from './types';\n\nconst hasOwnProperty = (object: X, property: Y): object is X & Record =>\n\tObject.prototype.hasOwnProperty.call(object, property);\n\nconst isTypedValue = (obj: unknown): obj is TypedValue => {\n\tif (typeof obj === 'object' && hasOwnProperty(obj, 't') && typeof obj.t === 'string') {\n\t\tconst keys = Object.keys(obj);\n\t\treturn keys.length === 1 || (keys.length === 2 && hasOwnProperty(obj, 'v') && typeof obj.v === 'string');\n\t}\n\treturn false;\n};\n\nconst convertType = (\n\t{ t, v }: TypedValue,\n\toptions: ParseOptions,\n): bigint | boolean | Date | Map | null | number | Set | string | symbol | undefined => {\n\tswitch (t) {\n\t\tcase 'function': {\n\t\t\treturn undefined;\n\t\t}\n\t\tcase 'null': {\n\t\t\treturn null; // eslint-disable-line unicorn/no-null\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn v === undefined ? Symbol() : Symbol.for(v);\n\t\t}\n\t\tcase 'undefined': {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\tif (v === undefined) {\n\t\tthrow new Error('No value');\n\t}\n\tswitch (t) {\n\t\tcase 'bigint': {\n\t\t\tif (v.startsWith('r')) {\n\t\t\t\tlet radix = Number.parseInt(v[1], 36);\n\t\t\t\tif (radix === 0) {\n\t\t\t\t\tradix = 36;\n\t\t\t\t}\n\t\t\t\tconst negative = v[2] === '-';\n\t\t\t\tconst startIndex = negative ? 3 : 2;\n\t\t\t\tconst value = [v.slice(startIndex)].reduce(\n\t\t\t\t\t(r, v) => r * BigInt(radix) + BigInt(Number.parseInt(v, radix)),\n\t\t\t\t\tBigInt(0),\n\t\t\t\t);\n\t\t\t\treturn negative ? -value : value;\n\t\t\t}\n\t\t\treturn BigInt(v);\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn v === '1';\n\t\t}\n\t\tcase 'Date': {\n\t\t\treturn v.includes('T') ? new Date(v) : new Date(Number(v));\n\t\t}\n\t\tcase 'Map': {\n\t\t\treturn new Map(parse(v, options) as Array<[unknown, unknown]>);\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn Number(v);\n\t\t}\n\t\tcase 'Set': {\n\t\t\treturn new Set(parse(v, options) as Array);\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn v;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown type: ${t}`);\n\t\t}\n\t}\n};\n\nconst decent = (obj: unknown, options: ParseOptions): unknown => {\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, options));\n\t} else if (obj && typeof obj === 'object') {\n\t\tif (isTypedValue(obj)) {\n\t\t\tconst { customParse } = options;\n\t\t\tif (customParse) {\n\t\t\t\tconst { useResult, result } = customParse(obj as TypedValue, options as CustomParseOptions);\n\t\t\t\tif (useResult) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn convertType(obj as TypedValue, options);\n\t\t}\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, options);\n\t\t}\n\t\treturn tmpObj;\n\t}\n\tthrow new Error('Invalid structure');\n};\n\nexport const parse = (json: string, options: ParseOptions = {}): unknown => {\n\treturn decent(JSON.parse(json), options);\n};\n"]} \ No newline at end of file +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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","sourcesContent":["import { ERROR_CONSTRUCTORS } from './constants';\nimport { CustomParseOptions, ParseOptions, StringifyType, TypedValue } from './types';\n\nconst hasOwnProperty = (object: X, property: Y): object is X & Record =>\n\tObject.prototype.hasOwnProperty.call(object, property);\n\nconst isTypedValue = (obj: unknown): obj is TypedValue => {\n\tif (typeof obj === 'object' && hasOwnProperty(obj, 't') && typeof obj.t === 'string') {\n\t\tconst keys = Object.keys(obj);\n\t\treturn keys.length === 1 || (keys.length === 2 && hasOwnProperty(obj, 'v') && typeof obj.v === 'string');\n\t}\n\treturn false;\n};\n\nconst convertType = (\n\t{ t, v }: TypedValue,\n\toptions: ParseOptions,\n):\n\t| bigint\n\t| boolean\n\t| Date\n\t| Error\n\t| Map\n\t| null\n\t| number\n\t| Set\n\t| string\n\t| symbol\n\t| undefined => {\n\tswitch (t) {\n\t\tcase 'function': {\n\t\t\treturn undefined;\n\t\t}\n\t\tcase 'null': {\n\t\t\treturn null; // eslint-disable-line unicorn/no-null\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn v === undefined ? Symbol() : Symbol.for(v);\n\t\t}\n\t\tcase 'undefined': {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\tif (v === undefined) {\n\t\tthrow new Error('No value');\n\t}\n\tswitch (t) {\n\t\tcase 'bigint': {\n\t\t\tif (v.startsWith('r')) {\n\t\t\t\tlet radix = Number.parseInt(v[1], 36);\n\t\t\t\tif (radix === 0) {\n\t\t\t\t\tradix = 36;\n\t\t\t\t}\n\t\t\t\tconst negative = v[2] === '-';\n\t\t\t\tconst startIndex = negative ? 3 : 2;\n\t\t\t\tconst value = [v.slice(startIndex)].reduce(\n\t\t\t\t\t(r, v) => r * BigInt(radix) + BigInt(Number.parseInt(v, radix)),\n\t\t\t\t\tBigInt(0),\n\t\t\t\t);\n\t\t\t\treturn negative ? -value : value;\n\t\t\t}\n\t\t\treturn BigInt(v);\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn v === '1';\n\t\t}\n\t\tcase 'Date': {\n\t\t\treturn v.includes('T') ? new Date(v) : new Date(Number(v));\n\t\t}\n\t\tcase 'Error': {\n\t\t\tconst { name, message, stack } = parse(v, options) as {\n\t\t\t\tname: string;\n\t\t\t\tmessage: string;\n\t\t\t\tstack: string | undefined;\n\t\t\t};\n\t\t\tconst ErrorConstructor = ERROR_CONSTRUCTORS.get(name) ?? Error;\n\t\t\tconst error = new ErrorConstructor(message);\n\t\t\terror.stack = stack;\n\t\t\treturn error;\n\t\t}\n\t\tcase 'Map': {\n\t\t\treturn new Map(parse(v, options) as Array<[unknown, unknown]>);\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn Number(v);\n\t\t}\n\t\tcase 'Set': {\n\t\t\treturn new Set(parse(v, options) as Array);\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn v;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown type: ${t}`);\n\t\t}\n\t}\n};\n\nconst decent = (obj: unknown, options: ParseOptions): unknown => {\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, options));\n\t} else if (obj && typeof obj === 'object') {\n\t\tif (isTypedValue(obj)) {\n\t\t\tconst { customParse } = options;\n\t\t\tif (customParse) {\n\t\t\t\tconst { useResult, result } = customParse(obj as TypedValue, options as CustomParseOptions);\n\t\t\t\tif (useResult) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn convertType(obj as TypedValue, options);\n\t\t}\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, options);\n\t\t}\n\t\treturn tmpObj;\n\t}\n\tthrow new Error('Invalid structure');\n};\n\nexport const parse = (json: string, options: ParseOptions = {}): unknown => {\n\treturn decent(JSON.parse(json), options);\n};\n"]} \ No newline at end of file diff --git a/dist/cjs/stringify.js b/dist/cjs/stringify.js index e9483ac..2f7862a 100644 --- a/dist/cjs/stringify.js +++ b/dist/cjs/stringify.js @@ -12,6 +12,12 @@ const convertType = (obj, options) => { else if (obj instanceof Date) { return { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() }; } + else if (obj instanceof Error) { + return { + t: 'Error', + v: (0, exports.stringify)({ name: obj.name, message: obj.message, stack: obj.stack }, options), + }; + } else if (obj instanceof Map) { return { t: 'Map', v: (0, exports.stringify)([...obj], options) }; } @@ -63,6 +69,7 @@ const decent = (obj, options) => { else if (obj && typeof obj === 'object' && !(obj instanceof Date) && + !(obj instanceof Error) && !(obj instanceof Map) && !(obj instanceof Set)) { const tmpObj = {}; diff --git a/dist/cjs/stringify.js.map b/dist/cjs/stringify.js.map index 508483f..6d43edc 100644 --- a/dist/cjs/stringify.js.map +++ b/dist/cjs/stringify.js.map @@ -1 +1 @@ -{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":";;;AAQA,MAAM,WAAW,GAAG,CACnB,GAAY,EACZ,OAAqC,EACG,EAAE;IAC1C,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IACtF,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7C,CAAC;SAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;IACvD,CAAC;SAAM,IAAI,GAAG,YAAY,IAAI,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9F,CAAC;SAAM,IAAI,GAAG,YAAY,GAAG,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAA,iBAAS,EAAC,CAAC,GAAG,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;IACtD,CAAC;SAAM,IAAI,GAAG,YAAY,GAAG,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAA,iBAAS,EAAC,CAAC,GAAG,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;IACtD,CAAC;IACD,QAAQ,OAAO,GAAG,EAAE,CAAC;QACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,EAAE,EAAE,CAAC;gBAC3E,MAAM,IAAI,UAAU,CAAC,iDAAiD,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;gBACxB,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3C,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACjG,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7C,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,eAAe,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;QAC1B,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC3C,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QAChC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,CAAC;IACF,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,GAAG,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAmB,GAAY,EAAE,OAAqC,EAAW,EAAE;IACjG,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IACpC,IAAI,eAAe,EAAE,CAAC;QACrB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,OAAoC,CAAC,CAAC;QACzF,IAAI,SAAS,EAAE,CAAC;YACf,OAAO,MAAM,CAAC;QACf,CAAC;IACF,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,IACN,GAAG;QACH,OAAO,GAAG,KAAK,QAAQ;QACvB,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC;QACtB,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC;QACrB,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC,EACpB,CAAC;QACF,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IACD,OAAO,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC,CAAC;AAEK,MAAM,SAAS,GAAG,CAAmC,GAAY,EAAE,UAA+B,EAAE,EAAU,EAAE;;IACtH,OAAA,IAAI,CAAC,SAAS,CACb,MAAM,CAAC,GAAG,EAAE;QACX,WAAW,EAAE,MAAA,OAAO,CAAC,WAAW,mCAAI,EAAE;QACtC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,UAAU,EAAE,MAAA,OAAO,CAAC,UAAU,mCAAI,KAAK;QACvC,eAAe,EAAE,MAAA,OAAO,CAAC,eAAe,mCAAI,KAAK;QACjD,QAAQ,EAAE,MAAA,OAAO,CAAC,QAAQ,mCAAI,KAAK;QACnC,aAAa,EAAE,MAAA,OAAO,CAAC,aAAa,mCAAI,KAAK;KAC7C,CAAC,CACF,CAAA;CAAA,CAAC;AAVU,QAAA,SAAS,aAUnB","sourcesContent":["import {\n\tCustomStringifyOptions,\n\tDefaultedStringifyOptions,\n\tStringifyOptions,\n\tStringifyType,\n\tTypedValue,\n} from './types';\n\nconst convertType = (\n\tobj: unknown,\n\toptions: DefaultedStringifyOptions,\n): TypedValue | undefined => {\n\tconst { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined } = options;\n\tif (obj === null) {\n\t\treturn skipNull ? undefined : { t: 'null' };\n\t} else if (obj === undefined) {\n\t\treturn skipUndefined ? undefined : { t: 'undefined' };\n\t} else if (obj instanceof Date) {\n\t\treturn { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() };\n\t} else if (obj instanceof Map) {\n\t\treturn { t: 'Map', v: stringify([...obj], options) };\n\t} else if (obj instanceof Set) {\n\t\treturn { t: 'Set', v: stringify([...obj], options) };\n\t}\n\tswitch (typeof obj) {\n\t\tcase 'bigint': {\n\t\t\tif (!Number.isInteger(bigintRadix) || bigintRadix < 2 || bigintRadix > 36) {\n\t\t\t\tthrow new RangeError('bigintRadix must be an integer between 2 and 36');\n\t\t\t}\n\t\t\tif (bigintRadix === 10) {\n\t\t\t\treturn { t: 'bigint', v: obj.toString() };\n\t\t\t}\n\t\t\treturn { t: 'bigint', v: 'r' + bigintRadix.toString(36).slice(-1) + obj.toString(bigintRadix) };\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn { t: 'boolean', v: obj ? '1' : '0' };\n\t\t}\n\t\tcase 'function': {\n\t\t\tif (!ignoreFunctions) {\n\t\t\t\tthrow new Error('Functions can not be stringified');\n\t\t\t}\n\t\t\treturn { t: 'function' };\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn { t: 'number', v: obj.toString() };\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn { t: 'string', v: obj };\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn { t: 'symbol', v: Symbol.keyFor(obj) };\n\t\t}\n\t}\n\tthrow new Error(`Unknown datatype: ${typeof obj}`);\n};\n\nconst decent = (obj: unknown, options: DefaultedStringifyOptions): unknown => {\n\tconst { customStringify } = options;\n\tif (customStringify) {\n\t\tconst { useResult, result } = customStringify(obj, options as CustomStringifyOptions);\n\t\tif (useResult) {\n\t\t\treturn result;\n\t\t}\n\t}\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, options));\n\t} else if (\n\t\tobj &&\n\t\ttypeof obj === 'object' &&\n\t\t!(obj instanceof Date) &&\n\t\t!(obj instanceof Map) &&\n\t\t!(obj instanceof Set)\n\t) {\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, options);\n\t\t}\n\t\treturn tmpObj;\n\t}\n\treturn convertType(obj, options);\n};\n\nexport const stringify = (obj: unknown, options: StringifyOptions = {}): string =>\n\tJSON.stringify(\n\t\tdecent(obj, {\n\t\t\tbigintRadix: options.bigintRadix ?? 10,\n\t\t\tcustomStringify: options.customStringify,\n\t\t\tdateFormat: options.dateFormat ?? 'iso',\n\t\t\tignoreFunctions: options.ignoreFunctions ?? false,\n\t\t\tskipNull: options.skipNull ?? false,\n\t\t\tskipUndefined: options.skipUndefined ?? false,\n\t\t}),\n\t);\n"]} \ No newline at end of file +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tCustomStringifyOptions,\n\tDefaultedStringifyOptions,\n\tStringifyOptions,\n\tStringifyType,\n\tTypedValue,\n} from './types';\n\nconst convertType = (\n\tobj: unknown,\n\toptions: DefaultedStringifyOptions,\n): TypedValue | undefined => {\n\tconst { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined } = options;\n\tif (obj === null) {\n\t\treturn skipNull ? undefined : { t: 'null' };\n\t} else if (obj === undefined) {\n\t\treturn skipUndefined ? undefined : { t: 'undefined' };\n\t} else if (obj instanceof Date) {\n\t\treturn { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() };\n\t} else if (obj instanceof Error) {\n\t\treturn {\n\t\t\tt: 'Error',\n\t\t\tv: stringify({ name: obj.name, message: obj.message, stack: obj.stack }, options),\n\t\t};\n\t} else if (obj instanceof Map) {\n\t\treturn { t: 'Map', v: stringify([...obj], options) };\n\t} else if (obj instanceof Set) {\n\t\treturn { t: 'Set', v: stringify([...obj], options) };\n\t}\n\tswitch (typeof obj) {\n\t\tcase 'bigint': {\n\t\t\tif (!Number.isInteger(bigintRadix) || bigintRadix < 2 || bigintRadix > 36) {\n\t\t\t\tthrow new RangeError('bigintRadix must be an integer between 2 and 36');\n\t\t\t}\n\t\t\tif (bigintRadix === 10) {\n\t\t\t\treturn { t: 'bigint', v: obj.toString() };\n\t\t\t}\n\t\t\treturn { t: 'bigint', v: 'r' + bigintRadix.toString(36).slice(-1) + obj.toString(bigintRadix) };\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn { t: 'boolean', v: obj ? '1' : '0' };\n\t\t}\n\t\tcase 'function': {\n\t\t\tif (!ignoreFunctions) {\n\t\t\t\tthrow new Error('Functions can not be stringified');\n\t\t\t}\n\t\t\treturn { t: 'function' };\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn { t: 'number', v: obj.toString() };\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn { t: 'string', v: obj };\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn { t: 'symbol', v: Symbol.keyFor(obj) };\n\t\t}\n\t}\n\tthrow new Error(`Unknown datatype: ${typeof obj}`);\n};\n\nconst decent = (obj: unknown, options: DefaultedStringifyOptions): unknown => {\n\tconst { customStringify } = options;\n\tif (customStringify) {\n\t\tconst { useResult, result } = customStringify(obj, options as CustomStringifyOptions);\n\t\tif (useResult) {\n\t\t\treturn result;\n\t\t}\n\t}\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, options));\n\t} else if (\n\t\tobj &&\n\t\ttypeof obj === 'object' &&\n\t\t!(obj instanceof Date) &&\n\t\t!(obj instanceof Error) &&\n\t\t!(obj instanceof Map) &&\n\t\t!(obj instanceof Set)\n\t) {\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, options);\n\t\t}\n\t\treturn tmpObj;\n\t}\n\treturn convertType(obj, options);\n};\n\nexport const stringify = (obj: unknown, options: StringifyOptions = {}): string =>\n\tJSON.stringify(\n\t\tdecent(obj, {\n\t\t\tbigintRadix: options.bigintRadix ?? 10,\n\t\t\tcustomStringify: options.customStringify,\n\t\t\tdateFormat: options.dateFormat ?? 'iso',\n\t\t\tignoreFunctions: options.ignoreFunctions ?? false,\n\t\t\tskipNull: options.skipNull ?? false,\n\t\t\tskipUndefined: options.skipUndefined ?? false,\n\t\t}),\n\t);\n"]} \ No newline at end of file diff --git a/dist/cjs/types.js.map b/dist/cjs/types.js.map index f672c3f..2d6b5cd 100644 --- a/dist/cjs/types.js.map +++ b/dist/cjs/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;AA6DA,YAAY","sourcesContent":["export type StringifyType =\n\t| 'bigint'\n\t| 'boolean'\n\t| 'Date'\n\t| 'function'\n\t| 'Map'\n\t| 'null'\n\t| 'number'\n\t| 'Set'\n\t| 'string'\n\t| 'symbol'\n\t| 'undefined';\n\nexport type DateFormat = 'iso' | 'number';\n\nexport interface TypedValue {\n\tt: T;\n\tv?: string;\n}\n\n// Start stringify\n\nexport interface BaseStringifyOptions {\n\tbigintRadix: number;\n\tdateFormat: DateFormat;\n\tignoreFunctions: boolean;\n\tskipNull: boolean;\n\tskipUndefined: boolean;\n}\n\nexport interface CustomStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify: CustomStringify;\n}\n\nexport type CustomStringifyResult = { useResult: boolean; result?: TypedValue };\n\nexport type CustomStringify = (\n\tobj: unknown,\n\toptions: CustomStringifyOptions,\n) => CustomStringifyResult;\n\nexport interface DefaultedStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify?: CustomStringify;\n}\n\nexport type StringifyOptions = Partial>;\n\n// End stringify\n\n// Start parse\n\nexport interface CustomParseOptions {\n\tcustomParse: CustomParse;\n}\n\nexport type CustomParseResult = { useResult: boolean; result?: unknown };\n\nexport type CustomParse = (obj: TypedValue, options: CustomParseOptions) => CustomParseResult;\n\nexport type ParseOptions = Partial>;\n\n// End parse\n"]} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;AA8DA,YAAY","sourcesContent":["export type StringifyType =\n\t| 'bigint'\n\t| 'boolean'\n\t| 'Date'\n\t| 'Error'\n\t| 'function'\n\t| 'Map'\n\t| 'null'\n\t| 'number'\n\t| 'Set'\n\t| 'string'\n\t| 'symbol'\n\t| 'undefined';\n\nexport type DateFormat = 'iso' | 'number';\n\nexport interface TypedValue {\n\tt: T;\n\tv?: string;\n}\n\n// Start stringify\n\nexport interface BaseStringifyOptions {\n\tbigintRadix: number;\n\tdateFormat: DateFormat;\n\tignoreFunctions: boolean;\n\tskipNull: boolean;\n\tskipUndefined: boolean;\n}\n\nexport interface CustomStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify: CustomStringify;\n}\n\nexport type CustomStringifyResult = { useResult: boolean; result?: TypedValue };\n\nexport type CustomStringify = (\n\tobj: unknown,\n\toptions: CustomStringifyOptions,\n) => CustomStringifyResult;\n\nexport interface DefaultedStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify?: CustomStringify;\n}\n\nexport type StringifyOptions = Partial>;\n\n// End stringify\n\n// Start parse\n\nexport interface CustomParseOptions {\n\tcustomParse: CustomParse;\n}\n\nexport type CustomParseResult = { useResult: boolean; result?: unknown };\n\nexport type CustomParse = (obj: TypedValue, options: CustomParseOptions) => CustomParseResult;\n\nexport type ParseOptions = Partial>;\n\n// End parse\n"]} \ No newline at end of file diff --git a/dist/esm/constants.js b/dist/esm/constants.js new file mode 100644 index 0000000..a342346 --- /dev/null +++ b/dist/esm/constants.js @@ -0,0 +1,34 @@ +/* +The code to generate ERROR_CONSTRUCTORS is from the following source: + +https://github.com/sindresorhus/serialize-error/blob/a2df3aeea73e39482eeb7d2fe445ac7120231593/error-constructors.js + +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +export const ERROR_CONSTRUCTORS = new Map([ + // Native ES errors https://262.ecma-international.org/12.0/#sec-well-known-intrinsic-objects + EvalError, + RangeError, + ReferenceError, + SyntaxError, + TypeError, + URIError, + // Built-in errors + globalThis.DOMException, + // Node-specific errors + // https://nodejs.org/api/errors.html + globalThis.AssertionError, // eslint-disable-line @typescript-eslint/no-explicit-any + globalThis.SystemError, // eslint-disable-line @typescript-eslint/no-explicit-any +] + // Non-native Errors are used with `globalThis` because they might be missing. This filter drops them when undefined. + .filter(Boolean) + .map((constructor) => [constructor.name, constructor])); +//# sourceMappingURL=constants.js.map \ No newline at end of file diff --git a/dist/esm/constants.js.map b/dist/esm/constants.js.map new file mode 100644 index 0000000..da61658 --- /dev/null +++ b/dist/esm/constants.js.map @@ -0,0 +1 @@ +{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;EAcE;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,GAAG,CACxC;IACC,6FAA6F;IAC7F,SAAS;IACT,UAAU;IACV,cAAc;IACd,WAAW;IACX,SAAS;IACT,QAAQ;IAER,kBAAkB;IAClB,UAAU,CAAC,YAAY;IAEvB,uBAAuB;IACvB,qCAAqC;IACpC,UAAkB,CAAC,cAAc,EAAE,yDAAyD;IAC5F,UAAkB,CAAC,WAAW,EAAE,yDAAyD;CAC1F;IACA,qHAAqH;KACpH,MAAM,CAAC,OAAO,CAAC;KACf,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CACvD,CAAC","sourcesContent":["/*\nThe code to generate ERROR_CONSTRUCTORS is from the following source:\n\nhttps://github.com/sindresorhus/serialize-error/blob/a2df3aeea73e39482eeb7d2fe445ac7120231593/error-constructors.js\n\nMIT License\n\nCopyright (c) Sindre Sorhus (https://sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nexport const ERROR_CONSTRUCTORS = new Map(\n\t[\n\t\t// Native ES errors https://262.ecma-international.org/12.0/#sec-well-known-intrinsic-objects\n\t\tEvalError,\n\t\tRangeError,\n\t\tReferenceError,\n\t\tSyntaxError,\n\t\tTypeError,\n\t\tURIError,\n\n\t\t// Built-in errors\n\t\tglobalThis.DOMException,\n\n\t\t// Node-specific errors\n\t\t// https://nodejs.org/api/errors.html\n\t\t(globalThis as any).AssertionError, // eslint-disable-line @typescript-eslint/no-explicit-any\n\t\t(globalThis as any).SystemError, // eslint-disable-line @typescript-eslint/no-explicit-any\n\t]\n\t\t// Non-native Errors are used with `globalThis` because they might be missing. This filter drops them when undefined.\n\t\t.filter(Boolean)\n\t\t.map((constructor) => [constructor.name, constructor]),\n);\n"]} \ No newline at end of file diff --git a/dist/esm/parse.js b/dist/esm/parse.js index d52719d..8d491f0 100644 --- a/dist/esm/parse.js +++ b/dist/esm/parse.js @@ -1,3 +1,4 @@ +import { ERROR_CONSTRUCTORS } from './constants'; const hasOwnProperty = (object, property) => Object.prototype.hasOwnProperty.call(object, property); const isTypedValue = (obj) => { if (typeof obj === 'object' && hasOwnProperty(obj, 't') && typeof obj.t === 'string') { @@ -7,6 +8,7 @@ const isTypedValue = (obj) => { return false; }; const convertType = ({ t, v }, options) => { + var _a; switch (t) { case 'function': { return undefined; @@ -44,6 +46,13 @@ const convertType = ({ t, v }, options) => { case 'Date': { return v.includes('T') ? new Date(v) : new Date(Number(v)); } + case 'Error': { + const { name, message, stack } = parse(v, options); + const ErrorConstructor = (_a = ERROR_CONSTRUCTORS.get(name)) !== null && _a !== void 0 ? _a : Error; + const error = new ErrorConstructor(message); + error.stack = stack; + return error; + } case 'Map': { return new Map(parse(v, options)); } diff --git a/dist/esm/parse.js.map b/dist/esm/parse.js.map index feb177d..be9892b 100644 --- a/dist/esm/parse.js.map +++ b/dist/esm/parse.js.map @@ -1 +1 @@ -{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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","sourcesContent":["import { CustomParseOptions, ParseOptions, StringifyType, TypedValue } from './types';\n\nconst hasOwnProperty = (object: X, property: Y): object is X & Record =>\n\tObject.prototype.hasOwnProperty.call(object, property);\n\nconst isTypedValue = (obj: unknown): obj is TypedValue => {\n\tif (typeof obj === 'object' && hasOwnProperty(obj, 't') && typeof obj.t === 'string') {\n\t\tconst keys = Object.keys(obj);\n\t\treturn keys.length === 1 || (keys.length === 2 && hasOwnProperty(obj, 'v') && typeof obj.v === 'string');\n\t}\n\treturn false;\n};\n\nconst convertType = (\n\t{ t, v }: TypedValue,\n\toptions: ParseOptions,\n): bigint | boolean | Date | Map | null | number | Set | string | symbol | undefined => {\n\tswitch (t) {\n\t\tcase 'function': {\n\t\t\treturn undefined;\n\t\t}\n\t\tcase 'null': {\n\t\t\treturn null; // eslint-disable-line unicorn/no-null\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn v === undefined ? Symbol() : Symbol.for(v);\n\t\t}\n\t\tcase 'undefined': {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\tif (v === undefined) {\n\t\tthrow new Error('No value');\n\t}\n\tswitch (t) {\n\t\tcase 'bigint': {\n\t\t\tif (v.startsWith('r')) {\n\t\t\t\tlet radix = Number.parseInt(v[1], 36);\n\t\t\t\tif (radix === 0) {\n\t\t\t\t\tradix = 36;\n\t\t\t\t}\n\t\t\t\tconst negative = v[2] === '-';\n\t\t\t\tconst startIndex = negative ? 3 : 2;\n\t\t\t\tconst value = [v.slice(startIndex)].reduce(\n\t\t\t\t\t(r, v) => r * BigInt(radix) + BigInt(Number.parseInt(v, radix)),\n\t\t\t\t\tBigInt(0),\n\t\t\t\t);\n\t\t\t\treturn negative ? -value : value;\n\t\t\t}\n\t\t\treturn BigInt(v);\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn v === '1';\n\t\t}\n\t\tcase 'Date': {\n\t\t\treturn v.includes('T') ? new Date(v) : new Date(Number(v));\n\t\t}\n\t\tcase 'Map': {\n\t\t\treturn new Map(parse(v, options) as Array<[unknown, unknown]>);\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn Number(v);\n\t\t}\n\t\tcase 'Set': {\n\t\t\treturn new Set(parse(v, options) as Array);\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn v;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown type: ${t}`);\n\t\t}\n\t}\n};\n\nconst decent = (obj: unknown, options: ParseOptions): unknown => {\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, options));\n\t} else if (obj && typeof obj === 'object') {\n\t\tif (isTypedValue(obj)) {\n\t\t\tconst { customParse } = options;\n\t\t\tif (customParse) {\n\t\t\t\tconst { useResult, result } = customParse(obj as TypedValue, options as CustomParseOptions);\n\t\t\t\tif (useResult) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn convertType(obj as TypedValue, options);\n\t\t}\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, options);\n\t\t}\n\t\treturn tmpObj;\n\t}\n\tthrow new Error('Invalid structure');\n};\n\nexport const parse = (json: string, options: ParseOptions = {}): unknown => {\n\treturn decent(JSON.parse(json), options);\n};\n"]} \ No newline at end of file +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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","sourcesContent":["import { ERROR_CONSTRUCTORS } from './constants';\nimport { CustomParseOptions, ParseOptions, StringifyType, TypedValue } from './types';\n\nconst hasOwnProperty = (object: X, property: Y): object is X & Record =>\n\tObject.prototype.hasOwnProperty.call(object, property);\n\nconst isTypedValue = (obj: unknown): obj is TypedValue => {\n\tif (typeof obj === 'object' && hasOwnProperty(obj, 't') && typeof obj.t === 'string') {\n\t\tconst keys = Object.keys(obj);\n\t\treturn keys.length === 1 || (keys.length === 2 && hasOwnProperty(obj, 'v') && typeof obj.v === 'string');\n\t}\n\treturn false;\n};\n\nconst convertType = (\n\t{ t, v }: TypedValue,\n\toptions: ParseOptions,\n):\n\t| bigint\n\t| boolean\n\t| Date\n\t| Error\n\t| Map\n\t| null\n\t| number\n\t| Set\n\t| string\n\t| symbol\n\t| undefined => {\n\tswitch (t) {\n\t\tcase 'function': {\n\t\t\treturn undefined;\n\t\t}\n\t\tcase 'null': {\n\t\t\treturn null; // eslint-disable-line unicorn/no-null\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn v === undefined ? Symbol() : Symbol.for(v);\n\t\t}\n\t\tcase 'undefined': {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\tif (v === undefined) {\n\t\tthrow new Error('No value');\n\t}\n\tswitch (t) {\n\t\tcase 'bigint': {\n\t\t\tif (v.startsWith('r')) {\n\t\t\t\tlet radix = Number.parseInt(v[1], 36);\n\t\t\t\tif (radix === 0) {\n\t\t\t\t\tradix = 36;\n\t\t\t\t}\n\t\t\t\tconst negative = v[2] === '-';\n\t\t\t\tconst startIndex = negative ? 3 : 2;\n\t\t\t\tconst value = [v.slice(startIndex)].reduce(\n\t\t\t\t\t(r, v) => r * BigInt(radix) + BigInt(Number.parseInt(v, radix)),\n\t\t\t\t\tBigInt(0),\n\t\t\t\t);\n\t\t\t\treturn negative ? -value : value;\n\t\t\t}\n\t\t\treturn BigInt(v);\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn v === '1';\n\t\t}\n\t\tcase 'Date': {\n\t\t\treturn v.includes('T') ? new Date(v) : new Date(Number(v));\n\t\t}\n\t\tcase 'Error': {\n\t\t\tconst { name, message, stack } = parse(v, options) as {\n\t\t\t\tname: string;\n\t\t\t\tmessage: string;\n\t\t\t\tstack: string | undefined;\n\t\t\t};\n\t\t\tconst ErrorConstructor = ERROR_CONSTRUCTORS.get(name) ?? Error;\n\t\t\tconst error = new ErrorConstructor(message);\n\t\t\terror.stack = stack;\n\t\t\treturn error;\n\t\t}\n\t\tcase 'Map': {\n\t\t\treturn new Map(parse(v, options) as Array<[unknown, unknown]>);\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn Number(v);\n\t\t}\n\t\tcase 'Set': {\n\t\t\treturn new Set(parse(v, options) as Array);\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn v;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown type: ${t}`);\n\t\t}\n\t}\n};\n\nconst decent = (obj: unknown, options: ParseOptions): unknown => {\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, options));\n\t} else if (obj && typeof obj === 'object') {\n\t\tif (isTypedValue(obj)) {\n\t\t\tconst { customParse } = options;\n\t\t\tif (customParse) {\n\t\t\t\tconst { useResult, result } = customParse(obj as TypedValue, options as CustomParseOptions);\n\t\t\t\tif (useResult) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn convertType(obj as TypedValue, options);\n\t\t}\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, options);\n\t\t}\n\t\treturn tmpObj;\n\t}\n\tthrow new Error('Invalid structure');\n};\n\nexport const parse = (json: string, options: ParseOptions = {}): unknown => {\n\treturn decent(JSON.parse(json), options);\n};\n"]} \ No newline at end of file diff --git a/dist/esm/stringify.js b/dist/esm/stringify.js index e049df6..8957382 100644 --- a/dist/esm/stringify.js +++ b/dist/esm/stringify.js @@ -9,6 +9,12 @@ const convertType = (obj, options) => { else if (obj instanceof Date) { return { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() }; } + else if (obj instanceof Error) { + return { + t: 'Error', + v: stringify({ name: obj.name, message: obj.message, stack: obj.stack }, options), + }; + } else if (obj instanceof Map) { return { t: 'Map', v: stringify([...obj], options) }; } @@ -60,6 +66,7 @@ const decent = (obj, options) => { else if (obj && typeof obj === 'object' && !(obj instanceof Date) && + !(obj instanceof Error) && !(obj instanceof Map) && !(obj instanceof Set)) { const tmpObj = {}; diff --git a/dist/esm/stringify.js.map b/dist/esm/stringify.js.map index c40970a..6e642c8 100644 --- a/dist/esm/stringify.js.map +++ b/dist/esm/stringify.js.map @@ -1 +1 @@ -{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,GAAG,CACnB,GAAY,EACZ,OAAqC,EACG,EAAE;IAC1C,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IACtF,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7C,CAAC;SAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;IACvD,CAAC;SAAM,IAAI,GAAG,YAAY,IAAI,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9F,CAAC;SAAM,IAAI,GAAG,YAAY,GAAG,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;IACtD,CAAC;SAAM,IAAI,GAAG,YAAY,GAAG,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;IACtD,CAAC;IACD,QAAQ,OAAO,GAAG,EAAE,CAAC;QACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,EAAE,EAAE,CAAC;gBAC3E,MAAM,IAAI,UAAU,CAAC,iDAAiD,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,WAAW,KAAK,EAAE,EAAE,CAAC;gBACxB,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3C,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACjG,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YAChB,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7C,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,eAAe,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;QAC1B,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC3C,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QAChC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,CAAC;IACF,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,GAAG,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAmB,GAAY,EAAE,OAAqC,EAAW,EAAE;IACjG,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IACpC,IAAI,eAAe,EAAE,CAAC;QACrB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,OAAoC,CAAC,CAAC;QACzF,IAAI,SAAS,EAAE,CAAC;YACf,OAAO,MAAM,CAAC;QACf,CAAC;IACF,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,IACN,GAAG;QACH,OAAO,GAAG,KAAK,QAAQ;QACvB,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC;QACtB,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC;QACrB,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC,EACpB,CAAC;QACF,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IACD,OAAO,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAmC,GAAY,EAAE,UAA+B,EAAE,EAAU,EAAE;;IACtH,OAAA,IAAI,CAAC,SAAS,CACb,MAAM,CAAC,GAAG,EAAE;QACX,WAAW,EAAE,MAAA,OAAO,CAAC,WAAW,mCAAI,EAAE;QACtC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,UAAU,EAAE,MAAA,OAAO,CAAC,UAAU,mCAAI,KAAK;QACvC,eAAe,EAAE,MAAA,OAAO,CAAC,eAAe,mCAAI,KAAK;QACjD,QAAQ,EAAE,MAAA,OAAO,CAAC,QAAQ,mCAAI,KAAK;QACnC,aAAa,EAAE,MAAA,OAAO,CAAC,aAAa,mCAAI,KAAK;KAC7C,CAAC,CACF,CAAA;CAAA,CAAC","sourcesContent":["import {\n\tCustomStringifyOptions,\n\tDefaultedStringifyOptions,\n\tStringifyOptions,\n\tStringifyType,\n\tTypedValue,\n} from './types';\n\nconst convertType = (\n\tobj: unknown,\n\toptions: DefaultedStringifyOptions,\n): TypedValue | undefined => {\n\tconst { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined } = options;\n\tif (obj === null) {\n\t\treturn skipNull ? undefined : { t: 'null' };\n\t} else if (obj === undefined) {\n\t\treturn skipUndefined ? undefined : { t: 'undefined' };\n\t} else if (obj instanceof Date) {\n\t\treturn { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() };\n\t} else if (obj instanceof Map) {\n\t\treturn { t: 'Map', v: stringify([...obj], options) };\n\t} else if (obj instanceof Set) {\n\t\treturn { t: 'Set', v: stringify([...obj], options) };\n\t}\n\tswitch (typeof obj) {\n\t\tcase 'bigint': {\n\t\t\tif (!Number.isInteger(bigintRadix) || bigintRadix < 2 || bigintRadix > 36) {\n\t\t\t\tthrow new RangeError('bigintRadix must be an integer between 2 and 36');\n\t\t\t}\n\t\t\tif (bigintRadix === 10) {\n\t\t\t\treturn { t: 'bigint', v: obj.toString() };\n\t\t\t}\n\t\t\treturn { t: 'bigint', v: 'r' + bigintRadix.toString(36).slice(-1) + obj.toString(bigintRadix) };\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn { t: 'boolean', v: obj ? '1' : '0' };\n\t\t}\n\t\tcase 'function': {\n\t\t\tif (!ignoreFunctions) {\n\t\t\t\tthrow new Error('Functions can not be stringified');\n\t\t\t}\n\t\t\treturn { t: 'function' };\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn { t: 'number', v: obj.toString() };\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn { t: 'string', v: obj };\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn { t: 'symbol', v: Symbol.keyFor(obj) };\n\t\t}\n\t}\n\tthrow new Error(`Unknown datatype: ${typeof obj}`);\n};\n\nconst decent = (obj: unknown, options: DefaultedStringifyOptions): unknown => {\n\tconst { customStringify } = options;\n\tif (customStringify) {\n\t\tconst { useResult, result } = customStringify(obj, options as CustomStringifyOptions);\n\t\tif (useResult) {\n\t\t\treturn result;\n\t\t}\n\t}\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, options));\n\t} else if (\n\t\tobj &&\n\t\ttypeof obj === 'object' &&\n\t\t!(obj instanceof Date) &&\n\t\t!(obj instanceof Map) &&\n\t\t!(obj instanceof Set)\n\t) {\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, options);\n\t\t}\n\t\treturn tmpObj;\n\t}\n\treturn convertType(obj, options);\n};\n\nexport const stringify = (obj: unknown, options: StringifyOptions = {}): string =>\n\tJSON.stringify(\n\t\tdecent(obj, {\n\t\t\tbigintRadix: options.bigintRadix ?? 10,\n\t\t\tcustomStringify: options.customStringify,\n\t\t\tdateFormat: options.dateFormat ?? 'iso',\n\t\t\tignoreFunctions: options.ignoreFunctions ?? false,\n\t\t\tskipNull: options.skipNull ?? false,\n\t\t\tskipUndefined: options.skipUndefined ?? false,\n\t\t}),\n\t);\n"]} \ No newline at end of file +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tCustomStringifyOptions,\n\tDefaultedStringifyOptions,\n\tStringifyOptions,\n\tStringifyType,\n\tTypedValue,\n} from './types';\n\nconst convertType = (\n\tobj: unknown,\n\toptions: DefaultedStringifyOptions,\n): TypedValue | undefined => {\n\tconst { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined } = options;\n\tif (obj === null) {\n\t\treturn skipNull ? undefined : { t: 'null' };\n\t} else if (obj === undefined) {\n\t\treturn skipUndefined ? undefined : { t: 'undefined' };\n\t} else if (obj instanceof Date) {\n\t\treturn { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() };\n\t} else if (obj instanceof Error) {\n\t\treturn {\n\t\t\tt: 'Error',\n\t\t\tv: stringify({ name: obj.name, message: obj.message, stack: obj.stack }, options),\n\t\t};\n\t} else if (obj instanceof Map) {\n\t\treturn { t: 'Map', v: stringify([...obj], options) };\n\t} else if (obj instanceof Set) {\n\t\treturn { t: 'Set', v: stringify([...obj], options) };\n\t}\n\tswitch (typeof obj) {\n\t\tcase 'bigint': {\n\t\t\tif (!Number.isInteger(bigintRadix) || bigintRadix < 2 || bigintRadix > 36) {\n\t\t\t\tthrow new RangeError('bigintRadix must be an integer between 2 and 36');\n\t\t\t}\n\t\t\tif (bigintRadix === 10) {\n\t\t\t\treturn { t: 'bigint', v: obj.toString() };\n\t\t\t}\n\t\t\treturn { t: 'bigint', v: 'r' + bigintRadix.toString(36).slice(-1) + obj.toString(bigintRadix) };\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn { t: 'boolean', v: obj ? '1' : '0' };\n\t\t}\n\t\tcase 'function': {\n\t\t\tif (!ignoreFunctions) {\n\t\t\t\tthrow new Error('Functions can not be stringified');\n\t\t\t}\n\t\t\treturn { t: 'function' };\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn { t: 'number', v: obj.toString() };\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn { t: 'string', v: obj };\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn { t: 'symbol', v: Symbol.keyFor(obj) };\n\t\t}\n\t}\n\tthrow new Error(`Unknown datatype: ${typeof obj}`);\n};\n\nconst decent = (obj: unknown, options: DefaultedStringifyOptions): unknown => {\n\tconst { customStringify } = options;\n\tif (customStringify) {\n\t\tconst { useResult, result } = customStringify(obj, options as CustomStringifyOptions);\n\t\tif (useResult) {\n\t\t\treturn result;\n\t\t}\n\t}\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, options));\n\t} else if (\n\t\tobj &&\n\t\ttypeof obj === 'object' &&\n\t\t!(obj instanceof Date) &&\n\t\t!(obj instanceof Error) &&\n\t\t!(obj instanceof Map) &&\n\t\t!(obj instanceof Set)\n\t) {\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, options);\n\t\t}\n\t\treturn tmpObj;\n\t}\n\treturn convertType(obj, options);\n};\n\nexport const stringify = (obj: unknown, options: StringifyOptions = {}): string =>\n\tJSON.stringify(\n\t\tdecent(obj, {\n\t\t\tbigintRadix: options.bigintRadix ?? 10,\n\t\t\tcustomStringify: options.customStringify,\n\t\t\tdateFormat: options.dateFormat ?? 'iso',\n\t\t\tignoreFunctions: options.ignoreFunctions ?? false,\n\t\t\tskipNull: options.skipNull ?? false,\n\t\t\tskipUndefined: options.skipUndefined ?? false,\n\t\t}),\n\t);\n"]} \ No newline at end of file diff --git a/dist/esm/types.js.map b/dist/esm/types.js.map index 8a95b2c..e004486 100644 --- a/dist/esm/types.js.map +++ b/dist/esm/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AA6DA,YAAY","sourcesContent":["export type StringifyType =\n\t| 'bigint'\n\t| 'boolean'\n\t| 'Date'\n\t| 'function'\n\t| 'Map'\n\t| 'null'\n\t| 'number'\n\t| 'Set'\n\t| 'string'\n\t| 'symbol'\n\t| 'undefined';\n\nexport type DateFormat = 'iso' | 'number';\n\nexport interface TypedValue {\n\tt: T;\n\tv?: string;\n}\n\n// Start stringify\n\nexport interface BaseStringifyOptions {\n\tbigintRadix: number;\n\tdateFormat: DateFormat;\n\tignoreFunctions: boolean;\n\tskipNull: boolean;\n\tskipUndefined: boolean;\n}\n\nexport interface CustomStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify: CustomStringify;\n}\n\nexport type CustomStringifyResult = { useResult: boolean; result?: TypedValue };\n\nexport type CustomStringify = (\n\tobj: unknown,\n\toptions: CustomStringifyOptions,\n) => CustomStringifyResult;\n\nexport interface DefaultedStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify?: CustomStringify;\n}\n\nexport type StringifyOptions = Partial>;\n\n// End stringify\n\n// Start parse\n\nexport interface CustomParseOptions {\n\tcustomParse: CustomParse;\n}\n\nexport type CustomParseResult = { useResult: boolean; result?: unknown };\n\nexport type CustomParse = (obj: TypedValue, options: CustomParseOptions) => CustomParseResult;\n\nexport type ParseOptions = Partial>;\n\n// End parse\n"]} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AA8DA,YAAY","sourcesContent":["export type StringifyType =\n\t| 'bigint'\n\t| 'boolean'\n\t| 'Date'\n\t| 'Error'\n\t| 'function'\n\t| 'Map'\n\t| 'null'\n\t| 'number'\n\t| 'Set'\n\t| 'string'\n\t| 'symbol'\n\t| 'undefined';\n\nexport type DateFormat = 'iso' | 'number';\n\nexport interface TypedValue {\n\tt: T;\n\tv?: string;\n}\n\n// Start stringify\n\nexport interface BaseStringifyOptions {\n\tbigintRadix: number;\n\tdateFormat: DateFormat;\n\tignoreFunctions: boolean;\n\tskipNull: boolean;\n\tskipUndefined: boolean;\n}\n\nexport interface CustomStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify: CustomStringify;\n}\n\nexport type CustomStringifyResult = { useResult: boolean; result?: TypedValue };\n\nexport type CustomStringify = (\n\tobj: unknown,\n\toptions: CustomStringifyOptions,\n) => CustomStringifyResult;\n\nexport interface DefaultedStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify?: CustomStringify;\n}\n\nexport type StringifyOptions = Partial>;\n\n// End stringify\n\n// Start parse\n\nexport interface CustomParseOptions {\n\tcustomParse: CustomParse;\n}\n\nexport type CustomParseResult = { useResult: boolean; result?: unknown };\n\nexport type CustomParse = (obj: TypedValue, options: CustomParseOptions) => CustomParseResult;\n\nexport type ParseOptions = Partial>;\n\n// End parse\n"]} \ No newline at end of file diff --git a/dist/types/constants.d.ts b/dist/types/constants.d.ts new file mode 100644 index 0000000..e12847f --- /dev/null +++ b/dist/types/constants.d.ts @@ -0,0 +1 @@ +export declare const ERROR_CONSTRUCTORS: Map; diff --git a/dist/types/types.d.ts b/dist/types/types.d.ts index 8a15d02..67e4474 100644 --- a/dist/types/types.d.ts +++ b/dist/types/types.d.ts @@ -1,4 +1,4 @@ -export type StringifyType = 'bigint' | 'boolean' | 'Date' | 'function' | 'Map' | 'null' | 'number' | 'Set' | 'string' | 'symbol' | 'undefined'; +export type StringifyType = 'bigint' | 'boolean' | 'Date' | 'Error' | 'function' | 'Map' | 'null' | 'number' | 'Set' | 'string' | 'symbol' | 'undefined'; export type DateFormat = 'iso' | 'number'; export interface TypedValue { t: T; diff --git a/src/constants.ts b/src/constants.ts new file mode 100644 index 0000000..339859f --- /dev/null +++ b/src/constants.ts @@ -0,0 +1,38 @@ +/* +The code to generate ERROR_CONSTRUCTORS is from the following source: + +https://github.com/sindresorhus/serialize-error/blob/a2df3aeea73e39482eeb7d2fe445ac7120231593/error-constructors.js + +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +export const ERROR_CONSTRUCTORS = new Map( + [ + // Native ES errors https://262.ecma-international.org/12.0/#sec-well-known-intrinsic-objects + EvalError, + RangeError, + ReferenceError, + SyntaxError, + TypeError, + URIError, + + // Built-in errors + globalThis.DOMException, + + // Node-specific errors + // https://nodejs.org/api/errors.html + (globalThis as any).AssertionError, // eslint-disable-line @typescript-eslint/no-explicit-any + (globalThis as any).SystemError, // eslint-disable-line @typescript-eslint/no-explicit-any + ] + // Non-native Errors are used with `globalThis` because they might be missing. This filter drops them when undefined. + .filter(Boolean) + .map((constructor) => [constructor.name, constructor]), +); diff --git a/src/parse.ts b/src/parse.ts index 0c11cfe..c9e48d0 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -1,3 +1,4 @@ +import { ERROR_CONSTRUCTORS } from './constants'; import { CustomParseOptions, ParseOptions, StringifyType, TypedValue } from './types'; const hasOwnProperty = (object: X, property: Y): object is X & Record => @@ -14,7 +15,18 @@ const isTypedValue = (obj: unknown): obj is TypedValue => { const convertType = ( { t, v }: TypedValue, options: ParseOptions, -): bigint | boolean | Date | Map | null | number | Set | string | symbol | undefined => { +): + | bigint + | boolean + | Date + | Error + | Map + | null + | number + | Set + | string + | symbol + | undefined => { switch (t) { case 'function': { return undefined; @@ -55,6 +67,17 @@ const convertType = ( case 'Date': { return v.includes('T') ? new Date(v) : new Date(Number(v)); } + case 'Error': { + const { name, message, stack } = parse(v, options) as { + name: string; + message: string; + stack: string | undefined; + }; + const ErrorConstructor = ERROR_CONSTRUCTORS.get(name) ?? Error; + const error = new ErrorConstructor(message); + error.stack = stack; + return error; + } case 'Map': { return new Map(parse(v, options) as Array<[unknown, unknown]>); } diff --git a/src/stringify.ts b/src/stringify.ts index 843006f..b12e29d 100644 --- a/src/stringify.ts +++ b/src/stringify.ts @@ -17,6 +17,11 @@ const convertType = ( return skipUndefined ? undefined : { t: 'undefined' }; } else if (obj instanceof Date) { return { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() }; + } else if (obj instanceof Error) { + return { + t: 'Error', + v: stringify({ name: obj.name, message: obj.message, stack: obj.stack }, options), + }; } else if (obj instanceof Map) { return { t: 'Map', v: stringify([...obj], options) }; } else if (obj instanceof Set) { @@ -68,6 +73,7 @@ const decent = (obj: unknown, options: DefaultedStringifyOptio obj && typeof obj === 'object' && !(obj instanceof Date) && + !(obj instanceof Error) && !(obj instanceof Map) && !(obj instanceof Set) ) { diff --git a/src/types.ts b/src/types.ts index 916e394..8826895 100644 --- a/src/types.ts +++ b/src/types.ts @@ -2,6 +2,7 @@ export type StringifyType = | 'bigint' | 'boolean' | 'Date' + | 'Error' | 'function' | 'Map' | 'null' From 320839ec9d76c0eafcfd97611311f14ec6b995c2 Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Fri, 15 Nov 2024 17:03:40 +0100 Subject: [PATCH 20/23] 3.0.0-alpha.3 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 57afdb4..ee29273 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@softstack/typed-stringify", - "version": "3.0.0-alpha.2", + "version": "3.0.0-alpha.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@softstack/typed-stringify", - "version": "3.0.0-alpha.2", + "version": "3.0.0-alpha.3", "license": "MIT", "devDependencies": { "@types/jest": "^29.5.14", diff --git a/package.json b/package.json index d958ca9..2290b5f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@softstack/typed-stringify", - "version": "3.0.0-alpha.2", + "version": "3.0.0-alpha.3", "description": "Stringifies and parses objects while restoring the proper type on parse", "main": "dist/cjs/index.js", "module": "dist/esm/index.js", From 01adf42f9ec9a0808b2a4d62d9504d18791b617e Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Thu, 21 Nov 2024 10:30:02 +0100 Subject: [PATCH 21/23] bug: Fixed email address and homepage refactor: Updated devDependencies feat: Added max depth --- __tests__/typedStringify.test.ts | 13 ++ dist/cjs/parse.js | 19 ++- dist/cjs/parse.js.map | 2 +- dist/cjs/stringify.js | 28 +++-- dist/cjs/stringify.js.map | 2 +- dist/cjs/types.js.map | 2 +- dist/esm/parse.js | 19 ++- dist/esm/parse.js.map | 2 +- dist/esm/stringify.js | 28 +++-- dist/esm/stringify.js.map | 2 +- dist/esm/types.js.map | 2 +- dist/types/types.d.ts | 13 +- package-lock.json | 207 +++++++++++++++++-------------- package.json | 32 ++--- src/parse.ts | 25 ++-- src/stringify.ts | 18 ++- src/types.ts | 15 ++- 17 files changed, 267 insertions(+), 162 deletions(-) diff --git a/__tests__/typedStringify.test.ts b/__tests__/typedStringify.test.ts index 19a56d8..6d0c4d5 100644 --- a/__tests__/typedStringify.test.ts +++ b/__tests__/typedStringify.test.ts @@ -1,5 +1,6 @@ import BigNumber from 'bignumber.js'; import { cloneDeep, isEqual } from 'lodash'; +import { inspect } from 'node:util'; import { CustomParse, CustomStringify, parse, stringify, StringifyType, TypedValue } from '../src/index'; type TestType = StringifyType | 'BigNumber' | 'Buffer'; @@ -220,3 +221,15 @@ test('RangeError', () => { const error = new Error('error message'); expect(isEqual(error, parse(stringify(error)))).toBe(true); }); + +test('stringify depth', () => { + const obj = { '1': { '2': { '3': { '4': { '5': { '6': { '7': { '8': 'hello' } } } } } } } }; + expect(() => parse(stringify(obj, { maxDepth: 7 }))).toThrow(Error); + expect(isEqual(obj, parse(stringify(obj, { maxDepth: 8 })))).toBe(true); +}); + +test('parse depth', () => { + const obj = { '1': { '2': { '3': { '4': { '5': { '6': { '7': { '8': 'hello' } } } } } } } }; + expect(() => parse(stringify(obj), { maxDepth: 7 })).toThrow(Error); + expect(isEqual(obj, parse(stringify(obj), { maxDepth: 8 }))).toBe(true); +}); diff --git a/dist/cjs/parse.js b/dist/cjs/parse.js index ecb3de3..d33c484 100644 --- a/dist/cjs/parse.js +++ b/dist/cjs/parse.js @@ -74,30 +74,39 @@ const convertType = ({ t, v }, options) => { } }; const decent = (obj, options) => { + const { currentDepth, maxDepth } = options; + if (currentDepth > maxDepth) { + throw new Error('Max depth exceeded'); + } if (Array.isArray(obj)) { - return obj.map((obj) => decent(obj, options)); + return obj.map((obj) => decent(obj, { ...options, currentDepth: currentDepth + 1 })); } else if (obj && typeof obj === 'object') { if (isTypedValue(obj)) { const { customParse } = options; if (customParse) { - const { useResult, result } = customParse(obj, options); + const { useResult, result } = customParse(obj, { ...options, currentDepth: currentDepth + 1 }); if (useResult) { return result; } } - return convertType(obj, options); + return convertType(obj, { ...options, currentDepth: currentDepth + 1 }); } const tmpObj = {}; for (const [key, value] of Object.entries(obj)) { - tmpObj[key] = decent(value, options); + tmpObj[key] = decent(value, { ...options, currentDepth: currentDepth + 1 }); } return tmpObj; } throw new Error('Invalid structure'); }; const parse = (json, options = {}) => { - return decent(JSON.parse(json), options); + var _a, _b; + return decent(JSON.parse(json), { + currentDepth: (_a = options.currentDepth) !== null && _a !== void 0 ? _a : 0, + customParse: options.customParse, + maxDepth: (_b = options.maxDepth) !== null && _b !== void 0 ? _b : 20, + }); }; exports.parse = parse; //# sourceMappingURL=parse.js.map \ No newline at end of file diff --git a/dist/cjs/parse.js.map b/dist/cjs/parse.js.map index 3d322dd..a8e9e6a 100644 --- a/dist/cjs/parse.js.map +++ b/dist/cjs/parse.js.map @@ -1 +1 @@ -{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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","sourcesContent":["import { ERROR_CONSTRUCTORS } from './constants';\nimport { CustomParseOptions, ParseOptions, StringifyType, TypedValue } from './types';\n\nconst hasOwnProperty = (object: X, property: Y): object is X & Record =>\n\tObject.prototype.hasOwnProperty.call(object, property);\n\nconst isTypedValue = (obj: unknown): obj is TypedValue => {\n\tif (typeof obj === 'object' && hasOwnProperty(obj, 't') && typeof obj.t === 'string') {\n\t\tconst keys = Object.keys(obj);\n\t\treturn keys.length === 1 || (keys.length === 2 && hasOwnProperty(obj, 'v') && typeof obj.v === 'string');\n\t}\n\treturn false;\n};\n\nconst convertType = (\n\t{ t, v }: TypedValue,\n\toptions: ParseOptions,\n):\n\t| bigint\n\t| boolean\n\t| Date\n\t| Error\n\t| Map\n\t| null\n\t| number\n\t| Set\n\t| string\n\t| symbol\n\t| undefined => {\n\tswitch (t) {\n\t\tcase 'function': {\n\t\t\treturn undefined;\n\t\t}\n\t\tcase 'null': {\n\t\t\treturn null; // eslint-disable-line unicorn/no-null\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn v === undefined ? Symbol() : Symbol.for(v);\n\t\t}\n\t\tcase 'undefined': {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\tif (v === undefined) {\n\t\tthrow new Error('No value');\n\t}\n\tswitch (t) {\n\t\tcase 'bigint': {\n\t\t\tif (v.startsWith('r')) {\n\t\t\t\tlet radix = Number.parseInt(v[1], 36);\n\t\t\t\tif (radix === 0) {\n\t\t\t\t\tradix = 36;\n\t\t\t\t}\n\t\t\t\tconst negative = v[2] === '-';\n\t\t\t\tconst startIndex = negative ? 3 : 2;\n\t\t\t\tconst value = [v.slice(startIndex)].reduce(\n\t\t\t\t\t(r, v) => r * BigInt(radix) + BigInt(Number.parseInt(v, radix)),\n\t\t\t\t\tBigInt(0),\n\t\t\t\t);\n\t\t\t\treturn negative ? -value : value;\n\t\t\t}\n\t\t\treturn BigInt(v);\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn v === '1';\n\t\t}\n\t\tcase 'Date': {\n\t\t\treturn v.includes('T') ? new Date(v) : new Date(Number(v));\n\t\t}\n\t\tcase 'Error': {\n\t\t\tconst { name, message, stack } = parse(v, options) as {\n\t\t\t\tname: string;\n\t\t\t\tmessage: string;\n\t\t\t\tstack: string | undefined;\n\t\t\t};\n\t\t\tconst ErrorConstructor = ERROR_CONSTRUCTORS.get(name) ?? Error;\n\t\t\tconst error = new ErrorConstructor(message);\n\t\t\terror.stack = stack;\n\t\t\treturn error;\n\t\t}\n\t\tcase 'Map': {\n\t\t\treturn new Map(parse(v, options) as Array<[unknown, unknown]>);\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn Number(v);\n\t\t}\n\t\tcase 'Set': {\n\t\t\treturn new Set(parse(v, options) as Array);\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn v;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown type: ${t}`);\n\t\t}\n\t}\n};\n\nconst decent = (obj: unknown, options: ParseOptions): unknown => {\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, options));\n\t} else if (obj && typeof obj === 'object') {\n\t\tif (isTypedValue(obj)) {\n\t\t\tconst { customParse } = options;\n\t\t\tif (customParse) {\n\t\t\t\tconst { useResult, result } = customParse(obj as TypedValue, options as CustomParseOptions);\n\t\t\t\tif (useResult) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn convertType(obj as TypedValue, options);\n\t\t}\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, options);\n\t\t}\n\t\treturn tmpObj;\n\t}\n\tthrow new Error('Invalid structure');\n};\n\nexport const parse = (json: string, options: ParseOptions = {}): unknown => {\n\treturn decent(JSON.parse(json), options);\n};\n"]} \ No newline at end of file +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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","sourcesContent":["import { ERROR_CONSTRUCTORS } from './constants';\nimport { CustomParseOptions, DefaultedParseOptions, ParseOptions, StringifyType, TypedValue } from './types';\n\nconst hasOwnProperty = (object: X, property: Y): object is X & Record =>\n\tObject.prototype.hasOwnProperty.call(object, property);\n\nconst isTypedValue = (obj: unknown): obj is TypedValue => {\n\tif (typeof obj === 'object' && hasOwnProperty(obj, 't') && typeof obj.t === 'string') {\n\t\tconst keys = Object.keys(obj);\n\t\treturn keys.length === 1 || (keys.length === 2 && hasOwnProperty(obj, 'v') && typeof obj.v === 'string');\n\t}\n\treturn false;\n};\n\nconst convertType = (\n\t{ t, v }: TypedValue,\n\toptions: ParseOptions,\n):\n\t| bigint\n\t| boolean\n\t| Date\n\t| Error\n\t| Map\n\t| null\n\t| number\n\t| Set\n\t| string\n\t| symbol\n\t| undefined => {\n\tswitch (t) {\n\t\tcase 'function': {\n\t\t\treturn undefined;\n\t\t}\n\t\tcase 'null': {\n\t\t\treturn null; // eslint-disable-line unicorn/no-null\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn v === undefined ? Symbol() : Symbol.for(v);\n\t\t}\n\t\tcase 'undefined': {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\tif (v === undefined) {\n\t\tthrow new Error('No value');\n\t}\n\tswitch (t) {\n\t\tcase 'bigint': {\n\t\t\tif (v.startsWith('r')) {\n\t\t\t\tlet radix = Number.parseInt(v[1], 36);\n\t\t\t\tif (radix === 0) {\n\t\t\t\t\tradix = 36;\n\t\t\t\t}\n\t\t\t\tconst negative = v[2] === '-';\n\t\t\t\tconst startIndex = negative ? 3 : 2;\n\t\t\t\tconst value = [v.slice(startIndex)].reduce(\n\t\t\t\t\t(r, v) => r * BigInt(radix) + BigInt(Number.parseInt(v, radix)),\n\t\t\t\t\tBigInt(0),\n\t\t\t\t);\n\t\t\t\treturn negative ? -value : value;\n\t\t\t}\n\t\t\treturn BigInt(v);\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn v === '1';\n\t\t}\n\t\tcase 'Date': {\n\t\t\treturn v.includes('T') ? new Date(v) : new Date(Number(v));\n\t\t}\n\t\tcase 'Error': {\n\t\t\tconst { name, message, stack } = parse(v, options) as {\n\t\t\t\tname: string;\n\t\t\t\tmessage: string;\n\t\t\t\tstack: string | undefined;\n\t\t\t};\n\t\t\tconst ErrorConstructor = ERROR_CONSTRUCTORS.get(name) ?? Error;\n\t\t\tconst error = new ErrorConstructor(message);\n\t\t\terror.stack = stack;\n\t\t\treturn error;\n\t\t}\n\t\tcase 'Map': {\n\t\t\treturn new Map(parse(v, options) as Array<[unknown, unknown]>);\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn Number(v);\n\t\t}\n\t\tcase 'Set': {\n\t\t\treturn new Set(parse(v, options) as Array);\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn v;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown type: ${t}`);\n\t\t}\n\t}\n};\n\nconst decent = (obj: unknown, options: DefaultedParseOptions): unknown => {\n\tconst { currentDepth, maxDepth } = options;\n\tif (currentDepth > maxDepth) {\n\t\tthrow new Error('Max depth exceeded');\n\t}\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, { ...options, currentDepth: currentDepth + 1 }));\n\t} else if (obj && typeof obj === 'object') {\n\t\tif (isTypedValue(obj)) {\n\t\t\tconst { customParse } = options;\n\t\t\tif (customParse) {\n\t\t\t\tconst { useResult, result } = customParse(\n\t\t\t\t\tobj as TypedValue,\n\t\t\t\t\t{ ...options, currentDepth: currentDepth + 1 } as CustomParseOptions,\n\t\t\t\t);\n\t\t\t\tif (useResult) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn convertType(obj as TypedValue, { ...options, currentDepth: currentDepth + 1 });\n\t\t}\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, { ...options, currentDepth: currentDepth + 1 });\n\t\t}\n\t\treturn tmpObj;\n\t}\n\tthrow new Error('Invalid structure');\n};\n\nexport const parse = (json: string, options: ParseOptions = {}): unknown => {\n\treturn decent(JSON.parse(json), {\n\t\tcurrentDepth: options.currentDepth ?? 0,\n\t\tcustomParse: options.customParse,\n\t\tmaxDepth: options.maxDepth ?? 20,\n\t});\n};\n"]} \ No newline at end of file diff --git a/dist/cjs/stringify.js b/dist/cjs/stringify.js index 2f7862a..4edcc53 100644 --- a/dist/cjs/stringify.js +++ b/dist/cjs/stringify.js @@ -56,15 +56,21 @@ const convertType = (obj, options) => { throw new Error(`Unknown datatype: ${typeof obj}`); }; const decent = (obj, options) => { - const { customStringify } = options; + const { customStringify, currentDepth, maxDepth } = options; + if (currentDepth > maxDepth) { + throw new Error('Max depth exceeded'); + } if (customStringify) { - const { useResult, result } = customStringify(obj, options); + const { useResult, result } = customStringify(obj, { + ...options, + currentDepth: currentDepth + 1, + }); if (useResult) { return result; } } if (Array.isArray(obj)) { - return obj.map((obj) => decent(obj, options)); + return obj.map((obj) => decent(obj, { ...options, currentDepth: currentDepth + 1 })); } else if (obj && typeof obj === 'object' && @@ -74,21 +80,23 @@ const decent = (obj, options) => { !(obj instanceof Set)) { const tmpObj = {}; for (const [key, value] of Object.entries(obj)) { - tmpObj[key] = decent(value, options); + tmpObj[key] = decent(value, { ...options, currentDepth: currentDepth + 1 }); } return tmpObj; } - return convertType(obj, options); + return convertType(obj, { ...options, currentDepth: currentDepth + 1 }); }; const stringify = (obj, options = {}) => { - var _a, _b, _c, _d, _e; + var _a, _b, _c, _d, _e, _f, _g; return JSON.stringify(decent(obj, { bigintRadix: (_a = options.bigintRadix) !== null && _a !== void 0 ? _a : 10, + currentDepth: (_b = options.currentDepth) !== null && _b !== void 0 ? _b : 0, customStringify: options.customStringify, - dateFormat: (_b = options.dateFormat) !== null && _b !== void 0 ? _b : 'iso', - ignoreFunctions: (_c = options.ignoreFunctions) !== null && _c !== void 0 ? _c : false, - skipNull: (_d = options.skipNull) !== null && _d !== void 0 ? _d : false, - skipUndefined: (_e = options.skipUndefined) !== null && _e !== void 0 ? _e : false, + dateFormat: (_c = options.dateFormat) !== null && _c !== void 0 ? _c : 'iso', + ignoreFunctions: (_d = options.ignoreFunctions) !== null && _d !== void 0 ? _d : false, + maxDepth: (_e = options.maxDepth) !== null && _e !== void 0 ? _e : 20, + skipNull: (_f = options.skipNull) !== null && _f !== void 0 ? _f : false, + skipUndefined: (_g = options.skipUndefined) !== null && _g !== void 0 ? _g : false, })); }; exports.stringify = stringify; diff --git a/dist/cjs/stringify.js.map b/dist/cjs/stringify.js.map index 6d43edc..c4e7001 100644 --- a/dist/cjs/stringify.js.map +++ b/dist/cjs/stringify.js.map @@ -1 +1 @@ -{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tCustomStringifyOptions,\n\tDefaultedStringifyOptions,\n\tStringifyOptions,\n\tStringifyType,\n\tTypedValue,\n} from './types';\n\nconst convertType = (\n\tobj: unknown,\n\toptions: DefaultedStringifyOptions,\n): TypedValue | undefined => {\n\tconst { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined } = options;\n\tif (obj === null) {\n\t\treturn skipNull ? undefined : { t: 'null' };\n\t} else if (obj === undefined) {\n\t\treturn skipUndefined ? undefined : { t: 'undefined' };\n\t} else if (obj instanceof Date) {\n\t\treturn { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() };\n\t} else if (obj instanceof Error) {\n\t\treturn {\n\t\t\tt: 'Error',\n\t\t\tv: stringify({ name: obj.name, message: obj.message, stack: obj.stack }, options),\n\t\t};\n\t} else if (obj instanceof Map) {\n\t\treturn { t: 'Map', v: stringify([...obj], options) };\n\t} else if (obj instanceof Set) {\n\t\treturn { t: 'Set', v: stringify([...obj], options) };\n\t}\n\tswitch (typeof obj) {\n\t\tcase 'bigint': {\n\t\t\tif (!Number.isInteger(bigintRadix) || bigintRadix < 2 || bigintRadix > 36) {\n\t\t\t\tthrow new RangeError('bigintRadix must be an integer between 2 and 36');\n\t\t\t}\n\t\t\tif (bigintRadix === 10) {\n\t\t\t\treturn { t: 'bigint', v: obj.toString() };\n\t\t\t}\n\t\t\treturn { t: 'bigint', v: 'r' + bigintRadix.toString(36).slice(-1) + obj.toString(bigintRadix) };\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn { t: 'boolean', v: obj ? '1' : '0' };\n\t\t}\n\t\tcase 'function': {\n\t\t\tif (!ignoreFunctions) {\n\t\t\t\tthrow new Error('Functions can not be stringified');\n\t\t\t}\n\t\t\treturn { t: 'function' };\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn { t: 'number', v: obj.toString() };\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn { t: 'string', v: obj };\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn { t: 'symbol', v: Symbol.keyFor(obj) };\n\t\t}\n\t}\n\tthrow new Error(`Unknown datatype: ${typeof obj}`);\n};\n\nconst decent = (obj: unknown, options: DefaultedStringifyOptions): unknown => {\n\tconst { customStringify } = options;\n\tif (customStringify) {\n\t\tconst { useResult, result } = customStringify(obj, options as CustomStringifyOptions);\n\t\tif (useResult) {\n\t\t\treturn result;\n\t\t}\n\t}\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, options));\n\t} else if (\n\t\tobj &&\n\t\ttypeof obj === 'object' &&\n\t\t!(obj instanceof Date) &&\n\t\t!(obj instanceof Error) &&\n\t\t!(obj instanceof Map) &&\n\t\t!(obj instanceof Set)\n\t) {\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, options);\n\t\t}\n\t\treturn tmpObj;\n\t}\n\treturn convertType(obj, options);\n};\n\nexport const stringify = (obj: unknown, options: StringifyOptions = {}): string =>\n\tJSON.stringify(\n\t\tdecent(obj, {\n\t\t\tbigintRadix: options.bigintRadix ?? 10,\n\t\t\tcustomStringify: options.customStringify,\n\t\t\tdateFormat: options.dateFormat ?? 'iso',\n\t\t\tignoreFunctions: options.ignoreFunctions ?? false,\n\t\t\tskipNull: options.skipNull ?? false,\n\t\t\tskipUndefined: options.skipUndefined ?? false,\n\t\t}),\n\t);\n"]} \ No newline at end of file +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tCustomStringifyOptions,\n\tDefaultedStringifyOptions,\n\tStringifyOptions,\n\tStringifyType,\n\tTypedValue,\n} from './types';\n\nconst convertType = (\n\tobj: unknown,\n\toptions: DefaultedStringifyOptions,\n): TypedValue | undefined => {\n\tconst { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined } = options;\n\tif (obj === null) {\n\t\treturn skipNull ? undefined : { t: 'null' };\n\t} else if (obj === undefined) {\n\t\treturn skipUndefined ? undefined : { t: 'undefined' };\n\t} else if (obj instanceof Date) {\n\t\treturn { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() };\n\t} else if (obj instanceof Error) {\n\t\treturn {\n\t\t\tt: 'Error',\n\t\t\tv: stringify({ name: obj.name, message: obj.message, stack: obj.stack }, options),\n\t\t};\n\t} else if (obj instanceof Map) {\n\t\treturn { t: 'Map', v: stringify([...obj], options) };\n\t} else if (obj instanceof Set) {\n\t\treturn { t: 'Set', v: stringify([...obj], options) };\n\t}\n\tswitch (typeof obj) {\n\t\tcase 'bigint': {\n\t\t\tif (!Number.isInteger(bigintRadix) || bigintRadix < 2 || bigintRadix > 36) {\n\t\t\t\tthrow new RangeError('bigintRadix must be an integer between 2 and 36');\n\t\t\t}\n\t\t\tif (bigintRadix === 10) {\n\t\t\t\treturn { t: 'bigint', v: obj.toString() };\n\t\t\t}\n\t\t\treturn { t: 'bigint', v: 'r' + bigintRadix.toString(36).slice(-1) + obj.toString(bigintRadix) };\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn { t: 'boolean', v: obj ? '1' : '0' };\n\t\t}\n\t\tcase 'function': {\n\t\t\tif (!ignoreFunctions) {\n\t\t\t\tthrow new Error('Functions can not be stringified');\n\t\t\t}\n\t\t\treturn { t: 'function' };\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn { t: 'number', v: obj.toString() };\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn { t: 'string', v: obj };\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn { t: 'symbol', v: Symbol.keyFor(obj) };\n\t\t}\n\t}\n\tthrow new Error(`Unknown datatype: ${typeof obj}`);\n};\n\nconst decent = (obj: unknown, options: DefaultedStringifyOptions): unknown => {\n\tconst { customStringify, currentDepth, maxDepth } = options;\n\tif (currentDepth > maxDepth) {\n\t\tthrow new Error('Max depth exceeded');\n\t}\n\tif (customStringify) {\n\t\tconst { useResult, result } = customStringify(obj, {\n\t\t\t...options,\n\t\t\tcurrentDepth: currentDepth + 1,\n\t\t} as CustomStringifyOptions);\n\t\tif (useResult) {\n\t\t\treturn result;\n\t\t}\n\t}\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, { ...options, currentDepth: currentDepth + 1 }));\n\t} else if (\n\t\tobj &&\n\t\ttypeof obj === 'object' &&\n\t\t!(obj instanceof Date) &&\n\t\t!(obj instanceof Error) &&\n\t\t!(obj instanceof Map) &&\n\t\t!(obj instanceof Set)\n\t) {\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, { ...options, currentDepth: currentDepth + 1 });\n\t\t}\n\t\treturn tmpObj;\n\t}\n\treturn convertType(obj, { ...options, currentDepth: currentDepth + 1 });\n};\n\nexport const stringify = (obj: unknown, options: StringifyOptions = {}): string =>\n\tJSON.stringify(\n\t\tdecent(obj, {\n\t\t\tbigintRadix: options.bigintRadix ?? 10,\n\t\t\tcurrentDepth: options.currentDepth ?? 0,\n\t\t\tcustomStringify: options.customStringify,\n\t\t\tdateFormat: options.dateFormat ?? 'iso',\n\t\t\tignoreFunctions: options.ignoreFunctions ?? false,\n\t\t\tmaxDepth: options.maxDepth ?? 20,\n\t\t\tskipNull: options.skipNull ?? false,\n\t\t\tskipUndefined: options.skipUndefined ?? false,\n\t\t}),\n\t);\n"]} \ No newline at end of file diff --git a/dist/cjs/types.js.map b/dist/cjs/types.js.map index 2d6b5cd..a9a59c2 100644 --- a/dist/cjs/types.js.map +++ b/dist/cjs/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;AA8DA,YAAY","sourcesContent":["export type StringifyType =\n\t| 'bigint'\n\t| 'boolean'\n\t| 'Date'\n\t| 'Error'\n\t| 'function'\n\t| 'Map'\n\t| 'null'\n\t| 'number'\n\t| 'Set'\n\t| 'string'\n\t| 'symbol'\n\t| 'undefined';\n\nexport type DateFormat = 'iso' | 'number';\n\nexport interface TypedValue {\n\tt: T;\n\tv?: string;\n}\n\n// Start stringify\n\nexport interface BaseStringifyOptions {\n\tbigintRadix: number;\n\tdateFormat: DateFormat;\n\tignoreFunctions: boolean;\n\tskipNull: boolean;\n\tskipUndefined: boolean;\n}\n\nexport interface CustomStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify: CustomStringify;\n}\n\nexport type CustomStringifyResult = { useResult: boolean; result?: TypedValue };\n\nexport type CustomStringify = (\n\tobj: unknown,\n\toptions: CustomStringifyOptions,\n) => CustomStringifyResult;\n\nexport interface DefaultedStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify?: CustomStringify;\n}\n\nexport type StringifyOptions = Partial>;\n\n// End stringify\n\n// Start parse\n\nexport interface CustomParseOptions {\n\tcustomParse: CustomParse;\n}\n\nexport type CustomParseResult = { useResult: boolean; result?: unknown };\n\nexport type CustomParse = (obj: TypedValue, options: CustomParseOptions) => CustomParseResult;\n\nexport type ParseOptions = Partial>;\n\n// End parse\n"]} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;AAyEA,YAAY","sourcesContent":["export type StringifyType =\n\t| 'bigint'\n\t| 'boolean'\n\t| 'Date'\n\t| 'Error'\n\t| 'function'\n\t| 'Map'\n\t| 'null'\n\t| 'number'\n\t| 'Set'\n\t| 'string'\n\t| 'symbol'\n\t| 'undefined';\n\nexport type DateFormat = 'iso' | 'number';\n\nexport interface TypedValue {\n\tt: T;\n\tv?: string;\n}\n\n// Start stringify\n\nexport interface BaseStringifyOptions {\n\tbigintRadix: number;\n\tcurrentDepth: number;\n\tdateFormat: DateFormat;\n\tignoreFunctions: boolean;\n\tmaxDepth: number;\n\tskipNull: boolean;\n\tskipUndefined: boolean;\n}\n\nexport interface CustomStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify: CustomStringify;\n}\n\nexport type CustomStringifyResult = { useResult: boolean; result?: TypedValue };\n\nexport type CustomStringify = (\n\tobj: unknown,\n\toptions: CustomStringifyOptions,\n) => CustomStringifyResult;\n\nexport interface DefaultedStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify?: CustomStringify;\n}\n\nexport type StringifyOptions = Partial>;\n\n// End stringify\n\n// Start parse\n\nexport interface BaseParseOptions {\n\tcurrentDepth: number;\n\tmaxDepth: number;\n}\n\nexport interface CustomParseOptions extends BaseParseOptions {\n\tcustomParse: CustomParse;\n}\n\nexport type CustomParseResult = { useResult: boolean; result?: unknown };\n\nexport type CustomParse = (obj: TypedValue, options: CustomParseOptions) => CustomParseResult;\n\nexport interface DefaultedParseOptions extends BaseParseOptions {\n\tcustomParse?: CustomParse;\n}\n\nexport type ParseOptions = Partial>;\n\n// End parse\n"]} \ No newline at end of file diff --git a/dist/esm/parse.js b/dist/esm/parse.js index 8d491f0..632ac14 100644 --- a/dist/esm/parse.js +++ b/dist/esm/parse.js @@ -71,29 +71,38 @@ const convertType = ({ t, v }, options) => { } }; const decent = (obj, options) => { + const { currentDepth, maxDepth } = options; + if (currentDepth > maxDepth) { + throw new Error('Max depth exceeded'); + } if (Array.isArray(obj)) { - return obj.map((obj) => decent(obj, options)); + return obj.map((obj) => decent(obj, { ...options, currentDepth: currentDepth + 1 })); } else if (obj && typeof obj === 'object') { if (isTypedValue(obj)) { const { customParse } = options; if (customParse) { - const { useResult, result } = customParse(obj, options); + const { useResult, result } = customParse(obj, { ...options, currentDepth: currentDepth + 1 }); if (useResult) { return result; } } - return convertType(obj, options); + return convertType(obj, { ...options, currentDepth: currentDepth + 1 }); } const tmpObj = {}; for (const [key, value] of Object.entries(obj)) { - tmpObj[key] = decent(value, options); + tmpObj[key] = decent(value, { ...options, currentDepth: currentDepth + 1 }); } return tmpObj; } throw new Error('Invalid structure'); }; export const parse = (json, options = {}) => { - return decent(JSON.parse(json), options); + var _a, _b; + return decent(JSON.parse(json), { + currentDepth: (_a = options.currentDepth) !== null && _a !== void 0 ? _a : 0, + customParse: options.customParse, + maxDepth: (_b = options.maxDepth) !== null && _b !== void 0 ? _b : 20, + }); }; //# sourceMappingURL=parse.js.map \ No newline at end of file diff --git a/dist/esm/parse.js.map b/dist/esm/parse.js.map index be9892b..d0806af 100644 --- a/dist/esm/parse.js.map +++ b/dist/esm/parse.js.map @@ -1 +1 @@ -{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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","sourcesContent":["import { ERROR_CONSTRUCTORS } from './constants';\nimport { CustomParseOptions, ParseOptions, StringifyType, TypedValue } from './types';\n\nconst hasOwnProperty = (object: X, property: Y): object is X & Record =>\n\tObject.prototype.hasOwnProperty.call(object, property);\n\nconst isTypedValue = (obj: unknown): obj is TypedValue => {\n\tif (typeof obj === 'object' && hasOwnProperty(obj, 't') && typeof obj.t === 'string') {\n\t\tconst keys = Object.keys(obj);\n\t\treturn keys.length === 1 || (keys.length === 2 && hasOwnProperty(obj, 'v') && typeof obj.v === 'string');\n\t}\n\treturn false;\n};\n\nconst convertType = (\n\t{ t, v }: TypedValue,\n\toptions: ParseOptions,\n):\n\t| bigint\n\t| boolean\n\t| Date\n\t| Error\n\t| Map\n\t| null\n\t| number\n\t| Set\n\t| string\n\t| symbol\n\t| undefined => {\n\tswitch (t) {\n\t\tcase 'function': {\n\t\t\treturn undefined;\n\t\t}\n\t\tcase 'null': {\n\t\t\treturn null; // eslint-disable-line unicorn/no-null\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn v === undefined ? Symbol() : Symbol.for(v);\n\t\t}\n\t\tcase 'undefined': {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\tif (v === undefined) {\n\t\tthrow new Error('No value');\n\t}\n\tswitch (t) {\n\t\tcase 'bigint': {\n\t\t\tif (v.startsWith('r')) {\n\t\t\t\tlet radix = Number.parseInt(v[1], 36);\n\t\t\t\tif (radix === 0) {\n\t\t\t\t\tradix = 36;\n\t\t\t\t}\n\t\t\t\tconst negative = v[2] === '-';\n\t\t\t\tconst startIndex = negative ? 3 : 2;\n\t\t\t\tconst value = [v.slice(startIndex)].reduce(\n\t\t\t\t\t(r, v) => r * BigInt(radix) + BigInt(Number.parseInt(v, radix)),\n\t\t\t\t\tBigInt(0),\n\t\t\t\t);\n\t\t\t\treturn negative ? -value : value;\n\t\t\t}\n\t\t\treturn BigInt(v);\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn v === '1';\n\t\t}\n\t\tcase 'Date': {\n\t\t\treturn v.includes('T') ? new Date(v) : new Date(Number(v));\n\t\t}\n\t\tcase 'Error': {\n\t\t\tconst { name, message, stack } = parse(v, options) as {\n\t\t\t\tname: string;\n\t\t\t\tmessage: string;\n\t\t\t\tstack: string | undefined;\n\t\t\t};\n\t\t\tconst ErrorConstructor = ERROR_CONSTRUCTORS.get(name) ?? Error;\n\t\t\tconst error = new ErrorConstructor(message);\n\t\t\terror.stack = stack;\n\t\t\treturn error;\n\t\t}\n\t\tcase 'Map': {\n\t\t\treturn new Map(parse(v, options) as Array<[unknown, unknown]>);\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn Number(v);\n\t\t}\n\t\tcase 'Set': {\n\t\t\treturn new Set(parse(v, options) as Array);\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn v;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown type: ${t}`);\n\t\t}\n\t}\n};\n\nconst decent = (obj: unknown, options: ParseOptions): unknown => {\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, options));\n\t} else if (obj && typeof obj === 'object') {\n\t\tif (isTypedValue(obj)) {\n\t\t\tconst { customParse } = options;\n\t\t\tif (customParse) {\n\t\t\t\tconst { useResult, result } = customParse(obj as TypedValue, options as CustomParseOptions);\n\t\t\t\tif (useResult) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn convertType(obj as TypedValue, options);\n\t\t}\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, options);\n\t\t}\n\t\treturn tmpObj;\n\t}\n\tthrow new Error('Invalid structure');\n};\n\nexport const parse = (json: string, options: ParseOptions = {}): unknown => {\n\treturn decent(JSON.parse(json), options);\n};\n"]} \ No newline at end of file +{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":"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","sourcesContent":["import { ERROR_CONSTRUCTORS } from './constants';\nimport { CustomParseOptions, DefaultedParseOptions, ParseOptions, StringifyType, TypedValue } from './types';\n\nconst hasOwnProperty = (object: X, property: Y): object is X & Record =>\n\tObject.prototype.hasOwnProperty.call(object, property);\n\nconst isTypedValue = (obj: unknown): obj is TypedValue => {\n\tif (typeof obj === 'object' && hasOwnProperty(obj, 't') && typeof obj.t === 'string') {\n\t\tconst keys = Object.keys(obj);\n\t\treturn keys.length === 1 || (keys.length === 2 && hasOwnProperty(obj, 'v') && typeof obj.v === 'string');\n\t}\n\treturn false;\n};\n\nconst convertType = (\n\t{ t, v }: TypedValue,\n\toptions: ParseOptions,\n):\n\t| bigint\n\t| boolean\n\t| Date\n\t| Error\n\t| Map\n\t| null\n\t| number\n\t| Set\n\t| string\n\t| symbol\n\t| undefined => {\n\tswitch (t) {\n\t\tcase 'function': {\n\t\t\treturn undefined;\n\t\t}\n\t\tcase 'null': {\n\t\t\treturn null; // eslint-disable-line unicorn/no-null\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn v === undefined ? Symbol() : Symbol.for(v);\n\t\t}\n\t\tcase 'undefined': {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\tif (v === undefined) {\n\t\tthrow new Error('No value');\n\t}\n\tswitch (t) {\n\t\tcase 'bigint': {\n\t\t\tif (v.startsWith('r')) {\n\t\t\t\tlet radix = Number.parseInt(v[1], 36);\n\t\t\t\tif (radix === 0) {\n\t\t\t\t\tradix = 36;\n\t\t\t\t}\n\t\t\t\tconst negative = v[2] === '-';\n\t\t\t\tconst startIndex = negative ? 3 : 2;\n\t\t\t\tconst value = [v.slice(startIndex)].reduce(\n\t\t\t\t\t(r, v) => r * BigInt(radix) + BigInt(Number.parseInt(v, radix)),\n\t\t\t\t\tBigInt(0),\n\t\t\t\t);\n\t\t\t\treturn negative ? -value : value;\n\t\t\t}\n\t\t\treturn BigInt(v);\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn v === '1';\n\t\t}\n\t\tcase 'Date': {\n\t\t\treturn v.includes('T') ? new Date(v) : new Date(Number(v));\n\t\t}\n\t\tcase 'Error': {\n\t\t\tconst { name, message, stack } = parse(v, options) as {\n\t\t\t\tname: string;\n\t\t\t\tmessage: string;\n\t\t\t\tstack: string | undefined;\n\t\t\t};\n\t\t\tconst ErrorConstructor = ERROR_CONSTRUCTORS.get(name) ?? Error;\n\t\t\tconst error = new ErrorConstructor(message);\n\t\t\terror.stack = stack;\n\t\t\treturn error;\n\t\t}\n\t\tcase 'Map': {\n\t\t\treturn new Map(parse(v, options) as Array<[unknown, unknown]>);\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn Number(v);\n\t\t}\n\t\tcase 'Set': {\n\t\t\treturn new Set(parse(v, options) as Array);\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn v;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown type: ${t}`);\n\t\t}\n\t}\n};\n\nconst decent = (obj: unknown, options: DefaultedParseOptions): unknown => {\n\tconst { currentDepth, maxDepth } = options;\n\tif (currentDepth > maxDepth) {\n\t\tthrow new Error('Max depth exceeded');\n\t}\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, { ...options, currentDepth: currentDepth + 1 }));\n\t} else if (obj && typeof obj === 'object') {\n\t\tif (isTypedValue(obj)) {\n\t\t\tconst { customParse } = options;\n\t\t\tif (customParse) {\n\t\t\t\tconst { useResult, result } = customParse(\n\t\t\t\t\tobj as TypedValue,\n\t\t\t\t\t{ ...options, currentDepth: currentDepth + 1 } as CustomParseOptions,\n\t\t\t\t);\n\t\t\t\tif (useResult) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn convertType(obj as TypedValue, { ...options, currentDepth: currentDepth + 1 });\n\t\t}\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, { ...options, currentDepth: currentDepth + 1 });\n\t\t}\n\t\treturn tmpObj;\n\t}\n\tthrow new Error('Invalid structure');\n};\n\nexport const parse = (json: string, options: ParseOptions = {}): unknown => {\n\treturn decent(JSON.parse(json), {\n\t\tcurrentDepth: options.currentDepth ?? 0,\n\t\tcustomParse: options.customParse,\n\t\tmaxDepth: options.maxDepth ?? 20,\n\t});\n};\n"]} \ No newline at end of file diff --git a/dist/esm/stringify.js b/dist/esm/stringify.js index 8957382..4019ffc 100644 --- a/dist/esm/stringify.js +++ b/dist/esm/stringify.js @@ -53,15 +53,21 @@ const convertType = (obj, options) => { throw new Error(`Unknown datatype: ${typeof obj}`); }; const decent = (obj, options) => { - const { customStringify } = options; + const { customStringify, currentDepth, maxDepth } = options; + if (currentDepth > maxDepth) { + throw new Error('Max depth exceeded'); + } if (customStringify) { - const { useResult, result } = customStringify(obj, options); + const { useResult, result } = customStringify(obj, { + ...options, + currentDepth: currentDepth + 1, + }); if (useResult) { return result; } } if (Array.isArray(obj)) { - return obj.map((obj) => decent(obj, options)); + return obj.map((obj) => decent(obj, { ...options, currentDepth: currentDepth + 1 })); } else if (obj && typeof obj === 'object' && @@ -71,21 +77,23 @@ const decent = (obj, options) => { !(obj instanceof Set)) { const tmpObj = {}; for (const [key, value] of Object.entries(obj)) { - tmpObj[key] = decent(value, options); + tmpObj[key] = decent(value, { ...options, currentDepth: currentDepth + 1 }); } return tmpObj; } - return convertType(obj, options); + return convertType(obj, { ...options, currentDepth: currentDepth + 1 }); }; export const stringify = (obj, options = {}) => { - var _a, _b, _c, _d, _e; + var _a, _b, _c, _d, _e, _f, _g; return JSON.stringify(decent(obj, { bigintRadix: (_a = options.bigintRadix) !== null && _a !== void 0 ? _a : 10, + currentDepth: (_b = options.currentDepth) !== null && _b !== void 0 ? _b : 0, customStringify: options.customStringify, - dateFormat: (_b = options.dateFormat) !== null && _b !== void 0 ? _b : 'iso', - ignoreFunctions: (_c = options.ignoreFunctions) !== null && _c !== void 0 ? _c : false, - skipNull: (_d = options.skipNull) !== null && _d !== void 0 ? _d : false, - skipUndefined: (_e = options.skipUndefined) !== null && _e !== void 0 ? _e : false, + dateFormat: (_c = options.dateFormat) !== null && _c !== void 0 ? _c : 'iso', + ignoreFunctions: (_d = options.ignoreFunctions) !== null && _d !== void 0 ? _d : false, + maxDepth: (_e = options.maxDepth) !== null && _e !== void 0 ? _e : 20, + skipNull: (_f = options.skipNull) !== null && _f !== void 0 ? _f : false, + skipUndefined: (_g = options.skipUndefined) !== null && _g !== void 0 ? _g : false, })); }; //# sourceMappingURL=stringify.js.map \ No newline at end of file diff --git a/dist/esm/stringify.js.map b/dist/esm/stringify.js.map index 6e642c8..6169ba0 100644 --- a/dist/esm/stringify.js.map +++ b/dist/esm/stringify.js.map @@ -1 +1 @@ -{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tCustomStringifyOptions,\n\tDefaultedStringifyOptions,\n\tStringifyOptions,\n\tStringifyType,\n\tTypedValue,\n} from './types';\n\nconst convertType = (\n\tobj: unknown,\n\toptions: DefaultedStringifyOptions,\n): TypedValue | undefined => {\n\tconst { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined } = options;\n\tif (obj === null) {\n\t\treturn skipNull ? undefined : { t: 'null' };\n\t} else if (obj === undefined) {\n\t\treturn skipUndefined ? undefined : { t: 'undefined' };\n\t} else if (obj instanceof Date) {\n\t\treturn { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() };\n\t} else if (obj instanceof Error) {\n\t\treturn {\n\t\t\tt: 'Error',\n\t\t\tv: stringify({ name: obj.name, message: obj.message, stack: obj.stack }, options),\n\t\t};\n\t} else if (obj instanceof Map) {\n\t\treturn { t: 'Map', v: stringify([...obj], options) };\n\t} else if (obj instanceof Set) {\n\t\treturn { t: 'Set', v: stringify([...obj], options) };\n\t}\n\tswitch (typeof obj) {\n\t\tcase 'bigint': {\n\t\t\tif (!Number.isInteger(bigintRadix) || bigintRadix < 2 || bigintRadix > 36) {\n\t\t\t\tthrow new RangeError('bigintRadix must be an integer between 2 and 36');\n\t\t\t}\n\t\t\tif (bigintRadix === 10) {\n\t\t\t\treturn { t: 'bigint', v: obj.toString() };\n\t\t\t}\n\t\t\treturn { t: 'bigint', v: 'r' + bigintRadix.toString(36).slice(-1) + obj.toString(bigintRadix) };\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn { t: 'boolean', v: obj ? '1' : '0' };\n\t\t}\n\t\tcase 'function': {\n\t\t\tif (!ignoreFunctions) {\n\t\t\t\tthrow new Error('Functions can not be stringified');\n\t\t\t}\n\t\t\treturn { t: 'function' };\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn { t: 'number', v: obj.toString() };\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn { t: 'string', v: obj };\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn { t: 'symbol', v: Symbol.keyFor(obj) };\n\t\t}\n\t}\n\tthrow new Error(`Unknown datatype: ${typeof obj}`);\n};\n\nconst decent = (obj: unknown, options: DefaultedStringifyOptions): unknown => {\n\tconst { customStringify } = options;\n\tif (customStringify) {\n\t\tconst { useResult, result } = customStringify(obj, options as CustomStringifyOptions);\n\t\tif (useResult) {\n\t\t\treturn result;\n\t\t}\n\t}\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, options));\n\t} else if (\n\t\tobj &&\n\t\ttypeof obj === 'object' &&\n\t\t!(obj instanceof Date) &&\n\t\t!(obj instanceof Error) &&\n\t\t!(obj instanceof Map) &&\n\t\t!(obj instanceof Set)\n\t) {\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, options);\n\t\t}\n\t\treturn tmpObj;\n\t}\n\treturn convertType(obj, options);\n};\n\nexport const stringify = (obj: unknown, options: StringifyOptions = {}): string =>\n\tJSON.stringify(\n\t\tdecent(obj, {\n\t\t\tbigintRadix: options.bigintRadix ?? 10,\n\t\t\tcustomStringify: options.customStringify,\n\t\t\tdateFormat: options.dateFormat ?? 'iso',\n\t\t\tignoreFunctions: options.ignoreFunctions ?? false,\n\t\t\tskipNull: options.skipNull ?? false,\n\t\t\tskipUndefined: options.skipUndefined ?? false,\n\t\t}),\n\t);\n"]} \ No newline at end of file +{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tCustomStringifyOptions,\n\tDefaultedStringifyOptions,\n\tStringifyOptions,\n\tStringifyType,\n\tTypedValue,\n} from './types';\n\nconst convertType = (\n\tobj: unknown,\n\toptions: DefaultedStringifyOptions,\n): TypedValue | undefined => {\n\tconst { bigintRadix, dateFormat, ignoreFunctions, skipNull, skipUndefined } = options;\n\tif (obj === null) {\n\t\treturn skipNull ? undefined : { t: 'null' };\n\t} else if (obj === undefined) {\n\t\treturn skipUndefined ? undefined : { t: 'undefined' };\n\t} else if (obj instanceof Date) {\n\t\treturn { t: 'Date', v: dateFormat === 'iso' ? obj.toISOString() : obj.getTime().toString() };\n\t} else if (obj instanceof Error) {\n\t\treturn {\n\t\t\tt: 'Error',\n\t\t\tv: stringify({ name: obj.name, message: obj.message, stack: obj.stack }, options),\n\t\t};\n\t} else if (obj instanceof Map) {\n\t\treturn { t: 'Map', v: stringify([...obj], options) };\n\t} else if (obj instanceof Set) {\n\t\treturn { t: 'Set', v: stringify([...obj], options) };\n\t}\n\tswitch (typeof obj) {\n\t\tcase 'bigint': {\n\t\t\tif (!Number.isInteger(bigintRadix) || bigintRadix < 2 || bigintRadix > 36) {\n\t\t\t\tthrow new RangeError('bigintRadix must be an integer between 2 and 36');\n\t\t\t}\n\t\t\tif (bigintRadix === 10) {\n\t\t\t\treturn { t: 'bigint', v: obj.toString() };\n\t\t\t}\n\t\t\treturn { t: 'bigint', v: 'r' + bigintRadix.toString(36).slice(-1) + obj.toString(bigintRadix) };\n\t\t}\n\t\tcase 'boolean': {\n\t\t\treturn { t: 'boolean', v: obj ? '1' : '0' };\n\t\t}\n\t\tcase 'function': {\n\t\t\tif (!ignoreFunctions) {\n\t\t\t\tthrow new Error('Functions can not be stringified');\n\t\t\t}\n\t\t\treturn { t: 'function' };\n\t\t}\n\t\tcase 'number': {\n\t\t\treturn { t: 'number', v: obj.toString() };\n\t\t}\n\t\tcase 'string': {\n\t\t\treturn { t: 'string', v: obj };\n\t\t}\n\t\tcase 'symbol': {\n\t\t\treturn { t: 'symbol', v: Symbol.keyFor(obj) };\n\t\t}\n\t}\n\tthrow new Error(`Unknown datatype: ${typeof obj}`);\n};\n\nconst decent = (obj: unknown, options: DefaultedStringifyOptions): unknown => {\n\tconst { customStringify, currentDepth, maxDepth } = options;\n\tif (currentDepth > maxDepth) {\n\t\tthrow new Error('Max depth exceeded');\n\t}\n\tif (customStringify) {\n\t\tconst { useResult, result } = customStringify(obj, {\n\t\t\t...options,\n\t\t\tcurrentDepth: currentDepth + 1,\n\t\t} as CustomStringifyOptions);\n\t\tif (useResult) {\n\t\t\treturn result;\n\t\t}\n\t}\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((obj) => decent(obj, { ...options, currentDepth: currentDepth + 1 }));\n\t} else if (\n\t\tobj &&\n\t\ttypeof obj === 'object' &&\n\t\t!(obj instanceof Date) &&\n\t\t!(obj instanceof Error) &&\n\t\t!(obj instanceof Map) &&\n\t\t!(obj instanceof Set)\n\t) {\n\t\tconst tmpObj: { [key: string]: unknown } = {};\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\ttmpObj[key] = decent(value, { ...options, currentDepth: currentDepth + 1 });\n\t\t}\n\t\treturn tmpObj;\n\t}\n\treturn convertType(obj, { ...options, currentDepth: currentDepth + 1 });\n};\n\nexport const stringify = (obj: unknown, options: StringifyOptions = {}): string =>\n\tJSON.stringify(\n\t\tdecent(obj, {\n\t\t\tbigintRadix: options.bigintRadix ?? 10,\n\t\t\tcurrentDepth: options.currentDepth ?? 0,\n\t\t\tcustomStringify: options.customStringify,\n\t\t\tdateFormat: options.dateFormat ?? 'iso',\n\t\t\tignoreFunctions: options.ignoreFunctions ?? false,\n\t\t\tmaxDepth: options.maxDepth ?? 20,\n\t\t\tskipNull: options.skipNull ?? false,\n\t\t\tskipUndefined: options.skipUndefined ?? false,\n\t\t}),\n\t);\n"]} \ No newline at end of file diff --git a/dist/esm/types.js.map b/dist/esm/types.js.map index e004486..52fffe1 100644 --- a/dist/esm/types.js.map +++ b/dist/esm/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AA8DA,YAAY","sourcesContent":["export type StringifyType =\n\t| 'bigint'\n\t| 'boolean'\n\t| 'Date'\n\t| 'Error'\n\t| 'function'\n\t| 'Map'\n\t| 'null'\n\t| 'number'\n\t| 'Set'\n\t| 'string'\n\t| 'symbol'\n\t| 'undefined';\n\nexport type DateFormat = 'iso' | 'number';\n\nexport interface TypedValue {\n\tt: T;\n\tv?: string;\n}\n\n// Start stringify\n\nexport interface BaseStringifyOptions {\n\tbigintRadix: number;\n\tdateFormat: DateFormat;\n\tignoreFunctions: boolean;\n\tskipNull: boolean;\n\tskipUndefined: boolean;\n}\n\nexport interface CustomStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify: CustomStringify;\n}\n\nexport type CustomStringifyResult = { useResult: boolean; result?: TypedValue };\n\nexport type CustomStringify = (\n\tobj: unknown,\n\toptions: CustomStringifyOptions,\n) => CustomStringifyResult;\n\nexport interface DefaultedStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify?: CustomStringify;\n}\n\nexport type StringifyOptions = Partial>;\n\n// End stringify\n\n// Start parse\n\nexport interface CustomParseOptions {\n\tcustomParse: CustomParse;\n}\n\nexport type CustomParseResult = { useResult: boolean; result?: unknown };\n\nexport type CustomParse = (obj: TypedValue, options: CustomParseOptions) => CustomParseResult;\n\nexport type ParseOptions = Partial>;\n\n// End parse\n"]} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAyEA,YAAY","sourcesContent":["export type StringifyType =\n\t| 'bigint'\n\t| 'boolean'\n\t| 'Date'\n\t| 'Error'\n\t| 'function'\n\t| 'Map'\n\t| 'null'\n\t| 'number'\n\t| 'Set'\n\t| 'string'\n\t| 'symbol'\n\t| 'undefined';\n\nexport type DateFormat = 'iso' | 'number';\n\nexport interface TypedValue {\n\tt: T;\n\tv?: string;\n}\n\n// Start stringify\n\nexport interface BaseStringifyOptions {\n\tbigintRadix: number;\n\tcurrentDepth: number;\n\tdateFormat: DateFormat;\n\tignoreFunctions: boolean;\n\tmaxDepth: number;\n\tskipNull: boolean;\n\tskipUndefined: boolean;\n}\n\nexport interface CustomStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify: CustomStringify;\n}\n\nexport type CustomStringifyResult = { useResult: boolean; result?: TypedValue };\n\nexport type CustomStringify = (\n\tobj: unknown,\n\toptions: CustomStringifyOptions,\n) => CustomStringifyResult;\n\nexport interface DefaultedStringifyOptions extends BaseStringifyOptions {\n\tcustomStringify?: CustomStringify;\n}\n\nexport type StringifyOptions = Partial>;\n\n// End stringify\n\n// Start parse\n\nexport interface BaseParseOptions {\n\tcurrentDepth: number;\n\tmaxDepth: number;\n}\n\nexport interface CustomParseOptions extends BaseParseOptions {\n\tcustomParse: CustomParse;\n}\n\nexport type CustomParseResult = { useResult: boolean; result?: unknown };\n\nexport type CustomParse = (obj: TypedValue, options: CustomParseOptions) => CustomParseResult;\n\nexport interface DefaultedParseOptions extends BaseParseOptions {\n\tcustomParse?: CustomParse;\n}\n\nexport type ParseOptions = Partial>;\n\n// End parse\n"]} \ No newline at end of file diff --git a/dist/types/types.d.ts b/dist/types/types.d.ts index 67e4474..e90e8b7 100644 --- a/dist/types/types.d.ts +++ b/dist/types/types.d.ts @@ -6,8 +6,10 @@ export interface TypedValue { } export interface BaseStringifyOptions { bigintRadix: number; + currentDepth: number; dateFormat: DateFormat; ignoreFunctions: boolean; + maxDepth: number; skipNull: boolean; skipUndefined: boolean; } @@ -23,7 +25,11 @@ export interface DefaultedStringifyOptions extends BaseStringi customStringify?: CustomStringify; } export type StringifyOptions = Partial>; -export interface CustomParseOptions { +export interface BaseParseOptions { + currentDepth: number; + maxDepth: number; +} +export interface CustomParseOptions extends BaseParseOptions { customParse: CustomParse; } export type CustomParseResult = { @@ -31,4 +37,7 @@ export type CustomParseResult = { result?: unknown; }; export type CustomParse = (obj: TypedValue, options: CustomParseOptions) => CustomParseResult; -export type ParseOptions = Partial>; +export interface DefaultedParseOptions extends BaseParseOptions { + customParse?: CustomParse; +} +export type ParseOptions = Partial>; diff --git a/package-lock.json b/package-lock.json index ee29273..1463a76 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,9 +12,9 @@ "@types/jest": "^29.5.14", "@types/lodash": "^4.17.13", "bignumber.js": "^9.1.2", - "eslint": "^9.14.0", + "eslint": "^9.15.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-unicorn": "^56.0.0", + "eslint-plugin-unicorn": "^56.0.1", "globals": "^15.12.0", "jest": "^29.7.0", "lodash": "^4.17.21", @@ -22,7 +22,7 @@ "ts-jest": "^29.2.5", "tsx": "^4.19.2", "typescript": "^5.6.3", - "typescript-eslint": "^8.14.0" + "typescript-eslint": "^8.15.0" } }, "node_modules/@ampproject/remapping": { @@ -993,9 +993,9 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", - "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "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==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1008,9 +1008,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", - "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.0.tgz", + "integrity": "sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1018,9 +1018,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", - "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, "license": "MIT", "dependencies": { @@ -1055,9 +1055,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz", - "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==", + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz", + "integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==", "dev": true, "license": "MIT", "engines": { @@ -1075,9 +1075,9 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz", - "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz", + "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1780,17 +1780,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.14.0.tgz", - "integrity": "sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.15.0.tgz", + "integrity": "sha512-+zkm9AR1Ds9uLWN3fkoeXgFppaQ+uEVtfOV62dDmsy9QCNqlRHWNEck4yarvRNrvRcHQLGfqBNui3cimoz8XAg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.14.0", - "@typescript-eslint/type-utils": "8.14.0", - "@typescript-eslint/utils": "8.14.0", - "@typescript-eslint/visitor-keys": "8.14.0", + "@typescript-eslint/scope-manager": "8.15.0", + "@typescript-eslint/type-utils": "8.15.0", + "@typescript-eslint/utils": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -1814,16 +1814,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.14.0.tgz", - "integrity": "sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.15.0.tgz", + "integrity": "sha512-7n59qFpghG4uazrF9qtGKBZXn7Oz4sOMm8dwNWDQY96Xlm2oX67eipqcblDj+oY1lLCbf1oltMZFpUso66Kl1A==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "8.14.0", - "@typescript-eslint/types": "8.14.0", - "@typescript-eslint/typescript-estree": "8.14.0", - "@typescript-eslint/visitor-keys": "8.14.0", + "@typescript-eslint/scope-manager": "8.15.0", + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/typescript-estree": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0", "debug": "^4.3.4" }, "engines": { @@ -1843,14 +1843,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.14.0.tgz", - "integrity": "sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.15.0.tgz", + "integrity": "sha512-QRGy8ADi4J7ii95xz4UoiymmmMd/zuy9azCaamnZ3FM8T5fZcex8UfJcjkiEZjJSztKfEBe3dZ5T/5RHAmw2mA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.14.0", - "@typescript-eslint/visitor-keys": "8.14.0" + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1861,14 +1861,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.14.0.tgz", - "integrity": "sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.15.0.tgz", + "integrity": "sha512-UU6uwXDoI3JGSXmcdnP5d8Fffa2KayOhUUqr/AiBnG1Gl7+7ut/oyagVeSkh7bxQ0zSXV9ptRh/4N15nkCqnpw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.14.0", - "@typescript-eslint/utils": "8.14.0", + "@typescript-eslint/typescript-estree": "8.15.0", + "@typescript-eslint/utils": "8.15.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1879,6 +1879,9 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, "peerDependenciesMeta": { "typescript": { "optional": true @@ -1886,9 +1889,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.14.0.tgz", - "integrity": "sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.15.0.tgz", + "integrity": "sha512-n3Gt8Y/KyJNe0S3yDCD2RVKrHBC4gTUcLTebVBXacPy091E6tNspFLKRXlk3hwT4G55nfr1n2AdFqi/XMxzmPQ==", "dev": true, "license": "MIT", "engines": { @@ -1900,14 +1903,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.14.0.tgz", - "integrity": "sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.15.0.tgz", + "integrity": "sha512-1eMp2JgNec/niZsR7ioFBlsh/Fk0oJbhaqO0jRyQBMgkz7RrFfkqF9lYYmBoGBaSiLnu8TAPQTwoTUiSTUW9dg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.14.0", - "@typescript-eslint/visitor-keys": "8.14.0", + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -1955,16 +1958,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.14.0.tgz", - "integrity": "sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.15.0.tgz", + "integrity": "sha512-k82RI9yGhr0QM3Dnq+egEpz9qB6Un+WLYhmoNcvl8ltMEededhh7otBVVIDDsEEttauwdY/hQoSsOv13lxrFzQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.14.0", - "@typescript-eslint/types": "8.14.0", - "@typescript-eslint/typescript-estree": "8.14.0" + "@typescript-eslint/scope-manager": "8.15.0", + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/typescript-estree": "8.15.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1975,17 +1978,22 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.14.0.tgz", - "integrity": "sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.15.0.tgz", + "integrity": "sha512-h8vYOulWec9LhpwfAdZf2bjr8xIp0KNKnpgqSz0qqYYKAW/QZKw3ktRndbiAtUz4acH4QLQavwZBYCc0wulA/Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.14.0", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.15.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1995,6 +2003,19 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/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/acorn": { "version": "8.14.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", @@ -2557,10 +2578,11 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "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": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2755,27 +2777,27 @@ } }, "node_modules/eslint": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.14.0.tgz", - "integrity": "sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==", + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.15.0.tgz", + "integrity": "sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.18.0", - "@eslint/core": "^0.7.0", - "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.14.0", - "@eslint/plugin-kit": "^0.2.0", + "@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.0", + "@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.2", + "cross-spawn": "^7.0.5", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.2.0", @@ -2794,8 +2816,7 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" @@ -2829,9 +2850,9 @@ } }, "node_modules/eslint-plugin-unicorn": { - "version": "56.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-56.0.0.tgz", - "integrity": "sha512-aXpddVz/PQMmd69uxO98PA4iidiVNvA0xOtbpUoz1WhBd4RxOQQYqN618v68drY0hmy5uU2jy1bheKEVWBjlPw==", + "version": "56.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-56.0.1.tgz", + "integrity": "sha512-FwVV0Uwf8XPfVnKSGpMg7NtlZh0G0gBarCaFcMUOoqPxXryxdYxTRRv4kH6B9TFCVIrjRXG+emcxIk2ayZilog==", "dev": true, "license": "MIT", "dependencies": { @@ -4955,10 +4976,11 @@ } }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "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" } @@ -5482,12 +5504,6 @@ "node": ">=8" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -5641,15 +5657,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.14.0.tgz", - "integrity": "sha512-K8fBJHxVL3kxMmwByvz8hNdBJ8a0YqKzKDX6jRlrjMuNXyd5T2V02HIq37+OiWXvUUOXgOOGiSSOh26Mh8pC3w==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.15.0.tgz", + "integrity": "sha512-wY4FRGl0ZI+ZU4Jo/yjdBu0lVTSML58pu6PgGtJmCufvzfV565pUF6iACQt092uFOd49iLOTX/sEVmHtbSrS+w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.14.0", - "@typescript-eslint/parser": "8.14.0", - "@typescript-eslint/utils": "8.14.0" + "@typescript-eslint/eslint-plugin": "8.15.0", + "@typescript-eslint/parser": "8.15.0", + "@typescript-eslint/utils": "8.15.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5658,6 +5674,9 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, "peerDependenciesMeta": { "typescript": { "optional": true diff --git a/package.json b/package.json index 2290b5f..41ccf50 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,19 @@ "name": "@softstack/typed-stringify", "version": "3.0.0-alpha.3", "description": "Stringifies and parses objects while restoring the proper type on parse", + "author": "Softstack GmbH (https://softstack.io)", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/chainsulting/typed-stringify.git" + }, + "homepage": "https://github.com/chainsulting/typed-stringify#readme", + "keywords": [ + "json", + "serialize", + "serializer", + "stringify" + ], "main": "dist/cjs/index.js", "module": "dist/esm/index.js", "types": "dist/types/index.d.ts", @@ -14,11 +27,6 @@ "dist/**/*", "src/**/*" ], - "repository": { - "type": "git", - "url": "git+https://github.com/chainsulting/typed-stringify.git" - }, - "homepage": "https://github.com/chainsulting/typed-stringify#readme", "scripts": { "test": "jest --config jestconfig.json", "prettier": "prettier --write \"./**/*.js\" \"./**/*.json\" \"./**/*.mjs\" \"./**/*.ts\"", @@ -32,21 +40,13 @@ "version": "npm run prettier && git add -A src", "postversion": "git push && git push --tags" }, - "keywords": [ - "json", - "serialize", - "serializer", - "stringify" - ], - "author": "Softstack GmbH (https://softstack.de)", - "license": "MIT", "devDependencies": { "@types/jest": "^29.5.14", "@types/lodash": "^4.17.13", "bignumber.js": "^9.1.2", - "eslint": "^9.14.0", + "eslint": "^9.15.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-unicorn": "^56.0.0", + "eslint-plugin-unicorn": "^56.0.1", "globals": "^15.12.0", "jest": "^29.7.0", "lodash": "^4.17.21", @@ -54,6 +54,6 @@ "ts-jest": "^29.2.5", "tsx": "^4.19.2", "typescript": "^5.6.3", - "typescript-eslint": "^8.14.0" + "typescript-eslint": "^8.15.0" } } diff --git a/src/parse.ts b/src/parse.ts index c9e48d0..a45ffbd 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -1,5 +1,5 @@ import { ERROR_CONSTRUCTORS } from './constants'; -import { CustomParseOptions, ParseOptions, StringifyType, TypedValue } from './types'; +import { CustomParseOptions, DefaultedParseOptions, ParseOptions, StringifyType, TypedValue } from './types'; const hasOwnProperty = (object: X, property: Y): object is X & Record => Object.prototype.hasOwnProperty.call(object, property); @@ -96,23 +96,30 @@ const convertType = ( } }; -const decent = (obj: unknown, options: ParseOptions): unknown => { +const decent = (obj: unknown, options: DefaultedParseOptions): unknown => { + const { currentDepth, maxDepth } = options; + if (currentDepth > maxDepth) { + throw new Error('Max depth exceeded'); + } if (Array.isArray(obj)) { - return obj.map((obj) => decent(obj, options)); + return obj.map((obj) => decent(obj, { ...options, currentDepth: currentDepth + 1 })); } else if (obj && typeof obj === 'object') { if (isTypedValue(obj)) { const { customParse } = options; if (customParse) { - const { useResult, result } = customParse(obj as TypedValue, options as CustomParseOptions); + const { useResult, result } = customParse( + obj as TypedValue, + { ...options, currentDepth: currentDepth + 1 } as CustomParseOptions, + ); if (useResult) { return result; } } - return convertType(obj as TypedValue, options); + return convertType(obj as TypedValue, { ...options, currentDepth: currentDepth + 1 }); } const tmpObj: { [key: string]: unknown } = {}; for (const [key, value] of Object.entries(obj)) { - tmpObj[key] = decent(value, options); + tmpObj[key] = decent(value, { ...options, currentDepth: currentDepth + 1 }); } return tmpObj; } @@ -120,5 +127,9 @@ const decent = (obj: unknown, options: ParseOptions): unkno }; export const parse = (json: string, options: ParseOptions = {}): unknown => { - return decent(JSON.parse(json), options); + return decent(JSON.parse(json), { + currentDepth: options.currentDepth ?? 0, + customParse: options.customParse, + maxDepth: options.maxDepth ?? 20, + }); }; diff --git a/src/stringify.ts b/src/stringify.ts index b12e29d..56b595c 100644 --- a/src/stringify.ts +++ b/src/stringify.ts @@ -60,15 +60,21 @@ const convertType = ( }; const decent = (obj: unknown, options: DefaultedStringifyOptions): unknown => { - const { customStringify } = options; + const { customStringify, currentDepth, maxDepth } = options; + if (currentDepth > maxDepth) { + throw new Error('Max depth exceeded'); + } if (customStringify) { - const { useResult, result } = customStringify(obj, options as CustomStringifyOptions); + const { useResult, result } = customStringify(obj, { + ...options, + currentDepth: currentDepth + 1, + } as CustomStringifyOptions); if (useResult) { return result; } } if (Array.isArray(obj)) { - return obj.map((obj) => decent(obj, options)); + return obj.map((obj) => decent(obj, { ...options, currentDepth: currentDepth + 1 })); } else if ( obj && typeof obj === 'object' && @@ -79,20 +85,22 @@ const decent = (obj: unknown, options: DefaultedStringifyOptio ) { const tmpObj: { [key: string]: unknown } = {}; for (const [key, value] of Object.entries(obj)) { - tmpObj[key] = decent(value, options); + tmpObj[key] = decent(value, { ...options, currentDepth: currentDepth + 1 }); } return tmpObj; } - return convertType(obj, options); + return convertType(obj, { ...options, currentDepth: currentDepth + 1 }); }; export const stringify = (obj: unknown, options: StringifyOptions = {}): string => JSON.stringify( decent(obj, { bigintRadix: options.bigintRadix ?? 10, + currentDepth: options.currentDepth ?? 0, customStringify: options.customStringify, dateFormat: options.dateFormat ?? 'iso', ignoreFunctions: options.ignoreFunctions ?? false, + maxDepth: options.maxDepth ?? 20, skipNull: options.skipNull ?? false, skipUndefined: options.skipUndefined ?? false, }), diff --git a/src/types.ts b/src/types.ts index 8826895..5cd7949 100644 --- a/src/types.ts +++ b/src/types.ts @@ -23,8 +23,10 @@ export interface TypedValue { export interface BaseStringifyOptions { bigintRadix: number; + currentDepth: number; dateFormat: DateFormat; ignoreFunctions: boolean; + maxDepth: number; skipNull: boolean; skipUndefined: boolean; } @@ -50,7 +52,12 @@ export type StringifyOptions = Partial { +export interface BaseParseOptions { + currentDepth: number; + maxDepth: number; +} + +export interface CustomParseOptions extends BaseParseOptions { customParse: CustomParse; } @@ -58,6 +65,10 @@ export type CustomParseResult = { useResult: boolean; result?: unknown }; export type CustomParse = (obj: TypedValue, options: CustomParseOptions) => CustomParseResult; -export type ParseOptions = Partial>; +export interface DefaultedParseOptions extends BaseParseOptions { + customParse?: CustomParse; +} + +export type ParseOptions = Partial>; // End parse From b7971ebfea159224455cfce5070e04b36817d0bd Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Wed, 18 Dec 2024 15:18:46 +0100 Subject: [PATCH 22/23] refactor: Dependencies updated --- package-lock.json | 180 ++++++++++++++++++++-------------------------- package.json | 8 +-- 2 files changed, 83 insertions(+), 105 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1463a76..54056b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,17 +12,17 @@ "@types/jest": "^29.5.14", "@types/lodash": "^4.17.13", "bignumber.js": "^9.1.2", - "eslint": "^9.15.0", + "eslint": "^9.17.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-unicorn": "^56.0.1", "globals": "^15.12.0", "jest": "^29.7.0", "lodash": "^4.17.21", - "prettier": "^3.3.3", + "prettier": "^3.4.2", "ts-jest": "^29.2.5", "tsx": "^4.19.2", "typescript": "^5.6.3", - "typescript-eslint": "^8.15.0" + "typescript-eslint": "^8.18.1" } }, "node_modules/@ampproject/remapping": { @@ -1055,9 +1055,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.17.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz", + "integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==", "dev": true, "license": "MIT", "engines": { @@ -1780,17 +1780,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.15.0.tgz", - "integrity": "sha512-+zkm9AR1Ds9uLWN3fkoeXgFppaQ+uEVtfOV62dDmsy9QCNqlRHWNEck4yarvRNrvRcHQLGfqBNui3cimoz8XAg==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.1.tgz", + "integrity": "sha512-Ncvsq5CT3Gvh+uJG0Lwlho6suwDfUXH0HztslDf5I+F2wAFAZMRwYLEorumpKLzmO2suAXZ/td1tBg4NZIi9CQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.15.0", - "@typescript-eslint/type-utils": "8.15.0", - "@typescript-eslint/utils": "8.15.0", - "@typescript-eslint/visitor-keys": "8.15.0", + "@typescript-eslint/scope-manager": "8.18.1", + "@typescript-eslint/type-utils": "8.18.1", + "@typescript-eslint/utils": "8.18.1", + "@typescript-eslint/visitor-keys": "8.18.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -1805,25 +1805,21 @@ }, "peerDependencies": { "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.15.0.tgz", - "integrity": "sha512-7n59qFpghG4uazrF9qtGKBZXn7Oz4sOMm8dwNWDQY96Xlm2oX67eipqcblDj+oY1lLCbf1oltMZFpUso66Kl1A==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.18.1.tgz", + "integrity": "sha512-rBnTWHCdbYM2lh7hjyXqxk70wvon3p2FyaniZuey5TrcGBpfhVp0OxOa6gxr9Q9YhZFKyfbEnxc24ZnVbbUkCA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.15.0", - "@typescript-eslint/types": "8.15.0", - "@typescript-eslint/typescript-estree": "8.15.0", - "@typescript-eslint/visitor-keys": "8.15.0", + "@typescript-eslint/scope-manager": "8.18.1", + "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/typescript-estree": "8.18.1", + "@typescript-eslint/visitor-keys": "8.18.1", "debug": "^4.3.4" }, "engines": { @@ -1834,23 +1830,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.15.0.tgz", - "integrity": "sha512-QRGy8ADi4J7ii95xz4UoiymmmMd/zuy9azCaamnZ3FM8T5fZcex8UfJcjkiEZjJSztKfEBe3dZ5T/5RHAmw2mA==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.1.tgz", + "integrity": "sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.15.0", - "@typescript-eslint/visitor-keys": "8.15.0" + "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/visitor-keys": "8.18.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1861,14 +1853,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.15.0.tgz", - "integrity": "sha512-UU6uwXDoI3JGSXmcdnP5d8Fffa2KayOhUUqr/AiBnG1Gl7+7ut/oyagVeSkh7bxQ0zSXV9ptRh/4N15nkCqnpw==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.1.tgz", + "integrity": "sha512-jAhTdK/Qx2NJPNOTxXpMwlOiSymtR2j283TtPqXkKBdH8OAMmhiUfP0kJjc/qSE51Xrq02Gj9NY7MwK+UxVwHQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.15.0", - "@typescript-eslint/utils": "8.15.0", + "@typescript-eslint/typescript-estree": "8.18.1", + "@typescript-eslint/utils": "8.18.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1880,18 +1872,14 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.15.0.tgz", - "integrity": "sha512-n3Gt8Y/KyJNe0S3yDCD2RVKrHBC4gTUcLTebVBXacPy091E6tNspFLKRXlk3hwT4G55nfr1n2AdFqi/XMxzmPQ==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.1.tgz", + "integrity": "sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==", "dev": true, "license": "MIT", "engines": { @@ -1903,14 +1891,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.15.0.tgz", - "integrity": "sha512-1eMp2JgNec/niZsR7ioFBlsh/Fk0oJbhaqO0jRyQBMgkz7RrFfkqF9lYYmBoGBaSiLnu8TAPQTwoTUiSTUW9dg==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.1.tgz", + "integrity": "sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.15.0", - "@typescript-eslint/visitor-keys": "8.15.0", + "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/visitor-keys": "8.18.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -1925,10 +1913,8 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { @@ -1958,16 +1944,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.15.0.tgz", - "integrity": "sha512-k82RI9yGhr0QM3Dnq+egEpz9qB6Un+WLYhmoNcvl8ltMEededhh7otBVVIDDsEEttauwdY/hQoSsOv13lxrFzQ==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.1.tgz", + "integrity": "sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.15.0", - "@typescript-eslint/types": "8.15.0", - "@typescript-eslint/typescript-estree": "8.15.0" + "@typescript-eslint/scope-manager": "8.18.1", + "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/typescript-estree": "8.18.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1977,22 +1963,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.15.0.tgz", - "integrity": "sha512-h8vYOulWec9LhpwfAdZf2bjr8xIp0KNKnpgqSz0qqYYKAW/QZKw3ktRndbiAtUz4acH4QLQavwZBYCc0wulA/Q==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.1.tgz", + "integrity": "sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/types": "8.18.1", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -2777,9 +2759,9 @@ } }, "node_modules/eslint": { - "version": "9.15.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.15.0.tgz", - "integrity": "sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==", + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.17.0.tgz", + "integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==", "dev": true, "license": "MIT", "dependencies": { @@ -2788,7 +2770,7 @@ "@eslint/config-array": "^0.19.0", "@eslint/core": "^0.9.0", "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "9.15.0", + "@eslint/js": "9.17.0", "@eslint/plugin-kit": "^0.2.3", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -2797,7 +2779,7 @@ "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.5", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.2.0", @@ -4918,9 +4900,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.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, "license": "MIT", "bin": { @@ -5525,9 +5507,9 @@ } }, "node_modules/ts-api-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", - "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "dev": true, "license": "MIT", "engines": { @@ -5657,15 +5639,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.15.0.tgz", - "integrity": "sha512-wY4FRGl0ZI+ZU4Jo/yjdBu0lVTSML58pu6PgGtJmCufvzfV565pUF6iACQt092uFOd49iLOTX/sEVmHtbSrS+w==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.18.1.tgz", + "integrity": "sha512-Mlaw6yxuaDEPQvb/2Qwu3/TfgeBHy9iTJ3mTwe7OvpPmF6KPQjVOfGyEJpPv6Ez2C34OODChhXrzYw/9phI0MQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.15.0", - "@typescript-eslint/parser": "8.15.0", - "@typescript-eslint/utils": "8.15.0" + "@typescript-eslint/eslint-plugin": "8.18.1", + "@typescript-eslint/parser": "8.18.1", + "@typescript-eslint/utils": "8.18.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5675,12 +5657,8 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/undici-types": { diff --git a/package.json b/package.json index 41ccf50..f473d55 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@softstack/typed-stringify", "version": "3.0.0-alpha.3", - "description": "Stringifies and parses objects while restoring the proper type on parse", + "description": "@softstack/typed-stringify is a library designed to serialize and deserialize JavaScript objects while preserving their original types.", "author": "Softstack GmbH (https://softstack.io)", "license": "MIT", "repository": { @@ -44,16 +44,16 @@ "@types/jest": "^29.5.14", "@types/lodash": "^4.17.13", "bignumber.js": "^9.1.2", - "eslint": "^9.15.0", + "eslint": "^9.17.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-unicorn": "^56.0.1", "globals": "^15.12.0", "jest": "^29.7.0", "lodash": "^4.17.21", - "prettier": "^3.3.3", + "prettier": "^3.4.2", "ts-jest": "^29.2.5", "tsx": "^4.19.2", "typescript": "^5.6.3", - "typescript-eslint": "^8.15.0" + "typescript-eslint": "^8.18.1" } } From fc15f6097940c41a667034350b03b73ca2cfe6e9 Mon Sep 17 00:00:00 2001 From: RobertW123 Date: Wed, 18 Dec 2024 15:19:55 +0100 Subject: [PATCH 23/23] 3.0.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 54056b0..0952b14 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@softstack/typed-stringify", - "version": "3.0.0-alpha.3", + "version": "3.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@softstack/typed-stringify", - "version": "3.0.0-alpha.3", + "version": "3.0.0", "license": "MIT", "devDependencies": { "@types/jest": "^29.5.14", diff --git a/package.json b/package.json index f473d55..3f2360f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@softstack/typed-stringify", - "version": "3.0.0-alpha.3", + "version": "3.0.0", "description": "@softstack/typed-stringify is a library designed to serialize and deserialize JavaScript objects while preserving their original types.", "author": "Softstack GmbH (https://softstack.io)", "license": "MIT",