@twin.org/tools-core 0.0.3-next.21 → 0.0.3-next.22

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.
@@ -1,6 +1,5 @@
1
1
  // Copyright 2026 IOTA Stiftung.
2
2
  // SPDX-License-Identifier: Apache-2.0.
3
- /* eslint-disable jsdoc/require-param, jsdoc/require-returns */
4
3
  import { Is, StringHelper } from "@twin.org/core";
5
4
  import * as ts from "typescript";
6
5
  import { DiagnosticReporter } from "./diagnosticReporter.js";
@@ -13,6 +12,9 @@ import { Resolver } from "./resolver.js";
13
12
  export class ImportTypeQuerySchemaResolver {
14
13
  /**
15
14
  * Map import type nodes (e.g. import("pkg").Type) to schema references.
15
+ * @param context The generation context.
16
+ * @param typeNode The import type node.
17
+ * @returns The mapped schema.
16
18
  */
17
19
  static mapImportTypeNodeToSchema(context, typeNode) {
18
20
  if (typeNode.isTypeOf ||
@@ -37,6 +39,9 @@ export class ImportTypeQuerySchemaResolver {
37
39
  }
38
40
  /**
39
41
  * Map a type query node (typeof expr) to schema by resolving the referenced variable.
42
+ * @param context The generation context.
43
+ * @param typeNode The type query node.
44
+ * @returns The mapped schema.
40
45
  */
41
46
  static mapTypeQueryNodeToSchema(context, typeNode) {
42
47
  if (ts.isQualifiedName(typeNode.exprName) && ts.isIdentifier(typeNode.exprName.left)) {
@@ -74,6 +79,11 @@ export class ImportTypeQuerySchemaResolver {
74
79
  }
75
80
  /**
76
81
  * Resolve import-type references to local or external schema ids.
82
+ * @param context The generation context.
83
+ * @param moduleSpecifier The import module specifier.
84
+ * @param typeName The imported type name.
85
+ * @param title The stripped schema title.
86
+ * @returns The resolved schema id.
77
87
  */
78
88
  static resolveImportTypeReferenceSchemaId(context, moduleSpecifier, typeName, title) {
79
89
  const mappedReference = JsonSchemaBuilder.resolveReferenceMappingTarget(context, moduleSpecifier, typeName);
@@ -100,7 +110,7 @@ export class ImportTypeQuerySchemaResolver {
100
110
  if (cachedSchemaId) {
101
111
  return cachedSchemaId;
102
112
  }
103
- const declarationResult = Resolver.resolveTypeDeclarationAst(moduleSpecifier, typeName);
113
+ const declarationResult = Resolver.resolveTypeDeclarationAst(moduleSpecifier, typeName, context.activeSourceFile?.fileName);
104
114
  if (!declarationResult) {
105
115
  return mappedReference?.schemaId;
106
116
  }
@@ -116,6 +126,10 @@ export class ImportTypeQuerySchemaResolver {
116
126
  }
117
127
  /**
118
128
  * Resolve a property value from a const object declaration in an imported source file.
129
+ * @param context The generation context.
130
+ * @param objectName The imported object symbol name.
131
+ * @param propertyName The property name to resolve from the object.
132
+ * @returns The resolved literal property value.
119
133
  */
120
134
  static resolveConstObjectProperty(context, objectName, propertyName) {
121
135
  if (!context.activeSourceFile) {
@@ -153,6 +167,10 @@ export class ImportTypeQuerySchemaResolver {
153
167
  }
154
168
  /**
155
169
  * Find a variable declaration by traversing import and export chains.
170
+ * @param sourceFilePath The source file path to inspect.
171
+ * @param variableName The variable name to find.
172
+ * @param visitedFiles The set of visited files to prevent recursion cycles.
173
+ * @returns The matched variable declaration.
156
174
  */
157
175
  static findVariableDeclarationInModuleGraph(sourceFilePath, variableName, visitedFiles) {
158
176
  const normalizedSourceFilePath = FileUtils.normalizeFilePath(sourceFilePath);
@@ -197,6 +215,9 @@ export class ImportTypeQuerySchemaResolver {
197
215
  }
198
216
  /**
199
217
  * Find an imported symbol reference by local identifier name.
218
+ * @param sourceFile The active source file.
219
+ * @param localName The local identifier name.
220
+ * @returns The imported symbol reference.
200
221
  */
201
222
  static findImportedValueReference(sourceFile, localName) {
202
223
  for (const statement of sourceFile.statements) {
@@ -217,6 +238,9 @@ export class ImportTypeQuerySchemaResolver {
217
238
  }
218
239
  /**
219
240
  * Resolve an import declaration module specifier to a source file.
241
+ * @param containingSourceFilePath The path of the file containing the import declaration.
242
+ * @param moduleSpecifier The module specifier to resolve.
243
+ * @returns The resolved source file path.
220
244
  */
221
245
  static resolveImportDeclarationSourceFile(containingSourceFilePath, moduleSpecifier) {
222
246
  const resolvedContainingSourceFilePath = FileUtils.resolvePath(containingSourceFilePath);
@@ -236,6 +260,9 @@ export class ImportTypeQuerySchemaResolver {
236
260
  }
237
261
  /**
238
262
  * Extract a const-object property value from a declaration initializer.
263
+ * @param objectDeclaration The variable declaration containing the object initializer.
264
+ * @param propertyName The property name to resolve.
265
+ * @returns The extracted literal property value.
239
266
  */
240
267
  static extractConstObjectPropertyFromDeclarationInitializer(objectDeclaration, propertyName) {
241
268
  if (!objectDeclaration.initializer) {
@@ -268,6 +295,9 @@ export class ImportTypeQuerySchemaResolver {
268
295
  }
269
296
  /**
270
297
  * Extract a const-object property value from a declaration type annotation.
298
+ * @param declarationTypeNode The declaration type node to inspect.
299
+ * @param propertyName The property name to resolve.
300
+ * @returns The extracted literal property value.
271
301
  */
272
302
  static extractConstObjectPropertyFromDeclarationType(declarationTypeNode, propertyName) {
273
303
  if (ts.isParenthesizedTypeNode(declarationTypeNode)) {
@@ -300,6 +330,8 @@ export class ImportTypeQuerySchemaResolver {
300
330
  }
301
331
  /**
302
332
  * Extract a literal value from a type node when possible.
333
+ * @param typeNode The type node to inspect.
334
+ * @returns The extracted literal value.
303
335
  */
304
336
  static extractLiteralValueFromTypeNode(typeNode) {
305
337
  if (ts.isLiteralTypeNode(typeNode)) {
@@ -314,6 +346,8 @@ export class ImportTypeQuerySchemaResolver {
314
346
  }
315
347
  /**
316
348
  * Extract a referenced type name from an import type qualifier.
349
+ * @param qualifier The import type qualifier.
350
+ * @returns The extracted type name.
317
351
  */
318
352
  static extractImportTypeName(qualifier) {
319
353
  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.\n/* eslint-disable jsdoc/require-param, jsdoc/require-returns */\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 */\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 */\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 */\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(moduleSpecifier, typeName);\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\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 */\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 */\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 */\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 */\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 */\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 */\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 */\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 */\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\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"]}
@@ -34,81 +34,81 @@ export class JsonSchemaBuilder {
34
34
  * Dictionary of TypeScript utility type names to their schema mapping handlers.
35
35
  */
36
36
  static _utilityTypeHandlers = {
37
- Partial: (context, typeNode) => JsonSchemaBuilder.mapPartialUtilityType(context, typeNode),
38
- Required: (context, typeNode) => JsonSchemaBuilder.mapRequiredUtilityType(context, typeNode),
39
- Pick: (context, typeNode) => JsonSchemaBuilder.mapPickUtilityType(context, typeNode),
40
- Omit: (context, typeNode) => JsonSchemaBuilder.mapOmitUtilityType(context, typeNode),
41
- Exclude: (context, typeNode) => JsonSchemaBuilder.mapExcludeUtilityType(context, typeNode),
42
- Extract: (context, typeNode) => JsonSchemaBuilder.mapExtractUtilityType(context, typeNode),
43
- NonNullable: (context, typeNode) => JsonSchemaBuilder.mapNonNullableUtilityType(context, typeNode),
44
- Record: (context, typeNode) => JsonSchemaBuilder.mapRecordUtilityType(context, typeNode),
45
- JsonLdObjectWithId: (context, typeNode) => JsonSchemaBuilder.mapJsonLdObjectUtilityType(context, typeNode, {
37
+ Partial: (context, typeNode) => UtilityTypeSchemaMapper.mapPartialUtilityType(context, typeNode),
38
+ Required: (context, typeNode) => UtilityTypeSchemaMapper.mapRequiredUtilityType(context, typeNode),
39
+ Pick: (context, typeNode) => UtilityTypeSchemaMapper.mapPickUtilityType(context, typeNode),
40
+ Omit: (context, typeNode) => UtilityTypeSchemaMapper.mapOmitUtilityType(context, typeNode),
41
+ Exclude: (context, typeNode) => UtilityTypeSchemaMapper.mapExcludeUtilityType(context, typeNode),
42
+ Extract: (context, typeNode) => UtilityTypeSchemaMapper.mapExtractUtilityType(context, typeNode),
43
+ NonNullable: (context, typeNode) => UtilityTypeSchemaMapper.mapNonNullableUtilityType(context, typeNode),
44
+ Record: (context, typeNode) => UtilityTypeSchemaMapper.mapRecordUtilityType(context, typeNode),
45
+ JsonLdObjectWithId: (context, typeNode) => UtilityTypeSchemaMapper.mapJsonLdObjectUtilityType(context, typeNode, {
46
46
  keysToRemove: ["id", "@id"],
47
47
  keyToAdd: "id",
48
48
  isAddedKeyRequired: true
49
49
  }),
50
- JsonLdObjectWithAtId: (context, typeNode) => JsonSchemaBuilder.mapJsonLdObjectUtilityType(context, typeNode, {
50
+ JsonLdObjectWithAtId: (context, typeNode) => UtilityTypeSchemaMapper.mapJsonLdObjectUtilityType(context, typeNode, {
51
51
  keysToRemove: ["id", "@id"],
52
52
  keyToAdd: "@id",
53
53
  isAddedKeyRequired: true
54
54
  }),
55
- JsonLdObjectWithOptionalId: (context, typeNode) => JsonSchemaBuilder.mapJsonLdObjectUtilityType(context, typeNode, {
55
+ JsonLdObjectWithOptionalId: (context, typeNode) => UtilityTypeSchemaMapper.mapJsonLdObjectUtilityType(context, typeNode, {
56
56
  keysToRemove: ["id", "@id"],
57
57
  keyToAdd: "id",
58
58
  isAddedKeyRequired: false
59
59
  }),
60
- JsonLdObjectWithOptionalAtId: (context, typeNode) => JsonSchemaBuilder.mapJsonLdObjectUtilityType(context, typeNode, {
60
+ JsonLdObjectWithOptionalAtId: (context, typeNode) => UtilityTypeSchemaMapper.mapJsonLdObjectUtilityType(context, typeNode, {
61
61
  keysToRemove: ["id", "@id"],
62
62
  keyToAdd: "@id",
63
63
  isAddedKeyRequired: false
64
64
  }),
65
- JsonLdObjectWithNoId: (context, typeNode) => JsonSchemaBuilder.mapJsonLdObjectUtilityType(context, typeNode, {
65
+ JsonLdObjectWithNoId: (context, typeNode) => UtilityTypeSchemaMapper.mapJsonLdObjectUtilityType(context, typeNode, {
66
66
  keysToRemove: ["id"]
67
67
  }),
68
- JsonLdObjectWithNoAtId: (context, typeNode) => JsonSchemaBuilder.mapJsonLdObjectUtilityType(context, typeNode, {
68
+ JsonLdObjectWithNoAtId: (context, typeNode) => UtilityTypeSchemaMapper.mapJsonLdObjectUtilityType(context, typeNode, {
69
69
  keysToRemove: ["@id"]
70
70
  }),
71
- JsonLdObjectWithType: (context, typeNode) => JsonSchemaBuilder.mapJsonLdObjectUtilityType(context, typeNode, {
71
+ JsonLdObjectWithType: (context, typeNode) => UtilityTypeSchemaMapper.mapJsonLdObjectUtilityType(context, typeNode, {
72
72
  keysToRemove: ["type", "@type"],
73
73
  keyToAdd: "type",
74
74
  isAddedKeyRequired: true
75
75
  }),
76
- JsonLdObjectWithAtType: (context, typeNode) => JsonSchemaBuilder.mapJsonLdObjectUtilityType(context, typeNode, {
76
+ JsonLdObjectWithAtType: (context, typeNode) => UtilityTypeSchemaMapper.mapJsonLdObjectUtilityType(context, typeNode, {
77
77
  keysToRemove: ["type", "@type"],
78
78
  keyToAdd: "@type",
79
79
  isAddedKeyRequired: true
80
80
  }),
81
- JsonLdObjectWithOptionalType: (context, typeNode) => JsonSchemaBuilder.mapJsonLdObjectUtilityType(context, typeNode, {
81
+ JsonLdObjectWithOptionalType: (context, typeNode) => UtilityTypeSchemaMapper.mapJsonLdObjectUtilityType(context, typeNode, {
82
82
  keysToRemove: ["type", "@type"],
83
83
  keyToAdd: "type",
84
84
  isAddedKeyRequired: false
85
85
  }),
86
- JsonLdObjectWithOptionalAtType: (context, typeNode) => JsonSchemaBuilder.mapJsonLdObjectUtilityType(context, typeNode, {
86
+ JsonLdObjectWithOptionalAtType: (context, typeNode) => UtilityTypeSchemaMapper.mapJsonLdObjectUtilityType(context, typeNode, {
87
87
  keysToRemove: ["type", "@type"],
88
88
  keyToAdd: "@type",
89
89
  isAddedKeyRequired: false
90
90
  }),
91
- JsonLdObjectWithNoType: (context, typeNode) => JsonSchemaBuilder.mapJsonLdObjectUtilityType(context, typeNode, {
91
+ JsonLdObjectWithNoType: (context, typeNode) => UtilityTypeSchemaMapper.mapJsonLdObjectUtilityType(context, typeNode, {
92
92
  keysToRemove: ["type"]
93
93
  }),
94
- JsonLdObjectWithNoAtType: (context, typeNode) => JsonSchemaBuilder.mapJsonLdObjectUtilityType(context, typeNode, {
94
+ JsonLdObjectWithNoAtType: (context, typeNode) => UtilityTypeSchemaMapper.mapJsonLdObjectUtilityType(context, typeNode, {
95
95
  keysToRemove: ["@type"]
96
96
  }),
97
- JsonLdObjectWithContext: (context, typeNode) => JsonSchemaBuilder.mapJsonLdObjectUtilityType(context, typeNode, {
97
+ JsonLdObjectWithContext: (context, typeNode) => UtilityTypeSchemaMapper.mapJsonLdObjectUtilityType(context, typeNode, {
98
98
  keysToRemove: ["@context"],
99
99
  keyToAdd: "@context",
100
100
  isAddedKeyRequired: true
101
101
  }),
102
- JsonLdObjectWithOptionalContext: (context, typeNode) => JsonSchemaBuilder.mapJsonLdObjectUtilityType(context, typeNode, {
102
+ JsonLdObjectWithOptionalContext: (context, typeNode) => UtilityTypeSchemaMapper.mapJsonLdObjectUtilityType(context, typeNode, {
103
103
  keysToRemove: ["@context"],
104
104
  keyToAdd: "@context",
105
105
  isAddedKeyRequired: false
106
106
  }),
107
- JsonLdObjectWithNoContext: (context, typeNode) => JsonSchemaBuilder.mapJsonLdObjectUtilityType(context, typeNode, {
107
+ JsonLdObjectWithNoContext: (context, typeNode) => UtilityTypeSchemaMapper.mapJsonLdObjectUtilityType(context, typeNode, {
108
108
  keysToRemove: ["@context"]
109
109
  }),
110
- SingleOccurrenceArray: (context, typeNode) => JsonSchemaBuilder.mapSingleOccurrenceArrayUtilityType(context, typeNode),
111
- ObjectOrArray: (context, typeNode) => JsonSchemaBuilder.mapObjectOrArrayUtilityType(context, typeNode)
110
+ SingleOccurrenceArray: (context, typeNode) => UtilityTypeSchemaMapper.mapSingleOccurrenceArrayUtilityType(context, typeNode),
111
+ ObjectOrArray: (context, typeNode) => UtilityTypeSchemaMapper.mapObjectOrArrayUtilityType(context, typeNode)
112
112
  };
113
113
  /**
114
114
  * Parse all object declarations from a source file.
@@ -1337,7 +1337,7 @@ export class JsonSchemaBuilder {
1337
1337
  if (cachedSchemaId) {
1338
1338
  return cachedSchemaId;
1339
1339
  }
1340
- const declarationResult = Resolver.resolveTypeDeclarationAst(moduleSpecifier, typeName);
1340
+ const declarationResult = Resolver.resolveTypeDeclarationAst(moduleSpecifier, typeName, context.activeSourceFile?.fileName);
1341
1341
  if (!declarationResult) {
1342
1342
  return mappedReference?.schemaId;
1343
1343
  }
@@ -2107,6 +2107,7 @@ export class JsonSchemaBuilder {
2107
2107
  * @param context The generation context.
2108
2108
  * @param schema The schema to expand.
2109
2109
  * @param declaration The interface declaration.
2110
+ * @throws GeneralError when an extended type cannot be resolved to a schema.
2110
2111
  */
2111
2112
  static applyInterfaceExtendsSchema(context, schema, declaration) {
2112
2113
  const extendsClause = declaration.heritageClauses?.find(clause => clause.token === ts.SyntaxKind.ExtendsKeyword);
@@ -2137,6 +2138,12 @@ export class JsonSchemaBuilder {
2137
2138
  if (mappedSchema) {
2138
2139
  allOfRefs.push(mappedSchema);
2139
2140
  }
2141
+ else {
2142
+ throw new GeneralError(JsonSchemaBuilder.CLASS_NAME, "missingTypeReferenceSchema", {
2143
+ typeName: extendedType.getText(),
2144
+ importSource: ""
2145
+ });
2146
+ }
2140
2147
  }
2141
2148
  else {
2142
2149
  const title = StringHelper.stripPrefix(typeName);
@@ -2151,78 +2158,6 @@ export class JsonSchemaBuilder {
2151
2158
  schema.allOf = allOfRefs;
2152
2159
  }
2153
2160
  }
2154
- /**
2155
- * Map Partial<T> to an object schema with no required properties.
2156
- * @param context The generation context.
2157
- * @param typeNode The Partial type reference.
2158
- * @returns The mapped schema.
2159
- */
2160
- static mapPartialUtilityType(context, typeNode) {
2161
- return UtilityTypeSchemaMapper.mapPartialUtilityType(context, typeNode, (ctx, baseTypeNode) => JsonSchemaBuilder.resolveUtilityBaseObjectSchema(ctx, baseTypeNode));
2162
- }
2163
- /**
2164
- * Map Required<T> to an object schema with all properties required.
2165
- * @param context The generation context.
2166
- * @param typeNode The Required type reference.
2167
- * @returns The mapped schema.
2168
- */
2169
- static mapRequiredUtilityType(context, typeNode) {
2170
- return UtilityTypeSchemaMapper.mapRequiredUtilityType(context, typeNode, (ctx, baseTypeNode) => JsonSchemaBuilder.resolveUtilityBaseObjectSchema(ctx, baseTypeNode));
2171
- }
2172
- /**
2173
- * Map Pick<T, K> to an object schema with selected keys preserved.
2174
- * @param context The generation context.
2175
- * @param typeNode The Pick type reference.
2176
- * @returns The mapped schema.
2177
- */
2178
- static mapPickUtilityType(context, typeNode) {
2179
- return UtilityTypeSchemaMapper.mapPickUtilityType(context, typeNode, (ctx, baseTypeNode) => JsonSchemaBuilder.resolveUtilityBaseObjectSchema(ctx, baseTypeNode), (ctx, keysNode) => JsonSchemaBuilder.extractUtilityTypeKeys(ctx, keysNode));
2180
- }
2181
- /**
2182
- * Map Omit<T, K> to an object schema with selected keys removed.
2183
- * @param context The generation context.
2184
- * @param typeNode The Omit type reference.
2185
- * @returns The mapped schema.
2186
- */
2187
- static mapOmitUtilityType(context, typeNode) {
2188
- return UtilityTypeSchemaMapper.mapOmitUtilityType(context, typeNode, (ctx, baseTypeNode) => JsonSchemaBuilder.resolveUtilityBaseObjectSchema(ctx, baseTypeNode), (ctx, keysNode) => JsonSchemaBuilder.extractUtilityTypeKeys(ctx, keysNode));
2189
- }
2190
- /**
2191
- * Map Exclude<T, U> to a schema that removes U members from T.
2192
- * @param context The generation context.
2193
- * @param typeNode The Exclude type reference.
2194
- * @returns The mapped schema.
2195
- */
2196
- static mapExcludeUtilityType(context, typeNode) {
2197
- return UtilityTypeSchemaMapper.mapExcludeUtilityType(context, typeNode, (ctx, node) => JsonSchemaBuilder.mapTypeNodeToSchema(ctx, node));
2198
- }
2199
- /**
2200
- * Map Extract<T, U> to a schema that keeps U members from T.
2201
- * @param context The generation context.
2202
- * @param typeNode The Extract type reference.
2203
- * @returns The mapped schema.
2204
- */
2205
- static mapExtractUtilityType(context, typeNode) {
2206
- return UtilityTypeSchemaMapper.mapExtractUtilityType(context, typeNode, (ctx, node) => JsonSchemaBuilder.mapTypeNodeToSchema(ctx, node));
2207
- }
2208
- /**
2209
- * Map NonNullable<T> by removing null and undefined branches from T.
2210
- * @param context The generation context.
2211
- * @param typeNode The NonNullable type reference.
2212
- * @returns The mapped schema.
2213
- */
2214
- static mapNonNullableUtilityType(context, typeNode) {
2215
- return UtilityTypeSchemaMapper.mapNonNullableUtilityType(context, typeNode, (ctx, node) => JsonSchemaBuilder.mapTypeNodeToSchema(ctx, node));
2216
- }
2217
- /**
2218
- * Map Record<K, V> to an object schema with key constraints where possible.
2219
- * @param context The generation context.
2220
- * @param typeNode The Record type reference.
2221
- * @returns The mapped schema.
2222
- */
2223
- static mapRecordUtilityType(context, typeNode) {
2224
- return UtilityTypeSchemaMapper.mapRecordUtilityType(context, typeNode, (ctx, node) => JsonSchemaBuilder.mapTypeNodeToSchema(ctx, node));
2225
- }
2226
2161
  /**
2227
2162
  * Determine whether a type node represents null or undefined.
2228
2163
  * @param typeNode The type node.
@@ -2266,19 +2201,6 @@ export class JsonSchemaBuilder {
2266
2201
  }
2267
2202
  return [];
2268
2203
  }
2269
- /**
2270
- * Map JsonLdObject utility types using key-removal and optional key-addition rules.
2271
- * @param context The generation context.
2272
- * @param typeNode The JsonLdObject utility type reference.
2273
- * @param options Mapping options.
2274
- * @param options.keysToRemove Keys to remove from the base schema.
2275
- * @param options.keyToAdd Optional key to add to the base schema.
2276
- * @param options.isAddedKeyRequired Whether the added key should be required.
2277
- * @returns The mapped schema.
2278
- */
2279
- static mapJsonLdObjectUtilityType(context, typeNode, options) {
2280
- return UtilityTypeSchemaMapper.mapJsonLdObjectUtilityType(context, typeNode, options, (ctx, baseTypeNode) => JsonSchemaBuilder.resolveUtilityBaseObjectSchema(ctx, baseTypeNode), (ctx, node) => JsonSchemaBuilder.mapTypeNodeToSchema(ctx, node));
2281
- }
2282
2204
  /**
2283
2205
  * Resolve a default schema for JsonLdObject utility key additions when the type argument is omitted.
2284
2206
  * @param baseSchema The base object schema.
@@ -2352,24 +2274,6 @@ export class JsonSchemaBuilder {
2352
2274
  }
2353
2275
  return fallbackSchema;
2354
2276
  }
2355
- /**
2356
- * Map ObjectOrArray<T> to a schema accepting T or T[].
2357
- * @param context The generation context.
2358
- * @param typeNode The ObjectOrArray type reference.
2359
- * @returns The mapped schema.
2360
- */
2361
- static mapObjectOrArrayUtilityType(context, typeNode) {
2362
- return UtilityTypeSchemaMapper.mapObjectOrArrayUtilityType(context, typeNode, (ctx, node) => JsonSchemaBuilder.mapTypeNodeToSchema(ctx, node));
2363
- }
2364
- /**
2365
- * Map SingleOccurrenceArray<T, U> to a non-empty array containing exactly one U.
2366
- * @param context The generation context.
2367
- * @param typeNode The SingleOccurrenceArray type reference.
2368
- * @returns The mapped schema.
2369
- */
2370
- static mapSingleOccurrenceArrayUtilityType(context, typeNode) {
2371
- return UtilityTypeSchemaMapper.mapSingleOccurrenceArrayUtilityType(context, typeNode, (ctx, node) => JsonSchemaBuilder.mapTypeNodeToSchema(ctx, node));
2372
- }
2373
2277
  /**
2374
2278
  * Add a comment to schemas inlined for utility type transformations.
2375
2279
  * @param schema The schema to annotate.
@@ -2680,7 +2584,7 @@ export class JsonSchemaBuilder {
2680
2584
  const candidateTypeNames = [`I${schemaTitle}`, schemaTitle];
2681
2585
  for (const moduleSpecifier of moduleSpecifiers) {
2682
2586
  for (const candidateTypeName of candidateTypeNames) {
2683
- const declarationResult = Resolver.resolveTypeDeclarationAst(moduleSpecifier, candidateTypeName);
2587
+ const declarationResult = Resolver.resolveTypeDeclarationAst(moduleSpecifier, candidateTypeName, context.activeSourceFile?.fileName);
2684
2588
  if (declarationResult) {
2685
2589
  const mappedReference = JsonSchemaBuilder.resolveReferenceMappingTarget(context, moduleSpecifier, candidateTypeName);
2686
2590
  const externalContext = {
@@ -2803,7 +2707,7 @@ export class JsonSchemaBuilder {
2803
2707
  }
2804
2708
  return undefined;
2805
2709
  }
2806
- const declarationResult = Resolver.resolveTypeDeclarationAst(moduleSpecifier, candidateTypeName);
2710
+ const declarationResult = Resolver.resolveTypeDeclarationAst(moduleSpecifier, candidateTypeName, context.activeSourceFile?.fileName);
2807
2711
  if (!declarationResult) {
2808
2712
  return undefined;
2809
2713
  }
@@ -3229,7 +3133,7 @@ export class JsonSchemaBuilder {
3229
3133
  return cachedSchemaId;
3230
3134
  }
3231
3135
  const mappedReference = JsonSchemaBuilder.resolveReferenceMappingTarget(context, moduleSpecifier, typeName);
3232
- const declarationResult = Resolver.resolveTypeDeclarationAst(moduleSpecifier, typeName);
3136
+ const declarationResult = Resolver.resolveTypeDeclarationAst(moduleSpecifier, typeName, context.activeSourceFile?.fileName);
3233
3137
  if (!declarationResult) {
3234
3138
  return mappedReference?.schemaId;
3235
3139
  }