Spaces:
Running
Running
File size: 1,986 Bytes
5c2ed06 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
"use strict";
const fs = require("fs");
const child_process = require("child_process");
const esbuild = require('esbuild');
const copyOverDataJSON = (file = 'data') => {
const files = fs.readdirSync(file);
for (const f of files) {
if (fs.statSync(`${file}/${f}`).isDirectory()) {
copyOverDataJSON(`${file}/${f}`);
} else if (f.endsWith('.json')) {
fs.copyFileSync(`${file}/${f}`, require('path').resolve('dist', `${file}/${f}`));
}
}
};
const shouldBeCompiled = file => {
if (file.includes('node_modules/')) return false;
if (file.endsWith('.tsx')) return true;
if (file.endsWith('.ts')) return !(file.endsWith('.d.ts') || file.includes('global'));
return false;
};
const findFilesForPath = path => {
const out = [];
const files = fs.readdirSync(path);
for (const file of files) {
const cur = `${path}/${file}`;
// HACK: Logs and databases exclusions are a hack. Logs is too big to
// traverse, databases adds/removes files which can lead to a filesystem
// race between readdirSync and statSync. Please, at some point someone
// fix this function to be more robust.
if (cur.includes('node_modules') || cur.includes("/logs") || cur.includes("/databases")) continue;
if (fs.statSync(cur).isDirectory()) {
out.push(...findFilesForPath(cur));
} else if (shouldBeCompiled(cur)) {
out.push(cur);
}
}
return out;
};
exports.transpile = decl => {
esbuild.buildSync({
entryPoints: findFilesForPath('./'),
outdir: './dist',
outbase: '.',
format: 'cjs',
tsconfig: './tsconfig.json',
sourcemap: true,
});
fs.copyFileSync('./config/config-example.js', './dist/config/config-example.js');
copyOverDataJSON();
// NOTE: replace is asynchronous - add additional replacements for the same path in one call instead of making multiple calls.
if (decl) {
exports.buildDecls();
}
};
exports.buildDecls = () => {
try {
child_process.execSync(`node ./node_modules/typescript/bin/tsc -p sim`, { stdio: 'inherit' });
} catch {}
};
|