@sdk-it/core 0.46.2 → 0.46.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"deriver.d.ts","sourceRoot":"","sources":["../../src/lib/deriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,MAAM,YAAY,CAAC;AAKvD,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAErC,eAAO,MAAM,YAAY,eAA0B,CAAC;AACpD,eAAO,MAAM,MAAM,eAAsB,CAAC;AAC1C,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQlD,CAAC;AAOF,wBAAgB,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS,CAW9D;AAED,qBAAa,WAAW;IACtB,SAAgB,SAAS,EAAE,SAAS,CAAM;IAC1C,SAAgB,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC;IACxC,SAAgB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,WAAW,CAAC,CAAU;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+B;gBAE3D,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAmB;IAMxD,QAAQ,CAAC,GAAG,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IAInD,OAAO,CAAC,IAAI;IAeZ,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG;IAIjC,OAAO,CAAC,SAAS;IA0BjB,OAAO,CAAC,iBAAiB;IAqRzB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IA6CxB,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,eAAe;IAiBvB,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG;CAsRlC"}
1
+ {"version":3,"file":"deriver.d.ts","sourceRoot":"","sources":["../../src/lib/deriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,MAAM,YAAY,CAAC;AAIvD,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAErC,eAAO,MAAM,YAAY,eAA0B,CAAC;AACpD,eAAO,MAAM,MAAM,eAAsB,CAAC;AAC1C,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQlD,CAAC;AAOF,wBAAgB,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS,CAW9D;AAED,qBAAa,WAAW;IACtB,SAAgB,SAAS,EAAE,SAAS,CAAM;IAC1C,SAAgB,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC;IACxC,SAAgB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,WAAW,CAAC,CAAU;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+B;gBAE3D,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAmB;IAMxD,QAAQ,CAAC,GAAG,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IAInD,OAAO,CAAC,IAAI;IAeZ,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG;IAIjC,OAAO,CAAC,SAAS;IA0BjB,OAAO,CAAC,iBAAiB;IA2RzB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IA6CxB,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,eAAe;IAiBvB,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG;CAsRlC"}
@@ -1,5 +1,4 @@
1
1
  import ts, { TypeFlags, symbolName } from "typescript";
2
- import { isInterfaceType } from "./program.js";
3
2
  import { sortObjectKeys } from "./utils.js";
4
3
  const deriveSymbol = Symbol.for("serialize");
5
4
  const $types = Symbol.for("types");
@@ -112,11 +111,11 @@ class TypeDeriver {
112
111
  [$types]: []
113
112
  };
114
113
  }
115
- if (type.flags & TypeFlags.Never) {
114
+ if (type.flags & (TypeFlags.Never | TypeFlags.Undefined)) {
116
115
  return {
117
116
  [deriveSymbol]: true,
118
117
  kind: "never",
119
- optional: false,
118
+ optional: (type.flags & TypeFlags.Undefined) !== 0,
120
119
  [$types]: []
121
120
  };
122
121
  }
@@ -259,16 +258,23 @@ class TypeDeriver {
259
258
  }
260
259
  return this.serializeNode(declaration);
261
260
  }
