UNPKG

alinea

Version:

[![npm](https://img.shields.io/npm/v/alinea.svg)](https://npmjs.org/package/alinea) [![install size](https://packagephobia.com/badge?p=alinea)](https://packagephobia.com/result?p=alinea)

69 lines (67 loc) 2.4 kB
import "../../chunks/chunk-U5RRZUYZ.js"; // src/cli/util/TargetPlugin.ts import crypto from "node:crypto"; import path from "node:path"; import { externalPlugin } from "./ExternalPlugin.js"; import { ignorePlugin } from "./IgnorePlugin.js"; function targetPlugin(info) { return { name: "target", setup(build) { const outputs = /* @__PURE__ */ new Map(); const cwd = build.initialOptions.absWorkingDir || process.cwd(); const extension = build.initialOptions.outExtension?.[".js"] || ".js"; build.onStart(() => { outputs.clear(); }); build.onResolve( { filter: /\.(server|client)(\.[mc]?[tj]sx?)?$/ }, async (args) => { const entryPoint = path.join(args.resolveDir, args.path); const { packageName, packageRoot } = info(entryPoint); const hash = crypto.createHash("md5").update(args.resolveDir).digest("hex").slice(0, 7); const hasExtension = /\.[mc]?[tj]sx?$/.test(args.path); const file = path.basename( hasExtension ? args.path.split(".").slice(0, -1).join(".") : args.path ); const target = file.split(".").pop(); const outputFile = file + "." + hash; const outDir = path.join(packageRoot, `.${target}/dist`); const output = outputs.get(outDir) || []; output.push({ entryPoint, outputFile }); outputs.set(outDir, output); return { external: true, path: `${packageName}/.${target}/${outputFile}${extension}`, watchFiles: [entryPoint] }; } ); build.onEnd(() => { const tasks = []; for (const [outDir, output] of outputs) { const platform = outDir.includes(".server") ? "node" : "browser"; tasks.push( build.esbuild.build({ platform, bundle: true, format: "esm", target: "esnext", treeShaking: true, splitting: true, entryPoints: Object.fromEntries( output.map((entry) => [entry.outputFile, entry.entryPoint]) ), outdir: outDir, plugins: [externalPlugin(cwd), ignorePlugin] }) ); } return Promise.all(tasks).then(() => void 0); }); } }; } export { targetPlugin };