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

23 lines
1.8 KiB
JavaScript

/** Separate output: never replace an in-flight or accepted poll-memory tree. */
import assert from 'node:assert/strict'
import { mkdir, lstat } from 'node:fs/promises'
import { dirname, resolve } from 'node:path'
import { fileURLToPath } from 'node:url'
import ts from 'typescript'
assert(process.argv.length===2||process.argv.length===3,'Supply at most one new output name')
const outputName=process.argv[2]??'dist-installation-memory'
assert(/^dist-installation-memory(?:-[a-z0-9-]{3,64})?$/.test(outputName),'Invalid compiled output name')
const backend=resolve(dirname(fileURLToPath(import.meta.url)),'../..'), output=resolve(backend,outputName)
const existing=await lstat(output).catch(error=>{if(error.code!=='ENOENT')throw error})
assert(!existing,'Use a new output directory; no implicit cleanup or concurrent rebuild')
await mkdir(output)
const configPath=resolve(backend,'tsconfig.json'),config=ts.readConfigFile(configPath,ts.sys.readFile)
assert(!config.error)
const parsed=ts.parseJsonConfigFileContent(config.config,ts.sys,backend,undefined,configPath)
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}
const roots=['src/services/installation-co-load.owned.test.ts','src/services/traffic-flow-collector-worker.ts'].map(file=>resolve(backend,file))
const program=ts.createProgram({rootNames:roots,options}),diagnostics=ts.getPreEmitDiagnostics(program)
if(diagnostics.length)throw Error(ts.formatDiagnosticsWithColorAndContext(diagnostics,{getCurrentDirectory:()=>backend,getCanonicalFileName:file=>file,getNewLine:()=> '\n'}))
assert(!program.emit().emitSkipped)
console.log(JSON.stringify({output,rootEntries:roots.length,actualWorkerIncluded:true,productionModulesSubstituted:false}))