forked from
futur.blue/pegasus
objective categorical abstract machine language personal data server
1import { build as viteBuild } from "vite";
2import resolve from "@rollup/plugin-node-resolve";
3import path from "path";
4
5async function build(entryPoints, { env, output }) {
6 const outfile = output;
7 const outdir = path.dirname(outfile);
8 const splitting = true;
9
10 const isDev = env === "dev";
11
12 try {
13 const result = await viteBuild({
14 build: {
15 lib: {
16 entry: entryPoints,
17 formats: ["es"],
18 fileName: "[name]",
19 },
20 outDir: outdir,
21 emptyOutDir: false,
22 minify: isDev ? false : true,
23 sourcemap: isDev,
24 rollupOptions: {
25 output: {
26 entryFileNames: "[name].js",
27 },
28 plugins: [resolve()],
29 },
30 },
31 logLevel: "info",
32 define: {
33 "process.env.NODE_ENV": `"${env}"`,
34 __DEV__: `"${isDev}"`,
35 },
36 });
37
38 entryPoints.forEach((entryPoint) => {
39 console.log(
40 'Build completed successfully for "' + entryPoint + '"',
41 );
42 });
43 return result;
44 } catch (error) {
45 console.error("\nBuild failed:", error);
46 process.exit(1);
47 }
48}
49
50function parseArgv(argv) {
51 const args = argv.slice(2);
52 const result = { _: [] };
53
54 for (let i = 0; i < args.length; i++) {
55 const arg = args[i];
56
57 if (arg.startsWith("--")) {
58 const longArg = arg.slice(2);
59 if (longArg.includes("=")) {
60 const [key, value] = longArg.split("=");
61 result[key] = parseValue(value);
62 } else if (i + 1 < args.length && !args[i + 1].startsWith("-")) {
63 result[longArg] = parseValue(args[++i]);
64 } else {
65 result[longArg] = true;
66 }
67 } else if (arg.startsWith("-")) {
68 const shortArg = arg.slice(1);
69 if (shortArg.includes("=")) {
70 const [key, value] = shortArg.split("=");
71 result[key] = parseValue(value);
72 } else if (i + 1 < args.length && !args[i + 1].startsWith("-")) {
73 result[shortArg] = parseValue(args[++i]);
74 } else {
75 for (const char of shortArg) {
76 result[char] = true;
77 }
78 }
79 } else {
80 result._.push(parseValue(arg));
81 }
82 }
83
84 return result;
85}
86
87function parseValue(value) {
88 if (value === "true") return true;
89 if (value === "false") return false;
90 if (value === "null") return null;
91 if (!isNaN(value)) return Number(value);
92 return value;
93}
94
95function camelCaseKeys(obj) {
96 return Object.fromEntries(
97 Object.entries(obj).map(([key, value]) => [
98 key.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase()),
99 value,
100 ]),
101 );
102}
103
104const flags = parseArgv(process.argv);
105const options = camelCaseKeys(flags);
106const entryPoints = options._;
107
108build(entryPoints, options);