d361ed0c34
BREAKING: drop support for node < 14 BREAKING: removed snapshot, ico, and rc options BREAKING: use python3 as default python binary
42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
import { writeFileSync, readFileSync } from 'node:fs'
|
|
import { equal } from 'node:assert'
|
|
|
|
/**
|
|
* post build step to insert code files into code files (naively).
|
|
* '{{replace:path/to/file}}' => "file contents"
|
|
* And the package.json version.
|
|
*/
|
|
const totalReplacements = 8
|
|
let replaced = 0
|
|
const mods = ['cjs', 'esm'] as const
|
|
|
|
mods.forEach((x) => {
|
|
inject(x, `lib/${x}/patches/third-party-main.js`)
|
|
inject(x, `lib/${x}/steps/shim.js`)
|
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
inject(x, `lib/${x}/options.js`, JSON.stringify(require('../package.json').version))
|
|
})
|
|
|
|
function inject(mod: typeof mods[number], filename: string, ...replacements: string[]) {
|
|
let contents = readFileSync(filename, 'utf8')
|
|
contents = contents.replace(/('{{(.*)}}')/g, (substring: string, ...matches: string[]) => {
|
|
if (!matches || !matches[1]) {
|
|
return substring
|
|
}
|
|
const [replace, file] = matches[1].split(':')
|
|
if (replace !== 'replace') {
|
|
return substring
|
|
}
|
|
++replaced
|
|
console.log('Replacing: ', substring)
|
|
|
|
return replacements[+file]
|
|
? replacements[+file]
|
|
: JSON.stringify(readFileSync(file.replace('MOD', mod), 'utf8').replace('"use strict";', ''))
|
|
})
|
|
writeFileSync(filename, contents)
|
|
console.log(`Wrote: ${filename}`)
|
|
}
|
|
|
|
equal(replaced, totalReplacements, `Expected to replace ${totalReplacements} things`)
|