#!/usr/bin/node const start = Date.now() const glob = require("glob") const fs = require("fs") const path = require("path") const { build } = require("esbuild") const { default: TsconfigPathsPlugin, } = require("@esbuild-plugins/tsconfig-paths") const { nodeExternalsPlugin } = require("esbuild-node-externals") var argv = require("minimist")(process.argv.slice(2)) function runBuild(entry, outfile) { const isDev = process.env.NODE_ENV !== "production" const tsconfig = argv["p"] || `tsconfig.build.json` const sharedConfig = { entryPoints: [entry], bundle: true, minify: !isDev, sourcemap: isDev, tsconfig, plugins: [TsconfigPathsPlugin({ tsconfig }), nodeExternalsPlugin()], target: "node14", preserveSymlinks: true, loader: { ".svelte": "copy", }, metafile: true, external: [ "deasync", "mock-aws-s3", "nock", "pino", "koa-pino-logger", "bull", ], } build({ ...sharedConfig, platform: "node", outfile, }).then(result => { glob(`${process.cwd()}/src/**/*.hbs`, {}, (err, files) => { for (const file of files) { fs.copyFileSync(file, `${process.cwd()}/dist/${path.basename(file)}`) } console.log( "\x1b[32m%s\x1b[0m", `Build successfully in ${(Date.now() - start) / 1000} seconds` ) }) fs.writeFileSync( `dist/${path.basename(outfile)}.meta.json`, JSON.stringify(result.metafile) ) }) } if (require.main === module) { const entry = argv["e"] || "./src/index.ts" const outfile = `dist/${entry.split("/").pop().replace(".ts", ".js")}` runBuild(entry, outfile) } else { module.exports = runBuild }