@devcraft-ts/diadem 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/config.ts","../src/cli/generator.ts","../src/cli/index.ts"],"names":["resolve","existsSync","readFileSync","mkdirSync","dirname","writeFileSync","readdirSync","join","ts","relative"],"mappings":"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","file":"cli.cjs","sourcesContent":["import { existsSync, readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\n/** What the generator emits. */\nexport type EmitMode = 'manifest' | 'compiled'\n\n/** Resolved generator configuration (regexes compiled, paths absolute-ready). */\nexport interface DiademConfig {\n rootDir: string\n scanDirs: string[]\n include: RegExp[]\n exclude: RegExp[]\n outFile: string\n environments: string[]\n /** 'manifest' (data, interpreted at runtime) or 'compiled' (straight-line wiring). */\n emit: EmitMode\n /** For `emit: 'compiled'`, bake in a single environment (else wire all). */\n targetEnv?: string\n}\n\n/** User-facing config (from `diadem.config.json` or CLI flags). */\nexport interface DiademConfigInput {\n scanDirs?: string[]\n include?: string[]\n exclude?: string[]\n outFile?: string\n environments?: string[]\n emit?: EmitMode\n targetEnv?: string\n}\n\nconst DEFAULTS = {\n scanDirs: ['src'],\n // Default: every .ts file. The AST pass keeps only DI-decorated classes, so\n // `include` is purely an optional performance narrowing (e.g. ['Service\\\\.ts$']).\n include: ['\\\\.ts$'],\n exclude: [\n '\\\\.test\\\\.ts$',\n '\\\\.spec\\\\.ts$',\n '\\\\.d\\\\.ts$',\n 'node_modules',\n '/dist/',\n '/build/',\n '/generated/'\n ],\n outFile: 'src/generated/service-manifest.ts',\n environments: ['development', 'production', 'test'],\n emit: 'manifest' as EmitMode,\n targetEnv: undefined as string | undefined\n}\n\nfunction stripUndefined<T extends object>(obj: T): Partial<T> {\n return Object.fromEntries(\n Object.entries(obj).filter(([, v]) => v !== undefined)\n ) as Partial<T>\n}\n\n/**\n * Build a resolved config from defaults, an optional `diadem.config.json` in\n * `rootDir`, and CLI overrides (highest precedence).\n */\nexport function loadConfig(\n rootDir: string,\n overrides: DiademConfigInput = {}\n): DiademConfig {\n let fileConfig: DiademConfigInput = {}\n const configPath = resolve(rootDir, 'diadem.config.json')\n if (existsSync(configPath)) {\n fileConfig = JSON.parse(\n readFileSync(configPath, 'utf8')\n ) as DiademConfigInput\n }\n\n const merged = {\n ...DEFAULTS,\n ...stripUndefined(fileConfig),\n ...stripUndefined(overrides)\n }\n\n return {\n rootDir,\n scanDirs: merged.scanDirs,\n include: merged.include.map((p) => new RegExp(p)),\n exclude: merged.exclude.map((p) => new RegExp(p)),\n outFile: merged.outFile,\n environments: merged.environments,\n emit: merged.emit,\n targetEnv: merged.targetEnv\n }\n}\n","/**\n * Build-time DI manifest generator.\n *\n * Scans the configured source directories, finds DI-decorated classes via the\n * TypeScript AST, extracts each constructor's dependencies, resolves them\n * token-first, topologically sorts the graph, and emits a `service-manifest.ts`\n * conforming to Diadem's `ServiceManifestModule` contract — no runtime\n * reflection required.\n */\n\nimport { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { dirname, join, relative, resolve } from 'node:path'\nimport ts from 'typescript'\nimport type { DiademConfig } from './config'\n\n/** The published package name that generated files import from. */\nconst PACKAGE_NAME = '@devcraft-ts/diadem'\n\ntype Lifecycle =\n | 'dependency'\n | 'singleton'\n | 'factory'\n | 'lazy'\n | 'lazySingleton'\n\nconst LIFECYCLE_BY_DECORATOR: Record<string, Lifecycle> = {\n singleton: 'singleton',\n factory: 'factory',\n lazy: 'lazy',\n lazySingleton: 'lazySingleton',\n injectable: 'dependency'\n}\n\ninterface RawDependency {\n paramName: string\n paramIndex: number\n typeName: string\n isOptional: boolean\n isReadonly: boolean\n isPrivate: boolean\n}\n\ninterface ResolvedDependency extends RawDependency {\n implementingService?: string\n external?: boolean\n}\n\n/** Where a token (abstract class) can be imported from. */\ntype TokenModule =\n | { kind: 'file'; fullPath: string }\n | { kind: 'bare'; specifier: string }\n\ninterface ServiceInfo {\n className: string\n lifecycle: Lifecycle\n environment?: string\n token?: string\n tokenExported: boolean\n /** Resolved import source of the token, for the typed accessor surface. */\n tokenModule?: TokenModule\n fullPath: string\n filePath: string\n exported: boolean\n dependencies: RawDependency[]\n resolvedDependencies: ResolvedDependency[]\n registrationOrder: number\n}\n\n/** A required dependency that no registered service implements. */\nexport interface UnresolvedDependency {\n service: string\n paramName: string\n typeName: string\n}\n\nexport interface GenerateResult {\n outFile: string\n serviceCount: number\n cycles: string[]\n externalDependencies: number\n /** Required (non-optional) dependencies with no implementing service. */\n unresolved: UnresolvedDependency[]\n /** Tokens declared by more than one service (ambiguous resolution). */\n duplicateTokens: string[]\n}\n\nconst PRIMITIVE_TYPES = new Set([\n 'string',\n 'number',\n 'boolean',\n 'Date',\n 'Array',\n 'Object',\n 'any',\n 'unknown',\n 'void',\n 'null',\n 'undefined',\n 'Promise',\n 'RegExp',\n 'Error',\n 'Map',\n 'Set'\n])\n\n/** Run the full generation pipeline and write the manifest file. */\nexport function generateManifest(config: DiademConfig): GenerateResult {\n const files = collectFiles(config)\n const services: ServiceInfo[] = []\n for (const file of files) {\n services.push(...analyzeFile(file.fullPath, file.relPath))\n }\n\n const { sorted, cycles, duplicateTokens } = resolveAndSort(services)\n sorted.forEach((service, index) => {\n service.registrationOrder = index\n })\n\n const outFile = resolve(config.rootDir, config.outFile)\n const content =\n config.emit === 'compiled'\n ? renderCompiled(sorted, config, outFile)\n : renderManifest(sorted, config, outFile)\n mkdirSync(dirname(outFile), { recursive: true })\n writeFileSync(outFile, content, 'utf8')\n\n const externalDependencies = sorted.reduce(\n (sum, s) => sum + s.resolvedDependencies.filter((d) => d.external).length,\n 0\n )\n\n const unresolved: UnresolvedDependency[] = []\n for (const service of sorted) {\n for (const dep of service.resolvedDependencies) {\n if (dep.external && !dep.isOptional) {\n unresolved.push({\n service: service.className,\n paramName: dep.paramName,\n typeName: dep.typeName\n })\n }\n }\n }\n\n return {\n outFile,\n serviceCount: sorted.length,\n cycles,\n externalDependencies,\n unresolved,\n duplicateTokens\n }\n}\n\n// --- File collection -------------------------------------------------------\n\ninterface ScannedFile {\n fullPath: string\n relPath: string\n}\n\nfunction collectFiles(config: DiademConfig): ScannedFile[] {\n const files: ScannedFile[] = []\n for (const dir of config.scanDirs) {\n const abs = resolve(config.rootDir, dir)\n if (!existsSync(abs)) {\n continue\n }\n walk(abs, dir, config, files)\n }\n return files\n}\n\nfunction walk(\n absDir: string,\n relDir: string,\n config: DiademConfig,\n out: ScannedFile[]\n): void {\n for (const entry of readdirSync(absDir, { withFileTypes: true })) {\n const fullPath = join(absDir, entry.name)\n const relPath = join(relDir, entry.name)\n if (entry.isDirectory()) {\n walk(fullPath, relPath, config, out)\n } else if (entry.isFile() && shouldScan(relPath, config)) {\n out.push({ fullPath, relPath })\n }\n }\n}\n\nfunction shouldScan(relPath: string, config: DiademConfig): boolean {\n const normalized = relPath.replace(/\\\\/g, '/')\n if (config.exclude.some((re) => re.test(normalized))) {\n return false\n }\n return config.include.some((re) => re.test(normalized))\n}\n\n// --- AST analysis ----------------------------------------------------------\n\nfunction analyzeFile(fullPath: string, relPath: string): ServiceInfo[] {\n const source = ts.createSourceFile(\n fullPath,\n readFileSync(fullPath, 'utf8'),\n ts.ScriptTarget.Latest,\n /* setParentNodes */ true\n )\n\n // Where each name in scope comes from — for resolving token import sources.\n const tokenSources = new Map<string, TokenModule>()\n const fileDir = dirname(fullPath)\n const exportedClasses = new Set<string>()\n\n ts.forEachChild(source, function collect(node) {\n // import { A, B } from '...'\n if (\n ts.isImportDeclaration(node) &&\n node.importClause?.namedBindings &&\n ts.isNamedImports(node.importClause.namedBindings) &&\n ts.isStringLiteral(node.moduleSpecifier)\n ) {\n const specifier = node.moduleSpecifier.text\n const module: TokenModule = specifier.startsWith('.')\n ? { kind: 'file', fullPath: resolve(fileDir, specifier) }\n : { kind: 'bare', specifier }\n for (const element of node.importClause.namedBindings.elements) {\n tokenSources.set(element.name.text, module)\n }\n }\n // Locally declared, exported abstract classes can serve as tokens.\n if (ts.isClassDeclaration(node) && node.name && isExported(node)) {\n exportedClasses.add(node.name.text)\n tokenSources.set(node.name.text, { kind: 'file', fullPath })\n }\n ts.forEachChild(node, collect)\n })\n\n const services: ServiceInfo[] = []\n ts.forEachChild(source, function visit(node) {\n if (ts.isClassDeclaration(node)) {\n const info = analyzeClass(node, fullPath, relPath, exportedClasses, tokenSources)\n if (info) {\n services.push(info)\n }\n }\n ts.forEachChild(node, visit)\n })\n\n return services\n}\n\nfunction analyzeClass(\n node: ts.ClassDeclaration,\n fullPath: string,\n relPath: string,\n exportedClasses: Set<string>,\n tokenSources: Map<string, TokenModule>\n): ServiceInfo | null {\n if (!node.name) {\n return null\n }\n\n const decoratorInfo = findDIDecorator(node)\n if (!decoratorInfo) {\n return null\n }\n\n const dependencies = analyzeConstructor(node)\n const token = decoratorInfo.token\n\n return {\n className: node.name.text,\n lifecycle: decoratorInfo.lifecycle,\n environment: decoratorInfo.environment,\n token,\n tokenExported: !!token && exportedClasses.has(token),\n tokenModule: token ? tokenSources.get(token) : undefined,\n fullPath,\n filePath: relPath.replace(/\\\\/g, '/'),\n exported: isExported(node),\n dependencies,\n resolvedDependencies: [],\n registrationOrder: 0\n }\n}\n\ninterface DecoratorInfo {\n lifecycle: Lifecycle\n token?: string\n environment?: string\n}\n\nfunction findDIDecorator(node: ts.ClassDeclaration): DecoratorInfo | null {\n const decorators = ts.canHaveDecorators(node)\n ? (ts.getDecorators(node) ?? [])\n : []\n\n for (const decorator of decorators) {\n const expr = decorator.expression\n let name = ''\n let args: ts.NodeArray<ts.Expression> | undefined\n\n if (ts.isCallExpression(expr)) {\n name = expr.expression.getText()\n args = expr.arguments\n } else if (ts.isIdentifier(expr)) {\n name = expr.getText()\n }\n\n const lifecycle = LIFECYCLE_BY_DECORATOR[name]\n if (!lifecycle) {\n continue\n }\n\n let token: string | undefined\n let environment: string | undefined\n if (args && args.length > 0 && ts.isIdentifier(args[0])) {\n token = args[0].getText()\n }\n if (args && args.length > 1 && ts.isStringLiteral(args[1])) {\n environment = args[1].text\n }\n\n return { lifecycle, token, environment }\n }\n\n return null\n}\n\nfunction analyzeConstructor(node: ts.ClassDeclaration): RawDependency[] {\n const ctor = node.members.find((m) => ts.isConstructorDeclaration(m)) as\n | ts.ConstructorDeclaration\n | undefined\n if (!ctor) {\n return []\n }\n\n const deps: RawDependency[] = []\n ctor.parameters.forEach((param, index) => {\n if (!param.type) {\n return\n }\n const typeName = extractTypeName(param.type)\n if (isPrimitive(typeName)) {\n return\n }\n\n const modifiers = ts.canHaveModifiers(param)\n ? (ts.getModifiers(param) ?? [])\n : []\n\n deps.push({\n paramName: param.name.getText(),\n paramIndex: index,\n typeName,\n isOptional: !!param.questionToken || !!param.initializer,\n isReadonly: modifiers.some(\n (m) => m.kind === ts.SyntaxKind.ReadonlyKeyword\n ),\n isPrivate: modifiers.some((m) => m.kind === ts.SyntaxKind.PrivateKeyword)\n })\n })\n\n return deps\n}\n\nfunction extractTypeName(typeNode: ts.TypeNode): string {\n const raw = ts.isTypeReferenceNode(typeNode)\n ? typeNode.typeName.getText()\n : typeNode.getText()\n return raw\n .replace(/<[^>]*>/g, '')\n .replace(/\\[\\]/g, '')\n .trim()\n}\n\nfunction isPrimitive(typeName: string): boolean {\n return (\n PRIMITIVE_TYPES.has(typeName) ||\n typeName.toLowerCase() === typeName ||\n typeName.includes('<')\n )\n}\n\nfunction isExported(node: ts.ClassDeclaration): boolean {\n const modifiers = ts.canHaveModifiers(node) ? ts.getModifiers(node) : undefined\n return (\n modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword) ?? false\n )\n}\n\n// --- Dependency resolution + topological sort ------------------------------\n\nfunction resolveAndSort(services: ServiceInfo[]): {\n sorted: ServiceInfo[]\n cycles: string[]\n duplicateTokens: string[]\n} {\n const serviceByName = new Map<string, ServiceInfo>()\n const tokenToImpl = new Map<string, string>()\n const duplicateTokens = new Set<string>()\n\n for (const service of services) {\n serviceByName.set(service.className, service)\n if (service.token) {\n if (tokenToImpl.has(service.token)) {\n duplicateTokens.add(service.token)\n } else {\n tokenToImpl.set(service.token, service.className)\n }\n }\n }\n\n const resolveByHeuristic = (typeName: string): string | undefined => {\n const direct = serviceByName.get(typeName)\n if (direct) {\n return direct.className\n }\n if (typeName.startsWith('I')) {\n const stripped = typeName.slice(1)\n if (serviceByName.has(stripped)) {\n return stripped\n }\n const suffixed = services.find(\n (s) =>\n (s.className.endsWith('Service') ||\n s.className.endsWith('Repository')) &&\n s.className.includes(stripped)\n )\n if (suffixed) {\n return suffixed.className\n }\n }\n return undefined\n }\n\n for (const service of services) {\n service.resolvedDependencies = service.dependencies.map((dep) => {\n const implementingService =\n tokenToImpl.get(dep.typeName) ?? resolveByHeuristic(dep.typeName)\n return implementingService\n ? { ...dep, implementingService }\n : { ...dep, external: true }\n })\n }\n\n const { sorted, cycles } = topologicalSort(services, serviceByName)\n return { sorted, cycles, duplicateTokens: [...duplicateTokens] }\n}\n\nfunction topologicalSort(\n services: ServiceInfo[],\n serviceByName: Map<string, ServiceInfo>\n): { sorted: ServiceInfo[]; cycles: string[] } {\n const visited = new Set<string>()\n const visiting = new Set<string>()\n const sorted: ServiceInfo[] = []\n const cycles: string[] = []\n\n const visit = (name: string): void => {\n if (visited.has(name)) {\n return\n }\n if (visiting.has(name)) {\n cycles.push(name)\n return\n }\n const service = serviceByName.get(name)\n if (!service) {\n return\n }\n visiting.add(name)\n for (const dep of service.resolvedDependencies) {\n if (dep.implementingService && !dep.external) {\n visit(dep.implementingService)\n }\n }\n visiting.delete(name)\n visited.add(name)\n sorted.push(service)\n }\n\n for (const service of services) {\n visit(service.className)\n }\n\n return { sorted, cycles }\n}\n\n// --- Emit ------------------------------------------------------------------\n\nfunction importPathFor(outFile: string, serviceFullPath: string): string {\n let rel = relative(dirname(outFile), serviceFullPath)\n .replace(/\\\\/g, '/')\n .replace(/\\.ts$/, '')\n if (!rel.startsWith('.')) {\n rel = `./${rel}`\n }\n return rel\n}\n\nfunction groupByEnvironment(\n services: ServiceInfo[],\n environments: string[]\n): Record<string, ServiceInfo[]> {\n const groups: Record<string, ServiceInfo[]> = { all: [] }\n for (const env of environments) {\n groups[env] = []\n }\n for (const service of services) {\n groups.all.push(service)\n if (service.environment) {\n groups[service.environment]?.push(service)\n } else {\n for (const env of environments) {\n groups[env].push(service)\n }\n }\n }\n return groups\n}\n\nfunction toEntry(service: ServiceInfo, outFile: string): Record<string, unknown> {\n const entry: Record<string, unknown> = {\n className: service.className,\n importPath: importPathFor(outFile, service.fullPath),\n lifecycle: service.lifecycle,\n exported: service.exported,\n filePath: service.filePath,\n registrationOrder: service.registrationOrder,\n dependencies: service.dependencies,\n resolvedDependencies: service.resolvedDependencies\n }\n if (service.environment) {\n entry.environment = service.environment\n }\n return entry\n}\n\nfunction renderManifest(\n services: ServiceInfo[],\n config: DiademConfig,\n outFile: string\n): string {\n const byEnv = groupByEnvironment(services, config.environments)\n\n // Static imports grouped by (computed) import path.\n const importsByPath = new Map<string, Set<string>>()\n for (const service of services) {\n const path = importPathFor(outFile, service.fullPath)\n const names = importsByPath.get(path) ?? new Set<string>()\n names.add(service.className)\n if (\n service.token &&\n service.token !== service.className &&\n service.tokenExported\n ) {\n names.add(service.token)\n }\n importsByPath.set(path, names)\n }\n\n const staticImports = [...importsByPath.keys()]\n .sort()\n .map((path) => {\n const names = [...(importsByPath.get(path) ?? [])].sort()\n return names.length === 1\n ? `import { ${names[0]} } from '${path}'`\n : `import {\\n ${names.join(',\\n ')}\\n} from '${path}'`\n })\n .join('\\n')\n\n const serviceClassMapping = services\n .map((s) => ` ${s.className}`)\n .join(',\\n')\n\n const envEntries = ['all', ...config.environments]\n .map(\n (env) =>\n ` ${env}: ${JSON.stringify(byEnv[env].map((s) => toEntry(s, outFile)), null, 2)} as ServiceManifestEntry[]`\n )\n .join(',\\n')\n\n const lifecycleCounts = (\n ['dependency', 'singleton', 'factory', 'lazy', 'lazySingleton'] as const\n )\n .map((lc) => ` ${lc}: ${services.filter((s) => s.lifecycle === lc).length}`)\n .join(',\\n')\n\n const totalDependencies = services.reduce(\n (sum, s) => sum + s.dependencies.length,\n 0\n )\n const externalDependencies = services.reduce(\n (sum, s) => sum + s.resolvedDependencies.filter((d) => d.external).length,\n 0\n )\n const maxDepth = services.reduce(\n (max, s) => Math.max(max, s.dependencies.length),\n 0\n )\n\n return `/**\n * Auto-generated by \\`diadem build\\`. DO NOT EDIT MANUALLY.\n *\n * Total services: ${services.length}\n */\n\n/* eslint-disable */\n\nimport type {\n ImportedService,\n ServiceManifestEntry\n} from '${PACKAGE_NAME}'\n\n${staticImports}\n\nexport const SERVICE_MANIFEST: ServiceManifestEntry[] = ${JSON.stringify(\n services.map((s) => toEntry(s, outFile)),\n null,\n 2\n )} as ServiceManifestEntry[]\n\nexport const SERVICES_BY_ENVIRONMENT = {\n${envEntries}\n}\n\nexport const SERVICE_CLASSES = {\n${serviceClassMapping}\n} as const\n\nexport function getServicesForEnvironment(\n environment?: string\n): ServiceManifestEntry[] {\n if (!environment || environment === 'all') {\n return SERVICE_MANIFEST\n }\n return (\n SERVICES_BY_ENVIRONMENT[\n environment as keyof typeof SERVICES_BY_ENVIRONMENT\n ] ?? []\n )\n}\n\nexport async function importService(entry: ServiceManifestEntry) {\n const serviceClass =\n SERVICE_CLASSES[entry.className as keyof typeof SERVICE_CLASSES]\n if (!serviceClass) {\n throw new Error(\\`Service \\${entry.className} not found in manifest.\\`)\n }\n return serviceClass\n}\n\nexport async function importAllServices(\n entries: ServiceManifestEntry[]\n): Promise<ImportedService[]> {\n const ordered = [...entries].sort(\n (a, b) => a.registrationOrder - b.registrationOrder\n )\n const results: ImportedService[] = []\n for (const entry of ordered) {\n const serviceClass =\n SERVICE_CLASSES[entry.className as keyof typeof SERVICE_CLASSES]\n if (serviceClass) {\n results.push({ entry, serviceClass })\n }\n }\n return results\n}\n\nexport const MANIFEST_STATS = {\n totalServices: ${services.length},\n environments: [${config.environments.map((e) => `'${e}'`).join(', ')}],\n lifecycles: {\n${lifecycleCounts}\n },\n dependencyAnalysis: {\n servicesWithDependencies: ${services.filter((s) => s.dependencies.length > 0).length},\n totalDependencies: ${totalDependencies},\n externalDependencies: ${externalDependencies},\n maxDependencyDepth: ${maxDepth}\n }\n}\n`\n}\n\n// --- Emit (compiled wiring) ------------------------------------------------\n\nconst EAGER_LIFECYCLES: ReadonlySet<Lifecycle> = new Set([\n 'singleton',\n 'dependency',\n 'lazySingleton'\n])\n\nfunction localName(className: string): string {\n return `_${className}`\n}\n\nfunction externalDefault(typeName: string): string {\n switch (typeName) {\n case 'string':\n return \"''\"\n case 'number':\n return '0'\n case 'boolean':\n return 'false'\n default:\n return 'undefined'\n }\n}\n\n/**\n * Emit a straight-line `createContainer()` instead of an interpreted manifest.\n * Services are constructed in topological order with direct local-variable\n * references — no manifest array, no resolver loop, no per-dependency lookups\n * during construction. One environment is baked in (config.targetEnv) so there\n * is zero runtime branching.\n *\n * Note: in compiled mode `lazySingleton` is treated as eager (its instance is\n * needed up front to be referenced by dependents), and runtime mock/override\n * registration is not available — use the manifest emit for dev/test if you\n * need that dynamism.\n */\nfunction renderCompiled(\n allServices: ServiceInfo[],\n config: DiademConfig,\n outFile: string\n): string {\n const target = config.targetEnv\n const services = allServices.filter(\n (s) => !target || !s.environment || s.environment === target\n )\n const selected = new Set(services.map((s) => s.className))\n const eager = new Map<string, boolean>()\n for (const s of services) {\n eager.set(s.className, EAGER_LIFECYCLES.has(s.lifecycle))\n }\n\n const classNames = new Set(services.map((s) => s.className))\n\n // Group imports by computed path (impl classes + token classes).\n const importsByPath = new Map<string, Set<string>>()\n const addImport = (path: string, name: string): void => {\n const names = importsByPath.get(path) ?? new Set<string>()\n names.add(name)\n importsByPath.set(path, names)\n }\n for (const service of services) {\n addImport(importPathFor(outFile, service.fullPath), service.className)\n }\n\n // Services exposed in the type-safe accessor surface: those with a uniquely\n // named, importable token. (Duplicate or unlocatable tokens are skipped, as\n // are tokens whose name collides with a different service class.)\n const tokenCount = new Map<string, number>()\n for (const s of services) {\n if (s.token) {\n tokenCount.set(s.token, (tokenCount.get(s.token) ?? 0) + 1)\n }\n }\n const tokenPath = (m: TokenModule): string =>\n m.kind === 'file' ? importPathFor(outFile, m.fullPath) : m.specifier\n const typed = services.filter(\n (s): s is ServiceInfo & { token: string; tokenModule: TokenModule } =>\n !!s.token &&\n !!s.tokenModule &&\n tokenCount.get(s.token) === 1 &&\n (s.token === s.className || !classNames.has(s.token))\n )\n for (const s of typed) {\n addImport(tokenPath(s.tokenModule), s.token)\n }\n\n const serviceImports = [...importsByPath.keys()]\n .sort()\n .map((path) => {\n const names = [...(importsByPath.get(path) ?? [])].sort()\n return names.length === 1\n ? `import { ${names[0]} } from '${path}'`\n : `import {\\n ${names.join(',\\n ')}\\n} from '${path}'`\n })\n .join('\\n')\n\n const argExpr = (service: ServiceInfo): string => {\n const arity = service.dependencies.reduce(\n (max, d) => Math.max(max, d.paramIndex + 1),\n 0\n )\n const args: string[] = Array.from({ length: arity }, () => 'undefined')\n for (const dep of service.resolvedDependencies) {\n if (dep.external) {\n args[dep.paramIndex] = dep.isOptional\n ? 'undefined'\n : externalDefault(dep.typeName)\n continue\n }\n const impl = dep.implementingService\n if (impl && selected.has(impl)) {\n args[dep.paramIndex] = eager.get(impl)\n ? localName(impl)\n : `c.resolve(token(${impl}))`\n } else {\n args[dep.paramIndex] = 'undefined'\n }\n }\n return args.join(', ')\n }\n\n const lines: string[] = []\n for (const service of services) {\n const cls = service.className\n if (eager.get(cls)) {\n lines.push(` const ${localName(cls)} = new ${cls}(${argExpr(service)})`)\n lines.push(` c.register(token(${cls}), ${localName(cls)})`)\n } else {\n lines.push(\n ` c.registerFactory(token(${cls}), () => new ${cls}(${argExpr(service)}))`\n )\n }\n }\n\n const targetComment = target\n ? `environment: ${target}`\n : 'environment: all'\n\n const accessorBlock =\n typed.length === 0\n ? ''\n : `\n/**\n * Type-safe accessor surface. Only registered tokens are present, each typed to\n * its token — resolving an unregistered token is a compile error.\n */\nexport interface DiademServices {\n${typed.map((s) => ` ${s.token}: ${s.token}`).join('\\n')}\n}\n\nexport function createServices(): DiademServices & {\n readonly container: DiademContainer\n dispose: () => Promise<void>\n} {\n const container = createContainer()\n return {\n container,\n dispose: () => container.dispose(),\n${typed\n .map(\n (s) =>\n ` get ${s.token}(): ${s.token} {\\n return container.resolve(${s.token})\\n }`\n )\n .join(',\\n')}\n }\n}\n`\n\n return `/**\n * Auto-generated by \\`diadem build --emit=compiled\\`. DO NOT EDIT MANUALLY.\n *\n * Straight-line wiring (${targetComment}). Total services: ${services.length}.\n */\n\n/* eslint-disable */\n\nimport { DiademContainer, getDIMetadata } from '${PACKAGE_NAME}'\n\n${serviceImports}\n\nfunction token(cls: any): any {\n const meta = getDIMetadata(cls)\n if (!meta) {\n throw new Error('diadem: missing DI metadata for ' + cls.name)\n }\n return meta.token\n}\n\n/** Build a fully-wired, ready container. */\nexport function createContainer(): DiademContainer {\n const c = new DiademContainer()\n${lines.join('\\n')}\n c.setReady()\n return c\n}\n${accessorBlock}`\n}\n","#!/usr/bin/env node\n/**\n * `diadem` CLI — build-time manifest generation.\n *\n * Usage:\n * diadem build [options]\n *\n * Options:\n * --scan-dir <dir> Directory to scan (repeatable). Default: src\n * --out <file> Output manifest path. Default: src/generated/service-manifest.ts\n * --include <regex> Filename include pattern (repeatable). Default: \\.ts$\n * --exclude <regex> Filename exclude pattern (repeatable).\n * --env <name> Environment to group by (repeatable). Default: development, production, test\n * --cwd <dir> Project root. Default: current directory\n * --fail-on-cycle Exit non-zero if a dependency cycle is detected\n * -h, --help Show this help\n *\n * Config file: a `diadem.config.json` in the project root is merged under CLI flags.\n */\n\nimport { loadConfig, type DiademConfigInput } from './config'\nimport { generateManifest } from './generator'\n\ninterface ParsedArgs {\n command: string\n cwd: string\n failOnCycle: boolean\n strict: boolean\n help: boolean\n overrides: DiademConfigInput\n}\n\nfunction parseArgs(argv: string[]): ParsedArgs {\n const parsed: ParsedArgs = {\n command: 'build',\n cwd: process.cwd(),\n failOnCycle: false,\n strict: false,\n help: false,\n overrides: {}\n }\n const scanDirs: string[] = []\n const include: string[] = []\n const exclude: string[] = []\n const environments: string[] = []\n\n let i = 0\n if (argv[i] && !argv[i].startsWith('-')) {\n parsed.command = argv[i]\n i++\n }\n\n for (; i < argv.length; i++) {\n const arg = argv[i]\n const next = (): string => {\n const value = argv[++i]\n if (value === undefined) {\n throw new Error(`Missing value for ${arg}`)\n }\n return value\n }\n switch (arg) {\n case '--scan-dir':\n scanDirs.push(next())\n break\n case '--out':\n parsed.overrides.outFile = next()\n break\n case '--include':\n include.push(next())\n break\n case '--exclude':\n exclude.push(next())\n break\n case '--env':\n environments.push(next())\n break\n case '--cwd':\n parsed.cwd = next()\n break\n case '--emit': {\n const mode = next()\n if (mode !== 'manifest' && mode !== 'compiled') {\n throw new Error(`Invalid --emit value: ${mode} (expected manifest|compiled)`)\n }\n parsed.overrides.emit = mode\n break\n }\n case '--target-env':\n parsed.overrides.targetEnv = next()\n break\n case '--fail-on-cycle':\n parsed.failOnCycle = true\n break\n case '--strict':\n parsed.strict = true\n break\n case '-h':\n case '--help':\n parsed.help = true\n break\n default:\n throw new Error(`Unknown option: ${arg}`)\n }\n }\n\n if (scanDirs.length) parsed.overrides.scanDirs = scanDirs\n if (include.length) parsed.overrides.include = include\n if (exclude.length) parsed.overrides.exclude = exclude\n if (environments.length) parsed.overrides.environments = environments\n\n return parsed\n}\n\nconst HELP = `diadem — build-time DI manifest generator\n\nUsage:\n diadem build [options]\n\nOptions:\n --scan-dir <dir> Directory to scan (repeatable). Default: src\n --out <file> Output manifest path. Default: src/generated/service-manifest.ts\n --include <regex> Filename include pattern (repeatable). Default: \\\\.ts$\n --exclude <regex> Filename exclude pattern (repeatable).\n --env <name> Environment to group by (repeatable). Default: development, production, test\n --emit <mode> Output mode: manifest (default) or compiled (straight-line wiring)\n --target-env <name> For --emit=compiled, bake in a single environment\n --cwd <dir> Project root. Default: current directory\n --fail-on-cycle Exit non-zero if a dependency cycle is detected\n --strict Exit non-zero on cycles, ambiguous tokens, or required\n dependencies with no implementing service\n -h, --help Show this help\n\nA diadem.config.json in the project root is merged under CLI flags.\n`\n\nfunction main(): void {\n const args = parseArgs(process.argv.slice(2))\n\n if (args.help) {\n process.stdout.write(HELP)\n return\n }\n\n if (args.command !== 'build') {\n process.stderr.write(`Unknown command: ${args.command}\\n\\n${HELP}`)\n process.exit(1)\n }\n\n const config = loadConfig(args.cwd, args.overrides)\n const result = generateManifest(config)\n\n process.stdout.write(\n `diadem: wrote ${result.serviceCount} services to ${result.outFile}\\n`\n )\n if (result.externalDependencies > 0) {\n process.stdout.write(\n `diadem: ${result.externalDependencies} external dependencies (not container-managed)\\n`\n )\n }\n\n // Always surface ambiguity/cycles as warnings.\n for (const token of result.duplicateTokens) {\n process.stderr.write(\n `diadem: warning — token ${token} is declared by more than one service (ambiguous)\\n`\n )\n }\n if (result.cycles.length > 0) {\n process.stderr.write(\n `diadem: warning — dependency cycle(s) detected: ${result.cycles.join(', ')}\\n`\n )\n }\n\n // Decide whether to fail the build.\n const cycleViolation = result.cycles.length > 0 && (args.strict || args.failOnCycle)\n const strictViolation =\n args.strict &&\n (result.unresolved.length > 0 || result.duplicateTokens.length > 0)\n\n if (args.strict) {\n for (const dep of result.unresolved) {\n process.stderr.write(\n `diadem: error — ${dep.service} requires ${dep.typeName} (${dep.paramName}), but no service implements it\\n`\n )\n }\n }\n\n if (cycleViolation || strictViolation) {\n process.exit(1)\n }\n}\n\ntry {\n main()\n} catch (error) {\n process.stderr.write(\n `diadem: ${error instanceof Error ? error.message : String(error)}\\n`\n )\n process.exit(1)\n}\n"]}