@apinni/client-ts 0.0.0 â 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +22 -0
- package/dist/cli.js +235 -0
- package/dist/cli.js.map +1 -0
- package/dist/cli.mjs +235 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/index.d.mts +409 -0
- package/dist/index.d.ts +409 -0
- package/dist/index.js +234 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +234 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +85 -9
- package/index.js +0 -0
package/dist/cli.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/utils/build-plugin.ts","../src/core/generation-context/generation-context.ts","../src/core/decorator-registry/internal-handlers/apinni-controller.handler.ts","../src/core/decorator-registry/internal-handlers/apinni-disabled.handler.ts","../src/core/decorator-registry/internal-handlers/apinni-domain.handler.ts","../src/core/decorator-registry/internal-handlers/apinni-endpoint.handler.ts","../src/core/decorator-registry/decorator-registry.ts","../src/core/constants/cache.ts","../src/core/pipeline/modules/compiler-module/utils.ts","../src/core/pipeline/modules/compiler-module/compiler.ts","../src/core/pipeline/modules/decorators-module/decorators.ts","../src/core/pipeline/modules/generator-module/constants.ts","../src/core/pipeline/modules/generator-module/submodules/schema-builder-module/utils.ts","../src/core/pipeline/modules/generator-module/submodules/definitions-resolver-module/definitions-resolver.ts","../src/core/pipeline/modules/generator-module/submodules/schema-builder-module/schema-builder.ts","../src/core/pipeline/modules/generator-module/submodules/types-lookup-module/utils.ts","../src/core/pipeline/modules/generator-module/submodules/types-lookup-module/types-lookup.ts","../src/core/pipeline/modules/generator-module/generator.ts","../src/core/pipeline/modules/importer-module/importer.ts","../src/core/pipeline/modules/plugin-manager-module/plugin-manager.ts","../src/core/constants/decorators.ts","../src/core/pipeline/modules/scanner-module/scanner.ts","../src/core/pipeline/pipeline.ts","../src/core/pipeline/logs-helper.ts","../src/core/pipeline/watcher.ts","../src/main.ts","../src/load-config.ts"],"names":["expressionToValue","expr","SyntaxKind","el","objectLiteralToObject","objExpr","result","prop","pa","nameNode","name","initializer","extractDecoratorArgValue","decorator","callExpr","sourceFile","identifier","localDecl","importSpec","imp","spec","importedFile","importedVar","combinePaths","basePath","path","cleanBasePath","cleanPath","fullPath","join","seen","match","param","normalizeMetadata","metadata","_","v","key","value","status","response","GenerationContext","_GenerationContext","target","cm","m","propertyKey","existing","_a","classMetadata","controller","mergedDomains","method","classMeta","isClassDisabled","isMethodDisabled","ApinniControllerHandler","event","context","args","ApinniDisabledClassHandler","ApinniDisabledMethodHandler","ApinniDomainHandler","stripQuotes","str","extractReturnTypeAndNode","signature","getTypeData","propertyType","node","_b","_c","type","resolveTypeDataByTypeArgumentProperty","typeArgument","property","data","numberProps","p","mapped","statusCode","statusType","ApinniEndpointHandler","query","rest","typeArg","request","responses","DecoratorRegistry","definition","definitions","handler","named","exported","alias","CACHE_PATH","getFileHash","content","crypto","CompilerModule","project","Project","ModuleKind","ModuleResolutionKind","entryFiles","referencedFiles","queue","file","filePath","newFiles","refFile","refPath","compileOptions","force","includeReferenced","filesToProcess","cache","filesToCompile","addedFiles","sf","compiledFiles","cacheContent","fs","err","files","currentHash","DecoratorsModule","params","onProcess","processedDecorators","moduleExports","classDecl","className","classTarget","methodName","PROXY_TYPES","DEFAULT_UTILITY_TYPES","SUPPORTED_JSDOCS_TAGS","extractJSDocsToDefinitionProperties","jsDocs","doc","tag","acc","text","resolveNodeByType","mergeWithJSDocs","initial","Node","DefinitionsResolverModule","parts","refName","refSchema","refBody","schemaName","schemaDef","body","schema","schemaRecord","lines","indentLevel","level","item","prefix","itemsType","properties","required","propLines","indexType","propName","propSchema","isOptional","propType","propJSDoc","propNameFormatted","line","subSchema","subType","intersectionTypes","indent","isBuiltInTypeSymbol","symbol","declarations","decl","resolvePropertyTypeByChecker","checker","getTypeAndNode","inputType","nameIfCustomType","typeAlias","iface","cls","variable","tempAliasName","createdAlias","getTupleElementsMetadata","targetType","tsType","ts","tuple","flag","index","SchemaBuilderModule","types","values","t","wrappedType","entries","entriesWithTypeAndNodes","entry","entriesWithModels","entriesWithInlineTypes","aliasSymbol","targetAliasSymbol","realProject","temporalProject","tempFile","uniqueReferences","map","typeName","mappedReferences","counter","uniqueName","reference","seenSymbols","trace","_d","_e","_f","_g","referenceMapName","referenceName","identitySymbol","clonedSeen","arg","argName","resolver","elementType","tupleTypes","unionTypes","union","isMappedBoolean","filteredBoolean","intersection","isMappedType","propNode","BUILTIN_TYPES","isBuiltInType","resolveTypeofType","typeNode","varDecl","TypeFormatFlags","enumDecl","convertClassToType","typeText","resolved","getter","declarationHandlers","convertInterfaceToString","convertTypeAliasToString","interfaceDecl","extendsClauses","ext","sig","idx","typeAliasDecl","member","memberTypeText","typeParameters","genericText","paramName","constraint","defaultType","TypesLookupModule","infos","info","qName","names","typeNodes","typeDefinitions","processedTypes","typeQueue","currentType","typeInfo","originalName","qualifiedName","h","refReplacements","desc","typeNameNode","decls","targetDecl","original","replacement","ref","typePattern","typeStr","matches","refs","isModelEntry","isInlineEntry","isTypeEntry","isInlineOrTypeEntry","buildApiStructure","endpoints","structure","getIndent","structureToString","methods","endpoint","transformToName","input","segments","part","capitalize","GeneratorModule","config","endpointsMetadata","endpointsMap","endpointsByDomain","domains","disabledDomains","domain","cwd","outputDir","resolve","mkdir","promises","resolvedEndpoints","typesToResolve","modelTypes","normalizedTypes","mappedEndpoints","mappedQuery","mappedRequest","mappedResponses","apiSchema","writeFile","domainEndpoints","ep","referencedNames","toVisit","resp","allSchemas","currentName","currentSchema","collectNested","s","domainSchema","generatedTypes","output","fileName","outputPath","wildcardDisabled","resolvedDisabledDomains","setting","typesDefinitions","supportedMethods","e","getOutputFilePath","outputFile","ImporterModule","alwaysFresh","modules","importPromises","module","error","constants","__require","importPath","PluginManagerModule","pluginMap","dependencies","visited","recursionStack","collectPlugins","plugin","dep","topologicalSort","hookName","shareablePluginsContextMap","_plugin","contexts","sharedContext","INTERNAL_DECORATORS","ScannerModule","externalDecorators","decoratorTypeMap","decoratorNames","fileType","filesWithDecorators","decoratorsToSearch","dec","callback","importMap","Pipeline","options","Listr","task","subTask","pluginsCount","ctx","subCtx","total","nestedContext","nestedTask","processed","PRESET_TIMER","colors","PREFIX","fmtPath","length","logStartup","version","logWatchingStart","logEventStart","icon","logEventComplete","durationSec","metaCount","msg","logInfo","message","logWarn","logError","Watcher","watcher","chokidar","stats","action","start","registeredDecorators","affectedFilesWithDecorators","normalizedPath","affectedPaths","paramsList","targets","updatedModules","filesToImport","meta","duration","referencingPaths","affected","baseFiles","referencingFiles","runApinni","SUPPORTED_CONFIGS","loadApinniConfig","absPath","mod","bundleRequire","program","useExistingBuild"],"mappings":"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","file":"cli.mjs","sourcesContent":["#!/usr/bin/env node\nimport { program } from 'commander';\n\nimport { runApinni } from './index';\nimport { loadApinniConfig } from './load-config';\n\nimport 'reflect-metadata';\n\nprogram\n .version('1.0.0')\n .description('Apinni CLI for generating types with decorators')\n .option(\n '-u, --use-existing-build',\n 'use existing project build instead of building it'\n );\n\nprogram\n .command('generate')\n .description('Generate types with decorators')\n .action(async () => {\n const { useExistingBuild } = program.opts();\n\n try {\n const config = await loadApinniConfig();\n await runApinni(config, {\n useExistingBuild,\n watch: false,\n });\n } catch (error) {\n console.error('Error:', (error as any).message);\n process.exit(1);\n }\n });\n\nprogram\n .command('watch')\n .description('Run in watch mode for generating types with decorators')\n .action(async () => {\n try {\n const config = await loadApinniConfig();\n await runApinni(config, {\n watch: true,\n });\n } catch (error) {\n console.error('Error:', (error as any).message);\n process.exit(1);\n }\n });\n\nprogram\n .exitOverride(err => {\n if (err.code === 'commander.unknownOption') {\n program.outputHelp();\n }\n })\n .parse(process.argv);\n","import {\n ArrayLiteralExpression,\n Decorator,\n Expression,\n Identifier,\n NumericLiteral,\n ObjectLiteralExpression,\n PropertyAssignment,\n StringLiteral,\n SyntaxKind,\n} from 'ts-morph';\n\nimport { ApinniPlugin, Dependency, OverridedContext } from '@interfaces';\n\nexport const buildPluginWithContext =\n <OverridedGlobalContext extends OverridedContext = OverridedContext>() =>\n <\n Dependencies extends Dependency[] = [],\n IsShareable extends boolean = false,\n SharedContext extends [IsShareable] extends [true] ? any : never = [\n IsShareable,\n ] extends [true]\n ? any\n : never,\n >(\n plugin: ApinniPlugin<\n OverridedGlobalContext,\n Dependencies,\n IsShareable,\n SharedContext\n >\n ) =>\n plugin as ApinniPlugin<\n OverridedGlobalContext,\n Dependencies,\n IsShareable,\n SharedContext\n >;\n\nexport const buildPlugin = <\n Dependencies extends Dependency[] = [],\n IsShareable extends boolean = false,\n SharedContext extends [IsShareable] extends [true] ? any : never = [\n IsShareable,\n ] extends [true]\n ? any\n : never,\n>(\n plugin: ApinniPlugin<\n OverridedContext,\n Dependencies,\n IsShareable,\n SharedContext\n >\n) =>\n plugin as ApinniPlugin<\n OverridedContext,\n Dependencies,\n IsShareable,\n SharedContext\n >;\n\nfunction expressionToValue(expr: Expression): any {\n switch (expr.getKind()) {\n case SyntaxKind.StringLiteral:\n return (expr as StringLiteral).getLiteralText(); // unquoted\n case SyntaxKind.NumericLiteral:\n return Number((expr as NumericLiteral).getText());\n case SyntaxKind.TrueKeyword:\n return true;\n case SyntaxKind.FalseKeyword:\n return false;\n case SyntaxKind.ArrayLiteralExpression:\n return (expr as ArrayLiteralExpression)\n .getElements()\n .map(el => expressionToValue(el as Expression));\n case SyntaxKind.ObjectLiteralExpression:\n return objectLiteralToObject(expr as ObjectLiteralExpression);\n default:\n // fallback: identifiers or anything else\n return expr.getText();\n }\n}\n\n// Helper to convert an ObjectLiteralExpression to a JS object\nfunction objectLiteralToObject(objExpr: ObjectLiteralExpression): any {\n const result: any = {};\n objExpr.getProperties().forEach(prop => {\n if (prop.isKind(SyntaxKind.PropertyAssignment)) {\n const pa = prop as PropertyAssignment;\n const nameNode = pa.getNameNode();\n let name: string;\n\n if (nameNode.isKind(SyntaxKind.StringLiteral)) {\n // Strips the quotes\n name = (nameNode as StringLiteral).getLiteralText();\n } else {\n // Identifier or computed name\n name = nameNode.getText();\n }\n\n const initializer = pa.getInitializer();\n if (initializer) {\n result[name] = expressionToValue(initializer);\n }\n }\n // Ignore SpreadAssignment etc. for now\n });\n return result;\n}\n\n// Main function to extract decorator argument value, resolving local and imported variables\nexport function extractDecoratorArgValue<T>(decorator: Decorator): T | null {\n const callExpr = decorator?.getCallExpression();\n const expr = callExpr?.getArguments()[0] as Expression | undefined;\n const sourceFile = decorator.getSourceFile();\n\n if (!expr) return null;\n\n if (expr.getKindName() === 'ObjectLiteralExpression') {\n // Inline object\n return objectLiteralToObject(expr as ObjectLiteralExpression) as T;\n } else if (expr.getKindName() === 'Identifier') {\n // It's a variable, try to resolve it\n const identifier = expr as Identifier;\n // Try to resolve local variable first\n const localDecl = sourceFile.getVariableDeclaration(\n identifier.getText()\n );\n if (localDecl) {\n const initializer = localDecl.getInitializer();\n if (\n initializer &&\n initializer.getKindName() === 'ObjectLiteralExpression'\n ) {\n return objectLiteralToObject(\n initializer as ObjectLiteralExpression\n ) as T;\n }\n }\n // Try to resolve imported variable\n const importSpec = sourceFile\n .getImportDeclarations()\n .flatMap(imp => imp.getNamedImports())\n .find(spec => spec.getName() === identifier.getText());\n if (importSpec) {\n const importDecl = importSpec.getImportDeclaration();\n // Resolve the imported file\n const importedFile = importDecl.getModuleSpecifierSourceFile();\n if (importedFile) {\n const importedVar = importedFile.getVariableDeclaration(\n identifier.getText()\n );\n if (importedVar) {\n const initializer = importedVar.getInitializer();\n if (\n initializer &&\n initializer.getKindName() === 'ObjectLiteralExpression'\n ) {\n return objectLiteralToObject(\n initializer as ObjectLiteralExpression\n ) as T;\n }\n }\n }\n }\n }\n // Fallback: not supported\n return null;\n}\n","import { join } from 'path';\n\nimport {\n ClassMetadata,\n IGenerationContext,\n InternalMethodMetadata,\n MethodMetadata,\n} from '@interfaces';\n\nfunction combinePaths(basePath: string | undefined, path: string): string {\n const cleanBasePath = basePath?.replace(/\\/+$/, '') || '';\n const cleanPath = path?.replace(/^\\/+/, '');\n\n // Join the paths\n const fullPath = join(...[cleanBasePath, cleanPath].filter(Boolean));\n\n // Deduplicate params like /:id/:id/:id â /:id/:id_1/:id_2\n const seen: Record<string, number> = {};\n return fullPath.replace(/:([a-zA-Z0-9_]+)/g, (match, param) => {\n if (seen[param] === undefined) {\n seen[param] = 0;\n return `:${param}`;\n }\n seen[param]++;\n return `:${param}_${seen[param]}`;\n });\n}\n\nconst normalizeMetadata = (metadata: Partial<MethodMetadata>) =>\n Object.fromEntries(\n Object.entries(metadata)\n .filter(([_, v]) => v !== undefined)\n .map(([key, value]) =>\n key === 'responses'\n ? [\n key,\n Object.fromEntries(\n Object.entries(value).map(\n ([status, response]) => [\n status.replace(/[^0-9]/g, ''),\n response,\n ]\n )\n ),\n ]\n : [key, value]\n )\n );\n\nexport class GenerationContext implements IGenerationContext {\n private static instance: GenerationContext | null = null;\n private classMetadata: ClassMetadata[] = [];\n private methodMetadata: InternalMethodMetadata[] = [];\n\n public static getInstance(): GenerationContext {\n if (!GenerationContext.instance) {\n GenerationContext.instance = new GenerationContext();\n }\n return GenerationContext.instance;\n }\n\n public removeMetadataByTarget(target: any) {\n this.classMetadata = this.classMetadata.filter(\n cm => cm.target !== target\n );\n this.methodMetadata = this.methodMetadata.filter(\n m => !(m.target === target)\n );\n }\n\n public unregisterClass(target: any): void {\n this.classMetadata = this.classMetadata.filter(cm => {\n return cm.target !== target;\n });\n }\n\n public unregisterMethod(target: any, propertyKey: string | symbol): void {\n this.methodMetadata = this.methodMetadata.filter(\n m => !(m.target === target && m.propertyKey === propertyKey)\n );\n }\n\n public registerClassMetadata(\n target: any,\n metadata: Partial<ClassMetadata>\n ): void {\n const existing = this.classMetadata.find(cm => cm.target === target);\n\n if (existing) {\n this.classMetadata.splice(this.classMetadata.indexOf(existing), 1, {\n ...existing,\n ...Object.fromEntries(\n Object.entries(metadata).filter(([_, v]) => v !== undefined)\n ),\n });\n } else {\n this.classMetadata.push({ target, ...metadata });\n }\n }\n\n public registerMethodMetadata(\n target: any,\n propertyKey: string | symbol,\n metadata: Partial<MethodMetadata>\n ): void {\n const existing = this.methodMetadata.find(\n m => m.target === target && m.propertyKey === propertyKey\n );\n\n if (existing) {\n this.methodMetadata.splice(\n this.methodMetadata.indexOf(existing),\n 1,\n {\n ...existing,\n ...normalizeMetadata(metadata),\n }\n );\n } else {\n this.methodMetadata.push({\n target,\n propertyKey,\n ...normalizeMetadata(metadata),\n } as InternalMethodMetadata);\n }\n }\n\n public getClassMetadata(): ClassMetadata[] {\n return this.classMetadata;\n }\n\n public getMethodMetadata(): MethodMetadata[] {\n return this.methodMetadata;\n }\n\n public getPreparedData(): InternalMethodMetadata[] {\n const methods = this.methodMetadata.map(metadata => {\n const classMetadata = this.classMetadata.find(controller => {\n return controller.target === metadata.target;\n });\n\n let mergedDomains = {\n ...classMetadata?.disabledDomains,\n };\n\n if (typeof metadata.disabledDomains?.['*'] === 'boolean') {\n mergedDomains = {\n ...metadata.disabledDomains,\n };\n } else {\n mergedDomains = {\n ...mergedDomains,\n ...metadata.disabledDomains,\n };\n }\n\n return {\n ...metadata,\n path: combinePaths(classMetadata?.path, metadata.path),\n domains: classMetadata?.domains,\n ...(Object.keys(mergedDomains).length && {\n disabledDomains: mergedDomains,\n disabledReason:\n metadata.disabledReason ||\n classMetadata?.disabledReason,\n }),\n };\n });\n\n return methods;\n }\n\n public filterEnabled(): void {\n this.methodMetadata = this.methodMetadata.filter(method => {\n const classMeta = this.classMetadata.find(\n cm =>\n cm.target === method.target ||\n cm.target === method.target.prototype?.constructor\n );\n\n const isClassDisabled = classMeta?.disabled ?? false;\n const isMethodDisabled = method.disabled ?? false;\n const isEnabled = !(isClassDisabled || isMethodDisabled);\n\n return isEnabled;\n });\n\n this.classMetadata = this.classMetadata.filter(cm => !cm.disabled);\n }\n\n public clear(): void {\n this.classMetadata = [];\n this.methodMetadata = [];\n }\n}\n","import { DecoratorDefinition } from '@interfaces';\nimport { extractDecoratorArgValue } from '@utils';\n\nimport { ControllerOptions } from '../../../decorators';\nimport { GenerationContext } from '../../generation-context';\n\nexport const ApinniControllerHandler: DecoratorDefinition<'class'>['handler'] =\n (event, { target, decorator }) => {\n if (event !== 'register') {\n return;\n }\n\n const context = GenerationContext.getInstance();\n\n const args = extractDecoratorArgValue<ControllerOptions>(decorator);\n\n context.registerClassMetadata(target, {\n ...args,\n });\n };\n","import { DecoratorDefinition } from '@interfaces';\nimport { extractDecoratorArgValue } from '@utils';\n\nimport { DisabledOptions } from '../../../decorators';\nimport { GenerationContext } from '../../generation-context';\n\nexport const ApinniDisabledClassHandler: DecoratorDefinition<'class'>['handler'] =\n (event, { target, decorator }) => {\n if (event !== 'register') {\n return;\n }\n\n const context = GenerationContext.getInstance();\n\n const args = extractDecoratorArgValue<DisabledOptions>(decorator) || {\n disabled: true,\n };\n\n if ('domains' in args) {\n return context.registerClassMetadata(target, {\n disabledDomains: args.domains,\n disabledReason: args.reason,\n });\n }\n\n context.registerClassMetadata(target, {\n disabledDomains: {\n '*': args.disabled,\n },\n disabledReason: args.reason,\n });\n };\n\nexport const ApinniDisabledMethodHandler: DecoratorDefinition<'method'>['handler'] =\n (event, { target, propertyKey, decorator }) => {\n if (event !== 'register') {\n return;\n }\n\n const context = GenerationContext.getInstance();\n\n const args = extractDecoratorArgValue<DisabledOptions>(decorator) || {\n disabled: true,\n };\n\n if ('domains' in args) {\n return context.registerMethodMetadata(target, propertyKey, {\n disabledDomains: args.domains,\n disabledReason: args.reason,\n });\n }\n\n context.registerMethodMetadata(target, propertyKey, {\n disabledDomains: {\n '*': args.disabled,\n },\n disabledReason: args.reason,\n });\n };\n","import { DecoratorDefinition } from '@interfaces';\nimport { extractDecoratorArgValue } from '@utils';\n\nimport { DomainOptions } from '../../../decorators';\nimport { GenerationContext } from '../../generation-context';\n\nexport const ApinniDomainHandler: DecoratorDefinition<'class'>['handler'] = (\n event,\n { target, decorator }\n) => {\n if (event !== 'register') {\n return;\n }\n\n const context = GenerationContext.getInstance();\n\n const args = extractDecoratorArgValue<DomainOptions>(decorator);\n\n context.registerClassMetadata(target, {\n ...(args && {\n domains: Array.isArray(args.domains)\n ? args.domains\n : [args.domains],\n }),\n });\n};\n","import { Node, Type } from 'ts-morph';\n\nimport { DecoratorDefinition } from '@interfaces';\nimport { extractDecoratorArgValue } from '@utils';\n\nimport { EndpointOptions } from '../../../decorators';\nimport { GenerationContext } from '../../generation-context';\n\nfunction stripQuotes(str: string): string {\n if (!str) return str;\n return str.replace(/^[\"']|[\"']$/g, '');\n}\n\nfunction extractReturnTypeAndNode(\n decorator: Node\n): { type: Type; node: Node } | null {\n const method = decorator.getParentOrThrow();\n const signature = method.getType().getCallSignatures()[0];\n if (!signature) return null;\n\n const returnType = signature.getReturnType();\n return { type: returnType, node: signature.getDeclaration() };\n}\n\ntype TypeData = {\n type: Type;\n node: Node;\n name?: string;\n};\n\nconst getTypeData = (propertyType: Type, node: Node): TypeData | null => {\n const type = propertyType.getProperty('type')?.getTypeAtLocation(node);\n const name = propertyType\n .getProperty('name')\n ?.getTypeAtLocation(node)\n ?.getText();\n\n if (!type) {\n return null;\n }\n\n return { type, node, name: name && stripQuotes(name) };\n};\n\ntype PropertyName = 'query' | 'request' | 'responses';\n\nconst resolveTypeDataByTypeArgumentProperty = <T extends PropertyName>(\n typeArgument: Node,\n property: T\n):\n | (T extends 'responses' ? Record<number, TypeData> | null : TypeData)\n | null => {\n const propertyType = typeArgument\n .getType()\n .getProperty(property)\n ?.getTypeAtLocation(typeArgument);\n\n if (!property || !propertyType) {\n return null;\n }\n\n if (property === 'request' || property === 'query') {\n const data = getTypeData(propertyType, typeArgument);\n\n if (!data) {\n return null;\n }\n\n return data;\n }\n\n const numberProps = propertyType\n .getProperties()\n .filter(p => /^\\d+/.test(p.getName()));\n\n const mapped: Record<number, TypeData> = {};\n\n if (numberProps.length > 0) {\n for (const prop of numberProps) {\n const statusCode = parseInt(prop.getName(), 10);\n const statusType = prop.getTypeAtLocation(typeArgument);\n const data = getTypeData(statusType, typeArgument);\n\n if (!data) {\n continue;\n }\n mapped[statusCode] = data;\n }\n\n if (Object.keys(mapped).length === 0) {\n return null;\n }\n\n return mapped as T extends 'responses'\n ? Record<number, TypeData> | null\n : TypeData;\n }\n\n const data = getTypeData(propertyType, typeArgument);\n\n if (!data) {\n return null;\n }\n\n mapped[200] = data;\n\n return mapped as T extends 'responses'\n ? Record<number, TypeData> | null\n : TypeData;\n};\n\nexport const ApinniEndpointHandler: DecoratorDefinition<'method'>['handler'] = (\n event,\n { target, propertyKey, decorator }\n) => {\n if (event !== 'register') {\n return;\n }\n\n const context = GenerationContext.getInstance();\n\n const args = extractDecoratorArgValue<EndpointOptions>(decorator);\n\n if (!args?.responses) {\n const data = extractReturnTypeAndNode(decorator);\n\n if (data) {\n context.registerMethodMetadata(target, propertyKey, {\n responses: {\n 200: {\n type: data.type,\n node: data.node,\n },\n },\n });\n }\n }\n\n if (args) {\n const { query, ...rest } = args;\n context.registerMethodMetadata(target, propertyKey, {\n ...rest,\n ...(Array.isArray(query)\n ? {\n query: {\n inline: `{ ${query.map(name => `${name}: string;`).join(' ')} }`,\n },\n }\n : {\n query,\n }),\n });\n }\n\n const callExpr = decorator?.getCallExpression();\n const [typeArg] = callExpr?.getTypeArguments() || [];\n\n if (typeArg) {\n const query = resolveTypeDataByTypeArgumentProperty(typeArg, 'query');\n\n const request = resolveTypeDataByTypeArgumentProperty(\n typeArg,\n 'request'\n );\n\n const responses = resolveTypeDataByTypeArgumentProperty(\n typeArg,\n 'responses'\n );\n\n context.registerMethodMetadata(target, propertyKey, {\n ...(query && {\n query,\n }),\n ...(request && {\n request,\n }),\n ...(responses && {\n responses,\n }),\n });\n }\n};\n","import { Decorator } from 'ts-morph';\n\nimport {\n DecoratorDefinition,\n DecoratorVariant,\n HandlerEvent,\n} from '@interfaces';\nimport { ShareableRegistry } from '@interfaces/shared';\n\nimport {\n ApinniControllerHandler,\n ApinniDisabledClassHandler,\n ApinniDisabledMethodHandler,\n ApinniDomainHandler,\n ApinniEndpointHandler,\n} from './internal-handlers';\n\nexport class DecoratorRegistry implements ShareableRegistry {\n private decorators: Map<string, DecoratorDefinition[]> = new Map();\n\n constructor() {\n this.register({\n name: 'ApinniController',\n variant: 'class',\n type: 'compile-time',\n handler: ApinniControllerHandler,\n });\n\n this.register({\n name: 'ApinniDomain',\n variant: 'class',\n type: 'compile-time',\n handler: ApinniDomainHandler,\n });\n\n this.register({\n name: 'ApinniDisabled',\n variant: 'class',\n type: 'compile-time',\n handler: ApinniDisabledClassHandler,\n });\n\n this.register({\n name: 'ApinniDisabled',\n variant: 'method',\n type: 'compile-time',\n handler: ApinniDisabledMethodHandler,\n });\n\n this.register({\n name: 'ApinniEndpoint',\n variant: 'method',\n type: 'compile-time',\n handler: ApinniEndpointHandler,\n });\n }\n\n register<T extends DecoratorVariant>(\n definition: DecoratorDefinition<T>\n ): void {\n const key = `${definition.name}:${definition.variant}`;\n const definitions = this.decorators.get(key) ?? [];\n this.decorators.set(key, [...definitions, definition]);\n }\n\n getRegisteredDecorators() {\n return Array.from(this.decorators.values()).map(([handler]) => ({\n name: handler.name,\n type: handler.type,\n }));\n }\n\n private getOriginalDecoratorName(decorator: Decorator) {\n const sourceFile = decorator.getSourceFile();\n\n for (const imp of sourceFile.getImportDeclarations()) {\n for (const named of imp.getNamedImports()) {\n const exported = named.getNameNode().getText();\n const alias = named.getAliasNode()?.getText() ?? exported;\n\n if (decorator.getName() === alias) {\n return exported;\n }\n }\n }\n\n return decorator.getName();\n }\n\n processEvent(\n event: HandlerEvent,\n {\n target,\n decorator,\n propertyKey,\n }: {\n target: any;\n decorator: Decorator;\n propertyKey?: string | symbol;\n }\n ): boolean {\n const name = this.getOriginalDecoratorName(decorator);\n const variant = propertyKey ? 'method' : 'class';\n const key = `${name}:${variant}`;\n\n const definitions =\n this.decorators.get(key) || this.decorators.get(`${name}:class`);\n\n if (!definitions) {\n return false;\n }\n\n definitions.forEach(definition =>\n definition.handler(event, {\n target,\n decorator,\n propertyKey,\n })\n );\n\n return true;\n }\n}\n","export const CACHE_PATH = '/.apinni/.build-cache.json';\n","import crypto from 'crypto';\n\nexport const getFileHash = (content: string) => {\n return crypto.createHash('sha256').update(content).digest('hex');\n};\n","import fs from 'fs/promises';\nimport { join } from 'path';\nimport {\n ModuleKind,\n ModuleResolutionKind,\n Project,\n SourceFile,\n} from 'ts-morph';\n\nimport { CACHE_PATH } from '../../../constants/cache';\nimport { getFileHash } from './utils';\n\nexport class CompilerModule {\n private project: Project;\n\n constructor(project?: Project) {\n this.project =\n project ??\n new Project({\n tsConfigFilePath: join(process.cwd(), 'tsconfig.json'),\n skipAddingFilesFromTsConfig: true,\n skipFileDependencyResolution: true,\n compilerOptions: {\n module: ModuleKind.CommonJS,\n moduleResolution: ModuleResolutionKind.Node16,\n outDir: './.apinni/build',\n },\n });\n }\n\n /**\n * Recursively collect all referenced files starting from entry files, skipping .d.ts.\n * @param entryFiles Initial files to start collection from.\n * @returns Map of file paths to SourceFile objects.\n */\n public getReferencedFiles(entryFiles: SourceFile[]): SourceFile[] {\n const referencedFiles = new Map<string, SourceFile>();\n const queue = [...entryFiles];\n\n while (queue.length > 0) {\n const file = queue.pop()!;\n const filePath = file.getFilePath();\n\n if (referencedFiles.has(filePath) || filePath.endsWith('.d.ts')) {\n continue;\n }\n\n referencedFiles.set(filePath, file);\n\n const newFiles = file.getReferencedSourceFiles();\n\n queue.push(\n ...newFiles.filter(refFile => {\n const refPath = refFile.getFilePath();\n return !(\n referencedFiles.has(refPath) ||\n refPath.endsWith('.d.ts')\n );\n })\n );\n }\n\n return Array.from(referencedFiles.values());\n }\n\n /**\n * Compile the provided files, optionally including referenced files and respecting cache.\n * Only changed files (based on content hash) are compiled unless force is true.\n * @param entryFiles Files to compile (or start referencing from).\n * @param compileOptions Additional options.\n */\n public async compileFiles(\n entryFiles: SourceFile[],\n compileOptions: {\n /** Force compilation of all files, ignoring cache */\n force?: boolean;\n /** Include and compile referenced files recursively */\n includeReferenced?: boolean;\n } = {}\n ): Promise<number> {\n const { force = false, includeReferenced = true } = compileOptions;\n\n const filesToProcess = includeReferenced\n ? this.getReferencedFiles(entryFiles)\n : entryFiles;\n\n const cache = await this.loadCache();\n const filesToCompile = force\n ? filesToProcess\n : this.extractChangedFiles(filesToProcess, cache);\n\n if (filesToCompile.length === 0) {\n return 0;\n }\n\n // Add files to project (use createSourceFile to copy content, as in original)\n const addedFiles = filesToCompile.map(file =>\n this.project.createSourceFile(\n file.getFilePath(),\n file.getFullText(),\n { overwrite: true }\n )\n );\n\n await Promise.all(this.project.getSourceFiles().map(sf => sf.emit()));\n\n const compiledFiles = filesToCompile.length;\n\n // Update cache with new hashes\n filesToCompile.forEach(file => {\n const filePath = file.getFilePath();\n cache[filePath] = getFileHash(file.getFullText());\n });\n\n // Clean up\n addedFiles.forEach(file => this.project.removeSourceFile(file));\n\n await this.saveCache(cache);\n\n return compiledFiles;\n }\n\n /**\n * Load the cache from file.\n */\n private async loadCache(): Promise<Record<string, string>> {\n try {\n const cacheContent = await fs.readFile(\n join(process.cwd(), CACHE_PATH),\n 'utf-8'\n );\n return JSON.parse(cacheContent);\n } catch (err: any) {\n if (err.code === 'ENOENT') {\n return {};\n }\n throw err;\n }\n }\n\n /**\n * Save the cache to file.\n */\n private async saveCache(cache: Record<string, string>): Promise<void> {\n await fs.writeFile(\n join(process.cwd(), CACHE_PATH),\n JSON.stringify(cache, null, 2),\n 'utf8'\n );\n }\n\n /**\n * Filter files that have changed based on cache hashes.\n * Updates cache in-place for new/changed files.\n */\n private extractChangedFiles(\n files: SourceFile[],\n cache: Record<string, string>\n ): SourceFile[] {\n return files.filter(file => {\n const filePath = file.getFilePath();\n const currentHash = getFileHash(file.getFullText());\n\n return cache[filePath] !== currentHash;\n });\n }\n}\n","import { Decorator, SourceFile } from 'ts-morph';\n\nimport { DecoratorType } from '@interfaces';\n\nexport class DecoratorsModule {\n constructor() {}\n\n public processDecorators(\n params: {\n filesWithDecorators: Array<{\n sourceFile: SourceFile;\n type: DecoratorType;\n }>;\n modules: Map<string, any>;\n },\n onProcess: (args: {\n target: any;\n propertyKey?: string | symbol;\n decorator: Decorator;\n sourceFile: SourceFile;\n }) => boolean\n ): number {\n let processedDecorators = 0;\n\n for (const { sourceFile, type } of params.filesWithDecorators) {\n if (\n type === 'run-time' &&\n !params.modules.get(sourceFile.getFilePath())\n ) {\n continue;\n }\n\n const moduleExports = params.modules.get(sourceFile.getFilePath());\n\n for (const classDecl of sourceFile.getClasses()) {\n const className = classDecl.getName();\n const classTarget =\n type === 'run-time'\n ? (className && moduleExports[className]) ||\n moduleExports.default\n : `${sourceFile.getFilePath()}_${className}`;\n\n if (!classTarget) {\n continue;\n }\n\n for (const decorator of classDecl.getDecorators()) {\n const processed = onProcess({\n target: classTarget,\n decorator,\n sourceFile,\n });\n\n if (processed) {\n processedDecorators++;\n }\n }\n\n for (const method of classDecl.getMethods()) {\n const methodName = method.getName();\n\n for (const decorator of method.getDecorators()) {\n const processed = onProcess({\n target: classTarget,\n propertyKey: methodName,\n decorator,\n sourceFile,\n });\n\n if (processed) {\n processedDecorators++;\n }\n }\n }\n }\n }\n\n return processedDecorators;\n }\n}\n","export const PROXY_TYPES = `type IApi = Record<\n string,\n Partial<\n Record<\n ApiMethod,\n {\n request?: unknown;\n responses?: Record<number, unknown>;\n query?: unknown;\n }\n >\n >\n>;\n\nexport type BuildApi<T extends IApi> = T;`;\n\nexport const DEFAULT_UTILITY_TYPES = `type _ApiPaths<TApi extends IApi> = Extract<keyof TApi, string>;\n\ntype _ApiAvailableMethods<\n TApi extends IApi,\n T extends _ApiPaths<TApi>\n> = keyof TApi[T] & ApiMethod;\n\ntype _ApiResponses<\n TApi extends IApi,\n T extends _ApiPaths<TApi>,\n M extends _ApiAvailableMethods<TApi, T> = _ApiAvailableMethods<TApi, T>\n> = TApi[T][M] extends { responses: infer R } ? R : never;\n\ntype ExtractStatusCodeStrings<\n TApi extends IApi,\n T extends _ApiPaths<TApi>,\n M extends _ApiAvailableMethods<TApi, T>\n> = _ApiResponses<TApi, T, M> extends infer Responses\n ? Responses extends Record<number, any>\n ? \\`\\${keyof Responses & number}\\`\n : never\n : never;\n\ntype _ApiResponsesByStatus<\n TApi extends IApi,\n T extends _ApiPaths<TApi>,\n M extends _ApiAvailableMethods<TApi, T> = _ApiAvailableMethods<TApi, T>,\n S extends ExtractStatusCodeStrings<TApi, T, M> = ExtractStatusCodeStrings<\n TApi,\n T,\n M\n >\n> = _ApiResponses<TApi, T, M> extends infer Responses\n ? Responses extends Record<number, any>\n ? S extends \\`\\${infer Index extends keyof Responses & number}\\`\n ? Responses[Index]\n : Responses[keyof Responses]\n : never\n : never;\n\n// Extract request type\ntype _ApiRequest<\n TApi extends IApi,\n T extends _ApiPaths<TApi>,\n M extends _ApiAvailableMethods<TApi, T> = _ApiAvailableMethods<TApi, T>\n> = TApi[T][M] extends { request: infer R } ? R : never;\n\n// Extract query type\ntype _ApiQuery<\n TApi extends IApi,\n T extends _ApiPaths<TApi>,\n M extends _ApiAvailableMethods<TApi, T> = _ApiAvailableMethods<TApi, T>\n> = TApi[T][M] extends { query: infer Q } ? Q : never;\n\ntype MakePathSegments<T extends string> =\n T extends \\`\\${infer Start}/:\\${infer Param}\\`\n ? Param extends \\`\\${infer _}/\\${infer Rest}\\`\n ? [\\`\\${Start}/\\`, string, ...MakePathSegments<\\`/\\${Rest}\\`>]\n : [\\`\\${Start}/\\`, string]\n : [T];\n\ntype ExtractParams<T extends string> = T extends \\`\\${infer _}/:\\${infer Param}\\`\n ? Param extends \\`\\${infer Name}/\\${infer Rest}\\`\n ? {\n [key in Name | keyof ExtractParams<\\`/\\${Rest}\\`>]: string;\n }\n : {\n [key in Param]: string;\n }\n : unknown;\n\ntype TypedJoin<T extends Array<string>> = T extends [\n infer First,\n ...infer Rest extends Array<string>\n]\n ? \\`\\${First & string}\\${TypedJoin<Rest>}\\`\n : \"\";\n\ntype ResolveArgs<\n TApi extends IApi,\n P extends _ApiPaths<TApi>,\n M extends _ApiAvailableMethods<TApi, P> = _ApiAvailableMethods<TApi, P>\n> = keyof ExtractParams<P> extends never\n ? _ApiQuery<TApi, P, M> extends never\n ? []\n : [{ query: _ApiQuery<TApi, P, M> }]\n : _ApiQuery<TApi, P, M> extends never\n ? [{ params: ExtractParams<P> }]\n : [{ params: ExtractParams<P>; query: _ApiQuery<TApi, P, M> }];\n\ntype _ApiPathBuilder<\n TApi extends IApi,\n P extends _ApiPaths<TApi>,\n M extends _ApiAvailableMethods<TApi, P> = _ApiAvailableMethods<TApi, P>\n> = ResolveArgs<TApi, P, M> extends []\n ? () => \\`\\${TypedJoin<MakePathSegments<P>>}\\`\n : (\n args: ResolveArgs<TApi, P, M>[0]\n ) => \\`\\${TypedJoin<MakePathSegments<P>>}\\${_ApiQuery<\n TApi,\n P,\n M\n > extends never\n ? \"\"\n : \"\" | \\`?\\${string}\\`}\\`;\n\n// Public API path keys (e.g., \"/users/:id\")\nexport type ApiPaths = _ApiPaths<Api>;\nexport type ApiPathsProxy<T extends IApi> = _ApiPaths<T>;\n\n// Get methods available on a path\nexport type ApiAvailableMethods<T extends ApiPaths> = _ApiAvailableMethods<\n Api,\n T\n>;\nexport type ApiAvailableMethodsProxy<\n A extends IApi,\n T extends ApiPathsProxy<A>\n> = _ApiAvailableMethods<A, T>;\n\n// Extract responses type\nexport type ApiResponses<\n T extends ApiPaths,\n M extends ApiAvailableMethods<T> = ApiAvailableMethods<T>\n> = _ApiResponses<Api, T, M>;\nexport type ApiResponsesProxy<\n A extends IApi,\n T extends ApiPathsProxy<A>,\n M extends ApiAvailableMethodsProxy<A, T> = ApiAvailableMethodsProxy<A, T>\n> = _ApiResponses<A, T, M>;\n\n// Extract response type by status\nexport type ApiResponsesByStatus<\n T extends ApiPaths,\n M extends ApiAvailableMethods<T> = ApiAvailableMethods<T>,\n S extends ExtractStatusCodeStrings<Api, T, M> = ExtractStatusCodeStrings<\n Api,\n T,\n M\n >\n> = _ApiResponsesByStatus<Api, T, M, S>;\nexport type ApiResponsesByStatusProxy<\n A extends IApi,\n T extends ApiPathsProxy<A>,\n M extends ApiAvailableMethodsProxy<A, T> = ApiAvailableMethodsProxy<A, T>,\n S extends ExtractStatusCodeStrings<A, T, M> = ExtractStatusCodeStrings<\n A,\n T,\n M\n >\n> = _ApiResponsesByStatus<A, T, M, S>;\n\n// Extract request type\nexport type ApiRequest<\n T extends ApiPaths,\n M extends ApiAvailableMethods<T> = ApiAvailableMethods<T>\n> = _ApiRequest<Api, T, M>;\nexport type ApiRequestProxy<\n A extends IApi,\n T extends ApiPathsProxy<A>,\n M extends ApiAvailableMethodsProxy<A, T> = ApiAvailableMethodsProxy<A, T>\n> = _ApiRequest<A, T, M>;\n\n// Extract query type\nexport type ApiQuery<\n T extends ApiPaths,\n M extends ApiAvailableMethods<T> = ApiAvailableMethods<T>\n> = _ApiQuery<Api, T, M>;\nexport type ApiQueryProxy<\n A extends IApi,\n T extends ApiPathsProxy<A>,\n M extends ApiAvailableMethodsProxy<A, T> = ApiAvailableMethodsProxy<A, T>\n> = _ApiQuery<A, T, M>;\n\nexport type ApiPathBuilder<\n P extends ApiPaths,\n M extends ApiAvailableMethods<P> = ApiAvailableMethods<P>\n> = _ApiPathBuilder<Api, P, M>;\nexport type ApiPathBuilderProxy<\n A extends IApi,\n P extends ApiPathsProxy<A>,\n M extends ApiAvailableMethodsProxy<A, P> = ApiAvailableMethodsProxy<A, P>\n> = _ApiPathBuilder<A, P, M>;\n`;\n","import { JSDoc, Node, Type } from 'ts-morph';\n\nimport { SchemaDefinitionProperties } from '../../types';\n\nexport const SUPPORTED_JSDOCS_TAGS = [\n 'description',\n 'example',\n 'deprecated',\n 'default',\n] as const satisfies Array<keyof SchemaDefinitionProperties>;\n\ntype DefinitionProperties = Record<keyof SchemaDefinitionProperties, string>;\n\nexport const extractJSDocsToDefinitionProperties = (\n jsDocs: Array<JSDoc>\n): DefinitionProperties => {\n const docs = jsDocs\n .flatMap(doc => [\n doc.getCommentText(),\n ...doc\n .getTags()\n .filter(tag =>\n SUPPORTED_JSDOCS_TAGS.includes(\n tag.getTagName() as Exclude<\n keyof SchemaDefinitionProperties,\n 'global'\n >\n )\n )\n .map(tag => tag.getStructure()),\n ])\n .filter(Boolean);\n\n return docs.reduce((acc, doc) => {\n const property =\n typeof doc === 'string'\n ? 'global'\n : (doc?.tagName as keyof SchemaDefinitionProperties);\n const text = typeof doc === 'string' ? doc : doc?.text;\n\n return {\n ...acc,\n [property]: acc[property] ? `${acc[property]}\\n${text}` : text,\n };\n }, {} as DefinitionProperties);\n};\n\nexport const resolveNodeByType = (type: Type) => {\n const node =\n type.getAliasSymbol()?.getDeclarations()[0] ||\n type.getSymbol()?.getDeclarations()[0];\n return node;\n};\n\nexport const mergeWithJSDocs = <T>(initial: T, type: Type) => {\n const node = resolveNodeByType(type);\n\n return {\n ...initial,\n ...(Node.isJSDocable(node) &&\n extractJSDocsToDefinitionProperties(node.getJsDocs())),\n };\n};\n","import {\n AllOfSchema,\n AnyOfSchema,\n ArraySchema,\n EnumSchema,\n JsonSchema,\n ObjectSchema,\n TypesSchema,\n} from '../../types';\nimport { SUPPORTED_JSDOCS_TAGS } from '../schema-builder-module/utils';\n\nexport class DefinitionsResolverModule {\n generate(data: Pick<TypesSchema, 'schema' | 'refs'>): string {\n const parts: string[] = [];\n\n // Handle references\n for (const [refName, refSchema] of Object.entries(data.refs)) {\n const refBody = this.schemaToTypeInternal(refSchema, 0);\n const jsDocs = this.schemaToJSDoc(refSchema);\n if (jsDocs) {\n parts.push(jsDocs);\n }\n parts.push(`export type ${refName} = ${refBody};`);\n }\n\n // Handle main schema entries\n for (const [schemaName, schemaDef] of Object.entries(data.schema)) {\n const body = this.schemaToTypeInternal(schemaDef, 0);\n const jsDocs = this.schemaToJSDoc(schemaDef);\n if (jsDocs) {\n parts.push(jsDocs);\n }\n parts.push(`export type ${schemaName} = ${body};`);\n }\n\n return parts.join('\\n');\n }\n\n private schemaToJSDoc(schema: JsonSchema | undefined): string {\n if (!schema || typeof schema !== 'object') return '';\n\n const schemaRecord = schema as unknown as Record<string, unknown>;\n const lines: string[] = [];\n\n if (schemaRecord.global) {\n lines.push(` * ${String(schemaRecord.global)}`);\n }\n\n Object.keys(schemaRecord)\n .filter(key =>\n SUPPORTED_JSDOCS_TAGS.includes(\n key as (typeof SUPPORTED_JSDOCS_TAGS)[number]\n )\n )\n .forEach(key => {\n lines.push(` * @${key} ${String(schemaRecord[key])}`);\n });\n\n return lines.length ? `/**\\n${lines.join('\\n')}\\n */` : '';\n }\n\n private schemaToTypeInternal(\n schema: JsonSchema | undefined,\n indentLevel: number\n ): string {\n if (!schema || typeof schema !== 'object') return 'any';\n\n if (schema.type === 'ref' && schema.name) {\n return schema.name;\n }\n\n if (schema.type === 'string') {\n return schema.const ? `'${schema.const}'` : 'string';\n }\n\n if (schema.type === 'number') {\n return schema.const ? `${schema.const}` : 'number';\n }\n\n if (schema.type === 'boolean') {\n return schema.const ? `${schema.const}` : 'boolean';\n }\n\n if (schema.type === 'null') {\n return 'null';\n }\n\n if (Object.keys(schema).length === 0) {\n return 'any';\n }\n\n if (schema.type === 'array') {\n return this.handleArraySchema(schema, indentLevel);\n }\n\n if (schema.type === 'object') {\n return this.handleObjectSchema(schema, indentLevel);\n }\n\n if (schema.type === 'enum' && schema.values) {\n return this.handleEnumSchema(schema);\n }\n\n if ('anyOf' in schema && schema.anyOf) {\n return this.handleUnionSchema(schema, indentLevel);\n }\n\n if ('allOf' in schema && schema.allOf) {\n return this.handleIntersectionSchema(schema, indentLevel);\n }\n\n if ('not' in (schema as unknown as Record<string, unknown>)) {\n return 'never';\n }\n\n return 'any';\n }\n\n private getIndent(level: number): string {\n return ' '.repeat(level);\n }\n\n private handleArraySchema(\n schema: ArraySchema,\n indentLevel: number\n ): string {\n if (Array.isArray(schema.items)) {\n const itemsTypes = schema.items\n .map((item: any) => {\n const type = this.schemaToTypeInternal(item, indentLevel);\n\n if (item.optional) {\n return item.name\n ? `${item.name}?: ${type}`\n : `${type}?`;\n }\n\n const prefix = item.name ? `${item.name}: ` : '';\n\n if (item.rest) {\n return `...${prefix}(${type})[]`;\n }\n\n return `${prefix}${type}`;\n })\n .join(', ');\n return `[${itemsTypes}]`;\n }\n const itemsType = this.schemaToTypeInternal(schema.items, indentLevel);\n const needsParens =\n itemsType.includes(' & ') || itemsType.includes(' | ');\n return needsParens ? `(${itemsType})[]` : `${itemsType}[]`;\n }\n\n private handleObjectSchema(\n schema: ObjectSchema,\n indentLevel: number\n ): string {\n const properties = schema.properties || {};\n const required = new Set(schema.required || []);\n const propLines: string[] = [];\n\n // Handle indexed properties (from index signatures)\n if (schema.indexedProperties) {\n const indexType = this.schemaToTypeInternal(\n schema.indexedProperties,\n indentLevel + 1\n );\n propLines.push(\n `${this.getIndent(indentLevel + 1)}[key: string]: ${indexType};`\n );\n }\n\n for (const [propName, propSchema] of Object.entries(properties) as [\n string,\n any,\n ][]) {\n const isOptional = !required.has(propName);\n const propType = this.schemaToTypeInternal(\n propSchema,\n indentLevel + 1\n );\n const propJSDoc = this.schemaToJSDoc(propSchema);\n const propNameFormatted = /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(\n propName\n )\n ? propName\n : `\"${propName}\"`;\n propJSDoc\n .split('\\n')\n .filter(Boolean)\n .forEach(line =>\n propLines.push(`${this.getIndent(indentLevel + 1)}${line}`)\n );\n propLines.push(\n `${this.getIndent(indentLevel + 1)}${propNameFormatted}${isOptional ? '?' : ''}: ${propType};`\n );\n }\n\n const propsStr = propLines.join('\\n');\n return `{\\n${propsStr}\\n${this.getIndent(indentLevel)}}`;\n }\n\n private handleEnumSchema(schema: EnumSchema): string {\n return schema.values\n .map((value: any) =>\n typeof value === 'string' ? `\"${value}\"` : value\n )\n .join(' | ');\n }\n\n private handleUnionSchema(\n schema: AnyOfSchema,\n indentLevel: number\n ): string {\n const unionTypes = schema.anyOf.map(subSchema => {\n const subType = this.schemaToTypeInternal(subSchema, indentLevel);\n const needsParens =\n ('anyOf' in (subSchema as unknown as Record<string, unknown>) &&\n Array.isArray((subSchema as Partial<AnyOfSchema>).anyOf)) ||\n subSchema.type === 'complex';\n return needsParens ? `(${subType})` : subType;\n });\n return unionTypes.join(' | ');\n }\n\n private handleIntersectionSchema(\n schema: AllOfSchema,\n indentLevel: number\n ): string {\n const intersectionTypes = schema.allOf.map(subSchema => {\n const subType = this.schemaToTypeInternal(subSchema, indentLevel);\n // Only add parentheses for union or generic types, not objects\n const needsParens =\n 'anyOf' in (subSchema as unknown as Record<string, unknown>) &&\n Array.isArray((subSchema as Partial<AnyOfSchema>).anyOf);\n return needsParens ? `(${subType})` : subType;\n });\n const indent = this.getIndent(indentLevel);\n return intersectionTypes.join(` &\\n${indent}`);\n }\n}\n","import {\n Node,\n Project,\n SourceFile,\n Symbol,\n SyntaxKind,\n ts,\n Type,\n TypeChecker,\n} from 'ts-morph';\n\nimport {\n AllOfSchema,\n AnyOfSchema,\n AnySchema,\n ArrayItemMeta,\n ArraySchema,\n BooleanSchema,\n EnumSchema,\n JsonSchema,\n NeverSchema,\n NullSchema,\n NumberSchema,\n ObjectSchema,\n SchemaBuilderEntry,\n StringSchema,\n TypesSchema,\n UndefinedSchema,\n} from '../../types';\nimport {\n extractJSDocsToDefinitionProperties,\n mergeWithJSDocs,\n resolveNodeByType,\n} from './utils';\n\nconst isBuiltInTypeSymbol = (symbol?: Symbol) => {\n const declarations = symbol?.getDeclarations() || [];\n if (!declarations.length) return false;\n\n return declarations.some(decl => {\n const sourceFile = decl.getSourceFile();\n const filePath = sourceFile.getFilePath();\n\n // Built-ins are typically from the lib*.d.ts files (e.g. lib.es5.d.ts)\n return filePath.includes('node_modules/typescript/lib/lib');\n });\n};\n\nfunction resolvePropertyTypeByChecker(\n checker: TypeChecker,\n prop: Symbol,\n node?: Node\n) {\n if (!node) {\n return null;\n }\n\n return checker.getTypeOfSymbolAtLocation(prop, node);\n}\n\nexport function getTypeAndNode(\n sourceFile: SourceFile | null,\n inputType: string,\n nameIfCustomType?: string\n) {\n if (!sourceFile) {\n return null;\n }\n const typeAlias = sourceFile.getTypeAlias(inputType);\n if (typeAlias) {\n return { type: typeAlias.getType(), node: typeAlias.getTypeNode() };\n }\n\n const iface = sourceFile.getInterface(inputType);\n if (iface) {\n return { type: iface.getType(), node: iface };\n }\n\n const cls = sourceFile.getClass(inputType);\n if (cls) {\n return { type: cls.getType(), node: cls };\n }\n\n const variable = sourceFile.getVariableDeclaration(inputType);\n if (variable && variable.getTypeNode()) {\n return { type: variable.getType(), node: variable.getTypeNode() };\n }\n\n const tempAliasName = `Internal_${nameIfCustomType || Date.now()}`;\n\n const createdAlias = sourceFile.addTypeAlias({\n name: tempAliasName,\n type: inputType,\n });\n\n if (createdAlias) {\n return {\n type: createdAlias.getType(),\n node: createdAlias.getTypeNode(),\n };\n }\n\n return null;\n}\n\nconst getTupleElementsMetadata = (type: Type) => {\n const targetType = type.getTargetType(); // It gonna unwrap everything to [?, ?, ..]\n\n if (!targetType) {\n return null;\n }\n\n const tsType = targetType.compilerType;\n\n const isTuple =\n (tsType.flags & ts.TypeFlags.Object) !== 0 &&\n ((tsType as ts.ObjectType).objectFlags & ts.ObjectFlags.Tuple) !== 0;\n\n if (!isTuple) return null;\n\n const tuple = tsType as ts.TupleType;\n\n const metadata = tuple.elementFlags.reduce(\n (acc, flag, index) => ({\n ...acc,\n [index]: {\n rest: (flag & ts.ElementFlags.Rest) !== 0,\n optional: (flag & ts.ElementFlags.Optional) !== 0,\n ...(tuple.labeledElementDeclarations?.[index] && {\n name: tuple.labeledElementDeclarations[\n index\n ].name.getText(),\n }),\n },\n }),\n {} as Record<number, ArrayItemMeta>\n );\n\n return metadata;\n};\n\nexport class SchemaBuilderModule {\n private checker: TypeChecker;\n private project: Project;\n public referencesMaps = new Map<string, Map<string, JsonSchema>>();\n\n private collectedTypes: string = '';\n\n constructor(project: Project) {\n this.project = project;\n\n this.checker = this.project.getTypeChecker();\n }\n\n public storeCollectedTypes(types: string) {\n this.collectedTypes = types;\n }\n\n private handlers = [\n {\n condition: type => type.isAny() || type.isUnknown(),\n resolver: (): AnySchema => ({ type: 'any' }),\n },\n {\n condition: type => type.isNever(),\n resolver: (): NeverSchema => ({ type: 'never' }),\n },\n {\n condition: type => type.isUndefined(),\n resolver: (): UndefinedSchema => ({ type: 'undefined' }),\n },\n {\n condition: type => type.isNull(),\n resolver: (): NullSchema => ({ type: 'null' }),\n },\n {\n condition: type => type.isString() || type.isTemplateLiteral(),\n resolver: (): StringSchema => ({ type: 'string' }),\n },\n {\n condition: type => type.isNumber(),\n resolver: (): NumberSchema => ({ type: 'number' }),\n },\n {\n condition: type => type.isBoolean(),\n resolver: (): BooleanSchema => ({ type: 'boolean' }),\n },\n {\n condition: type => type.isStringLiteral(),\n resolver: ({ type }): StringSchema => ({\n type: 'string',\n const: type.getLiteralValue() as string,\n }),\n },\n {\n condition: type => type.isNumberLiteral(),\n resolver: ({ type }): NumberSchema => ({\n type: 'number',\n const: type.getLiteralValue() as number,\n }),\n },\n {\n condition: type => type.isBooleanLiteral(),\n resolver: ({ type }): BooleanSchema => ({\n type: 'boolean',\n const: type.getText() === 'true',\n }),\n },\n {\n condition: type => type.isEnum(),\n resolver: ({ type }): EnumSchema => {\n const values = type\n .getUnionTypes()\n .map(t => t.getLiteralValue())\n .filter((v): v is string | number => v !== undefined);\n\n return mergeWithJSDocs(\n {\n type: 'enum',\n values,\n },\n type\n );\n },\n },\n {\n condition: type => type.getText() === 'Date',\n resolver: (): StringSchema => ({ type: 'string' }),\n },\n {\n condition: type => type.getSymbol()?.getName() === 'Promise',\n resolver: ({ type, ...rest }): JsonSchema => {\n const wrappedType = type.getTypeArguments()[0];\n const node = resolveNodeByType(wrappedType);\n return this.convert({ type: wrappedType, ...rest, node });\n },\n },\n {\n condition: type => type.isArray(),\n resolver: this.handleArray.bind(this),\n },\n {\n condition: type => type.isTuple(),\n resolver: this.handleTuple.bind(this),\n },\n {\n condition: type => type.isUnion(),\n resolver: this.handleUnion.bind(this),\n },\n {\n condition: type => type.isIntersection(),\n resolver: this.handleIntersection.bind(this),\n },\n {\n condition: type => type.isObject(),\n resolver: this.handleObject.bind(this),\n },\n ] as Array<{\n condition: (type: Type) => boolean;\n resolver: (params: {\n type: Type;\n node?: Node;\n name?: string;\n seenSymbols?: Set<Symbol>;\n trace?: string[];\n }) => JsonSchema;\n }>;\n\n public generateSchema(entries: Array<SchemaBuilderEntry>): TypesSchema {\n this.referencesMaps = new Map();\n const schema: Record<string, JsonSchema> = {};\n\n const entriesWithTypeAndNodes = entries.filter(\n entry => 'type' in entry\n );\n\n const entriesWithModels = entries.filter(entry => 'model' in entry);\n\n const entriesWithInlineTypes = entries.filter(\n entry => 'inline' in entry\n );\n\n for (const entry of entriesWithTypeAndNodes) {\n if (!entry.name) continue;\n\n const aliasSymbol = entry.type.getAliasSymbol();\n const targetAliasSymbol = entry.type\n .getTargetType()\n ?.getAliasSymbol();\n\n // If type is actually inline it - it will equal target type\n if (\n Boolean(aliasSymbol || targetAliasSymbol) &&\n aliasSymbol === targetAliasSymbol &&\n entry.node\n ) {\n const alias = entry.node.getSourceFile().addTypeAlias({\n name: `__temp__${Date.now()}`,\n type: entry.type.getText(),\n });\n const type = alias.getType();\n const node = alias.getTypeNode();\n\n schema[entry.name] = this.convert({\n type,\n node,\n name: entry.name,\n });\n\n alias.remove();\n } else {\n schema[entry.name] = this.convert(entry);\n }\n }\n\n const realProject = this.project;\n\n const temporalProject = new Project({\n useInMemoryFileSystem: true,\n compilerOptions: {\n lib: ['lib.es2024.d.ts'],\n strictNullChecks: true,\n },\n });\n\n this.project = temporalProject;\n this.checker = this.project.getTypeChecker();\n\n const tempFile = this.project.createSourceFile(\n `__temp__${Date.now()}.ts`,\n this.collectedTypes\n );\n\n for (const entry of entriesWithInlineTypes) {\n if (!entry.name) continue;\n\n const alias = tempFile.addTypeAlias({\n name: `__temp__${Date.now()}`,\n type: entry.inline,\n });\n\n schema[entry.name] = this.convert({\n type: alias?.getType(),\n node: alias,\n name: entry.name,\n });\n alias.remove();\n }\n\n for (const entry of entriesWithModels) {\n if (!entry.name) continue;\n\n const data = getTypeAndNode(tempFile, entry.model, entry.name);\n\n if (!data) {\n continue;\n }\n\n schema[entry.name] = this.convert({ ...data, name: entry.name });\n }\n\n this.project.removeSourceFile(tempFile);\n\n this.project = realProject;\n this.checker = this.project.getTypeChecker();\n\n const uniqueReferences: Record<string, JsonSchema> = {};\n\n for (const [_, map] of this.referencesMaps.entries()) {\n for (const [typeName, definition] of map.entries()) {\n if (uniqueReferences[typeName]) {\n continue;\n }\n uniqueReferences[typeName] = definition;\n }\n }\n\n const mappedReferences: Record<string, string> = {};\n\n for (const key in schema) {\n if (uniqueReferences[key]) {\n let counter = 1;\n while (\n uniqueReferences[`${key}_${counter}`] ||\n schema[`${key}_${counter}`]\n ) {\n counter += 1;\n }\n\n const uniqueName = `${key}_${counter}`;\n\n schema[uniqueName] = schema[key];\n delete schema[key];\n\n mappedReferences[key] = uniqueName;\n }\n }\n\n return {\n schema,\n refs: uniqueReferences,\n mappedReferences,\n };\n }\n\n public convert({\n type,\n node,\n name,\n reference,\n seenSymbols = new Set<Symbol>(),\n trace = [],\n }: {\n type: Type;\n node?: Node;\n name?: string;\n reference?: string;\n seenSymbols?: Set<Symbol>;\n trace?: string[];\n }): JsonSchema {\n const aliasSymbol = type.getAliasSymbol();\n const targetAliasSymbol = type.getTargetType()?.getAliasSymbol();\n const symbol = type.getSymbol();\n\n const referenceMapName = name || '__default';\n\n if (!this.referencesMaps.has(referenceMapName)) {\n this.referencesMaps.set(referenceMapName, new Map());\n }\n\n if (trace.length > 100) {\n return {\n type: 'any',\n };\n }\n\n const referenceName =\n (!targetAliasSymbol || targetAliasSymbol === aliasSymbol) &&\n (aliasSymbol?.getName() || symbol?.getName());\n\n const identitySymbol =\n (!targetAliasSymbol || targetAliasSymbol === aliasSymbol) &&\n (aliasSymbol || symbol);\n\n if (\n referenceName &&\n !['__type', '__object'].includes(referenceName) &&\n !referenceName.includes('__temp__') &&\n !isBuiltInTypeSymbol(type.getSymbol()) &&\n referenceName !== reference\n ) {\n const args = type.getAliasTypeArguments();\n\n if (args.length > 0) {\n const clonedSeen = new Set(seenSymbols);\n if (identitySymbol) clonedSeen.add(identitySymbol);\n\n for (const arg of args) {\n const argName = arg.getAliasSymbol()?.getName();\n\n if (\n !argName ||\n this.referencesMaps.get(referenceMapName)?.has(argName)\n ) {\n continue;\n }\n\n this.referencesMaps.get(referenceMapName)?.set(\n argName,\n this.convert({\n type: arg,\n node,\n name: referenceMapName,\n reference: argName,\n seenSymbols: clonedSeen,\n })\n );\n }\n\n const target = type.getApparentType();\n\n return this.convert({\n type: target,\n node,\n name: referenceMapName,\n reference: referenceName,\n seenSymbols: clonedSeen,\n trace: [...trace, referenceMapName],\n });\n }\n\n if (\n !this.referencesMaps.get(referenceMapName)?.has(referenceName)\n ) {\n const clonedSeen = new Set(seenSymbols);\n if (identitySymbol) clonedSeen.add(identitySymbol);\n\n this.referencesMaps.get(referenceMapName)?.set(\n referenceName,\n this.convert({\n type,\n node,\n name: referenceMapName,\n reference: referenceName,\n seenSymbols: clonedSeen,\n trace: [...trace, referenceName],\n })\n );\n }\n\n return {\n type: 'ref',\n name: referenceName,\n };\n }\n\n const resolver = this.handlers.find(handler =>\n handler.condition(type)\n )?.resolver;\n\n if (!resolver) {\n return {\n type: 'any',\n };\n }\n\n const result = resolver({\n type,\n node,\n name: referenceMapName,\n seenSymbols,\n trace: [...trace, referenceMapName],\n });\n\n return mergeWithJSDocs(result, type);\n }\n\n private handleArray({\n type,\n ...rest\n }: {\n type: Type;\n node?: Node;\n name?: string;\n }): ArraySchema {\n const elementType = type.getArrayElementTypeOrThrow();\n\n return {\n type: 'array',\n items: this.convert({\n type: elementType,\n ...rest,\n node: resolveNodeByType(elementType),\n }),\n };\n }\n\n private handleTuple({\n type,\n ...rest\n }: {\n type: Type;\n node?: Node;\n name?: string;\n }): ArraySchema {\n const tupleTypes = type.getTupleElements();\n\n const metadata = getTupleElementsMetadata(type);\n\n const items = tupleTypes\n // .filter((_, index) => index !== restIndex)\n .map((tuple, index) => {\n return {\n ...this.convert({\n type: tuple,\n ...rest,\n node: resolveNodeByType(tuple),\n }),\n ...metadata?.[index],\n };\n });\n\n return {\n type: 'array',\n items,\n };\n }\n\n private handleUnion({\n type,\n ...rest\n }: {\n type: Type;\n node?: Node;\n name?: string;\n }): AnyOfSchema | JsonSchema {\n const unionTypes = type\n .getUnionTypes()\n .filter(union => !union.isUndefined());\n\n if (unionTypes.length === 1) {\n return this.convert({\n type: unionTypes[0],\n ...rest,\n node: resolveNodeByType(unionTypes[0]) || rest.node,\n }) as JsonSchema;\n }\n\n const isMappedBoolean =\n unionTypes.some(\n union => union.isBooleanLiteral() && union.getText() === 'false'\n ) &&\n unionTypes.some(\n union => union.isBooleanLiteral() && union.getText() === 'true'\n );\n let filteredBoolean = unionTypes;\n if (isMappedBoolean) {\n filteredBoolean = unionTypes.filter(\n union => !union.isBooleanLiteral()\n );\n }\n\n const allLiterals =\n filteredBoolean.length > 0 &&\n filteredBoolean.every(union => union.isLiteral());\n if (allLiterals) {\n return {\n type: 'enum',\n values: filteredBoolean\n .map(union => union.getLiteralValue())\n .filter(Boolean) as EnumSchema['values'],\n };\n }\n\n if (!filteredBoolean.length && isMappedBoolean) {\n return mergeWithJSDocs({ type: 'boolean' }, type);\n }\n\n const definitions = [\n ...filteredBoolean.map(union =>\n this.convert({\n type: union,\n ...rest,\n node: resolveNodeByType(union) || rest.node,\n })\n ),\n ...(isMappedBoolean ? [{ type: 'boolean' as const }] : []),\n ];\n\n return mergeWithJSDocs({ type: 'complex', anyOf: definitions }, type);\n }\n\n private handleIntersection({\n type,\n ...rest\n }: {\n type: Type;\n node?: Node;\n name?: string;\n }): AllOfSchema {\n const intersectionTypes = type.getIntersectionTypes();\n\n const definitions = intersectionTypes.map(intersection =>\n this.convert({\n type: intersection,\n ...rest,\n node: resolveNodeByType(intersection) || rest.node,\n })\n );\n\n return mergeWithJSDocs({ type: 'complex', allOf: definitions }, type);\n }\n\n private handleObject({\n type,\n seenSymbols = new Set(),\n trace = [],\n ...rest\n }: {\n type: Type<ts.ObjectType>;\n node?: Node;\n name?: string;\n seenSymbols?: Set<Symbol>;\n trace?: string[];\n }): ObjectSchema {\n const properties: { [key: string]: any } = {};\n const required: string[] = [];\n\n const isMappedType = Boolean(type.getTargetType());\n\n for (const prop of type.getProperties()) {\n let propType: Type | null = null;\n\n if (isMappedType && !type.isClass() && rest.node) {\n propType = resolvePropertyTypeByChecker(\n this.checker,\n prop,\n rest.node\n );\n } else {\n const decl = prop.getDeclarations()[0];\n\n if (decl && decl.isKind(SyntaxKind.MethodDeclaration)) {\n continue;\n }\n\n if (\n decl &&\n (decl.isKind(SyntaxKind.PropertySignature) ||\n decl.isKind(SyntaxKind.PropertyAssignment) ||\n decl.isKind(SyntaxKind.PropertyDeclaration))\n ) {\n propType = decl.getType();\n\n // uncomment in future when add support of class transformation\n // console.log(\n // decl.isKind(SyntaxKind.PropertyDeclaration) &&\n // decl\n // .getDecorators()\n // .map(decorator => decorator.getName())\n // );\n }\n\n if (!propType) {\n propType = resolvePropertyTypeByChecker(\n this.checker,\n prop,\n rest.node\n );\n }\n }\n\n if (!propType) {\n continue;\n }\n\n const propName = prop.getEscapedName();\n\n const propNode =\n prop.getDeclarations()[0] ||\n (propType.getAliasSymbol()?.getDeclarations()[0] as Node) ||\n null;\n\n properties[propName] = {\n ...this.convert({\n type: propType,\n trace: [...trace, propName],\n seenSymbols,\n ...rest,\n node: propNode || undefined,\n }),\n ...(Node.isJSDocable(propNode) &&\n extractJSDocsToDefinitionProperties(propNode.getJsDocs())),\n };\n\n if (!prop.isOptional()) {\n required.push(propName);\n }\n }\n\n const schema: any = {\n type: 'object',\n properties,\n };\n\n if (required.length > 0) {\n schema.required = required;\n }\n\n const indexType =\n type.getStringIndexType() || type.getNumberIndexType();\n\n if (indexType) {\n schema.indexedProperties = this.convert({\n type: indexType,\n trace: [...trace, 'index_type'],\n ...rest,\n });\n }\n\n return {\n ...schema,\n ...(Node.isJSDocable(rest.node) &&\n extractJSDocsToDefinitionProperties(rest.node.getJsDocs())),\n };\n }\n}\n","import {\n ClassDeclaration,\n ExpressionWithTypeArguments,\n HeritageClause,\n InterfaceDeclaration,\n Node,\n SourceFile,\n SyntaxKind,\n TypeAliasDeclaration,\n TypeFormatFlags,\n TypeLiteralNode,\n TypeReferenceNode,\n} from 'ts-morph';\n\nconst BUILTIN_TYPES = new Set([\n 'Omit',\n 'Pick',\n 'Partial',\n 'Readonly',\n 'Array',\n 'Record',\n 'any',\n 'string',\n 'number',\n 'boolean',\n 'unknown',\n 'void',\n 'never',\n 'Object',\n 'Date',\n 'Promise',\n 'Error',\n 'Map',\n 'Set',\n 'Uint8Array',\n 'Buffer',\n 'null',\n 'undefined',\n 'bigint',\n 'symbol',\n 'Function',\n 'RegExp',\n 'Iterable',\n 'Iterator',\n 'ReadonlyArray',\n 'TemplateStringsArray',\n 'ThisType',\n 'Required',\n 'InstanceType',\n 'ReturnType',\n 'Parameters',\n 'ConstructorParameters',\n 'NonNullable',\n 'Extract',\n 'Exclude',\n 'Awaited',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n]);\n\nexport const isBuiltInType = (name: string): boolean => BUILTIN_TYPES.has(name);\n\nexport const resolveTypeofType = (typeNode: Node): string | undefined => {\n if (typeNode.getKindName() !== 'TypeQuery') return undefined;\n const expr = (typeNode as any).getExprName\n ? (typeNode as any).getExprName()\n : typeNode.getFirstChildByKind(SyntaxKind.Identifier);\n const identifier = expr ? expr.getText() : undefined;\n if (!identifier) return undefined;\n\n for (const sourceFile of typeNode.getProject().getSourceFiles()) {\n const varDecl = sourceFile.getVariableDeclaration(identifier);\n if (varDecl) {\n const typeText = varDecl\n .getType()\n .getText(undefined, TypeFormatFlags.NoTruncation);\n return typeText;\n }\n const enumDecl = sourceFile.getEnum(identifier);\n if (enumDecl) {\n return enumDecl.getName();\n }\n const classDecl = sourceFile.getClass(identifier);\n if (classDecl) {\n const name = classDecl.getName();\n if (name) {\n return name;\n }\n }\n const typeAlias = sourceFile.getTypeAlias(identifier);\n if (typeAlias) {\n return typeAlias.getName();\n }\n const iface = sourceFile.getInterface(identifier);\n if (iface) {\n return iface.getName();\n }\n }\n return undefined;\n};\n\nexport function extractTypeReferences(node: Node): Set<string> {\n const references = new Set<string>();\n node.forEachDescendant(descendant => {\n if (Node.isTypeReference(descendant)) {\n const typeName = (descendant as TypeReferenceNode)\n .getTypeName()\n .getText();\n if (typeName && !isBuiltInType(typeName)) references.add(typeName);\n } else if (Node.isHeritageClause(descendant)) {\n (descendant as HeritageClause).getTypeNodes().forEach(typeNode => {\n const typeName = typeNode.getText();\n if (!isBuiltInType(typeName)) references.add(typeName);\n });\n } else if (Node.isExpressionWithTypeArguments(descendant)) {\n const typeName = (descendant as ExpressionWithTypeArguments)\n .getExpression()\n .getText();\n if (!isBuiltInType(typeName)) references.add(typeName);\n }\n });\n\n return references;\n}\n\nfunction convertClassToType(classDecl: ClassDeclaration): string {\n const lines: string[] = [`export type ${classDecl.getName()} = {`];\n for (const prop of classDecl.getProperties()) {\n if (\n prop.hasModifier('private') ||\n prop.hasModifier('protected') ||\n prop.isStatic()\n )\n continue;\n let typeText = prop.getTypeNode()?.getText() ?? 'any';\n if (prop.getTypeNode()?.getText().startsWith('typeof ')) {\n const resolved = resolveTypeofType(prop.getTypeNode()!);\n if (resolved) typeText = resolved;\n }\n lines.push(\n ` ${prop.getName()}${\n prop.hasQuestionToken() ? '?' : ''\n }: ${typeText};`\n );\n }\n for (const getter of classDecl.getGetAccessors()) {\n if (\n getter.hasModifier('private') ||\n getter.hasModifier('protected') ||\n getter.isStatic()\n )\n continue;\n lines.push(\n ` readonly ${getter.getName()}: ${\n getter.getReturnTypeNode()?.getText() ?? 'any'\n };`\n );\n }\n for (const method of classDecl.getMethods()) {\n if (\n method.hasModifier('private') ||\n method.hasModifier('protected') ||\n method.isStatic() ||\n method.getName() === 'constructor'\n )\n continue;\n const params = method\n .getParameters()\n .map(\n param =>\n `${param.getName()}: ${\n param.getTypeNode()?.getText() ?? 'any'\n }`\n )\n .join(', ');\n lines.push(\n ` ${method.getName()}(${params}): ${\n method.getReturnTypeNode()?.getText() ?? 'any'\n };`\n );\n }\n lines.push('}');\n return lines.join('\\n');\n}\n\ninterface DeclarationHandler {\n getDeclaration: (\n sourceFile: SourceFile,\n typeName: string\n ) => Node | undefined;\n getText: (node: Node) => string;\n}\n\nexport const declarationHandlers: DeclarationHandler[] = [\n {\n getDeclaration: (sourceFile, typeName) =>\n sourceFile.getInterface(typeName),\n getText: node =>\n Node.isInterfaceDeclaration(node)\n ? convertInterfaceToString(node)\n : node.getText(),\n },\n {\n getDeclaration: (sourceFile, typeName) => sourceFile.getClass(typeName),\n getText: node =>\n Node.isClassDeclaration(node)\n ? convertClassToType(node)\n : node.getText(),\n },\n {\n getDeclaration: (sourceFile, typeName) =>\n sourceFile.getTypeAlias(typeName),\n getText: node =>\n Node.isTypeAliasDeclaration(node)\n ? convertTypeAliasToString(node)\n : node.getText(),\n },\n {\n getDeclaration: (sourceFile, typeName) => sourceFile.getEnum(typeName),\n getText: node => node.getText(),\n },\n];\n\nfunction convertInterfaceToString(interfaceDecl: InterfaceDeclaration): string {\n const extendsClauses = interfaceDecl\n .getExtends()\n .map(ext => ext.getText())\n .join(' & ');\n\n const lines: string[] = [\n `export type ${interfaceDecl.getName()} = ${extendsClauses ? `${extendsClauses} & ` : ''}{`,\n ];\n for (const prop of interfaceDecl.getProperties()) {\n let typeText = prop.getTypeNode()?.getText() ?? 'any';\n if (prop.getTypeNode()?.getText().startsWith('typeof ')) {\n const resolved = resolveTypeofType(prop.getTypeNode()!);\n if (resolved) typeText = resolved;\n }\n lines.push(\n ` ${prop.getName()}${\n prop.hasQuestionToken() ? '?' : ''\n }: ${typeText};`\n );\n }\n for (const sig of interfaceDecl.getCallSignatures()) {\n lines.push(` ${sig.getText()}`);\n }\n for (const idx of interfaceDecl.getIndexSignatures()) {\n lines.push(` ${idx.getText()}`);\n }\n for (const method of interfaceDecl.getMethods()) {\n const params = method\n .getParameters()\n .map(\n param =>\n `${param.getName()}: ${\n param.getTypeNode()?.getText() ?? 'any'\n }`\n )\n .join(', ');\n lines.push(\n ` ${method.getName()}(${params}): ${\n method.getReturnTypeNode()?.getText() ?? 'any'\n };`\n );\n }\n lines.push('}');\n return lines.join('\\n');\n}\n\nfunction convertTypeAliasToString(typeAliasDecl: TypeAliasDeclaration): string {\n const typeNode = typeAliasDecl.getTypeNode();\n let typeText = typeNode?.getText() ?? 'any';\n if (typeNode && typeText.startsWith('typeof ')) {\n const resolved = resolveTypeofType(typeNode);\n if (resolved) typeText = resolved;\n }\n if (typeNode && typeNode.getKindName() === 'TypeLiteral') {\n const lines: string[] = ['{'];\n for (const member of (typeNode as TypeLiteralNode).getProperties?.() ||\n []) {\n let memberTypeText = member.getTypeNode?.()?.getText() ?? 'any';\n if (member.getTypeNode?.()?.getText().startsWith('typeof ')) {\n const resolved = resolveTypeofType(member.getTypeNode()!);\n if (resolved) memberTypeText = resolved;\n }\n\n lines.push(\n ` ${member.getName?.() ?? ''}${\n member.hasQuestionToken?.() ? '?' : ''\n }: ${memberTypeText};`\n );\n }\n lines.push('}');\n }\n\n const typeParameters = typeAliasDecl.getTypeParameters();\n let genericText = '';\n if (typeParameters.length > 0) {\n genericText = `<${typeParameters\n .map(param => {\n const paramName = param.getName();\n const constraint = param.getConstraint()?.getText();\n const defaultType = param.getDefault()?.getText();\n let result = paramName;\n if (constraint) {\n result += ` extends ${constraint}`;\n }\n if (defaultType) {\n result += ` = ${defaultType}`;\n }\n return result;\n })\n .join(', ')}>`;\n }\n\n return `export type ${typeAliasDecl.getName()}${genericText} = ${typeText};`;\n}\n","import { join } from 'path';\nimport { Node, Project, SourceFile, Type, TypeFormatFlags } from 'ts-morph';\n\nimport {\n NamedInlineTypeEntry,\n NamedModelTypeEntry,\n NamedTsTypeEntry,\n} from '../../types';\nimport {\n declarationHandlers,\n extractTypeReferences,\n isBuiltInType,\n resolveTypeofType,\n} from './utils';\n\nexport class TypesLookupModule {\n private project: Project;\n\n private typeIndex = new Map<\n string,\n Array<{ node: Node; type: Type; sourceFile: SourceFile }>\n >();\n\n private qualifiedNames = new Map<Node, string>();\n\n private typeIndexQualified = new Map<\n string,\n { node: Node; type: Type; sourceFile: SourceFile }\n >();\n\n constructor(project?: Project) {\n this.project =\n project ??\n new Project({\n tsConfigFilePath: join(process.cwd(), 'tsconfig.json'),\n skipAddingFilesFromTsConfig: false,\n skipFileDependencyResolution: true,\n });\n }\n\n public buildTypeIndexes() {\n for (const sourceFile of this.project.getSourceFiles()) {\n if (sourceFile.getFullText().includes('Auto-generated API types')) {\n continue;\n }\n sourceFile.getInterfaces().forEach(node => {\n const name = node.getName();\n this.addToTypeIndex(name, node, node.getType(), sourceFile);\n });\n sourceFile.getClasses().forEach(node => {\n const name = node.getName();\n if (name)\n this.addToTypeIndex(name, node, node.getType(), sourceFile);\n });\n sourceFile.getTypeAliases().forEach(node => {\n const name = node.getName();\n this.addToTypeIndex(\n name,\n node.getTypeNode()!,\n node.getType(),\n sourceFile\n );\n });\n sourceFile.getEnums().forEach(node => {\n const name = node.getName();\n this.addToTypeIndex(name, node, node.getType(), sourceFile);\n });\n sourceFile.getVariableDeclarations().forEach(node => {\n const name = node.getName();\n if (node.getTypeNode()?.getText().startsWith('typeof ')) {\n const resolved = resolveTypeofType(node.getTypeNode()!);\n if (resolved)\n this.addToTypeIndex(\n name,\n node.getTypeNode()!,\n node.getType(),\n sourceFile\n );\n }\n });\n }\n\n // Assign qualified names for duplicates\n for (const [name, infos] of this.typeIndex) {\n if (infos.length > 1) {\n infos.forEach((info, index) => {\n const qName = `${name}_${index + 1}`;\n this.qualifiedNames.set(info.node, qName);\n this.typeIndexQualified.set(qName, info);\n });\n } else {\n infos.forEach(info => {\n const qName = name;\n this.qualifiedNames.set(info.node, qName);\n this.typeIndexQualified.set(qName, info);\n });\n }\n }\n }\n\n private addToTypeIndex(\n name: string,\n node: Node,\n type: Type,\n sourceFile: SourceFile\n ) {\n const existing = this.typeIndex.get(name) || [];\n this.typeIndex.set(name, [...existing, { node, type, sourceFile }]);\n }\n\n lookup(types: Array<string>) {\n const names = this.extractTypeNames(types);\n\n const definitions = this.searchTypeDefinitions(names);\n\n return definitions;\n }\n\n lookupNode(types: NamedModelTypeEntry[]) {\n const typeNodes: Array<NamedTsTypeEntry | NamedInlineTypeEntry> = [];\n\n for (const type of types) {\n if ((this.typeIndex.get(type.model)?.length || 0) > 1) {\n throw new Error(\n `Multiple definition declarations found for ${type.model} [${type.name}]`\n );\n }\n\n const data = this.typeIndexQualified.get(type.model);\n if (!data) {\n // console.warn(\n // `Unable to find definition declaration for ${type.model} [${type.name}]`\n // );\n typeNodes.push({\n name: type.name,\n inline: 'any',\n });\n continue;\n }\n\n typeNodes.push({\n type: data.type,\n node: data.node,\n name: type.name,\n });\n }\n\n return typeNodes;\n }\n\n private getNodeName(node: Node): string | undefined {\n if (\n Node.isInterfaceDeclaration(node) ||\n Node.isTypeAliasDeclaration(node) ||\n Node.isEnumDeclaration(node) ||\n Node.isClassDeclaration(node) ||\n Node.isVariableDeclaration(node)\n ) {\n return node.getName();\n }\n return undefined;\n }\n\n private searchTypeDefinitions(names: Array<string>) {\n for (const name of names) {\n if (\n (this.typeIndex.get(name)?.length || 0) > 1 &&\n !this.typeIndexQualified.has(name)\n ) {\n throw new Error(\n `Multiple definition declarations found for ${name}`\n );\n }\n }\n\n const typeDefinitions: string[] = [];\n const processedTypes = new Set<string>();\n const typeQueue = [...names];\n\n while (typeQueue.length > 0) {\n const currentType = typeQueue.shift()!;\n if (processedTypes.has(currentType)) continue;\n\n const typeInfo = this.typeIndexQualified.get(currentType);\n if (!typeInfo) {\n // Check if the type is in typeIndex (unqualified) and resolve to qualified names\n const infos = this.typeIndex.get(currentType);\n if (infos && infos.length > 0) {\n infos.forEach(info => {\n const qName = this.qualifiedNames.get(info.node);\n if (\n qName &&\n !processedTypes.has(qName) &&\n !typeQueue.includes(qName)\n ) {\n typeQueue.push(qName);\n }\n });\n }\n continue;\n }\n\n const originalName = this.getNodeName(typeInfo.node) ?? currentType;\n const qualifiedName =\n this.qualifiedNames.get(typeInfo.node) ?? currentType;\n\n const handler = declarationHandlers.find(h =>\n h.getDeclaration(typeInfo.sourceFile, originalName)\n ) || {\n getText: (node: Node) =>\n node\n .getType()\n .getText(undefined, TypeFormatFlags.NoTruncation),\n };\n\n let definition = handler.getText(typeInfo.node);\n\n // Replace the type name with its qualified name\n if (qualifiedName !== originalName) {\n definition = definition.replace(\n new RegExp(`\\\\b${originalName}\\\\b`, 'g'),\n qualifiedName\n );\n }\n\n // Update references to qualified names\n const refReplacements = new Map<string, string>();\n\n typeInfo.node.forEachDescendant(desc => {\n if (Node.isTypeReference(desc)) {\n const typeNameNode = desc.getTypeName();\n if (Node.isIdentifier(typeNameNode)) {\n const refName = typeNameNode.getText();\n if (\n isBuiltInType(refName) ||\n refReplacements.has(refName)\n )\n return;\n const symbol = typeNameNode.getSymbol();\n if (!symbol) return;\n const targetSymbol =\n symbol.getAliasedSymbol() || symbol;\n const decls = targetSymbol.getDeclarations();\n if (decls.length === 0) return;\n const targetDecl = decls[0];\n const qName = this.qualifiedNames.get(targetDecl);\n if (qName && qName !== refName) {\n refReplacements.set(refName, qName);\n }\n }\n // Handle generic type arguments\n desc.getTypeArguments().forEach(arg => {\n if (Node.isTypeReference(arg)) {\n const typeNameNode = arg.getTypeName();\n if (Node.isIdentifier(typeNameNode)) {\n const refName = typeNameNode.getText();\n if (\n isBuiltInType(refName) ||\n refReplacements.has(refName)\n )\n return;\n const symbol = typeNameNode.getSymbol();\n if (!symbol) return;\n const targetSymbol =\n symbol.getAliasedSymbol() || symbol;\n const decls = targetSymbol.getDeclarations();\n if (decls.length === 0) return;\n const targetDecl = decls[0];\n const qName =\n this.qualifiedNames.get(targetDecl);\n if (qName && qName !== refName) {\n refReplacements.set(refName, qName);\n }\n }\n }\n });\n }\n });\n\n for (const [original, replacement] of refReplacements) {\n definition = definition.replace(\n new RegExp(`\\\\b${original}\\\\b`, 'g'),\n replacement\n );\n }\n\n typeDefinitions.push(definition);\n\n const references = this.extractTypeReferences(typeInfo.node);\n\n references.forEach(ref => {\n if (\n !processedTypes.has(ref) &&\n !typeQueue.includes(ref) &&\n !isBuiltInType(ref)\n ) {\n typeQueue.push(ref);\n }\n });\n\n processedTypes.add(currentType);\n }\n\n return typeDefinitions;\n }\n\n private extractTypeNames(types: Array<string>) {\n const typePattern = /([a-zA-Z_][a-zA-Z0-9_]*)/g;\n const names = new Set<string>();\n\n for (const typeStr of types) {\n if (typeStr) {\n const matches = typeStr.match(typePattern);\n if (matches) {\n matches.forEach(match => {\n if (!isBuiltInType(match)) {\n // Check if the type has a qualified name\n const infos = this.typeIndex.get(match);\n if (infos) {\n infos.forEach(info => {\n const qName =\n this.qualifiedNames.get(info.node) ??\n match;\n names.add(qName);\n });\n } else {\n names.add(match);\n }\n }\n });\n }\n }\n }\n\n return [...names];\n }\n\n private extractTypeReferences(node: Node): string[] {\n const refs = new Set<string>();\n\n node.forEachDescendant(desc => {\n if (Node.isTypeReference(desc)) {\n const typeNameNode = desc.getTypeName();\n if (Node.isIdentifier(typeNameNode)) {\n const refName = typeNameNode.getText();\n if (isBuiltInType(refName)) return;\n const symbol = typeNameNode.getSymbol();\n if (!symbol) return;\n const targetSymbol = symbol.getAliasedSymbol() || symbol;\n const decls = targetSymbol.getDeclarations();\n if (decls.length === 0) return;\n const targetDecl = decls[0];\n const qName =\n this.qualifiedNames.get(targetDecl) ?? refName;\n refs.add(qName);\n }\n // Handle generic type arguments\n desc.getTypeArguments().forEach(arg => {\n if (Node.isTypeReference(arg)) {\n const typeNameNode = arg.getTypeName();\n if (Node.isIdentifier(typeNameNode)) {\n const refName = typeNameNode.getText();\n if (isBuiltInType(refName)) return;\n const symbol = typeNameNode.getSymbol();\n if (!symbol) return;\n const targetSymbol =\n symbol.getAliasedSymbol() || symbol;\n const decls = targetSymbol.getDeclarations();\n if (decls.length === 0) return;\n const targetDecl = decls[0];\n const qName =\n this.qualifiedNames.get(targetDecl) ?? refName;\n refs.add(qName);\n }\n }\n });\n }\n });\n\n return [...refs];\n }\n}\n","import { mkdir, writeFile } from 'fs/promises';\nimport { join, resolve } from 'path';\nimport { Project } from 'ts-morph';\n\nimport { ApinniConfig, InternalMethodMetadata, JsonSchema } from '@interfaces';\n\nimport { DEFAULT_UTILITY_TYPES, PROXY_TYPES } from './constants';\nimport { DefinitionsResolverModule } from './submodules/definitions-resolver-module/definitions-resolver';\nimport { SchemaBuilderModule } from './submodules/schema-builder-module/schema-builder';\nimport { TypesLookupModule } from './submodules/types-lookup-module/types-lookup';\nimport {\n EndpointData,\n NamedInlineTypeEntry,\n NamedModelTypeEntry,\n NamedTsTypeEntry,\n SchemaBuilderEntry,\n TypesSchema,\n} from './types';\n\ninterface EndpointStructure {\n query?: string;\n request?: string;\n responses?: Record<number, string>;\n}\n\ninterface ApiStructure {\n [key: string]: { [method: string]: EndpointStructure };\n}\n\nconst isModelEntry = (\n entry: SchemaBuilderEntry\n): entry is NamedModelTypeEntry => 'model' in entry;\n\nconst isInlineEntry = (\n entry: SchemaBuilderEntry\n): entry is NamedInlineTypeEntry => 'inline' in entry;\n\nconst isTypeEntry = (entry: SchemaBuilderEntry): entry is NamedTsTypeEntry =>\n 'type' in entry;\n\nconst isInlineOrTypeEntry = (\n entry: SchemaBuilderEntry\n): entry is NamedTsTypeEntry | NamedInlineTypeEntry =>\n isInlineEntry(entry) || isTypeEntry(entry);\n\nfunction buildApiStructure(endpoints: EndpointData[]): ApiStructure {\n const structure: ApiStructure = {};\n\n for (const { path, method, query, request, responses } of endpoints) {\n if (!method) {\n continue;\n }\n if (!structure[path]) {\n structure[path] = {};\n }\n structure[path][method.toUpperCase()] = {\n query: query ?? 'never',\n request: request ?? 'never',\n responses: responses ?? 'never',\n };\n }\n\n return structure;\n}\n\nconst getIndent = (level: number) => ' '.repeat(level);\n\nconst structureToString = (structure: ApiStructure) => {\n let result = '{\\n';\n\n for (const [path, methods] of Object.entries(structure)) {\n result += `${getIndent(1)}[\"${path}\"]: {\\n`;\n\n for (const [method, endpoint] of Object.entries(methods)) {\n result += `${getIndent(2)}${method}: {\\n`;\n\n if (endpoint.query) {\n result += `${getIndent(3)}query: ${endpoint.query};\\n`;\n }\n\n result += `${getIndent(3)}request: ${endpoint.request};\\n`;\n\n if (\n typeof endpoint.responses === 'string' ||\n !Object.keys(endpoint.responses || {}).length\n ) {\n result += `${getIndent(3)}responses: never;\\n`;\n } else {\n result += `${getIndent(3)}responses: {\\n`;\n Object.entries(endpoint.responses || {}).forEach(\n ([status, response]) => {\n result += `${getIndent(4)}${status.replace(/[^0-9]/g, '')}: ${response};\\n`;\n }\n );\n result += `${getIndent(3)}};\\n`;\n }\n\n result += `${getIndent(2)}};\\n`;\n }\n result += `${getIndent(1)}};\\n`;\n }\n\n result += `}`;\n return result;\n};\n\nfunction transformToName(input: { method: string; path: string }): string {\n // Remove leading/trailing slashes and query strings\n const cleanedPath = input.path.replace(/^\\/+|\\/+$/g, '').split('?')[0];\n\n // Split on `/`, `-`, `_` and transform params to \"ByX\"\n const segments = cleanedPath\n .split('/')\n .flatMap(part => part.split(/[-_]/))\n .map(str => {\n if (str.startsWith(':')) {\n const name = str.slice(1);\n return 'By' + name.charAt(0).toUpperCase() + name.slice(1);\n }\n return str;\n });\n\n // Capitalize helper\n const capitalize = (str: string) =>\n str.charAt(0).toUpperCase() + str.slice(1);\n\n return [\n capitalize(input.method.toLowerCase()),\n ...segments.map(capitalize),\n ].join('');\n}\n\nexport class GeneratorModule {\n private typesLookupModule: TypesLookupModule;\n private schemaBuilderModule: SchemaBuilderModule;\n private definitionsResolverModule: DefinitionsResolverModule;\n constructor(\n private readonly config: ApinniConfig,\n project: Project\n ) {\n this.typesLookupModule = new TypesLookupModule(project);\n this.schemaBuilderModule = new SchemaBuilderModule(project);\n this.definitionsResolverModule = new DefinitionsResolverModule();\n }\n\n async generate(endpointsMetadata: InternalMethodMetadata[]) {\n this.typesLookupModule.buildTypeIndexes();\n\n // const types = endpointsMetadata.flatMap(endpoint => {\n // const endpointTypes = [];\n\n // if (endpoint.query && !('inline' in endpoint.query)) {\n // endpointTypes.push(\n // 'model' in endpoint.query\n // ? { model: endpoint.query.model }\n // : {\n // type: endpoint.query.type,\n // node: endpoint.query.node,\n // }\n // );\n // }\n\n // if (endpoint.request && 'model' in endpoint.request) {\n // endpointTypes.push({ model: endpoint.request.model });\n // } else if (endpoint.request && 'type' in endpoint.request) {\n // endpointTypes.push({\n // type: endpoint.request.type,\n // node: endpoint.request.node,\n // });\n // }\n\n // if (endpoint.responses) {\n // Object.values(endpoint.responses).map(response => {\n // if ('model' in response) {\n // endpointTypes.push({ model: response.model });\n // } else {\n // endpointTypes.push({\n // type: response.type,\n // node: response.node,\n // });\n // }\n // });\n // }\n\n // return endpointTypes as Array<\n // { model: string } | { type: Type; node?: Node }\n // >;\n // });\n\n // const typeDefinitions = this.typesLookupModule.lookup(\n // types.filter(info => 'model' in info).map(({ model }) => model)\n // );\n\n // this.schemaBuilderModule.storeCollectedTypes(\n // typeDefinitions.join('\\n\\n')\n // );\n\n const endpointsMap = new Map<string, number>();\n const endpointsByDomain = new Map<string, string[]>();\n\n endpointsMetadata.forEach((endpoint, index) => {\n endpointsMap.set(endpoint.path, index);\n });\n\n for (const endpoint of endpointsMetadata) {\n const domains = endpoint.domains || ['api'];\n\n const disabledDomains = endpoint.disabledDomains || {};\n\n domains.forEach(domain => {\n if (disabledDomains[domain]) {\n return;\n }\n\n if (\n typeof disabledDomains[domain] !== 'boolean' &&\n disabledDomains['*']\n ) {\n return;\n }\n\n if (!endpointsByDomain.get(domain)) {\n endpointsByDomain.set(domain, []);\n }\n\n endpointsByDomain.get(domain)?.push(endpoint.path);\n });\n }\n\n const cwd = process.cwd();\n const outputDir = this.config.outputPath\n ? resolve(cwd, this.config.outputPath)\n : cwd;\n\n await mkdir(outputDir, { recursive: true });\n\n const promises = [] as Array<Promise<void>>;\n\n const { resolvedEndpoints, typesToResolve } =\n this.prepareEndpointsWithTypes(\n endpointsMetadata,\n Array.from(endpointsByDomain.keys())\n );\n\n const modelTypes = this.typesLookupModule.lookupNode(\n typesToResolve.filter(isModelEntry)\n );\n\n const normalizedTypes: Array<NamedTsTypeEntry | NamedInlineTypeEntry> =\n [...typesToResolve.filter(isInlineOrTypeEntry), ...modelTypes];\n\n const schema = this.schemaBuilderModule.generateSchema(\n normalizedTypes as SchemaBuilderEntry[]\n );\n\n const mappedEndpoints =\n Object.keys(schema.mappedReferences).length > 0\n ? resolvedEndpoints.map(endpoint => {\n const { request, responses, query } = endpoint;\n const mappedQuery =\n schema.mappedReferences[query || ''] || query;\n\n const mappedRequest =\n schema.mappedReferences[request || ''] || request;\n\n const mappedResponses =\n responses &&\n Object.fromEntries(\n Object.entries(responses).map(\n ([status, response]) => [\n status,\n schema.mappedReferences[response || ''] ||\n response,\n ]\n )\n );\n\n return {\n ...endpoint,\n ...(mappedQuery && { query: mappedQuery }),\n ...(mappedRequest && { request: mappedRequest }),\n ...(mappedResponses && {\n responses: mappedResponses,\n }),\n };\n })\n : resolvedEndpoints;\n\n const apiSchema = {\n endpoints: mappedEndpoints,\n schema,\n };\n\n if (this.config.generateSchemaFiles !== false) {\n await writeFile(\n 'api-schema.json',\n JSON.stringify(apiSchema, null, 2),\n 'utf-8'\n );\n }\n\n for (const [domain, endpoints] of endpointsByDomain.entries()) {\n const domainEndpoints = mappedEndpoints.filter(ep =>\n endpoints.includes(ep.path)\n );\n\n const referencedNames = new Set<string>();\n const toVisit = new Set<string>();\n\n // Start with top-level references from endpoints (query/request/responses are strings)\n domainEndpoints.forEach(ep => {\n if (typeof ep.query === 'string' && ep.query) {\n toVisit.add(ep.query);\n }\n if (typeof ep.request === 'string' && ep.request) {\n toVisit.add(ep.request);\n }\n if (ep.responses) {\n Object.values(ep.responses).forEach(resp => {\n if (typeof resp === 'string' && resp) {\n toVisit.add(resp);\n }\n });\n }\n });\n\n // Combined pool of all available schemas\n const allSchemas: Record<string, JsonSchema> = {\n ...schema.schema,\n ...schema.refs,\n };\n\n // Traverse to collect all transitive references (BFS-style to handle dependencies)\n while (toVisit.size > 0) {\n const currentName = toVisit.values().next().value as string;\n toVisit.delete(currentName);\n\n if (referencedNames.has(currentName)) continue;\n referencedNames.add(currentName);\n\n const currentSchema = allSchemas[currentName];\n if (!currentSchema) continue;\n\n // Recursively collect nested refs from this schema\n const collectNested = (s: JsonSchema) => {\n if (\n 'type' in s &&\n s.type === 'ref' &&\n 'name' in s &&\n s.name\n ) {\n if (!referencedNames.has(s.name)) {\n toVisit.add(s.name);\n }\n return;\n }\n\n if ('anyOf' in s && Array.isArray(s.anyOf)) {\n s.anyOf.forEach(collectNested);\n }\n if ('allOf' in s && Array.isArray(s.allOf)) {\n s.allOf.forEach(collectNested);\n }\n if ('properties' in s && s.properties) {\n Object.values(s.properties).forEach(collectNested);\n }\n if ('indexedProperties' in s && s.indexedProperties) {\n collectNested(s.indexedProperties);\n }\n if ('items' in s) {\n if (Array.isArray(s.items)) {\n s.items.forEach(collectNested);\n } else if (s.items) {\n collectNested(s.items);\n }\n }\n // Note: No need for enum/values, string/number/etc. as they don't ref\n };\n\n collectNested(currentSchema);\n }\n\n const domainSchema: Omit<TypesSchema, 'mappedReferences'> = {\n schema: {},\n refs: {},\n };\n\n for (const name of referencedNames) {\n if (schema.schema[name]) {\n domainSchema.schema[name] = schema.schema[name];\n }\n if (schema.refs[name]) {\n domainSchema.refs[name] = schema.refs[name];\n }\n }\n\n const generatedTypes =\n this.definitionsResolverModule.generate(domainSchema);\n\n const output = this.assemblyOutput({\n domain,\n endpoints: domainEndpoints,\n typesDefinitions: generatedTypes,\n });\n\n const fileName = `${domain}-types.d.ts`;\n const outputPath = join(outputDir, fileName);\n\n promises.push(writeFile(outputPath, output, 'utf-8'));\n }\n\n await Promise.all(promises);\n\n return apiSchema;\n }\n\n private prepareEndpointsWithTypes(\n endpoints: InternalMethodMetadata[],\n domains: string[]\n ) {\n const resolvedEndpoints: EndpointData[] = [];\n const typesToResolve: SchemaBuilderEntry[] = [];\n\n for (const endpoint of endpoints) {\n const query = endpoint.query\n ? {\n ...endpoint.query,\n name:\n ('name' in endpoint.query && endpoint.query.name) ||\n `${transformToName(endpoint)}Query`,\n }\n : null;\n\n const request = endpoint.request\n ? {\n name:\n endpoint.request.name ||\n `${transformToName(endpoint)}Request`,\n ...('model' in endpoint.request\n ? {\n model: endpoint.request.model,\n }\n : {\n type: endpoint.request.type,\n node: endpoint.request.node,\n }),\n }\n : null;\n\n const responses = endpoint.responses\n ? Object.fromEntries(\n Object.entries(endpoint.responses).map(\n ([status, response]) => [\n status,\n {\n name:\n response.name ||\n `${transformToName(endpoint)}${Object.keys(endpoint.responses || {}).length > 0 ? status : ''}Response`,\n ...('model' in response\n ? {\n model: response.model,\n }\n : {\n type: response.type,\n node: response.node,\n }),\n },\n ]\n )\n )\n : null;\n\n const disabledDomains = endpoint.disabledDomains || {};\n\n const wildcardDisabled = disabledDomains['*'] === true;\n\n const resolvedDisabledDomains = domains.filter(domain => {\n const setting = disabledDomains[domain];\n return setting !== undefined ? setting : wildcardDisabled;\n });\n\n resolvedEndpoints.push({\n path: endpoint.path,\n method: endpoint.method,\n query: query?.name,\n domains: endpoint.domains || ['api'],\n disabledDomains: resolvedDisabledDomains,\n request: request?.name,\n responses: responses\n ? Object.fromEntries(\n Object.entries(responses).map(\n ([status, { name }]) => [status, name]\n )\n )\n : undefined,\n });\n\n if (query) {\n typesToResolve.push(query);\n }\n\n if (request) {\n typesToResolve.push(request);\n }\n\n if (responses) {\n typesToResolve.push(...Object.values(responses));\n }\n }\n\n return {\n resolvedEndpoints,\n typesToResolve,\n };\n }\n\n private assemblyOutput({\n domain,\n endpoints,\n typesDefinitions,\n }: {\n domain: string;\n endpoints: EndpointData[];\n typesDefinitions: string;\n }) {\n const supportedMethods = Array.from(\n new Set(endpoints.map(e => e.method?.toUpperCase()).filter(Boolean))\n );\n\n const output: string[] = [\n `// Auto-generated API types for domain: ${domain}\\n\\n`,\n ];\n\n output.push(`${typesDefinitions}\\n\\n`);\n\n if (supportedMethods.length > 0) {\n output.push(\n `export type ApiMethod = ${supportedMethods\n .map(m => `'${m}'`)\n .join(' | ')};\\n\\n`\n );\n } else {\n output.push(`export type ApiMethod = never;\\n\\n`);\n }\n\n output.push(`${PROXY_TYPES}\\n\\n`);\n\n const structure = buildApiStructure(endpoints);\n\n output.push(\n `export type Api = BuildApi<${structureToString(structure)}>;\\n\\n`\n );\n\n output.push(DEFAULT_UTILITY_TYPES);\n\n return output.join('');\n }\n}\n","import { constants } from 'fs';\nimport fs from 'fs/promises';\nimport { SourceFile } from 'ts-morph';\n\nconst getOutputFilePath = (file: SourceFile): string | null => {\n const result = file.getEmitOutput({ emitOnlyDtsFiles: false });\n\n for (const outputFile of result.getOutputFiles()) {\n const filePath = outputFile.getFilePath();\n if (filePath.endsWith('.js')) {\n return filePath;\n }\n }\n\n return null;\n};\n\nexport class ImporterModule {\n constructor() {}\n\n public async import(\n files: Array<SourceFile>,\n alwaysFresh: boolean = false\n ): Promise<Map<string, any>> {\n const modules = new Map<string, any>();\n\n const importPromises = Array.from(files).map(async file => {\n const filePath = file.getFilePath();\n try {\n const module = await this.importFile(file, alwaysFresh);\n if (module) {\n modules.set(filePath, module);\n }\n } catch (error) {\n console.error(\n `Unable to load file at path: ${filePath}`,\n error\n );\n }\n });\n\n await Promise.all(importPromises);\n\n return modules;\n }\n\n private async importFile(\n file: SourceFile,\n alwaysFresh: boolean = false\n ): Promise<any | null> {\n const outputPath = getOutputFilePath(file);\n\n if (!outputPath) {\n return null;\n }\n\n await fs.access(outputPath, constants.R_OK);\n\n if (alwaysFresh) {\n delete require.cache[outputPath];\n }\n\n const importPath = `${outputPath}${alwaysFresh ? `?v=${Date.now()}` : ''}`;\n\n if (!importPath.startsWith(process.cwd())) {\n throw new Error('Invalid path');\n }\n\n const module = await import(importPath);\n return module.default || module;\n }\n}\n","import {\n ApinniConfig,\n OverridedContext,\n PluginTypes,\n ShareablePlugin,\n} from '@interfaces';\nimport { ApinniPlugin, Dependency, SharedContext } from '@interfaces';\n\nimport { Hooks, HooksParams } from './types';\n\nexport class PluginManagerModule {\n private plugins: PluginTypes[] = [];\n\n constructor(private readonly config: ApinniConfig) {\n this.plugins = this.resolveDependencies();\n }\n\n getPluginsCount() {\n return this.plugins.length;\n }\n\n private resolveDependencies(): PluginTypes[] {\n const pluginMap = new Map<string, PluginTypes>();\n const dependencies = new Map<string, string[]>();\n const visited = new Set<string>();\n const recursionStack = new Set<string>();\n const result: PluginTypes[] = [];\n\n const collectPlugins = (plugin: PluginTypes) => {\n if (!plugin.name) throw new Error('Plugin missing name');\n if (pluginMap.has(plugin.name)) return;\n\n pluginMap.set(plugin.name, plugin);\n dependencies.set(\n plugin.name,\n plugin.dependencies?.map((dep: Dependency) => {\n if (!dep.plugin.config?.shareable) {\n throw new Error(\n `Dependency ${dep.plugin.name} is not a ShareablePlugin`\n );\n }\n return dep.plugin.name;\n }) || []\n );\n\n plugin.dependencies?.forEach((dep: Dependency) =>\n collectPlugins(dep.plugin)\n );\n };\n\n this.config.plugins.forEach(plugin => collectPlugins(plugin));\n\n const topologicalSort = (name: string) => {\n if (recursionStack.has(name)) {\n throw new Error(\n `Circular dependency detected involving plugin: ${name}`\n );\n }\n if (visited.has(name)) return;\n\n recursionStack.add(name);\n const deps = dependencies.get(name) || [];\n deps.forEach(dep => {\n if (!pluginMap.has(dep)) {\n throw new Error(`Dependency ${dep} not found`);\n }\n topologicalSort(dep);\n });\n recursionStack.delete(name);\n visited.add(name);\n const plugin = pluginMap.get(name)!;\n result.push(plugin);\n };\n\n pluginMap.forEach((_, name) => topologicalSort(name));\n return result;\n }\n\n async executeHook<T extends Hooks>(\n hookName: T,\n ...args: [...params: HooksParams[T]]\n ) {\n if (hookName === 'onInitialize') {\n return this.runOnInitializeHook(\n ...(args as HooksParams['onInitialize'])\n );\n }\n\n if (hookName === 'onAfterDecoratorsProcessed') {\n return this.runOnAfterDecoratorProcessed();\n }\n\n if (hookName === 'onRegisterMetadata') {\n return this.runOnRegisterMetadata(\n ...(args as HooksParams['onRegisterMetadata'])\n );\n }\n\n if (hookName === 'onConsumeDependencyContexts') {\n return this.runOnConsumeDependencies();\n }\n\n if (hookName === 'onGenerateTypes') {\n return this.runOnGenerateTypes(\n ...(args as HooksParams['onGenerateTypes'])\n );\n }\n }\n\n private async runOnInitializeHook(...params: HooksParams['onInitialize']) {\n await Promise.all(\n this.plugins.map(plugin => plugin.hooks.onInitialize(...params))\n );\n }\n\n private runOnAfterDecoratorProcessed() {\n this.plugins.forEach(plugin =>\n plugin.hooks.onAfterDecoratorsProcessed?.()\n );\n }\n\n private runOnRegisterMetadata(\n ...params: HooksParams['onRegisterMetadata']\n ) {\n this.plugins.forEach(plugin => {\n const isDependency = this.config.plugins.every(\n p => p.name !== plugin.name\n );\n const allowManipulation =\n !isDependency ||\n plugin.dependencies?.some(\n (dep: Dependency) => dep.options?.allowContextManipulation\n );\n\n if (allowManipulation && plugin.hooks.onRegisterMetadata) {\n plugin.hooks.onRegisterMetadata(...params);\n }\n });\n }\n\n private runOnGenerateTypes(...params: HooksParams['onGenerateTypes']) {\n this.plugins.forEach(plugin => {\n const isDependency = this.config.plugins.every(\n p => p.name !== plugin.name\n );\n const allowManipulation =\n !isDependency ||\n plugin.dependencies?.some(\n (dep: Dependency) => dep.options?.allowContextManipulation\n );\n\n if (allowManipulation && plugin.hooks.onGenerateTypes) {\n plugin.hooks.onGenerateTypes(...params);\n }\n });\n }\n\n private runOnConsumeDependencies() {\n const shareablePluginsContextMap = new WeakMap<\n ShareablePlugin,\n SharedContext\n >();\n\n this.plugins\n .filter(\n plugin =>\n plugin.dependencies?.length &&\n 'onConsumeDependencyContexts' in plugin.hooks\n )\n .forEach(_plugin => {\n const plugin = _plugin as unknown as ApinniPlugin<\n OverridedContext,\n [Dependency]\n >;\n const contexts = plugin.dependencies.map(dep => {\n if (!shareablePluginsContextMap.has(dep.plugin)) {\n shareablePluginsContextMap.set(\n dep.plugin,\n dep.plugin.hooks.onProvideSharedContext()\n );\n }\n\n const sharedContext = shareablePluginsContextMap.get(\n dep.plugin\n );\n\n if (!sharedContext) {\n throw new Error(\n `Shared context not found for dependency ${dep.plugin.name}`\n );\n }\n return sharedContext;\n });\n plugin.hooks.onConsumeDependencyContexts(\n contexts as [SharedContext]\n );\n });\n }\n}\n","export const INTERNAL_DECORATORS = [\n 'ApinniController',\n 'ApinniEndpoint',\n 'ApinniDomain',\n 'ApinniDisabled',\n];\n","import { join } from 'path';\nimport {\n ModuleKind,\n ModuleResolutionKind,\n Project,\n SourceFile,\n} from 'ts-morph';\n\nimport { DecoratorType } from '@interfaces';\n\nimport { INTERNAL_DECORATORS } from '../../../constants/decorators';\nimport { PipelineOptions } from '../../types';\n\nexport class ScannerModule {\n private project: Project;\n\n constructor(params?: { options?: PipelineOptions; project?: Project }) {\n this.project =\n params?.project ??\n new Project({\n tsConfigFilePath: join(process.cwd(), 'tsconfig.json'),\n skipAddingFilesFromTsConfig: false,\n skipFileDependencyResolution: true,\n compilerOptions: {\n lib: ['lib.es2024.d.ts'],\n strictNullChecks: true,\n strict: true,\n\n ...(!params?.options?.useExistingBuild && {\n module: ModuleKind.CommonJS,\n moduleResolution: ModuleResolutionKind.Node16,\n outDir: './.apinni/build',\n }),\n },\n });\n }\n\n public getProject() {\n return this.project;\n }\n\n public restartProject() {\n this.project = new Project({\n tsConfigFilePath: join(process.cwd(), 'tsconfig.json'),\n skipAddingFilesFromTsConfig: false,\n skipFileDependencyResolution: true,\n compilerOptions: this.project.getCompilerOptions(),\n });\n }\n\n public async traverseAndCacheTsMorph() {\n return new Promise(resolve => {\n this.project.getSourceFiles().forEach(sf => {\n sf.getReferencedSourceFiles();\n sf.getReferencingSourceFiles();\n sf.getClasses().map(cls => cls.getMethods());\n });\n\n resolve(true);\n });\n }\n\n public getFileTypeOfSourceFile(\n sourceFile: SourceFile,\n externalDecorators: Array<{ type: DecoratorType; name: string }> = []\n ) {\n const { decoratorTypeMap, decoratorNames } =\n this.prepareDecoratorsMap(externalDecorators);\n\n let fileType = null as DecoratorType | null;\n\n this.processDecoratorsInSourceFile(sourceFile, decoratorNames, name => {\n fileType = decoratorTypeMap.get(name)!;\n return fileType === 'run-time';\n });\n\n return { type: fileType };\n }\n\n public getSourceFilesWithDecorators(\n externalDecorators: Array<{ type: DecoratorType; name: string }> = []\n ) {\n const { decoratorTypeMap, decoratorNames } =\n this.prepareDecoratorsMap(externalDecorators);\n\n const filesWithDecorators: Array<{\n sourceFile: SourceFile;\n type: DecoratorType;\n }> = [];\n\n for (const sourceFile of this.project.getSourceFiles()) {\n let fileType = null as DecoratorType | null;\n\n this.processDecoratorsInSourceFile(\n sourceFile,\n decoratorNames,\n name => {\n fileType = decoratorTypeMap.get(name)!;\n return fileType === 'run-time';\n }\n );\n\n if (fileType) {\n filesWithDecorators.push({ sourceFile, type: fileType });\n }\n }\n\n return filesWithDecorators;\n }\n\n private buildDecoratorImportMapForSourceFile(\n sourceFile: SourceFile,\n decoratorNames: Set<string>\n ) {\n const map = new Map<string, string>();\n const decoratorsToSearch = new Set(decoratorNames);\n\n for (const imp of sourceFile.getImportDeclarations()) {\n for (const named of imp.getNamedImports()) {\n const exported = named.getNameNode().getText();\n const alias = named.getAliasNode()?.getText() ?? exported;\n\n if (decoratorsToSearch.has(exported)) {\n map.set(alias, exported);\n decoratorsToSearch.delete(exported);\n }\n }\n }\n\n // If no imports found - just keep 1 to 1 relation in case decorator defined in same file\n decoratorsToSearch.forEach(dec => map.set(dec, dec));\n\n return map;\n }\n\n private processDecoratorsInSourceFile(\n sourceFile: SourceFile,\n decoratorNames: Set<string>,\n callback: (name: string) => boolean\n ) {\n const importMap = this.buildDecoratorImportMapForSourceFile(\n sourceFile,\n decoratorNames\n );\n\n for (const classDecl of sourceFile.getClasses()) {\n // Check class decorators\n for (const dec of classDecl.getDecorators()) {\n const name = importMap.get(dec.getName());\n if (name) {\n if (callback(name)) {\n return;\n }\n }\n }\n\n // Check method decorators\n for (const method of classDecl.getMethods()) {\n for (const dec of method.getDecorators()) {\n const name = importMap.get(dec.getName());\n if (name) {\n if (callback(name)) {\n return;\n }\n }\n }\n }\n }\n }\n\n private prepareDecoratorsMap(\n externalDecorators: Array<{ type: DecoratorType; name: string }> = []\n ) {\n const decoratorTypeMap = new Map<string, DecoratorType>([\n ...INTERNAL_DECORATORS.map(\n value => [value, 'compile-time'] as const\n ),\n ...externalDecorators.map(\n decorator => [decorator.name, decorator.type] as const\n ),\n ]);\n\n // For quick membership checks\n const decoratorNames = new Set(decoratorTypeMap.keys());\n\n return { decoratorTypeMap, decoratorNames };\n }\n}\n","import { Listr, PRESET_TIMER } from 'listr2';\nimport { SourceFile } from 'ts-morph';\n\nimport { ApinniConfig, DecoratorType } from '@interfaces';\n\nimport { DecoratorRegistry } from '../decorator-registry';\nimport { GenerationContext } from '../generation-context';\nimport { CompilerModule } from './modules/compiler-module/compiler';\nimport { DecoratorsModule } from './modules/decorators-module/decorators';\nimport { GeneratorModule } from './modules/generator-module/generator';\nimport { ImporterModule } from './modules/importer-module/importer';\nimport { PluginManagerModule } from './modules/plugin-manager-module/plugin-manager';\nimport { ScannerModule } from './modules/scanner-module/scanner';\nimport { PipelineOptions } from './types';\n\nexport class Pipeline {\n private decoratorRegistry: DecoratorRegistry;\n private pluginManager: PluginManagerModule;\n private scannerModule: ScannerModule;\n private compilerModule: CompilerModule;\n private importerModule: ImporterModule;\n private decoratorsModule: DecoratorsModule;\n private generatorModule: GeneratorModule;\n\n constructor(\n config: ApinniConfig,\n private options: PipelineOptions\n ) {\n this.decoratorRegistry = new DecoratorRegistry();\n this.pluginManager = new PluginManagerModule(config);\n this.scannerModule = new ScannerModule();\n this.compilerModule = new CompilerModule();\n this.importerModule = new ImporterModule();\n this.decoratorsModule = new DecoratorsModule();\n this.generatorModule = new GeneratorModule(\n config,\n this.scannerModule.getProject()\n );\n }\n\n async run() {\n const tasks = new Listr(\n [\n {\n title: 'Preparation Phase',\n task: (_, task) => {\n return task.newListr([\n {\n title: 'Caching referencing files',\n task: async () => {\n await this.scannerModule.traverseAndCacheTsMorph();\n },\n },\n {\n title: 'Initializing plugins',\n task: async (_, subTask) => {\n await this.pluginManager.executeHook(\n 'onInitialize',\n {\n register: definition =>\n this.decoratorRegistry.register(\n definition\n ),\n },\n 'default'\n );\n\n const pluginsCount =\n this.pluginManager.getPluginsCount();\n\n subTask.title += ` (${pluginsCount} plugin${pluginsCount === 1 ? '' : 's'} loaded)`;\n },\n },\n ]);\n },\n },\n {\n title: 'Core Processing',\n // @ts-expect-error Injecting isolated context\n task: (ctx, task) => {\n return task.newListr(\n [\n {\n title: 'Scanning for decorators',\n task: (subCtx, subTask) => {\n const filesWithDecorators =\n this.scannerModule.getSourceFilesWithDecorators(\n this.decoratorRegistry.getRegisteredDecorators()\n );\n\n ctx.filesWithDecorators =\n filesWithDecorators;\n\n subCtx.filesToImport =\n filesWithDecorators\n .filter(\n ({ type }) =>\n type === 'run-time'\n )\n .map(\n ({ sourceFile }) =>\n sourceFile\n );\n\n const total =\n filesWithDecorators.length;\n\n subTask.title += `(${total} file${total === 1 ? '' : 's'} found)`;\n },\n },\n {\n title: 'Compiling files with decorators',\n task: async (subCtx, subTask) => {\n if (this.options.useExistingBuild) {\n return subTask.skip(\n 'Skipped compilation (using existing build)'\n );\n }\n\n const compiledFiles =\n await this.compilerModule.compileFiles(\n subCtx.filesToImport,\n {\n force: false,\n }\n );\n\n subTask.title += ` (${compiledFiles} file${compiledFiles === 1 ? '' : 's'} compiled)`;\n },\n },\n {\n title: 'Resolving decorators',\n task: async (subCtx, subTask) => {\n return subTask.newListr(\n [\n {\n title: 'Loading modules',\n task: async (\n nestedContext,\n nestedTask\n ) => {\n nestedContext.modules =\n await this.importerModule.import(\n subCtx.filesToImport\n );\n\n const total =\n nestedContext\n .modules.size;\n\n nestedTask.title += ` (${total} module${total === 1 ? '' : 's'} loaded)`;\n },\n },\n {\n title: 'Processing decorators',\n task: async (\n nestedContext,\n nestedTask\n ) => {\n const processed =\n this.decoratorsModule.processDecorators(\n {\n filesWithDecorators:\n ctx.filesWithDecorators,\n modules:\n nestedContext.modules,\n },\n params =>\n this.decoratorRegistry.processEvent(\n 'register',\n params\n )\n );\n\n nestedTask.title += ` (${processed} decorator${processed === 1 ? '' : 's'} processed)`;\n },\n },\n ],\n {\n ctx: {\n modules: new Map<\n string,\n any\n >(),\n },\n }\n );\n },\n },\n ],\n {\n ctx: {\n filesToImport: [] as Array<SourceFile>,\n },\n }\n );\n },\n },\n {\n title: 'Finalization',\n task: (_, task) => {\n return task.newListr([\n {\n title: 'Executing plugin hooks',\n task: async () => {\n await this.pluginManager.executeHook(\n 'onAfterDecoratorsProcessed'\n );\n\n await this.pluginManager.executeHook(\n 'onConsumeDependencyContexts'\n );\n\n const context =\n GenerationContext.getInstance();\n\n await this.pluginManager.executeHook(\n 'onRegisterMetadata',\n {\n registerClassMetadata: (...args) =>\n context.registerClassMetadata(\n ...args\n ),\n registerMethodMetadata: (...args) =>\n context.registerMethodMetadata(\n ...args\n ),\n }\n );\n },\n },\n {\n title: 'Generating types',\n task: async () => {\n const context =\n GenerationContext.getInstance();\n\n const schema =\n await this.generatorModule.generate(\n context.getPreparedData()\n );\n\n await this.pluginManager.executeHook(\n 'onGenerateTypes',\n schema\n );\n },\n },\n ]);\n },\n },\n ],\n {\n rendererOptions: {\n timer: PRESET_TIMER,\n collapseSubtasks: false,\n },\n ctx: {\n filesWithDecorators: [] as Array<{\n sourceFile: SourceFile;\n type: DecoratorType;\n }>,\n },\n }\n );\n\n await tasks.run();\n }\n}\n","const colors = {\n reset: '\\x1b[0m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n cyan: '\\x1b[36m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n red: '\\x1b[31m',\n gray: '\\x1b[90m',\n};\n\nexport const PREFIX = `${colors.bold}${colors.cyan}[Apinni]${colors.reset}`;\n\nexport function fmtPath(p?: string) {\n return p ? `${colors.green}${p}${colors.reset}` : '';\n}\n\nexport function line(length = 44) {\n return `${colors.cyan}${'â'.repeat(length)}${colors.reset}`;\n}\n\nexport function logStartup(version: string) {\n console.log(line());\n console.log(\n `${colors.bold}${colors.cyan}đ ī¸ Apinni${colors.reset} | ${colors.green}TypeScript ${version}${colors.reset}`\n );\n console.log(line());\n}\n\nexport function logWatchingStart() {\n console.log('');\n console.log(\n `${PREFIX} âļ ${colors.bold}Watching for file changes${colors.reset} â press ${colors.bold}Ctrl+C${colors.reset} to exit.`\n );\n console.log('');\n}\n\nexport function logEventStart(event: string, path?: string) {\n const icons: Record<string, string> = {\n add: 'â',\n change: 'âī¸ ',\n unlink: 'đī¸ ',\n coldStart: 'đ',\n };\n const icon = icons[event] ?? 'âšī¸';\n console.log(\n `${PREFIX} ${icon} ${colors.bold}${event.toUpperCase()}${colors.reset} ${fmtPath(path)}`\n );\n}\n\nexport function logEventComplete(\n event: string,\n path: string | undefined,\n durationSec: number,\n metaCount?: number\n) {\n const messages: Record<string, string> = {\n coldStart: `Initialized with ${metaCount ?? 0} endpoints`,\n add: `New file analyzed`,\n change: `Changes processed`,\n unlink: `File removed`,\n };\n\n const msg = messages[event] ?? 'Done';\n console.log(\n `${PREFIX} â
${msg} ${fmtPath(path)} ${colors.gray}(${durationSec.toFixed(2)}s)${colors.reset}`\n );\n console.log('');\n}\n\nexport function logInfo(message: string) {\n console.log(`${PREFIX} âš ${colors.dim}${message}${colors.reset}`);\n}\n\nexport function logWarn(message: string) {\n console.warn(`${PREFIX} â ${colors.yellow}${message}${colors.reset}`);\n}\n\nexport function logError(message: string) {\n console.error(`${PREFIX} â ${colors.red}${message}${colors.reset}`);\n}\n","import chokidar from 'chokidar';\nimport { join } from 'path';\nimport { Decorator, SourceFile } from 'ts-morph';\n\nimport { ApinniConfig, DecoratorType } from '@interfaces';\n\nimport { DecoratorRegistry } from '../decorator-registry';\nimport { GenerationContext } from '../generation-context';\nimport {\n logError,\n logEventComplete,\n logEventStart,\n logInfo,\n logStartup,\n logWarn,\n logWatchingStart,\n} from './logs-helper';\nimport { CompilerModule } from './modules/compiler-module/compiler';\nimport { DecoratorsModule } from './modules/decorators-module/decorators';\nimport { GeneratorModule } from './modules/generator-module/generator';\nimport { ImporterModule } from './modules/importer-module/importer';\nimport { PluginManagerModule } from './modules/plugin-manager-module/plugin-manager';\nimport { ScannerModule } from './modules/scanner-module/scanner';\nimport { PipelineOptions } from './types';\n\ntype FileEvent = 'add' | 'change' | 'unlink' | 'coldStart';\n\ninterface EventAction {\n event: FileEvent;\n path?: string;\n}\n\nexport class Watcher {\n private decoratorRegistry: DecoratorRegistry;\n private pluginManager: PluginManagerModule;\n private scannerModule: ScannerModule;\n private compilerModule: CompilerModule;\n private importerModule: ImporterModule;\n private decoratorsModule: DecoratorsModule;\n private localModuleContext: Map<string, any> = new Map();\n private registeredParams: Map<\n string,\n {\n target: any;\n decorator: Decorator;\n propertyKey?: string | symbol;\n }[]\n > = new Map(); // Cache for registered decorator params per file\n private isProcessing = false;\n private actionsQueue: EventAction[] = [];\n\n constructor(private config: ApinniConfig) {\n this.decoratorRegistry = new DecoratorRegistry();\n this.pluginManager = new PluginManagerModule(config);\n this.scannerModule = new ScannerModule();\n this.compilerModule = new CompilerModule();\n this.importerModule = new ImporterModule();\n this.decoratorsModule = new DecoratorsModule();\n }\n\n async run() {\n logStartup('1.0.0');\n\n await this.coldStart();\n\n logWatchingStart();\n\n const watcher = chokidar.watch('.', {\n persistent: true,\n ignoreInitial: true,\n ignored: [\n 'node_modules',\n '.apinni',\n 'build',\n 'dist',\n (path: string, stats?: any) =>\n Boolean(\n stats?.isFile() &&\n (path.endsWith('.d.ts') || !path.endsWith('.ts'))\n ),\n ],\n });\n\n watcher.on('add', async (path: string) => {\n this.actionsQueue.push({ event: 'add', path });\n await this.processChanges();\n });\n\n watcher.on('change', async (path: string) => {\n this.actionsQueue.push({ event: 'change', path });\n await this.processChanges();\n });\n\n watcher.on('unlink', async (path: string) => {\n this.actionsQueue.push({ event: 'unlink', path });\n await this.processChanges();\n });\n }\n\n private async coldStart() {\n this.actionsQueue.push({ event: 'coldStart' });\n await this.processChanges();\n }\n\n private async processChanges() {\n if (this.isProcessing || this.actionsQueue.length === 0) {\n return;\n }\n\n this.isProcessing = true;\n const action = this.actionsQueue.shift();\n\n try {\n if (action) {\n await this.handleEvent(action);\n }\n } catch (error) {\n console.error(`Error processing event: ${error}`);\n } finally {\n this.isProcessing = false;\n if (this.actionsQueue.length > 0) {\n await this.processChanges();\n }\n }\n }\n\n private async handleEvent(action: EventAction) {\n const start = performance.now();\n\n const { event, path } = action;\n\n logEventStart(event, path);\n\n // Step 1: Initialize plugins and registry (only for coldStart)\n if (event === 'coldStart') {\n try {\n await this.pluginManager.executeHook(\n 'onInitialize',\n {\n register: (definition: any) =>\n this.decoratorRegistry.register(definition),\n },\n 'watch'\n );\n\n logInfo(\n `Initialized plugins: ${this.pluginManager.getPluginsCount()}`\n );\n\n try {\n const registeredDecorators =\n this.decoratorRegistry.getRegisteredDecorators();\n const filesWithDecorators =\n this.scannerModule.getSourceFilesWithDecorators(\n registeredDecorators\n );\n logInfo(\n `Found ${filesWithDecorators.length} files with decorators`\n );\n } catch (err) {\n logWarn(\n `Could not evaluate files with decorators: ${String(err)}`\n );\n }\n } catch (err) {\n logError(`Plugin initialization failed: ${String(err)}`);\n }\n }\n\n let affectedFilesWithDecorators: Array<{\n sourceFile: SourceFile;\n type: DecoratorType;\n }> = [];\n let normalizedPath: string | undefined;\n if (path) {\n normalizedPath = join(process.cwd(), path);\n }\n\n // Step 2: Unregister decorators using cache (for change/unlink, or add if previously cached)\n if (['add', 'change', 'unlink'].includes(event) && normalizedPath) {\n const affectedPaths = this.getAffectedFilePaths(event, path);\n\n for (const filePath of affectedPaths) {\n const paramsList = this.registeredParams.get(filePath) || [];\n for (const params of paramsList) {\n this.decoratorRegistry.processEvent('unregister', params);\n }\n\n const targets = new Set(paramsList.map(({ target }) => target));\n for (const target of targets) {\n GenerationContext.getInstance().removeMetadataByTarget(\n target\n );\n }\n this.registeredParams.delete(filePath);\n }\n }\n\n // Step 3: Update the ts-morph project\n await this.updateProject(event, path);\n\n // Step 4: Get affected files with decorators for registration (excludes deleted base file)\n affectedFilesWithDecorators = this.getAffectedFilesWithDecorators(\n event,\n path\n );\n\n // Step 5: Compile and import runtime files if needed (not for unlink without affected)\n let updatedModules = new Map<string, any>();\n if (event !== 'unlink' || affectedFilesWithDecorators.length > 0) {\n const filesToImport = this.filterRuntimeFiles(\n affectedFilesWithDecorators\n );\n if (filesToImport.length > 0) {\n await this.compilerModule.compileFiles(filesToImport, {\n force: event === 'coldStart',\n });\n updatedModules =\n await this.importerModule.import(filesToImport);\n updatedModules.forEach((value, key) =>\n this.localModuleContext.set(key, value)\n );\n }\n } else if (\n event === 'unlink' &&\n normalizedPath &&\n this.localModuleContext.has(normalizedPath)\n ) {\n this.localModuleContext.delete(normalizedPath);\n }\n\n // Step 6: Register decorators with cache update (not for unlink without affected)\n if (affectedFilesWithDecorators.length > 0) {\n this.decoratorsModule.processDecorators(\n {\n filesWithDecorators: affectedFilesWithDecorators,\n modules:\n event === 'coldStart'\n ? this.localModuleContext\n : updatedModules,\n },\n params => {\n this.decoratorRegistry.processEvent('register', params);\n const filePath = params.sourceFile.getFilePath();\n if (!this.registeredParams.has(filePath)) {\n this.registeredParams.set(filePath, []);\n }\n this.registeredParams.get(filePath)!.push(params);\n return true;\n }\n );\n }\n\n // Step 7: Execute plugin hooks\n await this.pluginManager.executeHook('onAfterDecoratorsProcessed');\n await this.pluginManager.executeHook('onConsumeDependencyContexts');\n\n const context = GenerationContext.getInstance();\n await this.pluginManager.executeHook('onRegisterMetadata', {\n registerClassMetadata: (...args) =>\n context.registerClassMetadata(...args),\n registerMethodMetadata: (...args) =>\n context.registerMethodMetadata(...args),\n });\n\n // Step 8: Generate types\n const meta = context.getPreparedData();\n const generatorModule = new GeneratorModule(\n this.config,\n this.scannerModule.getProject()\n );\n const schema = await generatorModule.generate(meta);\n\n await this.pluginManager.executeHook('onGenerateTypes', schema);\n\n const duration = (performance.now() - start) / 1000;\n logEventComplete(event, path, duration, meta.length);\n }\n\n private async updateProject(event: FileEvent, path?: string) {\n const project = this.scannerModule.getProject();\n if (event === 'coldStart') {\n await this.scannerModule.traverseAndCacheTsMorph();\n return;\n }\n\n if (!path) return;\n const normalizedPath = join(process.cwd(), path);\n let sourceFile = project.getSourceFile(normalizedPath);\n\n if (event === 'add' || event === 'change') {\n if (!sourceFile) {\n sourceFile = project.addSourceFileAtPath(normalizedPath);\n } else {\n this.scannerModule.restartProject();\n }\n } else if (event === 'unlink') {\n if (sourceFile) {\n project.removeSourceFile(sourceFile);\n }\n }\n }\n\n private getAffectedFilePaths(event: FileEvent, path?: string): string[] {\n if (event === 'coldStart' || !path) return [];\n\n const normalizedPath = join(process.cwd(), path);\n const project = this.scannerModule.getProject();\n const sourceFile = project.getSourceFile(normalizedPath);\n\n if (!sourceFile) {\n return [normalizedPath];\n }\n\n let referencingPaths: string[] = [];\n try {\n referencingPaths = sourceFile\n .getReferencingSourceFiles()\n .map(sf => sf.getFilePath());\n } catch (error) {\n console.warn(\n `Error getting referencing files for ${normalizedPath}: ${error}`\n );\n }\n\n const affected = new Set<string>([normalizedPath, ...referencingPaths]);\n return Array.from(affected);\n }\n\n private getAffectedFilesWithDecorators(\n event: FileEvent,\n path?: string\n ): Array<{ sourceFile: SourceFile; type: DecoratorType }> {\n const registeredDecorators =\n this.decoratorRegistry.getRegisteredDecorators();\n\n if (event === 'coldStart') {\n return this.scannerModule.getSourceFilesWithDecorators(\n registeredDecorators\n );\n }\n\n if (!path) return [];\n\n const normalizedPath = join(process.cwd(), path);\n const project = this.scannerModule.getProject();\n let baseFiles: SourceFile[] = [];\n\n const sourceFile = project.getSourceFile(normalizedPath);\n if (sourceFile && event !== 'unlink') {\n baseFiles = [sourceFile];\n }\n\n let referencingFiles: SourceFile[] = [];\n if (sourceFile) {\n try {\n referencingFiles = sourceFile.getReferencingSourceFiles();\n } catch (error) {\n console.warn(\n `Error getting referencing files for ${normalizedPath}: ${error}`\n );\n }\n }\n\n const allAffected = [...baseFiles, ...referencingFiles];\n\n return allAffected\n .map(sf => {\n try {\n const { type } = this.scannerModule.getFileTypeOfSourceFile(\n sf,\n registeredDecorators\n );\n return type ? { sourceFile: sf, type } : null;\n } catch (error) {\n console.warn(\n `Error accessing source file ${sf.getFilePath()}: ${error}`\n );\n return null;\n }\n })\n .filter(\n (\n value\n ): value is { sourceFile: SourceFile; type: DecoratorType } =>\n value !== null\n );\n }\n\n private filterRuntimeFiles(\n filesWithDecorators: Array<{\n sourceFile: SourceFile;\n type: DecoratorType;\n }>\n ): SourceFile[] {\n return filesWithDecorators\n .filter(({ type }) => type === 'run-time')\n .map(({ sourceFile }) => sourceFile);\n }\n}\n","import { ApinniConfig } from '@interfaces';\n\nimport { PipelineOptions } from './core/pipeline';\nimport { Pipeline, Watcher } from './core/pipeline';\n\nexport async function runApinni(\n config: ApinniConfig,\n options: PipelineOptions\n): Promise<void> {\n const runner = options.watch\n ? new Watcher(config)\n : new Pipeline(config, options);\n\n await runner.run();\n}\n\nexport type { PipelineOptions } from './core/pipeline';\n","import { bundleRequire } from 'bundle-require';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nconst SUPPORTED_CONFIGS = [\n 'apinni.config.ts',\n 'apinni.config.js',\n 'apinni.config.mjs',\n 'apinni.config.cjs',\n];\n\nexport async function loadApinniConfig(cwd: string = process.cwd()) {\n for (const file of SUPPORTED_CONFIGS) {\n const absPath = path.join(cwd, file);\n if (fs.existsSync(absPath)) {\n const { mod } = await bundleRequire({\n filepath: absPath,\n });\n\n return mod.default || mod;\n }\n }\n\n throw new Error(\n 'No apinni.config.ts, .js, cjs or .mjs found in project root'\n );\n}\n"]}
|