alinea
Version:
[](https://npmjs.org/package/alinea) [](https://packagephobia.com/result?p=alinea)
69 lines (67 loc) • 2.4 kB
JavaScript
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
};