@twin.org/tools-core 0.0.4-next.2 → 0.9.0-next.1

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.
Files changed (33) hide show
  1. package/dist/es/utils/disallowedTypeGuard.js +1 -0
  2. package/dist/es/utils/disallowedTypeGuard.js.map +1 -1
  3. package/dist/es/utils/fileUtils.js +4 -4
  4. package/dist/es/utils/fileUtils.js.map +1 -1
  5. package/dist/es/utils/importTypeQuerySchemaResolver.js +8 -0
  6. package/dist/es/utils/importTypeQuerySchemaResolver.js.map +1 -1
  7. package/dist/es/utils/intersectionSchemaMerger.js +1 -0
  8. package/dist/es/utils/intersectionSchemaMerger.js.map +1 -1
  9. package/dist/es/utils/jsonSchemaBuilder.js +3 -0
  10. package/dist/es/utils/jsonSchemaBuilder.js.map +1 -1
  11. package/dist/es/utils/mappedTypeSchemaResolver.js +1 -0
  12. package/dist/es/utils/mappedTypeSchemaResolver.js.map +1 -1
  13. package/dist/es/utils/objectTransformer.js +27 -0
  14. package/dist/es/utils/objectTransformer.js.map +1 -1
  15. package/dist/es/utils/regEx.js +1 -1
  16. package/dist/es/utils/regEx.js.map +1 -1
  17. package/dist/es/utils/typeScriptToSchema.js +9 -0
  18. package/dist/es/utils/typeScriptToSchema.js.map +1 -1
  19. package/dist/es/utils/utilityTypeSchemaMapper.js +33 -0
  20. package/dist/es/utils/utilityTypeSchemaMapper.js.map +1 -1
  21. package/dist/types/utils/disallowedTypeGuard.d.ts +0 -4
  22. package/dist/types/utils/fileUtils.d.ts +4 -4
  23. package/dist/types/utils/importTypeQuerySchemaResolver.d.ts +0 -56
  24. package/dist/types/utils/jsonSchemaBuilder.d.ts +0 -4
  25. package/dist/types/utils/mappedTypeSchemaResolver.d.ts +0 -7
  26. package/dist/types/utils/objectTransformer.d.ts +8 -0
  27. package/dist/types/utils/typeScriptToSchema.d.ts +0 -61
  28. package/dist/types/utils/utilityTypeSchemaMapper.d.ts +9 -48
  29. package/docs/changelog.md +62 -0
  30. package/docs/reference/classes/FileUtils.md +4 -4
  31. package/docs/reference/classes/ObjectTransformer.md +29 -0
  32. package/docs/reference/classes/UtilityTypeSchemaMapper.md +30 -0
  33. package/package.json +4 -4