262
- if (isInterfaceType(type)) {
263
- const valueDeclaration = type.symbol.valueDeclaration ?? type.symbol.declarations?.[0];
264
- if (!valueDeclaration) {
265
- return {
266
- [deriveSymbol]: true,
267
- optional: false,
268
- [$types]: [type.symbol.getName()]
269
- };
261
+ if (type.symbol?.flags & ts.SymbolFlags.Interface) {
262
+ const name = type.symbol.getName();
263
+ if (!this.collector[name]) {
264
+ this.collector[name] = {};
265
+ const properties = {};
266
+ for (const property of this.checker.getPropertiesOfType(type)) {
267
+ properties[property.name] = this.serializeType(
268
+ this.checker.getTypeOfSymbol(property)
269
+ );
270
+ }
271
+ this.collector[name] = sortObjectKeys(properties);
270
272
  }
271
- return this.serializeNode(valueDeclaration);
273
+ return {
274
+ [deriveSymbol]: true,
275
+ optional: false,
276
+ [$types]: [`#/components/schemas/${name}`]
277
+ };
272
278
  }
273
279
  if (type.flags & TypeFlags.Object) {
274
280
  if (this.typesMap[symbolName(type.symbol)]) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/lib/deriver.ts"],
4
- "sourcesContent": ["import ts, { TypeFlags, symbolName } from 'typescript';\n\nimport { isInterfaceType } from './program.js';\nimport { sortObjectKeys } from './utils.js';\n\ntype Collector = Record<string, any>;\n\nexport const deriveSymbol = Symbol.for('serialize');\nexport const $types = Symbol.for('types');\nexport const defaultTypesMap: Record<string, string> = {\n Readable: 'any',\n ReadableStream: 'any',\n DateConstructor: 'string',\n ArrayBufferConstructor: 'any',\n SharedArrayBufferConstructor: 'any',\n Int8ArrayConstructor: 'any',\n Uint8Array: 'any',\n};\n\ninterface TraceContext {\n file?: string;\n operation?: string;\n}\n\nexport function nodeLocation(node: ts.Node): string | undefined {\n try {\n const sourceFile = node.getSourceFile();\n if (!sourceFile) return undefined;\n const { line, character } = sourceFile.getLineAndCharacterOfPosition(\n node.getStart(),\n );\n return `${sourceFile.fileName}:${line + 1}:${character + 1}`;\n } catch {\n return undefined;\n }\n}\n\nexport class TypeDeriver {\n public readonly collector: Collector = {};\n public readonly checker: ts.TypeChecker;\n public readonly typesMap: Record<string, string>;\n private trace: TraceContext = {};\n private currentNode?: ts.Node;\n private readonly activeAliases = new Map<ts.Type, boolean>();\n constructor(\n checker: ts.TypeChecker,\n typeMappings: Record<string, string> = defaultTypesMap,\n ) {\n this.checker = checker;\n this.typesMap = typeMappings;\n }\n\n setTrace(ctx: { file?: string; operation?: string }) {\n this.trace = { ...ctx };\n }\n\n private warn(message: string, node?: ts.Node) {\n const parts = [`\\x1b[33m\\u26a0 ${message}\\x1b[0m`];\n const resolvedNode = node ?? this.currentNode;\n const location = resolvedNode ? nodeLocation(resolvedNode) : undefined;\n if (location) {\n parts.push(` at \\x1b[36m${location}\\x1b[0m`);\n } else if (this.trace.file) {\n parts.push(` at \\x1b[36m${this.trace.file}\\x1b[0m`);\n }\n if (this.trace.operation) {\n parts.push(` in \\x1b[2m${this.trace.operation}\\x1b[0m`);\n }\n console.warn(parts.join('\\n'));\n }\n\n serializeType(type: ts.Type): any {\n return this.serialize(type, false);\n }\n\n private serialize(type: ts.Type, widenLiteralValues: boolean): unknown {\n const alias = type.aliasSymbol?.getName();\n if (!alias) {\n return this.serializeResolved(type, widenLiteralValues);\n }\n if (this.activeAliases.has(type)) {\n this.activeAliases.set(type, true);\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [`#/components/schemas/${alias}`],\n };\n }\n\n this.activeAliases.set(type, false);\n try {\n const result = this.serializeResolved(type, widenLiteralValues);\n if (this.activeAliases.get(type)) {\n this.collector[alias] = result;\n }\n return result;\n } finally {\n this.activeAliases.delete(type);\n }\n }\n\n private serializeResolved(\n type: ts.Type,\n widenLiteralValues: boolean,\n ): unknown {\n if (this.typesMap[type.aliasSymbol?.getName() || type.symbol?.getName()]) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [\n this.typesMap[type.aliasSymbol?.getName() || type.symbol?.getName()],\n ],\n };\n }\n const indexType = type.getStringIndexType();\n if (indexType) {\n return {\n [deriveSymbol]: true,\n kind: 'record',\n optional: false,\n [$types]: [this.serialize(indexType, widenLiteralValues)],\n };\n }\n if (type.flags & TypeFlags.Any) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [],\n };\n }\n if (type.flags & TypeFlags.Unknown) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [],\n };\n }\n if (type.flags & TypeFlags.Never) {\n return {\n [deriveSymbol]: true,\n kind: 'never',\n optional: false,\n [$types]: [],\n };\n }\n if (type.isStringLiteral()) {\n return {\n [deriveSymbol]: true,\n optional: false,\n ...(widenLiteralValues ? {} : { kind: 'literal', value: type.value }),\n [$types]: ['string'],\n };\n }\n if (type.isNumberLiteral()) {\n return {\n [deriveSymbol]: true,\n optional: false,\n ...(widenLiteralValues ? {} : { kind: 'literal', value: type.value }),\n [$types]: ['number'],\n };\n }\n if (type.flags & TypeFlags.BooleanLiteral) {\n return {\n [deriveSymbol]: true,\n optional: false,\n ...(widenLiteralValues\n ? {}\n : {\n kind: 'literal',\n value: this.checker.typeToString(type) === 'true',\n }),\n [$types]: ['boolean'],\n };\n }\n if (type.flags & TypeFlags.TemplateLiteral) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['string'],\n };\n }\n if (type.flags & TypeFlags.String) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['string'],\n };\n }\n if (type.flags & TypeFlags.Number) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['number'],\n };\n }\n if (type.flags & ts.TypeFlags.Boolean) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['boolean'],\n };\n }\n if (type.flags & TypeFlags.Null) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['null'],\n };\n }\n if (type.isIntersection()) {\n let optional: boolean | undefined;\n const types: any[] = [];\n for (const intersectionType of type.types) {\n if (optional === undefined) {\n optional = (intersectionType.flags & ts.TypeFlags.Undefined) !== 0;\n if (optional) {\n continue;\n }\n }\n\n types.push(this.serialize(intersectionType, widenLiteralValues));\n }\n return {\n [deriveSymbol]: true,\n kind: 'intersection',\n optional,\n [$types]: types,\n };\n }\n if (type.isUnion()) {\n let optional: boolean | undefined;\n const types: any[] = [];\n for (const unionType of type.types) {\n if (optional === undefined) {\n // ignore undefined\n optional = (unionType.flags & ts.TypeFlags.Undefined) !== 0;\n if (optional) {\n continue;\n }\n }\n\n types.push(this.serialize(unionType, widenLiteralValues));\n }\n return {\n [deriveSymbol]: true,\n kind: 'union',\n optional,\n [$types]: types,\n };\n }\n if (this.checker.isArrayLikeType(type)) {\n const elementType = this.checker.getIndexTypeOfType(\n type,\n ts.IndexKind.Number,\n );\n if (!elementType) {\n const typeName = type.symbol?.getName() || '<unknown>';\n this.warn(`Could not find element type for array type ${typeName}`);\n return {\n [deriveSymbol]: true,\n optional: false,\n kind: 'array',\n [$types]: ['any'],\n };\n }\n const mappedElementType =\n this.typesMap[\n elementType.aliasSymbol?.getName() || elementType.symbol?.getName()\n ];\n return {\n kind: 'array',\n optional: false,\n [deriveSymbol]: true,\n [$types]: mappedElementType\n ? [mappedElementType]\n : [\n this.serialize(\n elementType,\n widenLiteralValues || this.checker.isTupleType(type),\n ),\n ],\n };\n }\n if (type.isClass()) {\n const declaration = type.symbol?.valueDeclaration;\n if (!declaration) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [type.symbol.getName()],\n };\n }\n return this.serializeNode(declaration);\n }\n if (isInterfaceType(type)) {\n const valueDeclaration =\n type.symbol.valueDeclaration ?? type.symbol.declarations?.[0];\n if (!valueDeclaration) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [type.symbol.getName()],\n };\n }\n return this.serializeNode(valueDeclaration);\n }\n if (type.flags & TypeFlags.Object) {\n if (this.typesMap[symbolName(type.symbol)]) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [this.typesMap[symbolName(type.symbol)]],\n };\n }\n const properties = this.checker.getPropertiesOfType(type);\n if (properties.length > 0) {\n const serializedProps: Record<string, any> = {};\n for (const prop of properties) {\n const declarations = prop.getDeclarations() ?? [];\n const propAssingment = declarations.find((it) =>\n ts.isPropertyAssignment(it),\n );\n const shorthand = declarations.find((it) =>\n ts.isShorthandPropertyAssignment(it),\n );\n const shorthandType = shorthand\n ? this.typeOfShorthand(shorthand)\n : undefined;\n // get literal properties values if any\n if (propAssingment) {\n serializedProps[prop.name] = this.serialize(\n this.typeOfExpression(propAssingment.initializer),\n widenLiteralValues,\n );\n } else if (shorthandType) {\n serializedProps[prop.name] = this.serialize(\n shorthandType,\n widenLiteralValues,\n );\n } else {\n const propType = this.checker.getTypeOfSymbol(prop);\n serializedProps[prop.name] = this.serializeType(propType);\n }\n }\n return {\n [deriveSymbol]: true,\n kind: 'object',\n optional: false,\n [$types]: [sortObjectKeys(serializedProps)],\n };\n }\n const declaration =\n type.symbol.valueDeclaration ?? type.symbol.declarations?.[0];\n if (!declaration) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [type.symbol.getName()],\n };\n }\n return this.serializeNode(declaration);\n }\n\n this.warn(`Unhandled type: ${type.flags} ${ts.TypeFlags[type.flags]}`);\n\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [\n this.checker.typeToString(\n type,\n undefined,\n ts.TypeFormatFlags.NoTruncation,\n ),\n ],\n };\n }\n\n /**\n * Preserve the inferred type of `satisfies` expressions unless the operand is\n * an empty array; only then recover its declared element type.\n */\n private typeOfExpression(\n node: ts.Expression,\n seen = new Set<ts.Symbol>(),\n ): ts.Type {\n const satisfies = this.emptyArraySatisfies(node);\n if (satisfies) {\n return this.checker.getTypeFromTypeNode(satisfies.type);\n }\n let expression = node;\n while (ts.isParenthesizedExpression(expression)) {\n expression = expression.expression;\n }\n\n if (ts.isIdentifier(expression)) {\n const symbol = this.checker.getSymbolAtLocation(expression);\n const declaration = symbol?.valueDeclaration ?? symbol?.declarations?.[0];\n if (\n symbol &&\n !seen.has(symbol) &&\n declaration &&\n ts.isVariableDeclaration(declaration) &&\n ts.isVariableDeclarationList(declaration.parent) &&\n declaration.parent.flags & ts.NodeFlags.Const\n ) {\n seen.add(symbol);\n if (declaration.type) {\n return this.checker.getTypeFromTypeNode(declaration.type);\n }\n if (declaration.initializer) {\n return this.typeOfExpression(declaration.initializer, seen);\n }\n }\n }\n\n if (\n ts.isArrayLiteralExpression(expression) &&\n expression.elements.length === 1 &&\n ts.isSpreadElement(expression.elements[0])\n ) {\n return this.typeOfExpression(expression.elements[0].expression, seen);\n }\n\n return this.checker.getTypeAtLocation(expression);\n }\n\n private emptyArraySatisfies(\n node: ts.Expression,\n ): ts.SatisfiesExpression | undefined {\n let expression = node;\n while (ts.isParenthesizedExpression(expression)) {\n expression = expression.expression;\n }\n if (!ts.isSatisfiesExpression(expression)) {\n return undefined;\n }\n let operand = expression.expression;\n while (ts.isParenthesizedExpression(operand)) {\n operand = operand.expression;\n }\n if (!ts.isArrayLiteralExpression(operand) || operand.elements.length > 0) {\n return undefined;\n }\n const annotation = this.checker.getTypeFromTypeNode(expression.type);\n return this.checker.isArrayLikeType(annotation) ? expression : undefined;\n }\n\n private typeOfShorthand(\n node: ts.ShorthandPropertyAssignment,\n ): ts.Type | undefined {\n const symbol = this.checker.getShorthandAssignmentValueSymbol(node);\n const declaration = symbol?.valueDeclaration ?? symbol?.declarations?.[0];\n if (\n !declaration ||\n !ts.isVariableDeclaration(declaration) ||\n !declaration.initializer\n ) {\n return undefined;\n }\n return this.emptyArraySatisfies(declaration.initializer)\n ? this.typeOfExpression(declaration.initializer)\n : this.checker.getTypeAtLocation(node.name);\n }\n\n serializeNode(node: ts.Node): any {\n this.currentNode = node;\n if (ts.isObjectLiteralExpression(node)) {\n const symbolType = this.checker.getTypeAtLocation(node);\n const props: Record<string, any> = {};\n\n for (const prop of node.properties) {\n if (ts.isPropertyAssignment(prop)) {\n props[prop.name.getText()] = this.serializeType(\n this.typeOfExpression(prop.initializer),\n );\n } else if (ts.isShorthandPropertyAssignment(prop)) {\n const type = this.typeOfShorthand(prop);\n if (type) {\n props[prop.name.text] = this.serializeType(type);\n }\n }\n }\n\n for (const symbol of symbolType.getProperties()) {\n if (!Object.hasOwn(props, symbol.name)) {\n const type = this.checker.getTypeOfSymbol(symbol);\n props[symbol.name] = this.serializeType(type);\n }\n }\n\n return sortObjectKeys(props);\n }\n if (ts.isPropertyAccessExpression(node)) {\n const symbol = this.checker.getSymbolAtLocation(node.name);\n if (!symbol) {\n this.warn(`No symbol found for ${node.name.getText()}`, node);\n return null;\n }\n const type = this.checker.getTypeOfSymbol(symbol);\n return this.serializeType(type);\n }\n if (ts.isPropertySignature(node)) {\n const symbol = this.checker.getSymbolAtLocation(node.name);\n if (!symbol) {\n this.warn(`No symbol found for ${node.name.getText()}`, node);\n return null;\n }\n const type = this.checker.getTypeOfSymbol(symbol);\n return this.serializeType(type);\n }\n if (ts.isPropertyDeclaration(node)) {\n const symbol = this.checker.getSymbolAtLocation(node.name);\n if (!symbol) {\n this.warn(`No symbol found for ${node.name.getText()}`, node);\n return null;\n }\n const type = this.checker.getTypeOfSymbol(symbol);\n return this.serializeType(type);\n }\n if (ts.isInterfaceDeclaration(node)) {\n if (!node.name?.text) {\n throw new Error('Interface has no name');\n }\n if (this.typesMap[node.name.text]) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [this.typesMap[node.name.text]],\n };\n }\n if (!this.collector[node.name.text]) {\n this.collector[node.name.text] = {};\n const members: Record<string, any> = {};\n for (const member of node.members.filter(ts.isPropertySignature)) {\n members[member.name.getText()] = this.serializeNode(member);\n }\n this.collector[node.name.text] = sortObjectKeys(members);\n }\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [`#/components/schemas/${node.name.text}`],\n };\n }\n if (ts.isClassDeclaration(node)) {\n if (!node.name?.text) {\n throw new Error('Class has no name');\n }\n if (this.typesMap[node.name.text]) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [this.typesMap[node.name.text]],\n };\n }\n\n if (!this.collector[node.name.text]) {\n this.collector[node.name.text] = {};\n const members: Record<string, unknown> = {};\n for (const member of node.members.filter(ts.isPropertyDeclaration)) {\n members[member.name!.getText()] = this.serializeNode(member);\n }\n this.collector[node.name.text] = sortObjectKeys(members);\n }\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [`#/components/schemas/${node.name.text}`],\n $ref: `#/components/schemas/${node.name.text}`,\n };\n }\n if (ts.isVariableDeclaration(node)) {\n const symbol = this.checker.getSymbolAtLocation(node.name);\n if (!symbol) {\n this.warn(`No symbol found for ${node.name.getText()}`, node);\n return null;\n }\n if (!node.type) {\n this.warn(`No type found for ${node.name.getText()}`, node);\n return 'any';\n }\n const type = this.checker.getTypeFromTypeNode(node.type);\n return this.serializeType(type);\n }\n if (ts.isIdentifier(node)) {\n const symbol = this.checker.getSymbolAtLocation(node);\n if (!symbol) {\n this.warn(`No symbol found for identifier ${node.getText()}`, node);\n return null;\n }\n const type = this.typeOfExpression(node);\n return this.serializeType(type);\n }\n if (ts.isAwaitExpression(node)) {\n const type = this.checker.getTypeAtLocation(node);\n return this.serializeType(type);\n }\n if (ts.isCallExpression(node)) {\n const type = this.checker.getTypeAtLocation(node);\n return this.serializeType(type);\n }\n if (ts.isAsExpression(node)) {\n const type = this.checker.getTypeAtLocation(node);\n return this.serializeType(type);\n }\n if (ts.isSatisfiesExpression(node)) {\n return this.serializeType(this.typeOfExpression(node));\n }\n if (ts.isTypeLiteralNode(node)) {\n const symbolType = this.checker.getTypeAtLocation(node);\n const props: Record<string, unknown> = {};\n for (const symbol of symbolType.getProperties()) {\n const type = this.checker.getTypeOfSymbol(symbol);\n props[symbol.name] = this.serializeType(type);\n }\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [sortObjectKeys(props)],\n };\n }\n if (node.kind === ts.SyntaxKind.NullKeyword) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['null'],\n };\n }\n if (node.kind === ts.SyntaxKind.BooleanKeyword) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['boolean'],\n };\n }\n if (node.kind === ts.SyntaxKind.TrueKeyword) {\n return {\n [deriveSymbol]: true,\n optional: false,\n kind: 'literal',\n value: true,\n [$types]: ['boolean'],\n };\n }\n if (node.kind === ts.SyntaxKind.FalseKeyword) {\n return {\n [deriveSymbol]: true,\n optional: false,\n kind: 'literal',\n value: false,\n [$types]: ['boolean'],\n };\n }\n if (ts.isFunctionDeclaration(node)) {\n if (!node.name) {\n this.warn('Function declaration has no name', node);\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['any'],\n };\n }\n\n const functionName = node.name.text;\n if (this.typesMap[functionName]) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [this.typesMap[functionName]],\n };\n }\n\n if (node.type) {\n const returnType = this.checker.getTypeFromTypeNode(node.type);\n return this.serializeType(returnType);\n }\n\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['any'],\n };\n }\n if (ts.isArrayLiteralExpression(node)) {\n const type = this.typeOfExpression(node);\n return this.serializeType(type);\n }\n if (ts.isStringLiteral(node) || ts.isNumericLiteral(node)) {\n const type = this.checker.getTypeAtLocation(node);\n return this.serializeType(type);\n }\n // Handle template literals in expression position\n if (\n ts.isTemplateExpression(node) ||\n ts.isNoSubstitutionTemplateLiteral(node)\n ) {\n const type = this.checker.getTypeAtLocation(node);\n return this.serializeType(type);\n }\n if (ts.isTaggedTemplateExpression(node)) {\n const type = this.checker.getTypeAtLocation(node);\n return this.serializeType(type);\n }\n\n // Handle binary expressions (||, &&, +, -, etc.)\n if (ts.isBinaryExpression(node)) {\n const type = this.checker.getTypeAtLocation(node);\n return this.serializeType(type);\n }\n\n // Handle conditional/ternary expressions (x ? y : z)\n if (ts.isConditionalExpression(node)) {\n const type = this.checker.getTypeAtLocation(node);\n return this.serializeType(type);\n }\n\n // Handle parenthesized expressions ((value))\n if (ts.isParenthesizedExpression(node)) {\n return this.serializeType(this.typeOfExpression(node));\n }\n\n // Handle non-null assertions (value!)\n if (ts.isNonNullExpression(node)) {\n const type = this.checker.getTypeAtLocation(node);\n return this.serializeType(type);\n }\n\n this.warn(\n `Unhandled node: ${ts.SyntaxKind[node.kind]} \"${node.getText()}\" (type: ${this.checker.typeToString(\n this.checker.getTypeAtLocation(node),\n undefined,\n ts.TypeFormatFlags.NoTruncation,\n )})`,\n node,\n );\n\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['any'],\n };\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import ts, { TypeFlags, symbolName } from 'typescript';\n\nimport { sortObjectKeys } from './utils.js';\n\ntype Collector = Record<string, any>;\n\nexport const deriveSymbol = Symbol.for('serialize');\nexport const $types = Symbol.for('types');\nexport const defaultTypesMap: Record<string, string> = {\n Readable: 'any',\n ReadableStream: 'any',\n DateConstructor: 'string',\n ArrayBufferConstructor: 'any',\n SharedArrayBufferConstructor: 'any',\n Int8ArrayConstructor: 'any',\n Uint8Array: 'any',\n};\n\ninterface TraceContext {\n file?: string;\n operation?: string;\n}\n\nexport function nodeLocation(node: ts.Node): string | undefined {\n try {\n const sourceFile = node.getSourceFile();\n if (!sourceFile) return undefined;\n const { line, character } = sourceFile.getLineAndCharacterOfPosition(\n node.getStart(),\n );\n return `${sourceFile.fileName}:${line + 1}:${character + 1}`;\n } catch {\n return undefined;\n }\n}\n\nexport class TypeDeriver {\n public readonly collector: Collector = {};\n public readonly checker: ts.TypeChecker;\n public readonly typesMap: Record<string, string>;\n private trace: TraceContext = {};\n private currentNode?: ts.Node;\n private readonly activeAliases = new Map<ts.Type, boolean>();\n constructor(\n checker: ts.TypeChecker,\n typeMappings: Record<string, string> = defaultTypesMap,\n ) {\n this.checker = checker;\n this.typesMap = typeMappings;\n }\n\n setTrace(ctx: { file?: string; operation?: string }) {\n this.trace = { ...ctx };\n }\n\n private warn(message: string, node?: ts.Node) {\n const parts = [`\\x1b[33m\\u26a0 ${message}\\x1b[0m`];\n const resolvedNode = node ?? this.currentNode;\n const location = resolvedNode ? nodeLocation(resolvedNode) : undefined;\n if (location) {\n parts.push(` at \\x1b[36m${location}\\x1b[0m`);\n } else if (this.trace.file) {\n parts.push(` at \\x1b[36m${this.trace.file}\\x1b[0m`);\n }\n if (this.trace.operation) {\n parts.push(` in \\x1b[2m${this.trace.operation}\\x1b[0m`);\n }\n console.warn(parts.join('\\n'));\n }\n\n serializeType(type: ts.Type): any {\n return this.serialize(type, false);\n }\n\n private serialize(type: ts.Type, widenLiteralValues: boolean): unknown {\n const alias = type.aliasSymbol?.getName();\n if (!alias) {\n return this.serializeResolved(type, widenLiteralValues);\n }\n if (this.activeAliases.has(type)) {\n this.activeAliases.set(type, true);\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [`#/components/schemas/${alias}`],\n };\n }\n\n this.activeAliases.set(type, false);\n try {\n const result = this.serializeResolved(type, widenLiteralValues);\n if (this.activeAliases.get(type)) {\n this.collector[alias] = result;\n }\n return result;\n } finally {\n this.activeAliases.delete(type);\n }\n }\n\n private serializeResolved(\n type: ts.Type,\n widenLiteralValues: boolean,\n ): unknown {\n if (this.typesMap[type.aliasSymbol?.getName() || type.symbol?.getName()]) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [\n this.typesMap[type.aliasSymbol?.getName() || type.symbol?.getName()],\n ],\n };\n }\n const indexType = type.getStringIndexType();\n if (indexType) {\n return {\n [deriveSymbol]: true,\n kind: 'record',\n optional: false,\n [$types]: [this.serialize(indexType, widenLiteralValues)],\n };\n }\n if (type.flags & TypeFlags.Any) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [],\n };\n }\n if (type.flags & TypeFlags.Unknown) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [],\n };\n }\n if (type.flags & (TypeFlags.Never | TypeFlags.Undefined)) {\n return {\n [deriveSymbol]: true,\n kind: 'never',\n optional: (type.flags & TypeFlags.Undefined) !== 0,\n [$types]: [],\n };\n }\n if (type.isStringLiteral()) {\n return {\n [deriveSymbol]: true,\n optional: false,\n ...(widenLiteralValues ? {} : { kind: 'literal', value: type.value }),\n [$types]: ['string'],\n };\n }\n if (type.isNumberLiteral()) {\n return {\n [deriveSymbol]: true,\n optional: false,\n ...(widenLiteralValues ? {} : { kind: 'literal', value: type.value }),\n [$types]: ['number'],\n };\n }\n if (type.flags & TypeFlags.BooleanLiteral) {\n return {\n [deriveSymbol]: true,\n optional: false,\n ...(widenLiteralValues\n ? {}\n : {\n kind: 'literal',\n value: this.checker.typeToString(type) === 'true',\n }),\n [$types]: ['boolean'],\n };\n }\n if (type.flags & TypeFlags.TemplateLiteral) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['string'],\n };\n }\n if (type.flags & TypeFlags.String) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['string'],\n };\n }\n if (type.flags & TypeFlags.Number) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['number'],\n };\n }\n if (type.flags & ts.TypeFlags.Boolean) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['boolean'],\n };\n }\n if (type.flags & TypeFlags.Null) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['null'],\n };\n }\n if (type.isIntersection()) {\n let optional: boolean | undefined;\n const types: any[] = [];\n for (const intersectionType of type.types) {\n if (optional === undefined) {\n optional = (intersectionType.flags & ts.TypeFlags.Undefined) !== 0;\n if (optional) {\n continue;\n }\n }\n\n types.push(this.serialize(intersectionType, widenLiteralValues));\n }\n return {\n [deriveSymbol]: true,\n kind: 'intersection',\n optional,\n [$types]: types,\n };\n }\n if (type.isUnion()) {\n let optional: boolean | undefined;\n const types: any[] = [];\n for (const unionType of type.types) {\n if (optional === undefined) {\n // ignore undefined\n optional = (unionType.flags & ts.TypeFlags.Undefined) !== 0;\n if (optional) {\n continue;\n }\n }\n\n types.push(this.serialize(unionType, widenLiteralValues));\n }\n return {\n [deriveSymbol]: true,\n kind: 'union',\n optional,\n [$types]: types,\n };\n }\n if (this.checker.isArrayLikeType(type)) {\n const elementType = this.checker.getIndexTypeOfType(\n type,\n ts.IndexKind.Number,\n );\n if (!elementType) {\n const typeName = type.symbol?.getName() || '<unknown>';\n this.warn(`Could not find element type for array type ${typeName}`);\n return {\n [deriveSymbol]: true,\n optional: false,\n kind: 'array',\n [$types]: ['any'],\n };\n }\n const mappedElementType =\n this.typesMap[\n elementType.aliasSymbol?.getName() || elementType.symbol?.getName()\n ];\n return {\n kind: 'array',\n optional: false,\n [deriveSymbol]: true,\n [$types]: mappedElementType\n ? [mappedElementType]\n : [\n this.serialize(\n elementType,\n widenLiteralValues || this.checker.isTupleType(type),\n ),\n ],\n };\n }\n if (type.isClass()) {\n const declaration = type.symbol?.valueDeclaration;\n if (!declaration) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [type.symbol.getName()],\n };\n }\n return this.serializeNode(declaration);\n }\n if (type.symbol?.flags & ts.SymbolFlags.Interface) {\n const name = type.symbol.getName();\n if (!this.collector[name]) {\n this.collector[name] = {};\n const properties: Record<string, unknown> = {};\n for (const property of this.checker.getPropertiesOfType(type)) {\n properties[property.name] = this.serializeType(\n this.checker.getTypeOfSymbol(property),\n );\n }\n this.collector[name] = sortObjectKeys(properties);\n }\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [`#/components/schemas/${name}`],\n };\n }\n if (type.flags & TypeFlags.Object) {\n if (this.typesMap[symbolName(type.symbol)]) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [this.typesMap[symbolName(type.symbol)]],\n };\n }\n const properties = this.checker.getPropertiesOfType(type);\n if (properties.length > 0) {\n const serializedProps: Record<string, any> = {};\n for (const prop of properties) {\n const declarations = prop.getDeclarations() ?? [];\n const propAssingment = declarations.find((it) =>\n ts.isPropertyAssignment(it),\n );\n const shorthand = declarations.find((it) =>\n ts.isShorthandPropertyAssignment(it),\n );\n const shorthandType = shorthand\n ? this.typeOfShorthand(shorthand)\n : undefined;\n // get literal properties values if any\n if (propAssingment) {\n serializedProps[prop.name] = this.serialize(\n this.typeOfExpression(propAssingment.initializer),\n widenLiteralValues,\n );\n } else if (shorthandType) {\n serializedProps[prop.name] = this.serialize(\n shorthandType,\n widenLiteralValues,\n );\n } else {\n const propType = this.checker.getTypeOfSymbol(prop);\n serializedProps[prop.name] = this.serializeType(propType);\n }\n }\n return {\n [deriveSymbol]: true,\n kind: 'object',\n optional: false,\n [$types]: [sortObjectKeys(serializedProps)],\n };\n }\n const declaration =\n type.symbol.valueDeclaration ?? type.symbol.declarations?.[0];\n if (!declaration) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [type.symbol.getName()],\n };\n }\n return this.serializeNode(declaration);\n }\n\n this.warn(`Unhandled type: ${type.flags} ${ts.TypeFlags[type.flags]}`);\n\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [\n this.checker.typeToString(\n type,\n undefined,\n ts.TypeFormatFlags.NoTruncation,\n ),\n ],\n };\n }\n\n /**\n * Preserve the inferred type of `satisfies` expressions unless the operand is\n * an empty array; only then recover its declared element type.\n */\n private typeOfExpression(\n node: ts.Expression,\n seen = new Set<ts.Symbol>(),\n ): ts.Type {\n const satisfies = this.emptyArraySatisfies(node);\n if (satisfies) {\n return this.checker.getTypeFromTypeNode(satisfies.type);\n }\n let expression = node;\n while (ts.isParenthesizedExpression(expression)) {\n expression = expression.expression;\n }\n\n if (ts.isIdentifier(expression)) {\n const symbol = this.checker.getSymbolAtLocation(expression);\n const declaration = symbol?.valueDeclaration ?? symbol?.declarations?.[0];\n if (\n symbol &&\n !seen.has(symbol) &&\n declaration &&\n ts.isVariableDeclaration(declaration) &&\n ts.isVariableDeclarationList(declaration.parent) &&\n declaration.parent.flags & ts.NodeFlags.Const\n ) {\n seen.add(symbol);\n if (declaration.type) {\n return this.checker.getTypeFromTypeNode(declaration.type);\n }\n if (declaration.initializer) {\n return this.typeOfExpression(declaration.initializer, seen);\n }\n }\n }\n\n if (\n ts.isArrayLiteralExpression(expression) &&\n expression.elements.length === 1 &&\n ts.isSpreadElement(expression.elements[0])\n ) {\n return this.typeOfExpression(expression.elements[0].expression, seen);\n }\n\n return this.checker.getTypeAtLocation(expression);\n }\n\n private emptyArraySatisfies(\n node: ts.Expression,\n ): ts.SatisfiesExpression | undefined {\n let expression = node;\n while (ts.isParenthesizedExpression(expression)) {\n expression = expression.expression;\n }\n if (!ts.isSatisfiesExpression(expression)) {\n return undefined;\n }\n let operand = expression.expression;\n while (ts.isParenthesizedExpression(operand)) {\n operand = operand.expression;\n }\n if (!ts.isArrayLiteralExpression(operand) || operand.elements.length > 0) {\n return undefined;\n }\n const annotation = this.checker.getTypeFromTypeNode(expression.type);\n return this.checker.isArrayLikeType(annotation) ? expression : undefined;\n }\n\n private typeOfShorthand(\n node: ts.ShorthandPropertyAssignment,\n ): ts.Type | undefined {\n const symbol = this.checker.getShorthandAssignmentValueSymbol(node);\n const declaration = symbol?.valueDeclaration ?? symbol?.declarations?.[0];\n if (\n !declaration ||\n !ts.isVariableDeclaration(declaration) ||\n !declaration.initializer\n ) {\n return undefined;\n }\n return this.emptyArraySatisfies(declaration.initializer)\n ? this.typeOfExpression(declaration.initializer)\n : this.checker.getTypeAtLocation(node.name);\n }\n\n serializeNode(node: ts.Node): any {\n this.currentNode = node;\n if (ts.isObjectLiteralExpression(node)) {\n const symbolType = this.checker.getTypeAtLocation(node);\n const props: Record<string, any> = {};\n\n for (const prop of node.properties) {\n if (ts.isPropertyAssignment(prop)) {\n props[prop.name.getText()] = this.serializeType(\n this.typeOfExpression(prop.initializer),\n );\n } else if (ts.isShorthandPropertyAssignment(prop)) {\n const type = this.typeOfShorthand(prop);\n if (type) {\n props[prop.name.text] = this.serializeType(type);\n }\n }\n }\n\n for (const symbol of symbolType.getProperties()) {\n if (!Object.hasOwn(props, symbol.name)) {\n const type = this.checker.getTypeOfSymbol(symbol);\n props[symbol.name] = this.serializeType(type);\n }\n }\n\n return sortObjectKeys(props);\n }\n if (ts.isPropertyAccessExpression(node)) {\n const symbol = this.checker.getSymbolAtLocation(node.name);\n if (!symbol) {\n this.warn(`No symbol found for ${node.name.getText()}`, node);\n return null;\n }\n const type = this.checker.getTypeOfSymbol(symbol);\n return this.serializeType(type);\n }\n if (ts.isPropertySignature(node)) {\n const symbol = this.checker.getSymbolAtLocation(node.name);\n if (!symbol) {\n this.warn(`No symbol found for ${node.name.getText()}`, node);\n return null;\n }\n const type = this.checker.getTypeOfSymbol(symbol);\n return this.serializeType(type);\n }\n if (ts.isPropertyDeclaration(node)) {\n const symbol = this.checker.getSymbolAtLocation(node.name);\n if (!symbol) {\n this.warn(`No symbol found for ${node.name.getText()}`, node);\n return null;\n }\n const type = this.checker.getTypeOfSymbol(symbol);\n return this.serializeType(type);\n }\n if (ts.isInterfaceDeclaration(node)) {\n if (!node.name?.text) {\n throw new Error('Interface has no name');\n }\n if (this.typesMap[node.name.text]) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [this.typesMap[node.name.text]],\n };\n }\n if (!this.collector[node.name.text]) {\n this.collector[node.name.text] = {};\n const members: Record<string, any> = {};\n for (const member of node.members.filter(ts.isPropertySignature)) {\n members[member.name.getText()] = this.serializeNode(member);\n }\n this.collector[node.name.text] = sortObjectKeys(members);\n }\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [`#/components/schemas/${node.name.text}`],\n };\n }\n if (ts.isClassDeclaration(node)) {\n if (!node.name?.text) {\n throw new Error('Class has no name');\n }\n if (this.typesMap[node.name.text]) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [this.typesMap[node.name.text]],\n };\n }\n\n if (!this.collector[node.name.text]) {\n this.collector[node.name.text] = {};\n const members: Record<string, unknown> = {};\n for (const member of node.members.filter(ts.isPropertyDeclaration)) {\n members[member.name!.getText()] = this.serializeNode(member);\n }\n this.collector[node.name.text] = sortObjectKeys(members);\n }\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [`#/components/schemas/${node.name.text}`],\n $ref: `#/components/schemas/${node.name.text}`,\n };\n }\n if (ts.isVariableDeclaration(node)) {\n const symbol = this.checker.getSymbolAtLocation(node.name);\n if (!symbol) {\n this.warn(`No symbol found for ${node.name.getText()}`, node);\n return null;\n }\n if (!node.type) {\n this.warn(`No type found for ${node.name.getText()}`, node);\n return 'any';\n }\n const type = this.checker.getTypeFromTypeNode(node.type);\n return this.serializeType(type);\n }\n if (ts.isIdentifier(node)) {\n const symbol = this.checker.getSymbolAtLocation(node);\n if (!symbol) {\n this.warn(`No symbol found for identifier ${node.getText()}`, node);\n return null;\n }\n const type = this.typeOfExpression(node);\n return this.serializeType(type);\n }\n if (ts.isAwaitExpression(node)) {\n const type = this.checker.getTypeAtLocation(node);\n return this.serializeType(type);\n }\n if (ts.isCallExpression(node)) {\n const type = this.checker.getTypeAtLocation(node);\n return this.serializeType(type);\n }\n if (ts.isAsExpression(node)) {\n const type = this.checker.getTypeAtLocation(node);\n return this.serializeType(type);\n }\n if (ts.isSatisfiesExpression(node)) {\n return this.serializeType(this.typeOfExpression(node));\n }\n if (ts.isTypeLiteralNode(node)) {\n const symbolType = this.checker.getTypeAtLocation(node);\n const props: Record<string, unknown> = {};\n for (const symbol of symbolType.getProperties()) {\n const type = this.checker.getTypeOfSymbol(symbol);\n props[symbol.name] = this.serializeType(type);\n }\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [sortObjectKeys(props)],\n };\n }\n if (node.kind === ts.SyntaxKind.NullKeyword) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['null'],\n };\n }\n if (node.kind === ts.SyntaxKind.BooleanKeyword) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['boolean'],\n };\n }\n if (node.kind === ts.SyntaxKind.TrueKeyword) {\n return {\n [deriveSymbol]: true,\n optional: false,\n kind: 'literal',\n value: true,\n [$types]: ['boolean'],\n };\n }\n if (node.kind === ts.SyntaxKind.FalseKeyword) {\n return {\n [deriveSymbol]: true,\n optional: false,\n kind: 'literal',\n value: false,\n [$types]: ['boolean'],\n };\n }\n if (ts.isFunctionDeclaration(node)) {\n if (!node.name) {\n this.warn('Function declaration has no name', node);\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['any'],\n };\n }\n\n const functionName = node.name.text;\n if (this.typesMap[functionName]) {\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: [this.typesMap[functionName]],\n };\n }\n\n if (node.type) {\n const returnType = this.checker.getTypeFromTypeNode(node.type);\n return this.serializeType(returnType);\n }\n\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['any'],\n };\n }\n if (ts.isArrayLiteralExpression(node)) {\n const type = this.typeOfExpression(node);\n return this.serializeType(type);\n }\n if (ts.isStringLiteral(node) || ts.isNumericLiteral(node)) {\n const type = this.checker.getTypeAtLocation(node);\n return this.serializeType(type);\n }\n // Handle template literals in expression position\n if (\n ts.isTemplateExpression(node) ||\n ts.isNoSubstitutionTemplateLiteral(node)\n ) {\n const type = this.checker.getTypeAtLocation(node);\n return this.serializeType(type);\n }\n if (ts.isTaggedTemplateExpression(node)) {\n const type = this.checker.getTypeAtLocation(node);\n return this.serializeType(type);\n }\n\n // Handle binary expressions (||, &&, +, -, etc.)\n if (ts.isBinaryExpression(node)) {\n const type = this.checker.getTypeAtLocation(node);\n return this.serializeType(type);\n }\n\n // Handle conditional/ternary expressions (x ? y : z)\n if (ts.isConditionalExpression(node)) {\n const type = this.checker.getTypeAtLocation(node);\n return this.serializeType(type);\n }\n\n // Handle parenthesized expressions ((value))\n if (ts.isParenthesizedExpression(node)) {\n return this.serializeType(this.typeOfExpression(node));\n }\n\n // Handle non-null assertions (value!)\n if (ts.isNonNullExpression(node)) {\n const type = this.checker.getTypeAtLocation(node);\n return this.serializeType(type);\n }\n\n this.warn(\n `Unhandled node: ${ts.SyntaxKind[node.kind]} \"${node.getText()}\" (type: ${this.checker.typeToString(\n this.checker.getTypeAtLocation(node),\n undefined,\n ts.TypeFormatFlags.NoTruncation,\n )})`,\n node,\n );\n\n return {\n [deriveSymbol]: true,\n optional: false,\n [$types]: ['any'],\n };\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sdk-it/core",
3
- "version": "0.46.2",
3
+ "version": "0.46.3",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",