23 lines
1.8 KiB
JavaScript
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}))
|