@@ -7,6 +7,7 @@ import * as ts from "typescript";
7
7
  export class DisallowedTypeGuard {
8
8
  /**
9
9
  * Type names that are not supported for JSON schema generation.
10
+ * @internal
10
11
  */
11
12
  static _DISALLOWED_TYPE_NAMES = [
12
13
  "Date",
@@ -1 +1 @@
1
- {"version":3,"file":"disallowedTypeGuard.js","sourceRoot":"","sources":["../../../src/utils/disallowedTypeGuard.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport * as ts from \"typescript\";\n\n/**\n * Validates whether a type node is allowed for schema generation.\n */\nexport class DisallowedTypeGuard {\n\t/**\n\t * Type names that are not supported for JSON schema generation.\n\t */\n\tprivate static readonly _DISALLOWED_TYPE_NAMES: string[] = [\n\t\t\"Date\",\n\t\t\"RegExp\",\n\t\t\"Function\",\n\t\t\"Error\",\n\t\t\"TypeError\",\n\t\t\"RangeError\",\n\t\t\"EvalError\",\n\t\t\"ReferenceError\",\n\t\t\"SyntaxError\",\n\t\t\"URIError\",\n\t\t\"AggregateError\",\n\t\t\"bigint\",\n\t\t\"BigInt\",\n\t\t\"BigInt64Array\",\n\t\t\"BigUint64Array\",\n\t\t\"DataView\",\n\t\t\"Promise\",\n\t\t\"WeakRef\",\n\t\t\"URL\",\n\t\t\"URLSearchParams\",\n\t\t\"Blob\",\n\t\t\"File\",\n\t\t\"FormData\",\n\t\t\"ReadableStream\",\n\t\t\"WeakMap\",\n\t\t\"WeakSet\",\n\t\t\"Symbol\"\n\t];\n\n\t/**\n\t * Resolve a disallowed type name from a type node.\n\t * @param typeNode The type node to inspect.\n\t * @returns The disallowed type name, if found.\n\t */\n\tpublic static getDisallowedTypeName(typeNode: ts.TypeNode): string | undefined {\n\t\t// (string | number) (parenthesised type, unwrap and recurse)\n\t\tif (ts.isParenthesizedTypeNode(typeNode)) {\n\t\t\treturn DisallowedTypeGuard.getDisallowedTypeName(typeNode.type);\n\t\t}\n\n\t\t// readonly T[] or keyof T or unique symbol (type operator node)\n\t\tif (ts.isTypeOperatorNode(typeNode)) {\n\t\t\tif (\n\t\t\t\ttypeNode.operator === ts.SyntaxKind.UniqueKeyword &&\n\t\t\t\ttypeNode.type.kind === ts.SyntaxKind.SymbolKeyword\n\t\t\t) {\n\t\t\t\treturn \"symbol\";\n\t\t\t}\n\n\t\t\treturn DisallowedTypeGuard.getDisallowedTypeName(typeNode.type);\n\t\t}\n\n\t\t// bigint (bigint keyword type, always disallowed)\n\t\tif (typeNode.kind === ts.SyntaxKind.BigIntKeyword) {\n\t\t\treturn \"bigint\";\n\t\t}\n\n\t\t// symbol (symbol keyword type, always disallowed)\n\t\tif (typeNode.kind === ts.SyntaxKind.SymbolKeyword) {\n\t\t\treturn \"symbol\";\n\t\t}\n\n\t\t// 9007199254740991n (bigint literal wrapped in a literal type node)\n\t\tif (ts.isLiteralTypeNode(typeNode) && ts.isBigIntLiteral(typeNode.literal)) {\n\t\t\treturn \"bigint\";\n\t\t}\n\n\t\t// Date or RegExp or Promise<T> (named type reference)\n\t\tif (ts.isTypeReferenceNode(typeNode)) {\n\t\t\t// Namespace.TypeName (qualified name) or TypeName (plain identifier)\n\t\t\tconst rawTypeName = ts.isIdentifier(typeNode.typeName)\n\t\t\t\t? typeNode.typeName.text\n\t\t\t\t: typeNode.typeName.right.text;\n\t\t\tconst normalizedTypeName = rawTypeName.toLowerCase();\n\t\t\tconst matchedTypeName = DisallowedTypeGuard._DISALLOWED_TYPE_NAMES.find(\n\t\t\t\ttypeName => typeName.toLowerCase() === normalizedTypeName\n\t\t\t);\n\t\t\tif (matchedTypeName) {\n\t\t\t\treturn matchedTypeName;\n\t\t\t}\n\t\t}\n\n\t\t// string[] (array type, check the element type)\n\t\tif (ts.isArrayTypeNode(typeNode)) {\n\t\t\treturn DisallowedTypeGuard.getDisallowedTypeName(typeNode.elementType);\n\t\t}\n\n\t\t// [string, number] (tuple type, check each element)\n\t\tif (ts.isTupleTypeNode(typeNode)) {\n\t\t\treturn DisallowedTypeGuard.getDisallowedTypeNameFromTypeNodes(typeNode.elements);\n\t\t}\n\n\t\t// string | number (union) or TypeA & TypeB (intersection)\n\t\tif (ts.isUnionTypeNode(typeNode) || ts.isIntersectionTypeNode(typeNode)) {\n\t\t\treturn DisallowedTypeGuard.getDisallowedTypeNameFromTypeNodes(typeNode.types);\n\t\t}\n\n\t\t// T[\"key\"] (indexed access type, check both object and index sides)\n\t\tif (ts.isIndexedAccessTypeNode(typeNode)) {\n\t\t\treturn (\n\t\t\t\tDisallowedTypeGuard.getDisallowedTypeName(typeNode.objectType) ??\n\t\t\t\tDisallowedTypeGuard.getDisallowedTypeName(typeNode.indexType)\n\t\t\t);\n\t\t}\n\n\t\t// T extends U ? X : Y (conditional type, check all four branches)\n\t\tif (ts.isConditionalTypeNode(typeNode)) {\n\t\t\treturn (\n\t\t\t\tDisallowedTypeGuard.getDisallowedTypeName(typeNode.checkType) ??\n\t\t\t\tDisallowedTypeGuard.getDisallowedTypeName(typeNode.extendsType) ??\n\t\t\t\tDisallowedTypeGuard.getDisallowedTypeName(typeNode.trueType) ??\n\t\t\t\tDisallowedTypeGuard.getDisallowedTypeName(typeNode.falseType)\n\t\t\t);\n\t\t}\n\n\t\t// { [K in keyof T]: T[K] } (mapped type, check constraint, name type, and value type)\n\t\tif (ts.isMappedTypeNode(typeNode)) {\n\t\t\treturn (\n\t\t\t\t(typeNode.typeParameter.constraint\n\t\t\t\t\t? DisallowedTypeGuard.getDisallowedTypeName(typeNode.typeParameter.constraint)\n\t\t\t\t\t: undefined) ??\n\t\t\t\t(typeNode.nameType\n\t\t\t\t\t? DisallowedTypeGuard.getDisallowedTypeName(typeNode.nameType)\n\t\t\t\t\t: undefined) ??\n\t\t\t\t(typeNode.type ? DisallowedTypeGuard.getDisallowedTypeName(typeNode.type) : undefined)\n\t\t\t);\n\t\t}\n\n\t\t// { prop: string } (inline object type literal, inspect each member)\n\t\tif (ts.isTypeLiteralNode(typeNode)) {\n\t\t\tfor (const member of typeNode.members) {\n\t\t\t\tif (\n\t\t\t\t\t// prop: string or [key: string]: Value (property or index signature)\n\t\t\t\t\t(ts.isPropertySignature(member) || ts.isIndexSignatureDeclaration(member)) &&\n\t\t\t\t\tmember.type\n\t\t\t\t) {\n\t\t\t\t\tconst memberDisallowedTypeName = DisallowedTypeGuard.getDisallowedTypeName(member.type);\n\t\t\t\t\tif (memberDisallowedTypeName) {\n\t\t\t\t\t\treturn memberDisallowedTypeName;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Resolve the first disallowed type name from a collection of type nodes.\n\t * @param typeNodes The nodes to inspect.\n\t * @returns The disallowed type name, if found.\n\t * @internal\n\t */\n\tprivate static getDisallowedTypeNameFromTypeNodes(\n\t\ttypeNodes: readonly ts.TypeNode[] | ts.NodeArray<ts.TypeNode> | undefined\n\t): string | undefined {\n\t\tif (!typeNodes) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tfor (const typeNode of typeNodes) {\n\t\t\tconst disallowedTypeName = DisallowedTypeGuard.getDisallowedTypeName(typeNode);\n\t\t\tif (disallowedTypeName) {\n\t\t\t\treturn disallowedTypeName;\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n}\n"]}
1
+ {"version":3,"file":"disallowedTypeGuard.js","sourceRoot":"","sources":["../../../src/utils/disallowedTypeGuard.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport * as ts from \"typescript\";\n\n/**\n * Validates whether a type node is allowed for schema generation.\n */\nexport class DisallowedTypeGuard {\n\t/**\n\t * Type names that are not supported for JSON schema generation.\n\t * @internal\n\t */\n\tprivate static readonly _DISALLOWED_TYPE_NAMES: string[] = [\n\t\t\"Date\",\n\t\t\"RegExp\",\n\t\t\"Function\",\n\t\t\"Error\",\n\t\t\"TypeError\",\n\t\t\"RangeError\",\n\t\t\"EvalError\",\n\t\t\"ReferenceError\",\n\t\t\"SyntaxError\",\n\t\t\"URIError\",\n\t\t\"AggregateError\",\n\t\t\"bigint\",\n\t\t\"BigInt\",\n\t\t\"BigInt64Array\",\n\t\t\"BigUint64Array\",\n\t\t\"DataView\",\n\t\t\"Promise\",\n\t\t\"WeakRef\",\n\t\t\"URL\",\n\t\t\"URLSearchParams\",\n\t\t\"Blob\",\n\t\t\"File\",\n\t\t\"FormData\",\n\t\t\"ReadableStream\",\n\t\t\"WeakMap\",\n\t\t\"WeakSet\",\n\t\t\"Symbol\"\n\t];\n\n\t/**\n\t * Resolve a disallowed type name from a type node.\n\t * @param typeNode The type node to inspect.\n\t * @returns The disallowed type name, if found.\n\t */\n\tpublic static getDisallowedTypeName(typeNode: ts.TypeNode): string | undefined {\n\t\t// (string | number) (parenthesised type, unwrap and recurse)\n\t\tif (ts.isParenthesizedTypeNode(typeNode)) {\n\t\t\treturn DisallowedTypeGuard.getDisallowedTypeName(typeNode.type);\n\t\t}\n\n\t\t// readonly T[] or keyof T or unique symbol (type operator node)\n\t\tif (ts.isTypeOperatorNode(typeNode)) {\n\t\t\tif (\n\t\t\t\ttypeNode.operator === ts.SyntaxKind.UniqueKeyword &&\n\t\t\t\ttypeNode.type.kind === ts.SyntaxKind.SymbolKeyword\n\t\t\t) {\n\t\t\t\treturn \"symbol\";\n\t\t\t}\n\n\t\t\treturn DisallowedTypeGuard.getDisallowedTypeName(typeNode.type);\n\t\t}\n\n\t\t// bigint (bigint keyword type, always disallowed)\n\t\tif (typeNode.kind === ts.SyntaxKind.BigIntKeyword) {\n\t\t\treturn \"bigint\";\n\t\t}\n\n\t\t// symbol (symbol keyword type, always disallowed)\n\t\tif (typeNode.kind === ts.SyntaxKind.SymbolKeyword) {\n\t\t\treturn \"symbol\";\n\t\t}\n\n\t\t// 9007199254740991n (bigint literal wrapped in a literal type node)\n\t\tif (ts.isLiteralTypeNode(typeNode) && ts.isBigIntLiteral(typeNode.literal)) {\n\t\t\treturn \"bigint\";\n\t\t}\n\n\t\t// Date or RegExp or Promise<T> (named type reference)\n\t\tif (ts.isTypeReferenceNode(typeNode)) {\n\t\t\t// Namespace.TypeName (qualified name) or TypeName (plain identifier)\n\t\t\tconst rawTypeName = ts.isIdentifier(typeNode.typeName)\n\t\t\t\t? typeNode.typeName.text\n\t\t\t\t: typeNode.typeName.right.text;\n\t\t\tconst normalizedTypeName = rawTypeName.toLowerCase();\n\t\t\tconst matchedTypeName = DisallowedTypeGuard._DISALLOWED_TYPE_NAMES.find(\n\t\t\t\ttypeName => typeName.toLowerCase() === normalizedTypeName\n\t\t\t);\n\t\t\tif (matchedTypeName) {\n\t\t\t\treturn matchedTypeName;\n\t\t\t}\n\t\t}\n\n\t\t// string[] (array type, check the element type)\n\t\tif (ts.isArrayTypeNode(typeNode)) {\n\t\t\treturn DisallowedTypeGuard.getDisallowedTypeName(typeNode.elementType);\n\t\t}\n\n\t\t// [string, number] (tuple type, check each element)\n\t\tif (ts.isTupleTypeNode(typeNode)) {\n\t\t\treturn DisallowedTypeGuard.getDisallowedTypeNameFromTypeNodes(typeNode.elements);\n\t\t}\n\n\t\t// string | number (union) or TypeA & TypeB (intersection)\n\t\tif (ts.isUnionTypeNode(typeNode) || ts.isIntersectionTypeNode(typeNode)) {\n\t\t\treturn DisallowedTypeGuard.getDisallowedTypeNameFromTypeNodes(typeNode.types);\n\t\t}\n\n\t\t// T[\"key\"] (indexed access type, check both object and index sides)\n\t\tif (ts.isIndexedAccessTypeNode(typeNode)) {\n\t\t\treturn (\n\t\t\t\tDisallowedTypeGuard.getDisallowedTypeName(typeNode.objectType) ??\n\t\t\t\tDisallowedTypeGuard.getDisallowedTypeName(typeNode.indexType)\n\t\t\t);\n\t\t}\n\n\t\t// T extends U ? X : Y (conditional type, check all four branches)\n\t\tif (ts.isConditionalTypeNode(typeNode)) {\n\t\t\treturn (\n\t\t\t\tDisallowedTypeGuard.getDisallowedTypeName(typeNode.checkType) ??\n\t\t\t\tDisallowedTypeGuard.getDisallowedTypeName(typeNode.extendsType) ??\n\t\t\t\tDisallowedTypeGuard.getDisallowedTypeName(typeNode.trueType) ??\n\t\t\t\tDisallowedTypeGuard.getDisallowedTypeName(typeNode.falseType)\n\t\t\t);\n\t\t}\n\n\t\t// { [K in keyof T]: T[K] } (mapped type, check constraint, name type, and value type)\n\t\tif (ts.isMappedTypeNode(typeNode)) {\n\t\t\treturn (\n\t\t\t\t(typeNode.typeParameter.constraint\n\t\t\t\t\t? DisallowedTypeGuard.getDisallowedTypeName(typeNode.typeParameter.constraint)\n\t\t\t\t\t: undefined) ??\n\t\t\t\t(typeNode.nameType\n\t\t\t\t\t? DisallowedTypeGuard.getDisallowedTypeName(typeNode.nameType)\n\t\t\t\t\t: undefined) ??\n\t\t\t\t(typeNode.type ? DisallowedTypeGuard.getDisallowedTypeName(typeNode.type) : undefined)\n\t\t\t);\n\t\t}\n\n\t\t// { prop: string } (inline object type literal, inspect each member)\n\t\tif (ts.isTypeLiteralNode(typeNode)) {\n\t\t\tfor (const member of typeNode.members) {\n\t\t\t\tif (\n\t\t\t\t\t// prop: string or [key: string]: Value (property or index signature)\n\t\t\t\t\t(ts.isPropertySignature(member) || ts.isIndexSignatureDeclaration(member)) &&\n\t\t\t\t\tmember.type\n\t\t\t\t) {\n\t\t\t\t\tconst memberDisallowedTypeName = DisallowedTypeGuard.getDisallowedTypeName(member.type);\n\t\t\t\t\tif (memberDisallowedTypeName) {\n\t\t\t\t\t\treturn memberDisallowedTypeName;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Resolve the first disallowed type name from a collection of type nodes.\n\t * @param typeNodes The nodes to inspect.\n\t * @returns The disallowed type name, if found.\n\t * @internal\n\t */\n\tprivate static getDisallowedTypeNameFromTypeNodes(\n\t\ttypeNodes: readonly ts.TypeNode[] | ts.NodeArray<ts.TypeNode> | undefined\n\t): string | undefined {\n\t\tif (!typeNodes) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tfor (const typeNode of typeNodes) {\n\t\t\tconst disallowedTypeName = DisallowedTypeGuard.getDisallowedTypeName(typeNode);\n\t\t\tif (disallowedTypeName) {\n\t\t\t\treturn disallowedTypeName;\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n}\n"]}
@@ -8,7 +8,7 @@ import { globSync } from "glob";
8
8
  */
9
9
  export class FileUtils {
10
10
  /**
11
- * Does the file exist.
11
+ * Check whether a file exists at the given path.
12
12
  * @param filePath The file path.
13
13
  * @returns True if the file exists.
14
14
  */
@@ -16,7 +16,7 @@ export class FileUtils {
16
16
  return existsSync(filePath);
17
17
  }
18
18
  /**
19
- * Read the file.
19
+ * Read the entire contents of a file as UTF-8 text.
20
20
  * @param filePath The file path.
21
21
  * @returns The file contents.
22
22
  */
@@ -24,9 +24,9 @@ export class FileUtils {
24
24
  return readFileSync(filePath, "utf-8");
25
25
  }
26
26
  /**
27
- * Resolve a path.
27
+ * Resolve a file path to an absolute path.
28
28
  * @param filePath The file path.
29
- * @returns The resolved path.
29
+ * @returns The resolved absolute path.
30
30
  */
31
31
  static resolvePath(filePath) {
32
32
  return path.resolve(filePath);
@@ -1 +1 @@
1
- {"version":3,"file":"fileUtils.js","sourceRoot":"","sources":["../../../src/utils/fileUtils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { existsSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { globSync } from \"glob\";\n\n/**\n * Utility helpers for TypeScript file and directory paths.\n */\nexport class FileUtils {\n\t/**\n\t * Does the file exist.\n\t * @param filePath The file path.\n\t * @returns True if the file exists.\n\t */\n\tpublic static fileExists(filePath: string): boolean {\n\t\treturn existsSync(filePath);\n\t}\n\n\t/**\n\t * Read the file.\n\t * @param filePath The file path.\n\t * @returns The file contents.\n\t */\n\tpublic static readFile(filePath: string): string {\n\t\treturn readFileSync(filePath, \"utf-8\");\n\t}\n\n\t/**\n\t * Resolve a path.\n\t * @param filePath The file path.\n\t * @returns The resolved path.\n\t */\n\tpublic static resolvePath(filePath: string): string {\n\t\treturn path.resolve(filePath);\n\t}\n\n\t/**\n\t * Get the current working directory.\n\t * @returns The current working directory.\n\t */\n\tpublic static getCurrentWorkingDirectory(): string {\n\t\treturn process.cwd();\n\t}\n\n\t/**\n\t * Normalize path separators for consistent comparisons.\n\t * @param filePath The file path.\n\t * @returns The normalized file path.\n\t */\n\tpublic static normalizeFilePath(filePath: string): string {\n\t\treturn filePath.replaceAll(\"\\\\\", \"/\");\n\t}\n\n\t/**\n\t * Get the directory portion of a file path.\n\t * @param filePath The file path.\n\t * @returns The directory path.\n\t */\n\tpublic static getDirectoryPath(filePath: string): string {\n\t\tconst normalizedPath = FileUtils.normalizeFilePath(filePath);\n\t\tconst lastSeparatorIndex = normalizedPath.lastIndexOf(\"/\");\n\t\treturn lastSeparatorIndex > -1 ? normalizedPath.slice(0, lastSeparatorIndex) : normalizedPath;\n\t}\n\n\t/**\n\t * Resolve a relative path against a base directory.\n\t * @param baseDirectory The base directory.\n\t * @param relativePath The relative path.\n\t * @returns The resolved path.\n\t */\n\tpublic static resolveRelativePath(baseDirectory: string, relativePath: string): string {\n\t\tconst normalizedRelative = FileUtils.normalizeFilePath(relativePath);\n\n\t\t// Return absolute paths unchanged (Windows drive letter or POSIX root)\n\t\tif (path.isAbsolute(normalizedRelative)) {\n\t\t\treturn normalizedRelative;\n\t\t}\n\n\t\tconst normalizedBase = FileUtils.normalizeFilePath(baseDirectory);\n\n\t\tif (path.isAbsolute(normalizedBase)) {\n\t\t\treturn FileUtils.normalizeFilePath(path.resolve(baseDirectory, relativePath));\n\t\t}\n\n\t\t// Base was relative — resolve to absolute then express relative to CWD to preserve relative form\n\t\treturn FileUtils.normalizeFilePath(\n\t\t\tpath.relative(process.cwd(), path.resolve(baseDirectory, relativePath))\n\t\t);\n\t}\n\n\t/**\n\t * Resolve a local import specifier to a TypeScript source file path.\n\t * @param sourceFilePath The importing source file path.\n\t * @param importPath The import specifier.\n\t * @returns The resolved source file path.\n\t */\n\tpublic static resolveImportSourceFilePath(\n\t\tsourceFilePath: string,\n\t\timportPath: string\n\t): string | undefined {\n\t\tconst sourceDirectory = FileUtils.getDirectoryPath(sourceFilePath);\n\t\tconst resolvedBase = FileUtils.resolveRelativePath(sourceDirectory, importPath);\n\t\tconst baseWithoutExtension = resolvedBase.replace(/\\.(c|m)?js$/u, \"\");\n\t\tconst candidates = [\n\t\t\tresolvedBase,\n\t\t\t`${resolvedBase}.ts`,\n\t\t\t`${resolvedBase}.d.ts`,\n\t\t\t`${resolvedBase}/index.ts`,\n\t\t\t`${resolvedBase}/index.d.ts`,\n\t\t\t`${baseWithoutExtension}.ts`,\n\t\t\t`${baseWithoutExtension}/index.ts`,\n\t\t\t`${baseWithoutExtension}.d.ts`,\n\t\t\t`${baseWithoutExtension}/index.d.ts`\n\t\t];\n\n\t\tfor (const candidate of candidates) {\n\t\t\tif (FileUtils.fileExists(candidate)) {\n\t\t\t\treturn candidate;\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Determine if the provided path includes glob pattern tokens.\n\t * @param sourceFileOrGlob The direct source file path or glob pattern.\n\t * @returns True if the value is a glob pattern.\n\t */\n\tpublic static isGlobPattern(sourceFileOrGlob: string): boolean {\n\t\treturn /[*?[\\]{}]/u.test(sourceFileOrGlob);\n\t}\n\n\t/**\n\t * Resolve source files from a direct path or a glob pattern.\n\t * @param sourceFileOrGlob The direct source file path or glob pattern.\n\t * @returns The resolved source file paths.\n\t */\n\tpublic static resolveSourceFiles(sourceFileOrGlob: string): string[] {\n\t\tif (!FileUtils.isGlobPattern(sourceFileOrGlob)) {\n\t\t\treturn FileUtils.fileExists(sourceFileOrGlob) ? [sourceFileOrGlob] : [];\n\t\t}\n\n\t\tconst sourceFiles = globSync(sourceFileOrGlob, {\n\t\t\twindowsPathsNoEscape: true,\n\t\t\twithFileTypes: false\n\t\t});\n\n\t\treturn sourceFiles\n\t\t\t.filter(\n\t\t\t\tsourceFile => /\\.(ts|tsx|mts|cts)$/u.test(sourceFile) && FileUtils.fileExists(sourceFile)\n\t\t\t)\n\t\t\t.sort((sourceFileA, sourceFileB) => sourceFileA.localeCompare(sourceFileB));\n\t}\n}\n"]}
1
+ {"version":3,"file":"fileUtils.js","sourceRoot":"","sources":["../../../src/utils/fileUtils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { existsSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { globSync } from \"glob\";\n\n/**\n * Utility helpers for TypeScript file and directory paths.\n */\nexport class FileUtils {\n\t/**\n\t * Check whether a file exists at the given path.\n\t * @param filePath The file path.\n\t * @returns True if the file exists.\n\t */\n\tpublic static fileExists(filePath: string): boolean {\n\t\treturn existsSync(filePath);\n\t}\n\n\t/**\n\t * Read the entire contents of a file as UTF-8 text.\n\t * @param filePath The file path.\n\t * @returns The file contents.\n\t */\n\tpublic static readFile(filePath: string): string {\n\t\treturn readFileSync(filePath, \"utf-8\");\n\t}\n\n\t/**\n\t * Resolve a file path to an absolute path.\n\t * @param filePath The file path.\n\t * @returns The resolved absolute path.\n\t */\n\tpublic static resolvePath(filePath: string): string {\n\t\treturn path.resolve(filePath);\n\t}\n\n\t/**\n\t * Get the current working directory.\n\t * @returns The current working directory.\n\t */\n\tpublic static getCurrentWorkingDirectory(): string {\n\t\treturn process.cwd();\n\t}\n\n\t/**\n\t * Normalize path separators for consistent comparisons.\n\t * @param filePath The file path.\n\t * @returns The normalized file path.\n\t */\n\tpublic static normalizeFilePath(filePath: string): string {\n\t\treturn filePath.replaceAll(\"\\\\\", \"/\");\n\t}\n\n\t/**\n\t * Get the directory portion of a file path.\n\t * @param filePath The file path.\n\t * @returns The directory path.\n\t */\n\tpublic static getDirectoryPath(filePath: string): string {\n\t\tconst normalizedPath = FileUtils.normalizeFilePath(filePath);\n\t\tconst lastSeparatorIndex = normalizedPath.lastIndexOf(\"/\");\n\t\treturn lastSeparatorIndex > -1 ? normalizedPath.slice(0, lastSeparatorIndex) : normalizedPath;\n\t}\n\n\t/**\n\t * Resolve a relative path against a base directory.\n\t * @param baseDirectory The base directory.\n\t * @param relativePath The relative path.\n\t * @returns The resolved path.\n\t */\n\tpublic static resolveRelativePath(baseDirectory: string, relativePath: string): string {\n\t\tconst normalizedRelative = FileUtils.normalizeFilePath(relativePath);\n\n\t\t// Return absolute paths unchanged (Windows drive letter or POSIX root)\n\t\tif (path.isAbsolute(normalizedRelative)) {\n\t\t\treturn normalizedRelative;\n\t\t}\n\n\t\tconst normalizedBase = FileUtils.normalizeFilePath(baseDirectory);\n\n\t\tif (path.isAbsolute(normalizedBase)) {\n\t\t\treturn FileUtils.normalizeFilePath(path.resolve(baseDirectory, relativePath));\n\t\t}\n\n\t\t// Base was relative — resolve to absolute then express relative to CWD to preserve relative form\n\t\treturn FileUtils.normalizeFilePath(\n\t\t\tpath.relative(process.cwd(), path.resolve(baseDirectory, relativePath))\n\t\t);\n\t}\n\n\t/**\n\t * Resolve a local import specifier to a TypeScript source file path.\n\t * @param sourceFilePath The importing source file path.\n\t * @param importPath The import specifier.\n\t * @returns The resolved source file path.\n\t */\n\tpublic static resolveImportSourceFilePath(\n\t\tsourceFilePath: string,\n\t\timportPath: string\n\t): string | undefined {\n\t\tconst sourceDirectory = FileUtils.getDirectoryPath(sourceFilePath);\n\t\tconst resolvedBase = FileUtils.resolveRelativePath(sourceDirectory, importPath);\n\t\tconst baseWithoutExtension = resolvedBase.replace(/\\.(c|m)?js$/u, \"\");\n\t\tconst candidates = [\n\t\t\tresolvedBase,\n\t\t\t`${resolvedBase}.ts`,\n\t\t\t`${resolvedBase}.d.ts`,\n\t\t\t`${resolvedBase}/index.ts`,\n\t\t\t`${resolvedBase}/index.d.ts`,\n\t\t\t`${baseWithoutExtension}.ts`,\n\t\t\t`${baseWithoutExtension}/index.ts`,\n\t\t\t`${baseWithoutExtension}.d.ts`,\n\t\t\t`${baseWithoutExtension}/index.d.ts`\n\t\t];\n\n\t\tfor (const candidate of candidates) {\n\t\t\tif (FileUtils.fileExists(candidate)) {\n\t\t\t\treturn candidate;\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Determine if the provided path includes glob pattern tokens.\n\t * @param sourceFileOrGlob The direct source file path or glob pattern.\n\t * @returns True if the value is a glob pattern.\n\t */\n\tpublic static isGlobPattern(sourceFileOrGlob: string): boolean {\n\t\treturn /[*?[\\]{}]/u.test(sourceFileOrGlob);\n\t}\n\n\t/**\n\t * Resolve source files from a direct path or a glob pattern.\n\t * @param sourceFileOrGlob The direct source file path or glob pattern.\n\t * @returns The resolved source file paths.\n\t */\n\tpublic static resolveSourceFiles(sourceFileOrGlob: string): string[] {\n\t\tif (!FileUtils.isGlobPattern(sourceFileOrGlob)) {\n\t\t\treturn FileUtils.fileExists(sourceFileOrGlob) ? [sourceFileOrGlob] : [];\n\t\t}\n\n\t\tconst sourceFiles = globSync(sourceFileOrGlob, {\n\t\t\twindowsPathsNoEscape: true,\n\t\t\twithFileTypes: false\n\t\t});\n\n\t\treturn sourceFiles\n\t\t\t.filter(\n\t\t\t\tsourceFile => /\\.(ts|tsx|mts|cts)$/u.test(sourceFile) && FileUtils.fileExists(sourceFile)\n\t\t\t)\n\t\t\t.sort((sourceFileA, sourceFileB) => sourceFileA.localeCompare(sourceFileB));\n\t}\n}\n"]}
@@ -131,6 +131,7 @@ export class ImportTypeQuerySchemaResolver {
131
131
  * @param objectName The imported object symbol name.
132
132
  * @param propertyName The property name to resolve from the object.
133
133
  * @returns The resolved literal property value.
134
+ * @internal
134
135
  */
135
136
  static resolveConstObjectProperty(context, objectName, propertyName) {
136
137
  if (!context.activeSourceFile) {
@@ -172,6 +173,7 @@ export class ImportTypeQuerySchemaResolver {
172
173
  * @param variableName The variable name to find.
173
174
  * @param visitedFiles The set of visited files to prevent recursion cycles.
174
175
  * @returns The matched variable declaration.
176
+ * @internal
175
177
  */
176
178
  static findVariableDeclarationInModuleGraph(sourceFilePath, variableName, visitedFiles) {
177
179
  const normalizedSourceFilePath = FileUtils.normalizeFilePath(sourceFilePath);
@@ -219,6 +221,7 @@ export class ImportTypeQuerySchemaResolver {
219
221
  * @param sourceFile The active source file.
220
222
  * @param localName The local identifier name.
221
223
  * @returns The imported symbol reference.
224
+ * @internal
222
225
  */
223
226
  static findImportedValueReference(sourceFile, localName) {
224
227
  for (const statement of sourceFile.statements) {
@@ -242,6 +245,7 @@ export class ImportTypeQuerySchemaResolver {
242
245
  * @param containingSourceFilePath The path of the file containing the import declaration.
243
246
  * @param moduleSpecifier The module specifier to resolve.
244
247
  * @returns The resolved source file path.
248
+ * @internal
245
249
  */
246
250
  static resolveImportDeclarationSourceFile(containingSourceFilePath, moduleSpecifier) {
247
251
  const resolvedContainingSourceFilePath = FileUtils.resolvePath(containingSourceFilePath);
@@ -264,6 +268,7 @@ export class ImportTypeQuerySchemaResolver {
264
268
  * @param objectDeclaration The variable declaration containing the object initializer.
265
269
  * @param propertyName The property name to resolve.
266
270
  * @returns The extracted literal property value.
271
+ * @internal
267
272
  */
268
273
  static extractConstObjectPropertyFromDeclarationInitializer(objectDeclaration, propertyName) {
269
274
  if (!objectDeclaration.initializer) {
@@ -299,6 +304,7 @@ export class ImportTypeQuerySchemaResolver {
299
304
  * @param declarationTypeNode The declaration type node to inspect.
300
305
  * @param propertyName The property name to resolve.
301
306
  * @returns The extracted literal property value.
307
+ * @internal
302
308
  */
303
309
  static extractConstObjectPropertyFromDeclarationType(declarationTypeNode, propertyName) {
304
310
  if (ts.isParenthesizedTypeNode(declarationTypeNode)) {
@@ -333,6 +339,7 @@ export class ImportTypeQuerySchemaResolver {
333
339
  * Extract a literal value from a type node when possible.
334
340
  * @param typeNode The type node to inspect.
335
341
  * @returns The extracted literal value.
342
+ * @internal
336
343
  */
337
344
  static extractLiteralValueFromTypeNode(typeNode) {
338
345
  if (ts.isLiteralTypeNode(typeNode)) {
@@ -349,6 +356,7 @@ export class ImportTypeQuerySchemaResolver {
349
356
  * Extract a referenced type name from an import type qualifier.
350
357
  * @param qualifier The import type qualifier.
351
358
  * @returns The extracted type name.
359
+ * @internal
352
360
  */
353
361
  static extractImportTypeName(qualifier) {
354
362
  if (!qualifier) {
@@ -1 +1 @@
1
- {"version":3,"file":"importTypeQuerySchemaResolver.js","sourceRoot":"","sources":["../../../src/utils/importTypeQuerySchemaResolver.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { Is, StringHelper } from \"@twin.org/core\";\nimport type { IJsonSchema } from \"@twin.org/tools-models\";\nimport * as ts from \"typescript\";\nimport { DiagnosticReporter } from \"./diagnosticReporter.js\";\nimport { FileUtils } from \"./fileUtils.js\";\nimport { JsonSchemaBuilder } from \"./jsonSchemaBuilder.js\";\nimport { Resolver } from \"./resolver.js\";\nimport type { ITypeScriptToSchemaContext } from \"../models/ITypeScriptToSchemaContext.js\";\n\n/**\n * Static helpers for import type and type query schema resolution.\n */\nexport class ImportTypeQuerySchemaResolver {\n\t/**\n\t * Map import type nodes (e.g. import(\"pkg\").Type) to schema references.\n\t * @param context The generation context.\n\t * @param typeNode The import type node.\n\t * @returns The mapped schema.\n\t */\n\tpublic static mapImportTypeNodeToSchema(\n\t\tcontext: ITypeScriptToSchemaContext,\n\t\ttypeNode: ts.ImportTypeNode\n\t): IJsonSchema | undefined {\n\t\tif (\n\t\t\ttypeNode.isTypeOf ||\n\t\t\t!ts.isLiteralTypeNode(typeNode.argument) ||\n\t\t\t!ts.isStringLiteral(typeNode.argument.literal)\n\t\t) {\n\t\t\tDiagnosticReporter.report(\n\t\t\t\tcontext,\n\t\t\t\ttypeNode,\n\t\t\t\t\"jsonSchemaBuilder.diagnostic.unsupportedImportTypeForm\",\n\t\t\t\t{ argument: typeNode.getText() }\n\t\t\t);\n\t\t\treturn {};\n\t\t}\n\n\t\tconst moduleSpecifier = typeNode.argument.literal.text;\n\t\tconst typeName = ImportTypeQuerySchemaResolver.extractImportTypeName(typeNode.qualifier);\n\t\tif (!typeName) {\n\t\t\tDiagnosticReporter.report(\n\t\t\t\tcontext,\n\t\t\t\ttypeNode,\n\t\t\t\t\"jsonSchemaBuilder.diagnostic.unresolvedImportTypeQualifier\",\n\t\t\t\t{ argument: moduleSpecifier }\n\t\t\t);\n\t\t\treturn {};\n\t\t}\n\n\t\tconst title = StringHelper.stripPrefix(typeName);\n\t\tconst existingSchemaId = JsonSchemaBuilder.findExistingSchemaIdByTitle(context, title);\n\t\tconst resolvedSchemaId =\n\t\t\texistingSchemaId ??\n\t\t\tImportTypeQuerySchemaResolver.resolveImportTypeReferenceSchemaId(\n\t\t\t\tcontext,\n\t\t\t\tmoduleSpecifier,\n\t\t\t\ttypeName,\n\t\t\t\ttitle\n\t\t\t);\n\n\t\treturn {\n\t\t\t$ref: resolvedSchemaId ?? `${context.namespace}${title}`\n\t\t};\n\t}\n\n\t/**\n\t * Map a type query node (typeof expr) to schema by resolving the referenced variable.\n\t * @param context The generation context.\n\t * @param typeNode The type query node.\n\t * @returns The mapped schema.\n\t */\n\tpublic static mapTypeQueryNodeToSchema(\n\t\tcontext: ITypeScriptToSchemaContext,\n\t\ttypeNode: ts.TypeQueryNode\n\t): IJsonSchema {\n\t\tif (ts.isQualifiedName(typeNode.exprName) && ts.isIdentifier(typeNode.exprName.left)) {\n\t\t\tconst localValue = JsonSchemaBuilder.resolveLocalConstObjectProperty(\n\t\t\t\tcontext,\n\t\t\t\ttypeNode.exprName.left.text,\n\t\t\t\ttypeNode.exprName.right.text\n\t\t\t);\n\t\t\tif (localValue !== undefined) {\n\t\t\t\treturn { const: localValue };\n\t\t\t}\n\n\t\t\tconst importedValue = ImportTypeQuerySchemaResolver.resolveConstObjectProperty(\n\t\t\t\tcontext,\n\t\t\t\ttypeNode.exprName.left.text,\n\t\t\t\ttypeNode.exprName.right.text\n\t\t\t);\n\t\t\tif (importedValue !== undefined) {\n\t\t\t\treturn { const: importedValue };\n\t\t\t}\n\n\t\t\tDiagnosticReporter.report(\n\t\t\t\tcontext,\n\t\t\t\ttypeNode,\n\t\t\t\t\"jsonSchemaBuilder.diagnostic.unresolvedTypeQueryTarget\",\n\t\t\t\t{ target: typeNode.getText() }\n\t\t\t);\n\t\t\treturn {};\n\t\t}\n\n\t\tconst exprName = ts.isIdentifier(typeNode.exprName) ? typeNode.exprName.text : undefined;\n\t\tif (!exprName || !context.activeSourceFile) {\n\t\t\tDiagnosticReporter.report(\n\t\t\t\tcontext,\n\t\t\t\ttypeNode,\n\t\t\t\t\"jsonSchemaBuilder.diagnostic.unresolvedTypeQueryTarget\",\n\t\t\t\t{ target: typeNode.getText() }\n\t\t\t);\n\t\t\treturn {};\n\t\t}\n\n\t\tconst localDeclaration = JsonSchemaBuilder.findVariableDeclaration(\n\t\t\tcontext.activeSourceFile,\n\t\t\texprName\n\t\t);\n\t\tif (localDeclaration) {\n\t\t\tif (localDeclaration.type) {\n\t\t\t\treturn JsonSchemaBuilder.mapTypeNodeToSchema(context, localDeclaration.type) ?? {};\n\t\t\t}\n\t\t\tif (localDeclaration.initializer) {\n\t\t\t\treturn JsonSchemaBuilder.inferSchemaFromExpression(context, localDeclaration.initializer);\n\t\t\t}\n\t\t}\n\n\t\tconst importedTypeQuerySchema = JsonSchemaBuilder.resolveImportedTypeQuerySchema(\n\t\t\tcontext,\n\t\t\texprName\n\t\t);\n\t\tif (importedTypeQuerySchema) {\n\t\t\treturn importedTypeQuerySchema;\n\t\t}\n\n\t\tDiagnosticReporter.report(\n\t\t\tcontext,\n\t\t\ttypeNode,\n\t\t\t\"jsonSchemaBuilder.diagnostic.unresolvedTypeQueryTarget\",\n\t\t\t{ target: exprName }\n\t\t);\n\n\t\treturn {};\n\t}\n\n\t/**\n\t * Resolve import-type references to local or external schema ids.\n\t * @param context The generation context.\n\t * @param moduleSpecifier The import module specifier.\n\t * @param typeName The imported type name.\n\t * @param title The stripped schema title.\n\t * @returns The resolved schema id.\n\t */\n\tpublic static resolveImportTypeReferenceSchemaId(\n\t\tcontext: ITypeScriptToSchemaContext,\n\t\tmoduleSpecifier: string,\n\t\ttypeName: string,\n\t\ttitle: string\n\t): string | undefined {\n\t\tconst mappedReference = JsonSchemaBuilder.resolveReferenceMappingTarget(\n\t\t\tcontext,\n\t\t\tmoduleSpecifier,\n\t\t\ttypeName\n\t\t);\n\n\t\tif (moduleSpecifier.startsWith(\".\")) {\n\t\t\tif (mappedReference?.schemaId) {\n\t\t\t\treturn mappedReference.schemaId;\n\t\t\t}\n\n\t\t\tconst activeFilePath = context.activeSourceFile?.fileName;\n\t\t\tif (!activeFilePath) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst resolvedImportPath = FileUtils.resolveImportSourceFilePath(\n\t\t\t\tactiveFilePath,\n\t\t\t\tmoduleSpecifier\n\t\t\t);\n\t\t\tif (!resolvedImportPath) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst importedSource = FileUtils.readFile(resolvedImportPath);\n\t\t\tif (!importedSource) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tJsonSchemaBuilder.parseAllObjectSchemas(context, resolvedImportPath, importedSource, []);\n\t\t\treturn context.schemas[context.packageName]?.[title]?.$id;\n\t\t}\n\n\t\tconst cachedSchemaId = context.schemas[moduleSpecifier]?.[title]?.$id;\n\t\tif (cachedSchemaId) {\n\t\t\treturn cachedSchemaId;\n\t\t}\n\n\t\tconst declarationResult = Resolver.resolveTypeDeclarationAst(\n\t\t\tmoduleSpecifier,\n\t\t\ttypeName,\n\t\t\tcontext.activeSourceFile?.fileName\n\t\t);\n\t\tif (!declarationResult) {\n\t\t\treturn mappedReference?.schemaId;\n\t\t}\n\n\t\tconst externalContext: ITypeScriptToSchemaContext = {\n\t\t\tnamespace: mappedReference?.namespace ?? context.namespace,\n\t\t\tpackageName: moduleSpecifier,\n\t\t\tschemas: context.schemas,\n\t\t\tactiveSourceFile: context.activeSourceFile,\n\t\t\tembeddedSchemaModes: context.embeddedSchemaModes,\n\t\t\toptions: context.options\n\t\t};\n\n\t\tJsonSchemaBuilder.parseAllObjectSchemas(\n\t\t\texternalContext,\n\t\t\tdeclarationResult.sourceFile.fileName,\n\t\t\tdeclarationResult.sourceFile.getFullText(),\n\t\t\t[]\n\t\t);\n\n\t\treturn context.schemas[moduleSpecifier]?.[title]?.$id ?? mappedReference?.schemaId;\n\t}\n\n\t/**\n\t * Resolve a property value from a const object declaration in an imported source file.\n\t * @param context The generation context.\n\t * @param objectName The imported object symbol name.\n\t * @param propertyName The property name to resolve from the object.\n\t * @returns The resolved literal property value.\n\t */\n\tprivate static resolveConstObjectProperty(\n\t\tcontext: ITypeScriptToSchemaContext,\n\t\tobjectName: string,\n\t\tpropertyName: string\n\t): string | number | undefined {\n\t\tif (!context.activeSourceFile) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst importReference = ImportTypeQuerySchemaResolver.findImportedValueReference(\n\t\t\tcontext.activeSourceFile,\n\t\t\tobjectName\n\t\t);\n\t\tif (!importReference) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst resolvedPath = ImportTypeQuerySchemaResolver.resolveImportDeclarationSourceFile(\n\t\t\tcontext.activeSourceFile.fileName,\n\t\t\timportReference.moduleSpecifier\n\t\t);\n\t\tif (!resolvedPath) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst importedSource = FileUtils.readFile(resolvedPath);\n\t\tif (!importedSource) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst importedSourceFile = ts.createSourceFile(\n\t\t\tresolvedPath,\n\t\t\timportedSource,\n\t\t\tts.ScriptTarget.Latest,\n\t\t\ttrue\n\t\t);\n\n\t\tlet objDecl = importedSourceFile.statements\n\t\t\t.filter((stmt): stmt is ts.VariableStatement => ts.isVariableStatement(stmt))\n\t\t\t.flatMap(stmt => [...stmt.declarationList.declarations])\n\t\t\t.find(decl => ts.isIdentifier(decl.name) && decl.name.text === importReference.importedName);\n\n\t\tobjDecl ??= ImportTypeQuerySchemaResolver.findVariableDeclarationInModuleGraph(\n\t\t\tresolvedPath,\n\t\t\timportReference.importedName,\n\t\t\tnew Set<string>()\n\t\t);\n\n\t\tif (!objDecl) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst valueFromInitializer =\n\t\t\tImportTypeQuerySchemaResolver.extractConstObjectPropertyFromDeclarationInitializer(\n\t\t\t\tobjDecl,\n\t\t\t\tpropertyName\n\t\t\t);\n\t\tif (valueFromInitializer !== undefined) {\n\t\t\treturn valueFromInitializer;\n\t\t}\n\n\t\tif (objDecl.type) {\n\t\t\treturn ImportTypeQuerySchemaResolver.extractConstObjectPropertyFromDeclarationType(\n\t\t\t\tobjDecl.type,\n\t\t\t\tpropertyName\n\t\t\t);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Find a variable declaration by traversing import and export chains.\n\t * @param sourceFilePath The source file path to inspect.\n\t * @param variableName The variable name to find.\n\t * @param visitedFiles The set of visited files to prevent recursion cycles.\n\t * @returns The matched variable declaration.\n\t */\n\tprivate static findVariableDeclarationInModuleGraph(\n\t\tsourceFilePath: string,\n\t\tvariableName: string,\n\t\tvisitedFiles: Set<string>\n\t): ts.VariableDeclaration | undefined {\n\t\tconst normalizedSourceFilePath = FileUtils.normalizeFilePath(sourceFilePath);\n\t\tif (visitedFiles.has(normalizedSourceFilePath)) {\n\t\t\treturn undefined;\n\t\t}\n\t\tvisitedFiles.add(normalizedSourceFilePath);\n\n\t\tconst source = FileUtils.readFile(sourceFilePath);\n\t\tif (!source) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst sourceFile = ts.createSourceFile(sourceFilePath, source, ts.ScriptTarget.Latest, true);\n\n\t\tconst declaration = sourceFile.statements\n\t\t\t.filter((stmt): stmt is ts.VariableStatement => ts.isVariableStatement(stmt))\n\t\t\t.flatMap(stmt => [...stmt.declarationList.declarations])\n\t\t\t.find(decl => ts.isIdentifier(decl.name) && decl.name.text === variableName);\n\t\tif (declaration) {\n\t\t\treturn declaration;\n\t\t}\n\n\t\tconst compilerOptions: ts.CompilerOptions = {\n\t\t\tmodule: ts.ModuleKind.NodeNext,\n\t\t\tmoduleResolution: ts.ModuleResolutionKind.NodeNext,\n\t\t\ttarget: ts.ScriptTarget.ESNext,\n\t\t\tskipLibCheck: true\n\t\t};\n\n\t\tconst moduleSpecifiers = sourceFile.statements\n\t\t\t.filter(statement => ts.isExportDeclaration(statement) || ts.isImportDeclaration(statement))\n\t\t\t.flatMap(statement => {\n\t\t\t\tconst moduleSpecifier = statement.moduleSpecifier;\n\t\t\t\treturn moduleSpecifier && ts.isStringLiteral(moduleSpecifier) ? [moduleSpecifier.text] : [];\n\t\t\t});\n\n\t\tfor (const moduleSpecifier of moduleSpecifiers) {\n\t\t\tconst resolvedModulePath = ts.resolveModuleName(\n\t\t\t\tmoduleSpecifier,\n\t\t\t\tsourceFilePath,\n\t\t\t\tcompilerOptions,\n\t\t\t\tts.sys\n\t\t\t).resolvedModule?.resolvedFileName;\n\n\t\t\tif (resolvedModulePath) {\n\t\t\t\tconst declarationInModule =\n\t\t\t\t\tImportTypeQuerySchemaResolver.findVariableDeclarationInModuleGraph(\n\t\t\t\t\t\tresolvedModulePath,\n\t\t\t\t\t\tvariableName,\n\t\t\t\t\t\tvisitedFiles\n\t\t\t\t\t);\n\t\t\t\tif (declarationInModule) {\n\t\t\t\t\treturn declarationInModule;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Find an imported symbol reference by local identifier name.\n\t * @param sourceFile The active source file.\n\t * @param localName The local identifier name.\n\t * @returns The imported symbol reference.\n\t */\n\tprivate static findImportedValueReference(\n\t\tsourceFile: ts.SourceFile,\n\t\tlocalName: string\n\t):\n\t\t| {\n\t\t\t\tmoduleSpecifier: string;\n\t\t\t\timportedName: string;\n\t\t }\n\t\t| undefined {\n\t\tfor (const statement of sourceFile.statements) {\n\t\t\tif (ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier)) {\n\t\t\t\tconst bindings = statement.importClause?.namedBindings;\n\t\t\t\tif (bindings && ts.isNamedImports(bindings)) {\n\t\t\t\t\tconst importElement = bindings.elements.find(el => el.name.text === localName);\n\t\t\t\t\tif (importElement) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tmoduleSpecifier: statement.moduleSpecifier.text,\n\t\t\t\t\t\t\timportedName: importElement.propertyName?.text ?? importElement.name.text\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\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Resolve an import declaration module specifier to a source file.\n\t * @param containingSourceFilePath The path of the file containing the import declaration.\n\t * @param moduleSpecifier The module specifier to resolve.\n\t * @returns The resolved source file path.\n\t */\n\tprivate static resolveImportDeclarationSourceFile(\n\t\tcontainingSourceFilePath: string,\n\t\tmoduleSpecifier: string\n\t): string | undefined {\n\t\tconst resolvedContainingSourceFilePath = FileUtils.resolvePath(containingSourceFilePath);\n\n\t\tif (moduleSpecifier.startsWith(\".\")) {\n\t\t\treturn (\n\t\t\t\tFileUtils.resolveImportSourceFilePath(resolvedContainingSourceFilePath, moduleSpecifier) ??\n\t\t\t\t(moduleSpecifier.endsWith(\".js\")\n\t\t\t\t\t? FileUtils.resolveImportSourceFilePath(\n\t\t\t\t\t\t\tresolvedContainingSourceFilePath,\n\t\t\t\t\t\t\t`${moduleSpecifier.slice(0, -3)}.ts`\n\t\t\t\t\t\t)\n\t\t\t\t\t: undefined)\n\t\t\t);\n\t\t}\n\n\t\tconst compilerOptions: ts.CompilerOptions = {\n\t\t\tmodule: ts.ModuleKind.NodeNext,\n\t\t\tmoduleResolution: ts.ModuleResolutionKind.NodeNext,\n\t\t\ttarget: ts.ScriptTarget.ESNext,\n\t\t\tskipLibCheck: true\n\t\t};\n\n\t\treturn ts.resolveModuleName(\n\t\t\tmoduleSpecifier,\n\t\t\tresolvedContainingSourceFilePath,\n\t\t\tcompilerOptions,\n\t\t\tts.sys\n\t\t).resolvedModule?.resolvedFileName;\n\t}\n\n\t/**\n\t * Extract a const-object property value from a declaration initializer.\n\t * @param objectDeclaration The variable declaration containing the object initializer.\n\t * @param propertyName The property name to resolve.\n\t * @returns The extracted literal property value.\n\t */\n\tprivate static extractConstObjectPropertyFromDeclarationInitializer(\n\t\tobjectDeclaration: ts.VariableDeclaration,\n\t\tpropertyName: string\n\t): string | number | undefined {\n\t\tif (!objectDeclaration.initializer) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tlet objLiteral: ts.ObjectLiteralExpression | undefined;\n\t\tif (ts.isObjectLiteralExpression(objectDeclaration.initializer)) {\n\t\t\tobjLiteral = objectDeclaration.initializer;\n\t\t} else if (\n\t\t\tts.isAsExpression(objectDeclaration.initializer) &&\n\t\t\tts.isObjectLiteralExpression(objectDeclaration.initializer.expression)\n\t\t) {\n\t\t\tobjLiteral = objectDeclaration.initializer.expression;\n\t\t}\n\n\t\tif (!objLiteral) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst prop = objLiteral.properties\n\t\t\t.filter((p): p is ts.PropertyAssignment => ts.isPropertyAssignment(p))\n\t\t\t.find(p => ts.isIdentifier(p.name) && p.name.text === propertyName);\n\n\t\tif (!prop) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ts.isStringLiteral(prop.initializer)) {\n\t\t\treturn prop.initializer.text;\n\t\t}\n\t\tif (ts.isNumericLiteral(prop.initializer)) {\n\t\t\treturn Number(prop.initializer.text);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Extract a const-object property value from a declaration type annotation.\n\t * @param declarationTypeNode The declaration type node to inspect.\n\t * @param propertyName The property name to resolve.\n\t * @returns The extracted literal property value.\n\t */\n\tprivate static extractConstObjectPropertyFromDeclarationType(\n\t\tdeclarationTypeNode: ts.TypeNode,\n\t\tpropertyName: string\n\t): string | number | undefined {\n\t\tif (ts.isParenthesizedTypeNode(declarationTypeNode)) {\n\t\t\treturn ImportTypeQuerySchemaResolver.extractConstObjectPropertyFromDeclarationType(\n\t\t\t\tdeclarationTypeNode.type,\n\t\t\t\tpropertyName\n\t\t\t);\n\t\t}\n\n\t\tif (\n\t\t\tts.isTypeOperatorNode(declarationTypeNode) &&\n\t\t\tdeclarationTypeNode.operator === ts.SyntaxKind.ReadonlyKeyword\n\t\t) {\n\t\t\treturn ImportTypeQuerySchemaResolver.extractConstObjectPropertyFromDeclarationType(\n\t\t\t\tdeclarationTypeNode.type,\n\t\t\t\tpropertyName\n\t\t\t);\n\t\t}\n\n\t\tif (\n\t\t\tts.isTypeReferenceNode(declarationTypeNode) &&\n\t\t\tts.isIdentifier(declarationTypeNode.typeName) &&\n\t\t\tdeclarationTypeNode.typeName.text === \"Readonly\" &&\n\t\t\tIs.arrayValue(declarationTypeNode.typeArguments)\n\t\t) {\n\t\t\treturn ImportTypeQuerySchemaResolver.extractConstObjectPropertyFromDeclarationType(\n\t\t\t\tdeclarationTypeNode.typeArguments[0],\n\t\t\t\tpropertyName\n\t\t\t);\n\t\t}\n\n\t\tif (ts.isTypeLiteralNode(declarationTypeNode)) {\n\t\t\tconst propertySignature = declarationTypeNode.members.find(\n\t\t\t\t(member): member is ts.PropertySignature => {\n\t\t\t\t\tif (!ts.isPropertySignature(member) || !member.name) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t(ts.isIdentifier(member.name) && member.name.text === propertyName) ||\n\t\t\t\t\t\t(ts.isStringLiteral(member.name) && member.name.text === propertyName) ||\n\t\t\t\t\t\t(ts.isNumericLiteral(member.name) && member.name.text === propertyName)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (propertySignature?.type) {\n\t\t\t\treturn ImportTypeQuerySchemaResolver.extractLiteralValueFromTypeNode(\n\t\t\t\t\tpropertySignature.type\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Extract a literal value from a type node when possible.\n\t * @param typeNode The type node to inspect.\n\t * @returns The extracted literal value.\n\t */\n\tprivate static extractLiteralValueFromTypeNode(\n\t\ttypeNode: ts.TypeNode\n\t): string | number | undefined {\n\t\tif (ts.isLiteralTypeNode(typeNode)) {\n\t\t\tif (ts.isStringLiteral(typeNode.literal)) {\n\t\t\t\treturn typeNode.literal.text;\n\t\t\t}\n\n\t\t\tif (ts.isNumericLiteral(typeNode.literal)) {\n\t\t\t\treturn Number(typeNode.literal.text);\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Extract a referenced type name from an import type qualifier.\n\t * @param qualifier The import type qualifier.\n\t * @returns The extracted type name.\n\t */\n\tprivate static extractImportTypeName(qualifier: ts.EntityName | undefined): string | undefined {\n\t\tif (!qualifier) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ts.isIdentifier(qualifier)) {\n\t\t\treturn qualifier.text;\n\t\t}\n\n\t\treturn qualifier.right.text;\n\t}\n}\n"]}
1
+ {"version":3,"file":"importTypeQuerySchemaResolver.js","sourceRoot":"","sources":["../../../src/utils/importTypeQuerySchemaResolver.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { Is, StringHelper } from \"@twin.org/core\";\nimport type { IJsonSchema } from \"@twin.org/tools-models\";\nimport * as ts from \"typescript\";\nimport { DiagnosticReporter } from \"./diagnosticReporter.js\";\nimport { FileUtils } from \"./fileUtils.js\";\nimport { JsonSchemaBuilder } from \"./jsonSchemaBuilder.js\";\nimport { Resolver } from \"./resolver.js\";\nimport type { ITypeScriptToSchemaContext } from \"../models/ITypeScriptToSchemaContext.js\";\n\n/**\n * Static helpers for import type and type query schema resolution.\n */\nexport class ImportTypeQuerySchemaResolver {\n\t/**\n\t * Map import type nodes (e.g. import(\"pkg\").Type) to schema references.\n\t * @param context The generation context.\n\t * @param typeNode The import type node.\n\t * @returns The mapped schema.\n\t */\n\tpublic static mapImportTypeNodeToSchema(\n\t\tcontext: ITypeScriptToSchemaContext,\n\t\ttypeNode: ts.ImportTypeNode\n\t): IJsonSchema | undefined {\n\t\tif (\n\t\t\ttypeNode.isTypeOf ||\n\t\t\t!ts.isLiteralTypeNode(typeNode.argument) ||\n\t\t\t!ts.isStringLiteral(typeNode.argument.literal)\n\t\t) {\n\t\t\tDiagnosticReporter.report(\n\t\t\t\tcontext,\n\t\t\t\ttypeNode,\n\t\t\t\t\"jsonSchemaBuilder.diagnostic.unsupportedImportTypeForm\",\n\t\t\t\t{ argument: typeNode.getText() }\n\t\t\t);\n\t\t\treturn {};\n\t\t}\n\n\t\tconst moduleSpecifier = typeNode.argument.literal.text;\n\t\tconst typeName = ImportTypeQuerySchemaResolver.extractImportTypeName(typeNode.qualifier);\n\t\tif (!typeName) {\n\t\t\tDiagnosticReporter.report(\n\t\t\t\tcontext,\n\t\t\t\ttypeNode,\n\t\t\t\t\"jsonSchemaBuilder.diagnostic.unresolvedImportTypeQualifier\",\n\t\t\t\t{ argument: moduleSpecifier }\n\t\t\t);\n\t\t\treturn {};\n\t\t}\n\n\t\tconst title = StringHelper.stripPrefix(typeName);\n\t\tconst existingSchemaId = JsonSchemaBuilder.findExistingSchemaIdByTitle(context, title);\n\t\tconst resolvedSchemaId =\n\t\t\texistingSchemaId ??\n\t\t\tImportTypeQuerySchemaResolver.resolveImportTypeReferenceSchemaId(\n\t\t\t\tcontext,\n\t\t\t\tmoduleSpecifier,\n\t\t\t\ttypeName,\n\t\t\t\ttitle\n\t\t\t);\n\n\t\treturn {\n\t\t\t$ref: resolvedSchemaId ?? `${context.namespace}${title}`\n\t\t};\n\t}\n\n\t/**\n\t * Map a type query node (typeof expr) to schema by resolving the referenced variable.\n\t * @param context The generation context.\n\t * @param typeNode The type query node.\n\t * @returns The mapped schema.\n\t */\n\tpublic static mapTypeQueryNodeToSchema(\n\t\tcontext: ITypeScriptToSchemaContext,\n\t\ttypeNode: ts.TypeQueryNode\n\t): IJsonSchema {\n\t\tif (ts.isQualifiedName(typeNode.exprName) && ts.isIdentifier(typeNode.exprName.left)) {\n\t\t\tconst localValue = JsonSchemaBuilder.resolveLocalConstObjectProperty(\n\t\t\t\tcontext,\n\t\t\t\ttypeNode.exprName.left.text,\n\t\t\t\ttypeNode.exprName.right.text\n\t\t\t);\n\t\t\tif (localValue !== undefined) {\n\t\t\t\treturn { const: localValue };\n\t\t\t}\n\n\t\t\tconst importedValue = ImportTypeQuerySchemaResolver.resolveConstObjectProperty(\n\t\t\t\tcontext,\n\t\t\t\ttypeNode.exprName.left.text,\n\t\t\t\ttypeNode.exprName.right.text\n\t\t\t);\n\t\t\tif (importedValue !== undefined) {\n\t\t\t\treturn { const: importedValue };\n\t\t\t}\n\n\t\t\tDiagnosticReporter.report(\n\t\t\t\tcontext,\n\t\t\t\ttypeNode,\n\t\t\t\t\"jsonSchemaBuilder.diagnostic.unresolvedTypeQueryTarget\",\n\t\t\t\t{ target: typeNode.getText() }\n\t\t\t);\n\t\t\treturn {};\n\t\t}\n\n\t\tconst exprName = ts.isIdentifier(typeNode.exprName) ? typeNode.exprName.text : undefined;\n\t\tif (!exprName || !context.activeSourceFile) {\n\t\t\tDiagnosticReporter.report(\n\t\t\t\tcontext,\n\t\t\t\ttypeNode,\n\t\t\t\t\"jsonSchemaBuilder.diagnostic.unresolvedTypeQueryTarget\",\n\t\t\t\t{ target: typeNode.getText() }\n\t\t\t);\n\t\t\treturn {};\n\t\t}\n\n\t\tconst localDeclaration = JsonSchemaBuilder.findVariableDeclaration(\n\t\t\tcontext.activeSourceFile,\n\t\t\texprName\n\t\t);\n\t\tif (localDeclaration) {\n\t\t\tif (localDeclaration.type) {\n\t\t\t\treturn JsonSchemaBuilder.mapTypeNodeToSchema(context, localDeclaration.type) ?? {};\n\t\t\t}\n\t\t\tif (localDeclaration.initializer) {\n\t\t\t\treturn JsonSchemaBuilder.inferSchemaFromExpression(context, localDeclaration.initializer);\n\t\t\t}\n\t\t}\n\n\t\tconst importedTypeQuerySchema = JsonSchemaBuilder.resolveImportedTypeQuerySchema(\n\t\t\tcontext,\n\t\t\texprName\n\t\t);\n\t\tif (importedTypeQuerySchema) {\n\t\t\treturn importedTypeQuerySchema;\n\t\t}\n\n\t\tDiagnosticReporter.report(\n\t\t\tcontext,\n\t\t\ttypeNode,\n\t\t\t\"jsonSchemaBuilder.diagnostic.unresolvedTypeQueryTarget\",\n\t\t\t{ target: exprName }\n\t\t);\n\n\t\treturn {};\n\t}\n\n\t/**\n\t * Resolve import-type references to local or external schema ids.\n\t * @param context The generation context.\n\t * @param moduleSpecifier The import module specifier.\n\t * @param typeName The imported type name.\n\t * @param title The stripped schema title.\n\t * @returns The resolved schema id.\n\t */\n\tpublic static resolveImportTypeReferenceSchemaId(\n\t\tcontext: ITypeScriptToSchemaContext,\n\t\tmoduleSpecifier: string,\n\t\ttypeName: string,\n\t\ttitle: string\n\t): string | undefined {\n\t\tconst mappedReference = JsonSchemaBuilder.resolveReferenceMappingTarget(\n\t\t\tcontext,\n\t\t\tmoduleSpecifier,\n\t\t\ttypeName\n\t\t);\n\n\t\tif (moduleSpecifier.startsWith(\".\")) {\n\t\t\tif (mappedReference?.schemaId) {\n\t\t\t\treturn mappedReference.schemaId;\n\t\t\t}\n\n\t\t\tconst activeFilePath = context.activeSourceFile?.fileName;\n\t\t\tif (!activeFilePath) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst resolvedImportPath = FileUtils.resolveImportSourceFilePath(\n\t\t\t\tactiveFilePath,\n\t\t\t\tmoduleSpecifier\n\t\t\t);\n\t\t\tif (!resolvedImportPath) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst importedSource = FileUtils.readFile(resolvedImportPath);\n\t\t\tif (!importedSource) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tJsonSchemaBuilder.parseAllObjectSchemas(context, resolvedImportPath, importedSource, []);\n\t\t\treturn context.schemas[context.packageName]?.[title]?.$id;\n\t\t}\n\n\t\tconst cachedSchemaId = context.schemas[moduleSpecifier]?.[title]?.$id;\n\t\tif (cachedSchemaId) {\n\t\t\treturn cachedSchemaId;\n\t\t}\n\n\t\tconst declarationResult = Resolver.resolveTypeDeclarationAst(\n\t\t\tmoduleSpecifier,\n\t\t\ttypeName,\n\t\t\tcontext.activeSourceFile?.fileName\n\t\t);\n\t\tif (!declarationResult) {\n\t\t\treturn mappedReference?.schemaId;\n\t\t}\n\n\t\tconst externalContext: ITypeScriptToSchemaContext = {\n\t\t\tnamespace: mappedReference?.namespace ?? context.namespace,\n\t\t\tpackageName: moduleSpecifier,\n\t\t\tschemas: context.schemas,\n\t\t\tactiveSourceFile: context.activeSourceFile,\n\t\t\tembeddedSchemaModes: context.embeddedSchemaModes,\n\t\t\toptions: context.options\n\t\t};\n\n\t\tJsonSchemaBuilder.parseAllObjectSchemas(\n\t\t\texternalContext,\n\t\t\tdeclarationResult.sourceFile.fileName,\n\t\t\tdeclarationResult.sourceFile.getFullText(),\n\t\t\t[]\n\t\t);\n\n\t\treturn context.schemas[moduleSpecifier]?.[title]?.$id ?? mappedReference?.schemaId;\n\t}\n\n\t/**\n\t * Resolve a property value from a const object declaration in an imported source file.\n\t * @param context The generation context.\n\t * @param objectName The imported object symbol name.\n\t * @param propertyName The property name to resolve from the object.\n\t * @returns The resolved literal property value.\n\t * @internal\n\t */\n\tprivate static resolveConstObjectProperty(\n\t\tcontext: ITypeScriptToSchemaContext,\n\t\tobjectName: string,\n\t\tpropertyName: string\n\t): string | number | undefined {\n\t\tif (!context.activeSourceFile) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst importReference = ImportTypeQuerySchemaResolver.findImportedValueReference(\n\t\t\tcontext.activeSourceFile,\n\t\t\tobjectName\n\t\t);\n\t\tif (!importReference) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst resolvedPath = ImportTypeQuerySchemaResolver.resolveImportDeclarationSourceFile(\n\t\t\tcontext.activeSourceFile.fileName,\n\t\t\timportReference.moduleSpecifier\n\t\t);\n\t\tif (!resolvedPath) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst importedSource = FileUtils.readFile(resolvedPath);\n\t\tif (!importedSource) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst importedSourceFile = ts.createSourceFile(\n\t\t\tresolvedPath,\n\t\t\timportedSource,\n\t\t\tts.ScriptTarget.Latest,\n\t\t\ttrue\n\t\t);\n\n\t\tlet objDecl = importedSourceFile.statements\n\t\t\t.filter((stmt): stmt is ts.VariableStatement => ts.isVariableStatement(stmt))\n\t\t\t.flatMap(stmt => [...stmt.declarationList.declarations])\n\t\t\t.find(decl => ts.isIdentifier(decl.name) && decl.name.text === importReference.importedName);\n\n\t\tobjDecl ??= ImportTypeQuerySchemaResolver.findVariableDeclarationInModuleGraph(\n\t\t\tresolvedPath,\n\t\t\timportReference.importedName,\n\t\t\tnew Set<string>()\n\t\t);\n\n\t\tif (!objDecl) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst valueFromInitializer =\n\t\t\tImportTypeQuerySchemaResolver.extractConstObjectPropertyFromDeclarationInitializer(\n\t\t\t\tobjDecl,\n\t\t\t\tpropertyName\n\t\t\t);\n\t\tif (valueFromInitializer !== undefined) {\n\t\t\treturn valueFromInitializer;\n\t\t}\n\n\t\tif (objDecl.type) {\n\t\t\treturn ImportTypeQuerySchemaResolver.extractConstObjectPropertyFromDeclarationType(\n\t\t\t\tobjDecl.type,\n\t\t\t\tpropertyName\n\t\t\t);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Find a variable declaration by traversing import and export chains.\n\t * @param sourceFilePath The source file path to inspect.\n\t * @param variableName The variable name to find.\n\t * @param visitedFiles The set of visited files to prevent recursion cycles.\n\t * @returns The matched variable declaration.\n\t * @internal\n\t */\n\tprivate static findVariableDeclarationInModuleGraph(\n\t\tsourceFilePath: string,\n\t\tvariableName: string,\n\t\tvisitedFiles: Set<string>\n\t): ts.VariableDeclaration | undefined {\n\t\tconst normalizedSourceFilePath = FileUtils.normalizeFilePath(sourceFilePath);\n\t\tif (visitedFiles.has(normalizedSourceFilePath)) {\n\t\t\treturn undefined;\n\t\t}\n\t\tvisitedFiles.add(normalizedSourceFilePath);\n\n\t\tconst source = FileUtils.readFile(sourceFilePath);\n\t\tif (!source) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst sourceFile = ts.createSourceFile(sourceFilePath, source, ts.ScriptTarget.Latest, true);\n\n\t\tconst declaration = sourceFile.statements\n\t\t\t.filter((stmt): stmt is ts.VariableStatement => ts.isVariableStatement(stmt))\n\t\t\t.flatMap(stmt => [...stmt.declarationList.declarations])\n\t\t\t.find(decl => ts.isIdentifier(decl.name) && decl.name.text === variableName);\n\t\tif (declaration) {\n\t\t\treturn declaration;\n\t\t}\n\n\t\tconst compilerOptions: ts.CompilerOptions = {\n\t\t\tmodule: ts.ModuleKind.NodeNext,\n\t\t\tmoduleResolution: ts.ModuleResolutionKind.NodeNext,\n\t\t\ttarget: ts.ScriptTarget.ESNext,\n\t\t\tskipLibCheck: true\n\t\t};\n\n\t\tconst moduleSpecifiers = sourceFile.statements\n\t\t\t.filter(statement => ts.isExportDeclaration(statement) || ts.isImportDeclaration(statement))\n\t\t\t.flatMap(statement => {\n\t\t\t\tconst moduleSpecifier = statement.moduleSpecifier;\n\t\t\t\treturn moduleSpecifier && ts.isStringLiteral(moduleSpecifier) ? [moduleSpecifier.text] : [];\n\t\t\t});\n\n\t\tfor (const moduleSpecifier of moduleSpecifiers) {\n\t\t\tconst resolvedModulePath = ts.resolveModuleName(\n\t\t\t\tmoduleSpecifier,\n\t\t\t\tsourceFilePath,\n\t\t\t\tcompilerOptions,\n\t\t\t\tts.sys\n\t\t\t).resolvedModule?.resolvedFileName;\n\n\t\t\tif (resolvedModulePath) {\n\t\t\t\tconst declarationInModule =\n\t\t\t\t\tImportTypeQuerySchemaResolver.findVariableDeclarationInModuleGraph(\n\t\t\t\t\t\tresolvedModulePath,\n\t\t\t\t\t\tvariableName,\n\t\t\t\t\t\tvisitedFiles\n\t\t\t\t\t);\n\t\t\t\tif (declarationInModule) {\n\t\t\t\t\treturn declarationInModule;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Find an imported symbol reference by local identifier name.\n\t * @param sourceFile The active source file.\n\t * @param localName The local identifier name.\n\t * @returns The imported symbol reference.\n\t * @internal\n\t */\n\tprivate static findImportedValueReference(\n\t\tsourceFile: ts.SourceFile,\n\t\tlocalName: string\n\t):\n\t\t| {\n\t\t\t\tmoduleSpecifier: string;\n\t\t\t\timportedName: string;\n\t\t }\n\t\t| undefined {\n\t\tfor (const statement of sourceFile.statements) {\n\t\t\tif (ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier)) {\n\t\t\t\tconst bindings = statement.importClause?.namedBindings;\n\t\t\t\tif (bindings && ts.isNamedImports(bindings)) {\n\t\t\t\t\tconst importElement = bindings.elements.find(el => el.name.text === localName);\n\t\t\t\t\tif (importElement) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tmoduleSpecifier: statement.moduleSpecifier.text,\n\t\t\t\t\t\t\timportedName: importElement.propertyName?.text ?? importElement.name.text\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\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Resolve an import declaration module specifier to a source file.\n\t * @param containingSourceFilePath The path of the file containing the import declaration.\n\t * @param moduleSpecifier The module specifier to resolve.\n\t * @returns The resolved source file path.\n\t * @internal\n\t */\n\tprivate static resolveImportDeclarationSourceFile(\n\t\tcontainingSourceFilePath: string,\n\t\tmoduleSpecifier: string\n\t): string | undefined {\n\t\tconst resolvedContainingSourceFilePath = FileUtils.resolvePath(containingSourceFilePath);\n\n\t\tif (moduleSpecifier.startsWith(\".\")) {\n\t\t\treturn (\n\t\t\t\tFileUtils.resolveImportSourceFilePath(resolvedContainingSourceFilePath, moduleSpecifier) ??\n\t\t\t\t(moduleSpecifier.endsWith(\".js\")\n\t\t\t\t\t? FileUtils.resolveImportSourceFilePath(\n\t\t\t\t\t\t\tresolvedContainingSourceFilePath,\n\t\t\t\t\t\t\t`${moduleSpecifier.slice(0, -3)}.ts`\n\t\t\t\t\t\t)\n\t\t\t\t\t: undefined)\n\t\t\t);\n\t\t}\n\n\t\tconst compilerOptions: ts.CompilerOptions = {\n\t\t\tmodule: ts.ModuleKind.NodeNext,\n\t\t\tmoduleResolution: ts.ModuleResolutionKind.NodeNext,\n\t\t\ttarget: ts.ScriptTarget.ESNext,\n\t\t\tskipLibCheck: true\n\t\t};\n\n\t\treturn ts.resolveModuleName(\n\t\t\tmoduleSpecifier,\n\t\t\tresolvedContainingSourceFilePath,\n\t\t\tcompilerOptions,\n\t\t\tts.sys\n\t\t).resolvedModule?.resolvedFileName;\n\t}\n\n\t/**\n\t * Extract a const-object property value from a declaration initializer.\n\t * @param objectDeclaration The variable declaration containing the object initializer.\n\t * @param propertyName The property name to resolve.\n\t * @returns The extracted literal property value.\n\t * @internal\n\t */\n\tprivate static extractConstObjectPropertyFromDeclarationInitializer(\n\t\tobjectDeclaration: ts.VariableDeclaration,\n\t\tpropertyName: string\n\t): string | number | undefined {\n\t\tif (!objectDeclaration.initializer) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tlet objLiteral: ts.ObjectLiteralExpression | undefined;\n\t\tif (ts.isObjectLiteralExpression(objectDeclaration.initializer)) {\n\t\t\tobjLiteral = objectDeclaration.initializer;\n\t\t} else if (\n\t\t\tts.isAsExpression(objectDeclaration.initializer) &&\n\t\t\tts.isObjectLiteralExpression(objectDeclaration.initializer.expression)\n\t\t) {\n\t\t\tobjLiteral = objectDeclaration.initializer.expression;\n\t\t}\n\n\t\tif (!objLiteral) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst prop = objLiteral.properties\n\t\t\t.filter((p): p is ts.PropertyAssignment => ts.isPropertyAssignment(p))\n\t\t\t.find(p => ts.isIdentifier(p.name) && p.name.text === propertyName);\n\n\t\tif (!prop) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ts.isStringLiteral(prop.initializer)) {\n\t\t\treturn prop.initializer.text;\n\t\t}\n\t\tif (ts.isNumericLiteral(prop.initializer)) {\n\t\t\treturn Number(prop.initializer.text);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Extract a const-object property value from a declaration type annotation.\n\t * @param declarationTypeNode The declaration type node to inspect.\n\t * @param propertyName The property name to resolve.\n\t * @returns The extracted literal property value.\n\t * @internal\n\t */\n\tprivate static extractConstObjectPropertyFromDeclarationType(\n\t\tdeclarationTypeNode: ts.TypeNode,\n\t\tpropertyName: string\n\t): string | number | undefined {\n\t\tif (ts.isParenthesizedTypeNode(declarationTypeNode)) {\n\t\t\treturn ImportTypeQuerySchemaResolver.extractConstObjectPropertyFromDeclarationType(\n\t\t\t\tdeclarationTypeNode.type,\n\t\t\t\tpropertyName\n\t\t\t);\n\t\t}\n\n\t\tif (\n\t\t\tts.isTypeOperatorNode(declarationTypeNode) &&\n\t\t\tdeclarationTypeNode.operator === ts.SyntaxKind.ReadonlyKeyword\n\t\t) {\n\t\t\treturn ImportTypeQuerySchemaResolver.extractConstObjectPropertyFromDeclarationType(\n\t\t\t\tdeclarationTypeNode.type,\n\t\t\t\tpropertyName\n\t\t\t);\n\t\t}\n\n\t\tif (\n\t\t\tts.isTypeReferenceNode(declarationTypeNode) &&\n\t\t\tts.isIdentifier(declarationTypeNode.typeName) &&\n\t\t\tdeclarationTypeNode.typeName.text === \"Readonly\" &&\n\t\t\tIs.arrayValue(declarationTypeNode.typeArguments)\n\t\t) {\n\t\t\treturn ImportTypeQuerySchemaResolver.extractConstObjectPropertyFromDeclarationType(\n\t\t\t\tdeclarationTypeNode.typeArguments[0],\n\t\t\t\tpropertyName\n\t\t\t);\n\t\t}\n\n\t\tif (ts.isTypeLiteralNode(declarationTypeNode)) {\n\t\t\tconst propertySignature = declarationTypeNode.members.find(\n\t\t\t\t(member): member is ts.PropertySignature => {\n\t\t\t\t\tif (!ts.isPropertySignature(member) || !member.name) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t(ts.isIdentifier(member.name) && member.name.text === propertyName) ||\n\t\t\t\t\t\t(ts.isStringLiteral(member.name) && member.name.text === propertyName) ||\n\t\t\t\t\t\t(ts.isNumericLiteral(member.name) && member.name.text === propertyName)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (propertySignature?.type) {\n\t\t\t\treturn ImportTypeQuerySchemaResolver.extractLiteralValueFromTypeNode(\n\t\t\t\t\tpropertySignature.type\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Extract a literal value from a type node when possible.\n\t * @param typeNode The type node to inspect.\n\t * @returns The extracted literal value.\n\t * @internal\n\t */\n\tprivate static extractLiteralValueFromTypeNode(\n\t\ttypeNode: ts.TypeNode\n\t): string | number | undefined {\n\t\tif (ts.isLiteralTypeNode(typeNode)) {\n\t\t\tif (ts.isStringLiteral(typeNode.literal)) {\n\t\t\t\treturn typeNode.literal.text;\n\t\t\t}\n\n\t\t\tif (ts.isNumericLiteral(typeNode.literal)) {\n\t\t\t\treturn Number(typeNode.literal.text);\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Extract a referenced type name from an import type qualifier.\n\t * @param qualifier The import type qualifier.\n\t * @returns The extracted type name.\n\t * @internal\n\t */\n\tprivate static extractImportTypeName(qualifier: ts.EntityName | undefined): string | undefined {\n\t\tif (!qualifier) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ts.isIdentifier(qualifier)) {\n\t\t\treturn qualifier.text;\n\t\t}\n\n\t\treturn qualifier.right.text;\n\t}\n}\n"]}
@@ -61,6 +61,7 @@ export class IntersectionSchemaMerger {
61
61
  * Resolve an intersection component to a plain object schema when possible.
62
62
  * @param context The generation context.
63
63
  * @param schema The mapped intersection component schema.
64
+ * @param toInlineUtilityObjectSchema A function that inlines a utility object schema.
64
65
  * @returns The resolved object schema.
65
66
  * @internal
66
67
  */
@@ -1 +1 @@
1
- {"version":3,"file":"intersectionSchemaMerger.js","sourceRoot":"","sources":["../../../src/utils/intersectionSchemaMerger.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { Is, ObjectHelper } from \"@twin.org/core\";\nimport type { IJsonSchema } from \"@twin.org/tools-models\";\nimport type { ITypeScriptToSchemaContext } from \"../models/ITypeScriptToSchemaContext.js\";\n\n/**\n * Merges compatible object intersections into a single JSON schema object.\n */\nexport class IntersectionSchemaMerger {\n\t/**\n\t * Merge simple object intersection parts into a single object schema.\n\t * Supports local/known object refs by expanding them before merge.\n\t * @param context The generation context.\n\t * @param schemas The mapped intersection schemas.\n\t * @param toInlineUtilityObjectSchema Callback for converting referenced schemas to inline forms.\n\t * @returns The merged schema, or undefined when merge is not safe.\n\t */\n\tpublic static mergeIntersectionObjectSchemas(\n\t\tcontext: ITypeScriptToSchemaContext,\n\t\tschemas: IJsonSchema[],\n\t\ttoInlineUtilityObjectSchema: (schema: IJsonSchema) => IJsonSchema\n\t): IJsonSchema | undefined {\n\t\tconst mergedProperties: { [id: string]: IJsonSchema } = {};\n\t\tconst mergedRequired = new Set<string>();\n\t\tconst preservedRefs = new Set<string>();\n\n\t\tfor (const schema of schemas) {\n\t\t\tconst isRefSchema = Is.stringValue(schema.$ref);\n\t\t\tif (isRefSchema && schema.$ref) {\n\t\t\t\tpreservedRefs.add(schema.$ref);\n\t\t\t}\n\n\t\t\tconst objectSchema = IntersectionSchemaMerger.resolveIntersectionObjectSchema(\n\t\t\t\tcontext,\n\t\t\t\tschema,\n\t\t\t\ttoInlineUtilityObjectSchema\n\t\t\t);\n\t\t\tif (!objectSchema) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tobjectSchema.$ref ||\n\t\t\t\tobjectSchema.allOf ||\n\t\t\t\tobjectSchema.anyOf ||\n\t\t\t\tobjectSchema.oneOf ||\n\t\t\t\tobjectSchema.items\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tif (!isRefSchema) {\n\t\t\t\tif (Is.object(objectSchema.properties)) {\n\t\t\t\t\tfor (const [propertyName, propertySchema] of Object.entries(objectSchema.properties)) {\n\t\t\t\t\t\tmergedProperties[propertyName] = propertySchema;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (Is.array(objectSchema.required)) {\n\t\t\t\t\tfor (const propertyName of objectSchema.required) {\n\t\t\t\t\t\tmergedRequired.add(propertyName);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttype: \"object\",\n\t\t\tproperties: Object.keys(mergedProperties).length > 0 ? mergedProperties : undefined,\n\t\t\trequired: mergedRequired.size > 0 ? [...mergedRequired] : undefined,\n\t\t\tallOf:\n\t\t\t\tpreservedRefs.size > 0\n\t\t\t\t\t? [...preservedRefs].map(schemaRef => ({\n\t\t\t\t\t\t\t$ref: schemaRef\n\t\t\t\t\t\t}))\n\t\t\t\t\t: undefined\n\t\t};\n\t}\n\n\t/**\n\t * Resolve an intersection component to a plain object schema when possible.\n\t * @param context The generation context.\n\t * @param schema The mapped intersection component schema.\n\t * @returns The resolved object schema.\n\t * @internal\n\t */\n\tprivate static resolveIntersectionObjectSchema(\n\t\tcontext: ITypeScriptToSchemaContext,\n\t\tschema: IJsonSchema,\n\t\ttoInlineUtilityObjectSchema: (schema: IJsonSchema) => IJsonSchema\n\t): IJsonSchema | undefined {\n\t\tif (schema.type === \"object\" && Is.object(schema.properties)) {\n\t\t\treturn ObjectHelper.clone(schema);\n\t\t}\n\n\t\tif (schema.$ref) {\n\t\t\tfor (const packageSchemas of Object.values(context.schemas)) {\n\t\t\t\tfor (const referencedSchema of Object.values(packageSchemas)) {\n\t\t\t\t\tif (\n\t\t\t\t\t\treferencedSchema.$id === schema.$ref &&\n\t\t\t\t\t\treferencedSchema.type === \"object\" &&\n\t\t\t\t\t\tIs.object(referencedSchema.properties)\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn toInlineUtilityObjectSchema(referencedSchema);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n}\n"]}
1
+ {"version":3,"file":"intersectionSchemaMerger.js","sourceRoot":"","sources":["../../../src/utils/intersectionSchemaMerger.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { Is, ObjectHelper } from \"@twin.org/core\";\nimport type { IJsonSchema } from \"@twin.org/tools-models\";\nimport type { ITypeScriptToSchemaContext } from \"../models/ITypeScriptToSchemaContext.js\";\n\n/**\n * Merges compatible object intersections into a single JSON schema object.\n */\nexport class IntersectionSchemaMerger {\n\t/**\n\t * Merge simple object intersection parts into a single object schema.\n\t * Supports local/known object refs by expanding them before merge.\n\t * @param context The generation context.\n\t * @param schemas The mapped intersection schemas.\n\t * @param toInlineUtilityObjectSchema Callback for converting referenced schemas to inline forms.\n\t * @returns The merged schema, or undefined when merge is not safe.\n\t */\n\tpublic static mergeIntersectionObjectSchemas(\n\t\tcontext: ITypeScriptToSchemaContext,\n\t\tschemas: IJsonSchema[],\n\t\ttoInlineUtilityObjectSchema: (schema: IJsonSchema) => IJsonSchema\n\t): IJsonSchema | undefined {\n\t\tconst mergedProperties: { [id: string]: IJsonSchema } = {};\n\t\tconst mergedRequired = new Set<string>();\n\t\tconst preservedRefs = new Set<string>();\n\n\t\tfor (const schema of schemas) {\n\t\t\tconst isRefSchema = Is.stringValue(schema.$ref);\n\t\t\tif (isRefSchema && schema.$ref) {\n\t\t\t\tpreservedRefs.add(schema.$ref);\n\t\t\t}\n\n\t\t\tconst objectSchema = IntersectionSchemaMerger.resolveIntersectionObjectSchema(\n\t\t\t\tcontext,\n\t\t\t\tschema,\n\t\t\t\ttoInlineUtilityObjectSchema\n\t\t\t);\n\t\t\tif (!objectSchema) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tobjectSchema.$ref ||\n\t\t\t\tobjectSchema.allOf ||\n\t\t\t\tobjectSchema.anyOf ||\n\t\t\t\tobjectSchema.oneOf ||\n\t\t\t\tobjectSchema.items\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tif (!isRefSchema) {\n\t\t\t\tif (Is.object(objectSchema.properties)) {\n\t\t\t\t\tfor (const [propertyName, propertySchema] of Object.entries(objectSchema.properties)) {\n\t\t\t\t\t\tmergedProperties[propertyName] = propertySchema;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (Is.array(objectSchema.required)) {\n\t\t\t\t\tfor (const propertyName of objectSchema.required) {\n\t\t\t\t\t\tmergedRequired.add(propertyName);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttype: \"object\",\n\t\t\tproperties: Object.keys(mergedProperties).length > 0 ? mergedProperties : undefined,\n\t\t\trequired: mergedRequired.size > 0 ? [...mergedRequired] : undefined,\n\t\t\tallOf:\n\t\t\t\tpreservedRefs.size > 0\n\t\t\t\t\t? [...preservedRefs].map(schemaRef => ({\n\t\t\t\t\t\t\t$ref: schemaRef\n\t\t\t\t\t\t}))\n\t\t\t\t\t: undefined\n\t\t};\n\t}\n\n\t/**\n\t * Resolve an intersection component to a plain object schema when possible.\n\t * @param context The generation context.\n\t * @param schema The mapped intersection component schema.\n\t * @param toInlineUtilityObjectSchema A function that inlines a utility object schema.\n\t * @returns The resolved object schema.\n\t * @internal\n\t */\n\tprivate static resolveIntersectionObjectSchema(\n\t\tcontext: ITypeScriptToSchemaContext,\n\t\tschema: IJsonSchema,\n\t\ttoInlineUtilityObjectSchema: (schema: IJsonSchema) => IJsonSchema\n\t): IJsonSchema | undefined {\n\t\tif (schema.type === \"object\" && Is.object(schema.properties)) {\n\t\t\treturn ObjectHelper.clone(schema);\n\t\t}\n\n\t\tif (schema.$ref) {\n\t\t\tfor (const packageSchemas of Object.values(context.schemas)) {\n\t\t\t\tfor (const referencedSchema of Object.values(packageSchemas)) {\n\t\t\t\t\tif (\n\t\t\t\t\t\treferencedSchema.$id === schema.$ref &&\n\t\t\t\t\t\treferencedSchema.type === \"object\" &&\n\t\t\t\t\t\tIs.object(referencedSchema.properties)\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn toInlineUtilityObjectSchema(referencedSchema);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n}\n"]}
@@ -33,6 +33,7 @@ export class JsonSchemaBuilder {
33
33
  static CLASS_NAME = "JsonSchemaBuilder";
34
34
  /**
35
35
  * Dictionary of TypeScript utility type names to their schema mapping handlers.
36
+ * @internal
36
37
  */
37
38
  static _utilityTypeHandlers = {
38
39
  Partial: (context, typeNode) => UtilityTypeSchemaMapper.mapPartialUtilityType(context, typeNode),
@@ -108,6 +109,8 @@ export class JsonSchemaBuilder {
108
109
  JsonLdObjectWithNoContext: (context, typeNode) => UtilityTypeSchemaMapper.mapJsonLdObjectUtilityType(context, typeNode, {
109
110
  keysToRemove: ["@context"]
110
111
  }),
112
+ JsonLdWithAliases: (context, typeNode) => UtilityTypeSchemaMapper.mapJsonLdWithAliasesUtilityType(context, typeNode),
113
+ JsonLdObjectWithAliases: (context, typeNode) => UtilityTypeSchemaMapper.mapJsonLdWithAliasesUtilityType(context, typeNode),
111
114
  SingleOccurrenceArray: (context, typeNode) => UtilityTypeSchemaMapper.mapSingleOccurrenceArrayUtilityType(context, typeNode),
112
115
  ObjectOrArray: (context, typeNode) => UtilityTypeSchemaMapper.mapObjectOrArrayUtilityType(context, typeNode)
113
116
  };