From 88869fdfbc4ec10a25b6d9ca2fbeb2cfe69f4cab Mon Sep 17 00:00:00 2001 From: Dan O'Neill Date: Tue, 24 Jun 2025 15:26:06 -0700 Subject: [PATCH 1/5] move src files to v1 folder structure --- src/v1/generateUISchema.ts | 175 +++++++++++++++++++ src/v1/index.ts | 2 + src/{ => v1}/utils/utils.ts | 0 src/v1/validateJsonSchema.ts | 323 +++++++++++++++++++++++++++++++++++ 4 files changed, 500 insertions(+) create mode 100644 src/v1/generateUISchema.ts create mode 100644 src/v1/index.ts rename src/{ => v1}/utils/utils.ts (100%) create mode 100644 src/v1/validateJsonSchema.ts diff --git a/src/v1/generateUISchema.ts b/src/v1/generateUISchema.ts new file mode 100644 index 0000000..8bf8411 --- /dev/null +++ b/src/v1/generateUISchema.ts @@ -0,0 +1,175 @@ +// External Dependencies +import { isEmpty } from 'lodash-es'; + +// Internal Dependencies +import { + DateTimeFormat, + ElementDisplay, + getFieldSetTitleKey, + isEmptyString, + isFieldSet, + isFieldSetTitleWithoutItems, isPropertyKey, + isSchemaFieldSet, PropertyFormat, +} from './utils/utils'; + +// Enums +enum SchemaTypes { + Number = 'number', + String = 'string', + Array = 'array', +} + +const getBaseUIObject = (key: string, title: string, options: any = {}) => ( + { + type: 'Control', + scope: `#/properties/${key}`, + label: title, + ...options && { options }, + }); + +const getDateTimeControlFormat = (key: string, jsonSchema: any, fieldSetItem: any = undefined) => { + try { + const definitionObject = fieldSetItem + || jsonSchema.definition.find((object: any) => (object.key === key)); + + if (definitionObject.fieldHtmlClass === 'date-time-picker json-schema' + || (definitionObject && (definitionObject.type || '') === 'datetime')) { + if (jsonSchema.schema.properties[key].format === 'date') { + return DateTimeFormat.Date; + } + return DateTimeFormat.DateTime; + } + if (definitionObject.fieldHtmlClass === 'date-picker json-schema' + || jsonSchema.schema.properties[key].format === 'date') { + return DateTimeFormat.Date; + } + } catch { + return undefined; + } + return undefined; +}; + +export const generateUISchema = (schema: any) => { + const elements: Object[] = []; + + if (isSchemaFieldSet(schema.definition)) { + elements.push(...getFieldSetsElements(schema)); + } else { + Object.keys(schema.schema.properties).forEach((key: string) => { + const element = getUIElement(key, schema); + if (!isEmpty(element)) { + elements.push(element); + } + }); + } + return { + type: 'Category', + elements, + }; +}; + +const getFieldSetsElements = (schema: any) => { + const elements: Object[] = []; + + schema.definition.forEach((item: any) => { + if (typeof item === 'string') { + elements.push(getBaseUIObject(item, schema.schema.properties[item].title || '')); + } else if (item instanceof Object) { + switch (true) { + case isFieldSetTitleWithoutItems(item): + elements.push(getBaseUIObject( + getFieldSetTitleKey(item.title), + item.title, + getElementOptions(PropertyFormat.FormLabel), + )); + break; + case isFieldSet(item): + if (item.title) { + elements.push(getBaseUIObject( + getFieldSetTitleKey(item.title), + item.title, + getElementOptions(PropertyFormat.FormLabel), + )); + } + item.items.forEach((value: any) => { + if (value instanceof Object) { + const element = getUIElement(value.key || '', schema, value); + if (element) { + elements.push(element); + } + } else if (typeof value === 'string') { + const element = getUIElement(value, schema); + if (element) { + elements.push(element); + } + } + }); + break; + case isPropertyKey(item): + // eslint-disable-next-line no-case-declarations + const element = getUIElement(item.key, schema); + if (element) { + elements.push(element); + } + break; + default: + break; + } + } + }); + return elements; +}; + +const getElementOptions = (format: string = '', display: string = '') => { + if (isEmpty(format)) { + return {}; + } + const options = { format }; + if (!isEmpty(display)) { + // @ts-ignore + options.display = display; + } + return options; +}; + +const getUIElement = (key: string, schema: any, fieldSetItem: any = undefined) => { + let options = {}; + switch (schema.schema.properties[key].type as SchemaTypes) { + case SchemaTypes.Number: + return getBaseUIObject(key, schema.schema.properties[key].title || ''); + + case SchemaTypes.String: { + const dateTimeFormat = getDateTimeControlFormat(key, schema, fieldSetItem); + if (!isEmptyString(dateTimeFormat)) { + options = getElementOptions(PropertyFormat.DateTime, dateTimeFormat); + } else if (schema.schema.properties[key].display + && schema.schema.properties[key].display === ElementDisplay.Header) { + options = getElementOptions(PropertyFormat.FormLabel); + } + return getBaseUIObject(key, schema.schema.properties[key].title || '', options); + } + + case SchemaTypes.Array: + if (schema.schema.properties[key].items.enum + && schema.schema.properties[key].items.enumNames) { + options = getElementOptions(PropertyFormat.MultiSelect); + } else if (schema.schema.properties[key].items) { + options = getElementOptions(PropertyFormat.RepeatableField); + } + return getBaseUIObject(key, schema.schema.properties[key].title || '', options); + + case undefined: { + const dateTimeFormat = getDateTimeControlFormat(key, schema, fieldSetItem); + if (!isEmptyString(dateTimeFormat)) { + options = getElementOptions(PropertyFormat.DateTime, dateTimeFormat); + return getBaseUIObject(key, schema.schema.properties[key].title || '', options); + } + return undefined; + } + + default: + break; + } + + return undefined; +}; diff --git a/src/v1/index.ts b/src/v1/index.ts new file mode 100644 index 0000000..e94c31b --- /dev/null +++ b/src/v1/index.ts @@ -0,0 +1,2 @@ +export { generateUISchema } from './generateUISchema'; +export { validateJSONSchema } from './validateJsonSchema'; diff --git a/src/utils/utils.ts b/src/v1/utils/utils.ts similarity index 100% rename from src/utils/utils.ts rename to src/v1/utils/utils.ts diff --git a/src/v1/validateJsonSchema.ts b/src/v1/validateJsonSchema.ts new file mode 100644 index 0000000..f94dccc --- /dev/null +++ b/src/v1/validateJsonSchema.ts @@ -0,0 +1,323 @@ +// Internal Dependencies +import { isEmpty } from 'lodash-es'; +import { + ElementDisplay, + getFieldSetTitleKey, + getSchemaValidations, + hasDuplicatedItems, + HELP_VALUE, + isCheckbox, + isDisabledChoice, + isFieldSet, + isFieldSetTitle, + isInactiveChoice, + isObject, + isPropertyKey, + isRequiredProperty, + isSchemaFieldSet, + isString, + normalizeDecimalSeparators, + REQUIRED_PROPERTY, + traverseSchema, +} from './utils/utils'; + +const specialCharactersInKey = /[^\w\n\s_"](?=[^:\n\s{}[]]*:[\t\n\s]*(\{|\[)+)/g; +const emptyEnumRegex = '\\"enum\\"\\n*\\s*\\:\\n*\\s*\\[\\n*\\s*\\]'; +const emptyEnumValue = '"enum": ["0"]'; +const emptyEnumNamesRegex = '\\"enumNames\\"\\n*\\s*\\:\\n*\\s*\\{\\n*\\s*\\}'; +const emptyEnumNamesValue = '"enumNames": {"0":"No Options"}'; +const emptyTitleMapRegex = '\\"titleMap\\"\\n*\\s*\\:\\n*\\s*\\[\\n*\\s*\\]'; +const emptyTitleMapValue = '"titleMap": [{"value":"no_option", "name":"No Option"}]'; +const minParamRegex = /"minimum"(?:[^\\"]|\\\\|\\")*"\d+\.*\d*"/g; +const maxParamRegex = /"maximum"(?:[^\\"]|\\\\|\\")*"\d+\.*\d*"/g; +const doubleSingleQuotesRegex = /"(?=[^"]*(?:"[^"]*)?$)/g; + +const getSchemaForCheckbox = ( + definition: any, + title: string, + required: boolean, + defaultValue: string, +) => ({ + type: 'array', + uniqueItems: true, + isHidden: false, + ...required && { required }, + title: title || definition.title, + items: { + enum: definition.titleMap.map((item: any) => item.value), + enumNames: definition.titleMap.map((item: any) => item.name), + }, + ...defaultValue && { default: defaultValue }, +}); + +const getTitleProperty = (title: string) => ({ + type: 'string', + readOnly: true, + isHidden: false, + display: ElementDisplay.Header, + title, +}); + +const getPropertyVisibility = (property: any) => property?.isHidden || false; + +const cleanUpRequiredProperty = (schema: any) => { + // Store the original root-level required array if it exists + const originalRequired = Array.isArray(schema.required) ? [...schema.required] : null; + + traverseSchema(schema, (node, path) => { + if (node.type === 'object' && node.properties) { + const localRequired: string[] = []; + + Object.entries(node.properties).forEach(([key, property]: [string, any]) => { + if (isRequiredProperty(property)) { + localRequired.push(key); + delete property.required; + } + }); + + // Only modify required array if we found inline required properties + if (!isEmpty(localRequired)) { + // If this is the root schema and there was an original required array, merge them + if (path.length === 0 && originalRequired) { + const mergedRequired = [...originalRequired, ...localRequired]; + node.required = Array.from(new Set(mergedRequired)); + } else { + node.required = localRequired; + } + } else if (path.length > 0 && node.required) { + // Only delete required array for nested objects, not the root + delete node.required; + } + } + }); + + return schema; +}; + +const formatDefinitionInSchema = (schema: any) => { + if (schema.schema.definition) { + const { definition } = schema.schema; + delete schema.schema.definition; + schema.definition = definition; + return schema; + } + return schema; +}; + +const formatSchemaRepeatableFieldLayout = (schema: any) => { + const properties: any = {}; + let headerCount = 0; + + // eslint-disable-next-line no-restricted-syntax + for (const item of schema.definition) { + if (isString(item)) { + properties[item] = schema.schema.properties[item]; + delete schema.schema.properties[item]; + } else if (isObject(item)) { + if (item.helpvalue) { + const property = `help_value_${headerCount}`; + headerCount += 1; + properties[property] = getTitleProperty((item.helpvalue || '').replace(/(<.+?>)/g, '')); + } else if (item.key) { + properties[item.key] = schema.schema.properties[item.key]; + delete schema.schema.properties[item.key]; + } + } + } + + schema.schema.properties = Object.assign(properties, schema.schema.properties); +}; + +// eslint-disable-next-line max-len +const cleanUpInactiveEnumChoice = (property: any) => property.enum.filter((choice: any) => !property.inactive_enum.includes(choice)); + +// eslint-disable-next-line max-len +const cleanUpDisabledEnumChoice = (definitionItem: any) => definitionItem.titleMap.filter((item: any) => !definitionItem.inactive_titleMap.includes(item.value)); + +const validateJSON = (stringSchema: string) => { + if (stringSchema.match(specialCharactersInKey) !== null) { + throw Error('Special characters not supported in JSON Schema'); + } + // Invalid double quotes + stringSchema = stringSchema.replace(/([“”])/g, '"'); + // Empty enum choices + stringSchema = stringSchema.replace(new RegExp(emptyEnumRegex, 'g'), emptyEnumValue); + // Empty enumNames choices + stringSchema = stringSchema.replace(new RegExp(emptyEnumNamesRegex, 'g'), emptyEnumNamesValue); + // Empty titleMap choices + stringSchema = stringSchema.replace(new RegExp(emptyTitleMapRegex, 'g'), emptyTitleMapValue); + // Numeric ranges + stringSchema = stringSchema.replace(minParamRegex, (match: string) => match.replace(doubleSingleQuotesRegex, '')); + stringSchema = stringSchema.replace(maxParamRegex, (match: string) => match.replace(doubleSingleQuotesRegex, '')); + + return stringSchema; +}; + +const cleanUpJTD = (validations: any, schema: any) => { + if (isSchemaFieldSet(schema.definition)) { + validateFieldSetDefinition(validations, schema); + } else if (schema.definition?.length > 0) { + for (const item of schema.definition) { + validateDefinition(validations, item, schema); + } + } +}; + +const validateFieldSetDefinition = (validations: any, schema: any) => { + for (const item of schema.definition) { + switch (true) { + case isString(item): + break; + // Create field set header + case isFieldSetTitle(item): + { + const key = getFieldSetTitleKey(item.title); + schema.schema.properties[key] = getTitleProperty(item.title); + } + break; + // Format field-set sub-items + case isFieldSet(item): + // eslint-disable-next-line no-restricted-syntax + for (const subItem of item.items) { + validateDefinition(validations, subItem, schema, item); + } + break; + default: + break; + } + } +}; + +const validateDefinition = (validations: any, item: any, schema: any, parentItem?: any) => { + const { hasCheckboxes, hasDisabledChoices } = validations; + // Set property visibility + if (isString(item) && schema.schema.properties[item]) { + schema.schema.properties[item].isHidden = getPropertyVisibility(schema.schema.properties[item]); + } else { + // Set property visibility + if ((isObject(item) || isPropertyKey(item)) + && item.key + && schema.schema.properties[item.key] + ) { + // eslint-disable-next-line max-len + schema.schema.properties[item.key].isHidden = getPropertyVisibility(schema.schema.properties[item.key]); + } + + // Clean up disabled choices + if (hasDisabledChoices && isDisabledChoice(item)) { + if (parentItem) { + const parentIndex = schema.definition.indexOf(parentItem); + const childIndex = schema.definition[parentIndex].items.indexOf(item); + schema.definition[parentIndex].items[childIndex].titleMap = cleanUpDisabledEnumChoice(item); + } else { + // eslint-disable-next-line max-len + schema.definition[schema.definition.indexOf(item)].titleMap = cleanUpDisabledEnumChoice(item); + } + } + + // Generate checkbox data in schema + if (hasCheckboxes && isCheckbox(item)) { + schema.schema.properties[item.key] = getSchemaForCheckbox( + item, + schema.schema.properties[item.key].title || '', + schema.schema.properties[item.key].required || false, + schema.schema.properties[item.key].default || false, + ); + } + } +}; + +const normalizeNumberFields = (schema: any) => { + traverseSchema(schema, (node) => { + if (node.type === 'object' && node.properties) { + Object.entries(node.properties).forEach(([, property]: [string, any]) => { + if (property.type === 'number') { + // Normalize default values + if (property.default !== undefined) { + property.default = normalizeDecimalSeparators(property.default); + } + + // Normalize minimum values + if (property.minimum !== undefined) { + property.minimum = normalizeDecimalSeparators(property.minimum); + } + + // Normalize maximum values + if (property.maximum !== undefined) { + property.maximum = normalizeDecimalSeparators(property.maximum); + } + } + }); + } + }); + + return schema; +}; + +const validateSchema = (validations: any, schema: any) => { + const { hasInactiveChoices, hasEnums } = validations; + if (hasInactiveChoices) { + for (const key of Object.keys(schema.schema.properties)) { + const property = schema.schema.properties[key]; + // Clean up inactive choices + if (isInactiveChoice(property)) { + schema.schema.properties[key].enum = cleanUpInactiveEnumChoice(property); + + if (isEmpty(schema.schema.properties[key].enum.length)) { + schema.schema.properties[key].enum = ['0']; + schema.schema.properties[key].enumNames = { 0: 'No Options' }; + } + } + } + } + + if (hasEnums) { + for (const key of Object.keys(schema.schema.properties)) { + // Detect duplicated enum items + if ( + // schema.schema.properties[key].enum?.length > 0 + !isEmpty(schema.schema.properties[key].enum) + && hasDuplicatedItems(schema.schema.properties[key].enum) + ) { + throw new Error('Duplicated enum items'); + } + } + } +}; + +export const validateJSONSchema = (stringSchema: string) => { + // Validate/Remove JSON issues + stringSchema = validateJSON(stringSchema); + + const schema = JSON.parse(stringSchema); + + // $schema and id make JSON forms crash + delete schema.schema.$schema; + delete schema.schema.id; + + // Definition array should be at the same level as a schema object + formatDefinitionInSchema(schema); + + const schemaValidations = getSchemaValidations(stringSchema); + + // Normalize decimal separators in number fields + normalizeNumberFields(schema.schema); + + validateSchema(schemaValidations, schema); + + // JSON forms library does not support JSON Type Definition JTD + cleanUpJTD(schemaValidations, schema); + + if (stringSchema.includes(HELP_VALUE)) { + formatSchemaRepeatableFieldLayout(schema); + } + + if (stringSchema.includes(REQUIRED_PROPERTY)) { + // Check for duplicated required properties in the original schema first + if (schema.schema.required?.length > 0 && hasDuplicatedItems(schema.schema.required)) { + throw new Error('Duplicated required properties'); + } + schema.schema = cleanUpRequiredProperty(schema.schema); + } + return schema; +}; From fedae25bf52f7d4c9e5cf0084b0fa299f713e880 Mon Sep 17 00:00:00 2001 From: Dan O'Neill Date: Tue, 24 Jun 2025 15:26:48 -0700 Subject: [PATCH 2/5] add new lib entry points --- package.json | 5 +++++ src/index.ts | 7 +++++-- src/v1.ts | 2 ++ 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 src/v1.ts diff --git a/package.json b/package.json index c5338cd..00e8b88 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,11 @@ "types": "./dist/src/index.d.ts", "import": "./dist/src/index.js", "require": "./dist/bundle.js" + }, + "./v1": { + "types": "./dist/src/v1.d.ts", + "import": "./dist/src/v1.js", + "require": "./dist/bundle.js" } }, "react-native": "./dist/bundle.js", diff --git a/src/index.ts b/src/index.ts index e94c31b..1198a38 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,2 +1,5 @@ -export { generateUISchema } from './generateUISchema'; -export { validateJSONSchema } from './validateJsonSchema'; +// Default exports (backward compatible - uses v1) +export { generateUISchema, validateJSONSchema } from './v1/index'; + +// Versioned exports │ +export * as v1 from './v1/index'; diff --git a/src/v1.ts b/src/v1.ts new file mode 100644 index 0000000..cb05611 --- /dev/null +++ b/src/v1.ts @@ -0,0 +1,2 @@ +// V1 API exports +export { generateUISchema, validateJSONSchema } from './v1/index'; \ No newline at end of file From e6dd7d8032d1a9d92a7dcaf0fd1fc5c612a805f2 Mon Sep 17 00:00:00 2001 From: Dan O'Neill Date: Tue, 24 Jun 2025 15:27:07 -0700 Subject: [PATCH 3/5] remove existing src files --- src/generateUISchema.ts | 175 --------------------- src/validateJsonSchema.ts | 323 -------------------------------------- 2 files changed, 498 deletions(-) delete mode 100644 src/generateUISchema.ts delete mode 100644 src/validateJsonSchema.ts diff --git a/src/generateUISchema.ts b/src/generateUISchema.ts deleted file mode 100644 index 8bf8411..0000000 --- a/src/generateUISchema.ts +++ /dev/null @@ -1,175 +0,0 @@ -// External Dependencies -import { isEmpty } from 'lodash-es'; - -// Internal Dependencies -import { - DateTimeFormat, - ElementDisplay, - getFieldSetTitleKey, - isEmptyString, - isFieldSet, - isFieldSetTitleWithoutItems, isPropertyKey, - isSchemaFieldSet, PropertyFormat, -} from './utils/utils'; - -// Enums -enum SchemaTypes { - Number = 'number', - String = 'string', - Array = 'array', -} - -const getBaseUIObject = (key: string, title: string, options: any = {}) => ( - { - type: 'Control', - scope: `#/properties/${key}`, - label: title, - ...options && { options }, - }); - -const getDateTimeControlFormat = (key: string, jsonSchema: any, fieldSetItem: any = undefined) => { - try { - const definitionObject = fieldSetItem - || jsonSchema.definition.find((object: any) => (object.key === key)); - - if (definitionObject.fieldHtmlClass === 'date-time-picker json-schema' - || (definitionObject && (definitionObject.type || '') === 'datetime')) { - if (jsonSchema.schema.properties[key].format === 'date') { - return DateTimeFormat.Date; - } - return DateTimeFormat.DateTime; - } - if (definitionObject.fieldHtmlClass === 'date-picker json-schema' - || jsonSchema.schema.properties[key].format === 'date') { - return DateTimeFormat.Date; - } - } catch { - return undefined; - } - return undefined; -}; - -export const generateUISchema = (schema: any) => { - const elements: Object[] = []; - - if (isSchemaFieldSet(schema.definition)) { - elements.push(...getFieldSetsElements(schema)); - } else { - Object.keys(schema.schema.properties).forEach((key: string) => { - const element = getUIElement(key, schema); - if (!isEmpty(element)) { - elements.push(element); - } - }); - } - return { - type: 'Category', - elements, - }; -}; - -const getFieldSetsElements = (schema: any) => { - const elements: Object[] = []; - - schema.definition.forEach((item: any) => { - if (typeof item === 'string') { - elements.push(getBaseUIObject(item, schema.schema.properties[item].title || '')); - } else if (item instanceof Object) { - switch (true) { - case isFieldSetTitleWithoutItems(item): - elements.push(getBaseUIObject( - getFieldSetTitleKey(item.title), - item.title, - getElementOptions(PropertyFormat.FormLabel), - )); - break; - case isFieldSet(item): - if (item.title) { - elements.push(getBaseUIObject( - getFieldSetTitleKey(item.title), - item.title, - getElementOptions(PropertyFormat.FormLabel), - )); - } - item.items.forEach((value: any) => { - if (value instanceof Object) { - const element = getUIElement(value.key || '', schema, value); - if (element) { - elements.push(element); - } - } else if (typeof value === 'string') { - const element = getUIElement(value, schema); - if (element) { - elements.push(element); - } - } - }); - break; - case isPropertyKey(item): - // eslint-disable-next-line no-case-declarations - const element = getUIElement(item.key, schema); - if (element) { - elements.push(element); - } - break; - default: - break; - } - } - }); - return elements; -}; - -const getElementOptions = (format: string = '', display: string = '') => { - if (isEmpty(format)) { - return {}; - } - const options = { format }; - if (!isEmpty(display)) { - // @ts-ignore - options.display = display; - } - return options; -}; - -const getUIElement = (key: string, schema: any, fieldSetItem: any = undefined) => { - let options = {}; - switch (schema.schema.properties[key].type as SchemaTypes) { - case SchemaTypes.Number: - return getBaseUIObject(key, schema.schema.properties[key].title || ''); - - case SchemaTypes.String: { - const dateTimeFormat = getDateTimeControlFormat(key, schema, fieldSetItem); - if (!isEmptyString(dateTimeFormat)) { - options = getElementOptions(PropertyFormat.DateTime, dateTimeFormat); - } else if (schema.schema.properties[key].display - && schema.schema.properties[key].display === ElementDisplay.Header) { - options = getElementOptions(PropertyFormat.FormLabel); - } - return getBaseUIObject(key, schema.schema.properties[key].title || '', options); - } - - case SchemaTypes.Array: - if (schema.schema.properties[key].items.enum - && schema.schema.properties[key].items.enumNames) { - options = getElementOptions(PropertyFormat.MultiSelect); - } else if (schema.schema.properties[key].items) { - options = getElementOptions(PropertyFormat.RepeatableField); - } - return getBaseUIObject(key, schema.schema.properties[key].title || '', options); - - case undefined: { - const dateTimeFormat = getDateTimeControlFormat(key, schema, fieldSetItem); - if (!isEmptyString(dateTimeFormat)) { - options = getElementOptions(PropertyFormat.DateTime, dateTimeFormat); - return getBaseUIObject(key, schema.schema.properties[key].title || '', options); - } - return undefined; - } - - default: - break; - } - - return undefined; -}; diff --git a/src/validateJsonSchema.ts b/src/validateJsonSchema.ts deleted file mode 100644 index f94dccc..0000000 --- a/src/validateJsonSchema.ts +++ /dev/null @@ -1,323 +0,0 @@ -// Internal Dependencies -import { isEmpty } from 'lodash-es'; -import { - ElementDisplay, - getFieldSetTitleKey, - getSchemaValidations, - hasDuplicatedItems, - HELP_VALUE, - isCheckbox, - isDisabledChoice, - isFieldSet, - isFieldSetTitle, - isInactiveChoice, - isObject, - isPropertyKey, - isRequiredProperty, - isSchemaFieldSet, - isString, - normalizeDecimalSeparators, - REQUIRED_PROPERTY, - traverseSchema, -} from './utils/utils'; - -const specialCharactersInKey = /[^\w\n\s_"](?=[^:\n\s{}[]]*:[\t\n\s]*(\{|\[)+)/g; -const emptyEnumRegex = '\\"enum\\"\\n*\\s*\\:\\n*\\s*\\[\\n*\\s*\\]'; -const emptyEnumValue = '"enum": ["0"]'; -const emptyEnumNamesRegex = '\\"enumNames\\"\\n*\\s*\\:\\n*\\s*\\{\\n*\\s*\\}'; -const emptyEnumNamesValue = '"enumNames": {"0":"No Options"}'; -const emptyTitleMapRegex = '\\"titleMap\\"\\n*\\s*\\:\\n*\\s*\\[\\n*\\s*\\]'; -const emptyTitleMapValue = '"titleMap": [{"value":"no_option", "name":"No Option"}]'; -const minParamRegex = /"minimum"(?:[^\\"]|\\\\|\\")*"\d+\.*\d*"/g; -const maxParamRegex = /"maximum"(?:[^\\"]|\\\\|\\")*"\d+\.*\d*"/g; -const doubleSingleQuotesRegex = /"(?=[^"]*(?:"[^"]*)?$)/g; - -const getSchemaForCheckbox = ( - definition: any, - title: string, - required: boolean, - defaultValue: string, -) => ({ - type: 'array', - uniqueItems: true, - isHidden: false, - ...required && { required }, - title: title || definition.title, - items: { - enum: definition.titleMap.map((item: any) => item.value), - enumNames: definition.titleMap.map((item: any) => item.name), - }, - ...defaultValue && { default: defaultValue }, -}); - -const getTitleProperty = (title: string) => ({ - type: 'string', - readOnly: true, - isHidden: false, - display: ElementDisplay.Header, - title, -}); - -const getPropertyVisibility = (property: any) => property?.isHidden || false; - -const cleanUpRequiredProperty = (schema: any) => { - // Store the original root-level required array if it exists - const originalRequired = Array.isArray(schema.required) ? [...schema.required] : null; - - traverseSchema(schema, (node, path) => { - if (node.type === 'object' && node.properties) { - const localRequired: string[] = []; - - Object.entries(node.properties).forEach(([key, property]: [string, any]) => { - if (isRequiredProperty(property)) { - localRequired.push(key); - delete property.required; - } - }); - - // Only modify required array if we found inline required properties - if (!isEmpty(localRequired)) { - // If this is the root schema and there was an original required array, merge them - if (path.length === 0 && originalRequired) { - const mergedRequired = [...originalRequired, ...localRequired]; - node.required = Array.from(new Set(mergedRequired)); - } else { - node.required = localRequired; - } - } else if (path.length > 0 && node.required) { - // Only delete required array for nested objects, not the root - delete node.required; - } - } - }); - - return schema; -}; - -const formatDefinitionInSchema = (schema: any) => { - if (schema.schema.definition) { - const { definition } = schema.schema; - delete schema.schema.definition; - schema.definition = definition; - return schema; - } - return schema; -}; - -const formatSchemaRepeatableFieldLayout = (schema: any) => { - const properties: any = {}; - let headerCount = 0; - - // eslint-disable-next-line no-restricted-syntax - for (const item of schema.definition) { - if (isString(item)) { - properties[item] = schema.schema.properties[item]; - delete schema.schema.properties[item]; - } else if (isObject(item)) { - if (item.helpvalue) { - const property = `help_value_${headerCount}`; - headerCount += 1; - properties[property] = getTitleProperty((item.helpvalue || '').replace(/(<.+?>)/g, '')); - } else if (item.key) { - properties[item.key] = schema.schema.properties[item.key]; - delete schema.schema.properties[item.key]; - } - } - } - - schema.schema.properties = Object.assign(properties, schema.schema.properties); -}; - -// eslint-disable-next-line max-len -const cleanUpInactiveEnumChoice = (property: any) => property.enum.filter((choice: any) => !property.inactive_enum.includes(choice)); - -// eslint-disable-next-line max-len -const cleanUpDisabledEnumChoice = (definitionItem: any) => definitionItem.titleMap.filter((item: any) => !definitionItem.inactive_titleMap.includes(item.value)); - -const validateJSON = (stringSchema: string) => { - if (stringSchema.match(specialCharactersInKey) !== null) { - throw Error('Special characters not supported in JSON Schema'); - } - // Invalid double quotes - stringSchema = stringSchema.replace(/([“”])/g, '"'); - // Empty enum choices - stringSchema = stringSchema.replace(new RegExp(emptyEnumRegex, 'g'), emptyEnumValue); - // Empty enumNames choices - stringSchema = stringSchema.replace(new RegExp(emptyEnumNamesRegex, 'g'), emptyEnumNamesValue); - // Empty titleMap choices - stringSchema = stringSchema.replace(new RegExp(emptyTitleMapRegex, 'g'), emptyTitleMapValue); - // Numeric ranges - stringSchema = stringSchema.replace(minParamRegex, (match: string) => match.replace(doubleSingleQuotesRegex, '')); - stringSchema = stringSchema.replace(maxParamRegex, (match: string) => match.replace(doubleSingleQuotesRegex, '')); - - return stringSchema; -}; - -const cleanUpJTD = (validations: any, schema: any) => { - if (isSchemaFieldSet(schema.definition)) { - validateFieldSetDefinition(validations, schema); - } else if (schema.definition?.length > 0) { - for (const item of schema.definition) { - validateDefinition(validations, item, schema); - } - } -}; - -const validateFieldSetDefinition = (validations: any, schema: any) => { - for (const item of schema.definition) { - switch (true) { - case isString(item): - break; - // Create field set header - case isFieldSetTitle(item): - { - const key = getFieldSetTitleKey(item.title); - schema.schema.properties[key] = getTitleProperty(item.title); - } - break; - // Format field-set sub-items - case isFieldSet(item): - // eslint-disable-next-line no-restricted-syntax - for (const subItem of item.items) { - validateDefinition(validations, subItem, schema, item); - } - break; - default: - break; - } - } -}; - -const validateDefinition = (validations: any, item: any, schema: any, parentItem?: any) => { - const { hasCheckboxes, hasDisabledChoices } = validations; - // Set property visibility - if (isString(item) && schema.schema.properties[item]) { - schema.schema.properties[item].isHidden = getPropertyVisibility(schema.schema.properties[item]); - } else { - // Set property visibility - if ((isObject(item) || isPropertyKey(item)) - && item.key - && schema.schema.properties[item.key] - ) { - // eslint-disable-next-line max-len - schema.schema.properties[item.key].isHidden = getPropertyVisibility(schema.schema.properties[item.key]); - } - - // Clean up disabled choices - if (hasDisabledChoices && isDisabledChoice(item)) { - if (parentItem) { - const parentIndex = schema.definition.indexOf(parentItem); - const childIndex = schema.definition[parentIndex].items.indexOf(item); - schema.definition[parentIndex].items[childIndex].titleMap = cleanUpDisabledEnumChoice(item); - } else { - // eslint-disable-next-line max-len - schema.definition[schema.definition.indexOf(item)].titleMap = cleanUpDisabledEnumChoice(item); - } - } - - // Generate checkbox data in schema - if (hasCheckboxes && isCheckbox(item)) { - schema.schema.properties[item.key] = getSchemaForCheckbox( - item, - schema.schema.properties[item.key].title || '', - schema.schema.properties[item.key].required || false, - schema.schema.properties[item.key].default || false, - ); - } - } -}; - -const normalizeNumberFields = (schema: any) => { - traverseSchema(schema, (node) => { - if (node.type === 'object' && node.properties) { - Object.entries(node.properties).forEach(([, property]: [string, any]) => { - if (property.type === 'number') { - // Normalize default values - if (property.default !== undefined) { - property.default = normalizeDecimalSeparators(property.default); - } - - // Normalize minimum values - if (property.minimum !== undefined) { - property.minimum = normalizeDecimalSeparators(property.minimum); - } - - // Normalize maximum values - if (property.maximum !== undefined) { - property.maximum = normalizeDecimalSeparators(property.maximum); - } - } - }); - } - }); - - return schema; -}; - -const validateSchema = (validations: any, schema: any) => { - const { hasInactiveChoices, hasEnums } = validations; - if (hasInactiveChoices) { - for (const key of Object.keys(schema.schema.properties)) { - const property = schema.schema.properties[key]; - // Clean up inactive choices - if (isInactiveChoice(property)) { - schema.schema.properties[key].enum = cleanUpInactiveEnumChoice(property); - - if (isEmpty(schema.schema.properties[key].enum.length)) { - schema.schema.properties[key].enum = ['0']; - schema.schema.properties[key].enumNames = { 0: 'No Options' }; - } - } - } - } - - if (hasEnums) { - for (const key of Object.keys(schema.schema.properties)) { - // Detect duplicated enum items - if ( - // schema.schema.properties[key].enum?.length > 0 - !isEmpty(schema.schema.properties[key].enum) - && hasDuplicatedItems(schema.schema.properties[key].enum) - ) { - throw new Error('Duplicated enum items'); - } - } - } -}; - -export const validateJSONSchema = (stringSchema: string) => { - // Validate/Remove JSON issues - stringSchema = validateJSON(stringSchema); - - const schema = JSON.parse(stringSchema); - - // $schema and id make JSON forms crash - delete schema.schema.$schema; - delete schema.schema.id; - - // Definition array should be at the same level as a schema object - formatDefinitionInSchema(schema); - - const schemaValidations = getSchemaValidations(stringSchema); - - // Normalize decimal separators in number fields - normalizeNumberFields(schema.schema); - - validateSchema(schemaValidations, schema); - - // JSON forms library does not support JSON Type Definition JTD - cleanUpJTD(schemaValidations, schema); - - if (stringSchema.includes(HELP_VALUE)) { - formatSchemaRepeatableFieldLayout(schema); - } - - if (stringSchema.includes(REQUIRED_PROPERTY)) { - // Check for duplicated required properties in the original schema first - if (schema.schema.required?.length > 0 && hasDuplicatedItems(schema.schema.required)) { - throw new Error('Duplicated required properties'); - } - schema.schema = cleanUpRequiredProperty(schema.schema); - } - return schema; -}; From fe7c24702977a686df0c081fef48781fa58e8c08 Mon Sep 17 00:00:00 2001 From: Dan O'Neill Date: Tue, 24 Jun 2025 15:27:19 -0700 Subject: [PATCH 4/5] update dependencies --- yarn.lock | 808 +++++------------------------------------------------- 1 file changed, 67 insertions(+), 741 deletions(-) diff --git a/yarn.lock b/yarn.lock index db5999f..ad98663 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28,7 +28,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz" integrity sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA== -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.11.6", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.21.8", "@babel/core@^7.23.9", "@babel/core@^7.4.0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.8.0", "@babel/core@>=7.0.0-beta.0 <8": +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.21.8", "@babel/core@^7.23.9": version "7.24.3" resolved "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz" integrity sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ== @@ -1253,7 +1253,7 @@ slash "^3.0.0" write-file-atomic "^4.0.2" -"@jest/types@^29.0.0", "@jest/types@^29.6.3": +"@jest/types@^29.6.3": version "29.6.3" resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz" integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== @@ -1297,14 +1297,6 @@ resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - "@jridgewell/trace-mapping@0.3.9": version "0.3.9" resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" @@ -1313,6 +1305,14 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@jsonforms/core@^3.0.0": version "3.2.1" resolved "https://registry.npmjs.org/@jsonforms/core/-/core-3.2.1.tgz" @@ -1331,7 +1331,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -1476,11 +1476,6 @@ resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - "@types/lodash-es@^4.17.7": version "4.17.12" resolved "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz" @@ -1531,7 +1526,7 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.13.0 || ^6.0.0", "@typescript-eslint/eslint-plugin@^6.8.0": +"@typescript-eslint/eslint-plugin@^6.8.0": version "6.21.0" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz" integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== @@ -1548,7 +1543,7 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/parser@^5.0.0 || ^6.0.0", "@typescript-eslint/parser@^6.0.0 || ^6.0.0-alpha", "@typescript-eslint/parser@^6.8.0": +"@typescript-eslint/parser@^6.8.0": version "6.21.0" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz" integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== @@ -1622,7 +1617,7 @@ resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -"@webassemblyjs/ast@^1.12.1", "@webassemblyjs/ast@1.12.1": +"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": version "1.12.1" resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz" integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== @@ -1723,7 +1718,7 @@ "@webassemblyjs/wasm-gen" "1.12.1" "@webassemblyjs/wasm-parser" "1.12.1" -"@webassemblyjs/wasm-parser@^1.12.1", "@webassemblyjs/wasm-parser@1.12.1": +"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": version "1.12.1" resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz" integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== @@ -1783,7 +1778,7 @@ acorn-walk@^8.1.1: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz" integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: +acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: version "8.11.3" resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== @@ -1800,17 +1795,7 @@ ajv-keywords@^3.5.2: resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^6.12.5, ajv@^6.9.1: +ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1849,14 +1834,7 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -1893,85 +1871,12 @@ argparse@^2.0.1: resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-buffer-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz" - integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== - dependencies: - call-bind "^1.0.5" - is-array-buffer "^3.0.4" - -array-includes@^3.1.7: - version "3.1.8" - resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz" - integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - is-string "^1.0.7" - array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlastindex@^1.2.3: - version "1.2.5" - resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz" - integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" - -array.prototype.flat@^1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -arraybuffer.prototype.slice@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz" - integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.2.1" - get-intrinsic "^1.2.3" - is-array-buffer "^3.0.4" - is-shared-array-buffer "^1.0.2" - -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - -babel-jest@^29.0.0, babel-jest@^29.5.0, babel-jest@^29.7.0: +babel-jest@^29.5.0, babel-jest@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz" integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== @@ -2082,7 +1987,7 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.21.10, browserslist@^4.22.2, browserslist@^4.23.0, "browserslist@>= 4.21.0": +browserslist@^4.21.10, browserslist@^4.22.2, browserslist@^4.23.0: version "4.23.0" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz" integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== @@ -2111,7 +2016,7 @@ buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: +call-bind@^1.0.5, call-bind@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz" integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== @@ -2151,15 +2056,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.0: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2229,16 +2126,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + colorette@^2.0.14: version "2.0.20" resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" @@ -2303,40 +2200,6 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -data-view-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz" - integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz" - integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz" - integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" @@ -2368,7 +2231,7 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -2399,13 +2262,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - doctrine@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" @@ -2448,58 +2304,6 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2: - version "1.23.3" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz" - integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== - dependencies: - array-buffer-byte-length "^1.0.1" - arraybuffer.prototype.slice "^1.0.3" - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - data-view-buffer "^1.0.1" - data-view-byte-length "^1.0.1" - data-view-byte-offset "^1.0.0" - es-define-property "^1.0.0" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-set-tostringtag "^2.0.3" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.4" - get-symbol-description "^1.0.2" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - has-proto "^1.0.3" - has-symbols "^1.0.3" - hasown "^2.0.2" - internal-slot "^1.0.7" - is-array-buffer "^3.0.4" - is-callable "^1.2.7" - is-data-view "^1.0.1" - is-negative-zero "^2.0.3" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.3" - is-string "^1.0.7" - is-typed-array "^1.1.13" - is-weakref "^1.0.2" - object-inspect "^1.13.1" - object-keys "^1.1.1" - object.assign "^4.1.5" - regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.2" - safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.9" - string.prototype.trimend "^1.0.8" - string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.2" - typed-array-byte-length "^1.0.1" - typed-array-byte-offset "^1.0.2" - typed-array-length "^1.0.6" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.15" - es-define-property@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz" @@ -2507,7 +2311,7 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" -es-errors@^1.2.1, es-errors@^1.3.0: +es-errors@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== @@ -2524,31 +2328,6 @@ es-object-atoms@^1.0.0: dependencies: es-errors "^1.3.0" -es-set-tostringtag@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz" - integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== - dependencies: - get-intrinsic "^1.2.4" - has-tostringtag "^1.0.2" - hasown "^2.0.1" - -es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== - dependencies: - hasown "^2.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - escalade@^3.1.1: version "3.1.2" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz" @@ -2586,44 +2365,13 @@ eslint-config-airbnb-typescript@^17.0.0: dependencies: eslint-config-airbnb-base "^15.0.0" -eslint-import-resolver-node@^0.3.9: - version "0.3.9" - resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-module-utils@^2.8.0: - version "2.8.1" - resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz" - integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== - dependencies: - debug "^3.2.7" - -eslint-plugin-import@^2.25.2, eslint-plugin-import@^2.25.3: - version "2.29.1" - resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz" - integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== - dependencies: - array-includes "^3.1.7" - array.prototype.findlastindex "^1.2.3" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.8.0" - hasown "^2.0.0" - is-core-module "^2.13.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.7" - object.groupby "^1.0.1" - object.values "^1.1.7" - semver "^6.3.1" - tsconfig-paths "^3.15.0" + esrecurse "^4.3.0" + estraverse "^4.1.1" eslint-scope@^7.2.2: version "7.2.2" @@ -2633,20 +2381,12 @@ eslint-scope@^7.2.2: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-scope@5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: 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== -"eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.32.0 || ^8.2.0", eslint@^8.52.0: +eslint@^8.52.0: version "8.57.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz" integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== @@ -2785,7 +2525,7 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0, fast-json-stable-stringify@2.x: +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: 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== @@ -2863,13 +2603,6 @@ flatted@^3.2.9: resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz" integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" @@ -2885,21 +2618,6 @@ function-bind@^1.1.2: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" @@ -2910,7 +2628,7 @@ get-caller-file@^2.0.5: resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -2931,15 +2649,6 @@ get-stream@^6.0.0: resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz" - integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== - dependencies: - call-bind "^1.0.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" @@ -2983,13 +2692,6 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - globby@^11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" @@ -3019,11 +2721,6 @@ graphemer@^1.4.0: resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" @@ -3041,24 +2738,17 @@ has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: dependencies: es-define-property "^1.0.0" -has-proto@^1.0.1, has-proto@^1.0.3: +has-proto@^1.0.1: version "1.0.3" resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz" integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== -has-symbols@^1.0.2, has-symbols@^1.0.3: +has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: +hasown@^2.0.0: version "2.0.2" resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -3114,74 +2804,23 @@ inherits@2: resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -internal-slot@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz" - integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.0" - side-channel "^1.0.4" - interpret@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz" integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== -is-array-buffer@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz" - integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.13.0, is-core-module@^2.13.1: +is-core-module@^2.13.0: version "2.13.1" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: hasown "^2.0.0" -is-data-view@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz" - integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== - dependencies: - is-typed-array "^1.1.13" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" @@ -3204,18 +2843,6 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: dependencies: is-extglob "^2.1.1" -is-negative-zero@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz" - integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" @@ -3233,59 +2860,11 @@ is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz" - integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== - dependencies: - call-bind "^1.0.7" - is-stream@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.13: - version "1.1.13" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" @@ -3561,7 +3140,7 @@ jest-resolve-dependencies@^29.7.0: jest-regex-util "^29.6.3" jest-snapshot "^29.7.0" -jest-resolve@*, jest-resolve@^29.7.0: +jest-resolve@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz" integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== @@ -3714,7 +3293,7 @@ jest-worker@^29.7.0: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^29.0.0, jest@^29.5.0, jest@>=27.2.5: +jest@^29.5.0: version "29.7.0" resolved "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz" integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== @@ -3779,13 +3358,6 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - json5@^2.2.3: version "2.2.3" resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" @@ -3891,7 +3463,7 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -make-error@^1.1.1, make-error@1.x: +make-error@1.x, make-error@^1.1.1: version "1.3.6" resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -3938,34 +3510,6 @@ mimic-fn@^2.1.0: resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimatch@^3.0.4: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.5: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - minimatch@9.0.3: version "9.0.3" resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" @@ -3973,12 +3517,14 @@ minimatch@9.0.3: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" -ms@^2.1.1, ms@2.1.2: +ms@2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -4015,17 +3561,12 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - object-keys@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.2, object.assign@^4.1.5: +object.assign@^4.1.2: version "4.1.5" resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz" integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== @@ -4044,34 +3585,6 @@ object.entries@^1.1.5: define-properties "^1.2.1" es-object-atoms "^1.0.0" -object.fromentries@^2.0.7: - version "2.0.8" - resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz" - integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -object.groupby@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz" - integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - -object.values@^1.1.7: - version "1.2.0" - resolved "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz" - integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - once@^1.3.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" @@ -4195,11 +3708,6 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" @@ -4280,16 +3788,6 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.5.2: - version "1.5.2" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz" - integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== - dependencies: - call-bind "^1.0.6" - define-properties "^1.2.1" - es-errors "^1.3.0" - set-function-name "^2.0.1" - regexpu-core@^5.3.1: version "5.3.2" resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz" @@ -4341,7 +3839,7 @@ resolve.exports@^2.0.0: resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.4: +resolve@^1.14.2, resolve@^1.20.0: version "1.22.8" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -4369,30 +3867,11 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-array-concat@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz" - integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== - dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" - has-symbols "^1.0.3" - isarray "^2.0.5" - safe-buffer@^5.1.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex-test@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz" - integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-regex "^1.1.4" - schema-utils@^3.1.1, schema-utils@^3.2.0: version "3.3.0" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" @@ -4407,21 +3886,7 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.4: - version "7.6.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -semver@^7.5.3: - version "7.6.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -semver@^7.5.4: +semver@^7.3.4, semver@^7.5.3, semver@^7.5.4: version "7.6.0" resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz" integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== @@ -4447,16 +3912,6 @@ set-function-length@^1.2.1: gopd "^1.0.1" has-property-descriptors "^1.0.2" -set-function-name@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - shallow-clone@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" @@ -4476,16 +3931,6 @@ shebang-regex@^3.0.0: resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" @@ -4501,14 +3946,6 @@ slash@^3.0.0: resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -source-map-support@~0.5.20: - 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== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - source-map-support@0.5.13: version "0.5.13" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" @@ -4517,6 +3954,14 @@ source-map-support@0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@~0.5.20: + 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== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" @@ -4556,34 +4001,6 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.trim@^1.2.9: - version "1.2.9" - resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz" - integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.0" - es-object-atoms "^1.0.0" - -string.prototype.trimend@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz" - integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string.prototype.trimstart@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz" - integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" @@ -4591,11 +4008,6 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - strip-bom@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" @@ -4724,7 +4136,7 @@ ts-loader@^9.5.1: semver "^7.3.4" source-map "^0.7.4" -ts-node@^10.9.1, ts-node@>=9.0.0: +ts-node@^10.9.1: version "10.9.2" resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== @@ -4743,16 +4155,6 @@ ts-node@^10.9.1, ts-node@>=9.0.0: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tsconfig-paths@^3.15.0: - version "3.15.0" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" @@ -4775,65 +4177,11 @@ type-fest@^0.21.3: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -typed-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz" - integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-typed-array "^1.1.13" - -typed-array-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz" - integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - -typed-array-byte-offset@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz" - integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - -typed-array-length@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz" - integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - possible-typed-array-names "^1.0.0" - -typescript@*, typescript@^5.2.2, typescript@>=2.7, typescript@>=4.2.0, "typescript@>=4.3 <6": +typescript@^5.2.2: version "5.4.3" resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz" integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - undici-types@~5.26.4: version "5.26.5" resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" @@ -4906,7 +4254,7 @@ watchpack@^2.4.1: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -webpack-cli@^5.1.4, webpack-cli@5.x.x: +webpack-cli@^5.1.4: version "5.1.4" resolved "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz" integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== @@ -4939,7 +4287,7 @@ webpack-sources@^3.2.3: resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@^5, webpack@^5.0.0, webpack@^5.1.0, webpack@^5.91.0, webpack@5.x.x: +webpack@^5, webpack@^5.91.0: version "5.91.0" resolved "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz" integrity sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw== @@ -4969,28 +4317,6 @@ webpack@^5, webpack@^5.0.0, webpack@^5.1.0, webpack@^5.91.0, webpack@5.x.x: watchpack "^2.4.1" webpack-sources "^3.2.3" -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-typed-array@^1.1.14, which-typed-array@^1.1.15: - version "1.1.15" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz" - integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.2" - which@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" From fe639ea5d1f839b694aac83d08e32230c2cb34d6 Mon Sep 17 00:00:00 2001 From: Dan O'Neill Date: Tue, 24 Jun 2025 15:27:29 -0700 Subject: [PATCH 5/5] update tests --- common/mockData/formatterMockData.ts | 2 +- test/JsonFormatter.test.tsx | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/common/mockData/formatterMockData.ts b/common/mockData/formatterMockData.ts index df4450c..b340a08 100644 --- a/common/mockData/formatterMockData.ts +++ b/common/mockData/formatterMockData.ts @@ -1,4 +1,4 @@ -import { ElementDisplay } from "../../src/utils/utils"; +import { ElementDisplay } from "../../src/v1/utils/utils"; export const JSON_SCHEMA_SPECIAL_CHARS_FAKE_DATA = '{\n' + ' "definition": [\n' + diff --git a/test/JsonFormatter.test.tsx b/test/JsonFormatter.test.tsx index 09304a8..abf6b77 100644 --- a/test/JsonFormatter.test.tsx +++ b/test/JsonFormatter.test.tsx @@ -26,9 +26,9 @@ import jsonSchemaFieldSets from "../common/mockData/jsonSchemaFielSetMock.json"; import jsonSchema from "../common/mockData/jsonSchemaMock.json"; import expectedUISchema from "../common/mockData/uiSchemaExpectedMock.json"; import expectedFieldSetUISchema from "../common/mockData/uiSchemaFielSetExpectedMock.json"; -import { generateUISchema } from "../src/generateUISchema"; -import { validateJSONSchema } from "../src/validateJsonSchema"; -import { normalizeDecimalSeparators } from "../src/utils/utils"; +import { generateUISchema } from "../src/v1/generateUISchema"; +import { validateJSONSchema } from "../src/v1/validateJsonSchema"; +import { normalizeDecimalSeparators } from "../src/v1/utils/utils"; describe("JSON Schema validation", () => { it("Special chars should throw an exception", () => {