@xlr-lib/xlr-converters 0.1.1--canary.9.190

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/bin/run +8 -0
  2. package/dist/cjs/index.cjs +1736 -0
  3. package/dist/cjs/index.cjs.map +1 -0
  4. package/dist/index.legacy-esm.js +1703 -0
  5. package/dist/index.mjs +1703 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/package.json +35 -0
  8. package/src/__tests__/__snapshots__/annotations.test.ts.snap +22 -0
  9. package/src/__tests__/__snapshots__/common-to-ts.test.ts.snap +50 -0
  10. package/src/__tests__/__snapshots__/export-to-ts.test.ts.snap +30 -0
  11. package/src/__tests__/__snapshots__/player.test.ts.snap +8024 -0
  12. package/src/__tests__/__snapshots__/ts-to-common.test.ts.snap +1657 -0
  13. package/src/__tests__/annotations.test.ts +40 -0
  14. package/src/__tests__/common-to-ts.test.ts +356 -0
  15. package/src/__tests__/documentation.test.ts +116 -0
  16. package/src/__tests__/export-to-ts.test.ts +68 -0
  17. package/src/__tests__/heritage-additional-properties.test.ts +119 -0
  18. package/src/__tests__/player.test.ts +866 -0
  19. package/src/__tests__/ts-to-common.test.ts +776 -0
  20. package/src/__tests__/ts-utils.test.ts +383 -0
  21. package/src/helpers/converter.ts +44 -0
  22. package/src/helpers/writeManifest.ts +45 -0
  23. package/src/index.ts +7 -0
  24. package/src/ts/annotations.ts +237 -0
  25. package/src/ts/documentation.ts +243 -0
  26. package/src/ts/ts-to-xlr.ts +1245 -0
  27. package/src/ts/ts-utils.ts +247 -0
  28. package/src/ts/xlr-to-ts.ts +636 -0
  29. package/src/types.ts +15 -0
  30. package/types/helpers/converter.d.ts +5 -0
  31. package/types/helpers/writeManifest.d.ts +3 -0
  32. package/types/index.d.ts +8 -0
  33. package/types/ts/annotations.d.ts +7 -0
  34. package/types/ts/documentation.d.ts +14 -0
  35. package/types/ts/ts-to-xlr.d.ts +56 -0
  36. package/types/ts/ts-utils.d.ts +68 -0
  37. package/types/ts/xlr-to-ts.d.ts +45 -0
  38. package/types/types.d.ts +8 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/ts/ts-to-xlr.ts","../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/ts/ts-utils.ts","../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/ts/annotations.ts","../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/types.ts","../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/ts/xlr-to-ts.ts","../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/helpers/converter.ts","../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/helpers/writeManifest.ts"],"sourcesContent":["import ts from \"typescript\";\nimport type {\n NodeType,\n FunctionTypeParameters,\n TupleType,\n NamedType,\n ObjectType,\n NamedTypeWithGenerics,\n NodeTypeWithGenerics,\n ObjectProperty,\n AnyType,\n ParamTypeNode,\n ConditionalType,\n RefType,\n ArrayType,\n OrType,\n} from \"@xlr-lib/xlr\";\nimport type { TopLevelDeclaration, TopLevelNode } from \"./ts-utils\";\nimport {\n buildTemplateRegex,\n getReferencedType,\n getStringLiteralsFromUnion,\n isExportedDeclaration,\n isGenericInterfaceDeclaration,\n isGenericTypeDeclaration,\n isOptionalProperty,\n isTypeReferenceGeneric,\n tsStripOptionalType,\n isTopLevelNode,\n isTopLevelDeclaration,\n isTypeScriptLibType,\n isExportedModuleDeclaration,\n} from \"./ts-utils\";\nimport { decorateNode } from \"./annotations\";\nimport {\n fillInGenerics,\n isNonNullable,\n applyPartialOrRequiredToNodeType,\n applyPickOrOmitToNodeType,\n applyExcludeToNodeType,\n isGenericNodeType,\n resolveConditional,\n isPrimitiveTypeNode,\n} from \"@xlr-lib/xlr-utils\";\nimport { ConversionError } from \"../types\";\n\nexport type MappedType = \"Pick\" | \"Omit\" | \"Required\" | \"Partial\" | \"Exclude\";\n\n/**\n * Returns if the string is one of TypeScript\"s MappedTypes\n */\nexport function isMappedTypeNode(x: string): x is MappedType {\n return [\"Pick\", \"Omit\", \"Required\", \"Partial\", \"Exclude\"].includes(x);\n}\n\n/**\n * Extract the property name from a PropertyName node, handling both\n * identifier and string literal forms.\n *\n * TypeScript allows property names to be:\n * - Identifiers: `propertyName`\n * - String literals: `\"property-name\"` or `'property-name'`\n * - Numeric literals: `123`\n * - Computed: `[expression]`\n *\n * This function returns the unquoted string value for identifiers and string literals.\n * For computed property names, falls back to getText().\n */\nfunction getPropertyNameText(name: ts.PropertyName): string {\n if (\n ts.isIdentifier(name) ||\n ts.isStringLiteral(name) ||\n ts.isNumericLiteral(name)\n ) {\n return name.text;\n }\n\n // For computed property names, fall back to getText()\n return name.getText();\n}\n\nexport interface TSConverterContext {\n /** */\n customPrimitives: Array<string>;\n\n /** */\n typeChecker: ts.TypeChecker;\n\n /** */\n throwError: (message: string) => never;\n\n /** Cached conversion operations */\n cache: {\n /** Converted TS Nodes */\n convertedNodes: Map<ts.TypeNode, NodeType | undefined>;\n\n /** Processed Template Strings */\n convertedTemplates: Map<ts.TemplateLiteralTypeNode, string>;\n };\n}\n\nconst AnyTypeNode: AnyType = {\n type: \"any\",\n};\n\n/** Converts TS Nodes/Files to XLRs */\nexport class TsConverter {\n private context: TSConverterContext;\n\n constructor(typeChecker: ts.TypeChecker, customPrimitives?: Array<string>) {\n this.context = {\n customPrimitives: customPrimitives ?? [],\n typeChecker,\n throwError: (message: string) => {\n throw new ConversionError(message);\n },\n cache: {\n convertedNodes: new Map(),\n convertedTemplates: new Map(),\n },\n };\n }\n\n /** Converts all exported objects to a XLR representation */\n public convertSourceFile(sourceFile: ts.SourceFile): {\n data: {\n version: number;\n types: NonNullable<NamedType>[];\n };\n convertedTypes: string[];\n } {\n const declarations = sourceFile.statements.filter(isTopLevelNode);\n\n const namespacedTypes: NonNullable<NamedType>[] = sourceFile.statements\n .filter((s) => isExportedModuleDeclaration(s))\n .flatMap((module) => {\n if (module.body && ts.isModuleBlock(module.body)) {\n const nameSpaceName = module.name.text;\n return module.body.statements\n .filter(isExportedDeclaration)\n .filter(isTopLevelNode)\n .map((statement) => {\n const convertedNode = this.convertTopLevelNode(statement);\n return {\n ...convertedNode,\n name: `${nameSpaceName}.${convertedNode.name}`,\n } as NamedType;\n });\n }\n return [];\n });\n\n const types = declarations\n .filter((declaration) => isExportedDeclaration(declaration))\n .map((statement) => this.convertTopLevelNode(statement) as NamedType)\n .filter(<T>(v: T): v is NonNullable<T> => !!v);\n\n types.push(...namespacedTypes);\n\n return {\n data: { version: 1, types },\n convertedTypes: types.map(({ name }) => name),\n };\n }\n\n public convertTopLevelNode(\n node: TopLevelNode,\n ): NamedType | NamedTypeWithGenerics {\n const sourceFile = node.parent as ts.SourceFile;\n const { fileName } = sourceFile;\n\n if (ts.isVariableStatement(node)) {\n return {\n source: fileName,\n ...this.convertVariable(node),\n } as NamedType;\n }\n\n return {\n source: fileName,\n ...this.convertDeclaration(node),\n } as NamedType;\n }\n\n /** Converts a single type/interface declaration to XLRs */\n public convertDeclaration(\n node: TopLevelDeclaration,\n ): ObjectType | NodeTypeWithGenerics<ObjectType> {\n if (ts.isTypeAliasDeclaration(node)) {\n let genericTokens;\n if (isGenericTypeDeclaration(node)) {\n genericTokens = this.generateGenerics(node.typeParameters);\n }\n\n return {\n name: node.name.getText(),\n ...(this.convertTsTypeNode(node.type) ?? AnyTypeNode),\n ...decorateNode(node),\n genericTokens,\n } as NamedTypeWithGenerics<ObjectType>;\n }\n\n if (ts.isInterfaceDeclaration(node)) {\n let genericTokens;\n if (isGenericInterfaceDeclaration(node)) {\n genericTokens = this.generateGenerics(node.typeParameters);\n }\n\n const baseObject = {\n name: node.name.getText(),\n type: \"object\",\n ...this.tsObjectMembersToProperties(node),\n ...decorateNode(node),\n genericTokens,\n };\n // See if there are interfaces being implemented/extended\n if (node.heritageClauses) {\n return this.handleHeritageClauses(\n node.heritageClauses,\n baseObject as ObjectType,\n this.context.typeChecker,\n ) as NamedType<ObjectType>;\n }\n\n return baseObject as ObjectType;\n }\n\n this.context.throwError(\n `Error: type node is not an Interface or a Type, can't convert as Declaration`,\n );\n }\n\n public convertVariable(node: ts.VariableStatement): NodeType {\n const variableDeclarations = node.declarationList.declarations;\n if (variableDeclarations.length === 1) {\n const variable = variableDeclarations[0];\n\n if (variable.initializer) {\n let resultingNode;\n if (\n variable.type &&\n ts.isTypeReferenceNode(variable.type) &&\n ts.isIdentifier(variable.type.typeName) &&\n this.context.customPrimitives.includes(variable.type.typeName.text)\n ) {\n resultingNode = this.makeBasicRefNode(variable.type);\n } else if (\n ts.isCallExpression(variable.initializer) ||\n ts.isArrowFunction(variable.initializer)\n ) {\n resultingNode = this.resolveFunctionCall(\n variable.initializer,\n node.parent,\n );\n } else {\n resultingNode = this.tsLiteralToType(variable.initializer);\n }\n\n // If resultingNode is a reference to a function or custom primitive and not a concrete value\n // we need to update the name to be the name of the exporting variable\n // not the name of the identifier its aliasing\n if (resultingNode.type === \"function\" || resultingNode.type === \"ref\") {\n resultingNode = { ...resultingNode, name: variable.name.getText() };\n }\n\n return {\n name: variable.name.getText(),\n ...resultingNode,\n } as NamedType;\n }\n }\n\n this.context.throwError(\n `Error: Multi-variable declaration on line ${node.pos} is not supported for conversion`,\n );\n }\n\n /** Converts an arbitrary ts.TypeNode to XLRs */\n public convertTsTypeNode(node: ts.TypeNode): NodeType {\n if (this.context.cache.convertedNodes.has(node)) {\n const cachedType = this.context.cache.convertedNodes.get(\n node,\n ) as NodeType;\n // return deep copy of node so modifications don't effect referenced to the original\n return JSON.parse(JSON.stringify(cachedType));\n }\n\n const convertedNode = this.tsNodeToType(node);\n this.context.cache.convertedNodes.set(node, convertedNode);\n return convertedNode;\n }\n\n /** Should not be called directly unless you want to bypass the cache, use `convertTsTypeNode` */\n private tsNodeToType(node: ts.TypeNode): NodeType {\n if (ts.isUnionTypeNode(node)) {\n return {\n type: \"or\",\n or: node.types\n .map((child) => this.convertTsTypeNode(child))\n .filter(isNonNullable),\n ...decorateNode(node),\n };\n }\n\n if (ts.isIntersectionTypeNode(node)) {\n return {\n type: \"and\",\n and: node.types\n .map((child) => this.convertTsTypeNode(child))\n .filter(isNonNullable),\n ...decorateNode(node),\n };\n }\n\n if (ts.isParenthesizedTypeNode(node)) {\n const children: ts.Node[] = [];\n node.forEachChild((child) => {\n children.push(child);\n });\n\n if (children[0]?.kind === ts.SyntaxKind.OpenParenToken) {\n children.shift();\n }\n\n if (\n children[children.length - 1]?.kind === ts.SyntaxKind.CloseParenToken\n ) {\n children.pop();\n }\n\n const element = children[0];\n\n if (children.length !== 1 || !ts.isTypeNode(element)) {\n this.context.throwError(\n `Parenthesis type not understood. Length ${\n children.length\n }, Is Type Node: ${ts.SyntaxKind[element.kind]}`,\n );\n }\n\n return this.convertTsTypeNode(element);\n }\n\n if (node.kind === ts.SyntaxKind.AnyKeyword) {\n return { type: \"any\", ...decorateNode(node) };\n }\n\n if (node.kind === ts.SyntaxKind.UnknownKeyword) {\n return { type: \"unknown\", ...decorateNode(node) };\n }\n\n if (node.kind === ts.SyntaxKind.StringKeyword) {\n return { type: \"string\", ...decorateNode(node) };\n }\n\n if (node.kind === ts.SyntaxKind.NumberKeyword) {\n return { type: \"number\", ...decorateNode(node) };\n }\n\n if (node.kind === ts.SyntaxKind.BooleanKeyword) {\n return { type: \"boolean\", ...decorateNode(node) };\n }\n\n if (node.kind === ts.SyntaxKind.UndefinedKeyword) {\n return { type: \"undefined\", ...decorateNode(node) };\n }\n\n if (node.kind === ts.SyntaxKind.NeverKeyword) {\n return { type: \"never\", ...decorateNode(node) };\n }\n\n if (node.kind === ts.SyntaxKind.ObjectKeyword) {\n return {\n type: \"object\",\n properties: {},\n additionalProperties: AnyTypeNode,\n ...decorateNode(node),\n };\n }\n\n if (node.kind === ts.SyntaxKind.VoidKeyword) {\n return {\n type: \"void\",\n ...decorateNode(node),\n };\n }\n\n if (ts.isTemplateLiteralTypeNode(node)) {\n let format;\n\n if (this.context.cache.convertedTemplates.has(node)) {\n format = this.context.cache.convertedTemplates.get(node) as string;\n } else {\n format = buildTemplateRegex(node, this.context.typeChecker);\n this.context.cache.convertedTemplates.set(node, format);\n }\n\n return {\n type: \"template\",\n format,\n };\n }\n\n if (ts.isArrayTypeNode(node)) {\n return {\n type: \"array\",\n elementType: this.convertTsTypeNode(node.elementType) ?? AnyTypeNode,\n ...decorateNode(node),\n };\n }\n\n if (ts.isConditionalTypeNode(node)) {\n const xlrNode = {\n type: \"conditional\",\n check: {\n left: this.convertTsTypeNode(node.checkType) as NodeType,\n right: this.convertTsTypeNode(node.extendsType) as NodeType,\n },\n value: {\n true: this.convertTsTypeNode(node.trueType) as NodeType,\n false: this.convertTsTypeNode(node.falseType) as NodeType,\n },\n } as ConditionalType;\n // Resolve simple conditionals now, defer complex ones to runtime\n if (\n isPrimitiveTypeNode(xlrNode.check.left) &&\n isPrimitiveTypeNode(xlrNode.check.right)\n ) {\n return resolveConditional(xlrNode);\n } else {\n return xlrNode;\n }\n }\n\n if (ts.isTypeReferenceNode(node)) {\n return this.resolveRefNode(node);\n }\n\n if (ts.isTupleTypeNode(node)) {\n return {\n type: \"tuple\",\n ...this.tsTupleToType(node),\n ...decorateNode(node),\n };\n }\n\n if (ts.isLiteralTypeNode(node)) {\n return this.tsLiteralToType(node.literal);\n }\n\n if (ts.isTypeLiteralNode(node)) {\n return {\n type: \"object\",\n ...this.tsObjectMembersToProperties(node),\n ...decorateNode(node),\n };\n }\n\n if (\n ts.isFunctionTypeNode(node) ||\n ts.isFunctionDeclaration(node) ||\n ts.isArrowFunction(node)\n ) {\n const parameters: Array<FunctionTypeParameters> = node.parameters.map(\n (param) => {\n let typeNode;\n if (param.type) {\n typeNode = this.convertTsTypeNode(param.type);\n }\n\n return {\n name: param.name.getText(),\n type: typeNode ?? AnyTypeNode,\n optional: param.questionToken ? true : undefined,\n default: param.initializer\n ? this.convertTsTypeNode(\n param.initializer as unknown as ts.TypeNode,\n )\n : undefined,\n };\n },\n );\n\n let returnType;\n if (node.type !== undefined) {\n returnType = this.convertTsTypeNode(node.type);\n }\n\n return {\n type: \"function\",\n parameters,\n returnType,\n ...decorateNode(node),\n };\n }\n\n // Handle generics\n if (ts.isIndexedAccessTypeNode(node)) {\n if (\n ts.isTypeReferenceNode(node.objectType) &&\n ts.isLiteralTypeNode(node.indexType)\n ) {\n const baseObject = this.convertTsTypeNode(node.objectType);\n const accessor = node.indexType.literal.getText().replace(/[\"']/g, \"\");\n if (!baseObject) {\n this.context.throwError(\n `Error: Couldn't resolve index access on property ${accessor} on type ${node.objectType.typeName.getText()}`,\n );\n } else if (baseObject.type === \"object\") {\n if (Object.keys(baseObject.properties ?? {}).includes(accessor)) {\n return baseObject.properties[accessor].node;\n }\n\n if (baseObject.additionalProperties) {\n return baseObject.additionalProperties;\n }\n } else if (baseObject.type === \"ref\") {\n return { ...baseObject, property: accessor };\n } else {\n this.context.throwError(\n `Error: Index access on non object/ref type ${baseObject.type}`,\n );\n }\n }\n\n let queryNode = node.objectType;\n // handle cases where the object being accessed is wrapped in () because of linting\n if (ts.isParenthesizedTypeNode(node.objectType)) {\n queryNode = node.objectType.type;\n }\n\n if (ts.isTypeQueryNode(queryNode)) {\n const elements = this.tsNodeToType(node.objectType) as TupleType;\n return {\n type: \"or\",\n or: [...elements.elementTypes.map((element) => element.type)],\n };\n }\n\n // Fallback: Use TypeChecker to resolve dynamic indexed access types\n // This handles cases like T[keyof T], WeakKeyTypes[keyof WeakKeyTypes], etc.\n const effectiveType = this.context.typeChecker.getTypeAtLocation(node);\n const syntheticType = this.context.typeChecker.typeToTypeNode(\n effectiveType,\n node,\n ts.NodeBuilderFlags.NoTruncation,\n );\n if (syntheticType) {\n return this.tsNodeToType(syntheticType);\n }\n\n this.context.throwError(\n `Error: could not solve IndexedAccessType: ${node.getFullText()}`,\n );\n }\n\n if (ts.isTypeQueryNode(node)) {\n const effectiveType = this.context.typeChecker.getTypeAtLocation(node);\n const syntheticType = this.context.typeChecker.typeToTypeNode(\n effectiveType,\n node,\n ts.NodeBuilderFlags.NoTruncation,\n );\n if (syntheticType) {\n return this.tsNodeToType(syntheticType);\n }\n\n this.context.throwError(\n `Error: could not synthesize type for ${node.getText()}`,\n );\n }\n\n if (ts.isTypeOperatorNode(node)) {\n return this.tsNodeToType(node.type);\n }\n\n this.context.throwError(\n `Unimplemented type ${ts.SyntaxKind[node.kind]} at ${node.getText()}`,\n );\n }\n\n private tsLiteralToType(node: ts.Expression): NodeType {\n // Handle \"as const\" assertions by unwrapping to the inner expression\n if (ts.isAsExpression(node)) {\n return this.tsLiteralToType(node.expression);\n }\n\n if (ts.isNumericLiteral(node)) {\n return {\n type: \"number\",\n const: Number(node.text),\n ...decorateNode(node),\n };\n }\n\n if (ts.isStringLiteral(node)) {\n return {\n type: \"string\",\n const: node.text,\n ...decorateNode(node),\n };\n }\n\n if (node.kind === ts.SyntaxKind.TrueKeyword) {\n return {\n type: \"boolean\",\n const: true,\n ...decorateNode(node),\n };\n }\n\n if (node.kind === ts.SyntaxKind.FalseKeyword) {\n return {\n type: \"boolean\",\n const: false,\n ...decorateNode(node),\n };\n }\n\n if (node.kind === ts.SyntaxKind.NullKeyword) {\n return { type: \"null\", ...decorateNode(node) };\n }\n\n if (ts.isPrefixUnaryExpression(node)) {\n this.context.throwError(\"Prefix unary expressions not supported\");\n }\n\n if (ts.isArrayLiteralExpression(node)) {\n const arrayElements: unknown[] = [];\n node.elements.forEach((element) => {\n if (ts.isSpreadElement(element)) {\n const arrayReference = this.resolveLiteralReference(\n element.expression,\n ) as ArrayType;\n arrayElements.push(...(arrayReference.const ?? []));\n } else {\n arrayElements.push(this.tsLiteralToType(element));\n }\n });\n return {\n type: \"array\",\n elementType: { type: \"any\" },\n const: arrayElements,\n };\n }\n\n if (ts.isObjectLiteralExpression(node)) {\n const ret = {\n type: \"object\",\n properties: {},\n additionalProperties: false,\n } as ObjectType;\n\n node.properties.forEach((property) => {\n if (ts.isPropertyAssignment(property) && property.name) {\n const propertyName = getPropertyNameText(property.name);\n ret.properties[propertyName] = {\n required: true,\n node: this.tsLiteralToType(property.initializer),\n };\n } else if (ts.isSpreadAssignment(property)) {\n const spreadValue = this.resolveLiteralReference(\n property.expression,\n ) as ObjectType;\n ret.properties = {\n ...ret.properties,\n ...spreadValue.properties,\n };\n }\n });\n\n return ret;\n }\n\n if (ts.isIdentifier(node)) {\n return this.resolveLiteralReference(node);\n }\n\n this.context.throwError(\n `Literal type not understood ${\n ts.SyntaxKind[node.kind]\n } at ${node.getText()}`,\n );\n }\n\n private resolveLiteralReference(expression: ts.Expression): NodeType {\n if (ts.isIdentifier(expression)) {\n const symbol = this.context.typeChecker.getSymbolAtLocation(expression);\n let expressionReference = symbol?.declarations?.[0];\n if (\n symbol &&\n expressionReference &&\n ts.isImportSpecifier(expressionReference)\n ) {\n const referencedDeclaration =\n this.context.typeChecker.getAliasedSymbol(symbol);\n expressionReference = referencedDeclaration.declarations?.[0];\n }\n\n if (\n expressionReference &&\n ts.isVariableDeclaration(expressionReference) &&\n expressionReference.initializer\n ) {\n return this.convertVariable(\n expressionReference.parent.parent as ts.VariableStatement,\n );\n }\n\n this.context.throwError(\n `Error: Can't resolve non-variable declaration ${expressionReference?.getText()}`,\n );\n }\n\n this.context.throwError(\n `Error: Can't resolve non-identifier reference in literal ${expression.getText()}`,\n );\n }\n\n private resolveFunctionCall(\n functionCall: ts.CallExpression | ts.ArrowFunction,\n document: ts.Node,\n ): NodeType {\n if (ts.isArrowFunction(functionCall)) {\n const declaredReturnType = (functionCall.parent as ts.VariableDeclaration)\n .type;\n if (declaredReturnType) {\n return this.tsNodeToType(declaredReturnType);\n }\n }\n\n const functionReturnType =\n this.context.typeChecker.getTypeAtLocation(functionCall);\n\n let syntheticNode = this.context.typeChecker.typeToTypeNode(\n functionReturnType,\n document,\n undefined,\n );\n\n // Synthetic node loses parameter location information, and text making it unable\n // to get the parameter name in tsNodeToType\n if (ts.isArrowFunction(functionCall)) {\n const syntheticWithParameters = {\n ...syntheticNode,\n parameters: functionCall.parameters,\n };\n syntheticNode = syntheticWithParameters as unknown as ts.TypeNode;\n }\n\n if (syntheticNode) {\n if (\n ts.isTypeReferenceNode(syntheticNode) &&\n ts.isIdentifier(syntheticNode.typeName)\n ) {\n const { typeName } = syntheticNode;\n\n if (this.context.customPrimitives.includes(typeName.text)) {\n return this.makeBasicRefNode(syntheticNode);\n }\n\n // Can't use typechecker on synthetic nodes\n const declarationSymbol = (typeName as any).symbol as ts.Symbol;\n\n if (declarationSymbol && declarationSymbol.declarations?.[0]) {\n const declaration = declarationSymbol.declarations[0];\n if (\n ts.isTypeAliasDeclaration(declaration) ||\n ts.isInterfaceDeclaration(declaration)\n ) {\n return this.convertDeclaration(declaration);\n }\n }\n\n this.context.throwError(\n `Error: could not get referenced type ${syntheticNode.getText()}`,\n );\n }\n\n return this.tsNodeToType(syntheticNode) as NodeType;\n }\n\n this.context.throwError(\n `Error: could not determine effective return type of ${functionCall.getText()}`,\n );\n }\n\n private tsObjectMembersToProperties(\n node: ts.InterfaceDeclaration | ts.TypeLiteralNode,\n ): Pick<ObjectType, \"properties\" | \"additionalProperties\"> {\n const ret: Pick<ObjectType, \"properties\" | \"additionalProperties\"> = {\n properties: {},\n additionalProperties: false,\n };\n\n node.members.forEach((member) => {\n if (ts.isPropertySignature(member) && member.type) {\n const name = getPropertyNameText(member.name);\n ret.properties[name] = {\n required: !isOptionalProperty(member),\n node: {\n ...(this.convertTsTypeNode(member.type) ?? AnyTypeNode),\n ...decorateNode(member),\n },\n };\n } else if (ts.isIndexSignatureDeclaration(member)) {\n const param = member.parameters[0];\n if (param.type?.kind !== ts.SyntaxKind.StringKeyword) {\n this.context.throwError(\n \"Will not convert non-string index signature\",\n );\n }\n\n ret.additionalProperties =\n this.convertTsTypeNode(member.type) ?? AnyTypeNode;\n }\n });\n\n return ret;\n }\n\n private tsTupleToType(\n node: ts.TupleTypeNode,\n ): Pick<TupleType, \"elementTypes\" | \"additionalItems\" | \"minItems\"> {\n if (node.elements.length === 0) {\n return { elementTypes: [], additionalItems: false, minItems: 0 };\n }\n\n const hasRest = ts.isRestTypeNode(node.elements[node.elements.length - 1]);\n\n const [elements, rest] = hasRest\n ? [\n node.elements.slice(0, node.elements.length - 1),\n node.elements[node.elements.length - 1] as ts.RestTypeNode,\n ]\n : [[...node.elements], undefined];\n\n const elementTypes = elements.map((element) => {\n if (ts.isNamedTupleMember(element)) {\n let typeNode;\n if (element.type) {\n typeNode = this.convertTsTypeNode(element.type);\n }\n\n return {\n name: element.name.text,\n type: typeNode ?? AnyTypeNode,\n optional: element.questionToken ? true : undefined,\n };\n }\n\n return {\n type: this.convertTsTypeNode(tsStripOptionalType(element)),\n optional: ts.isOptionalTypeNode(element),\n };\n });\n\n const additionalItems = rest\n ? (this.convertTsTypeNode((rest.type as ts.ArrayTypeNode).elementType) ??\n AnyTypeNode)\n : false;\n\n const firstOptional = elementTypes.findIndex(\n (element) => element.optional === true,\n );\n const minItems = firstOptional === -1 ? elements.length : firstOptional;\n\n return {\n elementTypes,\n ...(additionalItems && additionalItems.type === \"any\"\n ? { additionalItems: AnyTypeNode }\n : { additionalItems }),\n minItems,\n };\n }\n\n private handleHeritageClauses(\n clauses: ts.NodeArray<ts.HeritageClause>,\n baseObject: ObjectType,\n typeChecker: ts.TypeChecker,\n ): ObjectType {\n let newProperties: { [x: string]: ObjectProperty } = {};\n const additionalPropertiesCollector: Array<NodeType> = [];\n let extendsType: RefType | undefined;\n\n clauses.forEach((heritageClause) => {\n heritageClause.types.forEach((parent) => {\n let typeToApply: ObjectType;\n\n // Check if its a Mapped Type\n const typeName = parent.expression.getText();\n if (isMappedTypeNode(typeName)) {\n typeToApply = this.makeMappedType(typeName, parent) as ObjectType;\n } else {\n const parentType = typeChecker.getTypeAtLocation(parent);\n const parentSymbol = parentType.symbol;\n const parentDeclarations = parentSymbol?.declarations;\n\n if (!parentDeclarations?.[0]) {\n this.context.throwError(\n `Error: Unable to get underlying interface for extending class ${parent.getFullText()}`,\n );\n }\n\n let parentInterface: TopLevelDeclaration;\n\n if (\n ts.isTypeLiteralNode(parentDeclarations?.[0]) &&\n ts.isTypeAliasDeclaration(parentDeclarations?.[0].parent)\n ) {\n // check for if the node is a type to get the actual type declaration\n parentInterface = parentDeclarations?.[0].parent;\n } else {\n parentInterface = parentDeclarations?.[0] as TopLevelDeclaration;\n }\n\n if (\n this.context.customPrimitives.includes(parentInterface.name.text)\n ) {\n extendsType = this.makeBasicRefNode(parent);\n return;\n }\n\n typeToApply = this.convertDeclaration(parentInterface);\n\n if (typeToApply.extends) {\n extendsType = typeToApply.extends;\n }\n\n if (parentInterface.typeParameters && parent.typeArguments) {\n typeToApply = this.resolveGenerics(\n typeToApply as NodeTypeWithGenerics,\n parentInterface.typeParameters,\n parent.typeArguments,\n ) as NamedType<ObjectType>;\n } else if (isGenericNodeType(baseObject)) {\n baseObject.genericTokens.push(\n ...((typeToApply as NodeTypeWithGenerics).genericTokens ?? []),\n );\n }\n }\n\n newProperties = {\n ...newProperties,\n ...typeToApply.properties,\n };\n if (typeToApply.additionalProperties) {\n additionalPropertiesCollector.push(typeToApply.additionalProperties);\n }\n });\n });\n // Resolve Additional Properties: preserve index signature from current\n // interface (baseObject) and merge with any from extended types.\n let additionalProperties: NodeType | false = false;\n if (baseObject.additionalProperties) {\n if (additionalPropertiesCollector.length === 0) {\n additionalProperties = baseObject.additionalProperties;\n } else {\n additionalPropertiesCollector.push(baseObject.additionalProperties);\n additionalProperties =\n additionalPropertiesCollector.length === 1\n ? additionalPropertiesCollector[0]\n : {\n type: \"or\",\n or: additionalPropertiesCollector,\n };\n }\n } else if (additionalPropertiesCollector.length === 1) {\n additionalProperties = additionalPropertiesCollector[0];\n } else if (additionalPropertiesCollector.length >= 1) {\n additionalProperties = {\n type: \"or\",\n or: additionalPropertiesCollector,\n };\n }\n\n return {\n ...baseObject,\n ...(extendsType ? { extends: extendsType } : {}),\n properties: { ...newProperties, ...baseObject.properties },\n additionalProperties,\n };\n }\n\n private resolveGenerics(\n baseInterface: NodeTypeWithGenerics,\n typeParameters: ts.NodeArray<ts.TypeParameterDeclaration>,\n typeArguments?: ts.NodeArray<ts.TypeNode>,\n ): NodeTypeWithGenerics | NodeType {\n // map type args to generics\n if (typeArguments && typeArguments.length === 0) return baseInterface;\n const genericMap: Map<string, NodeType> = new Map();\n typeParameters.forEach((tp, i) => {\n let typeToProcess: ts.TypeNode;\n if (typeArguments && i < typeArguments.length) {\n typeToProcess = typeArguments[i];\n } else if (tp.default) {\n typeToProcess = tp.default;\n } else {\n // might need to do some error checking here if there is no type to fill in\n typeToProcess = ts.factory.createKeywordTypeNode(\n ts.SyntaxKind.AnyKeyword,\n );\n }\n\n const processedNodeType = this.convertTsTypeNode(typeToProcess);\n if (processedNodeType) {\n genericMap.set(tp.name.getText(), processedNodeType);\n }\n });\n\n return fillInGenerics(baseInterface, genericMap);\n }\n\n private generateGenerics(\n params: ts.NodeArray<ts.TypeParameterDeclaration> | undefined,\n ): Array<ParamTypeNode> {\n const genericArray: Array<ParamTypeNode> = [];\n\n params?.forEach((param) => {\n const serializedObject: ParamTypeNode = {\n symbol: param.name.text,\n };\n if (param.constraint) {\n // any case is unsafe but it can be either a Type or TypeNode and both are parsed fine\n serializedObject.constraints = this.convertTsTypeNode(param.constraint);\n } else {\n serializedObject.constraints = AnyTypeNode;\n }\n\n if (param.default) {\n // any case is unsafe but it can be either a Type or TypeNode and both are parsed fine\n serializedObject.default = this.convertTsTypeNode(param.default);\n } else {\n serializedObject.default = AnyTypeNode;\n }\n\n genericArray.push(serializedObject);\n });\n\n return genericArray;\n }\n\n private resolveRefNode(node: ts.TypeReferenceNode): NodeType {\n let refName: string;\n let namespace: string | undefined;\n\n if (node.typeName.kind === ts.SyntaxKind.QualifiedName) {\n namespace = node.typeName.left.getText();\n refName = node.typeName.right.getText();\n } else {\n refName = node.typeName.text;\n }\n\n // the use of a generic in an interface/type\n if (isTypeReferenceGeneric(node, this.context.typeChecker)) {\n if (ts.isIndexedAccessTypeNode(node.parent)) {\n const genericSymbol = this.context.typeChecker.getSymbolAtLocation(\n node.typeName,\n );\n const typeParameters = this.generateGenerics(\n genericSymbol?.declarations as unknown as ts.NodeArray<ts.TypeParameterDeclaration>,\n );\n const typeParameter = typeParameters[0];\n if (typeParameter) {\n if (typeParameter.constraints) {\n return typeParameter.constraints;\n }\n\n if (typeParameter.default) {\n return typeParameter.default;\n }\n }\n\n return AnyTypeNode;\n }\n\n return { type: \"ref\", ref: node.getText(), ...decorateNode(node) };\n }\n\n if (refName === \"Array\") {\n const typeArgs = node.typeArguments as ts.NodeArray<ts.TypeNode>;\n return {\n type: \"array\",\n elementType: typeArgs\n ? (this.convertTsTypeNode(typeArgs[0]) ?? AnyTypeNode)\n : AnyTypeNode,\n ...decorateNode(node),\n };\n }\n\n if (refName === \"Record\") {\n const indexType = node.typeArguments?.[0] as ts.TypeNode;\n const valueType = node.typeArguments?.[1] as ts.TypeNode;\n return {\n type: \"record\",\n keyType: this.convertTsTypeNode(indexType) ?? AnyTypeNode,\n valueType: this.convertTsTypeNode(valueType) ?? AnyTypeNode,\n ...decorateNode(node),\n };\n }\n\n if (isMappedTypeNode(refName)) {\n return this.makeMappedType(refName, node);\n }\n\n // Skip TypeScript built-in lib types (Map, Set, WeakMap, Promise, etc.)\n // These should be treated as primitives, not expanded\n if (isTypeScriptLibType(node, this.context.typeChecker)) {\n return this.makeBasicRefNode(node);\n }\n\n // catch all for all other type references\n if (!this.context.customPrimitives.includes(refName)) {\n const typeInfo = getReferencedType(node, this.context.typeChecker);\n if (typeInfo) {\n const convertedType = this.convertTopLevelNode(typeInfo.declaration);\n const genericParams = typeInfo.declaration.typeParameters;\n const genericArgs = node.typeArguments;\n if (convertedType && genericParams && genericArgs) {\n const resolvedType = this.resolveGenerics(\n convertedType as NamedTypeWithGenerics,\n genericParams,\n genericArgs,\n );\n\n // Preserve full type name including generic arguments for instantiated generics\n // e.g., SimpleModifier<\"format\"> should keep the name as \"SimpleModifier<'format'>\"\n if (\"name\" in resolvedType && genericArgs.length > 0) {\n const argsText = Array.from(genericArgs)\n .map((arg) => arg.getText())\n .join(\", \");\n const baseName = namespace ? `${namespace}.${refName}` : refName;\n return { ...resolvedType, name: `${baseName}<${argsText}>` };\n }\n\n // Preserve full qualified name for namespaced types (e.g., Validation.CrossfieldReference)\n if (namespace && \"name\" in resolvedType) {\n return { ...resolvedType, name: `${namespace}.${refName}` };\n }\n return resolvedType;\n }\n\n if (convertedType) {\n // Preserve full qualified name for namespaced types (e.g., Validation.CrossfieldReference)\n if (namespace && \"name\" in convertedType) {\n return { ...convertedType, name: `${namespace}.${refName}` };\n }\n return convertedType;\n }\n }\n\n this.context.throwError(\n `Can't find referenced type ${refName}, is it available in the current package or node_modules?`,\n );\n }\n\n return this.makeBasicRefNode(node);\n }\n\n private makeMappedType(\n refName: MappedType,\n node: ts.NodeWithTypeArguments,\n ): ObjectType {\n if (refName === \"Pick\" || refName === \"Omit\" || refName === \"Exclude\") {\n const baseType = node.typeArguments?.[0] as ts.TypeNode;\n const modifiers = node.typeArguments?.[1] as ts.TypeNode;\n\n const baseObj = this.convertTsTypeNode(baseType);\n\n if (refName === \"Exclude\") {\n if (baseObj.type === \"or\") {\n return applyExcludeToNodeType(\n baseObj as OrType,\n this.convertTsTypeNode(modifiers),\n ) as ObjectType;\n }\n\n throw new ConversionError(\n \"Error: Can't solve Exclude type on non-union node\",\n );\n } else {\n return applyPickOrOmitToNodeType(\n baseObj,\n refName,\n getStringLiteralsFromUnion(modifiers),\n ) as ObjectType;\n }\n }\n\n if (refName === \"Partial\" || refName === \"Required\") {\n const baseType = node.typeArguments?.[0] as ts.TypeNode;\n const baseObj = this.convertTsTypeNode(baseType) as NodeType;\n const modifier = refName !== \"Partial\";\n\n return applyPartialOrRequiredToNodeType(baseObj, modifier) as ObjectType;\n }\n\n this.context.throwError(`Can't convert non-MappedType ${refName}`);\n }\n\n private makeBasicRefNode(node: ts.NodeWithTypeArguments): RefType {\n const genericArgs: Array<NodeType | NamedType<ObjectType>> = [];\n if (node.typeArguments) {\n node.typeArguments.forEach((typeArg) => {\n let convertedNode;\n if (isTopLevelDeclaration(typeArg)) {\n convertedNode = this.convertDeclaration(typeArg);\n } else {\n convertedNode = this.convertTsTypeNode(typeArg);\n }\n\n if (convertedNode) {\n genericArgs.push(convertedNode);\n } else {\n this.context.throwError(\n `Conversion Error: Couldn't convert type argument in type ${node.getText()}`,\n );\n }\n });\n }\n\n let ref: string;\n\n if (ts.isTypeReferenceNode(node)) {\n // Handle qualified names (e.g., Validation.CrossfieldReference) - keep full path in ref\n if (node.typeName.kind === ts.SyntaxKind.QualifiedName) {\n ref = `${node.typeName.left.getText()}.${node.typeName.right.getText()}`;\n } else if (node.pos === -1 && ts.isIdentifier(node.typeName)) {\n ref = node.typeName.text;\n } else {\n ref = node.getText();\n }\n } else {\n ref = node.getText();\n }\n\n return {\n type: \"ref\",\n ref,\n ...decorateNode(node),\n genericArguments: genericArgs.length > 0 ? genericArgs : undefined,\n };\n }\n}\n","import ts from \"typescript\";\n\n/**\n * Returns if the Object Property is optional\n */\nexport function isOptionalProperty(node: ts.PropertySignature): boolean {\n return node.questionToken?.kind === ts.SyntaxKind.QuestionToken;\n}\n\n/**\n * Returns if the node is an Interface or Type with Generics\n */\nexport function isGenericInterfaceDeclaration(\n node: ts.InterfaceDeclaration,\n): boolean {\n const length = node.typeParameters?.length;\n return length ? length > 0 : false;\n}\n\n/**\n * Returns if the node is an Type Declaration with Generics\n */\nexport function isGenericTypeDeclaration(\n node: ts.TypeAliasDeclaration,\n): boolean {\n const length = node.typeParameters?.length;\n return length ? length > 0 : false;\n}\n\n/**\n * Returns if the referenced type is a generic\n */\nexport function isTypeReferenceGeneric(\n node: ts.TypeReferenceNode,\n typeChecker: ts.TypeChecker,\n): boolean {\n const symbol = typeChecker.getSymbolAtLocation(node.typeName);\n if (symbol && symbol.declarations) {\n return symbol.declarations[0].kind === ts.SyntaxKind.TypeParameter;\n }\n\n return false;\n}\n\nexport type TopLevelDeclaration =\n | ts.InterfaceDeclaration\n | ts.TypeAliasDeclaration;\n\n/**\n * Returns if the node is an interface or a type declaration\n */\nexport function isTopLevelDeclaration(\n node: ts.Node,\n): node is TopLevelDeclaration {\n return (\n node.kind === ts.SyntaxKind.InterfaceDeclaration ||\n node.kind === ts.SyntaxKind.TypeAliasDeclaration\n );\n}\n\nexport type TopLevelNode = TopLevelDeclaration | ts.VariableStatement;\n\n/**\n * Returns if the node is an interface or a type declaration\n */\nexport function isTopLevelNode(node: ts.Node): node is TopLevelNode {\n return (\n node.kind === ts.SyntaxKind.InterfaceDeclaration ||\n node.kind === ts.SyntaxKind.TypeAliasDeclaration ||\n node.kind === ts.SyntaxKind.VariableStatement\n );\n}\n\n/**\n * Returns the required type or the optionally required type\n */\nexport function tsStripOptionalType(node: ts.TypeNode): ts.TypeNode {\n return ts.isOptionalTypeNode(node) ? node.type : node;\n}\n\n/**\n * Returns if the top level declaration is exported\n */\nexport function isExportedDeclaration(node: ts.Statement): boolean {\n const modifiers = ts.canHaveModifiers(node)\n ? ts.getModifiers(node)\n : undefined;\n\n if (modifiers) {\n return modifiers.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);\n }\n return false;\n}\n\n/**\n * Returns if the node is exported from the source file\n */\nexport function isNodeExported(node: ts.Node): boolean {\n return (\n (ts.getCombinedModifierFlags(node as ts.Declaration) &\n ts.ModifierFlags.Export) !==\n 0 ||\n (!!node.parent && node.parent.kind === ts.SyntaxKind.SourceFile)\n );\n}\n\n/**\n * Returns the actual type and will following import chains if needed\n */\nexport function getReferencedType(\n node: ts.TypeReferenceNode,\n typeChecker: ts.TypeChecker,\n):\n | {\n declaration: ts.TypeAliasDeclaration | ts.InterfaceDeclaration;\n exported: boolean;\n }\n | undefined {\n let symbol = typeChecker.getSymbolAtLocation(node.typeName);\n\n if (\n symbol &&\n (symbol.flags & ts.SymbolFlags.Alias) === ts.SymbolFlags.Alias\n ) {\n // follow alias if it is a symbol\n symbol = typeChecker.getAliasedSymbol(symbol);\n }\n\n const varDecl = symbol?.declarations?.[0];\n if (\n varDecl &&\n (ts.isInterfaceDeclaration(varDecl) || ts.isTypeAliasDeclaration(varDecl))\n ) {\n return { declaration: varDecl, exported: isNodeExported(varDecl) };\n }\n}\n\n/**\n * Checks if a type reference points to a TypeScript built-in type\n * by examining whether its declaration comes from TypeScript's lib files.\n *\n * This is more robust than maintaining a hardcoded list of built-in types\n * as it automatically handles all TypeScript lib types (Map, Set, WeakMap,\n * Promise, Array, Date, Error, RegExp, etc.).\n */\nexport function isTypeScriptLibType(\n node: ts.TypeReferenceNode,\n typeChecker: ts.TypeChecker,\n): boolean {\n let symbol = typeChecker.getSymbolAtLocation(node.typeName);\n\n if (!symbol) return false;\n\n // Follow alias if it is a symbol\n if ((symbol.flags & ts.SymbolFlags.Alias) === ts.SymbolFlags.Alias) {\n symbol = typeChecker.getAliasedSymbol(symbol);\n }\n\n const declarations = symbol.getDeclarations();\n if (!declarations || declarations.length === 0) return false;\n\n // Check if any declaration comes from TypeScript lib files\n return declarations.some((decl) => {\n const sourceFile = decl.getSourceFile();\n if (!sourceFile) return false;\n\n const filePath = sourceFile.fileName;\n return (\n filePath.includes(\"/typescript/lib/\") ||\n filePath.includes(\"\\\\typescript\\\\lib\\\\\") ||\n (filePath.endsWith(\".d.ts\") && filePath.includes(\"lib.\"))\n );\n });\n}\n\n/**\n * Returns list of string literals from potential union of strings\n */\nexport function getStringLiteralsFromUnion(node: ts.Node): Set<string> {\n if (ts.isUnionTypeNode(node)) {\n return new Set(\n node.types.map((type) => {\n if (ts.isLiteralTypeNode(type) && ts.isStringLiteral(type.literal)) {\n return type.literal.text;\n }\n\n return \"\";\n }),\n );\n }\n\n if (ts.isLiteralTypeNode(node) && ts.isStringLiteral(node.literal)) {\n return new Set([node.literal.text]);\n }\n\n return new Set();\n}\n\n/**\n * Converts a format string into a regex that can be used to validate a given string matches the template\n */\nexport function buildTemplateRegex(\n node: ts.TemplateLiteralTypeNode,\n typeChecker: ts.TypeChecker,\n): string {\n let regex = node.head.text;\n node.templateSpans.forEach((span) => {\n // process template tag\n let type = span.type.kind;\n if (ts.isTypeReferenceNode(span.type)) {\n let symbol = typeChecker.getSymbolAtLocation(\n span.type.typeName,\n ) as ts.Symbol;\n\n if (\n symbol &&\n (symbol.flags & ts.SymbolFlags.Alias) === ts.SymbolFlags.Alias\n ) {\n // follow alias if it is a symbol\n symbol = typeChecker.getAliasedSymbol(symbol);\n }\n\n type = (symbol?.declarations?.[0] as ts.TypeAliasDeclaration).type.kind;\n }\n\n if (type === ts.SyntaxKind.StringKeyword) {\n regex += \".*\";\n } else if (type === ts.SyntaxKind.NumberKeyword) {\n regex += \"[0-9]*\";\n } else if (type === ts.SyntaxKind.BooleanKeyword) {\n regex += \"true|false\";\n }\n\n // add non-tag element\n regex += span.literal.text;\n });\n return regex;\n}\n\n/**\n * Returns if the top level declaration is exported\n */\nexport function isExportedModuleDeclaration(\n node: ts.Statement,\n): node is ts.ModuleDeclaration {\n return isExportedDeclaration(node) && ts.isModuleDeclaration(node);\n}\n","import ts from \"typescript\";\nimport type { Annotations } from \"@xlr-lib/xlr\";\n\ninterface JSDocContainer {\n /** */\n jsDoc: Array<ts.JSDoc>;\n}\n\n/**\n *\n */\nfunction extractDescription(text: string | undefined): Annotations {\n if (!text) {\n return {};\n }\n\n return { description: text };\n}\n\n/**\n * Checks if the parent node is a non-object type\n */\nfunction parentIsNonObjectPath(node: ts.Node) {\n return (\n node.parent &&\n (ts.isArrayTypeNode(node.parent) ||\n ts.isTupleTypeNode(node.parent) ||\n ts.isOptionalTypeNode(node.parent) ||\n ts.isRestTypeNode(node.parent) ||\n ts.isUnionTypeNode(node.parent))\n );\n}\n\n/**\n * Traverses up the node tree to build the title path down to the initial node\n */\nfunction recurseTypeChain(\n node: ts.Node,\n child: ts.Node | undefined,\n): Array<string> {\n if (!node) {\n return [];\n }\n\n if (\n ts.isArrayTypeNode(node) &&\n node.parent &&\n ts.isRestTypeNode(node.parent)\n ) {\n return recurseTypeChain(node.parent, node);\n }\n\n if (ts.isRestTypeNode(node)) {\n return recurseTypeChain(node.parent, node);\n }\n\n if (ts.isOptionalTypeNode(node)) {\n return recurseTypeChain(node.parent, node);\n }\n\n if (ts.isUnionTypeNode(node)) {\n return recurseTypeChain(node.parent, node);\n }\n\n if (ts.isParenthesizedTypeNode(node)) {\n return recurseTypeChain(node.parent, node);\n }\n\n if (ts.isTypeLiteralNode(node)) {\n return recurseTypeChain(node.parent, node);\n }\n\n if (ts.isArrayTypeNode(node)) {\n return [\"[]\", ...recurseTypeChain(node.parent, node)];\n }\n\n if (ts.isTupleTypeNode(node)) {\n const pos = node.elements.indexOf(child as any);\n return [\n ...(pos === -1 ? [] : [`${pos}`]),\n ...recurseTypeChain(node.parent, node),\n ];\n }\n\n if (\n ts.isTypeAliasDeclaration(node) ||\n ts.isInterfaceDeclaration(node) ||\n ts.isPropertySignature(node)\n ) {\n return [node.name.getText(), ...recurseTypeChain(node.parent, node)];\n }\n\n if (parentIsNonObjectPath(node)) {\n return recurseTypeChain(node.parent, node);\n }\n\n return [];\n}\n\n/**\n * Builds the `Title` property by traversing up and noting the named types in the tree\n */\nfunction extractTitle(node: ts.Node): Annotations {\n const typeNames = recurseTypeChain(node, undefined).reverse().join(\".\");\n\n if (!typeNames.length) {\n return {};\n }\n\n return { title: typeNames };\n}\n\n/**\n *\n */\nfunction stringifyDoc(\n docString: undefined | string | ts.NodeArray<ts.JSDocComment>,\n): string | undefined {\n if (typeof docString === \"undefined\" || typeof docString === \"string\") {\n return docString;\n }\n\n return docString.map(({ text }) => text).join(\" \");\n}\n\n/**\n * Extracts JSDoc tags to strings\n */\nfunction extractTags(tags: ReadonlyArray<ts.JSDocTag>): Annotations {\n const descriptions: Array<string> = [];\n const examples: Array<string> = [];\n const _default: Array<string> = [];\n const see: Array<string> = [];\n const meta: Record<string, string> = {};\n\n /**\n *\n */\n const extractSee = (tag: ts.JSDocSeeTag) => {\n return `${tag.tagName ? `${tag.tagName?.getText()} ` : \"\"}${\n stringifyDoc(tag.comment)?.trim() ?? \"\"\n }`;\n };\n\n tags.forEach((tag) => {\n if (!tag.comment) {\n return;\n }\n\n if (tag.tagName.text === \"example\") {\n examples.push(stringifyDoc(tag.comment)?.trim() ?? \"\");\n } else if (tag.tagName.text === \"default\") {\n _default.push(stringifyDoc(tag.comment)?.trim() ?? \"\");\n } else if (tag.tagName.text === \"see\") {\n see.push(extractSee(tag as ts.JSDocSeeTag));\n } else if (tag.tagName.text === \"meta\") {\n const [key, value] = tag.comment.toString().split(/:(.*)/);\n meta[key] = value?.trim() ?? \"\";\n } else {\n const text = stringifyDoc(tag.comment)?.trim() ?? \"\";\n descriptions.push(`@${tag.tagName.text} ${text}`);\n }\n });\n\n return {\n ...(descriptions.length === 0\n ? {}\n : { description: descriptions.join(\"\\n\") }),\n ...(examples.length === 0 ? {} : { examples }),\n ...(_default.length === 0 ? {} : { default: _default.join(\"\\n\") }),\n ...(see.length === 0 ? {} : { see }),\n ...(meta && Object.keys(meta).length === 0 ? {} : { meta }),\n };\n}\n\n/**\n * Joins Arrays of maybe strings with a given separator\n */\nfunction join(t: Array<string | undefined>, separator = \"\\n\") {\n const unique = new Set(t).values();\n return Array.from(unique)\n .filter((s) => s !== undefined)\n .join(separator)\n .trim();\n}\n\n/**\n * Merges Annotation nodes for various nodes\n */\nfunction mergeAnnotations(nodes: Array<Annotations>): Annotations {\n const name = nodes.find((n) => n.name)?.name;\n const title = join(\n nodes.map((n) => n.title),\n \", \",\n );\n const description = join(nodes.map((n) => n.description));\n const _default = join(nodes.map((n) => n.default));\n const comment = join(nodes.map((n) => n.comment));\n const examples = join(\n nodes.map((n) =>\n Array.isArray(n.examples) ? join(n.examples) : n.examples,\n ),\n );\n const see = join(\n nodes.map((n) => (Array.isArray(n.see) ? join(n.see) : n.see)),\n );\n const meta = nodes.find((n) => n.meta)?.meta;\n return {\n ...(name ? { name } : {}),\n ...(title ? { title } : {}),\n ...(description ? { description } : {}),\n ...(examples ? { examples } : {}),\n ...(_default ? { default: _default } : {}),\n ...(see ? { see } : {}),\n ...(comment ? { comment } : {}),\n ...(meta ? { meta } : {}),\n };\n}\n\n/**\n * Converts JSDoc comments to strings\n */\nexport function decorateNode(node: ts.Node): Annotations {\n const { jsDoc } = node as unknown as JSDocContainer;\n const titleAnnotation = extractTitle(node);\n\n if (jsDoc && jsDoc.length) {\n const first = jsDoc[0];\n return mergeAnnotations([\n extractDescription(stringifyDoc(first.comment)),\n titleAnnotation,\n extractTags(first.tags ?? []),\n ]);\n }\n\n return titleAnnotation;\n}\n","/**\n * Specific error that can be caught to indicate an error in conversion\n */\nexport class ConversionError extends Error {\n constructor(msg: string) {\n super(msg);\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, ConversionError.prototype);\n }\n\n toString() {\n return `Conversion Error: ${this.message}`;\n }\n}\n","import type {\n ConditionalType,\n Annotations,\n FunctionType,\n NamedType,\n NodeType,\n NodeTypeWithGenerics,\n ObjectType,\n PrimitiveTypes,\n RecordType,\n RefType,\n TemplateLiteralType,\n TupleType,\n} from \"@xlr-lib/xlr\";\nimport type { TopLevelDeclaration } from \"./ts-utils\";\nimport { isGenericNamedType, isPrimitiveTypeNode } from \"@xlr-lib/xlr-utils\";\nimport ts from \"typescript\";\nimport { ConversionError } from \"../types\";\n\nconst templateTokenize = /(?=true\\|false|\\.\\*|\\[0-9]\\*)/gm;\nconst tokenSplit = /(?<=true\\|false|\\.\\*|\\[0-9]\\*)/gm;\n\nexport interface ConvertedType {\n /** Converted input type represented as in TS Nodes */\n type: TopLevelDeclaration;\n\n /** Types that may require import statements to be added */\n referencedTypes?: Set<string>;\n\n /** Any additionally referenced types that were deserialized that should be separate declarations */\n additionalTypes?: Map<string, TopLevelDeclaration>;\n}\n\ninterface TSWriterContext {\n /** */\n factory: ts.NodeFactory;\n\n /** */\n throwError: (message: string) => never;\n}\n\n/** */\nexport class TSWriter {\n private context: TSWriterContext;\n private importSet: Set<string>;\n private additionalTypes: Map<string, TopLevelDeclaration>;\n\n constructor(factory?: ts.NodeFactory) {\n this.context = {\n factory: factory ?? ts.factory,\n throwError: (message: string) => {\n throw new ConversionError(message);\n },\n };\n this.importSet = new Set();\n this.additionalTypes = new Map();\n }\n\n public convertNamedType(type: NamedType): ConvertedType {\n this.importSet.clear();\n this.additionalTypes.clear();\n\n const finalNode = this.convertNamedTypeNode(type);\n\n const referencedTypes =\n this.importSet.size > 0 ? this.importSet : undefined;\n const additionalTypes =\n this.additionalTypes.size > 0 ? this.additionalTypes : undefined;\n\n return {\n type: this.makeAnnotations(finalNode, type),\n referencedTypes,\n additionalTypes,\n };\n }\n\n private convertNamedTypeNode(type: NamedType): TopLevelDeclaration {\n const typeName = type.name;\n const tsNode = this.convertTypeNode(type);\n\n let customPrimitiveHeritageClass;\n if (type.type === \"object\" && type.extends) {\n const refName = type.extends.ref.split(\"<\")[0];\n customPrimitiveHeritageClass = [\n this.context.factory.createHeritageClause(\n ts.SyntaxKind.ExtendsKeyword,\n [\n this.context.factory.createExpressionWithTypeArguments(\n this.context.factory.createIdentifier(refName),\n type.extends.genericArguments\n ? (type.extends.genericArguments.map((node) =>\n this.convertTypeNode(node),\n ) as any)\n : undefined,\n ),\n ],\n ),\n ];\n }\n\n let generics;\n if (isGenericNamedType(type)) {\n generics = this.createTypeParameters(type);\n type.genericTokens.forEach((token) => {\n // clean up any references that are actually generic tokens\n if (this.importSet.has(token.symbol)) {\n this.importSet.delete(token.symbol);\n }\n });\n }\n\n let finalNode;\n if (ts.isTypeLiteralNode(tsNode)) {\n finalNode = this.makeInterfaceDeclaration(\n typeName,\n tsNode.members,\n generics,\n customPrimitiveHeritageClass,\n );\n } else {\n finalNode = this.makeTypeDeclaration(typeName, tsNode, generics);\n }\n\n return finalNode;\n }\n\n private convertTypeNode(type: NodeType): ts.TypeNode {\n if (type.type === \"object\") {\n return this.createObjectNode(type);\n }\n\n if (type.type === \"and\") {\n return this.context.factory.createIntersectionTypeNode(\n type.and.map((element) => {\n return this.convertTypeNode(element);\n }),\n );\n }\n\n if (type.type === \"or\") {\n return this.context.factory.createUnionTypeNode(\n type.or.map((element) => {\n return this.convertTypeNode(element);\n }),\n );\n }\n\n if (type.type === \"array\") {\n if (type.const) {\n return this.context.factory.createTupleTypeNode(\n type.const.map((element) =>\n this.convertTypeNode(element as NodeType),\n ),\n );\n }\n\n return this.context.factory.createTypeReferenceNode(\n this.context.factory.createIdentifier(\"Array\"),\n [this.convertTypeNode(type.elementType)],\n );\n }\n\n if (isPrimitiveTypeNode(type)) {\n return this.createPrimitiveNode(type);\n }\n\n if (type.type === \"conditional\") {\n return this.createConditionalTypeNode(type);\n }\n\n if (type.type === \"function\") {\n return this.createFunctionDeclarationNode(type);\n }\n\n if (type.type === \"record\") {\n return this.createRecordNode(type);\n }\n\n if (type.type === \"ref\") {\n return this.createRefNode(type);\n }\n\n if (type.type === \"template\") {\n return this.createTemplateLiteral(type);\n }\n\n if (type.type === \"tuple\") {\n return this.createTupleNode(type);\n }\n\n this.context.throwError(\n `Unable to convert node type: ${(type as any).type}`,\n );\n }\n\n private createRefNode(xlrNode: RefType): ts.TypeReferenceNode {\n const typeArgs: ts.TypeNode[] = [];\n if (xlrNode.genericArguments) {\n xlrNode.genericArguments.forEach((genericArg) => {\n if (genericArg.name) {\n const additionalType = this.convertNamedTypeNode(\n genericArg as NamedType,\n );\n this.additionalTypes.set(genericArg.name, additionalType);\n } else if (genericArg.type === \"and\") {\n genericArg.and.forEach((type) => {\n if (type.name) {\n const additionalType = this.convertNamedTypeNode(\n type as NamedType,\n );\n this.additionalTypes.set(type.name, additionalType);\n }\n });\n } else if (genericArg.type === \"or\") {\n genericArg.or.forEach((type) => {\n if (type.name) {\n const additionalType = this.convertNamedTypeNode(\n type as NamedType,\n );\n this.additionalTypes.set(type.name, additionalType);\n }\n });\n } else {\n typeArgs.push(this.convertTypeNode(genericArg));\n }\n });\n }\n\n const importName = xlrNode.ref.split(\"<\")[0];\n this.importSet.add(importName);\n return this.context.factory.createTypeReferenceNode(importName, typeArgs);\n }\n\n private createPrimitiveNode(xlrNode: PrimitiveTypes): ts.TypeNode {\n if (\n ((xlrNode.type === \"string\" ||\n xlrNode.type === \"boolean\" ||\n xlrNode.type === \"number\") &&\n xlrNode.const) ||\n xlrNode.type === \"null\"\n ) {\n return this.context.factory.createLiteralTypeNode(\n this.createLiteralTypeNode(xlrNode),\n );\n }\n\n switch (xlrNode.type) {\n case \"string\":\n return this.context.factory.createKeywordTypeNode(\n ts.SyntaxKind.StringKeyword,\n );\n case \"number\":\n return this.context.factory.createKeywordTypeNode(\n ts.SyntaxKind.NumberKeyword,\n );\n case \"boolean\":\n return this.context.factory.createKeywordTypeNode(\n ts.SyntaxKind.BooleanKeyword,\n );\n case \"any\":\n return this.context.factory.createKeywordTypeNode(\n ts.SyntaxKind.AnyKeyword,\n );\n case \"unknown\":\n return this.context.factory.createKeywordTypeNode(\n ts.SyntaxKind.UnknownKeyword,\n );\n case \"never\":\n return this.context.factory.createKeywordTypeNode(\n ts.SyntaxKind.NeverKeyword,\n );\n case \"undefined\":\n return this.context.factory.createKeywordTypeNode(\n ts.SyntaxKind.UndefinedKeyword,\n );\n case \"void\":\n return this.context.factory.createKeywordTypeNode(\n ts.SyntaxKind.VoidKeyword,\n );\n default:\n this.context.throwError(\n `Unknown primitive type ${(xlrNode as any).type}`,\n );\n }\n }\n\n private createLiteralTypeNode(\n xlrNode: NodeType,\n ): ts.NullLiteral | ts.BooleanLiteral | ts.LiteralExpression {\n if (xlrNode.type === \"boolean\") {\n return xlrNode.const\n ? this.context.factory.createTrue()\n : this.context.factory.createFalse();\n }\n\n if (xlrNode.type === \"number\") {\n return xlrNode.const\n ? this.context.factory.createNumericLiteral(xlrNode.const)\n : this.context.throwError(\n \"Can't make literal type out of non constant number\",\n );\n }\n\n if (xlrNode.type === \"string\") {\n return xlrNode.const\n ? this.context.factory.createStringLiteral(xlrNode.const, true)\n : this.context.throwError(\n \"Can't make literal type out of non constant string\",\n );\n }\n\n if (xlrNode.type === \"null\") {\n return this.context.factory.createNull();\n }\n\n this.context.throwError(`Can't make literal out of type ${xlrNode.type}`);\n }\n\n private createTupleNode(xlrNode: TupleType): ts.TypeNode {\n return this.context.factory.createTupleTypeNode(\n xlrNode.elementTypes.map((e) => {\n if (e.name) {\n return this.context.factory.createNamedTupleMember(\n undefined,\n this.context.factory.createIdentifier(e.name),\n e.optional\n ? this.context.factory.createToken(ts.SyntaxKind.QuestionToken)\n : undefined,\n this.convertTypeNode(e.type),\n );\n }\n\n return this.convertTypeNode(e.type);\n }),\n );\n }\n\n private createFunctionDeclarationNode(xlrNode: FunctionType): ts.TypeNode {\n return this.context.factory.createFunctionTypeNode(\n undefined,\n xlrNode.parameters.map((e) => {\n return this.context.factory.createParameterDeclaration(\n undefined,\n undefined,\n e.name,\n e.optional\n ? this.context.factory.createToken(ts.SyntaxKind.QuestionToken)\n : undefined,\n this.convertTypeNode(e.type),\n e.default ? this.createLiteralTypeNode(e.default) : undefined,\n );\n }),\n xlrNode.returnType\n ? this.convertTypeNode(xlrNode.returnType)\n : this.context.factory.createToken(ts.SyntaxKind.VoidKeyword),\n );\n }\n\n private createRecordNode(xlrNode: RecordType): ts.TypeNode {\n const keyType = this.convertTypeNode(xlrNode.keyType);\n const valueType = this.convertTypeNode(xlrNode.valueType);\n return this.context.factory.createTypeReferenceNode(\n this.context.factory.createIdentifier(\"Record\"),\n [keyType, valueType],\n );\n }\n\n private createConditionalTypeNode(xlrNode: ConditionalType): ts.TypeNode {\n const leftCheck = this.convertTypeNode(xlrNode.check.left);\n const rightCheck = this.convertTypeNode(xlrNode.check.right);\n const trueValue = this.convertTypeNode(xlrNode.value.true);\n const falseValue = this.convertTypeNode(xlrNode.value.false);\n\n return this.context.factory.createConditionalTypeNode(\n leftCheck,\n rightCheck,\n trueValue,\n falseValue,\n );\n }\n\n private createObjectNode(xlrNode: ObjectType): ts.TypeLiteralNode {\n const { properties, additionalProperties = false } = xlrNode;\n\n const propertyNodes: Array<ts.TypeElement> = [\n ...Object.keys(properties)\n .map((name) => ({ name, ...properties[name] }))\n .map(({ name, node, required }) =>\n this.makeAnnotations(\n this.context.factory.createPropertySignature(\n undefined, // modifiers\n name,\n required\n ? undefined\n : this.context.factory.createToken(ts.SyntaxKind.QuestionToken),\n this.convertTypeNode(node),\n ),\n node,\n ),\n ),\n ];\n\n if (additionalProperties) {\n propertyNodes.push(\n this.context.factory.createIndexSignature(\n undefined, // modifiers\n [\n this.context.factory.createParameterDeclaration(\n undefined, // modifiers\n undefined, // dotdotdot token\n \"key\",\n undefined, // question token\n this.context.factory.createKeywordTypeNode(\n ts.SyntaxKind.StringKeyword,\n ),\n ),\n ],\n this.convertTypeNode(additionalProperties),\n ),\n );\n }\n\n return this.context.factory.createTypeLiteralNode(propertyNodes);\n }\n\n private createTemplateLiteral(xlrNode: TemplateLiteralType) {\n const templateSegments = xlrNode.format.split(templateTokenize);\n let templateHead;\n\n if (templateSegments.length % 2 === 0) {\n templateHead = this.context.factory.createTemplateHead(\n templateSegments[0],\n );\n templateSegments.splice(0, 1);\n } else {\n templateHead = this.context.factory.createTemplateHead(\"\");\n }\n\n return this.context.factory.createTemplateLiteralType(\n templateHead,\n templateSegments.map((segments, i) => {\n const [regexSegment, stringSegment = \"\"] = segments.split(tokenSplit);\n\n let regexTemplateType: ts.KeywordSyntaxKind;\n if (regexSegment === \".*\") {\n regexTemplateType = ts.SyntaxKind.StringKeyword;\n } else if (regexSegment === \"[0-9]*\") {\n regexTemplateType = ts.SyntaxKind.NumberKeyword;\n } else if (regexSegment === \"true|false\") {\n regexTemplateType = ts.SyntaxKind.BooleanKeyword;\n } else {\n this.context.throwError(\n `Can't make template literal type from regex ${regexSegment}`,\n );\n }\n\n let stringTemplateType;\n\n if (i === templateSegments.length - 1) {\n stringTemplateType =\n this.context.factory.createTemplateTail(stringSegment);\n } else {\n stringTemplateType =\n this.context.factory.createTemplateMiddle(stringSegment);\n }\n\n return this.context.factory.createTemplateLiteralTypeSpan(\n this.context.factory.createKeywordTypeNode(regexTemplateType),\n stringTemplateType,\n );\n }),\n );\n }\n\n private createGenericArgumentNode(node?: NodeType): ts.TypeNode | undefined {\n if (node) {\n if (node.type === \"object\" && node.name) {\n const additionalType = this.convertNamedTypeNode(\n node as NamedType<ObjectType>,\n );\n this.additionalTypes.set(node.name, additionalType);\n return this.context.factory.createTypeReferenceNode(node.name);\n }\n\n return this.convertTypeNode(node);\n }\n\n return undefined;\n }\n\n private makeAnnotations<T extends ts.Node>(\n tsNode: T,\n xlrAnnotations: Annotations,\n ) {\n let comment = xlrAnnotations.description;\n if (!comment) {\n return tsNode;\n }\n\n if (comment.includes(\"\\n\")) {\n comment = `*\\n${comment\n .split(\"\\n\")\n .map((s) => ` * ${s}`)\n .join(\"\\n\")}\\n`;\n } else {\n comment = `* ${comment} `;\n }\n\n return ts.addSyntheticLeadingComment(\n tsNode,\n ts.SyntaxKind.MultiLineCommentTrivia,\n comment,\n true,\n );\n }\n\n private createTypeParameters(\n genericXLRNode: NodeTypeWithGenerics,\n ): Array<ts.TypeParameterDeclaration> {\n return genericXLRNode.genericTokens.map((generic) => {\n return this.context.factory.createTypeParameterDeclaration(\n undefined,\n generic.symbol,\n this.createGenericArgumentNode(generic.constraints),\n this.createGenericArgumentNode(generic.default),\n );\n });\n }\n\n private makeInterfaceDeclaration(\n name: string,\n node: ts.NodeArray<ts.TypeElement>,\n generics: Array<ts.TypeParameterDeclaration> | undefined,\n heritageClass: ts.HeritageClause[] | undefined,\n ) {\n return this.context.factory.createInterfaceDeclaration(\n this.context.factory.createModifiersFromModifierFlags(\n ts.ModifierFlags.Export,\n ),\n this.context.factory.createIdentifier(name),\n generics, // type parameters\n heritageClass, // heritage\n node,\n );\n }\n\n private makeTypeDeclaration(\n name: string,\n node: ts.TypeNode,\n generics: Array<ts.TypeParameterDeclaration> | undefined,\n ) {\n return this.context.factory.createTypeAliasDeclaration(\n this.context.factory.createModifiersFromModifierFlags(\n ts.ModifierFlags.Export,\n ),\n this.context.factory.createIdentifier(name),\n generics, // type parameters\n node,\n );\n }\n}\n\n/**\n * Converts a list of XLR NamedTypes to a TypeScript `.d.ts` string.\n *\n * @param typesToExport - The types to include in the output\n * @param importMap - Map of package name → exported symbol names; only symbols\n * that are actually referenced will be emitted as import declarations\n * @returns The full content of a `.d.ts` file as a string\n */\nexport function exportTypesToTypeScript(\n typesToExport: NamedType[],\n importMap: Map<string, string[]>,\n): string {\n const writer = new TSWriter();\n const referencedImports: Set<string> = new Set();\n const exportedTypes: Map<string, TopLevelDeclaration> = new Map();\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n\n let resultFile = ts.createSourceFile(\n \"output.d.ts\",\n \"\",\n ts.ScriptTarget.ES2017,\n false,\n ts.ScriptKind.TS,\n );\n\n typesToExport.forEach((typeNode) => {\n const { type, referencedTypes, additionalTypes } =\n writer.convertNamedType(typeNode);\n exportedTypes.set(typeNode.name, type);\n additionalTypes?.forEach((additionalType, name) =>\n exportedTypes.set(name, additionalType),\n );\n referencedTypes?.forEach((referencedType) =>\n referencedImports.add(referencedType),\n );\n });\n\n const typesToPrint: Array<string> = [];\n\n exportedTypes.forEach((type) =>\n typesToPrint.push(\n printer.printNode(ts.EmitHint.Unspecified, type, resultFile),\n ),\n );\n\n importMap.forEach((imports, packageName) => {\n const applicableImports = imports.filter((i) => referencedImports.has(i));\n if (applicableImports.length === 0) return;\n resultFile = ts.factory.updateSourceFile(resultFile, [\n ts.factory.createImportDeclaration(\n /* modifiers */ undefined,\n ts.factory.createImportClause(\n false,\n undefined,\n ts.factory.createNamedImports(\n applicableImports.map((i) =>\n ts.factory.createImportSpecifier(\n false,\n undefined,\n ts.factory.createIdentifier(i),\n ),\n ),\n ),\n ),\n ts.factory.createStringLiteral(packageName),\n ),\n ...resultFile.statements,\n ]);\n });\n\n const headerText = printer.printFile(resultFile);\n const nodeText = typesToPrint.join(\"\\n\");\n return `${headerText}\\n${nodeText}`;\n}\n","import type { Manifest } from \"@xlr-lib/xlr\";\nimport ts from \"typescript\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { TsConverter } from \"../ts/ts-to-xlr\";\nimport { writeManifest } from \"./writeManifest\";\n\n/** Basic Exporter to export a self contained type file */\nexport function converter(\n sourceFile: string,\n outputDirectory: string,\n customPrimitives: string[],\n tsOptions: ts.CompilerOptions = {},\n): Manifest | undefined {\n const program = ts.createProgram([sourceFile], tsOptions);\n fs.mkdirSync(outputDirectory, { recursive: true });\n\n // Get the checker, we will use it to find more about classes\n const checker = program.getTypeChecker();\n\n const converter = new TsConverter(checker, customPrimitives);\n const convertedTypes = converter.convertSourceFile(\n program.getSourceFiles()[0],\n );\n\n if (convertedTypes.data.types.length === 0) {\n return undefined;\n }\n\n convertedTypes.data.types.forEach((type) => {\n fs.writeFileSync(\n path.join(outputDirectory, `${type.name}.json`),\n JSON.stringify(type, undefined, 4),\n );\n });\n\n const manifest: Manifest = {\n pluginName: \"Types\",\n capabilities: new Map([[\"Types\", convertedTypes.convertedTypes]]),\n customPrimitives: customPrimitives,\n };\n\n writeManifest(manifest, outputDirectory);\n}\n","import { Manifest } from \"@xlr-lib/xlr\";\nimport path from \"path\";\nimport fs from \"fs\";\n\n/** Serializes ES6 Maps */\nfunction replacer(key: any, value: any) {\n if (value instanceof Map) {\n return Object.fromEntries(value.entries());\n }\n\n return value;\n}\n\nexport function writeManifest(\n capabilities: Manifest,\n outputDirectory: string,\n): void {\n // print out the manifest files\n const jsonManifest = JSON.stringify(capabilities, replacer, 4);\n fs.writeFileSync(path.join(outputDirectory, \"manifest.json\"), jsonManifest);\n\n const tsManifestFile = `${[...(capabilities.capabilities?.values() ?? [])]\n .flat(2)\n .map((capability) => {\n return `const ${capability} = require(\"./${capability}.json\")`;\n })\n .join(\"\\n\")}\n\n module.exports = {\n \"pluginName\": \"${capabilities.pluginName}\",\n \"capabilities\": {\n ${[...(capabilities.capabilities?.entries() ?? [])]\n .map(([capabilityName, provides]) => {\n return `\"${capabilityName}\":[${provides.join(\",\")}],`;\n })\n .join(\"\\n\\t\\t\")}\n },\n \"customPrimitives\": [\n ${[capabilities.customPrimitives?.map((i) => `\"${i}\"`).join(\",\") ?? \"\"]}\n ]\n }\n`;\n\n fs.writeFileSync(path.join(outputDirectory, \"manifest.js\"), tsManifestFile);\n}\n"],"mappings":"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","names":["ts","ts","ts","isPrimitiveTypeNode","ts","ts","isPrimitiveTypeNode","ts","path","fs","ts","fs","converter","path"]}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "sideEffects": false,
