moonflower 1.4.7 → 1.4.8
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.
- package/dist/openapi/analyzerModule/analyzerModule.cjs +1 -1
- package/dist/openapi/analyzerModule/analyzerModule.cjs.map +1 -1
- package/dist/openapi/analyzerModule/analyzerModule.mjs +33 -32
- package/dist/openapi/analyzerModule/analyzerModule.mjs.map +1 -1
- package/dist/openapi/analyzerModule/nodeParsers.cjs +1 -1
- package/dist/openapi/analyzerModule/nodeParsers.cjs.map +1 -1
- package/dist/openapi/analyzerModule/nodeParsers.mjs +81 -81
- package/dist/openapi/analyzerModule/nodeParsers.mjs.map +1 -1
- package/dist/openapi/analyzerModule/parseEndpoint.cjs +1 -1
- package/dist/openapi/analyzerModule/parseEndpoint.cjs.map +1 -1
- package/dist/openapi/analyzerModule/parseEndpoint.d.ts.map +1 -1
- package/dist/openapi/analyzerModule/parseEndpoint.mjs +105 -95
- package/dist/openapi/analyzerModule/parseEndpoint.mjs.map +1 -1
- package/package.json +1 -1
- package/src/openapi/analyzerModule/analyzerModule.ts +1 -1
- package/src/openapi/analyzerModule/nodeParsers.ts +4 -4
- package/src/openapi/analyzerModule/parseEndpoint.ts +41 -29
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeParsers.cjs","sources":["../../../src/openapi/analyzerModule/nodeParsers.ts"],"sourcesContent":["import {\n\tNode,\n\tPropertyAccessExpression,\n\tPropertyAssignment,\n\tPropertySignature,\n\tShorthandPropertyAssignment,\n\tSyntaxKind,\n\tts,\n\tType,\n\tTypeReferenceNode,\n} from 'ts-morph'\n\nimport { Logger } from '../../utils/logger'\nimport { OpenApiManager } from '../manager/OpenApiManager'\nimport { ShapeOfProperty, ShapeOfType, ShapeOfUnionEntry } from './types'\n\nconst implementationCache = new WeakMap<Node, Node>()\nconst nodeShapeCache = new WeakMap<Node, ShapeOfType['shape']>()\nconst typeShapeCache = new WeakMap<object, ShapeOfType['shape']>()\n\nexport const findNodeImplementation = (node: Node): Node => {\n\tconst cached = implementationCache.get(node)\n\tif (cached) {\n\t\treturn cached\n\t}\n\n\tif (node.getKind() === SyntaxKind.Identifier) {\n\t\tconst implementationNode = node.asKind(SyntaxKind.Identifier)!.getImplementations()[0]?.getNode()\n\t\tif (implementationNode) {\n\t\t\tconst implementationParentNode = implementationNode.getParent()!\n\t\t\tconst assignmentValueNode = implementationParentNode.getLastChild()!\n\t\t\tif (assignmentValueNode === node) {\n\t\t\t\tthrow new Error('Recursive implementation found')\n\t\t\t}\n\t\t\tconst result = findNodeImplementation(assignmentValueNode)\n\t\t\timplementationCache.set(node, result)\n\t\t\treturn result\n\t\t}\n\n\t\tconst definitionNode = node.asKind(SyntaxKind.Identifier)!.getDefinitions()[0]?.getNode()\n\t\tif (definitionNode) {\n\t\t\tconst definitionParentNode = definitionNode.getParent()!\n\t\t\tconst assignmentValueNode = definitionParentNode.getLastChild()!\n\t\t\tif (assignmentValueNode === node) {\n\t\t\t\tthrow new Error('Recursive implementation found')\n\t\t\t}\n\t\t\tconst result = findNodeImplementation(assignmentValueNode)\n\t\t\timplementationCache.set(node, result)\n\t\t\treturn result\n\t\t}\n\t\tthrow new Error('No implementation nor definition available')\n\t}\n\n\timplementationCache.set(node, node)\n\treturn node\n}\n\nexport const findPropertyAssignmentValueNode = (\n\tnode:\n\t\t| PropertyAssignment\n\t\t| TypeReferenceNode\n\t\t| PropertySignature\n\t\t| PropertyAccessExpression\n\t\t| ShorthandPropertyAssignment,\n): Node => {\n\tconst identifierChildren = node.getChildrenOfKind(SyntaxKind.Identifier)\n\tif (identifierChildren.length === 2) {\n\t\treturn findNodeImplementation(identifierChildren[1])\n\t}\n\tconst lastMatchingChild = node.getChildren().reverse()\n\treturn lastMatchingChild.find(\n\t\t(child) =>\n\t\t\tchild.getKind() !== SyntaxKind.GreaterThanToken &&\n\t\t\tchild.getKind() !== SyntaxKind.CommaToken &&\n\t\t\tchild.getKind() !== SyntaxKind.SemicolonToken,\n\t)!\n}\n\nexport const getTypeReferenceShape = (node: TypeReferenceNode): ShapeOfType['shape'] => {\n\tconst firstChild = node.getFirstChildByKind(SyntaxKind.SyntaxList)!\n\tif (firstChild.isKind(SyntaxKind.SyntaxList)) {\n\t\treturn getRecursiveNodeShape(firstChild.getFirstChild()!)\n\t} else {\n\t\treturn getRecursiveNodeShape(firstChild)\n\t}\n}\n\nexport const getRecursiveNodeShape = (nodeOrReference: Node): ShapeOfType['shape'] => {\n\tconst cached = nodeShapeCache.get(nodeOrReference)\n\tif (cached !== undefined) {\n\t\treturn cached\n\t}\n\tconst result = computeRecursiveNodeShape(nodeOrReference)\n\tnodeShapeCache.set(nodeOrReference, result)\n\treturn result\n}\n\nconst computeRecursiveNodeShape = (nodeOrReference: Node): ShapeOfType['shape'] => {\n\tconst typeName = nodeOrReference.getSymbol()?.getName()\n\tif (typeName && OpenApiManager.getInstance().hasExposedModel(typeName)) {\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'ref',\n\t\t\t\tshape: typeName,\n\t\t\t\toptional: false,\n\t\t\t},\n\t\t]\n\t}\n\n\tconst node = findNodeImplementation(nodeOrReference)\n\n\t// Undefined\n\tconst undefinedNode = node.asKind(SyntaxKind.UndefinedKeyword)\n\tif (undefinedNode) {\n\t\treturn 'undefined'\n\t}\n\n\t// Literal type\n\tconst literalNode = node.asKind(SyntaxKind.LiteralType)\n\tif (literalNode) {\n\t\tif (literalNode.getFirstChildByKind(SyntaxKind.TrueKeyword)) {\n\t\t\treturn 'true'\n\t\t}\n\t\tif (literalNode.getFirstChildByKind(SyntaxKind.FalseKeyword)) {\n\t\t\treturn 'false'\n\t\t}\n\t}\n\n\t// Boolean literal\n\tconst booleanLiteralNode =\n\t\tnode.asKind(SyntaxKind.BooleanKeyword) ||\n\t\tnode.asKind(SyntaxKind.TrueKeyword) ||\n\t\tnode.asKind(SyntaxKind.FalseKeyword)\n\tif (booleanLiteralNode) {\n\t\treturn 'boolean'\n\t}\n\n\t// String literal\n\tconst stringLiteralNode = node.asKind(SyntaxKind.StringKeyword) || node.asKind(SyntaxKind.StringLiteral)\n\tif (stringLiteralNode) {\n\t\treturn 'string'\n\t}\n\n\t// Number literal\n\tconst numberLiteralNode = node.asKind(SyntaxKind.NumberKeyword) || node.asKind(SyntaxKind.NumericLiteral)\n\tif (numberLiteralNode) {\n\t\treturn 'number'\n\t}\n\n\t// BigInt literal\n\tconst bigIntNode = node.asKind(SyntaxKind.BigIntKeyword) || node.asKind(SyntaxKind.BigIntLiteral)\n\tif (bigIntNode) {\n\t\treturn 'bigint'\n\t}\n\n\t// Type literal\n\tconst typeLiteralNode = node.asKind(SyntaxKind.TypeLiteral)\n\tif (typeLiteralNode) {\n\t\tconst properties = typeLiteralNode\n\t\t\t.getFirstChildByKind(SyntaxKind.SyntaxList)!\n\t\t\t.getChildrenOfKind(SyntaxKind.PropertySignature)\n\n\t\tconst propertyShapes = properties.map((propNode) => {\n\t\t\tconst identifier = propNode.getFirstChildByKind(SyntaxKind.Identifier)!\n\t\t\tconst valueNode = findPropertyAssignmentValueNode(propNode)\n\t\t\tconst questionMarkToken = identifier.getNextSiblingIfKind(SyntaxKind.QuestionToken)\n\t\t\treturn {\n\t\t\t\trole: 'property' as const,\n\t\t\t\tidentifier: identifier.getText(),\n\t\t\t\tshape: getRecursiveNodeShape(valueNode),\n\t\t\t\toptional: valueNode.getType().isNullable() || !!questionMarkToken,\n\t\t\t}\n\t\t})\n\t\treturn propertyShapes\n\t}\n\n\t// Type reference\n\tconst typeReferenceNode = node.asKind(SyntaxKind.TypeReference)\n\tif (typeReferenceNode) {\n\t\treturn getRecursiveNodeShape(typeReferenceNode.getFirstChild()!)\n\t}\n\n\t// Property access expression\n\tconst propertyAccessNode = node.asKind(SyntaxKind.PropertyAccessExpression)\n\tif (propertyAccessNode) {\n\t\tconst lastChild = findNodeImplementation(node.getLastChild()!)\n\t\treturn getProperTypeShape(lastChild.asKind(SyntaxKind.CallExpression)!.getReturnType(), lastChild)\n\t}\n\n\t// Union type\n\tconst unionTypeNode = node.asKind(SyntaxKind.UnionType)\n\tif (unionTypeNode) {\n\t\treturn getProperTypeShape(unionTypeNode.getType(), node)\n\t}\n\n\t// Typeof query\n\tconst typeQueryNode = node.asKind(SyntaxKind.TypeQuery)\n\tif (typeQueryNode) {\n\t\treturn getRecursiveNodeShape(typeQueryNode.getLastChild()!)\n\t}\n\n\t// Qualified name\n\tconst qualifiedNameNode = node.asKind(SyntaxKind.QualifiedName)\n\tif (qualifiedNameNode) {\n\t\treturn getRecursiveNodeShape(qualifiedNameNode.getLastChild()!)\n\t}\n\n\t// Call expression\n\tconst callExpressionNode = node.asKind(SyntaxKind.CallExpression)\n\tif (callExpressionNode) {\n\t\treturn getProperTypeShape(callExpressionNode.getReturnType(), callExpressionNode)\n\t}\n\n\t// Await expression\n\tconst awaitExpressionNode = node.asKind(SyntaxKind.AwaitExpression)\n\tif (awaitExpressionNode) {\n\t\treturn getRecursiveNodeShape(awaitExpressionNode.getChildAtIndex(1)!)\n\t}\n\n\t// 'As' Expression\n\tconst asExpressionNode = node.asKind(SyntaxKind.AsExpression)\n\tif (asExpressionNode) {\n\t\treturn getRecursiveNodeShape(asExpressionNode.getChildAtIndex(2)!)\n\t}\n\n\t// TODO\n\tconst fileName = node.getSourceFile().getFilePath().split('/').pop()\n\tLogger.warn(`[${fileName}] Unknown node type: ${node.getKindName()}`)\n\treturn 'unknown_1'\n}\n\nexport const getShapeOfValidatorLiteral = (\n\tobjectLiteralNode: Node<ts.ObjectLiteralExpression>,\n): (ShapeOfProperty & { description: string; errorMessage: string })[] => {\n\tconst syntaxListNode = objectLiteralNode.getFirstDescendantByKind(SyntaxKind.SyntaxList)!\n\tconst assignmentNodes = syntaxListNode.getChildrenOfKind(SyntaxKind.PropertyAssignment)!\n\n\tconst properties = assignmentNodes.map((node) => {\n\t\tconst identifierNode = node.getFirstChild()!\n\t\tconst identifierName = (() => {\n\t\t\tif (identifierNode.isKind(SyntaxKind.Identifier)) {\n\t\t\t\treturn identifierNode.getText()\n\t\t\t}\n\t\t\tif (identifierNode.isKind(SyntaxKind.StringLiteral)) {\n\t\t\t\treturn identifierNode.getLiteralText()\n\t\t\t}\n\t\t\tconst fileName = node.getSourceFile().getFilePath().split('/').pop()\n\t\t\tLogger.warn(`[${fileName}] Unknown identifier name: ${identifierNode.getText()}`)\n\t\t\treturn 'unknown_30'\n\t\t})()\n\n\t\tconst assignmentValueNode = node.getLastChild()!\n\t\tconst innerLiteralNode = findNodeImplementation(assignmentValueNode)\n\n\t\treturn {\n\t\t\trole: 'property' as const,\n\t\t\tidentifier: identifierName,\n\t\t\tshape: getValidatorPropertyShape(innerLiteralNode),\n\t\t\toptional: getValidatorPropertyOptionality(innerLiteralNode),\n\t\t\tdescription: getValidatorPropertyStringValue(innerLiteralNode, 'description'),\n\t\t\terrorMessage: getValidatorPropertyStringValue(innerLiteralNode, 'errorMessage'),\n\t\t}\n\t})\n\n\treturn properties || []\n}\n\nconst isZodCallExpression = (node: Node): boolean => {\n\tconst callExpression = node.asKind(SyntaxKind.CallExpression)\n\tif (!callExpression) {\n\t\treturn false\n\t}\n\tconst returnType = callExpression.getReturnType()\n\tconst typeName = returnType.getSymbol()?.getName() ?? ''\n\treturn typeName.startsWith('Zod')\n}\n\nconst getZodCallShape = (node: Node): ShapeOfType['shape'] => {\n\tconst callExpression = node.asKind(SyntaxKind.CallExpression)!\n\tconst returnType = callExpression.getReturnType()\n\tconst typeName = returnType.getSymbol()?.getName() ?? ''\n\n\tif (typeName === 'ZodNumber') {\n\t\treturn 'number'\n\t}\n\tif (typeName === 'ZodString') {\n\t\treturn 'string'\n\t}\n\tif (typeName === 'ZodBoolean') {\n\t\treturn 'boolean'\n\t}\n\tif (typeName === 'ZodBigInt') {\n\t\treturn 'bigint'\n\t}\n\n\tif (typeName === 'ZodObject') {\n\t\tconst argNode = callExpression.getFirstChildByKind(SyntaxKind.SyntaxList)?.getFirstChild()\n\t\tconst objectLiteral = argNode?.asKind(SyntaxKind.ObjectLiteralExpression)\n\t\tif (!objectLiteral) {\n\t\t\treturn 'unknown_zod_object'\n\t\t}\n\t\tconst syntaxList = objectLiteral.getFirstChildByKind(SyntaxKind.SyntaxList)\n\t\tif (!syntaxList) {\n\t\t\treturn []\n\t\t}\n\t\tconst properties = syntaxList.getChildrenOfKind(SyntaxKind.PropertyAssignment)\n\t\treturn properties.map((prop) => {\n\t\t\tconst identifier = prop.getFirstChildByKind(SyntaxKind.Identifier)!.getText()\n\t\t\tconst valueNode = prop.getLastChild()!\n\t\t\treturn {\n\t\t\t\trole: 'property' as const,\n\t\t\t\tidentifier,\n\t\t\t\tshape: isZodCallExpression(valueNode)\n\t\t\t\t\t? getZodCallShape(valueNode)\n\t\t\t\t\t: getValidatorPropertyShape(valueNode),\n\t\t\t\toptional: false,\n\t\t\t}\n\t\t})\n\t}\n\n\tif (typeName === 'ZodArray') {\n\t\tconst argNode = callExpression.getFirstChildByKind(SyntaxKind.SyntaxList)?.getFirstChild()\n\t\tif (argNode) {\n\t\t\tconst elementShape = isZodCallExpression(argNode)\n\t\t\t\t? getZodCallShape(argNode)\n\t\t\t\t: getValidatorPropertyShape(argNode)\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\trole: 'array' as const,\n\t\t\t\t\tshape: elementShape,\n\t\t\t\t\toptional: false,\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\t\t// Handle chained form: z.string().array()\n\t\tconst propertyAccess = callExpression.getFirstChildByKind(SyntaxKind.PropertyAccessExpression)\n\t\tconst receiverCall = propertyAccess?.getFirstChildByKind(SyntaxKind.CallExpression)\n\t\tif (receiverCall && isZodCallExpression(receiverCall)) {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\trole: 'array' as const,\n\t\t\t\t\tshape: getZodCallShape(receiverCall),\n\t\t\t\t\toptional: false,\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\t\treturn 'unknown_zod_array'\n\t}\n\n\tif (typeName === 'ZodEnum') {\n\t\tconst typeArgs = returnType.getTypeArguments()\n\t\tif (typeArgs.length > 0) {\n\t\t\tconst enumType = typeArgs[0]\n\t\t\tconst properties = enumType.getProperties()\n\t\t\tconst shapes: ShapeOfUnionEntry[] = properties.map((prop) => ({\n\t\t\t\trole: 'union_entry' as const,\n\t\t\t\tshape: getProperTypeShape(prop.getTypeAtLocation(callExpression), callExpression, []),\n\t\t\t\toptional: false,\n\t\t\t}))\n\t\t\tif (shapes.length === 1) {\n\t\t\t\treturn shapes[0].shape\n\t\t\t}\n\t\t\tif (shapes.length > 1) {\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\trole: 'union' as const,\n\t\t\t\t\t\tshape: shapes,\n\t\t\t\t\t\toptional: false,\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t}\n\t\t}\n\t\treturn 'unknown_zod_enum'\n\t}\n\n\tif (typeName === 'ZodOptional') {\n\t\tconst innerCallExpression = callExpression\n\t\t\t.getFirstChildByKind(SyntaxKind.PropertyAccessExpression)\n\t\t\t?.getFirstChildByKind(SyntaxKind.CallExpression)\n\t\tif (innerCallExpression && isZodCallExpression(innerCallExpression)) {\n\t\t\treturn getZodCallShape(innerCallExpression)\n\t\t}\n\t\treturn 'unknown_zod_optional'\n\t}\n\n\tconst fileName = node.getSourceFile().getFilePath().split('/').pop()\n\tLogger.warn(`[${fileName}] Unknown zod type: ${typeName}`)\n\treturn 'unknown_zod'\n}\n\nexport const getValidatorPropertyShape = (innerLiteralNode: Node): ShapeOfType['shape'] => {\n\t// Zod validator (e.g. z.number(), z.string(), z.object({...}), z.array(...))\n\tif (isZodCallExpression(innerLiteralNode)) {\n\t\treturn getZodCallShape(innerLiteralNode)\n\t}\n\n\t// Inline definition with `as Validator<...>` clause\n\tconst inlineValidatorAsExpression = innerLiteralNode\n\t\t.getParent()!\n\t\t.getFirstChildByKind(SyntaxKind.AsExpression)\n\tif (inlineValidatorAsExpression) {\n\t\tconst typeReference = inlineValidatorAsExpression.getLastChildByKind(SyntaxKind.TypeReference)!\n\t\treturn getTypeReferenceShape(typeReference)\n\t}\n\n\t// Variable with `: Validator<...>` clause\n\tconst childTypeReferenceNode = innerLiteralNode.getParent()!.getFirstChildByKind(SyntaxKind.TypeReference)\n\tif (childTypeReferenceNode) {\n\t\treturn getTypeReferenceShape(childTypeReferenceNode)\n\t}\n\n\t// `RequiredParam<...>` inline call expression\n\tif (innerLiteralNode.getParent()!.getChildrenOfKind(SyntaxKind.SyntaxList).length >= 2) {\n\t\tconst typeNode = innerLiteralNode\n\t\t\t.getParent()!\n\t\t\t.getFirstChildByKind(SyntaxKind.SyntaxList)!\n\t\t\t.getFirstChild()!\n\t\treturn getRecursiveNodeShape(typeNode)\n\t}\n\n\t// `RequestParam | RequiredParam | OptionalParam` call expression\n\tconst childCallExpressionNode = innerLiteralNode.getParent()!.getFirstChildByKind(SyntaxKind.CallExpression)\n\tif (childCallExpressionNode) {\n\t\tconst callExpressionArgument = findNodeImplementation(\n\t\t\tchildCallExpressionNode.getFirstChildByKind(SyntaxKind.SyntaxList)!.getFirstChild()!,\n\t\t)\n\n\t\t// Param is a type reference\n\t\tconst typeReferenceNode = callExpressionArgument\n\t\t\t.getParent()!\n\t\t\t.getFirstChildByKind(SyntaxKind.TypeReference)!\n\t\tif (typeReferenceNode) {\n\t\t\treturn getProperTypeShape(typeReferenceNode.getType(), typeReferenceNode, [])\n\t\t}\n\n\t\tconst thingyNode = callExpressionArgument\n\t\t\t.getParent()!\n\t\t\t.getFirstChildByKind(SyntaxKind.ObjectLiteralExpression)!\n\t\tif (thingyNode) {\n\t\t\treturn getValidatorPropertyShape(thingyNode)\n\t\t}\n\n\t\tif (callExpressionArgument.getKind() === SyntaxKind.CallExpression) {\n\t\t\treturn getValidatorPropertyShape(callExpressionArgument)\n\t\t}\n\n\t\tif (callExpressionArgument.getKind() === SyntaxKind.IntersectionType) {\n\t\t\treturn getValidatorPropertyShape(callExpressionArgument)\n\t\t}\n\n\t\tconst fileName = innerLiteralNode.getSourceFile().getFilePath().split('/').pop()\n\t\tLogger.warn(`[${fileName}] Unknown call expression argument: ${callExpressionArgument.getKindName()}`)\n\t\treturn 'unknown_3'\n\t}\n\n\t// Attempting to infer type from `parse` function\n\tconst innerNodePropertyAssignments = innerLiteralNode\n\t\t.getFirstChildByKind(SyntaxKind.SyntaxList)!\n\t\t.getChildrenOfKind(SyntaxKind.PropertyAssignment)\n\tconst parsePropertyAssignment = innerNodePropertyAssignments.find((prop) => {\n\t\treturn prop.getFirstChildByKind(SyntaxKind.Identifier)?.getText() === 'parse'\n\t})\n\tif (parsePropertyAssignment) {\n\t\tconst returnType = findPropertyAssignmentValueNode(parsePropertyAssignment)\n\t\t\t.asKind(SyntaxKind.ArrowFunction)!\n\t\t\t.getReturnType()\n\t\treturn getProperTypeShape(returnType, parsePropertyAssignment)\n\t}\n\n\t// Import statement\n\tconst importTypeNode = innerLiteralNode\n\t\t.getFirstChildByKind(SyntaxKind.SyntaxList)\n\t\t?.getFirstChildByKind(SyntaxKind.ImportType)\n\tif (importTypeNode) {\n\t\tconst indexOfGreaterThanToken = importTypeNode\n\t\t\t.getLastChildByKind(SyntaxKind.GreaterThanToken)!\n\t\t\t.getChildIndex()\n\t\tconst targetSyntaxList = importTypeNode.getChildAtIndex(indexOfGreaterThanToken - 1)\n\t\treturn getRecursiveNodeShape(targetSyntaxList.getFirstChild()!)\n\t}\n\n\t// Intersection type with Validator\n\tconst intersectionType = innerLiteralNode.isKind(SyntaxKind.IntersectionType)\n\t\t? innerLiteralNode\n\t\t: innerLiteralNode.getParent()?.isKind(SyntaxKind.VariableDeclaration)\n\t\t\t? innerLiteralNode.getParent()?.getFirstChildByKind(SyntaxKind.IntersectionType)\n\t\t\t: null\n\n\tif (intersectionType) {\n\t\tconst validatorType = intersectionType.getFirstChildByKind(SyntaxKind.TypeReference)\n\t\tif (validatorType) {\n\t\t\treturn getTypeReferenceShape(validatorType)\n\t\t}\n\t}\n\n\tconst fileName = innerLiteralNode.getSourceFile().getFilePath().split('/').pop()\n\tLogger.warn(`[${fileName}] Unknown import type node`)\n\n\treturn 'unknown_2'\n}\n\nexport const getValidatorPropertyOptionality = (node: Node): boolean => {\n\tif (isZodCallExpression(node)) {\n\t\tconst callExpression = node.asKind(SyntaxKind.CallExpression)!\n\t\tconst returnType = callExpression.getReturnType()\n\t\tconst typeName = returnType.getSymbol()?.getName() ?? ''\n\t\tif (typeName === 'ZodOptional') {\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\n\tconst callExpressionNode = node.asKind(SyntaxKind.CallExpression)\n\tif (callExpressionNode) {\n\t\tconst identifierNode = callExpressionNode.getFirstChildByKind(SyntaxKind.Identifier)\n\t\tif (identifierNode?.getText() === 'OptionalParam') {\n\t\t\treturn true\n\t\t} else if (identifierNode?.getText() === 'RequiredParam') {\n\t\t\treturn false\n\t\t}\n\n\t\tconst syntaxListNode = callExpressionNode.getFirstChildByKind(SyntaxKind.SyntaxList)!\n\t\tconst literalExpression = findNodeImplementation(syntaxListNode.getFirstChild()!)\n\t\treturn getValidatorPropertyOptionality(literalExpression)\n\t}\n\n\tconst syntaxListNode = node.getFirstDescendantByKind(SyntaxKind.SyntaxList)!\n\tconst assignmentNodes = syntaxListNode.getChildrenOfKind(SyntaxKind.PropertyAssignment)!\n\n\treturn assignmentNodes.some((node) => {\n\t\tconst identifierNode = node.getFirstDescendantByKind(SyntaxKind.Identifier)!\n\t\tconst identifierName = identifierNode.getText()\n\n\t\tif (identifierName === 'optional') {\n\t\t\tconst value = findPropertyAssignmentValueNode(node)\n\t\t\treturn value.getKind() === SyntaxKind.TrueKeyword\n\t\t}\n\t\treturn false\n\t})\n}\n\nexport const getValidatorPropertyStringValue = (\n\tnodeOrReference: Node,\n\tname: 'description' | 'errorMessage',\n): string => {\n\tif (isZodCallExpression(nodeOrReference)) {\n\t\treturn ''\n\t}\n\n\tconst node = findNodeImplementation(nodeOrReference)\n\n\tconst callExpressionNode = node.asKind(SyntaxKind.CallExpression)\n\tif (callExpressionNode) {\n\t\tconst targetChild = callExpressionNode.getLastChildByKind(SyntaxKind.SyntaxList)!\n\t\treturn getValidatorPropertyStringValue(targetChild, name)\n\t}\n\n\tconst syntaxListNode = node.asKind(SyntaxKind.SyntaxList)\n\tif (syntaxListNode) {\n\t\tconst children = syntaxListNode.getChildren().map((c) => getValidatorPropertyStringValue(c, name))\n\t\treturn children.find((value) => !!value && value !== 'unknown_25') || ''\n\t}\n\n\tconst objectLiteralNode = node.asKind(SyntaxKind.ObjectLiteralExpression)\n\tif (objectLiteralNode) {\n\t\tconst values = getValuesOfObjectLiteral(objectLiteralNode)\n\t\tconst targetValue = values.find((value) => value.identifier === name)\n\t\tif (!targetValue) {\n\t\t\treturn ''\n\t\t}\n\t\tif (Array.isArray(targetValue.value)) {\n\t\t\treturn 'array'\n\t\t}\n\t\treturn targetValue.value || ''\n\t}\n\n\tconst intersectionTypeNode = node.asKind(SyntaxKind.IntersectionType)\n\tif (intersectionTypeNode) {\n\t\treturn (\n\t\t\tintersectionTypeNode\n\t\t\t\t.getTypeNodes()\n\t\t\t\t.flatMap((t) => getValidatorPropertyStringValue(t, name))\n\t\t\t\t.filter((v) => !!v && v !== 'unknown_25')[0] || 'unknown_27'\n\t\t)\n\t}\n\n\tconst typeLiteralNode = node.asKind(SyntaxKind.TypeLiteral)\n\tif (typeLiteralNode) {\n\t\treturn getValidatorPropertyStringValue(typeLiteralNode.getFirstChildByKind(SyntaxKind.SyntaxList)!, name)\n\t}\n\n\tconst propertySignatureNode = node.asKind(SyntaxKind.PropertySignature)\n\tif (propertySignatureNode) {\n\t\tconst identifier = node.getFirstDescendantByKind(SyntaxKind.Identifier)!\n\t\tif (identifier.getText() === name) {\n\t\t\tconst targetNode = findPropertyAssignmentValueNode(propertySignatureNode).getFirstDescendantByKind(\n\t\t\t\tSyntaxKind.StringLiteral,\n\t\t\t)!\n\t\t\treturn targetNode.getLiteralText()\n\t\t}\n\t}\n\n\tconst fileName = node.getSourceFile().getFilePath().split('/').pop()\n\tLogger.dev(`[${fileName}] Unknown property string value node ${node.getKindName()}`)\n\treturn 'unknown_25'\n}\n\nconst isPromise = (type: Type) => {\n\tconst symbol = type.getSymbol()\n\tif (!type.isObject() || !symbol) {\n\t\treturn false\n\t}\n\tconst args = type.getTypeArguments()\n\treturn symbol.getName() === 'Promise' && args.length === 1\n}\n\nexport const getProperTypeShape = (\n\ttypeOrPromise: Type,\n\tatLocation: Node,\n\tstack: Type[] = [],\n): ShapeOfType['shape'] => {\n\tconst typeName = typeOrPromise.getAliasSymbol()?.getName()\n\tif (typeName && OpenApiManager.getInstance().hasExposedModel(typeName)) {\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'ref',\n\t\t\t\tshape: typeName,\n\t\t\t\toptional: false,\n\t\t\t},\n\t\t]\n\t}\n\n\tconst type = isPromise(typeOrPromise) ? typeOrPromise.getTypeArguments()[0] : typeOrPromise\n\n\tif (stack.some((previousType) => previousType === type)) {\n\t\treturn 'circular'\n\t}\n\n\tconst cacheKey = type.compilerType\n\tconst cached = typeShapeCache.get(cacheKey)\n\tif (cached !== undefined) {\n\t\treturn cached\n\t}\n\tconst result = computeProperTypeShape(type, atLocation, stack)\n\ttypeShapeCache.set(cacheKey, result)\n\treturn result\n}\n\nconst computeProperTypeShape = (type: Type, atLocation: Node, stack: Type[]): ShapeOfType['shape'] => {\n\tconst nextStack = stack.concat(type)\n\n\tif (type.getText() === 'void') {\n\t\treturn 'void'\n\t}\n\n\tif (type.isAny()) {\n\t\treturn 'any'\n\t}\n\n\tif (type.isUnknown()) {\n\t\treturn 'unknown'\n\t}\n\n\tif (type.isNull()) {\n\t\treturn 'null'\n\t}\n\n\tif (type.isUndefined()) {\n\t\treturn 'undefined'\n\t}\n\n\tif (type.isBoolean() || type.isBooleanLiteral()) {\n\t\treturn 'boolean'\n\t}\n\n\tif (type.isStringLiteral()) {\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'literal_string' as const,\n\t\t\t\tshape: String(type.getLiteralValue()!),\n\t\t\t\toptional: false,\n\t\t\t},\n\t\t]\n\t}\n\n\tif (type.isNumberLiteral()) {\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'literal_number' as const,\n\t\t\t\tshape: String(type.getLiteralValue()!),\n\t\t\t\toptional: false,\n\t\t\t},\n\t\t]\n\t}\n\n\tif (type.isString() || type.isTemplateLiteral()) {\n\t\treturn 'string'\n\t}\n\n\tif (type.isNumber()) {\n\t\treturn 'number'\n\t}\n\n\tif (type.getText() === 'bigint') {\n\t\treturn 'bigint'\n\t}\n\n\tif (type.isTuple()) {\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'tuple' as const,\n\t\t\t\tshape: type.getTupleElements().map((t) => ({\n\t\t\t\t\trole: 'tuple_entry' as const,\n\t\t\t\t\tshape: getProperTypeShape(t, atLocation, nextStack),\n\t\t\t\t\toptional: false,\n\t\t\t\t})),\n\t\t\t\toptional: false,\n\t\t\t},\n\t\t]\n\t}\n\n\tif (type.isArray()) {\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'array' as const,\n\t\t\t\tshape: getProperTypeShape(type.getArrayElementType()!, atLocation, nextStack),\n\t\t\t\toptional: false,\n\t\t\t},\n\t\t]\n\t}\n\n\t// Handles `interface Foo extends Array<T>` (e.g. Prisma's JsonArray)\n\t// which fails type.isArray() but is still array-like\n\tif (type.isObject()) {\n\t\tconst arrayElementType = type.getNumberIndexType()\n\t\tconst baseTypes = type.getBaseTypes()\n\t\tconst arrayBase = baseTypes?.find((base) => base.isArray())\n\t\tif (arrayBase) {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\trole: 'array' as const,\n\t\t\t\t\tshape: getProperTypeShape(\n\t\t\t\t\t\tarrayBase.getArrayElementType() ?? arrayElementType!,\n\t\t\t\t\t\tatLocation,\n\t\t\t\t\t\tnextStack,\n\t\t\t\t\t),\n\t\t\t\t\toptional: false,\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\t}\n\n\tconst typeSymbolName = type.getSymbol()?.getName()\n\n\tconst bufferLikeTypes = new Set([\n\t\t'Buffer',\n\t\t'Uint8Array',\n\t\t'Int8Array',\n\t\t'Uint8ClampedArray',\n\t\t'Int16Array',\n\t\t'Uint16Array',\n\t\t'Int32Array',\n\t\t'Uint32Array',\n\t\t'Float32Array',\n\t\t'Float64Array',\n\t\t'BigInt64Array',\n\t\t'BigUint64Array',\n\t\t'ArrayBuffer',\n\t\t'SharedArrayBuffer',\n\t\t'ReadableStream',\n\t])\n\n\tif (type.isObject() && typeSymbolName && bufferLikeTypes.has(typeSymbolName)) {\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'buffer' as const,\n\t\t\t\tshape: 'buffer',\n\t\t\t\toptional: false,\n\t\t\t},\n\t\t]\n\t}\n\n\tif (type.isObject() && typeSymbolName === 'RegExp') {\n\t\treturn 'string'\n\t}\n\n\tif (type.isObject() && typeSymbolName === 'Map') {\n\t\tconst typeArgs = type.getTypeArguments()\n\t\tconst valueType = typeArgs[1]\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'record' as const,\n\t\t\t\tshape: valueType ? getProperTypeShape(valueType, atLocation, nextStack) : 'unknown',\n\t\t\t\toptional: false,\n\t\t\t},\n\t\t]\n\t}\n\n\tif (type.isObject() && typeSymbolName === 'Set') {\n\t\tconst typeArgs = type.getTypeArguments()\n\t\tconst elementType = typeArgs[0]\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'array' as const,\n\t\t\t\tshape: elementType ? getProperTypeShape(elementType, atLocation, nextStack) : 'unknown',\n\t\t\t\toptional: false,\n\t\t\t},\n\t\t]\n\t}\n\n\tif (type.isObject() && type.getProperties().length === 0) {\n\t\tconst targetType = type.getAliasTypeArguments()[1] ?? type.getStringIndexType()\n\t\tif (targetType) {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\trole: 'record' as const,\n\t\t\t\t\tshape: getProperTypeShape(targetType, atLocation, nextStack),\n\t\t\t\t\toptional: false,\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\t}\n\n\tif (type.isObject()) {\n\t\tif (typeSymbolName === 'Date' || type.getText() === 'Date') {\n\t\t\treturn 'Date'\n\t\t}\n\t\treturn type\n\t\t\t.getProperties()\n\t\t\t.map((prop) => {\n\t\t\t\tconst valueDeclaration = prop.getValueDeclaration() || prop.getDeclarations()[0]!\n\t\t\t\tif (!valueDeclaration) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: 'property' as const,\n\t\t\t\t\t\tidentifier: prop.getName(),\n\t\t\t\t\t\tshape: getProperTypeShape(prop.getTypeAtLocation(atLocation), atLocation, nextStack),\n\t\t\t\t\t\toptional: false,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst valueDeclarationNode =\n\t\t\t\t\tvalueDeclaration.asKind(SyntaxKind.PropertySignature) ||\n\t\t\t\t\tvalueDeclaration.asKind(SyntaxKind.PropertyAssignment) ||\n\t\t\t\t\tvalueDeclaration.asKind(SyntaxKind.ShorthandPropertyAssignment)\n\n\t\t\t\tif (!valueDeclarationNode) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: 'property' as const,\n\t\t\t\t\t\tidentifier: prop.getName(),\n\t\t\t\t\t\tshape: getProperTypeShape(prop.getTypeAtLocation(atLocation), atLocation, nextStack),\n\t\t\t\t\t\toptional: false,\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst isOptional = prop.getTypeAtLocation(atLocation).isNullable()\n\n\t\t\t\tconst shape = getProperTypeShape(prop.getTypeAtLocation(atLocation), atLocation, nextStack)\n\t\t\t\treturn {\n\t\t\t\t\trole: 'property' as const,\n\t\t\t\t\tidentifier: prop.getName(),\n\t\t\t\t\tshape: shape,\n\t\t\t\t\toptional: isOptional,\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter((val) => val.shape !== 'undefined')\n\t}\n\n\tif (type.isUnion()) {\n\t\tconst unfilteredShapes: ShapeOfUnionEntry[] = type.getUnionTypes().map((type) => ({\n\t\t\trole: 'union_entry',\n\t\t\tshape: getProperTypeShape(type, atLocation, nextStack),\n\t\t\toptional: false,\n\t\t}))\n\n\t\tconst dedupedShapes = unfilteredShapes.filter(\n\t\t\t(type, index, arr) => !arr.find((dup, dupIndex) => dup.shape === type.shape && dupIndex > index),\n\t\t)\n\t\tconst isNullable = dedupedShapes.some((shape) => shape.shape === 'undefined')\n\t\tconst shapes = dedupedShapes.filter((shape) => shape.shape !== 'undefined')\n\t\tif (shapes.length === 1) {\n\t\t\treturn shapes[0].shape\n\t\t}\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'union',\n\t\t\t\tshape: shapes,\n\t\t\t\toptional: isNullable,\n\t\t\t},\n\t\t]\n\t}\n\n\tif (type.isIntersection()) {\n\t\tconst children = type.getIntersectionTypes()\n\t\tconst shapesOfChildren = children\n\t\t\t.map((child) => getProperTypeShape(child, atLocation, nextStack))\n\t\t\t.filter((shape) => typeof shape !== 'string') as ShapeOfProperty[][]\n\t\treturn shapesOfChildren.reduce<ShapeOfType[]>((total, current) => [...total, ...current], [])\n\t}\n\n\tconst fileName = atLocation.getSourceFile().getFilePath().split('/').pop()\n\tLogger.warn(`[${fileName}] Unknown type shape node ${type.getText()}`)\n\treturn 'unknown_5'\n}\n\nconst getLiteralValueOfNode = (node: Node): string | string[] | unknown[] => {\n\tif (node.isKind(SyntaxKind.Identifier)) {\n\t\treturn getLiteralValueOfNode(findNodeImplementation(node))\n\t} else if (node.isKind(SyntaxKind.StringLiteral)) {\n\t\treturn node.getLiteralValue()\n\t} else if (node.isKind(SyntaxKind.ArrayLiteralExpression)) {\n\t\treturn node.forEachChildAsArray().map((child) => getLiteralValueOfNode(child)) as string[]\n\t} else if (node.isKind(SyntaxKind.PropertyAccessExpression)) {\n\t\treturn getLiteralValueOfNode(findPropertyAssignmentValueNode(node))\n\t} else if (node.isKind(SyntaxKind.ObjectLiteralExpression)) {\n\t\treturn getValuesOfObjectLiteral(node)\n\t}\n\n\tconst fileName = node.getSourceFile().getFilePath().split('/').pop()\n\tLogger.dev(`[${fileName}] Unknown literal value node ${node.getKindName()}`)\n\n\treturn 'unknown_6'\n}\n\nexport const resolveEndpointPath = (node: Node): string | null => {\n\tconst callExpression = node.getFirstDescendantByKind(SyntaxKind.CallExpression)\n\tif (!callExpression) return null\n\n\tconst firstArg = callExpression.getArguments()[0]\n\tif (!firstArg) return null\n\n\tconst argType = firstArg.getType()\n\tif (argType.isStringLiteral()) {\n\t\treturn argType.getLiteralValue() as string\n\t}\n\n\treturn null\n}\n\nexport const getValuesOfObjectLiteral = (objectLiteralNode: Node<ts.ObjectLiteralExpression>) => {\n\tconst syntaxListNode = objectLiteralNode.getFirstDescendantByKind(SyntaxKind.SyntaxList)!\n\tconst assignmentNodes = syntaxListNode.getChildrenOfKind(SyntaxKind.PropertyAssignment)!\n\n\tconst properties = assignmentNodes.map((node) => {\n\t\tconst identifierNode = node.getFirstDescendantByKind(SyntaxKind.Identifier)!\n\t\tconst identifierName = identifierNode.getText()\n\n\t\tconst assignmentValueNode = node.getLastChild()!\n\t\tconst targetNode = findNodeImplementation(assignmentValueNode)\n\t\tconst value = getLiteralValueOfNode(targetNode)\n\n\t\treturn {\n\t\t\tidentifier: identifierName,\n\t\t\tvalue,\n\t\t}\n\t})\n\n\treturn properties || []\n}\n"],"names":["implementationCache","nodeShapeCache","typeShapeCache","findNodeImplementation","node","cached","SyntaxKind","implementationNode","assignmentValueNode","result","definitionNode","findPropertyAssignmentValueNode","identifierChildren","child","getTypeReferenceShape","firstChild","getRecursiveNodeShape","nodeOrReference","computeRecursiveNodeShape","typeName","OpenApiManager","literalNode","typeLiteralNode","propNode","identifier","valueNode","questionMarkToken","typeReferenceNode","lastChild","getProperTypeShape","unionTypeNode","typeQueryNode","qualifiedNameNode","callExpressionNode","awaitExpressionNode","asExpressionNode","fileName","Logger","getShapeOfValidatorLiteral","objectLiteralNode","identifierNode","identifierName","innerLiteralNode","getValidatorPropertyShape","getValidatorPropertyOptionality","getValidatorPropertyStringValue","isZodCallExpression","callExpression","getZodCallShape","returnType","objectLiteral","syntaxList","prop","argNode","receiverCall","typeArgs","shapes","innerCallExpression","inlineValidatorAsExpression","typeReference","childTypeReferenceNode","typeNode","childCallExpressionNode","callExpressionArgument","thingyNode","parsePropertyAssignment","importTypeNode","indexOfGreaterThanToken","targetSyntaxList","intersectionType","validatorType","syntaxListNode","literalExpression","name","targetChild","c","value","targetValue","getValuesOfObjectLiteral","intersectionTypeNode","t","v","propertySignatureNode","isPromise","type","symbol","args","typeOrPromise","atLocation","stack","previousType","cacheKey","computeProperTypeShape","nextStack","arrayElementType","arrayBase","base","typeSymbolName","bufferLikeTypes","valueType","elementType","targetType","valueDeclaration","isOptional","shape","val","dedupedShapes","index","arr","dup","dupIndex","isNullable","total","current","getLiteralValueOfNode","resolveEndpointPath","firstArg","argType","targetNode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nodeParsers.cjs","sources":["../../../src/openapi/analyzerModule/nodeParsers.ts"],"sourcesContent":["import {\n\tNode,\n\tPropertyAccessExpression,\n\tPropertyAssignment,\n\tPropertySignature,\n\tShorthandPropertyAssignment,\n\tSyntaxKind,\n\tts,\n\tType,\n\tTypeReferenceNode,\n} from 'ts-morph'\n\nimport { Logger } from '../../utils/logger'\nimport { OpenApiManager } from '../manager/OpenApiManager'\nimport { ShapeOfProperty, ShapeOfType, ShapeOfUnionEntry } from './types'\n\nconst implementationCache = new WeakMap<Node, Node>()\nconst nodeShapeCache = new WeakMap<Node, ShapeOfType['shape']>()\nconst typeShapeCache = new WeakMap<object, ShapeOfType['shape']>()\n\nexport const findNodeImplementation = (node: Node): Node => {\n\tconst cached = implementationCache.get(node)\n\tif (cached) {\n\t\treturn cached\n\t}\n\n\tif (node.getKind() === SyntaxKind.Identifier) {\n\t\tconst implementationNode = node.asKind(SyntaxKind.Identifier)!.getImplementations()[0]?.getNode()\n\t\tif (implementationNode) {\n\t\t\tconst implementationParentNode = implementationNode.getParent()!\n\t\t\tconst assignmentValueNode = implementationParentNode.getLastChild()!\n\t\t\tif (assignmentValueNode === node) {\n\t\t\t\tthrow new Error('Recursive implementation found')\n\t\t\t}\n\t\t\tconst result = findNodeImplementation(assignmentValueNode)\n\t\t\timplementationCache.set(node, result)\n\t\t\treturn result\n\t\t}\n\n\t\tconst definitionNode = node.asKind(SyntaxKind.Identifier)!.getDefinitions()[0]?.getNode()\n\t\tif (definitionNode) {\n\t\t\tconst definitionParentNode = definitionNode.getParent()!\n\t\t\tconst assignmentValueNode = definitionParentNode.getLastChild()!\n\t\t\tif (assignmentValueNode === node) {\n\t\t\t\tthrow new Error('Recursive implementation found')\n\t\t\t}\n\t\t\tconst result = findNodeImplementation(assignmentValueNode)\n\t\t\timplementationCache.set(node, result)\n\t\t\treturn result\n\t\t}\n\t\tthrow new Error('No implementation nor definition available')\n\t}\n\n\timplementationCache.set(node, node)\n\treturn node\n}\n\nexport const findPropertyAssignmentValueNode = (\n\tnode:\n\t\t| PropertyAssignment\n\t\t| TypeReferenceNode\n\t\t| PropertySignature\n\t\t| PropertyAccessExpression\n\t\t| ShorthandPropertyAssignment,\n): Node => {\n\tconst identifierChildren = node.getChildrenOfKind(SyntaxKind.Identifier)\n\tif (identifierChildren.length === 2) {\n\t\treturn findNodeImplementation(identifierChildren[1])\n\t}\n\tconst lastMatchingChild = node.getChildren().reverse()\n\treturn lastMatchingChild.find(\n\t\t(child) =>\n\t\t\tchild.getKind() !== SyntaxKind.GreaterThanToken &&\n\t\t\tchild.getKind() !== SyntaxKind.CommaToken &&\n\t\t\tchild.getKind() !== SyntaxKind.SemicolonToken,\n\t)!\n}\n\nexport const getTypeReferenceShape = (node: TypeReferenceNode): ShapeOfType['shape'] => {\n\tconst firstChild = node.getFirstChildByKind(SyntaxKind.SyntaxList)!\n\tif (firstChild.isKind(SyntaxKind.SyntaxList)) {\n\t\treturn getRecursiveNodeShape(firstChild.getFirstChild()!)\n\t} else {\n\t\treturn getRecursiveNodeShape(firstChild)\n\t}\n}\n\nexport const getRecursiveNodeShape = (nodeOrReference: Node): ShapeOfType['shape'] => {\n\tconst cached = nodeShapeCache.get(nodeOrReference)\n\tif (cached !== undefined) {\n\t\treturn cached\n\t}\n\tconst result = computeRecursiveNodeShape(nodeOrReference)\n\tnodeShapeCache.set(nodeOrReference, result)\n\treturn result\n}\n\nconst computeRecursiveNodeShape = (nodeOrReference: Node): ShapeOfType['shape'] => {\n\tconst typeName = nodeOrReference.getSymbol()?.getName()\n\tif (typeName && OpenApiManager.getInstance().hasExposedModel(typeName)) {\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'ref',\n\t\t\t\tshape: typeName,\n\t\t\t\toptional: false,\n\t\t\t},\n\t\t]\n\t}\n\n\tconst node = findNodeImplementation(nodeOrReference)\n\n\t// Undefined\n\tconst undefinedNode = node.asKind(SyntaxKind.UndefinedKeyword)\n\tif (undefinedNode) {\n\t\treturn 'undefined'\n\t}\n\n\t// Literal type\n\tconst literalNode = node.asKind(SyntaxKind.LiteralType)\n\tif (literalNode) {\n\t\tif (literalNode.getFirstChildByKind(SyntaxKind.TrueKeyword)) {\n\t\t\treturn 'true'\n\t\t}\n\t\tif (literalNode.getFirstChildByKind(SyntaxKind.FalseKeyword)) {\n\t\t\treturn 'false'\n\t\t}\n\t}\n\n\t// Boolean literal\n\tconst booleanLiteralNode =\n\t\tnode.asKind(SyntaxKind.BooleanKeyword) ||\n\t\tnode.asKind(SyntaxKind.TrueKeyword) ||\n\t\tnode.asKind(SyntaxKind.FalseKeyword)\n\tif (booleanLiteralNode) {\n\t\treturn 'boolean'\n\t}\n\n\t// String literal\n\tconst stringLiteralNode = node.asKind(SyntaxKind.StringKeyword) || node.asKind(SyntaxKind.StringLiteral)\n\tif (stringLiteralNode) {\n\t\treturn 'string'\n\t}\n\n\t// Number literal\n\tconst numberLiteralNode = node.asKind(SyntaxKind.NumberKeyword) || node.asKind(SyntaxKind.NumericLiteral)\n\tif (numberLiteralNode) {\n\t\treturn 'number'\n\t}\n\n\t// BigInt literal\n\tconst bigIntNode = node.asKind(SyntaxKind.BigIntKeyword) || node.asKind(SyntaxKind.BigIntLiteral)\n\tif (bigIntNode) {\n\t\treturn 'bigint'\n\t}\n\n\t// Type literal\n\tconst typeLiteralNode = node.asKind(SyntaxKind.TypeLiteral)\n\tif (typeLiteralNode) {\n\t\tconst properties = typeLiteralNode\n\t\t\t.getFirstChildByKind(SyntaxKind.SyntaxList)!\n\t\t\t.getChildrenOfKind(SyntaxKind.PropertySignature)\n\n\t\tconst propertyShapes = properties.map((propNode) => {\n\t\t\tconst identifier = propNode.getFirstChildByKind(SyntaxKind.Identifier)!\n\t\t\tconst valueNode = findPropertyAssignmentValueNode(propNode)\n\t\t\tconst questionMarkToken = identifier.getNextSiblingIfKind(SyntaxKind.QuestionToken)\n\t\t\treturn {\n\t\t\t\trole: 'property' as const,\n\t\t\t\tidentifier: identifier.getText(),\n\t\t\t\tshape: getRecursiveNodeShape(valueNode),\n\t\t\t\toptional: valueNode.getType().isNullable() || !!questionMarkToken,\n\t\t\t}\n\t\t})\n\t\treturn propertyShapes\n\t}\n\n\t// Type reference\n\tconst typeReferenceNode = node.asKind(SyntaxKind.TypeReference)\n\tif (typeReferenceNode) {\n\t\treturn getRecursiveNodeShape(typeReferenceNode.getFirstChild()!)\n\t}\n\n\t// Property access expression\n\tconst propertyAccessNode = node.asKind(SyntaxKind.PropertyAccessExpression)\n\tif (propertyAccessNode) {\n\t\tconst lastChild = findNodeImplementation(node.getLastChild()!)\n\t\treturn getProperTypeShape(lastChild.asKind(SyntaxKind.CallExpression)!.getReturnType(), lastChild)\n\t}\n\n\t// Union type\n\tconst unionTypeNode = node.asKind(SyntaxKind.UnionType)\n\tif (unionTypeNode) {\n\t\treturn getProperTypeShape(unionTypeNode.getType(), node)\n\t}\n\n\t// Typeof query\n\tconst typeQueryNode = node.asKind(SyntaxKind.TypeQuery)\n\tif (typeQueryNode) {\n\t\treturn getRecursiveNodeShape(typeQueryNode.getLastChild()!)\n\t}\n\n\t// Qualified name\n\tconst qualifiedNameNode = node.asKind(SyntaxKind.QualifiedName)\n\tif (qualifiedNameNode) {\n\t\treturn getRecursiveNodeShape(qualifiedNameNode.getLastChild()!)\n\t}\n\n\t// Call expression\n\tconst callExpressionNode = node.asKind(SyntaxKind.CallExpression)\n\tif (callExpressionNode) {\n\t\treturn getProperTypeShape(callExpressionNode.getReturnType(), callExpressionNode)\n\t}\n\n\t// Await expression\n\tconst awaitExpressionNode = node.asKind(SyntaxKind.AwaitExpression)\n\tif (awaitExpressionNode) {\n\t\treturn getRecursiveNodeShape(awaitExpressionNode.getChildAtIndex(1)!)\n\t}\n\n\t// 'As' Expression\n\tconst asExpressionNode = node.asKind(SyntaxKind.AsExpression)\n\tif (asExpressionNode) {\n\t\treturn getRecursiveNodeShape(asExpressionNode.getChildAtIndex(2)!)\n\t}\n\n\t// TODO\n\tconst fileName = node.getSourceFile().getFilePath().split('/').pop()\n\tLogger.warn(`[${fileName}] Unknown node type: ${node.getKindName()}`)\n\treturn 'unknown_1'\n}\n\nexport const getShapeOfValidatorLiteral = (\n\tobjectLiteralNode: Node<ts.ObjectLiteralExpression>,\n): (ShapeOfProperty & { description: string; errorMessage: string })[] => {\n\tconst syntaxListNode = objectLiteralNode.getFirstDescendantByKind(SyntaxKind.SyntaxList)!\n\tconst assignmentNodes = syntaxListNode.getChildrenOfKind(SyntaxKind.PropertyAssignment)!\n\n\tconst properties = assignmentNodes.map((node) => {\n\t\tconst identifierNode = node.getFirstChild()!\n\t\tconst identifierName = (() => {\n\t\t\tif (identifierNode.isKind(SyntaxKind.Identifier)) {\n\t\t\t\treturn identifierNode.getText()\n\t\t\t}\n\t\t\tif (identifierNode.isKind(SyntaxKind.StringLiteral)) {\n\t\t\t\treturn identifierNode.getLiteralText()\n\t\t\t}\n\t\t\tconst fileName = node.getSourceFile().getFilePath().split('/').pop()\n\t\t\tLogger.warn(`[${fileName}] Unknown identifier name: ${identifierNode.getText()}`)\n\t\t\treturn 'unknown_30'\n\t\t})()\n\n\t\tconst assignmentValueNode = node.getLastChild()!\n\t\tconst innerLiteralNode = findNodeImplementation(assignmentValueNode)\n\n\t\treturn {\n\t\t\trole: 'property' as const,\n\t\t\tidentifier: identifierName,\n\t\t\tshape: getValidatorPropertyShape(innerLiteralNode),\n\t\t\toptional: getValidatorPropertyOptionality(innerLiteralNode),\n\t\t\tdescription: getValidatorPropertyStringValue(innerLiteralNode, 'description'),\n\t\t\terrorMessage: getValidatorPropertyStringValue(innerLiteralNode, 'errorMessage'),\n\t\t}\n\t})\n\n\treturn properties || []\n}\n\nconst isZodCallExpression = (node: Node): boolean => {\n\tconst callExpression = node.asKind(SyntaxKind.CallExpression)\n\tif (!callExpression) {\n\t\treturn false\n\t}\n\tconst returnType = callExpression.getReturnType()\n\tconst typeName = returnType.getSymbol()?.getName() ?? ''\n\treturn typeName.startsWith('Zod')\n}\n\nconst getZodCallShape = (node: Node): ShapeOfType['shape'] => {\n\tconst callExpression = node.asKind(SyntaxKind.CallExpression)!\n\tconst returnType = callExpression.getReturnType()\n\tconst typeName = returnType.getSymbol()?.getName() ?? ''\n\n\tif (typeName === 'ZodNumber') {\n\t\treturn 'number'\n\t}\n\tif (typeName === 'ZodString') {\n\t\treturn 'string'\n\t}\n\tif (typeName === 'ZodBoolean') {\n\t\treturn 'boolean'\n\t}\n\tif (typeName === 'ZodBigInt') {\n\t\treturn 'bigint'\n\t}\n\n\tif (typeName === 'ZodObject') {\n\t\tconst argNode = callExpression.getFirstChildByKind(SyntaxKind.SyntaxList)?.getFirstChild()\n\t\tconst objectLiteral = argNode?.asKind(SyntaxKind.ObjectLiteralExpression)\n\t\tif (!objectLiteral) {\n\t\t\treturn 'unknown_zod_object'\n\t\t}\n\t\tconst syntaxList = objectLiteral.getFirstChildByKind(SyntaxKind.SyntaxList)\n\t\tif (!syntaxList) {\n\t\t\treturn []\n\t\t}\n\t\tconst properties = syntaxList.getChildrenOfKind(SyntaxKind.PropertyAssignment)\n\t\treturn properties.map((prop) => {\n\t\t\tconst identifier = prop.getFirstChildByKind(SyntaxKind.Identifier)!.getText()\n\t\t\tconst valueNode = prop.getLastChild()!\n\t\t\treturn {\n\t\t\t\trole: 'property' as const,\n\t\t\t\tidentifier,\n\t\t\t\tshape: isZodCallExpression(valueNode)\n\t\t\t\t\t? getZodCallShape(valueNode)\n\t\t\t\t\t: getValidatorPropertyShape(valueNode),\n\t\t\t\toptional: false,\n\t\t\t}\n\t\t})\n\t}\n\n\tif (typeName === 'ZodArray') {\n\t\tconst argNode = callExpression.getFirstChildByKind(SyntaxKind.SyntaxList)?.getFirstChild()\n\t\tif (argNode) {\n\t\t\tconst elementShape = isZodCallExpression(argNode)\n\t\t\t\t? getZodCallShape(argNode)\n\t\t\t\t: getValidatorPropertyShape(argNode)\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\trole: 'array' as const,\n\t\t\t\t\tshape: elementShape,\n\t\t\t\t\toptional: false,\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\t\t// Handle chained form: z.string().array()\n\t\tconst propertyAccess = callExpression.getFirstChildByKind(SyntaxKind.PropertyAccessExpression)\n\t\tconst receiverCall = propertyAccess?.getFirstChildByKind(SyntaxKind.CallExpression)\n\t\tif (receiverCall && isZodCallExpression(receiverCall)) {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\trole: 'array' as const,\n\t\t\t\t\tshape: getZodCallShape(receiverCall),\n\t\t\t\t\toptional: false,\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\t\treturn 'unknown_zod_array'\n\t}\n\n\tif (typeName === 'ZodEnum') {\n\t\tconst typeArgs = returnType.getTypeArguments()\n\t\tif (typeArgs.length > 0) {\n\t\t\tconst enumType = typeArgs[0]\n\t\t\tconst properties = enumType.getProperties()\n\t\t\tconst shapes: ShapeOfUnionEntry[] = properties.map((prop) => ({\n\t\t\t\trole: 'union_entry' as const,\n\t\t\t\tshape: getProperTypeShape(prop.getTypeAtLocation(callExpression), callExpression, []),\n\t\t\t\toptional: false,\n\t\t\t}))\n\t\t\tif (shapes.length === 1) {\n\t\t\t\treturn shapes[0].shape\n\t\t\t}\n\t\t\tif (shapes.length > 1) {\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\trole: 'union' as const,\n\t\t\t\t\t\tshape: shapes,\n\t\t\t\t\t\toptional: false,\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t}\n\t\t}\n\t\treturn 'unknown_zod_enum'\n\t}\n\n\tif (typeName === 'ZodOptional') {\n\t\tconst innerCallExpression = callExpression\n\t\t\t.getFirstChildByKind(SyntaxKind.PropertyAccessExpression)\n\t\t\t?.getFirstChildByKind(SyntaxKind.CallExpression)\n\t\tif (innerCallExpression && isZodCallExpression(innerCallExpression)) {\n\t\t\treturn getZodCallShape(innerCallExpression)\n\t\t}\n\t\treturn 'unknown_zod_optional'\n\t}\n\n\tconst fileName = node.getSourceFile().getFilePath().split('/').pop()\n\tLogger.warn(`[${fileName}] Unknown zod type: ${typeName}`)\n\treturn 'unknown_zod'\n}\n\nexport const getValidatorPropertyShape = (innerLiteralNode: Node): ShapeOfType['shape'] => {\n\t// Zod validator (e.g. z.number(), z.string(), z.object({...}), z.array(...))\n\tif (isZodCallExpression(innerLiteralNode)) {\n\t\treturn getZodCallShape(innerLiteralNode)\n\t}\n\n\t// Inline definition with `as Validator<...>` clause\n\tconst inlineValidatorAsExpression = innerLiteralNode\n\t\t.getParent()!\n\t\t.getFirstChildByKind(SyntaxKind.AsExpression)\n\tif (inlineValidatorAsExpression) {\n\t\tconst typeReference = inlineValidatorAsExpression.getLastChildByKind(SyntaxKind.TypeReference)!\n\t\treturn getTypeReferenceShape(typeReference)\n\t}\n\n\t// Variable with `: Validator<...>` clause\n\tconst childTypeReferenceNode = innerLiteralNode.getParent()!.getFirstChildByKind(SyntaxKind.TypeReference)\n\tif (childTypeReferenceNode) {\n\t\treturn getTypeReferenceShape(childTypeReferenceNode)\n\t}\n\n\t// `RequiredParam<...>` inline call expression\n\tif (innerLiteralNode.getParent()!.getChildrenOfKind(SyntaxKind.SyntaxList).length >= 2) {\n\t\tconst typeNode = innerLiteralNode\n\t\t\t.getParent()!\n\t\t\t.getFirstChildByKind(SyntaxKind.SyntaxList)!\n\t\t\t.getFirstChild()!\n\t\treturn getRecursiveNodeShape(typeNode)\n\t}\n\n\t// `RequestParam | RequiredParam | OptionalParam` call expression\n\tconst childCallExpressionNode = innerLiteralNode.getParent()!.getFirstChildByKind(SyntaxKind.CallExpression)\n\tif (childCallExpressionNode) {\n\t\tconst callExpressionArgument = findNodeImplementation(\n\t\t\tchildCallExpressionNode.getFirstChildByKind(SyntaxKind.SyntaxList)!.getFirstChild()!,\n\t\t)\n\n\t\t// Param is a type reference\n\t\tconst typeReferenceNode = callExpressionArgument\n\t\t\t.getParent()!\n\t\t\t.getFirstChildByKind(SyntaxKind.TypeReference)!\n\t\tif (typeReferenceNode) {\n\t\t\treturn getProperTypeShape(typeReferenceNode.getType(), typeReferenceNode, [])\n\t\t}\n\n\t\tconst thingyNode = callExpressionArgument\n\t\t\t.getParent()!\n\t\t\t.getFirstChildByKind(SyntaxKind.ObjectLiteralExpression)!\n\t\tif (thingyNode) {\n\t\t\treturn getValidatorPropertyShape(thingyNode)\n\t\t}\n\n\t\tif (callExpressionArgument.getKind() === SyntaxKind.CallExpression) {\n\t\t\treturn getValidatorPropertyShape(callExpressionArgument)\n\t\t}\n\n\t\tif (callExpressionArgument.getKind() === SyntaxKind.IntersectionType) {\n\t\t\treturn getValidatorPropertyShape(callExpressionArgument)\n\t\t}\n\n\t\tconst fileName = innerLiteralNode.getSourceFile().getFilePath().split('/').pop()\n\t\tLogger.warn(`[${fileName}] Unknown call expression argument: ${callExpressionArgument.getKindName()}`)\n\t\treturn 'unknown_3'\n\t}\n\n\t// Attempting to infer type from `parse` function\n\tconst innerNodePropertyAssignments = innerLiteralNode\n\t\t.getFirstChildByKind(SyntaxKind.SyntaxList)!\n\t\t.getChildrenOfKind(SyntaxKind.PropertyAssignment)\n\tconst parsePropertyAssignment = innerNodePropertyAssignments.find((prop) => {\n\t\treturn prop.getFirstChildByKind(SyntaxKind.Identifier)?.getText() === 'parse'\n\t})\n\tif (parsePropertyAssignment) {\n\t\tconst returnType = findPropertyAssignmentValueNode(parsePropertyAssignment)\n\t\t\t.asKind(SyntaxKind.ArrowFunction)!\n\t\t\t.getReturnType()\n\t\treturn getProperTypeShape(returnType, parsePropertyAssignment)\n\t}\n\n\t// Import statement\n\tconst importTypeNode = innerLiteralNode\n\t\t.getFirstChildByKind(SyntaxKind.SyntaxList)\n\t\t?.getFirstChildByKind(SyntaxKind.ImportType)\n\tif (importTypeNode) {\n\t\tconst indexOfGreaterThanToken = importTypeNode\n\t\t\t.getLastChildByKind(SyntaxKind.GreaterThanToken)!\n\t\t\t.getChildIndex()\n\t\tconst targetSyntaxList = importTypeNode.getChildAtIndex(indexOfGreaterThanToken - 1)\n\t\treturn getRecursiveNodeShape(targetSyntaxList.getFirstChild()!)\n\t}\n\n\t// Intersection type with Validator\n\tconst intersectionType = innerLiteralNode.isKind(SyntaxKind.IntersectionType)\n\t\t? innerLiteralNode\n\t\t: innerLiteralNode.getParent()?.isKind(SyntaxKind.VariableDeclaration)\n\t\t\t? innerLiteralNode.getParent()?.getFirstChildByKind(SyntaxKind.IntersectionType)\n\t\t\t: null\n\n\tif (intersectionType) {\n\t\tconst validatorType = intersectionType.getFirstChildByKind(SyntaxKind.TypeReference)\n\t\tif (validatorType) {\n\t\t\treturn getTypeReferenceShape(validatorType)\n\t\t}\n\t}\n\n\tconst fileName = innerLiteralNode.getSourceFile().getFilePath().split('/').pop()\n\tLogger.warn(`[${fileName}] Unknown import type node`)\n\n\treturn 'unknown_2'\n}\n\nexport const getValidatorPropertyOptionality = (node: Node): boolean => {\n\tif (isZodCallExpression(node)) {\n\t\tconst callExpression = node.asKind(SyntaxKind.CallExpression)!\n\t\tconst returnType = callExpression.getReturnType()\n\t\tconst typeName = returnType.getSymbol()?.getName() ?? ''\n\t\tif (typeName === 'ZodOptional') {\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\n\tconst callExpressionNode = node.asKind(SyntaxKind.CallExpression)\n\tif (callExpressionNode) {\n\t\tconst identifierNode = callExpressionNode.getFirstChildByKind(SyntaxKind.Identifier)\n\t\tif (identifierNode?.getText() === 'OptionalParam') {\n\t\t\treturn true\n\t\t} else if (identifierNode?.getText() === 'RequiredParam') {\n\t\t\treturn false\n\t\t}\n\n\t\tconst syntaxListNode = callExpressionNode.getFirstChildByKind(SyntaxKind.SyntaxList)!\n\t\tconst literalExpression = findNodeImplementation(syntaxListNode.getFirstChild()!)\n\t\treturn getValidatorPropertyOptionality(literalExpression)\n\t}\n\n\tconst syntaxListNode = node.getFirstDescendantByKind(SyntaxKind.SyntaxList)!\n\tconst assignmentNodes = syntaxListNode.getChildrenOfKind(SyntaxKind.PropertyAssignment)!\n\n\treturn assignmentNodes.some((node) => {\n\t\tconst identifierNode = node.getFirstDescendantByKind(SyntaxKind.Identifier)!\n\t\tconst identifierName = identifierNode.getText()\n\n\t\tif (identifierName === 'optional') {\n\t\t\tconst value = findPropertyAssignmentValueNode(node)\n\t\t\treturn value.getKind() === SyntaxKind.TrueKeyword\n\t\t}\n\t\treturn false\n\t})\n}\n\nexport const getValidatorPropertyStringValue = (\n\tnodeOrReference: Node,\n\tname: 'description' | 'errorMessage',\n): string => {\n\tif (isZodCallExpression(nodeOrReference)) {\n\t\treturn ''\n\t}\n\n\tconst node = findNodeImplementation(nodeOrReference)\n\n\tconst callExpressionNode = node.asKind(SyntaxKind.CallExpression)\n\tif (callExpressionNode) {\n\t\tconst targetChild = callExpressionNode.getLastChildByKind(SyntaxKind.SyntaxList)!\n\t\treturn getValidatorPropertyStringValue(targetChild, name)\n\t}\n\n\tconst syntaxListNode = node.asKind(SyntaxKind.SyntaxList)\n\tif (syntaxListNode) {\n\t\tconst children = syntaxListNode.getChildren().map((c) => getValidatorPropertyStringValue(c, name))\n\t\treturn children.find((value) => !!value && value !== 'unknown_25') || ''\n\t}\n\n\tconst objectLiteralNode = node.asKind(SyntaxKind.ObjectLiteralExpression)\n\tif (objectLiteralNode) {\n\t\tconst values = getValuesOfObjectLiteral(objectLiteralNode)\n\t\tconst targetValue = values.find((value) => value.identifier === name)\n\t\tif (!targetValue) {\n\t\t\treturn ''\n\t\t}\n\t\tif (Array.isArray(targetValue.value)) {\n\t\t\treturn 'array'\n\t\t}\n\t\treturn targetValue.value || ''\n\t}\n\n\tconst intersectionTypeNode = node.asKind(SyntaxKind.IntersectionType)\n\tif (intersectionTypeNode) {\n\t\treturn (\n\t\t\tintersectionTypeNode\n\t\t\t\t.getTypeNodes()\n\t\t\t\t.flatMap((t) => getValidatorPropertyStringValue(t, name))\n\t\t\t\t.filter((v) => !!v && v !== 'unknown_25')[0] || 'unknown_27'\n\t\t)\n\t}\n\n\tconst typeLiteralNode = node.asKind(SyntaxKind.TypeLiteral)\n\tif (typeLiteralNode) {\n\t\treturn getValidatorPropertyStringValue(typeLiteralNode.getFirstChildByKind(SyntaxKind.SyntaxList)!, name)\n\t}\n\n\tconst propertySignatureNode = node.asKind(SyntaxKind.PropertySignature)\n\tif (propertySignatureNode) {\n\t\tconst identifier = node.getFirstDescendantByKind(SyntaxKind.Identifier)!\n\t\tif (identifier.getText() === name) {\n\t\t\tconst targetNode = findPropertyAssignmentValueNode(propertySignatureNode).getFirstDescendantByKind(\n\t\t\t\tSyntaxKind.StringLiteral,\n\t\t\t)!\n\t\t\treturn targetNode.getLiteralText()\n\t\t}\n\t}\n\n\tconst fileName = node.getSourceFile().getFilePath().split('/').pop()\n\tLogger.dev(`[${fileName}] Unknown property string value node ${node.getKindName()}`)\n\treturn 'unknown_25'\n}\n\nconst isPromise = (type: Type) => {\n\tconst symbol = type.getSymbol()\n\tif (!type.isObject() || !symbol) {\n\t\treturn false\n\t}\n\tconst args = type.getTypeArguments()\n\treturn symbol.getName() === 'Promise' && args.length === 1\n}\n\nexport const getProperTypeShape = (\n\ttypeOrPromise: Type,\n\tatLocation: Node,\n\tstack: Type[] = [],\n): ShapeOfType['shape'] => {\n\tconst typeName = typeOrPromise.getAliasSymbol()?.getName()\n\tif (typeName && OpenApiManager.getInstance().hasExposedModel(typeName)) {\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'ref',\n\t\t\t\tshape: typeName,\n\t\t\t\toptional: false,\n\t\t\t},\n\t\t]\n\t}\n\n\tconst type = isPromise(typeOrPromise) ? typeOrPromise.getTypeArguments()[0] : typeOrPromise\n\n\tif (stack.some((previousType) => previousType === type)) {\n\t\treturn 'circular'\n\t}\n\n\tconst cacheKey = type.compilerType\n\tconst cached = typeShapeCache.get(cacheKey)\n\tif (cached !== undefined) {\n\t\treturn cached\n\t}\n\tconst result = computeProperTypeShape(type, atLocation, stack)\n\ttypeShapeCache.set(cacheKey, result)\n\treturn result\n}\n\nconst computeProperTypeShape = (type: Type, atLocation: Node, stack: Type[]): ShapeOfType['shape'] => {\n\tconst nextStack = stack.concat(type)\n\n\tif (type.getText() === 'void') {\n\t\treturn 'void'\n\t}\n\n\tif (type.isAny()) {\n\t\treturn 'any'\n\t}\n\n\tif (type.isUnknown()) {\n\t\treturn 'unknown'\n\t}\n\n\tif (type.isNull()) {\n\t\treturn 'null'\n\t}\n\n\tif (type.isUndefined()) {\n\t\treturn 'undefined'\n\t}\n\n\tif (type.isBoolean() || type.isBooleanLiteral()) {\n\t\treturn 'boolean'\n\t}\n\n\tif (type.isStringLiteral()) {\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'literal_string' as const,\n\t\t\t\tshape: String(type.getLiteralValue()!),\n\t\t\t\toptional: false,\n\t\t\t},\n\t\t]\n\t}\n\n\tif (type.isNumberLiteral()) {\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'literal_number' as const,\n\t\t\t\tshape: String(type.getLiteralValue()!),\n\t\t\t\toptional: false,\n\t\t\t},\n\t\t]\n\t}\n\n\tif (type.isString() || type.isTemplateLiteral()) {\n\t\treturn 'string'\n\t}\n\n\tif (type.isNumber()) {\n\t\treturn 'number'\n\t}\n\n\tif (type.getText() === 'bigint') {\n\t\treturn 'bigint'\n\t}\n\n\tif (type.isTuple()) {\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'tuple' as const,\n\t\t\t\tshape: type.getTupleElements().map((t) => ({\n\t\t\t\t\trole: 'tuple_entry' as const,\n\t\t\t\t\tshape: getProperTypeShape(t, atLocation, nextStack),\n\t\t\t\t\toptional: false,\n\t\t\t\t})),\n\t\t\t\toptional: false,\n\t\t\t},\n\t\t]\n\t}\n\n\tif (type.isArray()) {\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'array' as const,\n\t\t\t\tshape: getProperTypeShape(type.getArrayElementType()!, atLocation, nextStack),\n\t\t\t\toptional: false,\n\t\t\t},\n\t\t]\n\t}\n\n\t// Handles `interface Foo extends Array<T>` (e.g. Prisma's JsonArray)\n\t// which fails type.isArray() but is still array-like\n\tif (type.isObject()) {\n\t\tconst arrayElementType = type.getNumberIndexType()\n\t\tconst baseTypes = type.getBaseTypes()\n\t\tconst arrayBase = baseTypes?.find((base) => base.isArray())\n\t\tif (arrayBase) {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\trole: 'array' as const,\n\t\t\t\t\tshape: getProperTypeShape(\n\t\t\t\t\t\tarrayBase.getArrayElementType() ?? arrayElementType!,\n\t\t\t\t\t\tatLocation,\n\t\t\t\t\t\tnextStack,\n\t\t\t\t\t),\n\t\t\t\t\toptional: false,\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\t}\n\n\tconst typeSymbolName = type.getSymbol()?.getName()\n\n\tconst bufferLikeTypes = new Set([\n\t\t'Buffer',\n\t\t'Uint8Array',\n\t\t'Int8Array',\n\t\t'Uint8ClampedArray',\n\t\t'Int16Array',\n\t\t'Uint16Array',\n\t\t'Int32Array',\n\t\t'Uint32Array',\n\t\t'Float32Array',\n\t\t'Float64Array',\n\t\t'BigInt64Array',\n\t\t'BigUint64Array',\n\t\t'ArrayBuffer',\n\t\t'SharedArrayBuffer',\n\t\t'ReadableStream',\n\t])\n\n\tif (type.isObject() && typeSymbolName && bufferLikeTypes.has(typeSymbolName)) {\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'buffer' as const,\n\t\t\t\tshape: 'buffer',\n\t\t\t\toptional: false,\n\t\t\t},\n\t\t]\n\t}\n\n\tif (type.isObject() && typeSymbolName === 'RegExp') {\n\t\treturn 'string'\n\t}\n\n\tif (type.isObject() && typeSymbolName === 'Map') {\n\t\tconst typeArgs = type.getTypeArguments()\n\t\tconst valueType = typeArgs[1]\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'record' as const,\n\t\t\t\tshape: valueType ? getProperTypeShape(valueType, atLocation, nextStack) : 'unknown',\n\t\t\t\toptional: false,\n\t\t\t},\n\t\t]\n\t}\n\n\tif (type.isObject() && typeSymbolName === 'Set') {\n\t\tconst typeArgs = type.getTypeArguments()\n\t\tconst elementType = typeArgs[0]\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'array' as const,\n\t\t\t\tshape: elementType ? getProperTypeShape(elementType, atLocation, nextStack) : 'unknown',\n\t\t\t\toptional: false,\n\t\t\t},\n\t\t]\n\t}\n\n\tif (type.isObject() && type.getProperties().length === 0) {\n\t\tconst targetType = type.getAliasTypeArguments()[1] ?? type.getStringIndexType()\n\t\tif (targetType) {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\trole: 'record' as const,\n\t\t\t\t\tshape: getProperTypeShape(targetType, atLocation, nextStack),\n\t\t\t\t\toptional: false,\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\t}\n\n\tif (type.isObject()) {\n\t\tif (typeSymbolName === 'Date' || type.getText() === 'Date') {\n\t\t\treturn 'Date'\n\t\t}\n\t\treturn type\n\t\t\t.getProperties()\n\t\t\t.map((prop) => {\n\t\t\t\tconst valueDeclaration = prop.getValueDeclaration() || prop.getDeclarations()[0]!\n\t\t\t\tconst shape = getProperTypeShape(prop.getTypeAtLocation(atLocation), atLocation, nextStack)\n\t\t\t\tif (!valueDeclaration) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: 'property' as const,\n\t\t\t\t\t\tidentifier: prop.getName(),\n\t\t\t\t\t\tshape,\n\t\t\t\t\t\toptional: false,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst valueDeclarationNode =\n\t\t\t\t\tvalueDeclaration.asKind(SyntaxKind.PropertySignature) ||\n\t\t\t\t\tvalueDeclaration.asKind(SyntaxKind.PropertyAssignment) ||\n\t\t\t\t\tvalueDeclaration.asKind(SyntaxKind.ShorthandPropertyAssignment)\n\n\t\t\t\tif (!valueDeclarationNode) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\trole: 'property' as const,\n\t\t\t\t\t\tidentifier: prop.getName(),\n\t\t\t\t\t\tshape,\n\t\t\t\t\t\toptional: false,\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst isOptional = prop.getTypeAtLocation(atLocation).isNullable()\n\n\t\t\t\treturn {\n\t\t\t\t\trole: 'property' as const,\n\t\t\t\t\tidentifier: prop.getName(),\n\t\t\t\t\tshape,\n\t\t\t\t\toptional: isOptional,\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter((val) => val.shape !== 'undefined')\n\t}\n\n\tif (type.isUnion()) {\n\t\tconst unfilteredShapes: ShapeOfUnionEntry[] = type.getUnionTypes().map((type) => ({\n\t\t\trole: 'union_entry',\n\t\t\tshape: getProperTypeShape(type, atLocation, nextStack),\n\t\t\toptional: false,\n\t\t}))\n\n\t\tconst dedupedShapes = unfilteredShapes.filter(\n\t\t\t(type, index, arr) => !arr.find((dup, dupIndex) => dup.shape === type.shape && dupIndex > index),\n\t\t)\n\t\tconst isNullable = dedupedShapes.some((shape) => shape.shape === 'undefined')\n\t\tconst shapes = dedupedShapes.filter((shape) => shape.shape !== 'undefined')\n\t\tif (shapes.length === 1) {\n\t\t\treturn shapes[0].shape\n\t\t}\n\t\treturn [\n\t\t\t{\n\t\t\t\trole: 'union',\n\t\t\t\tshape: shapes,\n\t\t\t\toptional: isNullable,\n\t\t\t},\n\t\t]\n\t}\n\n\tif (type.isIntersection()) {\n\t\tconst children = type.getIntersectionTypes()\n\t\tconst shapesOfChildren = children\n\t\t\t.map((child) => getProperTypeShape(child, atLocation, nextStack))\n\t\t\t.filter((shape) => typeof shape !== 'string') as ShapeOfProperty[][]\n\t\treturn shapesOfChildren.reduce<ShapeOfType[]>((total, current) => [...total, ...current], [])\n\t}\n\n\tconst fileName = atLocation.getSourceFile().getFilePath().split('/').pop()\n\tLogger.warn(`[${fileName}] Unknown type shape node ${type.getText()}`)\n\treturn 'unknown_5'\n}\n\nconst getLiteralValueOfNode = (node: Node): string | string[] | unknown[] => {\n\tif (node.isKind(SyntaxKind.Identifier)) {\n\t\treturn getLiteralValueOfNode(findNodeImplementation(node))\n\t} else if (node.isKind(SyntaxKind.StringLiteral)) {\n\t\treturn node.getLiteralValue()\n\t} else if (node.isKind(SyntaxKind.ArrayLiteralExpression)) {\n\t\treturn node.forEachChildAsArray().map((child) => getLiteralValueOfNode(child)) as string[]\n\t} else if (node.isKind(SyntaxKind.PropertyAccessExpression)) {\n\t\treturn getLiteralValueOfNode(findPropertyAssignmentValueNode(node))\n\t} else if (node.isKind(SyntaxKind.ObjectLiteralExpression)) {\n\t\treturn getValuesOfObjectLiteral(node)\n\t}\n\n\tconst fileName = node.getSourceFile().getFilePath().split('/').pop()\n\tLogger.dev(`[${fileName}] Unknown literal value node ${node.getKindName()}`)\n\n\treturn 'unknown_6'\n}\n\nexport const resolveEndpointPath = (node: Node): string | null => {\n\tconst callExpression = node.getFirstDescendantByKind(SyntaxKind.CallExpression)\n\tif (!callExpression) return null\n\n\tconst firstArg = callExpression.getArguments()[0]\n\tif (!firstArg) return null\n\n\tconst argType = firstArg.getType()\n\tif (argType.isStringLiteral()) {\n\t\treturn argType.getLiteralValue() as string\n\t}\n\n\treturn null\n}\n\nexport const getValuesOfObjectLiteral = (objectLiteralNode: Node<ts.ObjectLiteralExpression>) => {\n\tconst syntaxListNode = objectLiteralNode.getFirstDescendantByKind(SyntaxKind.SyntaxList)!\n\tconst assignmentNodes = syntaxListNode.getChildrenOfKind(SyntaxKind.PropertyAssignment)!\n\n\tconst properties = assignmentNodes.map((node) => {\n\t\tconst identifierNode = node.getFirstDescendantByKind(SyntaxKind.Identifier)!\n\t\tconst identifierName = identifierNode.getText()\n\n\t\tconst assignmentValueNode = node.getLastChild()!\n\t\tconst targetNode = findNodeImplementation(assignmentValueNode)\n\t\tconst value = getLiteralValueOfNode(targetNode)\n\n\t\treturn {\n\t\t\tidentifier: identifierName,\n\t\t\tvalue,\n\t\t}\n\t})\n\n\treturn properties || []\n}\n"],"names":["implementationCache","nodeShapeCache","typeShapeCache","findNodeImplementation","node","cached","SyntaxKind","implementationNode","assignmentValueNode","result","definitionNode","findPropertyAssignmentValueNode","identifierChildren","child","getTypeReferenceShape","firstChild","getRecursiveNodeShape","nodeOrReference","computeRecursiveNodeShape","typeName","OpenApiManager","literalNode","typeLiteralNode","propNode","identifier","valueNode","questionMarkToken","typeReferenceNode","lastChild","getProperTypeShape","unionTypeNode","typeQueryNode","qualifiedNameNode","callExpressionNode","awaitExpressionNode","asExpressionNode","fileName","Logger","getShapeOfValidatorLiteral","objectLiteralNode","identifierNode","identifierName","innerLiteralNode","getValidatorPropertyShape","getValidatorPropertyOptionality","getValidatorPropertyStringValue","isZodCallExpression","callExpression","getZodCallShape","returnType","objectLiteral","syntaxList","prop","argNode","receiverCall","typeArgs","shapes","innerCallExpression","inlineValidatorAsExpression","typeReference","childTypeReferenceNode","typeNode","childCallExpressionNode","callExpressionArgument","thingyNode","parsePropertyAssignment","importTypeNode","indexOfGreaterThanToken","targetSyntaxList","intersectionType","validatorType","syntaxListNode","literalExpression","name","targetChild","c","value","targetValue","getValuesOfObjectLiteral","intersectionTypeNode","t","v","propertySignatureNode","isPromise","type","symbol","args","typeOrPromise","atLocation","stack","previousType","cacheKey","computeProperTypeShape","nextStack","arrayElementType","arrayBase","base","typeSymbolName","bufferLikeTypes","valueType","elementType","targetType","valueDeclaration","shape","isOptional","val","dedupedShapes","index","arr","dup","dupIndex","isNullable","total","current","getLiteralValueOfNode","resolveEndpointPath","firstArg","argType","targetNode"],"mappings":"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"}
|
|
@@ -14,9 +14,9 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
14
14
|
const p = f(a);
|
|
15
15
|
return b.set(e, p), p;
|
|
16
16
|
}
|
|
17
|
-
const
|
|
18
|
-
if (
|
|
19
|
-
const a =
|
|
17
|
+
const s = e.asKind(t.Identifier).getDefinitions()[0]?.getNode();
|
|
18
|
+
if (s) {
|
|
19
|
+
const a = s.getParent().getLastChild();
|
|
20
20
|
if (a === e)
|
|
21
21
|
throw new Error("Recursive implementation found");
|
|
22
22
|
const p = f(a);
|
|
@@ -28,7 +28,7 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
28
28
|
}, S = (e) => {
|
|
29
29
|
const n = e.getChildrenOfKind(t.Identifier);
|
|
30
30
|
return n.length === 2 ? f(n[1]) : e.getChildren().reverse().find(
|
|
31
|
-
(
|
|
31
|
+
(s) => s.getKind() !== t.GreaterThanToken && s.getKind() !== t.CommaToken && s.getKind() !== t.SemicolonToken
|
|
32
32
|
);
|
|
33
33
|
}, B = (e) => {
|
|
34
34
|
const n = e.getFirstChildByKind(t.SyntaxList);
|
|
@@ -67,9 +67,9 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
67
67
|
return "number";
|
|
68
68
|
if (i.asKind(t.BigIntKeyword) || i.asKind(t.BigIntLiteral))
|
|
69
69
|
return "bigint";
|
|
70
|
-
const
|
|
71
|
-
if (
|
|
72
|
-
return
|
|
70
|
+
const r = i.asKind(t.TypeLiteral);
|
|
71
|
+
if (r)
|
|
72
|
+
return r.getFirstChildByKind(t.SyntaxList).getChildrenOfKind(t.PropertySignature).map((I) => {
|
|
73
73
|
const k = I.getFirstChildByKind(t.Identifier), v = S(I), j = k.getNextSiblingIfKind(t.QuestionToken);
|
|
74
74
|
return {
|
|
75
75
|
role: "property",
|
|
@@ -82,8 +82,8 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
82
82
|
if (g)
|
|
83
83
|
return y(g.getFirstChild());
|
|
84
84
|
if (i.asKind(t.PropertyAccessExpression)) {
|
|
85
|
-
const
|
|
86
|
-
return c(
|
|
85
|
+
const w = f(i.getLastChild());
|
|
86
|
+
return c(w.asKind(t.CallExpression).getReturnType(), w);
|
|
87
87
|
}
|
|
88
88
|
const h = i.asKind(t.UnionType);
|
|
89
89
|
if (h)
|
|
@@ -111,8 +111,8 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
111
111
|
return a.getText();
|
|
112
112
|
if (a.isKind(t.StringLiteral))
|
|
113
113
|
return a.getLiteralText();
|
|
114
|
-
const
|
|
115
|
-
return m.warn(`[${
|
|
114
|
+
const r = d.getSourceFile().getFilePath().split("/").pop();
|
|
115
|
+
return m.warn(`[${r}] Unknown identifier name: ${a.getText()}`), "unknown_30";
|
|
116
116
|
})(), o = d.getLastChild(), l = f(o);
|
|
117
117
|
return {
|
|
118
118
|
role: "property",
|
|
@@ -126,22 +126,22 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
126
126
|
const n = e.asKind(t.CallExpression);
|
|
127
127
|
return n ? (n.getReturnType().getSymbol()?.getName() ?? "").startsWith("Zod") : !1;
|
|
128
128
|
}, C = (e) => {
|
|
129
|
-
const n = e.asKind(t.CallExpression), i = n.getReturnType(),
|
|
130
|
-
if (
|
|
129
|
+
const n = e.asKind(t.CallExpression), i = n.getReturnType(), s = i.getSymbol()?.getName() ?? "";
|
|
130
|
+
if (s === "ZodNumber")
|
|
131
131
|
return "number";
|
|
132
|
-
if (
|
|
132
|
+
if (s === "ZodString")
|
|
133
133
|
return "string";
|
|
134
|
-
if (
|
|
134
|
+
if (s === "ZodBoolean")
|
|
135
135
|
return "boolean";
|
|
136
|
-
if (
|
|
136
|
+
if (s === "ZodBigInt")
|
|
137
137
|
return "bigint";
|
|
138
|
-
if (
|
|
138
|
+
if (s === "ZodObject") {
|
|
139
139
|
const p = n.getFirstChildByKind(t.SyntaxList)?.getFirstChild()?.asKind(t.ObjectLiteralExpression);
|
|
140
140
|
if (!p)
|
|
141
141
|
return "unknown_zod_object";
|
|
142
142
|
const o = p.getFirstChildByKind(t.SyntaxList);
|
|
143
|
-
return o ? o.getChildrenOfKind(t.PropertyAssignment).map((
|
|
144
|
-
const g =
|
|
143
|
+
return o ? o.getChildrenOfKind(t.PropertyAssignment).map((r) => {
|
|
144
|
+
const g = r.getFirstChildByKind(t.Identifier).getText(), u = r.getLastChild();
|
|
145
145
|
return {
|
|
146
146
|
role: "property",
|
|
147
147
|
identifier: g,
|
|
@@ -150,7 +150,7 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
150
150
|
};
|
|
151
151
|
}) : [];
|
|
152
152
|
}
|
|
153
|
-
if (
|
|
153
|
+
if (s === "ZodArray") {
|
|
154
154
|
const a = n.getFirstChildByKind(t.SyntaxList)?.getFirstChild();
|
|
155
155
|
if (a)
|
|
156
156
|
return [
|
|
@@ -169,12 +169,12 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
169
169
|
}
|
|
170
170
|
] : "unknown_zod_array";
|
|
171
171
|
}
|
|
172
|
-
if (
|
|
172
|
+
if (s === "ZodEnum") {
|
|
173
173
|
const a = i.getTypeArguments();
|
|
174
174
|
if (a.length > 0) {
|
|
175
|
-
const l = a[0].getProperties().map((
|
|
175
|
+
const l = a[0].getProperties().map((r) => ({
|
|
176
176
|
role: "union_entry",
|
|
177
|
-
shape: c(
|
|
177
|
+
shape: c(r.getTypeAtLocation(n), n, []),
|
|
178
178
|
optional: !1
|
|
179
179
|
}));
|
|
180
180
|
if (l.length === 1)
|
|
@@ -190,57 +190,57 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
190
190
|
}
|
|
191
191
|
return "unknown_zod_enum";
|
|
192
192
|
}
|
|
193
|
-
if (
|
|
193
|
+
if (s === "ZodOptional") {
|
|
194
194
|
const a = n.getFirstChildByKind(t.PropertyAccessExpression)?.getFirstChildByKind(t.CallExpression);
|
|
195
195
|
return a && K(a) ? C(a) : "unknown_zod_optional";
|
|
196
196
|
}
|
|
197
197
|
const d = e.getSourceFile().getFilePath().split("/").pop();
|
|
198
|
-
return m.warn(`[${d}] Unknown zod type: ${
|
|
198
|
+
return m.warn(`[${d}] Unknown zod type: ${s}`), "unknown_zod";
|
|
199
199
|
}, T = (e) => {
|
|
200
200
|
if (K(e))
|
|
201
201
|
return C(e);
|
|
202
202
|
const n = e.getParent().getFirstChildByKind(t.AsExpression);
|
|
203
203
|
if (n) {
|
|
204
|
-
const
|
|
205
|
-
return B(
|
|
204
|
+
const r = n.getLastChildByKind(t.TypeReference);
|
|
205
|
+
return B(r);
|
|
206
206
|
}
|
|
207
207
|
const i = e.getParent().getFirstChildByKind(t.TypeReference);
|
|
208
208
|
if (i)
|
|
209
209
|
return B(i);
|
|
210
210
|
if (e.getParent().getChildrenOfKind(t.SyntaxList).length >= 2) {
|
|
211
|
-
const
|
|
212
|
-
return y(
|
|
211
|
+
const r = e.getParent().getFirstChildByKind(t.SyntaxList).getFirstChild();
|
|
212
|
+
return y(r);
|
|
213
213
|
}
|
|
214
|
-
const
|
|
215
|
-
if (
|
|
216
|
-
const
|
|
217
|
-
|
|
218
|
-
), g =
|
|
214
|
+
const s = e.getParent().getFirstChildByKind(t.CallExpression);
|
|
215
|
+
if (s) {
|
|
216
|
+
const r = f(
|
|
217
|
+
s.getFirstChildByKind(t.SyntaxList).getFirstChild()
|
|
218
|
+
), g = r.getParent().getFirstChildByKind(t.TypeReference);
|
|
219
219
|
if (g)
|
|
220
220
|
return c(g.getType(), g, []);
|
|
221
|
-
const u =
|
|
221
|
+
const u = r.getParent().getFirstChildByKind(t.ObjectLiteralExpression);
|
|
222
222
|
if (u)
|
|
223
223
|
return T(u);
|
|
224
|
-
if (
|
|
225
|
-
return T(
|
|
224
|
+
if (r.getKind() === t.CallExpression || r.getKind() === t.IntersectionType)
|
|
225
|
+
return T(r);
|
|
226
226
|
const h = e.getSourceFile().getFilePath().split("/").pop();
|
|
227
|
-
return m.warn(`[${h}] Unknown call expression argument: ${
|
|
227
|
+
return m.warn(`[${h}] Unknown call expression argument: ${r.getKindName()}`), "unknown_3";
|
|
228
228
|
}
|
|
229
|
-
const a = e.getFirstChildByKind(t.SyntaxList).getChildrenOfKind(t.PropertyAssignment).find((
|
|
229
|
+
const a = e.getFirstChildByKind(t.SyntaxList).getChildrenOfKind(t.PropertyAssignment).find((r) => r.getFirstChildByKind(t.Identifier)?.getText() === "parse");
|
|
230
230
|
if (a) {
|
|
231
|
-
const
|
|
232
|
-
return c(
|
|
231
|
+
const r = S(a).asKind(t.ArrowFunction).getReturnType();
|
|
232
|
+
return c(r, a);
|
|
233
233
|
}
|
|
234
234
|
const p = e.getFirstChildByKind(t.SyntaxList)?.getFirstChildByKind(t.ImportType);
|
|
235
235
|
if (p) {
|
|
236
|
-
const
|
|
236
|
+
const r = p.getLastChildByKind(t.GreaterThanToken).getChildIndex(), g = p.getChildAtIndex(r - 1);
|
|
237
237
|
return y(g.getFirstChild());
|
|
238
238
|
}
|
|
239
239
|
const o = e.isKind(t.IntersectionType) ? e : e.getParent()?.isKind(t.VariableDeclaration) ? e.getParent()?.getFirstChildByKind(t.IntersectionType) : null;
|
|
240
240
|
if (o) {
|
|
241
|
-
const
|
|
242
|
-
if (
|
|
243
|
-
return B(
|
|
241
|
+
const r = o.getFirstChildByKind(t.TypeReference);
|
|
242
|
+
if (r)
|
|
243
|
+
return B(r);
|
|
244
244
|
}
|
|
245
245
|
const l = e.getSourceFile().getFilePath().split("/").pop();
|
|
246
246
|
return m.warn(`[${l}] Unknown import type node`), "unknown_2";
|
|
@@ -261,9 +261,9 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
261
261
|
}, N = (e, n) => {
|
|
262
262
|
if (K(e))
|
|
263
263
|
return "";
|
|
264
|
-
const i = f(e),
|
|
265
|
-
if (
|
|
266
|
-
const g =
|
|
264
|
+
const i = f(e), s = i.asKind(t.CallExpression);
|
|
265
|
+
if (s) {
|
|
266
|
+
const g = s.getLastChildByKind(t.SyntaxList);
|
|
267
267
|
return N(g, n);
|
|
268
268
|
}
|
|
269
269
|
const d = i.asKind(t.SyntaxList);
|
|
@@ -285,8 +285,8 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
285
285
|
return S(l).getFirstDescendantByKind(
|
|
286
286
|
t.StringLiteral
|
|
287
287
|
).getLiteralText();
|
|
288
|
-
const
|
|
289
|
-
return m.dev(`[${
|
|
288
|
+
const r = i.getSourceFile().getFilePath().split("/").pop();
|
|
289
|
+
return m.dev(`[${r}] Unknown property string value node ${i.getKindName()}`), "unknown_25";
|
|
290
290
|
}, M = (e) => {
|
|
291
291
|
const n = e.getSymbol();
|
|
292
292
|
if (!e.isObject() || !n)
|
|
@@ -294,12 +294,12 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
294
294
|
const i = e.getTypeArguments();
|
|
295
295
|
return n.getName() === "Promise" && i.length === 1;
|
|
296
296
|
}, c = (e, n, i = []) => {
|
|
297
|
-
const
|
|
298
|
-
if (
|
|
297
|
+
const s = e.getAliasSymbol()?.getName();
|
|
298
|
+
if (s && V.getInstance().hasExposedModel(s))
|
|
299
299
|
return [
|
|
300
300
|
{
|
|
301
301
|
role: "ref",
|
|
302
|
-
shape:
|
|
302
|
+
shape: s,
|
|
303
303
|
optional: !1
|
|
304
304
|
}
|
|
305
305
|
];
|
|
@@ -312,7 +312,7 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
312
312
|
const o = Z(d, n, i);
|
|
313
313
|
return _.set(a, o), o;
|
|
314
314
|
}, Z = (e, n, i) => {
|
|
315
|
-
const
|
|
315
|
+
const s = i.concat(e);
|
|
316
316
|
if (e.getText() === "void")
|
|
317
317
|
return "void";
|
|
318
318
|
if (e.isAny())
|
|
@@ -353,7 +353,7 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
353
353
|
role: "tuple",
|
|
354
354
|
shape: e.getTupleElements().map((o) => ({
|
|
355
355
|
role: "tuple_entry",
|
|
356
|
-
shape: c(o, n,
|
|
356
|
+
shape: c(o, n, s),
|
|
357
357
|
optional: !1
|
|
358
358
|
})),
|
|
359
359
|
optional: !1
|
|
@@ -363,20 +363,20 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
363
363
|
return [
|
|
364
364
|
{
|
|
365
365
|
role: "array",
|
|
366
|
-
shape: c(e.getArrayElementType(), n,
|
|
366
|
+
shape: c(e.getArrayElementType(), n, s),
|
|
367
367
|
optional: !1
|
|
368
368
|
}
|
|
369
369
|
];
|
|
370
370
|
if (e.isObject()) {
|
|
371
|
-
const o = e.getNumberIndexType(),
|
|
372
|
-
if (
|
|
371
|
+
const o = e.getNumberIndexType(), r = e.getBaseTypes()?.find((g) => g.isArray());
|
|
372
|
+
if (r)
|
|
373
373
|
return [
|
|
374
374
|
{
|
|
375
375
|
role: "array",
|
|
376
376
|
shape: c(
|
|
377
|
-
|
|
377
|
+
r.getArrayElementType() ?? o,
|
|
378
378
|
n,
|
|
379
|
-
|
|
379
|
+
s
|
|
380
380
|
),
|
|
381
381
|
optional: !1
|
|
382
382
|
}
|
|
@@ -414,7 +414,7 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
414
414
|
return [
|
|
415
415
|
{
|
|
416
416
|
role: "record",
|
|
417
|
-
shape: l ? c(l, n,
|
|
417
|
+
shape: l ? c(l, n, s) : "unknown",
|
|
418
418
|
optional: !1
|
|
419
419
|
}
|
|
420
420
|
];
|
|
@@ -424,7 +424,7 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
424
424
|
return [
|
|
425
425
|
{
|
|
426
426
|
role: "array",
|
|
427
|
-
shape: l ? c(l, n,
|
|
427
|
+
shape: l ? c(l, n, s) : "unknown",
|
|
428
428
|
optional: !1
|
|
429
429
|
}
|
|
430
430
|
];
|
|
@@ -435,65 +435,65 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
435
435
|
return [
|
|
436
436
|
{
|
|
437
437
|
role: "record",
|
|
438
|
-
shape: c(o, n,
|
|
438
|
+
shape: c(o, n, s),
|
|
439
439
|
optional: !1
|
|
440
440
|
}
|
|
441
441
|
];
|
|
442
442
|
}
|
|
443
443
|
if (e.isObject())
|
|
444
444
|
return d === "Date" || e.getText() === "Date" ? "Date" : e.getProperties().map((o) => {
|
|
445
|
-
const l = o.getValueDeclaration() || o.getDeclarations()[0];
|
|
445
|
+
const l = o.getValueDeclaration() || o.getDeclarations()[0], r = c(o.getTypeAtLocation(n), n, s);
|
|
446
446
|
if (!l)
|
|
447
447
|
return {
|
|
448
448
|
role: "property",
|
|
449
449
|
identifier: o.getName(),
|
|
450
|
-
shape:
|
|
450
|
+
shape: r,
|
|
451
451
|
optional: !1
|
|
452
452
|
};
|
|
453
453
|
if (!(l.asKind(t.PropertySignature) || l.asKind(t.PropertyAssignment) || l.asKind(t.ShorthandPropertyAssignment)))
|
|
454
454
|
return {
|
|
455
455
|
role: "property",
|
|
456
456
|
identifier: o.getName(),
|
|
457
|
-
shape:
|
|
457
|
+
shape: r,
|
|
458
458
|
optional: !1
|
|
459
459
|
};
|
|
460
|
-
const
|
|
460
|
+
const u = o.getTypeAtLocation(n).isNullable();
|
|
461
461
|
return {
|
|
462
462
|
role: "property",
|
|
463
463
|
identifier: o.getName(),
|
|
464
|
-
shape:
|
|
465
|
-
optional:
|
|
464
|
+
shape: r,
|
|
465
|
+
optional: u
|
|
466
466
|
};
|
|
467
467
|
}).filter((o) => o.shape !== "undefined");
|
|
468
468
|
if (e.isUnion()) {
|
|
469
469
|
const l = e.getUnionTypes().map((u) => ({
|
|
470
470
|
role: "union_entry",
|
|
471
|
-
shape: c(u, n,
|
|
471
|
+
shape: c(u, n, s),
|
|
472
472
|
optional: !1
|
|
473
473
|
})).filter(
|
|
474
474
|
(u, h, A) => !A.find((F, x) => F.shape === u.shape && x > h)
|
|
475
|
-
),
|
|
475
|
+
), r = l.some((u) => u.shape === "undefined"), g = l.filter((u) => u.shape !== "undefined");
|
|
476
476
|
return g.length === 1 ? g[0].shape : [
|
|
477
477
|
{
|
|
478
478
|
role: "union",
|
|
479
479
|
shape: g,
|
|
480
|
-
optional:
|
|
480
|
+
optional: r
|
|
481
481
|
}
|
|
482
482
|
];
|
|
483
483
|
}
|
|
484
484
|
if (e.isIntersection())
|
|
485
|
-
return e.getIntersectionTypes().map((
|
|
485
|
+
return e.getIntersectionTypes().map((r) => c(r, n, s)).filter((r) => typeof r != "string").reduce((r, g) => [...r, ...g], []);
|
|
486
486
|
const p = n.getSourceFile().getFilePath().split("/").pop();
|
|
487
487
|
return m.warn(`[${p}] Unknown type shape node ${e.getText()}`), "unknown_5";
|
|
488
|
-
},
|
|
488
|
+
}, L = (e) => {
|
|
489
489
|
if (e.isKind(t.Identifier))
|
|
490
|
-
return
|
|
490
|
+
return L(f(e));
|
|
491
491
|
if (e.isKind(t.StringLiteral))
|
|
492
492
|
return e.getLiteralValue();
|
|
493
493
|
if (e.isKind(t.ArrayLiteralExpression))
|
|
494
|
-
return e.forEachChildAsArray().map((i) =>
|
|
494
|
+
return e.forEachChildAsArray().map((i) => L(i));
|
|
495
495
|
if (e.isKind(t.PropertyAccessExpression))
|
|
496
|
-
return
|
|
496
|
+
return L(S(e));
|
|
497
497
|
if (e.isKind(t.ObjectLiteralExpression))
|
|
498
498
|
return U(e);
|
|
499
499
|
const n = e.getSourceFile().getFilePath().split("/").pop();
|
|
@@ -503,13 +503,13 @@ const b = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), _ =
|
|
|
503
503
|
if (!n) return null;
|
|
504
504
|
const i = n.getArguments()[0];
|
|
505
505
|
if (!i) return null;
|
|
506
|
-
const
|
|
507
|
-
return
|
|
506
|
+
const s = i.getType();
|
|
507
|
+
return s.isStringLiteral() ? s.getLiteralValue() : null;
|
|
508
508
|
}, U = (e) => e.getFirstDescendantByKind(t.SyntaxList).getChildrenOfKind(t.PropertyAssignment).map((d) => {
|
|
509
|
-
const p = d.getFirstDescendantByKind(t.Identifier).getText(), o = d.getLastChild(), l = f(o),
|
|
509
|
+
const p = d.getFirstDescendantByKind(t.Identifier).getText(), o = d.getLastChild(), l = f(o), r = L(l);
|
|
510
510
|
return {
|
|
511
511
|
identifier: p,
|
|
512
|
-
value:
|
|
512
|
+
value: r
|
|
513
513
|
};
|
|
514
514
|
}) || [];
|
|
515
515
|
export {
|