@xlr-lib/xlr-utils 0.2.0--canary.3.46 → 0.2.0--canary.2.60

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.
@@ -42,30 +42,19 @@ __export(src_exports, {
42
42
  fillInGenerics: () => fillInGenerics,
43
43
  getReferencedType: () => getReferencedType,
44
44
  getStringLiteralsFromUnion: () => getStringLiteralsFromUnion,
45
- isAndType: () => isAndType,
46
- isArrayType: () => isArrayType,
47
- isBooleanType: () => isBooleanType,
48
45
  isExportedDeclaration: () => isExportedDeclaration,
49
46
  isGenericInterfaceDeclaration: () => isGenericInterfaceDeclaration,
50
47
  isGenericNamedType: () => isGenericNamedType,
51
48
  isGenericNodeType: () => isGenericNodeType,
52
49
  isGenericTypeDeclaration: () => isGenericTypeDeclaration,
53
- isNamedType: () => isNamedType,
54
50
  isNode: () => isNode,
55
51
  isNodeExported: () => isNodeExported,
56
52
  isNonNullable: () => isNonNullable,
57
- isNumberType: () => isNumberType,
58
- isObjectType: () => isObjectType,
59
53
  isOptionalProperty: () => isOptionalProperty,
60
- isOrType: () => isOrType,
61
54
  isPrimitiveTypeNode: () => isPrimitiveTypeNode,
62
- isRecordType: () => isRecordType,
63
- isRefType: () => isRefType,
64
- isStringType: () => isStringType,
65
55
  isTopLevelDeclaration: () => isTopLevelDeclaration,
66
56
  isTopLevelNode: () => isTopLevelNode,
67
57
  isTypeReferenceGeneric: () => isTypeReferenceGeneric,
68
- isTypeScriptLibType: () => isTypeScriptLibType,
69
58
  makePropertyMap: () => makePropertyMap,
70
59
  propertyToTuple: () => propertyToTuple,
71
60
  resolveConditional: () => resolveConditional,
@@ -262,36 +251,6 @@ function isPrimitiveTypeNode(node) {
262
251
  function isNonNullable(a) {
263
252
  return a !== null || a !== void 0;
264
253
  }
265
- function isStringType(node) {
266
- return node.type === "string";
267
- }
268
- function isNumberType(node) {
269
- return node.type === "number";
270
- }
271
- function isBooleanType(node) {
272
- return node.type === "boolean";
273
- }
274
- function isObjectType(node) {
275
- return node.type === "object";
276
- }
277
- function isArrayType(node) {
278
- return node.type === "array";
279
- }
280
- function isRefType(node) {
281
- return node.type === "ref";
282
- }
283
- function isOrType(node) {
284
- return node.type === "or";
285
- }
286
- function isAndType(node) {
287
- return node.type === "and";
288
- }
289
- function isRecordType(node) {
290
- return node.type === "record";
291
- }
292
- function isNamedType(node) {
293
- return "name" in node && "source" in node && typeof node.name === "string";
294
- }
295
254
 
296
255
  // ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/validation-helpers.ts
297
256
  function propertyToTuple(node) {
@@ -459,21 +418,6 @@ function getReferencedType(node, typeChecker) {
459
418
  return { declaration: varDecl, exported: isNodeExported(varDecl) };
460
419
  }
461
420
  }
462
- function isTypeScriptLibType(node, typeChecker) {
463
- let symbol = typeChecker.getSymbolAtLocation(node.typeName);
464
- if (!symbol) return false;
465
- if ((symbol.flags & import_typescript3.default.SymbolFlags.Alias) === import_typescript3.default.SymbolFlags.Alias) {
466
- symbol = typeChecker.getAliasedSymbol(symbol);
467
- }
468
- const declarations = symbol.getDeclarations();
469
- if (!declarations || declarations.length === 0) return false;
470
- return declarations.some((decl) => {
471
- const sourceFile = decl.getSourceFile();
472
- if (!sourceFile) return false;
473
- const filePath = sourceFile.fileName;
474
- return filePath.includes("/typescript/lib/") || filePath.includes("\\typescript\\lib\\") || filePath.endsWith(".d.ts") && filePath.includes("lib.");
475
- });
476
- }
477
421
  function getStringLiteralsFromUnion(node) {
478
422
  if (import_typescript3.default.isUnionTypeNode(node)) {
479
423
  return new Set(
@@ -921,30 +865,19 @@ function createDocString(node) {
921
865
  fillInGenerics,
922
866
  getReferencedType,
923
867
  getStringLiteralsFromUnion,
924
- isAndType,
925
- isArrayType,
926
- isBooleanType,
927
868
  isExportedDeclaration,
928
869
  isGenericInterfaceDeclaration,
929
870
  isGenericNamedType,
930
871
  isGenericNodeType,
931
872
  isGenericTypeDeclaration,
932
- isNamedType,
933
873
  isNode,
934
874
  isNodeExported,
935
875
  isNonNullable,
936
- isNumberType,
937
- isObjectType,
938
876
  isOptionalProperty,
939
- isOrType,
940
877
  isPrimitiveTypeNode,
941
- isRecordType,
942
- isRefType,
943
- isStringType,
944
878
  isTopLevelDeclaration,
945
879
  isTopLevelNode,
946
880
  isTypeReferenceGeneric,
947
- isTypeScriptLibType,
948
881
  makePropertyMap,
949
882
  propertyToTuple,
950
883
  resolveConditional,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/index.ts","../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/annotations.ts","../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/ts-helpers.ts","../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/type-checks.ts","../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/validation-helpers.ts","../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/documentation.ts"],"sourcesContent":["export * from \"./annotations\";\nexport * from \"./ts-helpers\";\nexport * from \"./type-checks\";\nexport * from \"./validation-helpers\";\nexport * from \"./documentation\";\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","import ts from \"typescript\";\nimport type {\n NamedType,\n NodeType,\n ObjectProperty,\n ObjectType,\n OrType,\n RefNode,\n} from \"@xlr-lib/xlr\";\nimport { computeExtends, resolveConditional } from \"./validation-helpers\";\nimport { isGenericNamedType, isGenericNodeType } from \"./type-checks\";\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 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 * Walks generics to fill in values from a combination of the default, constraint, and passed in map values\n * TODO convert this to use simpleTransformGenerator\n */\nexport function fillInGenerics(\n xlrNode: NodeType,\n generics?: Map<string, NodeType>,\n): NodeType {\n // Need to make sure not to set generics in passed in map to avoid using generics outside of tree\n let localGenerics: Map<string, NodeType>;\n\n if (generics) {\n localGenerics = new Map(generics);\n } else {\n localGenerics = new Map();\n if (isGenericNodeType(xlrNode)) {\n xlrNode.genericTokens?.forEach((token) => {\n const genericValue = (token.default ?? token.constraints) as NodeType;\n localGenerics.set(\n token.symbol,\n fillInGenerics(genericValue, localGenerics),\n );\n });\n }\n }\n\n if (xlrNode.type === \"ref\") {\n if (localGenerics.has(xlrNode.ref)) {\n return {\n ...(localGenerics.get(xlrNode.ref) as NodeType),\n ...(xlrNode.genericArguments\n ? {\n genericArguments: xlrNode.genericArguments.map((ga) =>\n fillInGenerics(ga, localGenerics),\n ),\n }\n : {}),\n ...(xlrNode.title ? { title: xlrNode.title } : {}),\n ...(xlrNode.name ? { name: xlrNode.name } : {}),\n ...(xlrNode.description ? { description: xlrNode.description } : {}),\n ...(xlrNode.comment ? { comment: xlrNode.comment } : {}),\n };\n }\n\n return {\n ...xlrNode,\n ...(xlrNode.genericArguments\n ? {\n genericArguments: xlrNode.genericArguments.map((ga) =>\n fillInGenerics(ga, localGenerics),\n ),\n }\n : {}),\n };\n }\n\n if (xlrNode.type === \"object\") {\n const newProperties: { [name: string]: ObjectProperty } = {};\n Object.getOwnPropertyNames(xlrNode.properties).forEach((propName) => {\n const prop = xlrNode.properties[propName];\n newProperties[propName] = {\n required: prop.required,\n node: fillInGenerics(prop.node, localGenerics),\n };\n });\n\n return {\n ...xlrNode,\n properties: newProperties,\n ...(isGenericNamedType(xlrNode)\n ? {\n genericTokens: xlrNode.genericTokens.map((token) => {\n return {\n ...token,\n constraints: token.constraints\n ? fillInGenerics(token.constraints, localGenerics)\n : undefined,\n default: token.default\n ? fillInGenerics(token.default, localGenerics)\n : undefined,\n };\n }),\n }\n : {}),\n extends: xlrNode.extends\n ? (fillInGenerics(xlrNode.extends, localGenerics) as RefNode)\n : undefined,\n additionalProperties: xlrNode.additionalProperties\n ? fillInGenerics(xlrNode.additionalProperties, localGenerics)\n : false,\n };\n }\n\n if (xlrNode.type === \"array\") {\n return {\n ...xlrNode,\n elementType: fillInGenerics(xlrNode.elementType, localGenerics),\n };\n } else if (xlrNode.type === \"or\" || xlrNode.type === \"and\") {\n let pointer;\n if (xlrNode.type === \"or\") {\n pointer = xlrNode.or;\n } else {\n pointer = xlrNode.and;\n }\n\n return {\n ...xlrNode,\n [xlrNode.type]: pointer.map((prop) => {\n return fillInGenerics(prop, localGenerics);\n }),\n };\n } else if (xlrNode.type === \"record\") {\n return {\n ...xlrNode,\n keyType: fillInGenerics(xlrNode.keyType, localGenerics),\n valueType: fillInGenerics(xlrNode.valueType, localGenerics),\n };\n } else if (xlrNode.type === \"conditional\") {\n const filledInConditional = {\n ...xlrNode,\n check: {\n left: fillInGenerics(xlrNode.check.left, localGenerics),\n right: fillInGenerics(xlrNode.check.right, localGenerics),\n },\n value: {\n true: fillInGenerics(xlrNode.value.true, localGenerics),\n false: fillInGenerics(xlrNode.value.false, localGenerics),\n },\n };\n\n // Check to see if we have enough information to resolve this conditional\n if (\n filledInConditional.check.left.type !== \"ref\" &&\n filledInConditional.check.right.type !== \"ref\"\n ) {\n return {\n name: xlrNode.name,\n title: xlrNode.title,\n ...resolveConditional(filledInConditional),\n } as NamedType;\n }\n\n return filledInConditional;\n }\n\n return xlrNode;\n}\n\n/** Applies the TS `Pick` or `Omit` type to an interface/union/intersection */\nexport function applyPickOrOmitToNodeType(\n baseObject: NodeType,\n operation: \"Pick\" | \"Omit\",\n properties: Set<string>,\n): NodeType | undefined {\n if (baseObject.type === \"object\") {\n const newObject = { ...baseObject };\n Object.keys(baseObject.properties).forEach((key) => {\n if (\n (operation === \"Omit\" && properties.has(key)) ||\n (operation === \"Pick\" && !properties.has(key))\n ) {\n delete newObject.properties[key];\n }\n });\n\n /**\n * Filter out objects in cases:\n * - A Pick operation and there are no properties left\n * - An Omit operation and there are no properties left and no additional properties allowed\n */\n if (\n Object.keys(newObject.properties).length === 0 &&\n (operation !== \"Omit\" || newObject.additionalProperties === false)\n ) {\n return undefined;\n }\n\n return newObject;\n }\n\n let pointer;\n if (baseObject.type === \"and\") {\n pointer = baseObject.and;\n } else if (baseObject.type === \"or\") {\n pointer = baseObject.or;\n } else {\n throw new Error(\n `Error: Can not apply ${operation} to type ${baseObject.type}`,\n );\n }\n\n const pickedTypes = pointer\n .map((type) => {\n const node = applyPickOrOmitToNodeType(type, operation, properties);\n if (node === undefined) {\n return undefined;\n }\n\n return { ...node, additionalProperties: false } as ObjectType;\n })\n .filter((type) => type !== undefined) as NodeType[];\n\n if (pickedTypes.length === 0) {\n return undefined;\n }\n\n if (pickedTypes.length === 1) {\n return pickedTypes[0];\n }\n\n if (baseObject.type === \"and\") {\n return { ...baseObject, and: pickedTypes };\n }\n\n return { ...baseObject, or: pickedTypes };\n}\n\n/** Applies the TS `Partial` or `Required` type to an interface/union/intersection */\nexport function applyPartialOrRequiredToNodeType(\n baseObject: NodeType,\n modifier: boolean,\n): NodeType {\n if (baseObject.type === \"object\") {\n const newObject = { ...baseObject };\n Object.keys(baseObject.properties).forEach((key) => {\n newObject.properties[key].required = modifier;\n });\n\n return newObject;\n }\n\n if (baseObject.type === \"and\") {\n const pickedTypes = baseObject.and.map((type) =>\n applyPartialOrRequiredToNodeType(type, modifier),\n );\n return { ...baseObject, and: pickedTypes };\n }\n\n if (baseObject.type === \"or\") {\n const pickedTypes = baseObject.or.map((type) =>\n applyPartialOrRequiredToNodeType(type, modifier),\n );\n return { ...baseObject, or: pickedTypes };\n }\n\n throw new Error(\n `Error: Can not apply ${modifier ? \"Required\" : \"Partial\"} to type ${\n baseObject.type\n }`,\n );\n}\n\n/** Applies the TS `Exclude` type to a union */\nexport function applyExcludeToNodeType(\n baseObject: OrType,\n filters: NodeType | OrType,\n): NodeType {\n const remainingMembers = baseObject.or.filter((type) => {\n if (filters.type === \"or\") {\n return !filters.or.some((filter) => computeExtends(type, filter));\n }\n\n return !computeExtends(type, filters);\n });\n\n if (remainingMembers.length === 1) {\n return remainingMembers[0];\n }\n\n return {\n ...baseObject,\n or: remainingMembers,\n };\n}\n","import ts from \"typescript\";\nimport type {\n NamedType,\n NamedTypeWithGenerics,\n NodeType,\n NodeTypeWithGenerics,\n PrimitiveTypes,\n StringType,\n NumberType,\n BooleanType,\n ObjectType,\n ArrayType,\n RefType,\n OrType,\n AndType,\n RecordType,\n} from \"@xlr-lib/xlr\";\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 if the NodeType has generic tokens\n */\nexport function isGenericNodeType<T extends NodeType = NodeType>(\n nt: NodeType,\n): nt is NodeTypeWithGenerics<T> {\n return (nt as NodeTypeWithGenerics).genericTokens?.length > 0;\n}\n\n/**\n * Returns if the named type has generic tokens\n */\nexport function isGenericNamedType<T extends NamedType = NamedType>(\n nt: NodeType,\n): nt is NamedTypeWithGenerics<T> {\n return (nt as NamedTypeWithGenerics).genericTokens?.length > 0;\n}\n\n/**\n * Returns if the node is a `PrimitiveTypes`\n */\nexport function isPrimitiveTypeNode(node: NodeType): node is PrimitiveTypes {\n return (\n node.type === \"string\" ||\n node.type === \"number\" ||\n node.type === \"boolean\" ||\n node.type === \"null\" ||\n node.type === \"any\" ||\n node.type === \"never\" ||\n node.type === \"undefined\" ||\n node.type === \"unknown\" ||\n node.type === \"void\"\n );\n}\n\n/**\n * Type Guard for non-null values\n */\nexport function isNonNullable<T>(a: T | null | undefined): a is NonNullable<T> {\n return a !== null || a !== undefined;\n}\n\n/**\n * Type guard for string type nodes\n */\nexport function isStringType(node: NodeType): node is StringType {\n return node.type === \"string\";\n}\n\n/**\n * Type guard for number type nodes\n */\nexport function isNumberType(node: NodeType): node is NumberType {\n return node.type === \"number\";\n}\n\n/**\n * Type guard for boolean type nodes\n */\nexport function isBooleanType(node: NodeType): node is BooleanType {\n return node.type === \"boolean\";\n}\n\n/**\n * Type guard for object type nodes\n */\nexport function isObjectType(node: NodeType): node is ObjectType {\n return node.type === \"object\";\n}\n\n/**\n * Type guard for array type nodes\n */\nexport function isArrayType(node: NodeType): node is ArrayType {\n return node.type === \"array\";\n}\n\n/**\n * Type guard for ref type nodes\n */\nexport function isRefType(node: NodeType): node is RefType {\n return node.type === \"ref\";\n}\n\n/**\n * Type guard for or (union) type nodes\n */\nexport function isOrType(node: NodeType): node is OrType {\n return node.type === \"or\";\n}\n\n/**\n * Type guard for and (intersection) type nodes\n */\nexport function isAndType(node: NodeType): node is AndType {\n return node.type === \"and\";\n}\n\n/**\n * Type guard for record type nodes\n */\nexport function isRecordType(node: NodeType): node is RecordType {\n return node.type === \"record\";\n}\n\n/**\n * Type guard for named types (have name and source)\n */\nexport function isNamedType<T extends NodeType = NodeType>(\n node: NodeType,\n): node is NamedType<T> {\n return \"name\" in node && \"source\" in node && typeof node.name === \"string\";\n}\n","import type { Node } from \"jsonc-parser\";\nimport type {\n ConditionalType,\n NodeType,\n ObjectType,\n RefNode,\n} from \"@xlr-lib/xlr\";\nimport { isGenericNodeType, isPrimitiveTypeNode } from \"./type-checks\";\nimport { fillInGenerics } from \"./ts-helpers\";\n\nexport interface PropertyNode {\n /** Equivalent Property Name */\n key: string;\n\n /** Equivalent Property Value */\n value: Node;\n}\n\n/**\n * Takes a property node and returns the underlying Key/Value Pairs\n */\nexport function propertyToTuple(node: Node): PropertyNode {\n let key = node.children?.[0].value as string;\n if (key.includes(\"-\")) {\n // XLR outputs all escaped properties with single quotes\n key = `'${key}'`;\n }\n\n return {\n key,\n value: node.children?.[1] as Node,\n };\n}\n\n/**\n * Turns a node's children into a map for easy access\n */\nexport function makePropertyMap(node: Node): Map<string, Node> {\n const m = new Map();\n node.children?.forEach((child) => {\n const property = propertyToTuple(child);\n m.set(property.key, property.value);\n });\n return m;\n}\n\n/**\n * Checks if property is a leaf node or another node\n */\nexport function isNode(obj: Node | string | number | boolean): obj is Node {\n return (\n typeof obj !== \"string\" ||\n typeof obj !== \"number\" ||\n typeof obj !== \"boolean\"\n );\n}\n\n/**\n * Computes if the first arg extends the second arg\n */\nexport function computeExtends(a: NodeType, b: NodeType): boolean {\n // special case for any/unknown being functionally the same\n if (\n (a.type === \"any\" || a.type === \"unknown\") &&\n (b.type === \"any\" || b.type === \"unknown\")\n ) {\n return true;\n }\n\n // special case for null/undefined being functionally the same\n if (\n (a.type === \"null\" || a.type === \"undefined\") &&\n (b.type === \"null\" || b.type === \"undefined\")\n ) {\n return true;\n }\n\n // check simple case of equal types\n if (a.type === b.type) {\n if (isPrimitiveTypeNode(a) && isPrimitiveTypeNode(b)) {\n if (a.const && b.const) {\n if (a.const === b.const) {\n return true;\n }\n } else {\n return true;\n }\n }\n\n if (a.type === \"ref\" && b.type === \"ref\") {\n return a.ref === b.ref;\n }\n\n if (a.type === \"object\" && b.type === \"object\") {\n for (const property in b.properties) {\n const propertyNode = b.properties[property];\n if (\n !a.properties[property] ||\n !computeExtends(a.properties[property].node, propertyNode.node)\n ) {\n return false;\n }\n }\n\n return true;\n }\n }\n\n if (isPrimitiveTypeNode(a) && b.type === \"or\") {\n return b.or.every((member) => computeExtends(a, member));\n }\n\n if (isPrimitiveTypeNode(b) && a.type === \"or\") {\n return a.or.every((member) => computeExtends(b, member));\n }\n\n if (a.type === \"or\" && b.type === \"or\") {\n return a.or.every((x) => b.or.some((y) => computeExtends(x, y)));\n }\n\n return false;\n}\n\n/**\n * Attempts to resolve a conditional type\n */\nexport function resolveConditional(conditional: ConditionalType): NodeType {\n const { left, right } = conditional.check;\n const conditionalResult = computeExtends(left, right)\n ? conditional.value.true\n : conditional.value.false;\n\n // Compose first level generics here since `conditionalResult` won't have them\n if (isGenericNodeType(conditional)) {\n const genericMap: Map<string, NodeType> = new Map();\n conditional.genericTokens.forEach((token) => {\n genericMap.set(\n token.symbol,\n token.default ?? token.constraints ?? { type: \"any\" },\n );\n });\n\n return fillInGenerics(conditionalResult, genericMap);\n }\n\n return conditionalResult;\n}\n\n/**\n * Resolve referenced node with potential generic arguments\n */\nexport function resolveReferenceNode(\n genericReference: RefNode,\n typeToFill: NodeType,\n): NodeType {\n const genericArgs = genericReference.genericArguments;\n const genericMap: Map<string, NodeType> = new Map();\n\n // Compose first level generics here from `genericReference`\n if (genericArgs && isGenericNodeType(typeToFill)) {\n typeToFill.genericTokens.forEach((token, index) => {\n genericMap.set(\n token.symbol,\n genericArgs[index] ?? token.default ?? token.constraints,\n );\n });\n }\n\n // Fill in generics\n const filledInNode = fillInGenerics(typeToFill, genericMap);\n\n // Remove generic tokens that were resolve\n if (isGenericNodeType(filledInNode) && genericArgs?.length) {\n if (genericArgs.length < filledInNode.genericTokens.length) {\n filledInNode.genericTokens = filledInNode.genericTokens.slice(\n genericArgs?.length,\n );\n } else if (genericArgs.length === filledInNode.genericTokens.length) {\n filledInNode.genericTokens = [];\n }\n }\n\n // Resolve index access\n if (genericReference.property && filledInNode.type === \"object\") {\n return (\n filledInNode.properties[genericReference.property]?.node ??\n filledInNode.additionalProperties ?? { type: \"undefined\" }\n );\n }\n\n return filledInNode;\n}\n\n/**\n * Combines two ObjectType objects to get a representation of the effective TypeScript interface of `base` extending `operand`\n - * @param base The base interface\n - * @param operand The interface that is extended\n - * @param errorOnOverlap whether or not conflicting properties should throw an error or use the property from operand\n - * @returns `ObjectType`\n */\nexport function computeEffectiveObject(\n base: ObjectType,\n operand: ObjectType,\n errorOnOverlap = true,\n): ObjectType {\n const baseObjectName = base.name ?? base.title ?? \"object literal\";\n const operandObjectName = operand.name ?? operand.title ?? \"object literal\";\n const newObject = {\n ...JSON.parse(JSON.stringify(base)),\n name: `${baseObjectName} & ${operandObjectName}`,\n description: `Effective type combining ${baseObjectName} and ${operandObjectName}`,\n genericTokens: [\n ...(isGenericNodeType(base) ? base.genericTokens : []),\n ...(isGenericNodeType(operand) ? operand.genericTokens : []),\n ],\n };\n // TODO this check needs to account for primitive -> primitive generic overlap\n\n for (const property in operand.properties) {\n if (newObject.properties[property] !== undefined && errorOnOverlap) {\n if (\n !computeExtends(\n newObject.properties[property].node,\n operand.properties[property].node,\n )\n ) {\n throw new Error(\n `Can't compute effective type for ${baseObjectName} and ${operandObjectName} because of conflicting properties ${property}`,\n );\n }\n }\n\n newObject.properties[property] = operand.properties[property];\n }\n\n if (newObject.additionalProperties && operand.additionalProperties) {\n if (\n !isPrimitiveTypeNode(newObject.additionalProperties) ||\n !isPrimitiveTypeNode(operand.additionalProperties) ||\n newObject.additionalProperties.type !== operand.additionalProperties.type\n ) {\n newObject.additionalProperties = {\n type: \"and\",\n and: [newObject.additionalProperties, operand.additionalProperties],\n };\n }\n } else if (operand.additionalProperties) {\n newObject.additionalProperties = operand.additionalProperties;\n }\n\n return newObject;\n}\n","import ts from \"typescript\";\nimport type { SymbolDisplayPart } from \"typescript\";\nimport type { NodeType } from \"@xlr-lib/xlr\";\nimport { isPrimitiveTypeNode } from \"./type-checks\";\n\nconst { SymbolDisplayPartKind, displayPartsToString } = ts;\n\n/** Like `.join()` but for arrays */\nfunction insertBetweenElements<T>(array: Array<T>, separator: T): T[] {\n return array.reduce((acc, item, index) => {\n if (index === 0) {\n return [item];\n }\n\n return [...acc, separator, item];\n }, [] as T[]);\n}\n\n/**\n * Generate a documentation string for a given node\n *\n * @param node - The source node to author the docs string for\n * @returns - documentation string\n */\nexport function createTSDocString(node: NodeType): Array<SymbolDisplayPart> {\n if (node.type === \"ref\") {\n return [\n {\n text: node.ref,\n kind: SymbolDisplayPartKind.keyword as any,\n },\n ];\n }\n\n if (node.type === \"or\" || node.type === \"and\") {\n const items = node.type === \"and\" ? node.and : node.or;\n\n return insertBetweenElements(\n items.map((subnode) => createTSDocString(subnode)),\n [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: node.type === \"and\" ? \" & \" : \" | \",\n },\n ],\n ).flat();\n }\n\n if (node.type === \"function\") {\n return [\n {\n kind: SymbolDisplayPartKind.keyword as any,\n text: \"function\",\n },\n {\n kind: SymbolDisplayPartKind.space as any,\n text: \" \",\n },\n ...(node.name\n ? [{ text: node.name, kind: SymbolDisplayPartKind.methodName }]\n : []),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"(\",\n },\n ...insertBetweenElements(\n node.parameters.map((p) => {\n if (p.name) {\n return [\n {\n kind: SymbolDisplayPartKind.parameterName as any,\n text: p.name,\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: p.optional ? \"?\" : \"\",\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \": \",\n },\n ...createTSDocString(p.type),\n ];\n }\n\n return createTSDocString(p.type);\n }),\n [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \", \",\n },\n ],\n ).flat(),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \")\",\n },\n ...(node.returnType\n ? [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \": \",\n },\n ...createTSDocString(node.returnType),\n ]\n : []),\n ];\n }\n\n if (node.type === \"tuple\") {\n return [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"[\",\n },\n ...insertBetweenElements(\n node.elementTypes.map((t) => {\n if (t.name) {\n return [\n {\n kind: SymbolDisplayPartKind.propertyName as any,\n text: t.name,\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \": \",\n },\n ...createTSDocString(t.type),\n ];\n }\n\n return createTSDocString(t.type);\n }),\n [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \", \",\n },\n ],\n ).flat(),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"]\",\n },\n ];\n }\n\n if (node.type === \"array\") {\n return [\n {\n kind: SymbolDisplayPartKind.interfaceName as any,\n text: \"Array\",\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"<\",\n },\n ...createTSDocString(node.elementType),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \">\",\n },\n ];\n }\n\n if (node.type === \"record\") {\n return [\n {\n kind: SymbolDisplayPartKind.interfaceName as any,\n text: \"Record\",\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"<\",\n },\n ...createTSDocString(node.keyType),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \", \",\n },\n ...createTSDocString(node.valueType),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \">\",\n },\n ];\n }\n\n if (\n (node.type === \"string\" ||\n node.type === \"boolean\" ||\n node.type === \"number\") &&\n node.const !== undefined\n ) {\n return [\n {\n kind: SymbolDisplayPartKind.keyword as any,\n text:\n typeof node.const === \"string\"\n ? `\"${node.const}\"`\n : String(node.const),\n },\n ];\n }\n\n if (isPrimitiveTypeNode(node) && node.type !== \"null\") {\n return [\n {\n kind: SymbolDisplayPartKind.keyword as any,\n text: node.type,\n },\n ];\n }\n\n if (node.type === \"object\" && node.name) {\n return [\n {\n kind: SymbolDisplayPartKind.interfaceName as any,\n text: node.name,\n },\n ];\n }\n\n return [\n {\n kind: SymbolDisplayPartKind.localName as any,\n text: node.type,\n },\n ];\n}\n\n/** Convert the TS SymbolDisplayParts into a single string */\nexport function symbolDisplayToString(\n displayParts: Array<SymbolDisplayPart>,\n): string {\n return displayPartsToString(displayParts);\n}\n\n/** Create a documentation string from node */\nexport function createDocString(node: NodeType): string {\n return symbolDisplayToString(createTSDocString(node));\n}\n"],"mappings":"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","names":["ts","import_typescript","import_typescript","ts","ts","import_typescript","ts"]}
1
+ {"version":3,"sources":["../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/index.ts","../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/annotations.ts","../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/ts-helpers.ts","../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/type-checks.ts","../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/validation-helpers.ts","../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/documentation.ts"],"sourcesContent":["export * from \"./annotations\";\nexport * from \"./ts-helpers\";\nexport * from \"./type-checks\";\nexport * from \"./validation-helpers\";\nexport * from \"./documentation\";\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","import ts from \"typescript\";\nimport type {\n NamedType,\n NodeType,\n ObjectProperty,\n ObjectType,\n OrType,\n RefNode,\n} from \"@xlr-lib/xlr\";\nimport { computeExtends, resolveConditional } from \"./validation-helpers\";\nimport { isGenericNamedType, isGenericNodeType } from \"./type-checks\";\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 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 * 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 * Walks generics to fill in values from a combination of the default, constraint, and passed in map values\n * TODO convert this to use simpleTransformGenerator\n */\nexport function fillInGenerics(\n xlrNode: NodeType,\n generics?: Map<string, NodeType>,\n): NodeType {\n // Need to make sure not to set generics in passed in map to avoid using generics outside of tree\n let localGenerics: Map<string, NodeType>;\n\n if (generics) {\n localGenerics = new Map(generics);\n } else {\n localGenerics = new Map();\n if (isGenericNodeType(xlrNode)) {\n xlrNode.genericTokens?.forEach((token) => {\n const genericValue = (token.default ?? token.constraints) as NodeType;\n localGenerics.set(\n token.symbol,\n fillInGenerics(genericValue, localGenerics),\n );\n });\n }\n }\n\n if (xlrNode.type === \"ref\") {\n if (localGenerics.has(xlrNode.ref)) {\n return {\n ...(localGenerics.get(xlrNode.ref) as NodeType),\n ...(xlrNode.genericArguments\n ? {\n genericArguments: xlrNode.genericArguments.map((ga) =>\n fillInGenerics(ga, localGenerics),\n ),\n }\n : {}),\n ...(xlrNode.title ? { title: xlrNode.title } : {}),\n ...(xlrNode.name ? { name: xlrNode.name } : {}),\n ...(xlrNode.description ? { description: xlrNode.description } : {}),\n ...(xlrNode.comment ? { comment: xlrNode.comment } : {}),\n };\n }\n\n return {\n ...xlrNode,\n ...(xlrNode.genericArguments\n ? {\n genericArguments: xlrNode.genericArguments.map((ga) =>\n fillInGenerics(ga, localGenerics),\n ),\n }\n : {}),\n };\n }\n\n if (xlrNode.type === \"object\") {\n const newProperties: { [name: string]: ObjectProperty } = {};\n Object.getOwnPropertyNames(xlrNode.properties).forEach((propName) => {\n const prop = xlrNode.properties[propName];\n newProperties[propName] = {\n required: prop.required,\n node: fillInGenerics(prop.node, localGenerics),\n };\n });\n\n return {\n ...xlrNode,\n properties: newProperties,\n ...(isGenericNamedType(xlrNode)\n ? {\n genericTokens: xlrNode.genericTokens.map((token) => {\n return {\n ...token,\n constraints: token.constraints\n ? fillInGenerics(token.constraints, localGenerics)\n : undefined,\n default: token.default\n ? fillInGenerics(token.default, localGenerics)\n : undefined,\n };\n }),\n }\n : {}),\n extends: xlrNode.extends\n ? (fillInGenerics(xlrNode.extends, localGenerics) as RefNode)\n : undefined,\n additionalProperties: xlrNode.additionalProperties\n ? fillInGenerics(xlrNode.additionalProperties, localGenerics)\n : false,\n };\n }\n\n if (xlrNode.type === \"array\") {\n return {\n ...xlrNode,\n elementType: fillInGenerics(xlrNode.elementType, localGenerics),\n };\n } else if (xlrNode.type === \"or\" || xlrNode.type === \"and\") {\n let pointer;\n if (xlrNode.type === \"or\") {\n pointer = xlrNode.or;\n } else {\n pointer = xlrNode.and;\n }\n\n return {\n ...xlrNode,\n [xlrNode.type]: pointer.map((prop) => {\n return fillInGenerics(prop, localGenerics);\n }),\n };\n } else if (xlrNode.type === \"record\") {\n return {\n ...xlrNode,\n keyType: fillInGenerics(xlrNode.keyType, localGenerics),\n valueType: fillInGenerics(xlrNode.valueType, localGenerics),\n };\n } else if (xlrNode.type === \"conditional\") {\n const filledInConditional = {\n ...xlrNode,\n check: {\n left: fillInGenerics(xlrNode.check.left, localGenerics),\n right: fillInGenerics(xlrNode.check.right, localGenerics),\n },\n value: {\n true: fillInGenerics(xlrNode.value.true, localGenerics),\n false: fillInGenerics(xlrNode.value.false, localGenerics),\n },\n };\n\n // Check to see if we have enough information to resolve this conditional\n if (\n filledInConditional.check.left.type !== \"ref\" &&\n filledInConditional.check.right.type !== \"ref\"\n ) {\n return {\n name: xlrNode.name,\n title: xlrNode.title,\n ...resolveConditional(filledInConditional),\n } as NamedType;\n }\n\n return filledInConditional;\n }\n\n return xlrNode;\n}\n\n/** Applies the TS `Pick` or `Omit` type to an interface/union/intersection */\nexport function applyPickOrOmitToNodeType(\n baseObject: NodeType,\n operation: \"Pick\" | \"Omit\",\n properties: Set<string>,\n): NodeType | undefined {\n if (baseObject.type === \"object\") {\n const newObject = { ...baseObject };\n Object.keys(baseObject.properties).forEach((key) => {\n if (\n (operation === \"Omit\" && properties.has(key)) ||\n (operation === \"Pick\" && !properties.has(key))\n ) {\n delete newObject.properties[key];\n }\n });\n\n /**\n * Filter out objects in cases:\n * - A Pick operation and there are no properties left\n * - An Omit operation and there are no properties left and no additional properties allowed\n */\n if (\n Object.keys(newObject.properties).length === 0 &&\n (operation !== \"Omit\" || newObject.additionalProperties === false)\n ) {\n return undefined;\n }\n\n return newObject;\n }\n\n let pointer;\n if (baseObject.type === \"and\") {\n pointer = baseObject.and;\n } else if (baseObject.type === \"or\") {\n pointer = baseObject.or;\n } else {\n throw new Error(\n `Error: Can not apply ${operation} to type ${baseObject.type}`,\n );\n }\n\n const pickedTypes = pointer\n .map((type) => {\n const node = applyPickOrOmitToNodeType(type, operation, properties);\n if (node === undefined) {\n return undefined;\n }\n\n return { ...node, additionalProperties: false } as ObjectType;\n })\n .filter((type) => type !== undefined) as NodeType[];\n\n if (pickedTypes.length === 0) {\n return undefined;\n }\n\n if (pickedTypes.length === 1) {\n return pickedTypes[0];\n }\n\n if (baseObject.type === \"and\") {\n return { ...baseObject, and: pickedTypes };\n }\n\n return { ...baseObject, or: pickedTypes };\n}\n\n/** Applies the TS `Partial` or `Required` type to an interface/union/intersection */\nexport function applyPartialOrRequiredToNodeType(\n baseObject: NodeType,\n modifier: boolean,\n): NodeType {\n if (baseObject.type === \"object\") {\n const newObject = { ...baseObject };\n Object.keys(baseObject.properties).forEach((key) => {\n newObject.properties[key].required = modifier;\n });\n\n return newObject;\n }\n\n if (baseObject.type === \"and\") {\n const pickedTypes = baseObject.and.map((type) =>\n applyPartialOrRequiredToNodeType(type, modifier),\n );\n return { ...baseObject, and: pickedTypes };\n }\n\n if (baseObject.type === \"or\") {\n const pickedTypes = baseObject.or.map((type) =>\n applyPartialOrRequiredToNodeType(type, modifier),\n );\n return { ...baseObject, or: pickedTypes };\n }\n\n throw new Error(\n `Error: Can not apply ${modifier ? \"Required\" : \"Partial\"} to type ${\n baseObject.type\n }`,\n );\n}\n\n/** Applies the TS `Exclude` type to a union */\nexport function applyExcludeToNodeType(\n baseObject: OrType,\n filters: NodeType | OrType,\n): NodeType {\n const remainingMembers = baseObject.or.filter((type) => {\n if (filters.type === \"or\") {\n return !filters.or.some((filter) => computeExtends(type, filter));\n }\n\n return !computeExtends(type, filters);\n });\n\n if (remainingMembers.length === 1) {\n return remainingMembers[0];\n }\n\n return {\n ...baseObject,\n or: remainingMembers,\n };\n}\n","import ts from \"typescript\";\nimport type {\n NamedType,\n NamedTypeWithGenerics,\n NodeType,\n NodeTypeWithGenerics,\n PrimitiveTypes,\n} from \"@xlr-lib/xlr\";\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 if the NodeType has generic tokens\n */\nexport function isGenericNodeType<T extends NodeType = NodeType>(\n nt: NodeType,\n): nt is NodeTypeWithGenerics<T> {\n return (nt as NodeTypeWithGenerics).genericTokens?.length > 0;\n}\n\n/**\n * Returns if the named type has generic tokens\n */\nexport function isGenericNamedType<T extends NamedType = NamedType>(\n nt: NodeType,\n): nt is NamedTypeWithGenerics<T> {\n return (nt as NamedTypeWithGenerics).genericTokens?.length > 0;\n}\n\n/**\n * Returns if the node is a `PrimitiveTypes`\n */\nexport function isPrimitiveTypeNode(node: NodeType): node is PrimitiveTypes {\n return (\n node.type === \"string\" ||\n node.type === \"number\" ||\n node.type === \"boolean\" ||\n node.type === \"null\" ||\n node.type === \"any\" ||\n node.type === \"never\" ||\n node.type === \"undefined\" ||\n node.type === \"unknown\" ||\n node.type === \"void\"\n );\n}\n\n/**\n * Type Guard for non-null values\n */\nexport function isNonNullable<T>(a: T | null | undefined): a is NonNullable<T> {\n return a !== null || a !== undefined;\n}\n","import type { Node } from \"jsonc-parser\";\nimport type {\n ConditionalType,\n NodeType,\n ObjectType,\n RefNode,\n} from \"@xlr-lib/xlr\";\nimport { isGenericNodeType, isPrimitiveTypeNode } from \"./type-checks\";\nimport { fillInGenerics } from \"./ts-helpers\";\n\nexport interface PropertyNode {\n /** Equivalent Property Name */\n key: string;\n\n /** Equivalent Property Value */\n value: Node;\n}\n\n/**\n * Takes a property node and returns the underlying Key/Value Pairs\n */\nexport function propertyToTuple(node: Node): PropertyNode {\n let key = node.children?.[0].value as string;\n if (key.includes(\"-\")) {\n // XLR outputs all escaped properties with single quotes\n key = `'${key}'`;\n }\n\n return {\n key,\n value: node.children?.[1] as Node,\n };\n}\n\n/**\n * Turns a node's children into a map for easy access\n */\nexport function makePropertyMap(node: Node): Map<string, Node> {\n const m = new Map();\n node.children?.forEach((child) => {\n const property = propertyToTuple(child);\n m.set(property.key, property.value);\n });\n return m;\n}\n\n/**\n * Checks if property is a leaf node or another node\n */\nexport function isNode(obj: Node | string | number | boolean): obj is Node {\n return (\n typeof obj !== \"string\" ||\n typeof obj !== \"number\" ||\n typeof obj !== \"boolean\"\n );\n}\n\n/**\n * Computes if the first arg extends the second arg\n */\nexport function computeExtends(a: NodeType, b: NodeType): boolean {\n // special case for any/unknown being functionally the same\n if (\n (a.type === \"any\" || a.type === \"unknown\") &&\n (b.type === \"any\" || b.type === \"unknown\")\n ) {\n return true;\n }\n\n // special case for null/undefined being functionally the same\n if (\n (a.type === \"null\" || a.type === \"undefined\") &&\n (b.type === \"null\" || b.type === \"undefined\")\n ) {\n return true;\n }\n\n // check simple case of equal types\n if (a.type === b.type) {\n if (isPrimitiveTypeNode(a) && isPrimitiveTypeNode(b)) {\n if (a.const && b.const) {\n if (a.const === b.const) {\n return true;\n }\n } else {\n return true;\n }\n }\n\n if (a.type === \"ref\" && b.type === \"ref\") {\n return a.ref === b.ref;\n }\n\n if (a.type === \"object\" && b.type === \"object\") {\n for (const property in b.properties) {\n const propertyNode = b.properties[property];\n if (\n !a.properties[property] ||\n !computeExtends(a.properties[property].node, propertyNode.node)\n ) {\n return false;\n }\n }\n\n return true;\n }\n }\n\n if (isPrimitiveTypeNode(a) && b.type === \"or\") {\n return b.or.every((member) => computeExtends(a, member));\n }\n\n if (isPrimitiveTypeNode(b) && a.type === \"or\") {\n return a.or.every((member) => computeExtends(b, member));\n }\n\n if (a.type === \"or\" && b.type === \"or\") {\n return a.or.every((x) => b.or.some((y) => computeExtends(x, y)));\n }\n\n return false;\n}\n\n/**\n * Attempts to resolve a conditional type\n */\nexport function resolveConditional(conditional: ConditionalType): NodeType {\n const { left, right } = conditional.check;\n const conditionalResult = computeExtends(left, right)\n ? conditional.value.true\n : conditional.value.false;\n\n // Compose first level generics here since `conditionalResult` won't have them\n if (isGenericNodeType(conditional)) {\n const genericMap: Map<string, NodeType> = new Map();\n conditional.genericTokens.forEach((token) => {\n genericMap.set(\n token.symbol,\n token.default ?? token.constraints ?? { type: \"any\" },\n );\n });\n\n return fillInGenerics(conditionalResult, genericMap);\n }\n\n return conditionalResult;\n}\n\n/**\n * Resolve referenced node with potential generic arguments\n */\nexport function resolveReferenceNode(\n genericReference: RefNode,\n typeToFill: NodeType,\n): NodeType {\n const genericArgs = genericReference.genericArguments;\n const genericMap: Map<string, NodeType> = new Map();\n\n // Compose first level generics here from `genericReference`\n if (genericArgs && isGenericNodeType(typeToFill)) {\n typeToFill.genericTokens.forEach((token, index) => {\n genericMap.set(\n token.symbol,\n genericArgs[index] ?? token.default ?? token.constraints,\n );\n });\n }\n\n // Fill in generics\n const filledInNode = fillInGenerics(typeToFill, genericMap);\n\n // Remove generic tokens that were resolve\n if (isGenericNodeType(filledInNode) && genericArgs?.length) {\n if (genericArgs.length < filledInNode.genericTokens.length) {\n filledInNode.genericTokens = filledInNode.genericTokens.slice(\n genericArgs?.length,\n );\n } else if (genericArgs.length === filledInNode.genericTokens.length) {\n filledInNode.genericTokens = [];\n }\n }\n\n // Resolve index access\n if (genericReference.property && filledInNode.type === \"object\") {\n return (\n filledInNode.properties[genericReference.property]?.node ??\n filledInNode.additionalProperties ?? { type: \"undefined\" }\n );\n }\n\n return filledInNode;\n}\n\n/**\n * Combines two ObjectType objects to get a representation of the effective TypeScript interface of `base` extending `operand`\n - * @param base The base interface\n - * @param operand The interface that is extended\n - * @param errorOnOverlap whether or not conflicting properties should throw an error or use the property from operand\n - * @returns `ObjectType`\n */\nexport function computeEffectiveObject(\n base: ObjectType,\n operand: ObjectType,\n errorOnOverlap = true,\n): ObjectType {\n const baseObjectName = base.name ?? base.title ?? \"object literal\";\n const operandObjectName = operand.name ?? operand.title ?? \"object literal\";\n const newObject = {\n ...JSON.parse(JSON.stringify(base)),\n name: `${baseObjectName} & ${operandObjectName}`,\n description: `Effective type combining ${baseObjectName} and ${operandObjectName}`,\n genericTokens: [\n ...(isGenericNodeType(base) ? base.genericTokens : []),\n ...(isGenericNodeType(operand) ? operand.genericTokens : []),\n ],\n };\n // TODO this check needs to account for primitive -> primitive generic overlap\n\n for (const property in operand.properties) {\n if (newObject.properties[property] !== undefined && errorOnOverlap) {\n if (\n !computeExtends(\n newObject.properties[property].node,\n operand.properties[property].node,\n )\n ) {\n throw new Error(\n `Can't compute effective type for ${baseObjectName} and ${operandObjectName} because of conflicting properties ${property}`,\n );\n }\n }\n\n newObject.properties[property] = operand.properties[property];\n }\n\n if (newObject.additionalProperties && operand.additionalProperties) {\n if (\n !isPrimitiveTypeNode(newObject.additionalProperties) ||\n !isPrimitiveTypeNode(operand.additionalProperties) ||\n newObject.additionalProperties.type !== operand.additionalProperties.type\n ) {\n newObject.additionalProperties = {\n type: \"and\",\n and: [newObject.additionalProperties, operand.additionalProperties],\n };\n }\n } else if (operand.additionalProperties) {\n newObject.additionalProperties = operand.additionalProperties;\n }\n\n return newObject;\n}\n","import ts from \"typescript\";\nimport type { SymbolDisplayPart } from \"typescript\";\nimport type { NodeType } from \"@xlr-lib/xlr\";\nimport { isPrimitiveTypeNode } from \"./type-checks\";\n\nconst { SymbolDisplayPartKind, displayPartsToString } = ts;\n\n/** Like `.join()` but for arrays */\nfunction insertBetweenElements<T>(array: Array<T>, separator: T): T[] {\n return array.reduce((acc, item, index) => {\n if (index === 0) {\n return [item];\n }\n\n return [...acc, separator, item];\n }, [] as T[]);\n}\n\n/**\n * Generate a documentation string for a given node\n *\n * @param node - The source node to author the docs string for\n * @returns - documentation string\n */\nexport function createTSDocString(node: NodeType): Array<SymbolDisplayPart> {\n if (node.type === \"ref\") {\n return [\n {\n text: node.ref,\n kind: SymbolDisplayPartKind.keyword as any,\n },\n ];\n }\n\n if (node.type === \"or\" || node.type === \"and\") {\n const items = node.type === \"and\" ? node.and : node.or;\n\n return insertBetweenElements(\n items.map((subnode) => createTSDocString(subnode)),\n [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: node.type === \"and\" ? \" & \" : \" | \",\n },\n ],\n ).flat();\n }\n\n if (node.type === \"function\") {\n return [\n {\n kind: SymbolDisplayPartKind.keyword as any,\n text: \"function\",\n },\n {\n kind: SymbolDisplayPartKind.space as any,\n text: \" \",\n },\n ...(node.name\n ? [{ text: node.name, kind: SymbolDisplayPartKind.methodName }]\n : []),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"(\",\n },\n ...insertBetweenElements(\n node.parameters.map((p) => {\n if (p.name) {\n return [\n {\n kind: SymbolDisplayPartKind.parameterName as any,\n text: p.name,\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: p.optional ? \"?\" : \"\",\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \": \",\n },\n ...createTSDocString(p.type),\n ];\n }\n\n return createTSDocString(p.type);\n }),\n [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \", \",\n },\n ],\n ).flat(),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \")\",\n },\n ...(node.returnType\n ? [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \": \",\n },\n ...createTSDocString(node.returnType),\n ]\n : []),\n ];\n }\n\n if (node.type === \"tuple\") {\n return [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"[\",\n },\n ...insertBetweenElements(\n node.elementTypes.map((t) => {\n if (t.name) {\n return [\n {\n kind: SymbolDisplayPartKind.propertyName as any,\n text: t.name,\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \": \",\n },\n ...createTSDocString(t.type),\n ];\n }\n\n return createTSDocString(t.type);\n }),\n [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \", \",\n },\n ],\n ).flat(),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"]\",\n },\n ];\n }\n\n if (node.type === \"array\") {\n return [\n {\n kind: SymbolDisplayPartKind.interfaceName as any,\n text: \"Array\",\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"<\",\n },\n ...createTSDocString(node.elementType),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \">\",\n },\n ];\n }\n\n if (node.type === \"record\") {\n return [\n {\n kind: SymbolDisplayPartKind.interfaceName as any,\n text: \"Record\",\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"<\",\n },\n ...createTSDocString(node.keyType),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \", \",\n },\n ...createTSDocString(node.valueType),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \">\",\n },\n ];\n }\n\n if (\n (node.type === \"string\" ||\n node.type === \"boolean\" ||\n node.type === \"number\") &&\n node.const !== undefined\n ) {\n return [\n {\n kind: SymbolDisplayPartKind.keyword as any,\n text:\n typeof node.const === \"string\"\n ? `\"${node.const}\"`\n : String(node.const),\n },\n ];\n }\n\n if (isPrimitiveTypeNode(node) && node.type !== \"null\") {\n return [\n {\n kind: SymbolDisplayPartKind.keyword as any,\n text: node.type,\n },\n ];\n }\n\n if (node.type === \"object\" && node.name) {\n return [\n {\n kind: SymbolDisplayPartKind.interfaceName as any,\n text: node.name,\n },\n ];\n }\n\n return [\n {\n kind: SymbolDisplayPartKind.localName as any,\n text: node.type,\n },\n ];\n}\n\n/** Convert the TS SymbolDisplayParts into a single string */\nexport function symbolDisplayToString(\n displayParts: Array<SymbolDisplayPart>,\n): string {\n return displayPartsToString(displayParts);\n}\n\n/** Create a documentation string from node */\nexport function createDocString(node: NodeType): string {\n return symbolDisplayToString(createTSDocString(node));\n}\n"],"mappings":"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","names":["ts","import_typescript","import_typescript","ts","ts","import_typescript","ts"]}
@@ -185,36 +185,6 @@ function isPrimitiveTypeNode(node) {
185
185
  function isNonNullable(a) {
186
186
  return a !== null || a !== void 0;
187
187
  }
188
- function isStringType(node) {
189
- return node.type === "string";
190
- }
191
- function isNumberType(node) {
192
- return node.type === "number";
193
- }
194
- function isBooleanType(node) {
195
- return node.type === "boolean";
196
- }
197
- function isObjectType(node) {
198
- return node.type === "object";
199
- }
200
- function isArrayType(node) {
201
- return node.type === "array";
202
- }
203
- function isRefType(node) {
204
- return node.type === "ref";
205
- }
206
- function isOrType(node) {
207
- return node.type === "or";
208
- }
209
- function isAndType(node) {
210
- return node.type === "and";
211
- }
212
- function isRecordType(node) {
213
- return node.type === "record";
214
- }
215
- function isNamedType(node) {
216
- return "name" in node && "source" in node && typeof node.name === "string";
217
- }
218
188
 
219
189
  // ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/validation-helpers.ts
220
190
  function propertyToTuple(node) {
@@ -382,21 +352,6 @@ function getReferencedType(node, typeChecker) {
382
352
  return { declaration: varDecl, exported: isNodeExported(varDecl) };
383
353
  }
384
354
  }
385
- function isTypeScriptLibType(node, typeChecker) {
386
- let symbol = typeChecker.getSymbolAtLocation(node.typeName);
387
- if (!symbol) return false;
388
- if ((symbol.flags & ts3.SymbolFlags.Alias) === ts3.SymbolFlags.Alias) {
389
- symbol = typeChecker.getAliasedSymbol(symbol);
390
- }
391
- const declarations = symbol.getDeclarations();
392
- if (!declarations || declarations.length === 0) return false;
393
- return declarations.some((decl) => {
394
- const sourceFile = decl.getSourceFile();
395
- if (!sourceFile) return false;
396
- const filePath = sourceFile.fileName;
397
- return filePath.includes("/typescript/lib/") || filePath.includes("\\typescript\\lib\\") || filePath.endsWith(".d.ts") && filePath.includes("lib.");
398
- });
399
- }
400
355
  function getStringLiteralsFromUnion(node) {
401
356
  if (ts3.isUnionTypeNode(node)) {
402
357
  return new Set(
@@ -843,30 +798,19 @@ export {
843
798
  fillInGenerics,
844
799
  getReferencedType,
845
800
  getStringLiteralsFromUnion,
846
- isAndType,
847
- isArrayType,
848
- isBooleanType,
849
801
  isExportedDeclaration,
850
802
  isGenericInterfaceDeclaration,
851
803
  isGenericNamedType,
852
804
  isGenericNodeType,
853
805
  isGenericTypeDeclaration,
854
- isNamedType,
855
806
  isNode,
856
807
  isNodeExported,
857
808
  isNonNullable,
858
- isNumberType,
859
- isObjectType,
860
809
  isOptionalProperty,
861
- isOrType,
862
810
  isPrimitiveTypeNode,
863
- isRecordType,
864
- isRefType,
865
- isStringType,
866
811
  isTopLevelDeclaration,
867
812
  isTopLevelNode,
868
813
  isTypeReferenceGeneric,
869
- isTypeScriptLibType,
870
814
  makePropertyMap,
871
815
  propertyToTuple,
872
816
  resolveConditional,
package/dist/index.mjs CHANGED
@@ -185,36 +185,6 @@ function isPrimitiveTypeNode(node) {
185
185
  function isNonNullable(a) {
186
186
  return a !== null || a !== void 0;
187
187
  }
188
- function isStringType(node) {
189
- return node.type === "string";
190
- }
191
- function isNumberType(node) {
192
- return node.type === "number";
193
- }
194
- function isBooleanType(node) {
195
- return node.type === "boolean";
196
- }
197
- function isObjectType(node) {
198
- return node.type === "object";
199
- }
200
- function isArrayType(node) {
201
- return node.type === "array";
202
- }
203
- function isRefType(node) {
204
- return node.type === "ref";
205
- }
206
- function isOrType(node) {
207
- return node.type === "or";
208
- }
209
- function isAndType(node) {
210
- return node.type === "and";
211
- }
212
- function isRecordType(node) {
213
- return node.type === "record";
214
- }
215
- function isNamedType(node) {
216
- return "name" in node && "source" in node && typeof node.name === "string";
217
- }
218
188
 
219
189
  // ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/validation-helpers.ts
220
190
  function propertyToTuple(node) {
@@ -382,21 +352,6 @@ function getReferencedType(node, typeChecker) {
382
352
  return { declaration: varDecl, exported: isNodeExported(varDecl) };
383
353
  }
384
354
  }
385
- function isTypeScriptLibType(node, typeChecker) {
386
- let symbol = typeChecker.getSymbolAtLocation(node.typeName);
387
- if (!symbol) return false;
388
- if ((symbol.flags & ts3.SymbolFlags.Alias) === ts3.SymbolFlags.Alias) {
389
- symbol = typeChecker.getAliasedSymbol(symbol);
390
- }
391
- const declarations = symbol.getDeclarations();
392
- if (!declarations || declarations.length === 0) return false;
393
- return declarations.some((decl) => {
394
- const sourceFile = decl.getSourceFile();
395
- if (!sourceFile) return false;
396
- const filePath = sourceFile.fileName;
397
- return filePath.includes("/typescript/lib/") || filePath.includes("\\typescript\\lib\\") || filePath.endsWith(".d.ts") && filePath.includes("lib.");
398
- });
399
- }
400
355
  function getStringLiteralsFromUnion(node) {
401
356
  if (ts3.isUnionTypeNode(node)) {
402
357
  return new Set(
@@ -843,30 +798,19 @@ export {
843
798
  fillInGenerics,
844
799
  getReferencedType,
845
800
  getStringLiteralsFromUnion,
846
- isAndType,
847
- isArrayType,
848
- isBooleanType,
849
801
  isExportedDeclaration,
850
802
  isGenericInterfaceDeclaration,
851
803
  isGenericNamedType,
852
804
  isGenericNodeType,
853
805
  isGenericTypeDeclaration,
854
- isNamedType,
855
806
  isNode,
856
807
  isNodeExported,
857
808
  isNonNullable,
858
- isNumberType,
859
- isObjectType,
860
809
  isOptionalProperty,
861
- isOrType,
862
810
  isPrimitiveTypeNode,
863
- isRecordType,
864
- isRefType,
865
- isStringType,
866
811
  isTopLevelDeclaration,
867
812
  isTopLevelNode,
868
813
  isTypeReferenceGeneric,
869
- isTypeScriptLibType,
870
814
  makePropertyMap,
871
815
  propertyToTuple,
872
816
  resolveConditional,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/annotations.ts","../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/ts-helpers.ts","../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/type-checks.ts","../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/validation-helpers.ts","../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/documentation.ts"],"sourcesContent":["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","import ts from \"typescript\";\nimport type {\n NamedType,\n NodeType,\n ObjectProperty,\n ObjectType,\n OrType,\n RefNode,\n} from \"@xlr-lib/xlr\";\nimport { computeExtends, resolveConditional } from \"./validation-helpers\";\nimport { isGenericNamedType, isGenericNodeType } from \"./type-checks\";\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 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 * Walks generics to fill in values from a combination of the default, constraint, and passed in map values\n * TODO convert this to use simpleTransformGenerator\n */\nexport function fillInGenerics(\n xlrNode: NodeType,\n generics?: Map<string, NodeType>,\n): NodeType {\n // Need to make sure not to set generics in passed in map to avoid using generics outside of tree\n let localGenerics: Map<string, NodeType>;\n\n if (generics) {\n localGenerics = new Map(generics);\n } else {\n localGenerics = new Map();\n if (isGenericNodeType(xlrNode)) {\n xlrNode.genericTokens?.forEach((token) => {\n const genericValue = (token.default ?? token.constraints) as NodeType;\n localGenerics.set(\n token.symbol,\n fillInGenerics(genericValue, localGenerics),\n );\n });\n }\n }\n\n if (xlrNode.type === \"ref\") {\n if (localGenerics.has(xlrNode.ref)) {\n return {\n ...(localGenerics.get(xlrNode.ref) as NodeType),\n ...(xlrNode.genericArguments\n ? {\n genericArguments: xlrNode.genericArguments.map((ga) =>\n fillInGenerics(ga, localGenerics),\n ),\n }\n : {}),\n ...(xlrNode.title ? { title: xlrNode.title } : {}),\n ...(xlrNode.name ? { name: xlrNode.name } : {}),\n ...(xlrNode.description ? { description: xlrNode.description } : {}),\n ...(xlrNode.comment ? { comment: xlrNode.comment } : {}),\n };\n }\n\n return {\n ...xlrNode,\n ...(xlrNode.genericArguments\n ? {\n genericArguments: xlrNode.genericArguments.map((ga) =>\n fillInGenerics(ga, localGenerics),\n ),\n }\n : {}),\n };\n }\n\n if (xlrNode.type === \"object\") {\n const newProperties: { [name: string]: ObjectProperty } = {};\n Object.getOwnPropertyNames(xlrNode.properties).forEach((propName) => {\n const prop = xlrNode.properties[propName];\n newProperties[propName] = {\n required: prop.required,\n node: fillInGenerics(prop.node, localGenerics),\n };\n });\n\n return {\n ...xlrNode,\n properties: newProperties,\n ...(isGenericNamedType(xlrNode)\n ? {\n genericTokens: xlrNode.genericTokens.map((token) => {\n return {\n ...token,\n constraints: token.constraints\n ? fillInGenerics(token.constraints, localGenerics)\n : undefined,\n default: token.default\n ? fillInGenerics(token.default, localGenerics)\n : undefined,\n };\n }),\n }\n : {}),\n extends: xlrNode.extends\n ? (fillInGenerics(xlrNode.extends, localGenerics) as RefNode)\n : undefined,\n additionalProperties: xlrNode.additionalProperties\n ? fillInGenerics(xlrNode.additionalProperties, localGenerics)\n : false,\n };\n }\n\n if (xlrNode.type === \"array\") {\n return {\n ...xlrNode,\n elementType: fillInGenerics(xlrNode.elementType, localGenerics),\n };\n } else if (xlrNode.type === \"or\" || xlrNode.type === \"and\") {\n let pointer;\n if (xlrNode.type === \"or\") {\n pointer = xlrNode.or;\n } else {\n pointer = xlrNode.and;\n }\n\n return {\n ...xlrNode,\n [xlrNode.type]: pointer.map((prop) => {\n return fillInGenerics(prop, localGenerics);\n }),\n };\n } else if (xlrNode.type === \"record\") {\n return {\n ...xlrNode,\n keyType: fillInGenerics(xlrNode.keyType, localGenerics),\n valueType: fillInGenerics(xlrNode.valueType, localGenerics),\n };\n } else if (xlrNode.type === \"conditional\") {\n const filledInConditional = {\n ...xlrNode,\n check: {\n left: fillInGenerics(xlrNode.check.left, localGenerics),\n right: fillInGenerics(xlrNode.check.right, localGenerics),\n },\n value: {\n true: fillInGenerics(xlrNode.value.true, localGenerics),\n false: fillInGenerics(xlrNode.value.false, localGenerics),\n },\n };\n\n // Check to see if we have enough information to resolve this conditional\n if (\n filledInConditional.check.left.type !== \"ref\" &&\n filledInConditional.check.right.type !== \"ref\"\n ) {\n return {\n name: xlrNode.name,\n title: xlrNode.title,\n ...resolveConditional(filledInConditional),\n } as NamedType;\n }\n\n return filledInConditional;\n }\n\n return xlrNode;\n}\n\n/** Applies the TS `Pick` or `Omit` type to an interface/union/intersection */\nexport function applyPickOrOmitToNodeType(\n baseObject: NodeType,\n operation: \"Pick\" | \"Omit\",\n properties: Set<string>,\n): NodeType | undefined {\n if (baseObject.type === \"object\") {\n const newObject = { ...baseObject };\n Object.keys(baseObject.properties).forEach((key) => {\n if (\n (operation === \"Omit\" && properties.has(key)) ||\n (operation === \"Pick\" && !properties.has(key))\n ) {\n delete newObject.properties[key];\n }\n });\n\n /**\n * Filter out objects in cases:\n * - A Pick operation and there are no properties left\n * - An Omit operation and there are no properties left and no additional properties allowed\n */\n if (\n Object.keys(newObject.properties).length === 0 &&\n (operation !== \"Omit\" || newObject.additionalProperties === false)\n ) {\n return undefined;\n }\n\n return newObject;\n }\n\n let pointer;\n if (baseObject.type === \"and\") {\n pointer = baseObject.and;\n } else if (baseObject.type === \"or\") {\n pointer = baseObject.or;\n } else {\n throw new Error(\n `Error: Can not apply ${operation} to type ${baseObject.type}`,\n );\n }\n\n const pickedTypes = pointer\n .map((type) => {\n const node = applyPickOrOmitToNodeType(type, operation, properties);\n if (node === undefined) {\n return undefined;\n }\n\n return { ...node, additionalProperties: false } as ObjectType;\n })\n .filter((type) => type !== undefined) as NodeType[];\n\n if (pickedTypes.length === 0) {\n return undefined;\n }\n\n if (pickedTypes.length === 1) {\n return pickedTypes[0];\n }\n\n if (baseObject.type === \"and\") {\n return { ...baseObject, and: pickedTypes };\n }\n\n return { ...baseObject, or: pickedTypes };\n}\n\n/** Applies the TS `Partial` or `Required` type to an interface/union/intersection */\nexport function applyPartialOrRequiredToNodeType(\n baseObject: NodeType,\n modifier: boolean,\n): NodeType {\n if (baseObject.type === \"object\") {\n const newObject = { ...baseObject };\n Object.keys(baseObject.properties).forEach((key) => {\n newObject.properties[key].required = modifier;\n });\n\n return newObject;\n }\n\n if (baseObject.type === \"and\") {\n const pickedTypes = baseObject.and.map((type) =>\n applyPartialOrRequiredToNodeType(type, modifier),\n );\n return { ...baseObject, and: pickedTypes };\n }\n\n if (baseObject.type === \"or\") {\n const pickedTypes = baseObject.or.map((type) =>\n applyPartialOrRequiredToNodeType(type, modifier),\n );\n return { ...baseObject, or: pickedTypes };\n }\n\n throw new Error(\n `Error: Can not apply ${modifier ? \"Required\" : \"Partial\"} to type ${\n baseObject.type\n }`,\n );\n}\n\n/** Applies the TS `Exclude` type to a union */\nexport function applyExcludeToNodeType(\n baseObject: OrType,\n filters: NodeType | OrType,\n): NodeType {\n const remainingMembers = baseObject.or.filter((type) => {\n if (filters.type === \"or\") {\n return !filters.or.some((filter) => computeExtends(type, filter));\n }\n\n return !computeExtends(type, filters);\n });\n\n if (remainingMembers.length === 1) {\n return remainingMembers[0];\n }\n\n return {\n ...baseObject,\n or: remainingMembers,\n };\n}\n","import ts from \"typescript\";\nimport type {\n NamedType,\n NamedTypeWithGenerics,\n NodeType,\n NodeTypeWithGenerics,\n PrimitiveTypes,\n StringType,\n NumberType,\n BooleanType,\n ObjectType,\n ArrayType,\n RefType,\n OrType,\n AndType,\n RecordType,\n} from \"@xlr-lib/xlr\";\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 if the NodeType has generic tokens\n */\nexport function isGenericNodeType<T extends NodeType = NodeType>(\n nt: NodeType,\n): nt is NodeTypeWithGenerics<T> {\n return (nt as NodeTypeWithGenerics).genericTokens?.length > 0;\n}\n\n/**\n * Returns if the named type has generic tokens\n */\nexport function isGenericNamedType<T extends NamedType = NamedType>(\n nt: NodeType,\n): nt is NamedTypeWithGenerics<T> {\n return (nt as NamedTypeWithGenerics).genericTokens?.length > 0;\n}\n\n/**\n * Returns if the node is a `PrimitiveTypes`\n */\nexport function isPrimitiveTypeNode(node: NodeType): node is PrimitiveTypes {\n return (\n node.type === \"string\" ||\n node.type === \"number\" ||\n node.type === \"boolean\" ||\n node.type === \"null\" ||\n node.type === \"any\" ||\n node.type === \"never\" ||\n node.type === \"undefined\" ||\n node.type === \"unknown\" ||\n node.type === \"void\"\n );\n}\n\n/**\n * Type Guard for non-null values\n */\nexport function isNonNullable<T>(a: T | null | undefined): a is NonNullable<T> {\n return a !== null || a !== undefined;\n}\n\n/**\n * Type guard for string type nodes\n */\nexport function isStringType(node: NodeType): node is StringType {\n return node.type === \"string\";\n}\n\n/**\n * Type guard for number type nodes\n */\nexport function isNumberType(node: NodeType): node is NumberType {\n return node.type === \"number\";\n}\n\n/**\n * Type guard for boolean type nodes\n */\nexport function isBooleanType(node: NodeType): node is BooleanType {\n return node.type === \"boolean\";\n}\n\n/**\n * Type guard for object type nodes\n */\nexport function isObjectType(node: NodeType): node is ObjectType {\n return node.type === \"object\";\n}\n\n/**\n * Type guard for array type nodes\n */\nexport function isArrayType(node: NodeType): node is ArrayType {\n return node.type === \"array\";\n}\n\n/**\n * Type guard for ref type nodes\n */\nexport function isRefType(node: NodeType): node is RefType {\n return node.type === \"ref\";\n}\n\n/**\n * Type guard for or (union) type nodes\n */\nexport function isOrType(node: NodeType): node is OrType {\n return node.type === \"or\";\n}\n\n/**\n * Type guard for and (intersection) type nodes\n */\nexport function isAndType(node: NodeType): node is AndType {\n return node.type === \"and\";\n}\n\n/**\n * Type guard for record type nodes\n */\nexport function isRecordType(node: NodeType): node is RecordType {\n return node.type === \"record\";\n}\n\n/**\n * Type guard for named types (have name and source)\n */\nexport function isNamedType<T extends NodeType = NodeType>(\n node: NodeType,\n): node is NamedType<T> {\n return \"name\" in node && \"source\" in node && typeof node.name === \"string\";\n}\n","import type { Node } from \"jsonc-parser\";\nimport type {\n ConditionalType,\n NodeType,\n ObjectType,\n RefNode,\n} from \"@xlr-lib/xlr\";\nimport { isGenericNodeType, isPrimitiveTypeNode } from \"./type-checks\";\nimport { fillInGenerics } from \"./ts-helpers\";\n\nexport interface PropertyNode {\n /** Equivalent Property Name */\n key: string;\n\n /** Equivalent Property Value */\n value: Node;\n}\n\n/**\n * Takes a property node and returns the underlying Key/Value Pairs\n */\nexport function propertyToTuple(node: Node): PropertyNode {\n let key = node.children?.[0].value as string;\n if (key.includes(\"-\")) {\n // XLR outputs all escaped properties with single quotes\n key = `'${key}'`;\n }\n\n return {\n key,\n value: node.children?.[1] as Node,\n };\n}\n\n/**\n * Turns a node's children into a map for easy access\n */\nexport function makePropertyMap(node: Node): Map<string, Node> {\n const m = new Map();\n node.children?.forEach((child) => {\n const property = propertyToTuple(child);\n m.set(property.key, property.value);\n });\n return m;\n}\n\n/**\n * Checks if property is a leaf node or another node\n */\nexport function isNode(obj: Node | string | number | boolean): obj is Node {\n return (\n typeof obj !== \"string\" ||\n typeof obj !== \"number\" ||\n typeof obj !== \"boolean\"\n );\n}\n\n/**\n * Computes if the first arg extends the second arg\n */\nexport function computeExtends(a: NodeType, b: NodeType): boolean {\n // special case for any/unknown being functionally the same\n if (\n (a.type === \"any\" || a.type === \"unknown\") &&\n (b.type === \"any\" || b.type === \"unknown\")\n ) {\n return true;\n }\n\n // special case for null/undefined being functionally the same\n if (\n (a.type === \"null\" || a.type === \"undefined\") &&\n (b.type === \"null\" || b.type === \"undefined\")\n ) {\n return true;\n }\n\n // check simple case of equal types\n if (a.type === b.type) {\n if (isPrimitiveTypeNode(a) && isPrimitiveTypeNode(b)) {\n if (a.const && b.const) {\n if (a.const === b.const) {\n return true;\n }\n } else {\n return true;\n }\n }\n\n if (a.type === \"ref\" && b.type === \"ref\") {\n return a.ref === b.ref;\n }\n\n if (a.type === \"object\" && b.type === \"object\") {\n for (const property in b.properties) {\n const propertyNode = b.properties[property];\n if (\n !a.properties[property] ||\n !computeExtends(a.properties[property].node, propertyNode.node)\n ) {\n return false;\n }\n }\n\n return true;\n }\n }\n\n if (isPrimitiveTypeNode(a) && b.type === \"or\") {\n return b.or.every((member) => computeExtends(a, member));\n }\n\n if (isPrimitiveTypeNode(b) && a.type === \"or\") {\n return a.or.every((member) => computeExtends(b, member));\n }\n\n if (a.type === \"or\" && b.type === \"or\") {\n return a.or.every((x) => b.or.some((y) => computeExtends(x, y)));\n }\n\n return false;\n}\n\n/**\n * Attempts to resolve a conditional type\n */\nexport function resolveConditional(conditional: ConditionalType): NodeType {\n const { left, right } = conditional.check;\n const conditionalResult = computeExtends(left, right)\n ? conditional.value.true\n : conditional.value.false;\n\n // Compose first level generics here since `conditionalResult` won't have them\n if (isGenericNodeType(conditional)) {\n const genericMap: Map<string, NodeType> = new Map();\n conditional.genericTokens.forEach((token) => {\n genericMap.set(\n token.symbol,\n token.default ?? token.constraints ?? { type: \"any\" },\n );\n });\n\n return fillInGenerics(conditionalResult, genericMap);\n }\n\n return conditionalResult;\n}\n\n/**\n * Resolve referenced node with potential generic arguments\n */\nexport function resolveReferenceNode(\n genericReference: RefNode,\n typeToFill: NodeType,\n): NodeType {\n const genericArgs = genericReference.genericArguments;\n const genericMap: Map<string, NodeType> = new Map();\n\n // Compose first level generics here from `genericReference`\n if (genericArgs && isGenericNodeType(typeToFill)) {\n typeToFill.genericTokens.forEach((token, index) => {\n genericMap.set(\n token.symbol,\n genericArgs[index] ?? token.default ?? token.constraints,\n );\n });\n }\n\n // Fill in generics\n const filledInNode = fillInGenerics(typeToFill, genericMap);\n\n // Remove generic tokens that were resolve\n if (isGenericNodeType(filledInNode) && genericArgs?.length) {\n if (genericArgs.length < filledInNode.genericTokens.length) {\n filledInNode.genericTokens = filledInNode.genericTokens.slice(\n genericArgs?.length,\n );\n } else if (genericArgs.length === filledInNode.genericTokens.length) {\n filledInNode.genericTokens = [];\n }\n }\n\n // Resolve index access\n if (genericReference.property && filledInNode.type === \"object\") {\n return (\n filledInNode.properties[genericReference.property]?.node ??\n filledInNode.additionalProperties ?? { type: \"undefined\" }\n );\n }\n\n return filledInNode;\n}\n\n/**\n * Combines two ObjectType objects to get a representation of the effective TypeScript interface of `base` extending `operand`\n - * @param base The base interface\n - * @param operand The interface that is extended\n - * @param errorOnOverlap whether or not conflicting properties should throw an error or use the property from operand\n - * @returns `ObjectType`\n */\nexport function computeEffectiveObject(\n base: ObjectType,\n operand: ObjectType,\n errorOnOverlap = true,\n): ObjectType {\n const baseObjectName = base.name ?? base.title ?? \"object literal\";\n const operandObjectName = operand.name ?? operand.title ?? \"object literal\";\n const newObject = {\n ...JSON.parse(JSON.stringify(base)),\n name: `${baseObjectName} & ${operandObjectName}`,\n description: `Effective type combining ${baseObjectName} and ${operandObjectName}`,\n genericTokens: [\n ...(isGenericNodeType(base) ? base.genericTokens : []),\n ...(isGenericNodeType(operand) ? operand.genericTokens : []),\n ],\n };\n // TODO this check needs to account for primitive -> primitive generic overlap\n\n for (const property in operand.properties) {\n if (newObject.properties[property] !== undefined && errorOnOverlap) {\n if (\n !computeExtends(\n newObject.properties[property].node,\n operand.properties[property].node,\n )\n ) {\n throw new Error(\n `Can't compute effective type for ${baseObjectName} and ${operandObjectName} because of conflicting properties ${property}`,\n );\n }\n }\n\n newObject.properties[property] = operand.properties[property];\n }\n\n if (newObject.additionalProperties && operand.additionalProperties) {\n if (\n !isPrimitiveTypeNode(newObject.additionalProperties) ||\n !isPrimitiveTypeNode(operand.additionalProperties) ||\n newObject.additionalProperties.type !== operand.additionalProperties.type\n ) {\n newObject.additionalProperties = {\n type: \"and\",\n and: [newObject.additionalProperties, operand.additionalProperties],\n };\n }\n } else if (operand.additionalProperties) {\n newObject.additionalProperties = operand.additionalProperties;\n }\n\n return newObject;\n}\n","import ts from \"typescript\";\nimport type { SymbolDisplayPart } from \"typescript\";\nimport type { NodeType } from \"@xlr-lib/xlr\";\nimport { isPrimitiveTypeNode } from \"./type-checks\";\n\nconst { SymbolDisplayPartKind, displayPartsToString } = ts;\n\n/** Like `.join()` but for arrays */\nfunction insertBetweenElements<T>(array: Array<T>, separator: T): T[] {\n return array.reduce((acc, item, index) => {\n if (index === 0) {\n return [item];\n }\n\n return [...acc, separator, item];\n }, [] as T[]);\n}\n\n/**\n * Generate a documentation string for a given node\n *\n * @param node - The source node to author the docs string for\n * @returns - documentation string\n */\nexport function createTSDocString(node: NodeType): Array<SymbolDisplayPart> {\n if (node.type === \"ref\") {\n return [\n {\n text: node.ref,\n kind: SymbolDisplayPartKind.keyword as any,\n },\n ];\n }\n\n if (node.type === \"or\" || node.type === \"and\") {\n const items = node.type === \"and\" ? node.and : node.or;\n\n return insertBetweenElements(\n items.map((subnode) => createTSDocString(subnode)),\n [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: node.type === \"and\" ? \" & \" : \" | \",\n },\n ],\n ).flat();\n }\n\n if (node.type === \"function\") {\n return [\n {\n kind: SymbolDisplayPartKind.keyword as any,\n text: \"function\",\n },\n {\n kind: SymbolDisplayPartKind.space as any,\n text: \" \",\n },\n ...(node.name\n ? [{ text: node.name, kind: SymbolDisplayPartKind.methodName }]\n : []),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"(\",\n },\n ...insertBetweenElements(\n node.parameters.map((p) => {\n if (p.name) {\n return [\n {\n kind: SymbolDisplayPartKind.parameterName as any,\n text: p.name,\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: p.optional ? \"?\" : \"\",\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \": \",\n },\n ...createTSDocString(p.type),\n ];\n }\n\n return createTSDocString(p.type);\n }),\n [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \", \",\n },\n ],\n ).flat(),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \")\",\n },\n ...(node.returnType\n ? [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \": \",\n },\n ...createTSDocString(node.returnType),\n ]\n : []),\n ];\n }\n\n if (node.type === \"tuple\") {\n return [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"[\",\n },\n ...insertBetweenElements(\n node.elementTypes.map((t) => {\n if (t.name) {\n return [\n {\n kind: SymbolDisplayPartKind.propertyName as any,\n text: t.name,\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \": \",\n },\n ...createTSDocString(t.type),\n ];\n }\n\n return createTSDocString(t.type);\n }),\n [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \", \",\n },\n ],\n ).flat(),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"]\",\n },\n ];\n }\n\n if (node.type === \"array\") {\n return [\n {\n kind: SymbolDisplayPartKind.interfaceName as any,\n text: \"Array\",\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"<\",\n },\n ...createTSDocString(node.elementType),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \">\",\n },\n ];\n }\n\n if (node.type === \"record\") {\n return [\n {\n kind: SymbolDisplayPartKind.interfaceName as any,\n text: \"Record\",\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"<\",\n },\n ...createTSDocString(node.keyType),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \", \",\n },\n ...createTSDocString(node.valueType),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \">\",\n },\n ];\n }\n\n if (\n (node.type === \"string\" ||\n node.type === \"boolean\" ||\n node.type === \"number\") &&\n node.const !== undefined\n ) {\n return [\n {\n kind: SymbolDisplayPartKind.keyword as any,\n text:\n typeof node.const === \"string\"\n ? `\"${node.const}\"`\n : String(node.const),\n },\n ];\n }\n\n if (isPrimitiveTypeNode(node) && node.type !== \"null\") {\n return [\n {\n kind: SymbolDisplayPartKind.keyword as any,\n text: node.type,\n },\n ];\n }\n\n if (node.type === \"object\" && node.name) {\n return [\n {\n kind: SymbolDisplayPartKind.interfaceName as any,\n text: node.name,\n },\n ];\n }\n\n return [\n {\n kind: SymbolDisplayPartKind.localName as any,\n text: node.type,\n },\n ];\n}\n\n/** Convert the TS SymbolDisplayParts into a single string */\nexport function symbolDisplayToString(\n displayParts: Array<SymbolDisplayPart>,\n): string {\n return displayPartsToString(displayParts);\n}\n\n/** Create a documentation string from node */\nexport function createDocString(node: NodeType): string {\n return symbolDisplayToString(createTSDocString(node));\n}\n"],"mappings":"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","names":["ts","ts","ts","ts","ts"]}
1
+ {"version":3,"sources":["../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/annotations.ts","../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/ts-helpers.ts","../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/type-checks.ts","../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/validation-helpers.ts","../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/utils/src/documentation.ts"],"sourcesContent":["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","import ts from \"typescript\";\nimport type {\n NamedType,\n NodeType,\n ObjectProperty,\n ObjectType,\n OrType,\n RefNode,\n} from \"@xlr-lib/xlr\";\nimport { computeExtends, resolveConditional } from \"./validation-helpers\";\nimport { isGenericNamedType, isGenericNodeType } from \"./type-checks\";\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 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 * 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 * Walks generics to fill in values from a combination of the default, constraint, and passed in map values\n * TODO convert this to use simpleTransformGenerator\n */\nexport function fillInGenerics(\n xlrNode: NodeType,\n generics?: Map<string, NodeType>,\n): NodeType {\n // Need to make sure not to set generics in passed in map to avoid using generics outside of tree\n let localGenerics: Map<string, NodeType>;\n\n if (generics) {\n localGenerics = new Map(generics);\n } else {\n localGenerics = new Map();\n if (isGenericNodeType(xlrNode)) {\n xlrNode.genericTokens?.forEach((token) => {\n const genericValue = (token.default ?? token.constraints) as NodeType;\n localGenerics.set(\n token.symbol,\n fillInGenerics(genericValue, localGenerics),\n );\n });\n }\n }\n\n if (xlrNode.type === \"ref\") {\n if (localGenerics.has(xlrNode.ref)) {\n return {\n ...(localGenerics.get(xlrNode.ref) as NodeType),\n ...(xlrNode.genericArguments\n ? {\n genericArguments: xlrNode.genericArguments.map((ga) =>\n fillInGenerics(ga, localGenerics),\n ),\n }\n : {}),\n ...(xlrNode.title ? { title: xlrNode.title } : {}),\n ...(xlrNode.name ? { name: xlrNode.name } : {}),\n ...(xlrNode.description ? { description: xlrNode.description } : {}),\n ...(xlrNode.comment ? { comment: xlrNode.comment } : {}),\n };\n }\n\n return {\n ...xlrNode,\n ...(xlrNode.genericArguments\n ? {\n genericArguments: xlrNode.genericArguments.map((ga) =>\n fillInGenerics(ga, localGenerics),\n ),\n }\n : {}),\n };\n }\n\n if (xlrNode.type === \"object\") {\n const newProperties: { [name: string]: ObjectProperty } = {};\n Object.getOwnPropertyNames(xlrNode.properties).forEach((propName) => {\n const prop = xlrNode.properties[propName];\n newProperties[propName] = {\n required: prop.required,\n node: fillInGenerics(prop.node, localGenerics),\n };\n });\n\n return {\n ...xlrNode,\n properties: newProperties,\n ...(isGenericNamedType(xlrNode)\n ? {\n genericTokens: xlrNode.genericTokens.map((token) => {\n return {\n ...token,\n constraints: token.constraints\n ? fillInGenerics(token.constraints, localGenerics)\n : undefined,\n default: token.default\n ? fillInGenerics(token.default, localGenerics)\n : undefined,\n };\n }),\n }\n : {}),\n extends: xlrNode.extends\n ? (fillInGenerics(xlrNode.extends, localGenerics) as RefNode)\n : undefined,\n additionalProperties: xlrNode.additionalProperties\n ? fillInGenerics(xlrNode.additionalProperties, localGenerics)\n : false,\n };\n }\n\n if (xlrNode.type === \"array\") {\n return {\n ...xlrNode,\n elementType: fillInGenerics(xlrNode.elementType, localGenerics),\n };\n } else if (xlrNode.type === \"or\" || xlrNode.type === \"and\") {\n let pointer;\n if (xlrNode.type === \"or\") {\n pointer = xlrNode.or;\n } else {\n pointer = xlrNode.and;\n }\n\n return {\n ...xlrNode,\n [xlrNode.type]: pointer.map((prop) => {\n return fillInGenerics(prop, localGenerics);\n }),\n };\n } else if (xlrNode.type === \"record\") {\n return {\n ...xlrNode,\n keyType: fillInGenerics(xlrNode.keyType, localGenerics),\n valueType: fillInGenerics(xlrNode.valueType, localGenerics),\n };\n } else if (xlrNode.type === \"conditional\") {\n const filledInConditional = {\n ...xlrNode,\n check: {\n left: fillInGenerics(xlrNode.check.left, localGenerics),\n right: fillInGenerics(xlrNode.check.right, localGenerics),\n },\n value: {\n true: fillInGenerics(xlrNode.value.true, localGenerics),\n false: fillInGenerics(xlrNode.value.false, localGenerics),\n },\n };\n\n // Check to see if we have enough information to resolve this conditional\n if (\n filledInConditional.check.left.type !== \"ref\" &&\n filledInConditional.check.right.type !== \"ref\"\n ) {\n return {\n name: xlrNode.name,\n title: xlrNode.title,\n ...resolveConditional(filledInConditional),\n } as NamedType;\n }\n\n return filledInConditional;\n }\n\n return xlrNode;\n}\n\n/** Applies the TS `Pick` or `Omit` type to an interface/union/intersection */\nexport function applyPickOrOmitToNodeType(\n baseObject: NodeType,\n operation: \"Pick\" | \"Omit\",\n properties: Set<string>,\n): NodeType | undefined {\n if (baseObject.type === \"object\") {\n const newObject = { ...baseObject };\n Object.keys(baseObject.properties).forEach((key) => {\n if (\n (operation === \"Omit\" && properties.has(key)) ||\n (operation === \"Pick\" && !properties.has(key))\n ) {\n delete newObject.properties[key];\n }\n });\n\n /**\n * Filter out objects in cases:\n * - A Pick operation and there are no properties left\n * - An Omit operation and there are no properties left and no additional properties allowed\n */\n if (\n Object.keys(newObject.properties).length === 0 &&\n (operation !== \"Omit\" || newObject.additionalProperties === false)\n ) {\n return undefined;\n }\n\n return newObject;\n }\n\n let pointer;\n if (baseObject.type === \"and\") {\n pointer = baseObject.and;\n } else if (baseObject.type === \"or\") {\n pointer = baseObject.or;\n } else {\n throw new Error(\n `Error: Can not apply ${operation} to type ${baseObject.type}`,\n );\n }\n\n const pickedTypes = pointer\n .map((type) => {\n const node = applyPickOrOmitToNodeType(type, operation, properties);\n if (node === undefined) {\n return undefined;\n }\n\n return { ...node, additionalProperties: false } as ObjectType;\n })\n .filter((type) => type !== undefined) as NodeType[];\n\n if (pickedTypes.length === 0) {\n return undefined;\n }\n\n if (pickedTypes.length === 1) {\n return pickedTypes[0];\n }\n\n if (baseObject.type === \"and\") {\n return { ...baseObject, and: pickedTypes };\n }\n\n return { ...baseObject, or: pickedTypes };\n}\n\n/** Applies the TS `Partial` or `Required` type to an interface/union/intersection */\nexport function applyPartialOrRequiredToNodeType(\n baseObject: NodeType,\n modifier: boolean,\n): NodeType {\n if (baseObject.type === \"object\") {\n const newObject = { ...baseObject };\n Object.keys(baseObject.properties).forEach((key) => {\n newObject.properties[key].required = modifier;\n });\n\n return newObject;\n }\n\n if (baseObject.type === \"and\") {\n const pickedTypes = baseObject.and.map((type) =>\n applyPartialOrRequiredToNodeType(type, modifier),\n );\n return { ...baseObject, and: pickedTypes };\n }\n\n if (baseObject.type === \"or\") {\n const pickedTypes = baseObject.or.map((type) =>\n applyPartialOrRequiredToNodeType(type, modifier),\n );\n return { ...baseObject, or: pickedTypes };\n }\n\n throw new Error(\n `Error: Can not apply ${modifier ? \"Required\" : \"Partial\"} to type ${\n baseObject.type\n }`,\n );\n}\n\n/** Applies the TS `Exclude` type to a union */\nexport function applyExcludeToNodeType(\n baseObject: OrType,\n filters: NodeType | OrType,\n): NodeType {\n const remainingMembers = baseObject.or.filter((type) => {\n if (filters.type === \"or\") {\n return !filters.or.some((filter) => computeExtends(type, filter));\n }\n\n return !computeExtends(type, filters);\n });\n\n if (remainingMembers.length === 1) {\n return remainingMembers[0];\n }\n\n return {\n ...baseObject,\n or: remainingMembers,\n };\n}\n","import ts from \"typescript\";\nimport type {\n NamedType,\n NamedTypeWithGenerics,\n NodeType,\n NodeTypeWithGenerics,\n PrimitiveTypes,\n} from \"@xlr-lib/xlr\";\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 if the NodeType has generic tokens\n */\nexport function isGenericNodeType<T extends NodeType = NodeType>(\n nt: NodeType,\n): nt is NodeTypeWithGenerics<T> {\n return (nt as NodeTypeWithGenerics).genericTokens?.length > 0;\n}\n\n/**\n * Returns if the named type has generic tokens\n */\nexport function isGenericNamedType<T extends NamedType = NamedType>(\n nt: NodeType,\n): nt is NamedTypeWithGenerics<T> {\n return (nt as NamedTypeWithGenerics).genericTokens?.length > 0;\n}\n\n/**\n * Returns if the node is a `PrimitiveTypes`\n */\nexport function isPrimitiveTypeNode(node: NodeType): node is PrimitiveTypes {\n return (\n node.type === \"string\" ||\n node.type === \"number\" ||\n node.type === \"boolean\" ||\n node.type === \"null\" ||\n node.type === \"any\" ||\n node.type === \"never\" ||\n node.type === \"undefined\" ||\n node.type === \"unknown\" ||\n node.type === \"void\"\n );\n}\n\n/**\n * Type Guard for non-null values\n */\nexport function isNonNullable<T>(a: T | null | undefined): a is NonNullable<T> {\n return a !== null || a !== undefined;\n}\n","import type { Node } from \"jsonc-parser\";\nimport type {\n ConditionalType,\n NodeType,\n ObjectType,\n RefNode,\n} from \"@xlr-lib/xlr\";\nimport { isGenericNodeType, isPrimitiveTypeNode } from \"./type-checks\";\nimport { fillInGenerics } from \"./ts-helpers\";\n\nexport interface PropertyNode {\n /** Equivalent Property Name */\n key: string;\n\n /** Equivalent Property Value */\n value: Node;\n}\n\n/**\n * Takes a property node and returns the underlying Key/Value Pairs\n */\nexport function propertyToTuple(node: Node): PropertyNode {\n let key = node.children?.[0].value as string;\n if (key.includes(\"-\")) {\n // XLR outputs all escaped properties with single quotes\n key = `'${key}'`;\n }\n\n return {\n key,\n value: node.children?.[1] as Node,\n };\n}\n\n/**\n * Turns a node's children into a map for easy access\n */\nexport function makePropertyMap(node: Node): Map<string, Node> {\n const m = new Map();\n node.children?.forEach((child) => {\n const property = propertyToTuple(child);\n m.set(property.key, property.value);\n });\n return m;\n}\n\n/**\n * Checks if property is a leaf node or another node\n */\nexport function isNode(obj: Node | string | number | boolean): obj is Node {\n return (\n typeof obj !== \"string\" ||\n typeof obj !== \"number\" ||\n typeof obj !== \"boolean\"\n );\n}\n\n/**\n * Computes if the first arg extends the second arg\n */\nexport function computeExtends(a: NodeType, b: NodeType): boolean {\n // special case for any/unknown being functionally the same\n if (\n (a.type === \"any\" || a.type === \"unknown\") &&\n (b.type === \"any\" || b.type === \"unknown\")\n ) {\n return true;\n }\n\n // special case for null/undefined being functionally the same\n if (\n (a.type === \"null\" || a.type === \"undefined\") &&\n (b.type === \"null\" || b.type === \"undefined\")\n ) {\n return true;\n }\n\n // check simple case of equal types\n if (a.type === b.type) {\n if (isPrimitiveTypeNode(a) && isPrimitiveTypeNode(b)) {\n if (a.const && b.const) {\n if (a.const === b.const) {\n return true;\n }\n } else {\n return true;\n }\n }\n\n if (a.type === \"ref\" && b.type === \"ref\") {\n return a.ref === b.ref;\n }\n\n if (a.type === \"object\" && b.type === \"object\") {\n for (const property in b.properties) {\n const propertyNode = b.properties[property];\n if (\n !a.properties[property] ||\n !computeExtends(a.properties[property].node, propertyNode.node)\n ) {\n return false;\n }\n }\n\n return true;\n }\n }\n\n if (isPrimitiveTypeNode(a) && b.type === \"or\") {\n return b.or.every((member) => computeExtends(a, member));\n }\n\n if (isPrimitiveTypeNode(b) && a.type === \"or\") {\n return a.or.every((member) => computeExtends(b, member));\n }\n\n if (a.type === \"or\" && b.type === \"or\") {\n return a.or.every((x) => b.or.some((y) => computeExtends(x, y)));\n }\n\n return false;\n}\n\n/**\n * Attempts to resolve a conditional type\n */\nexport function resolveConditional(conditional: ConditionalType): NodeType {\n const { left, right } = conditional.check;\n const conditionalResult = computeExtends(left, right)\n ? conditional.value.true\n : conditional.value.false;\n\n // Compose first level generics here since `conditionalResult` won't have them\n if (isGenericNodeType(conditional)) {\n const genericMap: Map<string, NodeType> = new Map();\n conditional.genericTokens.forEach((token) => {\n genericMap.set(\n token.symbol,\n token.default ?? token.constraints ?? { type: \"any\" },\n );\n });\n\n return fillInGenerics(conditionalResult, genericMap);\n }\n\n return conditionalResult;\n}\n\n/**\n * Resolve referenced node with potential generic arguments\n */\nexport function resolveReferenceNode(\n genericReference: RefNode,\n typeToFill: NodeType,\n): NodeType {\n const genericArgs = genericReference.genericArguments;\n const genericMap: Map<string, NodeType> = new Map();\n\n // Compose first level generics here from `genericReference`\n if (genericArgs && isGenericNodeType(typeToFill)) {\n typeToFill.genericTokens.forEach((token, index) => {\n genericMap.set(\n token.symbol,\n genericArgs[index] ?? token.default ?? token.constraints,\n );\n });\n }\n\n // Fill in generics\n const filledInNode = fillInGenerics(typeToFill, genericMap);\n\n // Remove generic tokens that were resolve\n if (isGenericNodeType(filledInNode) && genericArgs?.length) {\n if (genericArgs.length < filledInNode.genericTokens.length) {\n filledInNode.genericTokens = filledInNode.genericTokens.slice(\n genericArgs?.length,\n );\n } else if (genericArgs.length === filledInNode.genericTokens.length) {\n filledInNode.genericTokens = [];\n }\n }\n\n // Resolve index access\n if (genericReference.property && filledInNode.type === \"object\") {\n return (\n filledInNode.properties[genericReference.property]?.node ??\n filledInNode.additionalProperties ?? { type: \"undefined\" }\n );\n }\n\n return filledInNode;\n}\n\n/**\n * Combines two ObjectType objects to get a representation of the effective TypeScript interface of `base` extending `operand`\n - * @param base The base interface\n - * @param operand The interface that is extended\n - * @param errorOnOverlap whether or not conflicting properties should throw an error or use the property from operand\n - * @returns `ObjectType`\n */\nexport function computeEffectiveObject(\n base: ObjectType,\n operand: ObjectType,\n errorOnOverlap = true,\n): ObjectType {\n const baseObjectName = base.name ?? base.title ?? \"object literal\";\n const operandObjectName = operand.name ?? operand.title ?? \"object literal\";\n const newObject = {\n ...JSON.parse(JSON.stringify(base)),\n name: `${baseObjectName} & ${operandObjectName}`,\n description: `Effective type combining ${baseObjectName} and ${operandObjectName}`,\n genericTokens: [\n ...(isGenericNodeType(base) ? base.genericTokens : []),\n ...(isGenericNodeType(operand) ? operand.genericTokens : []),\n ],\n };\n // TODO this check needs to account for primitive -> primitive generic overlap\n\n for (const property in operand.properties) {\n if (newObject.properties[property] !== undefined && errorOnOverlap) {\n if (\n !computeExtends(\n newObject.properties[property].node,\n operand.properties[property].node,\n )\n ) {\n throw new Error(\n `Can't compute effective type for ${baseObjectName} and ${operandObjectName} because of conflicting properties ${property}`,\n );\n }\n }\n\n newObject.properties[property] = operand.properties[property];\n }\n\n if (newObject.additionalProperties && operand.additionalProperties) {\n if (\n !isPrimitiveTypeNode(newObject.additionalProperties) ||\n !isPrimitiveTypeNode(operand.additionalProperties) ||\n newObject.additionalProperties.type !== operand.additionalProperties.type\n ) {\n newObject.additionalProperties = {\n type: \"and\",\n and: [newObject.additionalProperties, operand.additionalProperties],\n };\n }\n } else if (operand.additionalProperties) {\n newObject.additionalProperties = operand.additionalProperties;\n }\n\n return newObject;\n}\n","import ts from \"typescript\";\nimport type { SymbolDisplayPart } from \"typescript\";\nimport type { NodeType } from \"@xlr-lib/xlr\";\nimport { isPrimitiveTypeNode } from \"./type-checks\";\n\nconst { SymbolDisplayPartKind, displayPartsToString } = ts;\n\n/** Like `.join()` but for arrays */\nfunction insertBetweenElements<T>(array: Array<T>, separator: T): T[] {\n return array.reduce((acc, item, index) => {\n if (index === 0) {\n return [item];\n }\n\n return [...acc, separator, item];\n }, [] as T[]);\n}\n\n/**\n * Generate a documentation string for a given node\n *\n * @param node - The source node to author the docs string for\n * @returns - documentation string\n */\nexport function createTSDocString(node: NodeType): Array<SymbolDisplayPart> {\n if (node.type === \"ref\") {\n return [\n {\n text: node.ref,\n kind: SymbolDisplayPartKind.keyword as any,\n },\n ];\n }\n\n if (node.type === \"or\" || node.type === \"and\") {\n const items = node.type === \"and\" ? node.and : node.or;\n\n return insertBetweenElements(\n items.map((subnode) => createTSDocString(subnode)),\n [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: node.type === \"and\" ? \" & \" : \" | \",\n },\n ],\n ).flat();\n }\n\n if (node.type === \"function\") {\n return [\n {\n kind: SymbolDisplayPartKind.keyword as any,\n text: \"function\",\n },\n {\n kind: SymbolDisplayPartKind.space as any,\n text: \" \",\n },\n ...(node.name\n ? [{ text: node.name, kind: SymbolDisplayPartKind.methodName }]\n : []),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"(\",\n },\n ...insertBetweenElements(\n node.parameters.map((p) => {\n if (p.name) {\n return [\n {\n kind: SymbolDisplayPartKind.parameterName as any,\n text: p.name,\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: p.optional ? \"?\" : \"\",\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \": \",\n },\n ...createTSDocString(p.type),\n ];\n }\n\n return createTSDocString(p.type);\n }),\n [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \", \",\n },\n ],\n ).flat(),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \")\",\n },\n ...(node.returnType\n ? [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \": \",\n },\n ...createTSDocString(node.returnType),\n ]\n : []),\n ];\n }\n\n if (node.type === \"tuple\") {\n return [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"[\",\n },\n ...insertBetweenElements(\n node.elementTypes.map((t) => {\n if (t.name) {\n return [\n {\n kind: SymbolDisplayPartKind.propertyName as any,\n text: t.name,\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \": \",\n },\n ...createTSDocString(t.type),\n ];\n }\n\n return createTSDocString(t.type);\n }),\n [\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \", \",\n },\n ],\n ).flat(),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"]\",\n },\n ];\n }\n\n if (node.type === \"array\") {\n return [\n {\n kind: SymbolDisplayPartKind.interfaceName as any,\n text: \"Array\",\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"<\",\n },\n ...createTSDocString(node.elementType),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \">\",\n },\n ];\n }\n\n if (node.type === \"record\") {\n return [\n {\n kind: SymbolDisplayPartKind.interfaceName as any,\n text: \"Record\",\n },\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \"<\",\n },\n ...createTSDocString(node.keyType),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \", \",\n },\n ...createTSDocString(node.valueType),\n {\n kind: SymbolDisplayPartKind.punctuation as any,\n text: \">\",\n },\n ];\n }\n\n if (\n (node.type === \"string\" ||\n node.type === \"boolean\" ||\n node.type === \"number\") &&\n node.const !== undefined\n ) {\n return [\n {\n kind: SymbolDisplayPartKind.keyword as any,\n text:\n typeof node.const === \"string\"\n ? `\"${node.const}\"`\n : String(node.const),\n },\n ];\n }\n\n if (isPrimitiveTypeNode(node) && node.type !== \"null\") {\n return [\n {\n kind: SymbolDisplayPartKind.keyword as any,\n text: node.type,\n },\n ];\n }\n\n if (node.type === \"object\" && node.name) {\n return [\n {\n kind: SymbolDisplayPartKind.interfaceName as any,\n text: node.name,\n },\n ];\n }\n\n return [\n {\n kind: SymbolDisplayPartKind.localName as any,\n text: node.type,\n },\n ];\n}\n\n/** Convert the TS SymbolDisplayParts into a single string */\nexport function symbolDisplayToString(\n displayParts: Array<SymbolDisplayPart>,\n): string {\n return displayPartsToString(displayParts);\n}\n\n/** Create a documentation string from node */\nexport function createDocString(node: NodeType): string {\n return symbolDisplayToString(createTSDocString(node));\n}\n"],"mappings":";AAAA,OAAO,QAAQ;AAWf,SAAS,mBAAmB,MAAuC;AACjE,MAAI,CAAC,MAAM;AACT,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,EAAE,aAAa,KAAK;AAC7B;AAKA,SAAS,sBAAsB,MAAe;AAC5C,SACE,KAAK,WACJ,GAAG,gBAAgB,KAAK,MAAM,KAC7B,GAAG,gBAAgB,KAAK,MAAM,KAC9B,GAAG,mBAAmB,KAAK,MAAM,KACjC,GAAG,eAAe,KAAK,MAAM,KAC7B,GAAG,gBAAgB,KAAK,MAAM;AAEpC;AAKA,SAAS,iBACP,MACA,OACe;AACf,MAAI,CAAC,MAAM;AACT,WAAO,CAAC;AAAA,EACV;AAEA,MACE,GAAG,gBAAgB,IAAI,KACvB,KAAK,UACL,GAAG,eAAe,KAAK,MAAM,GAC7B;AACA,WAAO,iBAAiB,KAAK,QAAQ,IAAI;AAAA,EAC3C;AAEA,MAAI,GAAG,eAAe,IAAI,GAAG;AAC3B,WAAO,iBAAiB,KAAK,QAAQ,IAAI;AAAA,EAC3C;AAEA,MAAI,GAAG,mBAAmB,IAAI,GAAG;AAC/B,WAAO,iBAAiB,KAAK,QAAQ,IAAI;AAAA,EAC3C;AAEA,MAAI,GAAG,gBAAgB,IAAI,GAAG;AAC5B,WAAO,iBAAiB,KAAK,QAAQ,IAAI;AAAA,EAC3C;AAEA,MAAI,GAAG,wBAAwB,IAAI,GAAG;AACpC,WAAO,iBAAiB,KAAK,QAAQ,IAAI;AAAA,EAC3C;AAEA,MAAI,GAAG,kBAAkB,IAAI,GAAG;AAC9B,WAAO,iBAAiB,KAAK,QAAQ,IAAI;AAAA,EAC3C;AAEA,MAAI,GAAG,gBAAgB,IAAI,GAAG;AAC5B,WAAO,CAAC,MAAM,GAAG,iBAAiB,KAAK,QAAQ,IAAI,CAAC;AAAA,EACtD;AAEA,MAAI,GAAG,gBAAgB,IAAI,GAAG;AAC5B,UAAM,MAAM,KAAK,SAAS,QAAQ,KAAY;AAC9C,WAAO;AAAA,MACL,GAAI,QAAQ,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE;AAAA,MAC/B,GAAG,iBAAiB,KAAK,QAAQ,IAAI;AAAA,IACvC;AAAA,EACF;AAEA,MACE,GAAG,uBAAuB,IAAI,KAC9B,GAAG,uBAAuB,IAAI,KAC9B,GAAG,oBAAoB,IAAI,GAC3B;AACA,WAAO,CAAC,KAAK,KAAK,QAAQ,GAAG,GAAG,iBAAiB,KAAK,QAAQ,IAAI,CAAC;AAAA,EACrE;AAEA,MAAI,sBAAsB,IAAI,GAAG;AAC/B,WAAO,iBAAiB,KAAK,QAAQ,IAAI;AAAA,EAC3C;AAEA,SAAO,CAAC;AACV;AAKA,SAAS,aAAa,MAA4B;AAChD,QAAM,YAAY,iBAAiB,MAAM,MAAS,EAAE,QAAQ,EAAE,KAAK,GAAG;AAEtE,MAAI,CAAC,UAAU,QAAQ;AACrB,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,EAAE,OAAO,UAAU;AAC5B;AAKA,SAAS,aACP,WACoB;AACpB,MAAI,OAAO,cAAc,eAAe,OAAO,cAAc,UAAU;AACrE,WAAO;AAAA,EACT;AAEA,SAAO,UAAU,IAAI,CAAC,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,GAAG;AACnD;AAKA,SAAS,YAAY,MAA+C;AAClE,QAAM,eAA8B,CAAC;AACrC,QAAM,WAA0B,CAAC;AACjC,QAAM,WAA0B,CAAC;AACjC,QAAM,MAAqB,CAAC;AAC5B,QAAM,OAA+B,CAAC;AAKtC,QAAM,aAAa,CAAC,QAAwB;AAC1C,WAAO,GAAG,IAAI,UAAU,GAAG,IAAI,SAAS,QAAQ,CAAC,MAAM,EAAE,GACvD,aAAa,IAAI,OAAO,GAAG,KAAK,KAAK,EACvC;AAAA,EACF;AAEA,OAAK,QAAQ,CAAC,QAAQ;AACpB,QAAI,CAAC,IAAI,SAAS;AAChB;AAAA,IACF;AAEA,QAAI,IAAI,QAAQ,SAAS,WAAW;AAClC,eAAS,KAAK,aAAa,IAAI,OAAO,GAAG,KAAK,KAAK,EAAE;AAAA,IACvD,WAAW,IAAI,QAAQ,SAAS,WAAW;AACzC,eAAS,KAAK,aAAa,IAAI,OAAO,GAAG,KAAK,KAAK,EAAE;AAAA,IACvD,WAAW,IAAI,QAAQ,SAAS,OAAO;AACrC,UAAI,KAAK,WAAW,GAAqB,CAAC;AAAA,IAC5C,WAAW,IAAI,QAAQ,SAAS,QAAQ;AACtC,YAAM,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,SAAS,EAAE,MAAM,OAAO;AACzD,WAAK,GAAG,IAAI,OAAO,KAAK,KAAK;AAAA,IAC/B,OAAO;AACL,YAAM,OAAO,aAAa,IAAI,OAAO,GAAG,KAAK,KAAK;AAClD,mBAAa,KAAK,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,EAAE;AAAA,IAClD;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL,GAAI,aAAa,WAAW,IACxB,CAAC,IACD,EAAE,aAAa,aAAa,KAAK,IAAI,EAAE;AAAA,IAC3C,GAAI,SAAS,WAAW,IAAI,CAAC,IAAI,EAAE,SAAS;AAAA,IAC5C,GAAI,SAAS,WAAW,IAAI,CAAC,IAAI,EAAE,SAAS,SAAS,KAAK,IAAI,EAAE;AAAA,IAChE,GAAI,IAAI,WAAW,IAAI,CAAC,IAAI,EAAE,IAAI;AAAA,IAClC,GAAI,QAAQ,OAAO,KAAK,IAAI,EAAE,WAAW,IAAI,CAAC,IAAI,EAAE,KAAK;AAAA,EAC3D;AACF;AAKA,SAAS,KAAK,GAA8B,YAAY,MAAM;AAC5D,QAAM,SAAS,IAAI,IAAI,CAAC,EAAE,OAAO;AACjC,SAAO,MAAM,KAAK,MAAM,EACrB,OAAO,CAAC,MAAM,MAAM,MAAS,EAC7B,KAAK,SAAS,EACd,KAAK;AACV;AAKA,SAAS,iBAAiB,OAAwC;AAChE,QAAM,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,IAAI,GAAG;AACxC,QAAM,QAAQ;AAAA,IACZ,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK;AAAA,IACxB;AAAA,EACF;AACA,QAAM,cAAc,KAAK,MAAM,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC;AACxD,QAAM,WAAW,KAAK,MAAM,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AACjD,QAAM,UAAU,KAAK,MAAM,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AAChD,QAAM,WAAW;AAAA,IACf,MAAM;AAAA,MAAI,CAAC,MACT,MAAM,QAAQ,EAAE,QAAQ,IAAI,KAAK,EAAE,QAAQ,IAAI,EAAE;AAAA,IACnD;AAAA,EACF;AACA,QAAM,MAAM;AAAA,IACV,MAAM,IAAI,CAAC,MAAO,MAAM,QAAQ,EAAE,GAAG,IAAI,KAAK,EAAE,GAAG,IAAI,EAAE,GAAI;AAAA,EAC/D;AACA,QAAM,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,IAAI,GAAG;AACxC,SAAO;AAAA,IACL,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,IACvB,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,IACzB,GAAI,cAAc,EAAE,YAAY,IAAI,CAAC;AAAA,IACrC,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,IAC/B,GAAI,WAAW,EAAE,SAAS,SAAS,IAAI,CAAC;AAAA,IACxC,GAAI,MAAM,EAAE,IAAI,IAAI,CAAC;AAAA,IACrB,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC7B,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,EACzB;AACF;AAKO,SAAS,aAAa,MAA4B;AACvD,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,kBAAkB,aAAa,IAAI;AAEzC,MAAI,SAAS,MAAM,QAAQ;AACzB,UAAM,QAAQ,MAAM,CAAC;AACrB,WAAO,iBAAiB;AAAA,MACtB,mBAAmB,aAAa,MAAM,OAAO,CAAC;AAAA,MAC9C;AAAA,MACA,YAAY,MAAM,QAAQ,CAAC,CAAC;AAAA,IAC9B,CAAC;AAAA,EACH;AAEA,SAAO;AACT;;;AC5OA,OAAOA,SAAQ;;;ACAf,OAAOC,SAAQ;AAYR,SAAS,mBAAmB,MAAqC;AACtE,SAAO,KAAK,eAAe,SAASA,IAAG,WAAW;AACpD;AAKO,SAAS,8BACd,MACS;AACT,QAAM,SAAS,KAAK,gBAAgB;AACpC,SAAO,SAAS,SAAS,IAAI;AAC/B;AAKO,SAAS,yBACd,MACS;AACT,QAAM,SAAS,KAAK,gBAAgB;AACpC,SAAO,SAAS,SAAS,IAAI;AAC/B;AAKO,SAAS,uBACd,MACA,aACS;AACT,QAAM,SAAS,YAAY,oBAAoB,KAAK,QAAQ;AAC5D,MAAI,UAAU,OAAO,cAAc;AACjC,WAAO,OAAO,aAAa,CAAC,EAAE,SAASA,IAAG,WAAW;AAAA,EACvD;AAEA,SAAO;AACT;AASO,SAAS,sBACd,MAC6B;AAC7B,SACE,KAAK,SAASA,IAAG,WAAW,wBAC5B,KAAK,SAASA,IAAG,WAAW;AAEhC;AAOO,SAAS,eAAe,MAAqC;AAClE,SACE,KAAK,SAASA,IAAG,WAAW,wBAC5B,KAAK,SAASA,IAAG,WAAW,wBAC5B,KAAK,SAASA,IAAG,WAAW;AAEhC;AAKO,SAAS,kBACd,IAC+B;AAC/B,SAAQ,GAA4B,eAAe,SAAS;AAC9D;AAKO,SAAS,mBACd,IACgC;AAChC,SAAQ,GAA6B,eAAe,SAAS;AAC/D;AAKO,SAAS,oBAAoB,MAAwC;AAC1E,SACE,KAAK,SAAS,YACd,KAAK,SAAS,YACd,KAAK,SAAS,aACd,KAAK,SAAS,UACd,KAAK,SAAS,SACd,KAAK,SAAS,WACd,KAAK,SAAS,eACd,KAAK,SAAS,aACd,KAAK,SAAS;AAElB;AAKO,SAAS,cAAiB,GAA8C;AAC7E,SAAO,MAAM,QAAQ,MAAM;AAC7B;;;ACnGO,SAAS,gBAAgB,MAA0B;AACxD,MAAI,MAAM,KAAK,WAAW,CAAC,EAAE;AAC7B,MAAI,IAAI,SAAS,GAAG,GAAG;AAErB,UAAM,IAAI,GAAG;AAAA,EACf;AAEA,SAAO;AAAA,IACL;AAAA,IACA,OAAO,KAAK,WAAW,CAAC;AAAA,EAC1B;AACF;AAKO,SAAS,gBAAgB,MAA+B;AAC7D,QAAM,IAAI,oBAAI,IAAI;AAClB,OAAK,UAAU,QAAQ,CAAC,UAAU;AAChC,UAAM,WAAW,gBAAgB,KAAK;AACtC,MAAE,IAAI,SAAS,KAAK,SAAS,KAAK;AAAA,EACpC,CAAC;AACD,SAAO;AACT;AAKO,SAAS,OAAO,KAAoD;AACzE,SACE,OAAO,QAAQ,YACf,OAAO,QAAQ,YACf,OAAO,QAAQ;AAEnB;AAKO,SAAS,eAAe,GAAa,GAAsB;AAEhE,OACG,EAAE,SAAS,SAAS,EAAE,SAAS,eAC/B,EAAE,SAAS,SAAS,EAAE,SAAS,YAChC;AACA,WAAO;AAAA,EACT;AAGA,OACG,EAAE,SAAS,UAAU,EAAE,SAAS,iBAChC,EAAE,SAAS,UAAU,EAAE,SAAS,cACjC;AACA,WAAO;AAAA,EACT;AAGA,MAAI,EAAE,SAAS,EAAE,MAAM;AACrB,QAAI,oBAAoB,CAAC,KAAK,oBAAoB,CAAC,GAAG;AACpD,UAAI,EAAE,SAAS,EAAE,OAAO;AACtB,YAAI,EAAE,UAAU,EAAE,OAAO;AACvB,iBAAO;AAAA,QACT;AAAA,MACF,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,EAAE,SAAS,SAAS,EAAE,SAAS,OAAO;AACxC,aAAO,EAAE,QAAQ,EAAE;AAAA,IACrB;AAEA,QAAI,EAAE,SAAS,YAAY,EAAE,SAAS,UAAU;AAC9C,iBAAW,YAAY,EAAE,YAAY;AACnC,cAAM,eAAe,EAAE,WAAW,QAAQ;AAC1C,YACE,CAAC,EAAE,WAAW,QAAQ,KACtB,CAAC,eAAe,EAAE,WAAW,QAAQ,EAAE,MAAM,aAAa,IAAI,GAC9D;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,oBAAoB,CAAC,KAAK,EAAE,SAAS,MAAM;AAC7C,WAAO,EAAE,GAAG,MAAM,CAAC,WAAW,eAAe,GAAG,MAAM,CAAC;AAAA,EACzD;AAEA,MAAI,oBAAoB,CAAC,KAAK,EAAE,SAAS,MAAM;AAC7C,WAAO,EAAE,GAAG,MAAM,CAAC,WAAW,eAAe,GAAG,MAAM,CAAC;AAAA,EACzD;AAEA,MAAI,EAAE,SAAS,QAAQ,EAAE,SAAS,MAAM;AACtC,WAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,CAAC;AAAA,EACjE;AAEA,SAAO;AACT;AAKO,SAAS,mBAAmB,aAAwC;AACzE,QAAM,EAAE,MAAM,MAAM,IAAI,YAAY;AACpC,QAAM,oBAAoB,eAAe,MAAM,KAAK,IAChD,YAAY,MAAM,OAClB,YAAY,MAAM;AAGtB,MAAI,kBAAkB,WAAW,GAAG;AAClC,UAAM,aAAoC,oBAAI,IAAI;AAClD,gBAAY,cAAc,QAAQ,CAAC,UAAU;AAC3C,iBAAW;AAAA,QACT,MAAM;AAAA,QACN,MAAM,WAAW,MAAM,eAAe,EAAE,MAAM,MAAM;AAAA,MACtD;AAAA,IACF,CAAC;AAED,WAAO,eAAe,mBAAmB,UAAU;AAAA,EACrD;AAEA,SAAO;AACT;AAKO,SAAS,qBACd,kBACA,YACU;AACV,QAAM,cAAc,iBAAiB;AACrC,QAAM,aAAoC,oBAAI,IAAI;AAGlD,MAAI,eAAe,kBAAkB,UAAU,GAAG;AAChD,eAAW,cAAc,QAAQ,CAAC,OAAO,UAAU;AACjD,iBAAW;AAAA,QACT,MAAM;AAAA,QACN,YAAY,KAAK,KAAK,MAAM,WAAW,MAAM;AAAA,MAC/C;AAAA,IACF,CAAC;AAAA,EACH;AAGA,QAAM,eAAe,eAAe,YAAY,UAAU;AAG1D,MAAI,kBAAkB,YAAY,KAAK,aAAa,QAAQ;AAC1D,QAAI,YAAY,SAAS,aAAa,cAAc,QAAQ;AAC1D,mBAAa,gBAAgB,aAAa,cAAc;AAAA,QACtD,aAAa;AAAA,MACf;AAAA,IACF,WAAW,YAAY,WAAW,aAAa,cAAc,QAAQ;AACnE,mBAAa,gBAAgB,CAAC;AAAA,IAChC;AAAA,EACF;AAGA,MAAI,iBAAiB,YAAY,aAAa,SAAS,UAAU;AAC/D,WACE,aAAa,WAAW,iBAAiB,QAAQ,GAAG,QACpD,aAAa,wBAAwB,EAAE,MAAM,YAAY;AAAA,EAE7D;AAEA,SAAO;AACT;AASO,SAAS,uBACd,MACA,SACA,iBAAiB,MACL;AACZ,QAAM,iBAAiB,KAAK,QAAQ,KAAK,SAAS;AAClD,QAAM,oBAAoB,QAAQ,QAAQ,QAAQ,SAAS;AAC3D,QAAM,YAAY;AAAA,IAChB,GAAG,KAAK,MAAM,KAAK,UAAU,IAAI,CAAC;AAAA,IAClC,MAAM,GAAG,cAAc,MAAM,iBAAiB;AAAA,IAC9C,aAAa,4BAA4B,cAAc,QAAQ,iBAAiB;AAAA,IAChF,eAAe;AAAA,MACb,GAAI,kBAAkB,IAAI,IAAI,KAAK,gBAAgB,CAAC;AAAA,MACpD,GAAI,kBAAkB,OAAO,IAAI,QAAQ,gBAAgB,CAAC;AAAA,IAC5D;AAAA,EACF;AAGA,aAAW,YAAY,QAAQ,YAAY;AACzC,QAAI,UAAU,WAAW,QAAQ,MAAM,UAAa,gBAAgB;AAClE,UACE,CAAC;AAAA,QACC,UAAU,WAAW,QAAQ,EAAE;AAAA,QAC/B,QAAQ,WAAW,QAAQ,EAAE;AAAA,MAC/B,GACA;AACA,cAAM,IAAI;AAAA,UACR,oCAAoC,cAAc,QAAQ,iBAAiB,sCAAsC,QAAQ;AAAA,QAC3H;AAAA,MACF;AAAA,IACF;AAEA,cAAU,WAAW,QAAQ,IAAI,QAAQ,WAAW,QAAQ;AAAA,EAC9D;AAEA,MAAI,UAAU,wBAAwB,QAAQ,sBAAsB;AAClE,QACE,CAAC,oBAAoB,UAAU,oBAAoB,KACnD,CAAC,oBAAoB,QAAQ,oBAAoB,KACjD,UAAU,qBAAqB,SAAS,QAAQ,qBAAqB,MACrE;AACA,gBAAU,uBAAuB;AAAA,QAC/B,MAAM;AAAA,QACN,KAAK,CAAC,UAAU,sBAAsB,QAAQ,oBAAoB;AAAA,MACpE;AAAA,IACF;AAAA,EACF,WAAW,QAAQ,sBAAsB;AACvC,cAAU,uBAAuB,QAAQ;AAAA,EAC3C;AAEA,SAAO;AACT;;;AF5OO,SAAS,oBAAoB,MAAgC;AAClE,SAAOC,IAAG,mBAAmB,IAAI,IAAI,KAAK,OAAO;AACnD;AAKO,SAAS,sBAAsB,MAA6B;AACjE,QAAM,YAAYA,IAAG,iBAAiB,IAAI,IACtCA,IAAG,aAAa,IAAI,IACpB;AAEJ,MAAI,WAAW;AACb,WAAO,UAAU,KAAK,CAAC,MAAM,EAAE,SAASA,IAAG,WAAW,aAAa;AAAA,EACrE;AACA,SAAO;AACT;AAKO,SAAS,eAAe,MAAwB;AACrD,UACGA,IAAG,yBAAyB,IAAsB,IACjDA,IAAG,cAAc,YACjB,KACD,CAAC,CAAC,KAAK,UAAU,KAAK,OAAO,SAASA,IAAG,WAAW;AAEzD;AAKO,SAAS,kBACd,MACA,aACA;AACA,MAAI,SAAS,YAAY,oBAAoB,KAAK,QAAQ;AAE1D,MACE,WACC,OAAO,QAAQA,IAAG,YAAY,WAAWA,IAAG,YAAY,OACzD;AAEA,aAAS,YAAY,iBAAiB,MAAM;AAAA,EAC9C;AAEA,QAAM,UAAU,QAAQ,eAAe,CAAC;AACxC,MACE,YACCA,IAAG,uBAAuB,OAAO,KAAKA,IAAG,uBAAuB,OAAO,IACxE;AACA,WAAO,EAAE,aAAa,SAAS,UAAU,eAAe,OAAO,EAAE;AAAA,EACnE;AACF;AAKO,SAAS,2BAA2B,MAA4B;AACrE,MAAIA,IAAG,gBAAgB,IAAI,GAAG;AAC5B,WAAO,IAAI;AAAA,MACT,KAAK,MAAM,IAAI,CAAC,SAAS;AACvB,YAAIA,IAAG,kBAAkB,IAAI,KAAKA,IAAG,gBAAgB,KAAK,OAAO,GAAG;AAClE,iBAAO,KAAK,QAAQ;AAAA,QACtB;AAEA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAIA,IAAG,kBAAkB,IAAI,KAAKA,IAAG,gBAAgB,KAAK,OAAO,GAAG;AAClE,WAAO,oBAAI,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC;AAAA,EACpC;AAEA,SAAO,oBAAI,IAAI;AACjB;AAKO,SAAS,mBACd,MACA,aACQ;AACR,MAAI,QAAQ,KAAK,KAAK;AACtB,OAAK,cAAc,QAAQ,CAAC,SAAS;AAEnC,QAAI,OAAO,KAAK,KAAK;AACrB,QAAIA,IAAG,oBAAoB,KAAK,IAAI,GAAG;AACrC,UAAI,SAAS,YAAY;AAAA,QACvB,KAAK,KAAK;AAAA,MACZ;AAEA,UACE,WACC,OAAO,QAAQA,IAAG,YAAY,WAAWA,IAAG,YAAY,OACzD;AAEA,iBAAS,YAAY,iBAAiB,MAAM;AAAA,MAC9C;AAEA,cAAQ,QAAQ,eAAe,CAAC,GAA8B,KAAK;AAAA,IACrE;AAEA,QAAI,SAASA,IAAG,WAAW,eAAe;AACxC,eAAS;AAAA,IACX,WAAW,SAASA,IAAG,WAAW,eAAe;AAC/C,eAAS;AAAA,IACX,WAAW,SAASA,IAAG,WAAW,gBAAgB;AAChD,eAAS;AAAA,IACX;AAGA,aAAS,KAAK,QAAQ;AAAA,EACxB,CAAC;AACD,SAAO;AACT;AAMO,SAAS,eACd,SACA,UACU;AAEV,MAAI;AAEJ,MAAI,UAAU;AACZ,oBAAgB,IAAI,IAAI,QAAQ;AAAA,EAClC,OAAO;AACL,oBAAgB,oBAAI,IAAI;AACxB,QAAI,kBAAkB,OAAO,GAAG;AAC9B,cAAQ,eAAe,QAAQ,CAAC,UAAU;AACxC,cAAM,eAAgB,MAAM,WAAW,MAAM;AAC7C,sBAAc;AAAA,UACZ,MAAM;AAAA,UACN,eAAe,cAAc,aAAa;AAAA,QAC5C;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,QAAQ,SAAS,OAAO;AAC1B,QAAI,cAAc,IAAI,QAAQ,GAAG,GAAG;AAClC,aAAO;AAAA,QACL,GAAI,cAAc,IAAI,QAAQ,GAAG;AAAA,QACjC,GAAI,QAAQ,mBACR;AAAA,UACE,kBAAkB,QAAQ,iBAAiB;AAAA,YAAI,CAAC,OAC9C,eAAe,IAAI,aAAa;AAAA,UAClC;AAAA,QACF,IACA,CAAC;AAAA,QACL,GAAI,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,QAChD,GAAI,QAAQ,OAAO,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,QAC7C,GAAI,QAAQ,cAAc,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,QAClE,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,MACxD;AAAA,IACF;AAEA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,GAAI,QAAQ,mBACR;AAAA,QACE,kBAAkB,QAAQ,iBAAiB;AAAA,UAAI,CAAC,OAC9C,eAAe,IAAI,aAAa;AAAA,QAClC;AAAA,MACF,IACA,CAAC;AAAA,IACP;AAAA,EACF;AAEA,MAAI,QAAQ,SAAS,UAAU;AAC7B,UAAM,gBAAoD,CAAC;AAC3D,WAAO,oBAAoB,QAAQ,UAAU,EAAE,QAAQ,CAAC,aAAa;AACnE,YAAM,OAAO,QAAQ,WAAW,QAAQ;AACxC,oBAAc,QAAQ,IAAI;AAAA,QACxB,UAAU,KAAK;AAAA,QACf,MAAM,eAAe,KAAK,MAAM,aAAa;AAAA,MAC/C;AAAA,IACF,CAAC;AAED,WAAO;AAAA,MACL,GAAG;AAAA,MACH,YAAY;AAAA,MACZ,GAAI,mBAAmB,OAAO,IAC1B;AAAA,QACE,eAAe,QAAQ,cAAc,IAAI,CAAC,UAAU;AAClD,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,aAAa,MAAM,cACf,eAAe,MAAM,aAAa,aAAa,IAC/C;AAAA,YACJ,SAAS,MAAM,UACX,eAAe,MAAM,SAAS,aAAa,IAC3C;AAAA,UACN;AAAA,QACF,CAAC;AAAA,MACH,IACA,CAAC;AAAA,MACL,SAAS,QAAQ,UACZ,eAAe,QAAQ,SAAS,aAAa,IAC9C;AAAA,MACJ,sBAAsB,QAAQ,uBAC1B,eAAe,QAAQ,sBAAsB,aAAa,IAC1D;AAAA,IACN;AAAA,EACF;AAEA,MAAI,QAAQ,SAAS,SAAS;AAC5B,WAAO;AAAA,MACL,GAAG;AAAA,MACH,aAAa,eAAe,QAAQ,aAAa,aAAa;AAAA,IAChE;AAAA,EACF,WAAW,QAAQ,SAAS,QAAQ,QAAQ,SAAS,OAAO;AAC1D,QAAI;AACJ,QAAI,QAAQ,SAAS,MAAM;AACzB,gBAAU,QAAQ;AAAA,IACpB,OAAO;AACL,gBAAU,QAAQ;AAAA,IACpB;AAEA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,CAAC,QAAQ,IAAI,GAAG,QAAQ,IAAI,CAAC,SAAS;AACpC,eAAO,eAAe,MAAM,aAAa;AAAA,MAC3C,CAAC;AAAA,IACH;AAAA,EACF,WAAW,QAAQ,SAAS,UAAU;AACpC,WAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS,eAAe,QAAQ,SAAS,aAAa;AAAA,MACtD,WAAW,eAAe,QAAQ,WAAW,aAAa;AAAA,IAC5D;AAAA,EACF,WAAW,QAAQ,SAAS,eAAe;AACzC,UAAM,sBAAsB;AAAA,MAC1B,GAAG;AAAA,MACH,OAAO;AAAA,QACL,MAAM,eAAe,QAAQ,MAAM,MAAM,aAAa;AAAA,QACtD,OAAO,eAAe,QAAQ,MAAM,OAAO,aAAa;AAAA,MAC1D;AAAA,MACA,OAAO;AAAA,QACL,MAAM,eAAe,QAAQ,MAAM,MAAM,aAAa;AAAA,QACtD,OAAO,eAAe,QAAQ,MAAM,OAAO,aAAa;AAAA,MAC1D;AAAA,IACF;AAGA,QACE,oBAAoB,MAAM,KAAK,SAAS,SACxC,oBAAoB,MAAM,MAAM,SAAS,OACzC;AACA,aAAO;AAAA,QACL,MAAM,QAAQ;AAAA,QACd,OAAO,QAAQ;AAAA,QACf,GAAG,mBAAmB,mBAAmB;AAAA,MAC3C;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAGO,SAAS,0BACd,YACA,WACA,YACsB;AACtB,MAAI,WAAW,SAAS,UAAU;AAChC,UAAM,YAAY,EAAE,GAAG,WAAW;AAClC,WAAO,KAAK,WAAW,UAAU,EAAE,QAAQ,CAAC,QAAQ;AAClD,UACG,cAAc,UAAU,WAAW,IAAI,GAAG,KAC1C,cAAc,UAAU,CAAC,WAAW,IAAI,GAAG,GAC5C;AACA,eAAO,UAAU,WAAW,GAAG;AAAA,MACjC;AAAA,IACF,CAAC;AAOD,QACE,OAAO,KAAK,UAAU,UAAU,EAAE,WAAW,MAC5C,cAAc,UAAU,UAAU,yBAAyB,QAC5D;AACA,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEA,MAAI;AACJ,MAAI,WAAW,SAAS,OAAO;AAC7B,cAAU,WAAW;AAAA,EACvB,WAAW,WAAW,SAAS,MAAM;AACnC,cAAU,WAAW;AAAA,EACvB,OAAO;AACL,UAAM,IAAI;AAAA,MACR,wBAAwB,SAAS,YAAY,WAAW,IAAI;AAAA,IAC9D;AAAA,EACF;AAEA,QAAM,cAAc,QACjB,IAAI,CAAC,SAAS;AACb,UAAM,OAAO,0BAA0B,MAAM,WAAW,UAAU;AAClE,QAAI,SAAS,QAAW;AACtB,aAAO;AAAA,IACT;AAEA,WAAO,EAAE,GAAG,MAAM,sBAAsB,MAAM;AAAA,EAChD,CAAC,EACA,OAAO,CAAC,SAAS,SAAS,MAAS;AAEtC,MAAI,YAAY,WAAW,GAAG;AAC5B,WAAO;AAAA,EACT;AAEA,MAAI,YAAY,WAAW,GAAG;AAC5B,WAAO,YAAY,CAAC;AAAA,EACtB;AAEA,MAAI,WAAW,SAAS,OAAO;AAC7B,WAAO,EAAE,GAAG,YAAY,KAAK,YAAY;AAAA,EAC3C;AAEA,SAAO,EAAE,GAAG,YAAY,IAAI,YAAY;AAC1C;AAGO,SAAS,iCACd,YACA,UACU;AACV,MAAI,WAAW,SAAS,UAAU;AAChC,UAAM,YAAY,EAAE,GAAG,WAAW;AAClC,WAAO,KAAK,WAAW,UAAU,EAAE,QAAQ,CAAC,QAAQ;AAClD,gBAAU,WAAW,GAAG,EAAE,WAAW;AAAA,IACvC,CAAC;AAED,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,SAAS,OAAO;AAC7B,UAAM,cAAc,WAAW,IAAI;AAAA,MAAI,CAAC,SACtC,iCAAiC,MAAM,QAAQ;AAAA,IACjD;AACA,WAAO,EAAE,GAAG,YAAY,KAAK,YAAY;AAAA,EAC3C;AAEA,MAAI,WAAW,SAAS,MAAM;AAC5B,UAAM,cAAc,WAAW,GAAG;AAAA,MAAI,CAAC,SACrC,iCAAiC,MAAM,QAAQ;AAAA,IACjD;AACA,WAAO,EAAE,GAAG,YAAY,IAAI,YAAY;AAAA,EAC1C;AAEA,QAAM,IAAI;AAAA,IACR,wBAAwB,WAAW,aAAa,SAAS,YACvD,WAAW,IACb;AAAA,EACF;AACF;AAGO,SAAS,uBACd,YACA,SACU;AACV,QAAM,mBAAmB,WAAW,GAAG,OAAO,CAAC,SAAS;AACtD,QAAI,QAAQ,SAAS,MAAM;AACzB,aAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,WAAW,eAAe,MAAM,MAAM,CAAC;AAAA,IAClE;AAEA,WAAO,CAAC,eAAe,MAAM,OAAO;AAAA,EACtC,CAAC;AAED,MAAI,iBAAiB,WAAW,GAAG;AACjC,WAAO,iBAAiB,CAAC;AAAA,EAC3B;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,IAAI;AAAA,EACN;AACF;;;AGzZA,OAAOC,SAAQ;AAKf,IAAM,EAAE,uBAAuB,qBAAqB,IAAIC;AAGxD,SAAS,sBAAyB,OAAiB,WAAmB;AACpE,SAAO,MAAM,OAAO,CAAC,KAAK,MAAM,UAAU;AACxC,QAAI,UAAU,GAAG;AACf,aAAO,CAAC,IAAI;AAAA,IACd;AAEA,WAAO,CAAC,GAAG,KAAK,WAAW,IAAI;AAAA,EACjC,GAAG,CAAC,CAAQ;AACd;AAQO,SAAS,kBAAkB,MAA0C;AAC1E,MAAI,KAAK,SAAS,OAAO;AACvB,WAAO;AAAA,MACL;AAAA,QACE,MAAM,KAAK;AAAA,QACX,MAAM,sBAAsB;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,QAAQ,KAAK,SAAS,OAAO;AAC7C,UAAM,QAAQ,KAAK,SAAS,QAAQ,KAAK,MAAM,KAAK;AAEpD,WAAO;AAAA,MACL,MAAM,IAAI,CAAC,YAAY,kBAAkB,OAAO,CAAC;AAAA,MACjD;AAAA,QACE;AAAA,UACE,MAAM,sBAAsB;AAAA,UAC5B,MAAM,KAAK,SAAS,QAAQ,QAAQ;AAAA,QACtC;AAAA,MACF;AAAA,IACF,EAAE,KAAK;AAAA,EACT;AAEA,MAAI,KAAK,SAAS,YAAY;AAC5B,WAAO;AAAA,MACL;AAAA,QACE,MAAM,sBAAsB;AAAA,QAC5B,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,MAAM,sBAAsB;AAAA,QAC5B,MAAM;AAAA,MACR;AAAA,MACA,GAAI,KAAK,OACL,CAAC,EAAE,MAAM,KAAK,MAAM,MAAM,sBAAsB,WAAW,CAAC,IAC5D,CAAC;AAAA,MACL;AAAA,QACE,MAAM,sBAAsB;AAAA,QAC5B,MAAM;AAAA,MACR;AAAA,MACA,GAAG;AAAA,QACD,KAAK,WAAW,IAAI,CAAC,MAAM;AACzB,cAAI,EAAE,MAAM;AACV,mBAAO;AAAA,cACL;AAAA,gBACE,MAAM,sBAAsB;AAAA,gBAC5B,MAAM,EAAE;AAAA,cACV;AAAA,cACA;AAAA,gBACE,MAAM,sBAAsB;AAAA,gBAC5B,MAAM,EAAE,WAAW,MAAM;AAAA,cAC3B;AAAA,cACA;AAAA,gBACE,MAAM,sBAAsB;AAAA,gBAC5B,MAAM;AAAA,cACR;AAAA,cACA,GAAG,kBAAkB,EAAE,IAAI;AAAA,YAC7B;AAAA,UACF;AAEA,iBAAO,kBAAkB,EAAE,IAAI;AAAA,QACjC,CAAC;AAAA,QACD;AAAA,UACE;AAAA,YACE,MAAM,sBAAsB;AAAA,YAC5B,MAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF,EAAE,KAAK;AAAA,MACP;AAAA,QACE,MAAM,sBAAsB;AAAA,QAC5B,MAAM;AAAA,MACR;AAAA,MACA,GAAI,KAAK,aACL;AAAA,QACE;AAAA,UACE,MAAM,sBAAsB;AAAA,UAC5B,MAAM;AAAA,QACR;AAAA,QACA,GAAG,kBAAkB,KAAK,UAAU;AAAA,MACtC,IACA,CAAC;AAAA,IACP;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,SAAS;AACzB,WAAO;AAAA,MACL;AAAA,QACE,MAAM,sBAAsB;AAAA,QAC5B,MAAM;AAAA,MACR;AAAA,MACA,GAAG;AAAA,QACD,KAAK,aAAa,IAAI,CAAC,MAAM;AAC3B,cAAI,EAAE,MAAM;AACV,mBAAO;AAAA,cACL;AAAA,gBACE,MAAM,sBAAsB;AAAA,gBAC5B,MAAM,EAAE;AAAA,cACV;AAAA,cACA;AAAA,gBACE,MAAM,sBAAsB;AAAA,gBAC5B,MAAM;AAAA,cACR;AAAA,cACA,GAAG,kBAAkB,EAAE,IAAI;AAAA,YAC7B;AAAA,UACF;AAEA,iBAAO,kBAAkB,EAAE,IAAI;AAAA,QACjC,CAAC;AAAA,QACD;AAAA,UACE;AAAA,YACE,MAAM,sBAAsB;AAAA,YAC5B,MAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF,EAAE,KAAK;AAAA,MACP;AAAA,QACE,MAAM,sBAAsB;AAAA,QAC5B,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,SAAS;AACzB,WAAO;AAAA,MACL;AAAA,QACE,MAAM,sBAAsB;AAAA,QAC5B,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,MAAM,sBAAsB;AAAA,QAC5B,MAAM;AAAA,MACR;AAAA,MACA,GAAG,kBAAkB,KAAK,WAAW;AAAA,MACrC;AAAA,QACE,MAAM,sBAAsB;AAAA,QAC5B,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,UAAU;AAC1B,WAAO;AAAA,MACL;AAAA,QACE,MAAM,sBAAsB;AAAA,QAC5B,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,MAAM,sBAAsB;AAAA,QAC5B,MAAM;AAAA,MACR;AAAA,MACA,GAAG,kBAAkB,KAAK,OAAO;AAAA,MACjC;AAAA,QACE,MAAM,sBAAsB;AAAA,QAC5B,MAAM;AAAA,MACR;AAAA,MACA,GAAG,kBAAkB,KAAK,SAAS;AAAA,MACnC;AAAA,QACE,MAAM,sBAAsB;AAAA,QAC5B,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,OACG,KAAK,SAAS,YACb,KAAK,SAAS,aACd,KAAK,SAAS,aAChB,KAAK,UAAU,QACf;AACA,WAAO;AAAA,MACL;AAAA,QACE,MAAM,sBAAsB;AAAA,QAC5B,MACE,OAAO,KAAK,UAAU,WAClB,IAAI,KAAK,KAAK,MACd,OAAO,KAAK,KAAK;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AAEA,MAAI,oBAAoB,IAAI,KAAK,KAAK,SAAS,QAAQ;AACrD,WAAO;AAAA,MACL;AAAA,QACE,MAAM,sBAAsB;AAAA,QAC5B,MAAM,KAAK;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,YAAY,KAAK,MAAM;AACvC,WAAO;AAAA,MACL;AAAA,QACE,MAAM,sBAAsB;AAAA,QAC5B,MAAM,KAAK;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,MACE,MAAM,sBAAsB;AAAA,MAC5B,MAAM,KAAK;AAAA,IACb;AAAA,EACF;AACF;AAGO,SAAS,sBACd,cACQ;AACR,SAAO,qBAAqB,YAAY;AAC1C;AAGO,SAAS,gBAAgB,MAAwB;AACtD,SAAO,sBAAsB,kBAAkB,IAAI,CAAC;AACtD;","names":["ts","ts","ts","ts","ts"]}
package/package.json CHANGED
@@ -6,10 +6,10 @@
6
6
  "types"
7
7
  ],
8
8
  "name": "@xlr-lib/xlr-utils",
9
- "version": "0.2.0--canary.3.46",
9
+ "version": "0.2.0--canary.2.60",
10
10
  "main": "dist/cjs/index.cjs",
11
11
  "dependencies": {
12
- "@xlr-lib/xlr": "0.2.0--canary.3.46",
12
+ "@xlr-lib/xlr": "0.2.0--canary.2.60",
13
13
  "tslib": "^2.6.2"
14
14
  },
15
15
  "devDependencies": {
package/src/ts-helpers.ts CHANGED
@@ -69,44 +69,6 @@ export function getReferencedType(
69
69
  }
70
70
  }
71
71
 
72
- /**
73
- * Checks if a type reference points to a TypeScript built-in type
74
- * by examining whether its declaration comes from TypeScript's lib files.
75
- *
76
- * This is more robust than maintaining a hardcoded list of built-in types
77
- * as it automatically handles all TypeScript lib types (Map, Set, WeakMap,
78
- * Promise, Array, Date, Error, RegExp, etc.).
79
- */
80
- export function isTypeScriptLibType(
81
- node: ts.TypeReferenceNode,
82
- typeChecker: ts.TypeChecker,
83
- ): boolean {
84
- let symbol = typeChecker.getSymbolAtLocation(node.typeName);
85
-
86
- if (!symbol) return false;
87
-
88
- // Follow alias if it is a symbol
89
- if ((symbol.flags & ts.SymbolFlags.Alias) === ts.SymbolFlags.Alias) {
90
- symbol = typeChecker.getAliasedSymbol(symbol);
91
- }
92
-
93
- const declarations = symbol.getDeclarations();
94
- if (!declarations || declarations.length === 0) return false;
95
-
96
- // Check if any declaration comes from TypeScript lib files
97
- return declarations.some((decl) => {
98
- const sourceFile = decl.getSourceFile();
99
- if (!sourceFile) return false;
100
-
101
- const filePath = sourceFile.fileName;
102
- return (
103
- filePath.includes("/typescript/lib/") ||
104
- filePath.includes("\\typescript\\lib\\") ||
105
- (filePath.endsWith(".d.ts") && filePath.includes("lib."))
106
- );
107
- });
108
- }
109
-
110
72
  /**
111
73
  * Returns list of string literals from potential union of strings
112
74
  */
@@ -5,15 +5,6 @@ import type {
5
5
  NodeType,
6
6
  NodeTypeWithGenerics,
7
7
  PrimitiveTypes,
8
- StringType,
9
- NumberType,
10
- BooleanType,
11
- ObjectType,
12
- ArrayType,
13
- RefType,
14
- OrType,
15
- AndType,
16
- RecordType,
17
8
  } from "@xlr-lib/xlr";
18
9
 
19
10
  /**
@@ -128,75 +119,3 @@ export function isPrimitiveTypeNode(node: NodeType): node is PrimitiveTypes {
128
119
  export function isNonNullable<T>(a: T | null | undefined): a is NonNullable<T> {
129
120
  return a !== null || a !== undefined;
130
121
  }
131
-
132
- /**
133
- * Type guard for string type nodes
134
- */
135
- export function isStringType(node: NodeType): node is StringType {
136
- return node.type === "string";
137
- }
138
-
139
- /**
140
- * Type guard for number type nodes
141
- */
142
- export function isNumberType(node: NodeType): node is NumberType {
143
- return node.type === "number";
144
- }
145
-
146
- /**
147
- * Type guard for boolean type nodes
148
- */
149
- export function isBooleanType(node: NodeType): node is BooleanType {
150
- return node.type === "boolean";
151
- }
152
-
153
- /**
154
- * Type guard for object type nodes
155
- */
156
- export function isObjectType(node: NodeType): node is ObjectType {
157
- return node.type === "object";
158
- }
159
-
160
- /**
161
- * Type guard for array type nodes
162
- */
163
- export function isArrayType(node: NodeType): node is ArrayType {
164
- return node.type === "array";
165
- }
166
-
167
- /**
168
- * Type guard for ref type nodes
169
- */
170
- export function isRefType(node: NodeType): node is RefType {
171
- return node.type === "ref";
172
- }
173
-
174
- /**
175
- * Type guard for or (union) type nodes
176
- */
177
- export function isOrType(node: NodeType): node is OrType {
178
- return node.type === "or";
179
- }
180
-
181
- /**
182
- * Type guard for and (intersection) type nodes
183
- */
184
- export function isAndType(node: NodeType): node is AndType {
185
- return node.type === "and";
186
- }
187
-
188
- /**
189
- * Type guard for record type nodes
190
- */
191
- export function isRecordType(node: NodeType): node is RecordType {
192
- return node.type === "record";
193
- }
194
-
195
- /**
196
- * Type guard for named types (have name and source)
197
- */
198
- export function isNamedType<T extends NodeType = NodeType>(
199
- node: NodeType,
200
- ): node is NamedType<T> {
201
- return "name" in node && "source" in node && typeof node.name === "string";
202
- }
@@ -19,15 +19,6 @@ export declare function getReferencedType(node: ts.TypeReferenceNode, typeChecke
19
19
  declaration: ts.TypeAliasDeclaration | ts.InterfaceDeclaration;
20
20
  exported: boolean;
21
21
  } | undefined;
22
- /**
23
- * Checks if a type reference points to a TypeScript built-in type
24
- * by examining whether its declaration comes from TypeScript's lib files.
25
- *
26
- * This is more robust than maintaining a hardcoded list of built-in types
27
- * as it automatically handles all TypeScript lib types (Map, Set, WeakMap,
28
- * Promise, Array, Date, Error, RegExp, etc.).
29
- */
30
- export declare function isTypeScriptLibType(node: ts.TypeReferenceNode, typeChecker: ts.TypeChecker): boolean;
31
22
  /**
32
23
  * Returns list of string literals from potential union of strings
33
24
  */
@@ -1,5 +1,5 @@
1
1
  import ts from "typescript";
2
- import type { NamedType, NamedTypeWithGenerics, NodeType, NodeTypeWithGenerics, PrimitiveTypes, StringType, NumberType, BooleanType, ObjectType, ArrayType, RefType, OrType, AndType, RecordType } from "@xlr-lib/xlr";
2
+ import type { NamedType, NamedTypeWithGenerics, NodeType, NodeTypeWithGenerics, PrimitiveTypes } from "@xlr-lib/xlr";
3
3
  /**
4
4
  * Returns if the Object Property is optional
5
5
  */
@@ -42,44 +42,4 @@ export declare function isPrimitiveTypeNode(node: NodeType): node is PrimitiveTy
42
42
  * Type Guard for non-null values
43
43
  */
44
44
  export declare function isNonNullable<T>(a: T | null | undefined): a is NonNullable<T>;
45
- /**
46
- * Type guard for string type nodes
47
- */
48
- export declare function isStringType(node: NodeType): node is StringType;
49
- /**
50
- * Type guard for number type nodes
51
- */
52
- export declare function isNumberType(node: NodeType): node is NumberType;
53
- /**
54
- * Type guard for boolean type nodes
55
- */
56
- export declare function isBooleanType(node: NodeType): node is BooleanType;
57
- /**
58
- * Type guard for object type nodes
59
- */
60
- export declare function isObjectType(node: NodeType): node is ObjectType;
61
- /**
62
- * Type guard for array type nodes
63
- */
64
- export declare function isArrayType(node: NodeType): node is ArrayType;
65
- /**
66
- * Type guard for ref type nodes
67
- */
68
- export declare function isRefType(node: NodeType): node is RefType;
69
- /**
70
- * Type guard for or (union) type nodes
71
- */
72
- export declare function isOrType(node: NodeType): node is OrType;
73
- /**
74
- * Type guard for and (intersection) type nodes
75
- */
76
- export declare function isAndType(node: NodeType): node is AndType;
77
- /**
78
- * Type guard for record type nodes
79
- */
80
- export declare function isRecordType(node: NodeType): node is RecordType;
81
- /**
82
- * Type guard for named types (have name and source)
83
- */
84
- export declare function isNamedType<T extends NodeType = NodeType>(node: NodeType): node is NamedType<T>;
85
45
  //# sourceMappingURL=type-checks.d.ts.map