3
+ "files": [
4
+ "dist",
5
+ "src",
6
+ "types"
7
+ ],
8
+ "name": "@xlr-lib/xlr-converters",
9
+ "version": "0.1.1--canary.9.190",
10
+ "main": "dist/cjs/index.cjs",
11
+ "dependencies": {
12
+ "@xlr-lib/xlr": "0.1.1--canary.9.190",
13
+ "@xlr-lib/xlr-utils": "0.1.1--canary.9.190",
14
+ "typescript": "5.5.4",
15
+ "tslib": "^2.6.2"
16
+ },
17
+ "devDependencies": {
18
+ "@xlr-lib/test-utils": "workspace:*"
19
+ },
20
+ "bin": {
21
+ "xlr": "bin/run"
22
+ },
23
+ "module": "dist/index.legacy-esm.js",
24
+ "types": "types/index.d.ts",
25
+ "exports": {
26
+ "./package.json": "./package.json",
27
+ "./dist/index.css": "./dist/index.css",
28
+ ".": {
29
+ "types": "./types/index.d.ts",
30
+ "import": "./dist/index.mjs",
31
+ "default": "./dist/cjs/index.cjs"
32
+ }
33
+ },
34
+ "peerDependencies": {}
35
+ }
@@ -0,0 +1,22 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`Annotations > JSDoc @meta 1`] = `
4
+ {
5
+ "description": "An asset is the smallest unit of user interaction in a player view",
6
+ "meta": {
7
+ "category": "views",
8
+ "screenshot": "/path/image.png",
9
+ },
10
+ "title": "Asset",
11
+ }
12
+ `;
13
+
14
+ exports[`Annotations > JSDoc comments to strings 1`] = `
15
+ {
16
+ "default": "default value",
17
+ "description": "An asset is the smallest unit of user interaction in a player view",
18
+ "examples": "Example usage of interface Asset",
19
+ "see": "see for implementation details",
20
+ "title": "Asset",
21
+ }
22
+ `;
@@ -0,0 +1,50 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`Type Exports > Basic Type Conversion 1`] = `
4
+ "/**
5
+ * User actions can be represented in several places.
6
+ * Each view typically has one or more actions that allow the user to navigate away from that view.
7
+ * In addition, several asset types can have actions that apply to that asset only.
8
+ */
9
+ export interface ActionAsset<AnyTextAsset extends Asset = Asset> extends Asset<'action'> {
10
+ /** The transition value of the action in the state machine */
11
+ value?: string;
12
+ /** A text-like asset for the action's label */
13
+ label?: AssetWrapper<AnyTextAsset>;
14
+ /** An optional expression to execute before transitioning */
15
+ exp?: Expression;
16
+ /** An optional string that describes the action for screen-readers */
17
+ accessibility?: string;
18
+ /** Additional optional data to assist with the action interactions on the page */
19
+ metaData?: {
20
+ /** Additional data to beacon */
21
+ beacon?: string | Record<string, any>;
22
+ /** Force transition to the next view without checking for validation */
23
+ skipValidation?: boolean;
24
+ };
25
+ }"
26
+ `;
27
+
28
+ exports[`Type Exports > Dynamic results Conversion 1`] = `
29
+ "export type size = ExpressionHandler<[
30
+ val: unknown
31
+ ], number>;"
32
+ `;
33
+
34
+ exports[`Type Exports > Static Type Conversion Arrays 1`] = `
35
+ "export type test = [
36
+ 'foo',
37
+ 1,
38
+ boolean
39
+ ];"
40
+ `;
41
+
42
+ exports[`Type Exports > Static Type Conversion Objects 1`] = `
43
+ "export interface test {
44
+ foo: 'foo';
45
+ bar: 1;
46
+ bax: boolean;
47
+ }"
48
+ `;
49
+
50
+ exports[`Type Exports > Template Type Conversion 1`] = `"export type BindingRef = \`{{\${string}}}\`;"`;
@@ -0,0 +1,30 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`exportTypesToTypeScript > emits import declarations for referenced types 1`] = `
4
+ "import { Asset } from "@player-ui/types";
5
+
6
+ export interface Wrapper {
7
+ asset: Asset;
8
+ }"
9
+ `;
10
+
11
+ exports[`exportTypesToTypeScript > exports named types as a .d.ts string 1`] = `
12
+ "
13
+ export interface Asset {
14
+ id: string;
15
+ type: string;
16
+ }
17
+ export interface ActionAsset {
18
+ id: string;
19
+ type: 'action';
20
+ value?: string;
21
+ }"
22
+ `;
23
+
24
+ exports[`exportTypesToTypeScript > skips import declarations for unreferenced packages 1`] = `
25
+ "
26
+ export interface Asset {
27
+ id: string;
28
+ type: string;
29
+ }"
30
+ `;