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.
@@ -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":"2LAgBMA,MAA0B,QAC1BC,MAAqB,QACrBC,MAAqB,QAEdC,EAA0BC,GAAqB,CACrD,MAAAC,EAASL,EAAoB,IAAII,CAAI,EAC3C,GAAIC,EACI,OAAAA,EAGR,GAAID,EAAK,YAAcE,EAAAA,WAAW,WAAY,CACvC,MAAAC,EAAqBH,EAAK,OAAOE,EAAW,WAAA,UAAU,EAAG,mBAAmB,EAAE,CAAC,GAAG,QAAQ,EAChG,GAAIC,EAAoB,CAEjB,MAAAC,EAD2BD,EAAmB,UAAU,EACT,aAAa,EAClE,GAAIC,IAAwBJ,EACrB,MAAA,IAAI,MAAM,gCAAgC,EAE3C,MAAAK,EAASN,EAAuBK,CAAmB,EACrC,OAAAR,EAAA,IAAII,EAAMK,CAAM,EAC7BA,CAAA,CAGF,MAAAC,EAAiBN,EAAK,OAAOE,EAAW,WAAA,UAAU,EAAG,eAAe,EAAE,CAAC,GAAG,QAAQ,EACxF,GAAII,EAAgB,CAEb,MAAAF,EADuBE,EAAe,UAAU,EACL,aAAa,EAC9D,GAAIF,IAAwBJ,EACrB,MAAA,IAAI,MAAM,gCAAgC,EAE3C,MAAAK,EAASN,EAAuBK,CAAmB,EACrC,OAAAR,EAAA,IAAII,EAAMK,CAAM,EAC7BA,CAAA,CAEF,MAAA,IAAI,MAAM,4CAA4C,CAAA,CAGzC,OAAAT,EAAA,IAAII,EAAMA,CAAI,EAC3BA,CACR,EAEaO,EACZP,GAMU,CACV,MAAMQ,EAAqBR,EAAK,kBAAkBE,EAAAA,WAAW,UAAU,EACnE,OAAAM,EAAmB,SAAW,EAC1BT,EAAuBS,EAAmB,CAAC,CAAC,EAE1BR,EAAK,YAAY,EAAE,QAAQ,EAC5B,KACvBS,GACAA,EAAM,QAAA,IAAcP,EAAAA,WAAW,kBAC/BO,EAAM,YAAcP,EAAW,WAAA,YAC/BO,EAAM,QAAA,IAAcP,EAAAA,WAAW,cACjC,CACD,EAEaQ,EAAyBV,GAAkD,CACvF,MAAMW,EAAaX,EAAK,oBAAoBE,EAAAA,WAAW,UAAU,EACjE,OAAIS,EAAW,OAAOT,EAAW,WAAA,UAAU,EACnCU,EAAsBD,EAAW,eAAgB,EAEjDC,EAAsBD,CAAU,CAEzC,EAEaC,EAAyBC,GAAgD,CAC/E,MAAAZ,EAASJ,EAAe,IAAIgB,CAAe,EACjD,GAAIZ,IAAW,OACP,OAAAA,EAEF,MAAAI,EAASS,EAA0BD,CAAe,EACzC,OAAAhB,EAAA,IAAIgB,EAAiBR,CAAM,EACnCA,CACR,EAEMS,EAA6BD,GAAgD,CAClF,MAAME,EAAWF,EAAgB,UAAU,GAAG,QAAQ,EACtD,GAAIE,GAAYC,EAAAA,eAAe,YAAc,EAAA,gBAAgBD,CAAQ,EAC7D,MAAA,CACN,CACC,KAAM,MACN,MAAOA,EACP,SAAU,EAAA,CAEZ,EAGK,MAAAf,EAAOD,EAAuBc,CAAe,EAInD,GADsBb,EAAK,OAAOE,EAAAA,WAAW,gBAAgB,EAErD,MAAA,YAIR,MAAMe,EAAcjB,EAAK,OAAOE,EAAAA,WAAW,WAAW,EACtD,GAAIe,EAAa,CAChB,GAAIA,EAAY,oBAAoBf,EAAW,WAAA,WAAW,EAClD,MAAA,OAER,GAAIe,EAAY,oBAAoBf,EAAW,WAAA,YAAY,EACnD,MAAA,OACR,CAQD,GAHCF,EAAK,OAAOE,EAAAA,WAAW,cAAc,GACrCF,EAAK,OAAOE,EAAA,WAAW,WAAW,GAClCF,EAAK,OAAOE,EAAAA,WAAW,YAAY,EAE5B,MAAA,UAKR,GAD0BF,EAAK,OAAOE,EAAA,WAAW,aAAa,GAAKF,EAAK,OAAOE,EAAA,WAAW,aAAa,EAE/F,MAAA,SAKR,GAD0BF,EAAK,OAAOE,EAAA,WAAW,aAAa,GAAKF,EAAK,OAAOE,EAAA,WAAW,cAAc,EAEhG,MAAA,SAKR,GADmBF,EAAK,OAAOE,EAAA,WAAW,aAAa,GAAKF,EAAK,OAAOE,EAAA,WAAW,aAAa,EAExF,MAAA,SAIR,MAAMgB,EAAkBlB,EAAK,OAAOE,EAAAA,WAAW,WAAW,EAC1D,GAAIgB,EAgBI,OAfYA,EACjB,oBAAoBhB,EAAAA,WAAW,UAAU,EACzC,kBAAkBA,aAAW,iBAAiB,EAEd,IAAKiB,GAAa,CACnD,MAAMC,EAAaD,EAAS,oBAAoBjB,EAAAA,WAAW,UAAU,EAC/DmB,EAAYd,EAAgCY,CAAQ,EACpDG,EAAoBF,EAAW,qBAAqBlB,EAAAA,WAAW,aAAa,EAC3E,MAAA,CACN,KAAM,WACN,WAAYkB,EAAW,QAAQ,EAC/B,MAAOR,EAAsBS,CAAS,EACtC,SAAUA,EAAU,UAAU,WAAW,GAAK,CAAC,CAACC,CACjD,CAAA,CACA,EAKF,MAAMC,EAAoBvB,EAAK,OAAOE,EAAAA,WAAW,aAAa,EAC9D,GAAIqB,EACI,OAAAX,EAAsBW,EAAkB,eAAgB,EAKhE,GAD2BvB,EAAK,OAAOE,EAAAA,WAAW,wBAAwB,EAClD,CACvB,MAAMsB,EAAYzB,EAAuBC,EAAK,aAAA,CAAe,EACtD,OAAAyB,EAAmBD,EAAU,OAAOtB,EAAAA,WAAW,cAAc,EAAG,gBAAiBsB,CAAS,CAAA,CAIlG,MAAME,EAAgB1B,EAAK,OAAOE,EAAAA,WAAW,SAAS,EACtD,GAAIwB,EACH,OAAOD,EAAmBC,EAAc,QAAQ,EAAG1B,CAAI,EAIxD,MAAM2B,EAAgB3B,EAAK,OAAOE,EAAAA,WAAW,SAAS,EACtD,GAAIyB,EACI,OAAAf,EAAsBe,EAAc,cAAe,EAI3D,MAAMC,EAAoB5B,EAAK,OAAOE,EAAAA,WAAW,aAAa,EAC9D,GAAI0B,EACI,OAAAhB,EAAsBgB,EAAkB,cAAe,EAI/D,MAAMC,EAAqB7B,EAAK,OAAOE,EAAAA,WAAW,cAAc,EAChE,GAAI2B,EACH,OAAOJ,EAAmBI,EAAmB,cAAc,EAAGA,CAAkB,EAIjF,MAAMC,EAAsB9B,EAAK,OAAOE,EAAAA,WAAW,eAAe,EAClE,GAAI4B,EACH,OAAOlB,EAAsBkB,EAAoB,gBAAgB,CAAC,CAAE,EAIrE,MAAMC,EAAmB/B,EAAK,OAAOE,EAAAA,WAAW,YAAY,EAC5D,GAAI6B,EACH,OAAOnB,EAAsBmB,EAAiB,gBAAgB,CAAC,CAAE,EAI5D,MAAAC,EAAWhC,EAAK,cAAc,EAAE,cAAc,MAAM,GAAG,EAAE,IAAI,EACnEiC,OAAAA,SAAO,KAAK,IAAID,CAAQ,wBAAwBhC,EAAK,YAAa,CAAA,EAAE,EAC7D,WACR,EAEakC,EACZC,GAEuBA,EAAkB,yBAAyBjC,EAAAA,WAAW,UAAU,EAChD,kBAAkBA,EAAAA,WAAW,kBAAkB,EAEnD,IAAKF,GAAS,CAC1C,MAAAoC,EAAiBpC,EAAK,cAAc,EACpCqC,GAAkB,IAAM,CAC7B,GAAID,EAAe,OAAOlC,EAAW,WAAA,UAAU,EAC9C,OAAOkC,EAAe,QAAQ,EAE/B,GAAIA,EAAe,OAAOlC,EAAW,WAAA,aAAa,EACjD,OAAOkC,EAAe,eAAe,EAEhC,MAAAJ,EAAWhC,EAAK,cAAc,EAAE,cAAc,MAAM,GAAG,EAAE,IAAI,EACnEiC,OAAAA,SAAO,KAAK,IAAID,CAAQ,8BAA8BI,EAAe,QAAS,CAAA,EAAE,EACzE,YAAA,GACL,EAEGhC,EAAsBJ,EAAK,aAAa,EACxCsC,EAAmBvC,EAAuBK,CAAmB,EAE5D,MAAA,CACN,KAAM,WACN,WAAYiC,EACZ,MAAOE,EAA0BD,CAAgB,EACjD,SAAUE,EAAgCF,CAAgB,EAC1D,YAAaG,EAAgCH,EAAkB,aAAa,EAC5E,aAAcG,EAAgCH,EAAkB,cAAc,CAC/E,CAAA,CACA,GAEoB,CAAC,EAGjBI,EAAuB1C,GAAwB,CACpD,MAAM2C,EAAiB3C,EAAK,OAAOE,EAAAA,WAAW,cAAc,EAC5D,OAAKyC,GAGcA,EAAe,cAAc,EACpB,UAAU,GAAG,QAAa,GAAA,IACtC,WAAW,KAAK,EAJxB,EAKT,EAEMC,EAAmB5C,GAAqC,CAC7D,MAAM2C,EAAiB3C,EAAK,OAAOE,EAAAA,WAAW,cAAc,EACtD2C,EAAaF,EAAe,cAAc,EAC1C5B,EAAW8B,EAAW,UAAU,GAAG,QAAa,GAAA,GAEtD,GAAI9B,IAAa,YACT,MAAA,SAER,GAAIA,IAAa,YACT,MAAA,SAER,GAAIA,IAAa,aACT,MAAA,UAER,GAAIA,IAAa,YACT,MAAA,SAGR,GAAIA,IAAa,YAAa,CAE7B,MAAM+B,EADUH,EAAe,oBAAoBzC,EAAAA,WAAW,UAAU,GAAG,cAAc,GAC1D,OAAOA,EAAAA,WAAW,uBAAuB,EACxE,GAAI,CAAC4C,EACG,MAAA,qBAER,MAAMC,EAAaD,EAAc,oBAAoB5C,EAAAA,WAAW,UAAU,EAC1E,OAAK6C,EAGcA,EAAW,kBAAkB7C,EAAAA,WAAW,kBAAkB,EAC3D,IAAK8C,GAAS,CAC/B,MAAM5B,EAAa4B,EAAK,oBAAoB9C,EAAAA,WAAW,UAAU,EAAG,QAAQ,EACtEmB,EAAY2B,EAAK,aAAa,EAC7B,MAAA,CACN,KAAM,WACN,WAAA5B,EACA,MAAOsB,EAAoBrB,CAAS,EACjCuB,EAAgBvB,CAAS,EACzBkB,EAA0BlB,CAAS,EACtC,SAAU,EACX,CAAA,CACA,EAdO,CAAC,CAcR,CAGF,GAAIN,IAAa,WAAY,CAC5B,MAAMkC,EAAUN,EAAe,oBAAoBzC,EAAAA,WAAW,UAAU,GAAG,cAAc,EACzF,GAAI+C,EAII,MAAA,CACN,CACC,KAAM,QACN,MANmBP,EAAoBO,CAAO,EAC7CL,EAAgBK,CAAO,EACvBV,EAA0BU,CAAO,EAKlC,SAAU,EAAA,CAEZ,EAID,MAAMC,EADiBP,EAAe,oBAAoBzC,EAAAA,WAAW,wBAAwB,GACxD,oBAAoBA,EAAAA,WAAW,cAAc,EAC9E,OAAAgD,GAAgBR,EAAoBQ,CAAY,EAC5C,CACN,CACC,KAAM,QACN,MAAON,EAAgBM,CAAY,EACnC,SAAU,EAAA,CAEZ,EAEM,mBAAA,CAGR,GAAInC,IAAa,UAAW,CACrB,MAAAoC,EAAWN,EAAW,iBAAiB,EACzC,GAAAM,EAAS,OAAS,EAAG,CAGxB,MAAMC,EAFWD,EAAS,CAAC,EACC,cAAc,EACK,IAAKH,IAAU,CAC7D,KAAM,cACN,MAAOvB,EAAmBuB,EAAK,kBAAkBL,CAAc,EAAGA,EAAgB,EAAE,EACpF,SAAU,EAAA,EACT,EACE,GAAAS,EAAO,SAAW,EACd,OAAAA,EAAO,CAAC,EAAE,MAEd,GAAAA,EAAO,OAAS,EACZ,MAAA,CACN,CACC,KAAM,QACN,MAAOA,EACP,SAAU,EAAA,CAEZ,CACD,CAEM,MAAA,kBAAA,CAGR,GAAIrC,IAAa,cAAe,CACzB,MAAAsC,EAAsBV,EAC1B,oBAAoBzC,EAAAA,WAAW,wBAAwB,GACtD,oBAAoBA,aAAW,cAAc,EAC5C,OAAAmD,GAAuBX,EAAoBW,CAAmB,EAC1DT,EAAgBS,CAAmB,EAEpC,sBAAA,CAGF,MAAArB,EAAWhC,EAAK,cAAc,EAAE,cAAc,MAAM,GAAG,EAAE,IAAI,EACnEiC,OAAAA,EAAA,OAAO,KAAK,IAAID,CAAQ,uBAAuBjB,CAAQ,EAAE,EAClD,aACR,EAEawB,EAA6BD,GAAiD,CAEtF,GAAAI,EAAoBJ,CAAgB,EACvC,OAAOM,EAAgBN,CAAgB,EAIxC,MAAMgB,EAA8BhB,EAClC,UACA,EAAA,oBAAoBpC,aAAW,YAAY,EAC7C,GAAIoD,EAA6B,CAChC,MAAMC,EAAgBD,EAA4B,mBAAmBpD,EAAAA,WAAW,aAAa,EAC7F,OAAOQ,EAAsB6C,CAAa,CAAA,CAI3C,MAAMC,EAAyBlB,EAAiB,UAAa,EAAA,oBAAoBpC,aAAW,aAAa,EACzG,GAAIsD,EACH,OAAO9C,EAAsB8C,CAAsB,EAIhD,GAAAlB,EAAiB,YAAa,kBAAkBpC,aAAW,UAAU,EAAE,QAAU,EAAG,CACjF,MAAAuD,EAAWnB,EACf,UAAU,EACV,oBAAoBpC,aAAW,UAAU,EACzC,cAAc,EAChB,OAAOU,EAAsB6C,CAAQ,CAAA,CAItC,MAAMC,EAA0BpB,EAAiB,UAAa,EAAA,oBAAoBpC,aAAW,cAAc,EAC3G,GAAIwD,EAAyB,CAC5B,MAAMC,EAAyB5D,EAC9B2D,EAAwB,oBAAoBxD,aAAW,UAAU,EAAG,cAAc,CACnF,EAGMqB,EAAoBoC,EACxB,UACA,EAAA,oBAAoBzD,aAAW,aAAa,EAC9C,GAAIqB,EACH,OAAOE,EAAmBF,EAAkB,QAAA,EAAWA,EAAmB,CAAA,CAAE,EAG7E,MAAMqC,EAAaD,EACjB,UACA,EAAA,oBAAoBzD,aAAW,uBAAuB,EACxD,GAAI0D,EACH,OAAOrB,EAA0BqB,CAAU,EAO5C,GAJID,EAAuB,YAAczD,EAAAA,WAAW,gBAIhDyD,EAAuB,YAAczD,EAAAA,WAAW,iBACnD,OAAOqC,EAA0BoB,CAAsB,EAGlD3B,MAAAA,EAAWM,EAAiB,cAAc,EAAE,cAAc,MAAM,GAAG,EAAE,IAAI,EAC/EL,OAAAA,SAAO,KAAK,IAAID,CAAQ,uCAAuC2B,EAAuB,YAAa,CAAA,EAAE,EAC9F,WAAA,CAOR,MAAME,EAH+BvB,EACnC,oBAAoBpC,EAAAA,WAAW,UAAU,EACzC,kBAAkBA,aAAW,kBAAkB,EACY,KAAM8C,GAC3DA,EAAK,oBAAoB9C,EAAAA,WAAW,UAAU,GAAG,YAAc,OACtE,EACD,GAAI2D,EAAyB,CACtB,MAAAhB,EAAatC,EAAgCsD,CAAuB,EACxE,OAAO3D,aAAW,aAAa,EAC/B,cAAc,EACT,OAAAuB,EAAmBoB,EAAYgB,CAAuB,CAAA,CAIxD,MAAAC,EAAiBxB,EACrB,oBAAoBpC,EAAAA,WAAW,UAAU,GACxC,oBAAoBA,aAAW,UAAU,EAC5C,GAAI4D,EAAgB,CACnB,MAAMC,EAA0BD,EAC9B,mBAAmB5D,EAAAA,WAAW,gBAAgB,EAC9C,cAAc,EACV8D,EAAmBF,EAAe,gBAAgBC,EAA0B,CAAC,EAC5E,OAAAnD,EAAsBoD,EAAiB,eAAgB,CAAA,CAIzD,MAAAC,EAAmB3B,EAAiB,OAAOpC,EAAAA,WAAW,gBAAgB,EACzEoC,EACAA,EAAiB,UAAU,GAAG,OAAOpC,aAAW,mBAAmB,EAClEoC,EAAiB,aAAa,oBAAoBpC,EAAAA,WAAW,gBAAgB,EAC7E,KAEJ,GAAI+D,EAAkB,CACrB,MAAMC,EAAgBD,EAAiB,oBAAoB/D,EAAAA,WAAW,aAAa,EACnF,GAAIgE,EACH,OAAOxD,EAAsBwD,CAAa,CAC3C,CAGK,MAAAlC,EAAWM,EAAiB,cAAc,EAAE,cAAc,MAAM,GAAG,EAAE,IAAI,EACxEL,OAAAA,EAAAA,OAAA,KAAK,IAAID,CAAQ,4BAA4B,EAE7C,WACR,EAEaQ,EAAmCxC,GAAwB,CACnE,GAAA0C,EAAoB1C,CAAI,EAI3B,OAHuBA,EAAK,OAAOE,EAAAA,WAAW,cAAc,EAC1B,cAAc,EACpB,UAAU,GAAG,QAAa,GAAA,MACrC,cAMlB,MAAM2B,EAAqB7B,EAAK,OAAOE,EAAAA,WAAW,cAAc,EAChE,GAAI2B,EAAoB,CACvB,MAAMO,EAAiBP,EAAmB,oBAAoB3B,EAAAA,WAAW,UAAU,EAC/E,GAAAkC,GAAgB,QAAQ,IAAM,gBAC1B,MAAA,GACG,GAAAA,GAAgB,QAAQ,IAAM,gBACjC,MAAA,GAGR,MAAM+B,EAAiBtC,EAAmB,oBAAoB3B,EAAAA,WAAW,UAAU,EAC7EkE,EAAoBrE,EAAuBoE,EAAe,cAAA,CAAgB,EAChF,OAAO3B,EAAgC4B,CAAiB,CAAA,CAMlD,OAHgBpE,EAAK,yBAAyBE,EAAAA,WAAW,UAAU,EACnC,kBAAkBA,EAAAA,WAAW,kBAAkB,EAE/D,KAAMF,GACLA,EAAK,yBAAyBE,EAAAA,WAAW,UAAU,EACpC,QAAQ,IAEvB,WACRK,EAAgCP,CAAI,EACrC,YAAcE,EAAAA,WAAW,YAEhC,EACP,CACF,EAEauC,EAAkC,CAC9C5B,EACAwD,IACY,CACR,GAAA3B,EAAoB7B,CAAe,EAC/B,MAAA,GAGF,MAAAb,EAAOD,EAAuBc,CAAe,EAE7CgB,EAAqB7B,EAAK,OAAOE,EAAAA,WAAW,cAAc,EAChE,GAAI2B,EAAoB,CACvB,MAAMyC,EAAczC,EAAmB,mBAAmB3B,EAAAA,WAAW,UAAU,EACxE,OAAAuC,EAAgC6B,EAAaD,CAAI,CAAA,CAGzD,MAAMF,EAAiBnE,EAAK,OAAOE,EAAAA,WAAW,UAAU,EACxD,GAAIiE,EAEI,OADUA,EAAe,cAAc,IAAKI,GAAM9B,EAAgC8B,EAAGF,CAAI,CAAC,EACjF,KAAMG,GAAU,CAAC,CAACA,GAASA,IAAU,YAAY,GAAK,GAGvE,MAAMrC,EAAoBnC,EAAK,OAAOE,EAAAA,WAAW,uBAAuB,EACxE,GAAIiC,EAAmB,CAEtB,MAAMsC,EADSC,EAAyBvC,CAAiB,EAC9B,KAAMqC,GAAUA,EAAM,aAAeH,CAAI,EACpE,OAAKI,EAGD,MAAM,QAAQA,EAAY,KAAK,EAC3B,QAEDA,EAAY,OAAS,GALpB,EAKoB,CAG7B,MAAME,EAAuB3E,EAAK,OAAOE,EAAAA,WAAW,gBAAgB,EACpE,GAAIyE,EAEF,OAAAA,EACE,eACA,QAASC,GAAMnC,EAAgCmC,EAAGP,CAAI,CAAC,EACvD,OAAQQ,GAAM,CAAC,CAACA,GAAKA,IAAM,YAAY,EAAE,CAAC,GAAK,aAInD,MAAM3D,EAAkBlB,EAAK,OAAOE,EAAAA,WAAW,WAAW,EAC1D,GAAIgB,EACH,OAAOuB,EAAgCvB,EAAgB,oBAAoBhB,EAAAA,WAAW,UAAU,EAAImE,CAAI,EAGzG,MAAMS,EAAwB9E,EAAK,OAAOE,EAAAA,WAAW,iBAAiB,EACtE,GAAI4E,GACgB9E,EAAK,yBAAyBE,EAAAA,WAAW,UAAU,EACvD,QAAQ,IAAMmE,EAI5B,OAHmB9D,EAAgCuE,CAAqB,EAAE,yBACzE5E,aAAW,aACZ,EACkB,eAAe,EAI7B,MAAA8B,EAAWhC,EAAK,cAAc,EAAE,cAAc,MAAM,GAAG,EAAE,IAAI,EACnEiC,OAAAA,SAAO,IAAI,IAAID,CAAQ,wCAAwChC,EAAK,YAAa,CAAA,EAAE,EAC5E,YACR,EAEM+E,EAAaC,GAAe,CAC3B,MAAAC,EAASD,EAAK,UAAU,EAC9B,GAAI,CAACA,EAAK,SAAS,GAAK,CAACC,EACjB,MAAA,GAEF,MAAAC,EAAOF,EAAK,iBAAiB,EACnC,OAAOC,EAAO,QAAc,IAAA,WAAaC,EAAK,SAAW,CAC1D,EAEazD,EAAqB,CACjC0D,EACAC,EACAC,EAAgB,CAAA,IACU,CAC1B,MAAMtE,EAAWoE,EAAc,eAAe,GAAG,QAAQ,EACzD,GAAIpE,GAAYC,EAAAA,eAAe,YAAc,EAAA,gBAAgBD,CAAQ,EAC7D,MAAA,CACN,CACC,KAAM,MACN,MAAOA,EACP,SAAU,EAAA,CAEZ,EAGK,MAAAiE,EAAOD,EAAUI,CAAa,EAAIA,EAAc,iBAAiB,EAAE,CAAC,EAAIA,EAE9E,GAAIE,EAAM,KAAMC,GAAiBA,IAAiBN,CAAI,EAC9C,MAAA,WAGR,MAAMO,EAAWP,EAAK,aAChB/E,EAASH,EAAe,IAAIyF,CAAQ,EAC1C,GAAItF,IAAW,OACP,OAAAA,EAER,MAAMI,EAASmF,EAAuBR,EAAMI,EAAYC,CAAK,EAC9C,OAAAvF,EAAA,IAAIyF,EAAUlF,CAAM,EAC5BA,CACR,EAEMmF,EAAyB,CAACR,EAAYI,EAAkBC,IAAwC,CAC/F,MAAAI,EAAYJ,EAAM,OAAOL,CAAI,EAE/B,GAAAA,EAAK,QAAQ,IAAM,OACf,MAAA,OAGJ,GAAAA,EAAK,QACD,MAAA,MAGJ,GAAAA,EAAK,YACD,MAAA,UAGJ,GAAAA,EAAK,SACD,MAAA,OAGJ,GAAAA,EAAK,cACD,MAAA,YAGR,GAAIA,EAAK,UAAA,GAAeA,EAAK,mBACrB,MAAA,UAGJ,GAAAA,EAAK,kBACD,MAAA,CACN,CACC,KAAM,iBACN,MAAO,OAAOA,EAAK,iBAAkB,EACrC,SAAU,EAAA,CAEZ,EAGG,GAAAA,EAAK,kBACD,MAAA,CACN,CACC,KAAM,iBACN,MAAO,OAAOA,EAAK,iBAAkB,EACrC,SAAU,EAAA,CAEZ,EAGD,GAAIA,EAAK,SAAA,GAAcA,EAAK,oBACpB,MAAA,SAGJ,GAAAA,EAAK,WACD,MAAA,SAGJ,GAAAA,EAAK,QAAQ,IAAM,SACf,MAAA,SAGJ,GAAAA,EAAK,UACD,MAAA,CACN,CACC,KAAM,QACN,MAAOA,EAAK,iBAAmB,EAAA,IAAKJ,IAAO,CAC1C,KAAM,cACN,MAAOnD,EAAmBmD,EAAGQ,EAAYK,CAAS,EAClD,SAAU,EAAA,EACT,EACF,SAAU,EAAA,CAEZ,EAGG,GAAAT,EAAK,UACD,MAAA,CACN,CACC,KAAM,QACN,MAAOvD,EAAmBuD,EAAK,oBAAoB,EAAII,EAAYK,CAAS,EAC5E,SAAU,EAAA,CAEZ,EAKG,GAAAT,EAAK,WAAY,CACd,MAAAU,EAAmBV,EAAK,mBAAmB,EAE3CW,EADYX,EAAK,aAAa,GACP,KAAMY,GAASA,EAAK,SAAS,EAC1D,GAAID,EACI,MAAA,CACN,CACC,KAAM,QACN,MAAOlE,EACNkE,EAAU,uBAAyBD,EACnCN,EACAK,CACD,EACA,SAAU,EAAA,CAEZ,CACD,CAGD,MAAMI,EAAiBb,EAAK,UAAU,GAAG,QAAQ,EAE3Cc,MAAsB,IAAI,CAC/B,SACA,aACA,YACA,oBACA,aACA,cACA,aACA,cACA,eACA,eACA,gBACA,iBACA,cACA,oBACA,gBAAA,CACA,EAED,GAAId,EAAK,YAAca,GAAkBC,EAAgB,IAAID,CAAc,EACnE,MAAA,CACN,CACC,KAAM,SACN,MAAO,SACP,SAAU,EAAA,CAEZ,EAGD,GAAIb,EAAK,YAAca,IAAmB,SAClC,MAAA,SAGR,GAAIb,EAAK,YAAca,IAAmB,MAAO,CAE1C,MAAAE,EADWf,EAAK,iBAAiB,EACZ,CAAC,EACrB,MAAA,CACN,CACC,KAAM,SACN,MAAOe,EAAYtE,EAAmBsE,EAAWX,EAAYK,CAAS,EAAI,UAC1E,SAAU,EAAA,CAEZ,CAAA,CAGD,GAAIT,EAAK,YAAca,IAAmB,MAAO,CAE1C,MAAAG,EADWhB,EAAK,iBAAiB,EACV,CAAC,EACvB,MAAA,CACN,CACC,KAAM,QACN,MAAOgB,EAAcvE,EAAmBuE,EAAaZ,EAAYK,CAAS,EAAI,UAC9E,SAAU,EAAA,CAEZ,CAAA,CAGD,GAAIT,EAAK,YAAcA,EAAK,cAAc,EAAE,SAAW,EAAG,CACzD,MAAMiB,EAAajB,EAAK,sBAAA,EAAwB,CAAC,GAAKA,EAAK,mBAAmB,EAC9E,GAAIiB,EACI,MAAA,CACN,CACC,KAAM,SACN,MAAOxE,EAAmBwE,EAAYb,EAAYK,CAAS,EAC3D,SAAU,EAAA,CAEZ,CACD,CAGG,GAAAT,EAAK,WACR,OAAIa,IAAmB,QAAUb,EAAK,QAAA,IAAc,OAC5C,OAEDA,EACL,cAAA,EACA,IAAKhC,GAAS,CACd,MAAMkD,EAAmBlD,EAAK,oBAAA,GAAyBA,EAAK,kBAAkB,CAAC,EAC/E,GAAI,CAACkD,EACG,MAAA,CACN,KAAM,WACN,WAAYlD,EAAK,QAAQ,EACzB,MAAOvB,EAAmBuB,EAAK,kBAAkBoC,CAAU,EAAGA,EAAYK,CAAS,EACnF,SAAU,EACX,EAOD,GAAI,EAJHS,EAAiB,OAAOhG,EAAAA,WAAW,iBAAiB,GACpDgG,EAAiB,OAAOhG,EAAA,WAAW,kBAAkB,GACrDgG,EAAiB,OAAOhG,EAAAA,WAAW,2BAA2B,GAGvD,MAAA,CACN,KAAM,WACN,WAAY8C,EAAK,QAAQ,EACzB,MAAOvB,EAAmBuB,EAAK,kBAAkBoC,CAAU,EAAGA,EAAYK,CAAS,EACnF,SAAU,EACX,EAGD,MAAMU,EAAanD,EAAK,kBAAkBoC,CAAU,EAAE,WAAW,EAE3DgB,EAAQ3E,EAAmBuB,EAAK,kBAAkBoC,CAAU,EAAGA,EAAYK,CAAS,EACnF,MAAA,CACN,KAAM,WACN,WAAYzC,EAAK,QAAQ,EACzB,MAAAoD,EACA,SAAUD,CACX,CAAA,CACA,EACA,OAAQE,GAAQA,EAAI,QAAU,WAAW,EAGxC,GAAArB,EAAK,UAAW,CAOnB,MAAMsB,EANwCtB,EAAK,cAAgB,EAAA,IAAKA,IAAU,CACjF,KAAM,cACN,MAAOvD,EAAmBuD,EAAMI,EAAYK,CAAS,EACrD,SAAU,EAAA,EACT,EAEqC,OACtC,CAACT,EAAMuB,EAAOC,IAAQ,CAACA,EAAI,KAAK,CAACC,EAAKC,IAAaD,EAAI,QAAUzB,EAAK,OAAS0B,EAAWH,CAAK,CAChG,EACMI,EAAaL,EAAc,KAAMF,GAAUA,EAAM,QAAU,WAAW,EACtEhD,EAASkD,EAAc,OAAQF,GAAUA,EAAM,QAAU,WAAW,EACtE,OAAAhD,EAAO,SAAW,EACdA,EAAO,CAAC,EAAE,MAEX,CACN,CACC,KAAM,QACN,MAAOA,EACP,SAAUuD,CAAA,CAEZ,CAAA,CAGG,GAAA3B,EAAK,iBAKR,OAJiBA,EAAK,qBAAqB,EAEzC,IAAKvE,GAAUgB,EAAmBhB,EAAO2E,EAAYK,CAAS,CAAC,EAC/D,OAAQW,GAAU,OAAOA,GAAU,QAAQ,EACrB,OAAsB,CAACQ,EAAOC,IAAY,CAAC,GAAGD,EAAO,GAAGC,CAAO,EAAG,EAAE,EAGvF,MAAA7E,EAAWoD,EAAW,cAAc,EAAE,cAAc,MAAM,GAAG,EAAE,IAAI,EACzEnD,OAAAA,SAAO,KAAK,IAAID,CAAQ,6BAA6BgD,EAAK,QAAS,CAAA,EAAE,EAC9D,WACR,EAEM8B,EAAyB9G,GAA8C,CAC5E,GAAIA,EAAK,OAAOE,EAAW,WAAA,UAAU,EAC7B,OAAA4G,EAAsB/G,EAAuBC,CAAI,CAAC,EAC/C,GAAAA,EAAK,OAAOE,EAAA,WAAW,aAAa,EAC9C,OAAOF,EAAK,gBAAgB,EAClB,GAAAA,EAAK,OAAOE,EAAA,WAAW,sBAAsB,EAChD,OAAAF,EAAK,sBAAsB,IAAKS,GAAUqG,EAAsBrG,CAAK,CAAC,EACnE,GAAAT,EAAK,OAAOE,EAAA,WAAW,wBAAwB,EAClD,OAAA4G,EAAsBvG,EAAgCP,CAAI,CAAC,EACxD,GAAAA,EAAK,OAAOE,EAAA,WAAW,uBAAuB,EACxD,OAAOwE,EAAyB1E,CAAI,EAG/B,MAAAgC,EAAWhC,EAAK,cAAc,EAAE,cAAc,MAAM,GAAG,EAAE,IAAI,EACnEiC,OAAAA,SAAO,IAAI,IAAID,CAAQ,gCAAgChC,EAAK,YAAa,CAAA,EAAE,EAEpE,WACR,EAEa+G,EAAuB/G,GAA8B,CACjE,MAAM2C,EAAiB3C,EAAK,yBAAyBE,EAAAA,WAAW,cAAc,EAC1E,GAAA,CAACyC,EAAuB,OAAA,KAE5B,MAAMqE,EAAWrE,EAAe,aAAa,EAAE,CAAC,EAC5C,GAAA,CAACqE,EAAiB,OAAA,KAEhB,MAAAC,EAAUD,EAAS,QAAQ,EAC7B,OAAAC,EAAQ,kBACJA,EAAQ,gBAAgB,EAGzB,IACR,EAEavC,EAA4BvC,GACjBA,EAAkB,yBAAyBjC,EAAAA,WAAW,UAAU,EAChD,kBAAkBA,EAAAA,WAAW,kBAAkB,EAEnD,IAAKF,GAAS,CAE1C,MAAAqC,EADiBrC,EAAK,yBAAyBE,EAAAA,WAAW,UAAU,EACpC,QAAQ,EAExCE,EAAsBJ,EAAK,aAAa,EACxCkH,EAAanH,EAAuBK,CAAmB,EACvDoE,EAAQsC,EAAsBI,CAAU,EAEvC,MAAA,CACN,WAAY7E,EACZ,MAAAmC,CACD,CAAA,CACA,GAEoB,CAAC"}
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":"2LAgBMA,MAA0B,QAC1BC,MAAqB,QACrBC,MAAqB,QAEdC,EAA0BC,GAAqB,CACrD,MAAAC,EAASL,EAAoB,IAAII,CAAI,EAC3C,GAAIC,EACI,OAAAA,EAGR,GAAID,EAAK,YAAcE,EAAAA,WAAW,WAAY,CACvC,MAAAC,EAAqBH,EAAK,OAAOE,EAAW,WAAA,UAAU,EAAG,mBAAmB,EAAE,CAAC,GAAG,QAAQ,EAChG,GAAIC,EAAoB,CAEjB,MAAAC,EAD2BD,EAAmB,UAAU,EACT,aAAa,EAClE,GAAIC,IAAwBJ,EACrB,MAAA,IAAI,MAAM,gCAAgC,EAE3C,MAAAK,EAASN,EAAuBK,CAAmB,EACrC,OAAAR,EAAA,IAAII,EAAMK,CAAM,EAC7BA,CAAA,CAGF,MAAAC,EAAiBN,EAAK,OAAOE,EAAW,WAAA,UAAU,EAAG,eAAe,EAAE,CAAC,GAAG,QAAQ,EACxF,GAAII,EAAgB,CAEb,MAAAF,EADuBE,EAAe,UAAU,EACL,aAAa,EAC9D,GAAIF,IAAwBJ,EACrB,MAAA,IAAI,MAAM,gCAAgC,EAE3C,MAAAK,EAASN,EAAuBK,CAAmB,EACrC,OAAAR,EAAA,IAAII,EAAMK,CAAM,EAC7BA,CAAA,CAEF,MAAA,IAAI,MAAM,4CAA4C,CAAA,CAGzC,OAAAT,EAAA,IAAII,EAAMA,CAAI,EAC3BA,CACR,EAEaO,EACZP,GAMU,CACV,MAAMQ,EAAqBR,EAAK,kBAAkBE,EAAAA,WAAW,UAAU,EACnE,OAAAM,EAAmB,SAAW,EAC1BT,EAAuBS,EAAmB,CAAC,CAAC,EAE1BR,EAAK,YAAY,EAAE,QAAQ,EAC5B,KACvBS,GACAA,EAAM,QAAA,IAAcP,EAAAA,WAAW,kBAC/BO,EAAM,YAAcP,EAAW,WAAA,YAC/BO,EAAM,QAAA,IAAcP,EAAAA,WAAW,cACjC,CACD,EAEaQ,EAAyBV,GAAkD,CACvF,MAAMW,EAAaX,EAAK,oBAAoBE,EAAAA,WAAW,UAAU,EACjE,OAAIS,EAAW,OAAOT,EAAW,WAAA,UAAU,EACnCU,EAAsBD,EAAW,eAAgB,EAEjDC,EAAsBD,CAAU,CAEzC,EAEaC,EAAyBC,GAAgD,CAC/E,MAAAZ,EAASJ,EAAe,IAAIgB,CAAe,EACjD,GAAIZ,IAAW,OACP,OAAAA,EAEF,MAAAI,EAASS,EAA0BD,CAAe,EACzC,OAAAhB,EAAA,IAAIgB,EAAiBR,CAAM,EACnCA,CACR,EAEMS,EAA6BD,GAAgD,CAClF,MAAME,EAAWF,EAAgB,UAAU,GAAG,QAAQ,EACtD,GAAIE,GAAYC,EAAAA,eAAe,YAAc,EAAA,gBAAgBD,CAAQ,EAC7D,MAAA,CACN,CACC,KAAM,MACN,MAAOA,EACP,SAAU,EAAA,CAEZ,EAGK,MAAAf,EAAOD,EAAuBc,CAAe,EAInD,GADsBb,EAAK,OAAOE,EAAAA,WAAW,gBAAgB,EAErD,MAAA,YAIR,MAAMe,EAAcjB,EAAK,OAAOE,EAAAA,WAAW,WAAW,EACtD,GAAIe,EAAa,CAChB,GAAIA,EAAY,oBAAoBf,EAAW,WAAA,WAAW,EAClD,MAAA,OAER,GAAIe,EAAY,oBAAoBf,EAAW,WAAA,YAAY,EACnD,MAAA,OACR,CAQD,GAHCF,EAAK,OAAOE,EAAAA,WAAW,cAAc,GACrCF,EAAK,OAAOE,EAAA,WAAW,WAAW,GAClCF,EAAK,OAAOE,EAAAA,WAAW,YAAY,EAE5B,MAAA,UAKR,GAD0BF,EAAK,OAAOE,EAAA,WAAW,aAAa,GAAKF,EAAK,OAAOE,EAAA,WAAW,aAAa,EAE/F,MAAA,SAKR,GAD0BF,EAAK,OAAOE,EAAA,WAAW,aAAa,GAAKF,EAAK,OAAOE,EAAA,WAAW,cAAc,EAEhG,MAAA,SAKR,GADmBF,EAAK,OAAOE,EAAA,WAAW,aAAa,GAAKF,EAAK,OAAOE,EAAA,WAAW,aAAa,EAExF,MAAA,SAIR,MAAMgB,EAAkBlB,EAAK,OAAOE,EAAAA,WAAW,WAAW,EAC1D,GAAIgB,EAgBI,OAfYA,EACjB,oBAAoBhB,EAAAA,WAAW,UAAU,EACzC,kBAAkBA,aAAW,iBAAiB,EAEd,IAAKiB,GAAa,CACnD,MAAMC,EAAaD,EAAS,oBAAoBjB,EAAAA,WAAW,UAAU,EAC/DmB,EAAYd,EAAgCY,CAAQ,EACpDG,EAAoBF,EAAW,qBAAqBlB,EAAAA,WAAW,aAAa,EAC3E,MAAA,CACN,KAAM,WACN,WAAYkB,EAAW,QAAQ,EAC/B,MAAOR,EAAsBS,CAAS,EACtC,SAAUA,EAAU,UAAU,WAAW,GAAK,CAAC,CAACC,CACjD,CAAA,CACA,EAKF,MAAMC,EAAoBvB,EAAK,OAAOE,EAAAA,WAAW,aAAa,EAC9D,GAAIqB,EACI,OAAAX,EAAsBW,EAAkB,eAAgB,EAKhE,GAD2BvB,EAAK,OAAOE,EAAAA,WAAW,wBAAwB,EAClD,CACvB,MAAMsB,EAAYzB,EAAuBC,EAAK,aAAA,CAAe,EACtD,OAAAyB,EAAmBD,EAAU,OAAOtB,EAAAA,WAAW,cAAc,EAAG,gBAAiBsB,CAAS,CAAA,CAIlG,MAAME,EAAgB1B,EAAK,OAAOE,EAAAA,WAAW,SAAS,EACtD,GAAIwB,EACH,OAAOD,EAAmBC,EAAc,QAAQ,EAAG1B,CAAI,EAIxD,MAAM2B,EAAgB3B,EAAK,OAAOE,EAAAA,WAAW,SAAS,EACtD,GAAIyB,EACI,OAAAf,EAAsBe,EAAc,cAAe,EAI3D,MAAMC,EAAoB5B,EAAK,OAAOE,EAAAA,WAAW,aAAa,EAC9D,GAAI0B,EACI,OAAAhB,EAAsBgB,EAAkB,cAAe,EAI/D,MAAMC,EAAqB7B,EAAK,OAAOE,EAAAA,WAAW,cAAc,EAChE,GAAI2B,EACH,OAAOJ,EAAmBI,EAAmB,cAAc,EAAGA,CAAkB,EAIjF,MAAMC,EAAsB9B,EAAK,OAAOE,EAAAA,WAAW,eAAe,EAClE,GAAI4B,EACH,OAAOlB,EAAsBkB,EAAoB,gBAAgB,CAAC,CAAE,EAIrE,MAAMC,EAAmB/B,EAAK,OAAOE,EAAAA,WAAW,YAAY,EAC5D,GAAI6B,EACH,OAAOnB,EAAsBmB,EAAiB,gBAAgB,CAAC,CAAE,EAI5D,MAAAC,EAAWhC,EAAK,cAAc,EAAE,cAAc,MAAM,GAAG,EAAE,IAAI,EACnEiC,OAAAA,SAAO,KAAK,IAAID,CAAQ,wBAAwBhC,EAAK,YAAa,CAAA,EAAE,EAC7D,WACR,EAEakC,EACZC,GAEuBA,EAAkB,yBAAyBjC,EAAAA,WAAW,UAAU,EAChD,kBAAkBA,EAAAA,WAAW,kBAAkB,EAEnD,IAAKF,GAAS,CAC1C,MAAAoC,EAAiBpC,EAAK,cAAc,EACpCqC,GAAkB,IAAM,CAC7B,GAAID,EAAe,OAAOlC,EAAW,WAAA,UAAU,EAC9C,OAAOkC,EAAe,QAAQ,EAE/B,GAAIA,EAAe,OAAOlC,EAAW,WAAA,aAAa,EACjD,OAAOkC,EAAe,eAAe,EAEhC,MAAAJ,EAAWhC,EAAK,cAAc,EAAE,cAAc,MAAM,GAAG,EAAE,IAAI,EACnEiC,OAAAA,SAAO,KAAK,IAAID,CAAQ,8BAA8BI,EAAe,QAAS,CAAA,EAAE,EACzE,YAAA,GACL,EAEGhC,EAAsBJ,EAAK,aAAa,EACxCsC,EAAmBvC,EAAuBK,CAAmB,EAE5D,MAAA,CACN,KAAM,WACN,WAAYiC,EACZ,MAAOE,EAA0BD,CAAgB,EACjD,SAAUE,EAAgCF,CAAgB,EAC1D,YAAaG,EAAgCH,EAAkB,aAAa,EAC5E,aAAcG,EAAgCH,EAAkB,cAAc,CAC/E,CAAA,CACA,GAEoB,CAAC,EAGjBI,EAAuB1C,GAAwB,CACpD,MAAM2C,EAAiB3C,EAAK,OAAOE,EAAAA,WAAW,cAAc,EAC5D,OAAKyC,GAGcA,EAAe,cAAc,EACpB,UAAU,GAAG,QAAa,GAAA,IACtC,WAAW,KAAK,EAJxB,EAKT,EAEMC,EAAmB5C,GAAqC,CAC7D,MAAM2C,EAAiB3C,EAAK,OAAOE,EAAAA,WAAW,cAAc,EACtD2C,EAAaF,EAAe,cAAc,EAC1C5B,EAAW8B,EAAW,UAAU,GAAG,QAAa,GAAA,GAEtD,GAAI9B,IAAa,YACT,MAAA,SAER,GAAIA,IAAa,YACT,MAAA,SAER,GAAIA,IAAa,aACT,MAAA,UAER,GAAIA,IAAa,YACT,MAAA,SAGR,GAAIA,IAAa,YAAa,CAE7B,MAAM+B,EADUH,EAAe,oBAAoBzC,EAAAA,WAAW,UAAU,GAAG,cAAc,GAC1D,OAAOA,EAAAA,WAAW,uBAAuB,EACxE,GAAI,CAAC4C,EACG,MAAA,qBAER,MAAMC,EAAaD,EAAc,oBAAoB5C,EAAAA,WAAW,UAAU,EAC1E,OAAK6C,EAGcA,EAAW,kBAAkB7C,EAAAA,WAAW,kBAAkB,EAC3D,IAAK8C,GAAS,CAC/B,MAAM5B,EAAa4B,EAAK,oBAAoB9C,EAAAA,WAAW,UAAU,EAAG,QAAQ,EACtEmB,EAAY2B,EAAK,aAAa,EAC7B,MAAA,CACN,KAAM,WACN,WAAA5B,EACA,MAAOsB,EAAoBrB,CAAS,EACjCuB,EAAgBvB,CAAS,EACzBkB,EAA0BlB,CAAS,EACtC,SAAU,EACX,CAAA,CACA,EAdO,CAAC,CAcR,CAGF,GAAIN,IAAa,WAAY,CAC5B,MAAMkC,EAAUN,EAAe,oBAAoBzC,EAAAA,WAAW,UAAU,GAAG,cAAc,EACzF,GAAI+C,EAII,MAAA,CACN,CACC,KAAM,QACN,MANmBP,EAAoBO,CAAO,EAC7CL,EAAgBK,CAAO,EACvBV,EAA0BU,CAAO,EAKlC,SAAU,EAAA,CAEZ,EAID,MAAMC,EADiBP,EAAe,oBAAoBzC,EAAAA,WAAW,wBAAwB,GACxD,oBAAoBA,EAAAA,WAAW,cAAc,EAC9E,OAAAgD,GAAgBR,EAAoBQ,CAAY,EAC5C,CACN,CACC,KAAM,QACN,MAAON,EAAgBM,CAAY,EACnC,SAAU,EAAA,CAEZ,EAEM,mBAAA,CAGR,GAAInC,IAAa,UAAW,CACrB,MAAAoC,EAAWN,EAAW,iBAAiB,EACzC,GAAAM,EAAS,OAAS,EAAG,CAGxB,MAAMC,EAFWD,EAAS,CAAC,EACC,cAAc,EACK,IAAKH,IAAU,CAC7D,KAAM,cACN,MAAOvB,EAAmBuB,EAAK,kBAAkBL,CAAc,EAAGA,EAAgB,EAAE,EACpF,SAAU,EAAA,EACT,EACE,GAAAS,EAAO,SAAW,EACd,OAAAA,EAAO,CAAC,EAAE,MAEd,GAAAA,EAAO,OAAS,EACZ,MAAA,CACN,CACC,KAAM,QACN,MAAOA,EACP,SAAU,EAAA,CAEZ,CACD,CAEM,MAAA,kBAAA,CAGR,GAAIrC,IAAa,cAAe,CACzB,MAAAsC,EAAsBV,EAC1B,oBAAoBzC,EAAAA,WAAW,wBAAwB,GACtD,oBAAoBA,aAAW,cAAc,EAC5C,OAAAmD,GAAuBX,EAAoBW,CAAmB,EAC1DT,EAAgBS,CAAmB,EAEpC,sBAAA,CAGF,MAAArB,EAAWhC,EAAK,cAAc,EAAE,cAAc,MAAM,GAAG,EAAE,IAAI,EACnEiC,OAAAA,EAAA,OAAO,KAAK,IAAID,CAAQ,uBAAuBjB,CAAQ,EAAE,EAClD,aACR,EAEawB,EAA6BD,GAAiD,CAEtF,GAAAI,EAAoBJ,CAAgB,EACvC,OAAOM,EAAgBN,CAAgB,EAIxC,MAAMgB,EAA8BhB,EAClC,UACA,EAAA,oBAAoBpC,aAAW,YAAY,EAC7C,GAAIoD,EAA6B,CAChC,MAAMC,EAAgBD,EAA4B,mBAAmBpD,EAAAA,WAAW,aAAa,EAC7F,OAAOQ,EAAsB6C,CAAa,CAAA,CAI3C,MAAMC,EAAyBlB,EAAiB,UAAa,EAAA,oBAAoBpC,aAAW,aAAa,EACzG,GAAIsD,EACH,OAAO9C,EAAsB8C,CAAsB,EAIhD,GAAAlB,EAAiB,YAAa,kBAAkBpC,aAAW,UAAU,EAAE,QAAU,EAAG,CACjF,MAAAuD,EAAWnB,EACf,UAAU,EACV,oBAAoBpC,aAAW,UAAU,EACzC,cAAc,EAChB,OAAOU,EAAsB6C,CAAQ,CAAA,CAItC,MAAMC,EAA0BpB,EAAiB,UAAa,EAAA,oBAAoBpC,aAAW,cAAc,EAC3G,GAAIwD,EAAyB,CAC5B,MAAMC,EAAyB5D,EAC9B2D,EAAwB,oBAAoBxD,aAAW,UAAU,EAAG,cAAc,CACnF,EAGMqB,EAAoBoC,EACxB,UACA,EAAA,oBAAoBzD,aAAW,aAAa,EAC9C,GAAIqB,EACH,OAAOE,EAAmBF,EAAkB,QAAA,EAAWA,EAAmB,CAAA,CAAE,EAG7E,MAAMqC,EAAaD,EACjB,UACA,EAAA,oBAAoBzD,aAAW,uBAAuB,EACxD,GAAI0D,EACH,OAAOrB,EAA0BqB,CAAU,EAO5C,GAJID,EAAuB,YAAczD,EAAAA,WAAW,gBAIhDyD,EAAuB,YAAczD,EAAAA,WAAW,iBACnD,OAAOqC,EAA0BoB,CAAsB,EAGlD3B,MAAAA,EAAWM,EAAiB,cAAc,EAAE,cAAc,MAAM,GAAG,EAAE,IAAI,EAC/EL,OAAAA,SAAO,KAAK,IAAID,CAAQ,uCAAuC2B,EAAuB,YAAa,CAAA,EAAE,EAC9F,WAAA,CAOR,MAAME,EAH+BvB,EACnC,oBAAoBpC,EAAAA,WAAW,UAAU,EACzC,kBAAkBA,aAAW,kBAAkB,EACY,KAAM8C,GAC3DA,EAAK,oBAAoB9C,EAAAA,WAAW,UAAU,GAAG,YAAc,OACtE,EACD,GAAI2D,EAAyB,CACtB,MAAAhB,EAAatC,EAAgCsD,CAAuB,EACxE,OAAO3D,aAAW,aAAa,EAC/B,cAAc,EACT,OAAAuB,EAAmBoB,EAAYgB,CAAuB,CAAA,CAIxD,MAAAC,EAAiBxB,EACrB,oBAAoBpC,EAAAA,WAAW,UAAU,GACxC,oBAAoBA,aAAW,UAAU,EAC5C,GAAI4D,EAAgB,CACnB,MAAMC,EAA0BD,EAC9B,mBAAmB5D,EAAAA,WAAW,gBAAgB,EAC9C,cAAc,EACV8D,EAAmBF,EAAe,gBAAgBC,EAA0B,CAAC,EAC5E,OAAAnD,EAAsBoD,EAAiB,eAAgB,CAAA,CAIzD,MAAAC,EAAmB3B,EAAiB,OAAOpC,EAAAA,WAAW,gBAAgB,EACzEoC,EACAA,EAAiB,UAAU,GAAG,OAAOpC,aAAW,mBAAmB,EAClEoC,EAAiB,aAAa,oBAAoBpC,EAAAA,WAAW,gBAAgB,EAC7E,KAEJ,GAAI+D,EAAkB,CACrB,MAAMC,EAAgBD,EAAiB,oBAAoB/D,EAAAA,WAAW,aAAa,EACnF,GAAIgE,EACH,OAAOxD,EAAsBwD,CAAa,CAC3C,CAGK,MAAAlC,EAAWM,EAAiB,cAAc,EAAE,cAAc,MAAM,GAAG,EAAE,IAAI,EACxEL,OAAAA,EAAAA,OAAA,KAAK,IAAID,CAAQ,4BAA4B,EAE7C,WACR,EAEaQ,EAAmCxC,GAAwB,CACnE,GAAA0C,EAAoB1C,CAAI,EAI3B,OAHuBA,EAAK,OAAOE,EAAAA,WAAW,cAAc,EAC1B,cAAc,EACpB,UAAU,GAAG,QAAa,GAAA,MACrC,cAMlB,MAAM2B,EAAqB7B,EAAK,OAAOE,EAAAA,WAAW,cAAc,EAChE,GAAI2B,EAAoB,CACvB,MAAMO,EAAiBP,EAAmB,oBAAoB3B,EAAAA,WAAW,UAAU,EAC/E,GAAAkC,GAAgB,QAAQ,IAAM,gBAC1B,MAAA,GACG,GAAAA,GAAgB,QAAQ,IAAM,gBACjC,MAAA,GAGR,MAAM+B,EAAiBtC,EAAmB,oBAAoB3B,EAAAA,WAAW,UAAU,EAC7EkE,EAAoBrE,EAAuBoE,EAAe,cAAA,CAAgB,EAChF,OAAO3B,EAAgC4B,CAAiB,CAAA,CAMlD,OAHgBpE,EAAK,yBAAyBE,EAAAA,WAAW,UAAU,EACnC,kBAAkBA,EAAAA,WAAW,kBAAkB,EAE/D,KAAMF,GACLA,EAAK,yBAAyBE,EAAAA,WAAW,UAAU,EACpC,QAAQ,IAEvB,WACRK,EAAgCP,CAAI,EACrC,YAAcE,EAAAA,WAAW,YAEhC,EACP,CACF,EAEauC,EAAkC,CAC9C5B,EACAwD,IACY,CACR,GAAA3B,EAAoB7B,CAAe,EAC/B,MAAA,GAGF,MAAAb,EAAOD,EAAuBc,CAAe,EAE7CgB,EAAqB7B,EAAK,OAAOE,EAAAA,WAAW,cAAc,EAChE,GAAI2B,EAAoB,CACvB,MAAMyC,EAAczC,EAAmB,mBAAmB3B,EAAAA,WAAW,UAAU,EACxE,OAAAuC,EAAgC6B,EAAaD,CAAI,CAAA,CAGzD,MAAMF,EAAiBnE,EAAK,OAAOE,EAAAA,WAAW,UAAU,EACxD,GAAIiE,EAEI,OADUA,EAAe,cAAc,IAAKI,GAAM9B,EAAgC8B,EAAGF,CAAI,CAAC,EACjF,KAAMG,GAAU,CAAC,CAACA,GAASA,IAAU,YAAY,GAAK,GAGvE,MAAMrC,EAAoBnC,EAAK,OAAOE,EAAAA,WAAW,uBAAuB,EACxE,GAAIiC,EAAmB,CAEtB,MAAMsC,EADSC,EAAyBvC,CAAiB,EAC9B,KAAMqC,GAAUA,EAAM,aAAeH,CAAI,EACpE,OAAKI,EAGD,MAAM,QAAQA,EAAY,KAAK,EAC3B,QAEDA,EAAY,OAAS,GALpB,EAKoB,CAG7B,MAAME,EAAuB3E,EAAK,OAAOE,EAAAA,WAAW,gBAAgB,EACpE,GAAIyE,EAEF,OAAAA,EACE,eACA,QAASC,GAAMnC,EAAgCmC,EAAGP,CAAI,CAAC,EACvD,OAAQQ,GAAM,CAAC,CAACA,GAAKA,IAAM,YAAY,EAAE,CAAC,GAAK,aAInD,MAAM3D,EAAkBlB,EAAK,OAAOE,EAAAA,WAAW,WAAW,EAC1D,GAAIgB,EACH,OAAOuB,EAAgCvB,EAAgB,oBAAoBhB,EAAAA,WAAW,UAAU,EAAImE,CAAI,EAGzG,MAAMS,EAAwB9E,EAAK,OAAOE,EAAAA,WAAW,iBAAiB,EACtE,GAAI4E,GACgB9E,EAAK,yBAAyBE,EAAAA,WAAW,UAAU,EACvD,QAAQ,IAAMmE,EAI5B,OAHmB9D,EAAgCuE,CAAqB,EAAE,yBACzE5E,aAAW,aACZ,EACkB,eAAe,EAI7B,MAAA8B,EAAWhC,EAAK,cAAc,EAAE,cAAc,MAAM,GAAG,EAAE,IAAI,EACnEiC,OAAAA,SAAO,IAAI,IAAID,CAAQ,wCAAwChC,EAAK,YAAa,CAAA,EAAE,EAC5E,YACR,EAEM+E,EAAaC,GAAe,CAC3B,MAAAC,EAASD,EAAK,UAAU,EAC9B,GAAI,CAACA,EAAK,SAAS,GAAK,CAACC,EACjB,MAAA,GAEF,MAAAC,EAAOF,EAAK,iBAAiB,EACnC,OAAOC,EAAO,QAAc,IAAA,WAAaC,EAAK,SAAW,CAC1D,EAEazD,EAAqB,CACjC0D,EACAC,EACAC,EAAgB,CAAA,IACU,CAC1B,MAAMtE,EAAWoE,EAAc,eAAe,GAAG,QAAQ,EACzD,GAAIpE,GAAYC,EAAAA,eAAe,YAAc,EAAA,gBAAgBD,CAAQ,EAC7D,MAAA,CACN,CACC,KAAM,MACN,MAAOA,EACP,SAAU,EAAA,CAEZ,EAGK,MAAAiE,EAAOD,EAAUI,CAAa,EAAIA,EAAc,iBAAiB,EAAE,CAAC,EAAIA,EAE9E,GAAIE,EAAM,KAAMC,GAAiBA,IAAiBN,CAAI,EAC9C,MAAA,WAGR,MAAMO,EAAWP,EAAK,aAChB/E,EAASH,EAAe,IAAIyF,CAAQ,EAC1C,GAAItF,IAAW,OACP,OAAAA,EAER,MAAMI,EAASmF,EAAuBR,EAAMI,EAAYC,CAAK,EAC9C,OAAAvF,EAAA,IAAIyF,EAAUlF,CAAM,EAC5BA,CACR,EAEMmF,EAAyB,CAACR,EAAYI,EAAkBC,IAAwC,CAC/F,MAAAI,EAAYJ,EAAM,OAAOL,CAAI,EAE/B,GAAAA,EAAK,QAAQ,IAAM,OACf,MAAA,OAGJ,GAAAA,EAAK,QACD,MAAA,MAGJ,GAAAA,EAAK,YACD,MAAA,UAGJ,GAAAA,EAAK,SACD,MAAA,OAGJ,GAAAA,EAAK,cACD,MAAA,YAGR,GAAIA,EAAK,UAAA,GAAeA,EAAK,mBACrB,MAAA,UAGJ,GAAAA,EAAK,kBACD,MAAA,CACN,CACC,KAAM,iBACN,MAAO,OAAOA,EAAK,iBAAkB,EACrC,SAAU,EAAA,CAEZ,EAGG,GAAAA,EAAK,kBACD,MAAA,CACN,CACC,KAAM,iBACN,MAAO,OAAOA,EAAK,iBAAkB,EACrC,SAAU,EAAA,CAEZ,EAGD,GAAIA,EAAK,SAAA,GAAcA,EAAK,oBACpB,MAAA,SAGJ,GAAAA,EAAK,WACD,MAAA,SAGJ,GAAAA,EAAK,QAAQ,IAAM,SACf,MAAA,SAGJ,GAAAA,EAAK,UACD,MAAA,CACN,CACC,KAAM,QACN,MAAOA,EAAK,iBAAmB,EAAA,IAAKJ,IAAO,CAC1C,KAAM,cACN,MAAOnD,EAAmBmD,EAAGQ,EAAYK,CAAS,EAClD,SAAU,EAAA,EACT,EACF,SAAU,EAAA,CAEZ,EAGG,GAAAT,EAAK,UACD,MAAA,CACN,CACC,KAAM,QACN,MAAOvD,EAAmBuD,EAAK,oBAAoB,EAAII,EAAYK,CAAS,EAC5E,SAAU,EAAA,CAEZ,EAKG,GAAAT,EAAK,WAAY,CACd,MAAAU,EAAmBV,EAAK,mBAAmB,EAE3CW,EADYX,EAAK,aAAa,GACP,KAAMY,GAASA,EAAK,SAAS,EAC1D,GAAID,EACI,MAAA,CACN,CACC,KAAM,QACN,MAAOlE,EACNkE,EAAU,uBAAyBD,EACnCN,EACAK,CACD,EACA,SAAU,EAAA,CAEZ,CACD,CAGD,MAAMI,EAAiBb,EAAK,UAAU,GAAG,QAAQ,EAE3Cc,MAAsB,IAAI,CAC/B,SACA,aACA,YACA,oBACA,aACA,cACA,aACA,cACA,eACA,eACA,gBACA,iBACA,cACA,oBACA,gBAAA,CACA,EAED,GAAId,EAAK,YAAca,GAAkBC,EAAgB,IAAID,CAAc,EACnE,MAAA,CACN,CACC,KAAM,SACN,MAAO,SACP,SAAU,EAAA,CAEZ,EAGD,GAAIb,EAAK,YAAca,IAAmB,SAClC,MAAA,SAGR,GAAIb,EAAK,YAAca,IAAmB,MAAO,CAE1C,MAAAE,EADWf,EAAK,iBAAiB,EACZ,CAAC,EACrB,MAAA,CACN,CACC,KAAM,SACN,MAAOe,EAAYtE,EAAmBsE,EAAWX,EAAYK,CAAS,EAAI,UAC1E,SAAU,EAAA,CAEZ,CAAA,CAGD,GAAIT,EAAK,YAAca,IAAmB,MAAO,CAE1C,MAAAG,EADWhB,EAAK,iBAAiB,EACV,CAAC,EACvB,MAAA,CACN,CACC,KAAM,QACN,MAAOgB,EAAcvE,EAAmBuE,EAAaZ,EAAYK,CAAS,EAAI,UAC9E,SAAU,EAAA,CAEZ,CAAA,CAGD,GAAIT,EAAK,YAAcA,EAAK,cAAc,EAAE,SAAW,EAAG,CACzD,MAAMiB,EAAajB,EAAK,sBAAA,EAAwB,CAAC,GAAKA,EAAK,mBAAmB,EAC9E,GAAIiB,EACI,MAAA,CACN,CACC,KAAM,SACN,MAAOxE,EAAmBwE,EAAYb,EAAYK,CAAS,EAC3D,SAAU,EAAA,CAEZ,CACD,CAGG,GAAAT,EAAK,WACR,OAAIa,IAAmB,QAAUb,EAAK,QAAA,IAAc,OAC5C,OAEDA,EACL,cAAA,EACA,IAAKhC,GAAS,CACd,MAAMkD,EAAmBlD,EAAK,oBAAA,GAAyBA,EAAK,kBAAkB,CAAC,EACzEmD,EAAQ1E,EAAmBuB,EAAK,kBAAkBoC,CAAU,EAAGA,EAAYK,CAAS,EAC1F,GAAI,CAACS,EACG,MAAA,CACN,KAAM,WACN,WAAYlD,EAAK,QAAQ,EACzB,MAAAmD,EACA,SAAU,EACX,EAOD,GAAI,EAJHD,EAAiB,OAAOhG,EAAAA,WAAW,iBAAiB,GACpDgG,EAAiB,OAAOhG,EAAA,WAAW,kBAAkB,GACrDgG,EAAiB,OAAOhG,EAAAA,WAAW,2BAA2B,GAGvD,MAAA,CACN,KAAM,WACN,WAAY8C,EAAK,QAAQ,EACzB,MAAAmD,EACA,SAAU,EACX,EAGD,MAAMC,EAAapD,EAAK,kBAAkBoC,CAAU,EAAE,WAAW,EAE1D,MAAA,CACN,KAAM,WACN,WAAYpC,EAAK,QAAQ,EACzB,MAAAmD,EACA,SAAUC,CACX,CAAA,CACA,EACA,OAAQC,GAAQA,EAAI,QAAU,WAAW,EAGxC,GAAArB,EAAK,UAAW,CAOnB,MAAMsB,EANwCtB,EAAK,cAAgB,EAAA,IAAKA,IAAU,CACjF,KAAM,cACN,MAAOvD,EAAmBuD,EAAMI,EAAYK,CAAS,EACrD,SAAU,EAAA,EACT,EAEqC,OACtC,CAACT,EAAMuB,EAAOC,IAAQ,CAACA,EAAI,KAAK,CAACC,EAAKC,IAAaD,EAAI,QAAUzB,EAAK,OAAS0B,EAAWH,CAAK,CAChG,EACMI,EAAaL,EAAc,KAAMH,GAAUA,EAAM,QAAU,WAAW,EACtE/C,EAASkD,EAAc,OAAQH,GAAUA,EAAM,QAAU,WAAW,EACtE,OAAA/C,EAAO,SAAW,EACdA,EAAO,CAAC,EAAE,MAEX,CACN,CACC,KAAM,QACN,MAAOA,EACP,SAAUuD,CAAA,CAEZ,CAAA,CAGG,GAAA3B,EAAK,iBAKR,OAJiBA,EAAK,qBAAqB,EAEzC,IAAKvE,GAAUgB,EAAmBhB,EAAO2E,EAAYK,CAAS,CAAC,EAC/D,OAAQU,GAAU,OAAOA,GAAU,QAAQ,EACrB,OAAsB,CAACS,EAAOC,IAAY,CAAC,GAAGD,EAAO,GAAGC,CAAO,EAAG,EAAE,EAGvF,MAAA7E,EAAWoD,EAAW,cAAc,EAAE,cAAc,MAAM,GAAG,EAAE,IAAI,EACzEnD,OAAAA,SAAO,KAAK,IAAID,CAAQ,6BAA6BgD,EAAK,QAAS,CAAA,EAAE,EAC9D,WACR,EAEM8B,EAAyB9G,GAA8C,CAC5E,GAAIA,EAAK,OAAOE,EAAW,WAAA,UAAU,EAC7B,OAAA4G,EAAsB/G,EAAuBC,CAAI,CAAC,EAC/C,GAAAA,EAAK,OAAOE,EAAA,WAAW,aAAa,EAC9C,OAAOF,EAAK,gBAAgB,EAClB,GAAAA,EAAK,OAAOE,EAAA,WAAW,sBAAsB,EAChD,OAAAF,EAAK,sBAAsB,IAAKS,GAAUqG,EAAsBrG,CAAK,CAAC,EACnE,GAAAT,EAAK,OAAOE,EAAA,WAAW,wBAAwB,EAClD,OAAA4G,EAAsBvG,EAAgCP,CAAI,CAAC,EACxD,GAAAA,EAAK,OAAOE,EAAA,WAAW,uBAAuB,EACxD,OAAOwE,EAAyB1E,CAAI,EAG/B,MAAAgC,EAAWhC,EAAK,cAAc,EAAE,cAAc,MAAM,GAAG,EAAE,IAAI,EACnEiC,OAAAA,SAAO,IAAI,IAAID,CAAQ,gCAAgChC,EAAK,YAAa,CAAA,EAAE,EAEpE,WACR,EAEa+G,EAAuB/G,GAA8B,CACjE,MAAM2C,EAAiB3C,EAAK,yBAAyBE,EAAAA,WAAW,cAAc,EAC1E,GAAA,CAACyC,EAAuB,OAAA,KAE5B,MAAMqE,EAAWrE,EAAe,aAAa,EAAE,CAAC,EAC5C,GAAA,CAACqE,EAAiB,OAAA,KAEhB,MAAAC,EAAUD,EAAS,QAAQ,EAC7B,OAAAC,EAAQ,kBACJA,EAAQ,gBAAgB,EAGzB,IACR,EAEavC,EAA4BvC,GACjBA,EAAkB,yBAAyBjC,EAAAA,WAAW,UAAU,EAChD,kBAAkBA,EAAAA,WAAW,kBAAkB,EAEnD,IAAKF,GAAS,CAE1C,MAAAqC,EADiBrC,EAAK,yBAAyBE,EAAAA,WAAW,UAAU,EACpC,QAAQ,EAExCE,EAAsBJ,EAAK,aAAa,EACxCkH,EAAanH,EAAuBK,CAAmB,EACvDoE,EAAQsC,EAAsBI,CAAU,EAEvC,MAAA,CACN,WAAY7E,EACZ,MAAAmC,CACD,CAAA,CACA,GAEoB,CAAC"}
@@ -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 r = e.asKind(t.Identifier).getDefinitions()[0]?.getNode();
18
- if (r) {
19
- const a = r.getParent().getLastChild();
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
- (r) => r.getKind() !== t.GreaterThanToken && r.getKind() !== t.CommaToken && r.getKind() !== t.SemicolonToken
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 s = i.asKind(t.TypeLiteral);
71
- if (s)
72
- return s.getFirstChildByKind(t.SyntaxList).getChildrenOfKind(t.PropertySignature).map((I) => {
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 L = f(i.getLastChild());
86
- return c(L.asKind(t.CallExpression).getReturnType(), L);
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 s = d.getSourceFile().getFilePath().split("/").pop();
115
- return m.warn(`[${s}] Unknown identifier name: ${a.getText()}`), "unknown_30";
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(), r = i.getSymbol()?.getName() ?? "";
130
- if (r === "ZodNumber")
129
+ const n = e.asKind(t.CallExpression), i = n.getReturnType(), s = i.getSymbol()?.getName() ?? "";
130
+ if (s === "ZodNumber")
131
131
  return "number";
132
- if (r === "ZodString")
132
+ if (s === "ZodString")
133
133
  return "string";
134
- if (r === "ZodBoolean")
134
+ if (s === "ZodBoolean")
135
135
  return "boolean";
136
- if (r === "ZodBigInt")
136
+ if (s === "ZodBigInt")
137
137
  return "bigint";
138
- if (r === "ZodObject") {
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((s) => {
144
- const g = s.getFirstChildByKind(t.Identifier).getText(), u = s.getLastChild();
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 (r === "ZodArray") {
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 (r === "ZodEnum") {
172
+ if (s === "ZodEnum") {
173
173
  const a = i.getTypeArguments();
174
174
  if (a.length > 0) {
175
- const l = a[0].getProperties().map((s) => ({
175
+ const l = a[0].getProperties().map((r) => ({
176
176
  role: "union_entry",
177
- shape: c(s.getTypeAtLocation(n), n, []),
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 (r === "ZodOptional") {
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: ${r}`), "unknown_zod";
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 s = n.getLastChildByKind(t.TypeReference);
205
- return B(s);
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 s = e.getParent().getFirstChildByKind(t.SyntaxList).getFirstChild();
212
- return y(s);
211
+ const r = e.getParent().getFirstChildByKind(t.SyntaxList).getFirstChild();
212
+ return y(r);
213
213
  }
214
- const r = e.getParent().getFirstChildByKind(t.CallExpression);
215
- if (r) {
216
- const s = f(
217
- r.getFirstChildByKind(t.SyntaxList).getFirstChild()
218
- ), g = s.getParent().getFirstChildByKind(t.TypeReference);
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 = s.getParent().getFirstChildByKind(t.ObjectLiteralExpression);
221
+ const u = r.getParent().getFirstChildByKind(t.ObjectLiteralExpression);
222
222
  if (u)
223
223
  return T(u);
224
- if (s.getKind() === t.CallExpression || s.getKind() === t.IntersectionType)
225
- return T(s);
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: ${s.getKindName()}`), "unknown_3";
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((s) => s.getFirstChildByKind(t.Identifier)?.getText() === "parse");
229
+ const a = e.getFirstChildByKind(t.SyntaxList).getChildrenOfKind(t.PropertyAssignment).find((r) => r.getFirstChildByKind(t.Identifier)?.getText() === "parse");
230
230
  if (a) {
231
- const s = S(a).asKind(t.ArrowFunction).getReturnType();
232
- return c(s, a);
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 s = p.getLastChildByKind(t.GreaterThanToken).getChildIndex(), g = p.getChildAtIndex(s - 1);
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 s = o.getFirstChildByKind(t.TypeReference);
242
- if (s)
243
- return B(s);
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), r = i.asKind(t.CallExpression);
265
- if (r) {
266
- const g = r.getLastChildByKind(t.SyntaxList);
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 s = i.getSourceFile().getFilePath().split("/").pop();
289
- return m.dev(`[${s}] Unknown property string value node ${i.getKindName()}`), "unknown_25";
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 r = e.getAliasSymbol()?.getName();
298
- if (r && V.getInstance().hasExposedModel(r))
297
+ const s = e.getAliasSymbol()?.getName();
298
+ if (s && V.getInstance().hasExposedModel(s))
299
299
  return [
300
300
  {
301
301
  role: "ref",
302
- shape: r,
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 r = i.concat(e);
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, r),
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, r),
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(), s = e.getBaseTypes()?.find((g) => g.isArray());
372
- if (s)
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
- s.getArrayElementType() ?? o,
377
+ r.getArrayElementType() ?? o,
378
378
  n,
379
- r
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, r) : "unknown",
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, r) : "unknown",
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, r),
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: c(o.getTypeAtLocation(n), n, r),
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: c(o.getTypeAtLocation(n), n, r),
457
+ shape: r,
458
458
  optional: !1
459
459
  };
460
- const g = o.getTypeAtLocation(n).isNullable(), u = c(o.getTypeAtLocation(n), n, r);
460
+ const u = o.getTypeAtLocation(n).isNullable();
461
461
  return {
462
462
  role: "property",
463
463
  identifier: o.getName(),
464
- shape: u,
465
- optional: g
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, r),
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
- ), s = l.some((u) => u.shape === "undefined"), g = l.filter((u) => u.shape !== "undefined");
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: s
480
+ optional: r
481
481
  }
482
482
  ];
483
483
  }
484
484
  if (e.isIntersection())
485
- return e.getIntersectionTypes().map((s) => c(s, n, r)).filter((s) => typeof s != "string").reduce((s, g) => [...s, ...g], []);
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
- }, w = (e) => {
488
+ }, L = (e) => {
489
489
  if (e.isKind(t.Identifier))
490
- return w(f(e));
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) => w(i));
494
+ return e.forEachChildAsArray().map((i) => L(i));
495
495
  if (e.isKind(t.PropertyAccessExpression))
496
- return w(S(e));
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 r = i.getType();
507
- return r.isStringLiteral() ? r.getLiteralValue() : null;
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), s = w(l);
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: s
512
+ value: r
513
513
  };
514
514
  }) || [];
515
515
  export {