@hexaijs/plugin-application-builder 0.1.1 → 0.2.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/dist/cli.d.ts +0 -2
- package/dist/cli.js +569 -52
- package/dist/cli.js.map +1 -1
- package/dist/decorators/index.d.ts +8 -6
- package/dist/decorators/index.js +13 -31
- package/dist/decorators/index.js.map +1 -1
- package/dist/index.d.ts +48 -5
- package/dist/index.js +596 -15
- package/dist/index.js.map +1 -1
- package/package.json +24 -12
- package/dist/application-builder-generator.d.ts +0 -15
- package/dist/application-builder-generator.d.ts.map +0 -1
- package/dist/application-builder-generator.js +0 -81
- package/dist/application-builder-generator.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/code-generator.d.ts +0 -30
- package/dist/code-generator.d.ts.map +0 -1
- package/dist/code-generator.js +0 -131
- package/dist/code-generator.js.map +0 -1
- package/dist/config-loader.d.ts +0 -3
- package/dist/config-loader.d.ts.map +0 -1
- package/dist/config-loader.js +0 -65
- package/dist/config-loader.js.map +0 -1
- package/dist/config.d.ts +0 -13
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -31
- package/dist/config.js.map +0 -1
- package/dist/decorators/index.d.ts.map +0 -1
- package/dist/errors.d.ts +0 -13
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -32
- package/dist/errors.js.map +0 -1
- package/dist/hexai-plugin.d.ts +0 -30
- package/dist/hexai-plugin.d.ts.map +0 -1
- package/dist/hexai-plugin.js +0 -81
- package/dist/hexai-plugin.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/main.d.ts +0 -6
- package/dist/main.d.ts.map +0 -1
- package/dist/main.js +0 -53
- package/dist/main.js.map +0 -1
- package/dist/metadata-extractor.d.ts +0 -25
- package/dist/metadata-extractor.d.ts.map +0 -1
- package/dist/metadata-extractor.js +0 -247
- package/dist/metadata-extractor.js.map +0 -1
- package/dist/test.d.ts +0 -15
- package/dist/test.d.ts.map +0 -1
- package/dist/test.js +0 -104
- package/dist/test.js.map +0 -1
- package/dist/types.d.ts +0 -22
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,2CAA6B;AAC7B,mCAAqD;AAErD,KAAK,UAAU,IAAI;IACf,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,2CAA2C;IAC3C,IAAI,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEhC,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACxD,IAAI,gBAAgB,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC;QACxD,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,uCAAuC,WAAW,EAAE,CAAC,CAAC;QAClE,MAAM,IAAA,kCAA0B,EAAC,WAAW,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/metadata-extractor.ts","../src/code-generator.ts","../src/application-builder-generator.ts","../src/config.ts","../src/config-loader.ts","../src/main.ts","../src/cli.ts"],"names":["relative","handlers","path2","fs2","fs3","ts2","path3","path4"],"mappings":"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","file":"cli.js","sourcesContent":["export class DuplicateCommandHandlerError extends Error {\n constructor(commandClassName: string, handlers: string[]) {\n super(\n `Duplicate command handlers for \"${commandClassName}\": ${handlers.join(\", \")}`\n );\n this.name = \"DuplicateCommandHandlerError\";\n }\n}\n\nexport class DuplicateEventHandlerError extends Error {\n constructor(eventName: string, handlers: string[]) {\n super(\n `Duplicate event handlers for event \"${eventName}\": ${handlers.join(\", \")}`\n );\n this.name = \"DuplicateEventHandlerError\";\n }\n}\n\nexport class DuplicateQueryHandlerError extends Error {\n constructor(queryClassName: string, handlers: string[]) {\n super(\n `Duplicate query handlers for \"${queryClassName}\": ${handlers.join(\", \")}`\n );\n this.name = \"DuplicateQueryHandlerError\";\n }\n}\n\nexport class MessageClassNotFoundError extends Error {\n constructor(messageClassName: string, filePath: string) {\n super(\n `Cannot find \"${messageClassName}\" - not imported and not defined in \"${filePath}\"`\n );\n this.name = \"MessageClassNotFoundError\";\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as ts from \"typescript\";\nimport {\n HandlerMetadata,\n CommandHandlerMetadata,\n EventHandlerMetadata,\n QueryHandlerMetadata,\n} from \"./types\";\nimport { MessageClassNotFoundError } from \"./errors\";\n\n/**\n * Extracts handler metadata from TypeScript files using AST parsing\n */\nexport class HandlerMetadataExtractor {\n private config: {\n commandHandlerDecorator: string;\n eventHandlerDecorator: string;\n } = {\n commandHandlerDecorator: \"CommandHandlerMarker\",\n eventHandlerDecorator: \"EventHandlerMarker\",\n };\n\n constructor(\n private contextPath: string,\n private outputFile: string,\n config: {\n commandHandlerDecorator?: string;\n eventHandlerDecorator?: string;\n } = {}\n ) {\n if (config.commandHandlerDecorator) {\n this.config.commandHandlerDecorator =\n config.commandHandlerDecorator;\n }\n if (config.eventHandlerDecorator) {\n this.config.eventHandlerDecorator = config.eventHandlerDecorator;\n }\n }\n\n extractHandlersMetadata(files: string[]): HandlerMetadata[] {\n const handlers: HandlerMetadata[] = [];\n\n for (const file of files) {\n const sourceCode = fs.readFileSync(file, \"utf-8\");\n const sourceFile = ts.createSourceFile(\n file,\n sourceCode,\n ts.ScriptTarget.Latest,\n true\n );\n\n ts.forEachChild(sourceFile, (node) => {\n if (ts.isClassDeclaration(node)) {\n const metadata = this.extractFromClass(\n node,\n file,\n sourceFile\n );\n if (metadata) {\n handlers.push(metadata);\n }\n }\n });\n }\n\n return handlers;\n }\n\n private extractFromClass(\n classNode: ts.ClassDeclaration,\n filePath: string,\n sourceFile: ts.SourceFile\n ): HandlerMetadata | null {\n const className = classNode.name?.text;\n if (!className) return null;\n\n // Get decorators using TypeScript 5.0+ API\n const decorators = ts.canHaveDecorators(classNode)\n ? ts.getDecorators(classNode)\n : undefined;\n if (!decorators) return null;\n\n for (const decorator of decorators) {\n const expression = decorator.expression;\n if (!ts.isCallExpression(expression)) continue;\n\n const decoratorName = expression.expression.getText();\n\n if (decoratorName === \"CommandHandlerMarker\") {\n return this.extractCommandHandlerMetadata(\n className,\n expression,\n filePath,\n sourceFile\n );\n }\n\n if (decoratorName === \"EventHandlerMarker\") {\n return this.extractEventHandlerMetadata(\n className,\n expression,\n filePath\n );\n }\n\n if (decoratorName === \"QueryHandlerMarker\") {\n return this.extractQueryHandlerMetadata(\n className,\n expression,\n filePath,\n sourceFile\n );\n }\n }\n\n return null;\n }\n\n private extractMessageHandlerMetadata(\n className: string,\n expression: ts.CallExpression,\n filePath: string,\n sourceFile: ts.SourceFile\n ): { messagePath: string; messageClassName: string } {\n const messageClassArg = expression.arguments[0];\n const messageClassName = messageClassArg!.getText();\n const messageImport = this.findImportForSymbol(\n messageClassName,\n sourceFile\n );\n\n let messagePath = \"\";\n let resolvedMessageClassName = messageClassName;\n\n if (messageImport) {\n const handlerDir = path.dirname(filePath);\n const resolvedImportPath = this.resolvePathAlias(messageImport.path);\n const messageAbsolutePath = path.resolve(\n handlerDir,\n resolvedImportPath + \".ts\"\n );\n messagePath = this.toRelativeImport(messageAbsolutePath);\n resolvedMessageClassName = messageImport.symbol;\n } else if (this.isClassDefinedInFile(messageClassName, sourceFile)) {\n messagePath = this.toRelativeImport(filePath);\n } else {\n throw new MessageClassNotFoundError(messageClassName, filePath);\n }\n\n return {\n messagePath,\n messageClassName: resolvedMessageClassName,\n };\n }\n\n private isClassDefinedInFile(\n className: string,\n sourceFile: ts.SourceFile\n ): boolean {\n for (const statement of sourceFile.statements) {\n if (\n ts.isClassDeclaration(statement) &&\n statement.name?.text === className\n ) {\n return true;\n }\n }\n return false;\n }\n\n private extractCommandHandlerMetadata(\n className: string,\n expression: ts.CallExpression,\n filePath: string,\n sourceFile: ts.SourceFile\n ): CommandHandlerMetadata {\n const { messagePath, messageClassName } = this.extractMessageHandlerMetadata(\n className,\n expression,\n filePath,\n sourceFile\n );\n\n return {\n type: \"command\",\n handlerPath: this.toRelativeImport(filePath),\n handlerClassName: className,\n commandPath: messagePath,\n commandClassName: messageClassName,\n };\n }\n\n private extractEventHandlerMetadata(\n className: string,\n expression: ts.CallExpression,\n filePath: string\n ): EventHandlerMetadata {\n let options = {};\n if (expression.arguments.length > 0) {\n const optionsArg = expression.arguments[0];\n options = this.parseObjectLiteral(optionsArg);\n }\n\n return {\n type: \"event\",\n handlerPath: this.toRelativeImport(filePath),\n handlerClassName: className,\n eventHandlerOptions: options,\n };\n }\n\n private extractQueryHandlerMetadata(\n className: string,\n expression: ts.CallExpression,\n filePath: string,\n sourceFile: ts.SourceFile\n ): QueryHandlerMetadata {\n const { messagePath, messageClassName } = this.extractMessageHandlerMetadata(\n className,\n expression,\n filePath,\n sourceFile\n );\n\n return {\n type: \"query\",\n handlerPath: this.toRelativeImport(filePath),\n handlerClassName: className,\n queryPath: messagePath,\n queryClassName: messageClassName,\n };\n }\n\n private findImportForSymbol(\n symbol: string,\n sourceFile: ts.SourceFile\n ): { path: string; symbol: string } | null {\n for (const statement of sourceFile.statements) {\n if (ts.isImportDeclaration(statement)) {\n const importClause = statement.importClause;\n const moduleSpecifier = (\n statement.moduleSpecifier as ts.StringLiteral\n ).text;\n\n if (\n importClause?.namedBindings &&\n ts.isNamedImports(importClause.namedBindings)\n ) {\n for (const element of importClause.namedBindings.elements) {\n if (element.name.text === symbol) {\n return {\n path: moduleSpecifier,\n symbol: element.name.text,\n };\n }\n }\n }\n }\n }\n\n return null;\n }\n\n private toRelativeImport(absolutePath: string): string {\n const outputFileAbsolutePath = path.join(\n this.contextPath,\n this.outputFile\n );\n const outputDir = path.dirname(outputFileAbsolutePath);\n\n const relative = path.relative(outputDir, absolutePath);\n const withoutExtension = relative.replace(/\\.ts$/, \"\");\n // Ensure relative path has proper prefix\n return withoutExtension.startsWith(\".\")\n ? withoutExtension\n : \"./\" + withoutExtension;\n }\n\n private parseObjectLiteral(node: ts.Node): Record<string, any> {\n if (!ts.isObjectLiteralExpression(node)) {\n return {};\n }\n\n const result: Record<string, any> = {};\n\n for (const property of node.properties) {\n if (ts.isPropertyAssignment(property)) {\n const name = property.name.getText();\n const value = property.initializer;\n\n if (ts.isStringLiteral(value)) {\n result[name] = value.text;\n } else if (ts.isNumericLiteral(value)) {\n result[name] = Number(value.text);\n } else if (value.kind === ts.SyntaxKind.TrueKeyword) {\n result[name] = true;\n } else if (value.kind === ts.SyntaxKind.FalseKeyword) {\n result[name] = false;\n }\n }\n }\n\n return result;\n }\n\n private resolvePathAlias(importPath: string): string {\n const tsconfigPath = path.join(this.contextPath, \"tsconfig.json\");\n if (!fs.existsSync(tsconfigPath)) return importPath;\n\n const tsconfig = JSON.parse(fs.readFileSync(tsconfigPath, \"utf-8\"));\n const paths = tsconfig.compilerOptions?.paths;\n const baseUrl = tsconfig.compilerOptions?.baseUrl || \".\";\n\n if (!paths) return importPath;\n\n for (const [alias, targets] of Object.entries(paths)) {\n const aliasPrefix = alias.replace(\"/*\", \"\");\n if (importPath.startsWith(aliasPrefix)) {\n const targetBase = (targets as string[])[0].replace(\"/*\", \"\");\n const resolvedBase = path.join(this.contextPath, baseUrl, targetBase);\n return importPath.replace(aliasPrefix, resolvedBase);\n }\n }\n\n return importPath;\n }\n}\n","import { BuildPluginConfig } from \"./config\";\nimport {\n DuplicateCommandHandlerError,\n DuplicateEventHandlerError,\n DuplicateQueryHandlerError,\n} from \"./errors\";\nimport {\n HandlerMetadata,\n CommandHandlerMetadata,\n EventHandlerMetadata,\n QueryHandlerMetadata,\n} from \"./types\";\n\n/**\n * Generates TypeScript code for ApplicationBuilder\n */\nexport class ApplicationCodeGenerator {\n constructor(private config: BuildPluginConfig) {}\n\n generateCode(handlers: HandlerMetadata[]): string {\n this.validateNoDuplicates(handlers);\n const imports = this.collectImports(handlers);\n const registrations = this.generateRegistrations(handlers);\n return this.assembleGeneratedCode(imports, registrations);\n }\n\n private validateNoDuplicates(handlers: HandlerMetadata[]): void {\n this.validateNoDuplicateCommandHandlers(handlers);\n this.validateNoDuplicateEventHandlers(handlers);\n this.validateNoDuplicateQueryHandlers(handlers);\n }\n\n private validateNoDuplicateHandlers<T extends HandlerMetadata>(\n handlers: HandlerMetadata[],\n typeFilter: (h: HandlerMetadata) => h is T,\n keyExtractor: (h: T) => string,\n errorFactory: (key: string, handlers: string[]) => Error\n ): void {\n const filteredHandlers = handlers.filter(typeFilter);\n\n const keyToHandlers = new Map<string, string[]>();\n for (const handler of filteredHandlers) {\n const key = keyExtractor(handler);\n const existing = keyToHandlers.get(key) ?? [];\n existing.push(handler.handlerClassName);\n keyToHandlers.set(key, existing);\n }\n\n for (const [key, handlerList] of keyToHandlers) {\n if (handlerList.length > 1) {\n throw errorFactory(key, handlerList);\n }\n }\n }\n\n private validateNoDuplicateCommandHandlers(\n handlers: HandlerMetadata[]\n ): void {\n this.validateNoDuplicateHandlers(\n handlers,\n (h): h is CommandHandlerMetadata => h.type === \"command\",\n (h) => h.commandClassName,\n (key, handlers) => new DuplicateCommandHandlerError(key, handlers)\n );\n }\n\n private validateNoDuplicateEventHandlers(\n handlers: HandlerMetadata[]\n ): void {\n const eventHandlers = handlers.filter(\n (h): h is EventHandlerMetadata => h.type === \"event\"\n );\n\n const namedEventHandlers = eventHandlers.filter(\n (h) => h.eventHandlerOptions.name !== undefined\n );\n\n this.validateNoDuplicateHandlers(\n namedEventHandlers,\n (h): h is EventHandlerMetadata => true,\n (h) => h.eventHandlerOptions.name!,\n (key, handlers) => new DuplicateEventHandlerError(key, handlers)\n );\n }\n\n private validateNoDuplicateQueryHandlers(\n handlers: HandlerMetadata[]\n ): void {\n this.validateNoDuplicateHandlers(\n handlers,\n (h): h is QueryHandlerMetadata => h.type === \"query\",\n (h) => h.queryClassName,\n (key, handlers) => new DuplicateQueryHandlerError(key, handlers)\n );\n }\n\n private createImportStatement(\n symbolName: string,\n importPath: string\n ): string {\n return `import { ${symbolName} } from '${importPath}';`;\n }\n\n private createCommandHandlerRegistration(\n commandClassName: string,\n handlerClassName: string\n ): string {\n return ` .withCommandHandler(${commandClassName}, () => new ${handlerClassName}())`;\n }\n\n private createEventHandlerRegistration(\n handlerClassName: string,\n eventName?: string\n ): string {\n const nameArg = eventName ? `, '${eventName}'` : \"\";\n return ` .withEventHandler(() => new ${handlerClassName}()${nameArg})`;\n }\n\n private createQueryHandlerRegistration(\n queryClassName: string,\n handlerClassName: string\n ): string {\n return ` .withQueryHandler(${queryClassName}, () => new ${handlerClassName}())`;\n }\n\n private isCommandHandler(\n handler: HandlerMetadata\n ): handler is CommandHandlerMetadata {\n return handler.type === \"command\";\n }\n\n private isEventHandler(\n handler: HandlerMetadata\n ): handler is EventHandlerMetadata {\n return handler.type === \"event\";\n }\n\n private isQueryHandler(\n handler: HandlerMetadata\n ): handler is QueryHandlerMetadata {\n return handler.type === \"query\";\n }\n\n private collectImports(handlers: HandlerMetadata[]): Set<string> {\n const imports = new Set<string>();\n imports.add(\n this.createImportStatement(\n \"ApplicationBuilder\",\n this.config.applicationBuilderImportPath\n )\n );\n\n for (const handler of handlers) {\n imports.add(\n this.createImportStatement(\n handler.handlerClassName,\n handler.handlerPath\n )\n );\n\n if (this.isCommandHandler(handler) && handler.commandPath) {\n imports.add(\n this.createImportStatement(\n handler.commandClassName,\n handler.commandPath\n )\n );\n }\n\n if (this.isQueryHandler(handler) && handler.queryPath) {\n imports.add(\n this.createImportStatement(\n handler.queryClassName,\n handler.queryPath\n )\n );\n }\n }\n\n return imports;\n }\n\n private generateRegistrations(handlers: HandlerMetadata[]): string[] {\n const commandRegistrations =\n this.generateCommandRegistrations(handlers);\n const queryRegistrations = this.generateQueryRegistrations(handlers);\n const eventRegistrations = this.generateEventRegistrations(handlers);\n return [...commandRegistrations, ...queryRegistrations, ...eventRegistrations];\n }\n\n private generateCommandRegistrations(\n handlers: HandlerMetadata[]\n ): string[] {\n return handlers\n .filter((h): h is CommandHandlerMetadata =>\n this.isCommandHandler(h)\n )\n .map((h) =>\n this.createCommandHandlerRegistration(\n h.commandClassName,\n h.handlerClassName\n )\n );\n }\n\n private generateQueryRegistrations(\n handlers: HandlerMetadata[]\n ): string[] {\n return handlers\n .filter((h): h is QueryHandlerMetadata =>\n this.isQueryHandler(h)\n )\n .map((h) =>\n this.createQueryHandlerRegistration(\n h.queryClassName,\n h.handlerClassName\n )\n );\n }\n\n private generateEventRegistrations(handlers: HandlerMetadata[]): string[] {\n return handlers\n .filter((h): h is EventHandlerMetadata => this.isEventHandler(h))\n .map((handler) => {\n this.validateEventHandlerOptions(handler);\n const eventName = handler.eventHandlerOptions.name;\n return this.createEventHandlerRegistration(\n handler.handlerClassName,\n eventName\n );\n });\n }\n\n private validateEventHandlerOptions(handler: EventHandlerMetadata): void {\n const options = handler.eventHandlerOptions;\n const invalidKeys = Object.keys(options).filter(\n (key) => key !== \"name\"\n );\n\n if (invalidKeys.length > 0) {\n throw new Error(\n `EventHandler for ${handler.handlerClassName} has invalid options: ${invalidKeys.join(\", \")}.\\n` +\n `Only 'name' option is supported. Use @EventHandler({ name: 'event-name' })`\n );\n }\n }\n\n private assembleGeneratedCode(\n imports: Set<string>,\n registrations: string[]\n ): string {\n const registrationCode =\n registrations.length > 0 ? \"\\n\" + registrations.join(\"\\n\") : \"\";\n\n return `\n${Array.from(imports).join(\"\\n\")}\n\nexport function createApplicationBuilder(): ApplicationBuilder {\n return new ApplicationBuilder()${registrationCode};\n}\n`;\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { glob } from \"glob\";\nimport { BuildPluginConfig } from \"./config\";\nimport { HandlerMetadataExtractor } from \"./metadata-extractor\";\nimport { ApplicationCodeGenerator } from \"./code-generator\";\n\n/**\n * Orchestrates the application builder generation process\n */\nexport class ApplicationBuilderGenerator {\n private metadataExtractor: HandlerMetadataExtractor;\n private codeGenerator: ApplicationCodeGenerator;\n\n constructor(\n private contextPath: string,\n private config: BuildPluginConfig\n ) {\n this.metadataExtractor = new HandlerMetadataExtractor(\n contextPath,\n config.outputFile\n );\n this.codeGenerator = new ApplicationCodeGenerator(config);\n }\n\n async generate(): Promise<void> {\n const handlerFiles = await this.scanHandlerFiles();\n const handlers = this.metadataExtractor.extractHandlersMetadata(handlerFiles);\n const code = this.codeGenerator.generateCode(handlers);\n this.writeToFile(code);\n }\n\n private async scanHandlerFiles(): Promise<string[]> {\n const allFiles: string[] = [];\n\n for (const pattern of this.config.handlers) {\n const files = await glob(pattern, {\n cwd: this.contextPath,\n absolute: true,\n });\n allFiles.push(...files);\n }\n\n return allFiles.sort();\n }\n\n private writeToFile(code: string): void {\n const outputFile = path.join(this.contextPath, this.config.outputFile);\n const outputDir = path.dirname(outputFile);\n\n fs.mkdirSync(outputDir, { recursive: true });\n fs.writeFileSync(outputFile, code, \"utf-8\");\n }\n}\n","export interface RawBuildPluginConfig {\n handlers: string[];\n outputFile?: string;\n applicationBuilderImportPath: string;\n}\n\nexport class BuildPluginConfig {\n public readonly handlers: string[];\n public readonly outputFile: string;\n public readonly applicationBuilderImportPath: string;\n\n private constructor(config: {\n handlers: string[];\n outputFile: string;\n applicationBuilderImportPath: string;\n }) {\n this.handlers = config.handlers;\n this.outputFile = config.outputFile;\n this.applicationBuilderImportPath = config.applicationBuilderImportPath;\n }\n\n static fromRawConfig(raw: RawBuildPluginConfig): BuildPluginConfig {\n // Validate required fields\n if (!raw.applicationBuilderImportPath) {\n throw new Error(\n \"applicationBuilderImportPath is required in hexai.config.ts\\n\" +\n \"Example: { applicationBuilderImportPath: '@/application', ... }\"\n );\n }\n\n if (!raw.handlers || raw.handlers.length === 0) {\n throw new Error(\n \"handlers array is required and must not be empty in hexai.config.ts\"\n );\n }\n\n // Provide defaults\n return new BuildPluginConfig({\n handlers: raw.handlers,\n outputFile:\n raw.outputFile ?? \"src/.generated/application-builder.ts\",\n applicationBuilderImportPath: raw.applicationBuilderImportPath,\n });\n }\n}\n","import * as fs from \"fs\";\nimport * as ts from \"typescript\";\nimport { BuildPluginConfig, RawBuildPluginConfig } from \"./config\";\n\nexport async function loadConfig(configPath: string): Promise<BuildPluginConfig> {\n const configSource = fs.readFileSync(configPath, \"utf-8\");\n const transpiledCode = transpileConfigFile(configSource);\n const moduleExports = evaluateConfigModule(transpiledCode);\n const rawConfig = extractConfigFromModule(moduleExports);\n return BuildPluginConfig.fromRawConfig(rawConfig);\n}\n\nfunction transpileConfigFile(source: string): string {\n const result = ts.transpileModule(source, {\n compilerOptions: {\n module: ts.ModuleKind.CommonJS,\n target: ts.ScriptTarget.ES2020,\n },\n });\n return result.outputText;\n}\n\nfunction evaluateConfigModule(code: string): any {\n const tempModule = { exports: {} };\n const fn = new Function(\"module\", \"exports\", \"require\", code);\n fn(tempModule, tempModule.exports, require);\n return tempModule.exports;\n}\n\nfunction extractConfigFromModule(moduleExports: any): RawBuildPluginConfig {\n return moduleExports.default || moduleExports;\n}\n","import * as path from \"path\";\nimport { ApplicationBuilderGenerator } from \"./application-builder-generator\";\nimport { loadConfig } from \"./config-loader\";\n\n// Re-export types for external use\nexport type {\n HandlerMetadata,\n CommandHandlerMetadata,\n EventHandlerMetadata,\n} from \"./types\";\nexport { HandlerMetadataExtractor } from \"./metadata-extractor\";\n\nexport async function generateApplicationBuilder(\n contextPath: string,\n options: {\n configFile?: string;\n } = {}\n): Promise<void> {\n let configFile = \"hexai.config.ts\";\n if (options.configFile) {\n configFile = options.configFile;\n }\n\n const configPath = path.join(contextPath, configFile);\n const config = await loadConfig(configPath);\n\n const generator = new ApplicationBuilderGenerator(contextPath, config);\n await generator.generate();\n}\n","#!/usr/bin/env node\nimport * as path from \"path\";\nimport { generateApplicationBuilder } from \"./index\";\n\nasync function main() {\n const args = process.argv.slice(2);\n\n // Support --context-path or default to cwd\n let contextPath = process.cwd();\n\n const contextPathIndex = args.indexOf(\"--context-path\");\n if (contextPathIndex !== -1 && args[contextPathIndex + 1]) {\n contextPath = path.resolve(args[contextPathIndex + 1]);\n }\n\n try {\n console.log(`Generating application builder for: ${contextPath}`);\n await generateApplicationBuilder(contextPath);\n console.log(\"✓ Application builder generated successfully\");\n } catch (error) {\n console.error(\"Error generating application builder:\", error);\n process.exit(1);\n }\n}\n\nmain().catch((error) => {\n console.error(\"Unexpected error:\", error);\n process.exit(1);\n});\n"]}
|
|
@@ -1,26 +1,28 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { MessageClass } from '@hexaijs/core';
|
|
2
|
+
|
|
3
|
+
interface EventHandlerOptions {
|
|
3
4
|
name?: string;
|
|
4
5
|
}
|
|
5
6
|
/**
|
|
6
7
|
* Decorator to mark a class as a command handler
|
|
7
8
|
* This is purely a marker for build-time code generation
|
|
8
9
|
*/
|
|
9
|
-
|
|
10
|
+
declare const CommandHandlerMarker: (messageClass: MessageClass) => <T extends {
|
|
10
11
|
new (...args: any[]): any;
|
|
11
12
|
}>(target: T) => T;
|
|
12
13
|
/**
|
|
13
14
|
* Decorator to mark a class as a query handler
|
|
14
15
|
* This is purely a marker for build-time code generation
|
|
15
16
|
*/
|
|
16
|
-
|
|
17
|
+
declare const QueryHandlerMarker: (messageClass: MessageClass) => <T extends {
|
|
17
18
|
new (...args: any[]): any;
|
|
18
19
|
}>(target: T) => T;
|
|
19
20
|
/**
|
|
20
21
|
* Decorator to mark a class as an event handler
|
|
21
22
|
* This is purely a marker for build-time code generation
|
|
22
23
|
*/
|
|
23
|
-
|
|
24
|
+
declare function EventHandlerMarker(options?: EventHandlerOptions): <T extends {
|
|
24
25
|
new (...args: any[]): any;
|
|
25
26
|
}>(target: T) => T;
|
|
26
|
-
|
|
27
|
+
|
|
28
|
+
export { CommandHandlerMarker, EventHandlerMarker, type EventHandlerOptions, QueryHandlerMarker };
|
package/dist/decorators/index.js
CHANGED
|
@@ -1,37 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.QueryHandlerMarker = exports.CommandHandlerMarker = void 0;
|
|
4
|
-
exports.EventHandlerMarker = EventHandlerMarker;
|
|
5
|
-
/**
|
|
6
|
-
* Creates a marker decorator for message handlers (command/query)
|
|
7
|
-
* These are purely markers for build-time code generation with no runtime behavior
|
|
8
|
-
*/
|
|
1
|
+
// src/decorators/index.ts
|
|
9
2
|
function createMessageHandlerMarker() {
|
|
10
|
-
|
|
11
|
-
return function
|
|
12
|
-
|
|
13
|
-
return target;
|
|
14
|
-
};
|
|
3
|
+
return function(messageClass) {
|
|
4
|
+
return function(target) {
|
|
5
|
+
return target;
|
|
15
6
|
};
|
|
7
|
+
};
|
|
16
8
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
* This is purely a marker for build-time code generation
|
|
20
|
-
*/
|
|
21
|
-
exports.CommandHandlerMarker = createMessageHandlerMarker();
|
|
22
|
-
/**
|
|
23
|
-
* Decorator to mark a class as a query handler
|
|
24
|
-
* This is purely a marker for build-time code generation
|
|
25
|
-
*/
|
|
26
|
-
exports.QueryHandlerMarker = createMessageHandlerMarker();
|
|
27
|
-
/**
|
|
28
|
-
* Decorator to mark a class as an event handler
|
|
29
|
-
* This is purely a marker for build-time code generation
|
|
30
|
-
*/
|
|
31
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
9
|
+
var CommandHandlerMarker = createMessageHandlerMarker();
|
|
10
|
+
var QueryHandlerMarker = createMessageHandlerMarker();
|
|
32
11
|
function EventHandlerMarker(options) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
12
|
+
return function(target) {
|
|
13
|
+
return target;
|
|
14
|
+
};
|
|
36
15
|
}
|
|
16
|
+
|
|
17
|
+
export { CommandHandlerMarker, EventHandlerMarker, QueryHandlerMarker };
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
37
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/decorators/index.ts"],"names":[],"mappings":";AAUA,SAAS,0BAAA,GAA6B;AAElC,EAAA,OAAO,SAAU,YAAA,EAA4B;AACzC,IAAA,OAAO,SAAmD,MAAA,EAAW;AACjE,MAAA,OAAO,MAAA;AAAA,IACX,CAAA;AAAA,EACJ,CAAA;AACJ;AAMO,IAAM,uBAAuB,0BAAA;AAM7B,IAAM,qBAAqB,0BAAA;AAO3B,SAAS,mBAAmB,OAAA,EAA+B;AAC9D,EAAA,OAAO,SAAmD,MAAA,EAAW;AACjE,IAAA,OAAO,MAAA;AAAA,EACX,CAAA;AACJ","file":"index.js","sourcesContent":["import type { MessageClass } from \"@hexaijs/core\";\n\nexport interface EventHandlerOptions {\n name?: string;\n}\n\n/**\n * Creates a marker decorator for message handlers (command/query)\n * These are purely markers for build-time code generation with no runtime behavior\n */\nfunction createMessageHandlerMarker() {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return function (messageClass: MessageClass) {\n return function <T extends { new (...args: any[]): any }>(target: T) {\n return target;\n };\n };\n}\n\n/**\n * Decorator to mark a class as a command handler\n * This is purely a marker for build-time code generation\n */\nexport const CommandHandlerMarker = createMessageHandlerMarker();\n\n/**\n * Decorator to mark a class as a query handler\n * This is purely a marker for build-time code generation\n */\nexport const QueryHandlerMarker = createMessageHandlerMarker();\n\n/**\n * Decorator to mark a class as an event handler\n * This is purely a marker for build-time code generation\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function EventHandlerMarker(options?: EventHandlerOptions) {\n return function <T extends { new (...args: any[]): any }>(target: T) {\n return target;\n };\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,48 @@
|
|
|
1
|
-
export {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
export { CommandHandlerMarker, EventHandlerMarker, EventHandlerOptions, QueryHandlerMarker } from './decorators/index.js';
|
|
2
|
+
import { HexaiCliPlugin } from '@hexaijs/cli';
|
|
3
|
+
import '@hexaijs/core';
|
|
4
|
+
|
|
5
|
+
declare function generateApplicationBuilder(contextPath: string, options?: {
|
|
6
|
+
configFile?: string;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
|
|
9
|
+
declare class DuplicateCommandHandlerError extends Error {
|
|
10
|
+
constructor(commandClassName: string, handlers: string[]);
|
|
11
|
+
}
|
|
12
|
+
declare class DuplicateEventHandlerError extends Error {
|
|
13
|
+
constructor(eventName: string, handlers: string[]);
|
|
14
|
+
}
|
|
15
|
+
declare class DuplicateQueryHandlerError extends Error {
|
|
16
|
+
constructor(queryClassName: string, handlers: string[]);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Configuration for the application-builder plugin.
|
|
21
|
+
* Since this plugin uses per-context config files (hexai.config.ts),
|
|
22
|
+
* the root hexai.config.ts config is minimal.
|
|
23
|
+
*/
|
|
24
|
+
interface ApplicationBuilderPluginConfig {
|
|
25
|
+
/**
|
|
26
|
+
* Default config file name to look for in each context.
|
|
27
|
+
* Defaults to "hexai.config.ts".
|
|
28
|
+
*/
|
|
29
|
+
configFile?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* CLI plugin definition for hexai integration.
|
|
33
|
+
*
|
|
34
|
+
* This allows the application builder to be invoked via `pnpm hexai generate-app-builder`.
|
|
35
|
+
* Each bounded context should have its own `hexai.config.ts` file.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```bash
|
|
39
|
+
* # Generate for a specific context
|
|
40
|
+
* pnpm hexai generate-app-builder --context-path packages/assignment
|
|
41
|
+
*
|
|
42
|
+
* # Use a custom config file name
|
|
43
|
+
* pnpm hexai generate-app-builder --context-path packages/assignment --config-file custom.config.ts
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
declare const cliPlugin: HexaiCliPlugin<ApplicationBuilderPluginConfig>;
|
|
47
|
+
|
|
48
|
+
export { type ApplicationBuilderPluginConfig, DuplicateCommandHandlerError, DuplicateEventHandlerError, DuplicateQueryHandlerError, cliPlugin, generateApplicationBuilder };
|