objective categorical abstract machine language personal data server
at main 108 lines 2.5 kB view raw
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);