Files
test-repo/scripts/build/packages/config-helpers.js
T

141 lines
3.4 KiB
JavaScript

import fs from "node:fs";
import path from "node:path";
import { PROJECT_ROOT } from "../../utilities/index.js";
import { copyFileBuilder } from "../builders/copy-file.js";
import { createDependenciesLicenseBuilder } from "../builders/dependencies-license.js";
import { createJavascriptModuleBuilder } from "../builders/javascript-module.js";
import { createPackageJsonBuilder } from "../builders/package-json.js";
import { createTypesBuilder } from "../builders/types.js";
const extensions = {
esm: ".mjs",
umd: ".js",
cjs: ".cjs",
};
function createPackageJsonConfig({ "package.json": process }) {
return {
input: "package.json",
output: "package.json",
build: createPackageJsonBuilder({ process }),
};
}
function createReadmeConfig() {
return {
input: "README.md",
output: "README.md",
build: copyFileBuilder,
};
}
function createLicenseConfig() {
return {
input: path.join(PROJECT_ROOT, "LICENSE"),
output: "LICENSE",
build: copyFileBuilder,
};
}
function createThirdPartyNoticeConfig({ packageDisplayName }) {
return {
output: "THIRD-PARTY-NOTICES.md",
build: createDependenciesLicenseBuilder({ packageDisplayName }),
};
}
function createPackageMetaFilesConfig(options = {}) {
return {
name: "Meta files",
files: [
createPackageJsonConfig,
createLicenseConfig,
createReadmeConfig,
createThirdPartyNoticeConfig,
].map((create) => create(options)),
};
}
function createTypesConfig({ input, outputBaseName, isPlugin }) {
const inputBasename = input.slice(0, -path.extname(input).length);
if (!isPlugin) {
input = `${inputBasename}.d.ts`;
if (!fs.existsSync(path.join(PROJECT_ROOT, input))) {
return [];
}
}
return [
{
input,
output: `${outputBaseName ?? inputBasename}.d.ts`,
build: createTypesBuilder({ isPlugin }),
},
];
}
function createNodejsFileConfig(file) {
if (typeof file === "string") {
file = { input: file };
}
let { input, output, outputBaseName, ...buildOptions } = file;
const format = input.endsWith(".cjs") ? "cjs" : "esm";
outputBaseName ??= path.basename(input, path.extname(input));
return [
{
input,
output: `${outputBaseName}${extensions[format]}`,
build: createJavascriptModuleBuilder({
format,
...buildOptions,
platform: "node",
}),
},
...createTypesConfig({ input, outputBaseName }),
];
}
function createUniversalFileConfig(file) {
if (typeof file === "string") {
file = { input: file };
}
let { input, outputBaseName, umdVariableName, ...buildOptions } = file;
outputBaseName ??= path.basename(input, path.extname(input));
umdVariableName ??= outputBaseName;
return [
...[
{
format: "esm",
file: `${outputBaseName}${extensions.esm}`,
},
{
format: "umd",
file: `${outputBaseName}${extensions.umd}`,
umdVariableName,
},
].map((output) => ({
input,
output: output.file,
build: createJavascriptModuleBuilder({
platform: "universal",
addDefaultExport: output.format === "esm",
format: output.format,
umdVariableName: output.umdVariableName,
...buildOptions,
}),
})),
...createTypesConfig({ input, outputBaseName }),
];
}
export {
createNodejsFileConfig,
createPackageMetaFilesConfig,
createTypesConfig,
createUniversalFileConfig,
};