/** Emit one owned memory entry plus its actual production import tree. The * measured child runs plain node, not the TypeScript compiler or tsx. */ import assert from 'node:assert/strict' import { lstat, rm } from 'node:fs/promises' import { dirname, basename, resolve } from 'node:path' import { fileURLToPath } from 'node:url' import ts from 'typescript' const backend = resolve(dirname(fileURLToPath(import.meta.url)), '../..') const output = resolve(backend, 'dist-mcp-memory') assert.equal(dirname(output), backend) assert.equal(basename(output), 'dist-mcp-memory') const existing = await lstat(output).catch(error => { if (error.code !== 'ENOENT') throw error }) assert(!existing?.isSymbolicLink(), 'Refuse to clean a redirected output directory') if (existing) await rm(output, { recursive: true }) const configPath = resolve(backend, 'tsconfig.json') const config = ts.readConfigFile(configPath, ts.sys.readFile) const format = diagnostics => ts.formatDiagnosticsWithColorAndContext(diagnostics, { getCurrentDirectory: () => backend, getCanonicalFileName: name => name, getNewLine: () => '\n', }) if (config.error) throw Error(format([config.error])) const parsed = ts.parseJsonConfigFileContent(config.config, ts.sys, backend, undefined, configPath) if (parsed.errors.length) throw Error(format(parsed.errors)) const entry = resolve(backend, 'src/services/server-poll-memory.owned.test.ts') const options = { ...parsed.options, rootDir: resolve(backend, 'src'), outDir: output, noEmit: false, noEmitOnError: true, declaration: false, declarationMap: false, sourceMap: false, incremental: false, composite: false, tsBuildInfoFile: undefined } // Deliberately override tsconfig include/exclude with this single test root. // TypeScript still follows all normal imports; no module/path/IO substitutes. const program = ts.createProgram({ rootNames: [entry], options }) const diagnostics = ts.getPreEmitDiagnostics(program) if (diagnostics.length) throw Error(format(diagnostics)) const emitted = program.emit() if (emitted.emitSkipped || emitted.diagnostics.length) throw Error(format(emitted.diagnostics) || 'Memory entry emit skipped') console.log(JSON.stringify({ compiledPollMemoryEntry: resolve(output, 'services/server-poll-memory.owned.test.js'), outputDirectory: output, rootEntries: 1, noEmitOnError: true, measuredChildUsesTsx: false }))