Files
MikrotikManager/backend/scripts/acceptance/build-poll-memory.mjs
T

37 lines
2.3 KiB
JavaScript

/** 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 }))