@twin.org/tools-core 0.0.3-next.1 → 0.0.3-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -23,13 +23,12 @@ export class JsonSchemaHelper {
|
|
|
23
23
|
// https://www.learnjsonschema.com/2020-12/applicator/items/
|
|
24
24
|
// https://www.learnjsonschema.com/2020-12/applicator/prefixitems/
|
|
25
25
|
if (Is.array(schemaObject.items)) {
|
|
26
|
-
if (Is.
|
|
26
|
+
if (Is.object(schemaObject.additionalItems)) {
|
|
27
27
|
// If the items are an array then this is fixed ordering
|
|
28
28
|
// so move to prefixItems and then do the same for additionalItems
|
|
29
29
|
schemaObject.prefixItems = schemaObject.items;
|
|
30
30
|
delete schemaObject.items;
|
|
31
31
|
schemaObject.items = schemaObject.additionalItems;
|
|
32
|
-
delete schemaObject.additionalItems;
|
|
33
32
|
}
|
|
34
33
|
else if (Is.integer(schemaObject.minItems) &&
|
|
35
34
|
Is.integer(schemaObject.maxItems) &&
|
|
@@ -46,12 +45,9 @@ export class JsonSchemaHelper {
|
|
|
46
45
|
schemaObject.items = { anyOf: schemaObject.items };
|
|
47
46
|
}
|
|
48
47
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
// remove any additionalItems as this is not valid
|
|
53
|
-
delete schemaObject.additionalItems;
|
|
54
|
-
}
|
|
48
|
+
// We can't use additionalItems in the new schema version
|
|
49
|
+
// so just remove it after processing
|
|
50
|
+
delete schemaObject.additionalItems;
|
|
55
51
|
JsonSchemaHelper.processSchemaDictionary(schemaObject.properties);
|
|
56
52
|
JsonSchemaHelper.processArrays(schemaObject.additionalProperties);
|
|
57
53
|
JsonSchemaHelper.processSchemaArray(schemaObject.allOf);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonSchemaHelper.js","sourceRoot":"","sources":["../../../src/utils/jsonSchemaHelper.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { Is } from \"@twin.org/core\";\nimport type { IJsonSchema } from \"../models/IJsonSchema.js\";\n\n/**\n * Helper class for JSON Schema processing.\n */\nexport class JsonSchemaHelper {\n\t/**\n\t * The JSON Schema version used.\n\t */\n\tpublic static readonly SCHEMA_VERSION = \"https://json-schema.org/draft/2020-12/schema\";\n\n\t/**\n\t * Process arrays in the schema object.\n\t * @param schemaObject The schema object to process.\n\t */\n\tpublic static processArrays(schemaObject: IJsonSchema): void {\n\t\tif (Is.object<IJsonSchema>(schemaObject)) {\n\t\t\t// new json schema version has prefixItems instead of items for arrays with fixed ordering\n\t\t\t// so convert any old style schemas that use items as an array\n\t\t\t// prefixItems validates fixed positions and is an array\n\t\t\t// items validates the rest and is an object\n\t\t\t// additionalItems no longer exists\n\t\t\t// https://www.learnjsonschema.com/2020-12/applicator/items/\n\t\t\t// https://www.learnjsonschema.com/2020-12/applicator/prefixitems/\n\t\t\tif (Is.array(schemaObject.items)) {\n\t\t\t\tif (Is.array(schemaObject.additionalItems)) {\n\t\t\t\t\t// If the items are an array then this is fixed ordering\n\t\t\t\t\t// so move to prefixItems and then do the same for additionalItems\n\t\t\t\t\tschemaObject.prefixItems = schemaObject.items;\n\t\t\t\t\tdelete schemaObject.items;\n\t\t\t\t\tschemaObject.items = schemaObject.additionalItems;\n\t\t\t\t\tdelete schemaObject.additionalItems;\n\t\t\t\t} else if (\n\t\t\t\t\tIs.integer(schemaObject.minItems) &&\n\t\t\t\t\tIs.integer(schemaObject.maxItems) &&\n\t\t\t\t\tschemaObject.minItems === schemaObject.maxItems &&\n\t\t\t\t\tschemaObject.maxItems === schemaObject.items.length\n\t\t\t\t) {\n\t\t\t\t\t// There is a fixed number of items which matches the items array length\n\t\t\t\t\t// so move construct an allOf to enforce the fixed length\n\t\t\t\t\tschemaObject.items = { allOf: schemaObject.items };\n\t\t\t\t\tdelete schemaObject.minItems;\n\t\t\t\t\tdelete schemaObject.maxItems;\n\t\t\t\t} else {\n\t\t\t\t\t// no additional items so wrap in an anyOf\n\t\t\t\t\tschemaObject.items = { anyOf: schemaObject.items };\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// It's an object, so we should just leave this as is\n\t\t\t\t// as we can't convert to prefixItems, but should\n\t\t\t\t// remove any additionalItems as this is not valid\n\t\t\t\tdelete schemaObject.additionalItems;\n\t\t\t}\n\n\t\t\tJsonSchemaHelper.processSchemaDictionary(schemaObject.properties);\n\t\t\tJsonSchemaHelper.processArrays(schemaObject.additionalProperties);\n\t\t\tJsonSchemaHelper.processSchemaArray(schemaObject.allOf);\n\t\t\tJsonSchemaHelper.processSchemaArray(schemaObject.anyOf);\n\t\t\tJsonSchemaHelper.processSchemaArray(schemaObject.oneOf);\n\t\t}\n\t}\n\n\t/**\n\t * Process arrays in the schema object.\n\t * @param schemaDictionary The schema object to process.\n\t */\n\tpublic static processSchemaDictionary(schemaDictionary?: { [key: string]: IJsonSchema }): void {\n\t\tif (Is.object(schemaDictionary)) {\n\t\t\tfor (const item of Object.values(schemaDictionary)) {\n\t\t\t\tif (Is.object<IJsonSchema>(item)) {\n\t\t\t\t\tJsonSchemaHelper.processArrays(item);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Process arrays in the schema object.\n\t * @param schemaArray The schema object to process.\n\t */\n\tpublic static processSchemaArray(schemaArray?: IJsonSchema[]): void {\n\t\tif (Is.arrayValue(schemaArray)) {\n\t\t\tfor (const item of schemaArray) {\n\t\t\t\tif (Is.object<IJsonSchema>(item)) {\n\t\t\t\t\tJsonSchemaHelper.processArrays(item);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Cleanup TypeScript markers from the type name.\n\t * @param typeName The definition string to clean up.\n\t * @returns The cleaned up definition string.\n\t */\n\tpublic static normaliseTypeName(typeName: string): string {\n\t\t// Remove the partial markers\n\t\tlet sTypeName = typeName.replace(/^Partial<I(.*?)>/g, \"$1\");\n\t\tsTypeName = sTypeName.replace(/Partial%3CI(.*?)%3E/g, \"$1\");\n\n\t\t// Remove the omit markers\n\t\tsTypeName = sTypeName.replace(/^Omit<I(.*?),.*>/g, \"$1\");\n\t\tsTypeName = sTypeName.replace(/Omit%3CI(.*?)%2C.*%3E/g, \"$1\");\n\n\t\t// Remove the pick markers\n\t\tsTypeName = sTypeName.replace(/^Pick<I(.*?),.*>/g, \"$1\");\n\t\tsTypeName = sTypeName.replace(/Pick%3CI(.*?)%2C.*%3E/g, \"$1\");\n\n\t\t// Cleanup the generic markers\n\t\tsTypeName = sTypeName.replace(/^(.*?)<I(.*?)>/g, \"$1<$2>\");\n\t\tsTypeName = sTypeName.replace(/(.*?)%3CI(.*?)%3E/g, \"$1<$2>\");\n\n\t\t// Cleanup the unknown markers\n\t\tsTypeName = sTypeName.replace(/<unknown>/g, \"\");\n\t\tsTypeName = sTypeName.replace(/%3Cunknown%3E/g, \"\");\n\n\t\t// Replace the other url markers\n\t\tsTypeName = sTypeName.replace(/%7C/g, \"|\").replace(/%3C/g, \"<\").replace(/%3E/g, \">\");\n\n\t\treturn sTypeName;\n\t}\n\n\t/**\n\t * Extract type from properties definition.\n\t * @param allTypes All the known types.\n\t * @param schema The schema to extract from.\n\t * @param output The output types.\n\t */\n\tpublic static extractTypesFromSchema(\n\t\tallTypes: { [id: string]: IJsonSchema },\n\t\tschema: IJsonSchema,\n\t\toutput: { [id: string]: IJsonSchema }\n\t): void {\n\t\tconst additionalTypes = [];\n\n\t\tif (Is.stringValue(schema.$ref)) {\n\t\t\tadditionalTypes.push(\n\t\t\t\tJsonSchemaHelper.normaliseTypeName(schema.$ref.replace(\"#/definitions/\", \"\"))\n\t\t\t);\n\t\t} else if (Is.object<IJsonSchema>(schema.items)) {\n\t\t\tif (Is.arrayValue<IJsonSchema>(schema.items)) {\n\t\t\t\tfor (const itemSchema of schema.items) {\n\t\t\t\t\tJsonSchemaHelper.extractTypesFromSchema(allTypes, itemSchema, output);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tJsonSchemaHelper.extractTypesFromSchema(allTypes, schema.items, output);\n\t\t\t}\n\t\t} else if (Is.object(schema.properties) || Is.object(schema.additionalProperties)) {\n\t\t\tif (Is.object(schema.properties)) {\n\t\t\t\tfor (const prop in schema.properties) {\n\t\t\t\t\tconst p = schema.properties[prop];\n\t\t\t\t\tif (Is.object<IJsonSchema>(p)) {\n\t\t\t\t\t\tJsonSchemaHelper.extractTypesFromSchema(allTypes, p, output);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Is.object(schema.additionalProperties)) {\n\t\t\t\tJsonSchemaHelper.extractTypesFromSchema(allTypes, schema.additionalProperties, output);\n\t\t\t}\n\t\t} else if (Is.arrayValue(schema.anyOf)) {\n\t\t\tfor (const prop of schema.anyOf) {\n\t\t\t\tif (Is.object<IJsonSchema>(prop)) {\n\t\t\t\t\tJsonSchemaHelper.extractTypesFromSchema(allTypes, prop, output);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (Is.arrayValue(schema.oneOf)) {\n\t\t\tfor (const prop of schema.oneOf) {\n\t\t\t\tif (Is.object<IJsonSchema>(prop)) {\n\t\t\t\t\tJsonSchemaHelper.extractTypesFromSchema(allTypes, prop, output);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (additionalTypes.length > 0) {\n\t\t\tJsonSchemaHelper.extractTypes(allTypes, additionalTypes, output);\n\t\t}\n\t}\n\n\t/**\n\t * Extract the required types from all the known schemas.\n\t * @param allSchemas All the known schemas.\n\t * @param requiredTypes The required types.\n\t * @param referencedSchemas The references schemas.\n\t */\n\tpublic static extractTypes(\n\t\tallSchemas: { [id: string]: IJsonSchema },\n\t\trequiredTypes: string[],\n\t\treferencedSchemas: { [id: string]: IJsonSchema }\n\t): void {\n\t\tfor (const typeKey of Object.keys(allSchemas)) {\n\t\t\tif (!referencedSchemas[typeKey]) {\n\t\t\t\tfor (const requiredType of requiredTypes) {\n\t\t\t\t\tconst regex = JsonSchemaHelper.stringToRegEx(requiredType);\n\n\t\t\t\t\tif (regex.test(typeKey)) {\n\t\t\t\t\t\treferencedSchemas[typeKey] = allSchemas[typeKey];\n\t\t\t\t\t\tJsonSchemaHelper.extractTypesFromSchema(\n\t\t\t\t\t\t\tallSchemas,\n\t\t\t\t\t\t\tallSchemas[typeKey],\n\t\t\t\t\t\t\treferencedSchemas\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Expand the types inline.\n\t * @param schemas The schemas to include the expanded types.\n\t * @param expandedTypes The types to expand.\n\t */\n\tpublic static expandTypes(schemas: { [id: string]: IJsonSchema }, expandedTypes: string[]): void {\n\t\tfor (const typeKey of Object.keys(schemas)) {\n\t\t\tconst schema = schemas[typeKey];\n\n\t\t\tJsonSchemaHelper.expandSchemaTypes(schemas, schema, expandedTypes);\n\t\t}\n\t}\n\n\t/**\n\t * Expand the types inline.\n\t * @param allSchemas All the known schemas.\n\t * @param schema The schemas to include the expanded types.\n\t * @param expandedTypes The types to expand.\n\t */\n\tpublic static expandSchemaTypes(\n\t\tallSchemas: { [id: string]: IJsonSchema },\n\t\tschema: IJsonSchema,\n\t\texpandedTypes: string[]\n\t): void {\n\t\tif (Is.stringValue(schema.$ref)) {\n\t\t\tfor (const expandedType of expandedTypes) {\n\t\t\t\tconst typeName = JsonSchemaHelper.normaliseTypeName(\n\t\t\t\t\tschema.$ref.replace(\"#/definitions/\", \"\")\n\t\t\t\t);\n\t\t\t\tconst regex = JsonSchemaHelper.stringToRegEx(expandedType);\n\t\t\t\tif (regex.test(typeName) && allSchemas[typeName]) {\n\t\t\t\t\tdelete schema.$ref;\n\t\t\t\t\tObject.assign(schema, allSchemas[typeName]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (Is.object<IJsonSchema>(schema.items)) {\n\t\t\tif (Is.arrayValue<IJsonSchema>(schema.items)) {\n\t\t\t\tfor (const itemSchema of schema.items) {\n\t\t\t\t\tJsonSchemaHelper.expandSchemaTypes(allSchemas, itemSchema, expandedTypes);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tJsonSchemaHelper.expandSchemaTypes(allSchemas, schema.items, expandedTypes);\n\t\t\t}\n\t\t} else if (Is.object(schema.properties) || Is.object(schema.additionalProperties)) {\n\t\t\tif (Is.object(schema.properties)) {\n\t\t\t\tfor (const prop in schema.properties) {\n\t\t\t\t\tconst p = schema.properties[prop];\n\t\t\t\t\tif (Is.object<IJsonSchema>(p)) {\n\t\t\t\t\t\tJsonSchemaHelper.expandSchemaTypes(allSchemas, p, expandedTypes);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Is.object(schema.additionalProperties)) {\n\t\t\t\tJsonSchemaHelper.expandSchemaTypes(allSchemas, schema.additionalProperties, expandedTypes);\n\t\t\t}\n\t\t} else if (Is.arrayValue(schema.anyOf)) {\n\t\t\tfor (const prop of schema.anyOf) {\n\t\t\t\tif (Is.object<IJsonSchema>(prop)) {\n\t\t\t\t\tJsonSchemaHelper.expandSchemaTypes(allSchemas, prop, expandedTypes);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (Is.arrayValue(schema.oneOf)) {\n\t\t\tfor (const prop of schema.oneOf) {\n\t\t\t\tif (Is.object<IJsonSchema>(prop)) {\n\t\t\t\t\tJsonSchemaHelper.expandSchemaTypes(allSchemas, prop, expandedTypes);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Convert a string pattern to a regular expression.\n\t * @param matchPattern The pattern to convert.\n\t * @returns The regular expression.\n\t */\n\tpublic static stringToRegEx(matchPattern: string): RegExp {\n\t\treturn matchPattern.startsWith(\"/\") && matchPattern.endsWith(\"/\")\n\t\t\t? new RegExp(matchPattern.slice(1, -1))\n\t\t\t: new RegExp(`^${matchPattern}$`);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"jsonSchemaHelper.js","sourceRoot":"","sources":["../../../src/utils/jsonSchemaHelper.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { Is } from \"@twin.org/core\";\nimport type { IJsonSchema } from \"../models/IJsonSchema.js\";\n\n/**\n * Helper class for JSON Schema processing.\n */\nexport class JsonSchemaHelper {\n\t/**\n\t * The JSON Schema version used.\n\t */\n\tpublic static readonly SCHEMA_VERSION = \"https://json-schema.org/draft/2020-12/schema\";\n\n\t/**\n\t * Process arrays in the schema object.\n\t * @param schemaObject The schema object to process.\n\t */\n\tpublic static processArrays(schemaObject: IJsonSchema): void {\n\t\tif (Is.object<IJsonSchema>(schemaObject)) {\n\t\t\t// new json schema version has prefixItems instead of items for arrays with fixed ordering\n\t\t\t// so convert any old style schemas that use items as an array\n\t\t\t// prefixItems validates fixed positions and is an array\n\t\t\t// items validates the rest and is an object\n\t\t\t// additionalItems no longer exists\n\t\t\t// https://www.learnjsonschema.com/2020-12/applicator/items/\n\t\t\t// https://www.learnjsonschema.com/2020-12/applicator/prefixitems/\n\t\t\tif (Is.array(schemaObject.items)) {\n\t\t\t\tif (Is.object(schemaObject.additionalItems)) {\n\t\t\t\t\t// If the items are an array then this is fixed ordering\n\t\t\t\t\t// so move to prefixItems and then do the same for additionalItems\n\t\t\t\t\tschemaObject.prefixItems = schemaObject.items;\n\t\t\t\t\tdelete schemaObject.items;\n\t\t\t\t\tschemaObject.items = schemaObject.additionalItems;\n\t\t\t\t} else if (\n\t\t\t\t\tIs.integer(schemaObject.minItems) &&\n\t\t\t\t\tIs.integer(schemaObject.maxItems) &&\n\t\t\t\t\tschemaObject.minItems === schemaObject.maxItems &&\n\t\t\t\t\tschemaObject.maxItems === schemaObject.items.length\n\t\t\t\t) {\n\t\t\t\t\t// There is a fixed number of items which matches the items array length\n\t\t\t\t\t// so move construct an allOf to enforce the fixed length\n\t\t\t\t\tschemaObject.items = { allOf: schemaObject.items };\n\t\t\t\t\tdelete schemaObject.minItems;\n\t\t\t\t\tdelete schemaObject.maxItems;\n\t\t\t\t} else {\n\t\t\t\t\t// no additional items so wrap in an anyOf\n\t\t\t\t\tschemaObject.items = { anyOf: schemaObject.items };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// We can't use additionalItems in the new schema version\n\t\t\t// so just remove it after processing\n\t\t\tdelete schemaObject.additionalItems;\n\n\t\t\tJsonSchemaHelper.processSchemaDictionary(schemaObject.properties);\n\t\t\tJsonSchemaHelper.processArrays(schemaObject.additionalProperties);\n\t\t\tJsonSchemaHelper.processSchemaArray(schemaObject.allOf);\n\t\t\tJsonSchemaHelper.processSchemaArray(schemaObject.anyOf);\n\t\t\tJsonSchemaHelper.processSchemaArray(schemaObject.oneOf);\n\t\t}\n\t}\n\n\t/**\n\t * Process arrays in the schema object.\n\t * @param schemaDictionary The schema object to process.\n\t */\n\tpublic static processSchemaDictionary(schemaDictionary?: { [key: string]: IJsonSchema }): void {\n\t\tif (Is.object(schemaDictionary)) {\n\t\t\tfor (const item of Object.values(schemaDictionary)) {\n\t\t\t\tif (Is.object<IJsonSchema>(item)) {\n\t\t\t\t\tJsonSchemaHelper.processArrays(item);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Process arrays in the schema object.\n\t * @param schemaArray The schema object to process.\n\t */\n\tpublic static processSchemaArray(schemaArray?: IJsonSchema[]): void {\n\t\tif (Is.arrayValue(schemaArray)) {\n\t\t\tfor (const item of schemaArray) {\n\t\t\t\tif (Is.object<IJsonSchema>(item)) {\n\t\t\t\t\tJsonSchemaHelper.processArrays(item);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Cleanup TypeScript markers from the type name.\n\t * @param typeName The definition string to clean up.\n\t * @returns The cleaned up definition string.\n\t */\n\tpublic static normaliseTypeName(typeName: string): string {\n\t\t// Remove the partial markers\n\t\tlet sTypeName = typeName.replace(/^Partial<I(.*?)>/g, \"$1\");\n\t\tsTypeName = sTypeName.replace(/Partial%3CI(.*?)%3E/g, \"$1\");\n\n\t\t// Remove the omit markers\n\t\tsTypeName = sTypeName.replace(/^Omit<I(.*?),.*>/g, \"$1\");\n\t\tsTypeName = sTypeName.replace(/Omit%3CI(.*?)%2C.*%3E/g, \"$1\");\n\n\t\t// Remove the pick markers\n\t\tsTypeName = sTypeName.replace(/^Pick<I(.*?),.*>/g, \"$1\");\n\t\tsTypeName = sTypeName.replace(/Pick%3CI(.*?)%2C.*%3E/g, \"$1\");\n\n\t\t// Cleanup the generic markers\n\t\tsTypeName = sTypeName.replace(/^(.*?)<I(.*?)>/g, \"$1<$2>\");\n\t\tsTypeName = sTypeName.replace(/(.*?)%3CI(.*?)%3E/g, \"$1<$2>\");\n\n\t\t// Cleanup the unknown markers\n\t\tsTypeName = sTypeName.replace(/<unknown>/g, \"\");\n\t\tsTypeName = sTypeName.replace(/%3Cunknown%3E/g, \"\");\n\n\t\t// Replace the other url markers\n\t\tsTypeName = sTypeName.replace(/%7C/g, \"|\").replace(/%3C/g, \"<\").replace(/%3E/g, \">\");\n\n\t\treturn sTypeName;\n\t}\n\n\t/**\n\t * Extract type from properties definition.\n\t * @param allTypes All the known types.\n\t * @param schema The schema to extract from.\n\t * @param output The output types.\n\t */\n\tpublic static extractTypesFromSchema(\n\t\tallTypes: { [id: string]: IJsonSchema },\n\t\tschema: IJsonSchema,\n\t\toutput: { [id: string]: IJsonSchema }\n\t): void {\n\t\tconst additionalTypes = [];\n\n\t\tif (Is.stringValue(schema.$ref)) {\n\t\t\tadditionalTypes.push(\n\t\t\t\tJsonSchemaHelper.normaliseTypeName(schema.$ref.replace(\"#/definitions/\", \"\"))\n\t\t\t);\n\t\t} else if (Is.object<IJsonSchema>(schema.items)) {\n\t\t\tif (Is.arrayValue<IJsonSchema>(schema.items)) {\n\t\t\t\tfor (const itemSchema of schema.items) {\n\t\t\t\t\tJsonSchemaHelper.extractTypesFromSchema(allTypes, itemSchema, output);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tJsonSchemaHelper.extractTypesFromSchema(allTypes, schema.items, output);\n\t\t\t}\n\t\t} else if (Is.object(schema.properties) || Is.object(schema.additionalProperties)) {\n\t\t\tif (Is.object(schema.properties)) {\n\t\t\t\tfor (const prop in schema.properties) {\n\t\t\t\t\tconst p = schema.properties[prop];\n\t\t\t\t\tif (Is.object<IJsonSchema>(p)) {\n\t\t\t\t\t\tJsonSchemaHelper.extractTypesFromSchema(allTypes, p, output);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Is.object(schema.additionalProperties)) {\n\t\t\t\tJsonSchemaHelper.extractTypesFromSchema(allTypes, schema.additionalProperties, output);\n\t\t\t}\n\t\t} else if (Is.arrayValue(schema.anyOf)) {\n\t\t\tfor (const prop of schema.anyOf) {\n\t\t\t\tif (Is.object<IJsonSchema>(prop)) {\n\t\t\t\t\tJsonSchemaHelper.extractTypesFromSchema(allTypes, prop, output);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (Is.arrayValue(schema.oneOf)) {\n\t\t\tfor (const prop of schema.oneOf) {\n\t\t\t\tif (Is.object<IJsonSchema>(prop)) {\n\t\t\t\t\tJsonSchemaHelper.extractTypesFromSchema(allTypes, prop, output);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (additionalTypes.length > 0) {\n\t\t\tJsonSchemaHelper.extractTypes(allTypes, additionalTypes, output);\n\t\t}\n\t}\n\n\t/**\n\t * Extract the required types from all the known schemas.\n\t * @param allSchemas All the known schemas.\n\t * @param requiredTypes The required types.\n\t * @param referencedSchemas The references schemas.\n\t */\n\tpublic static extractTypes(\n\t\tallSchemas: { [id: string]: IJsonSchema },\n\t\trequiredTypes: string[],\n\t\treferencedSchemas: { [id: string]: IJsonSchema }\n\t): void {\n\t\tfor (const typeKey of Object.keys(allSchemas)) {\n\t\t\tif (!referencedSchemas[typeKey]) {\n\t\t\t\tfor (const requiredType of requiredTypes) {\n\t\t\t\t\tconst regex = JsonSchemaHelper.stringToRegEx(requiredType);\n\n\t\t\t\t\tif (regex.test(typeKey)) {\n\t\t\t\t\t\treferencedSchemas[typeKey] = allSchemas[typeKey];\n\t\t\t\t\t\tJsonSchemaHelper.extractTypesFromSchema(\n\t\t\t\t\t\t\tallSchemas,\n\t\t\t\t\t\t\tallSchemas[typeKey],\n\t\t\t\t\t\t\treferencedSchemas\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Expand the types inline.\n\t * @param schemas The schemas to include the expanded types.\n\t * @param expandedTypes The types to expand.\n\t */\n\tpublic static expandTypes(schemas: { [id: string]: IJsonSchema }, expandedTypes: string[]): void {\n\t\tfor (const typeKey of Object.keys(schemas)) {\n\t\t\tconst schema = schemas[typeKey];\n\n\t\t\tJsonSchemaHelper.expandSchemaTypes(schemas, schema, expandedTypes);\n\t\t}\n\t}\n\n\t/**\n\t * Expand the types inline.\n\t * @param allSchemas All the known schemas.\n\t * @param schema The schemas to include the expanded types.\n\t * @param expandedTypes The types to expand.\n\t */\n\tpublic static expandSchemaTypes(\n\t\tallSchemas: { [id: string]: IJsonSchema },\n\t\tschema: IJsonSchema,\n\t\texpandedTypes: string[]\n\t): void {\n\t\tif (Is.stringValue(schema.$ref)) {\n\t\t\tfor (const expandedType of expandedTypes) {\n\t\t\t\tconst typeName = JsonSchemaHelper.normaliseTypeName(\n\t\t\t\t\tschema.$ref.replace(\"#/definitions/\", \"\")\n\t\t\t\t);\n\t\t\t\tconst regex = JsonSchemaHelper.stringToRegEx(expandedType);\n\t\t\t\tif (regex.test(typeName) && allSchemas[typeName]) {\n\t\t\t\t\tdelete schema.$ref;\n\t\t\t\t\tObject.assign(schema, allSchemas[typeName]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (Is.object<IJsonSchema>(schema.items)) {\n\t\t\tif (Is.arrayValue<IJsonSchema>(schema.items)) {\n\t\t\t\tfor (const itemSchema of schema.items) {\n\t\t\t\t\tJsonSchemaHelper.expandSchemaTypes(allSchemas, itemSchema, expandedTypes);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tJsonSchemaHelper.expandSchemaTypes(allSchemas, schema.items, expandedTypes);\n\t\t\t}\n\t\t} else if (Is.object(schema.properties) || Is.object(schema.additionalProperties)) {\n\t\t\tif (Is.object(schema.properties)) {\n\t\t\t\tfor (const prop in schema.properties) {\n\t\t\t\t\tconst p = schema.properties[prop];\n\t\t\t\t\tif (Is.object<IJsonSchema>(p)) {\n\t\t\t\t\t\tJsonSchemaHelper.expandSchemaTypes(allSchemas, p, expandedTypes);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Is.object(schema.additionalProperties)) {\n\t\t\t\tJsonSchemaHelper.expandSchemaTypes(allSchemas, schema.additionalProperties, expandedTypes);\n\t\t\t}\n\t\t} else if (Is.arrayValue(schema.anyOf)) {\n\t\t\tfor (const prop of schema.anyOf) {\n\t\t\t\tif (Is.object<IJsonSchema>(prop)) {\n\t\t\t\t\tJsonSchemaHelper.expandSchemaTypes(allSchemas, prop, expandedTypes);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (Is.arrayValue(schema.oneOf)) {\n\t\t\tfor (const prop of schema.oneOf) {\n\t\t\t\tif (Is.object<IJsonSchema>(prop)) {\n\t\t\t\t\tJsonSchemaHelper.expandSchemaTypes(allSchemas, prop, expandedTypes);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Convert a string pattern to a regular expression.\n\t * @param matchPattern The pattern to convert.\n\t * @returns The regular expression.\n\t */\n\tpublic static stringToRegEx(matchPattern: string): RegExp {\n\t\treturn matchPattern.startsWith(\"/\") && matchPattern.endsWith(\"/\")\n\t\t\t? new RegExp(matchPattern.slice(1, -1))\n\t\t\t: new RegExp(`^${matchPattern}$`);\n\t}\n}\n"]}
|
package/docs/changelog.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.0.3-next.3](https://github.com/twinfoundation/tools/compare/tools-core-v0.0.3-next.2...tools-core-v0.0.3-next.3) (2025-11-11)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Miscellaneous Chores
|
|
7
|
+
|
|
8
|
+
* **tools-core:** Synchronize repo versions
|
|
9
|
+
|
|
10
|
+
## [0.0.3-next.2](https://github.com/twinfoundation/tools/compare/tools-core-v0.0.3-next.1...tools-core-v0.0.3-next.2) (2025-11-11)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* additionalItems object check ([ca81668](https://github.com/twinfoundation/tools/commit/ca81668e1ee0d2b1a479215265e651932d7b76de))
|
|
16
|
+
|
|
3
17
|
## [0.0.3-next.1](https://github.com/twinfoundation/tools/compare/tools-core-v0.0.3-next.0...tools-core-v0.0.3-next.1) (2025-11-10)
|
|
4
18
|
|
|
5
19
|
|