Spaces:
Paused
Paused
| ; | |
| 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 {} | |
| }; | |