mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 20:32:10 +00:00
120 lines
3.3 KiB
JavaScript
120 lines
3.3 KiB
JavaScript
// Code copied from [Rome](https://github.com/rome/tools/blob/main/npm/rome/scripts/generate-packages.mjs)
|
|
|
|
import { resolve } from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
import * as fs from "node:fs";
|
|
|
|
const OXC_ROOT = resolve(fileURLToPath(import.meta.url), "../..");
|
|
const PACKAGES_ROOT = resolve(OXC_ROOT, "..");
|
|
const BINARY_ROOT = resolve(OXC_ROOT, "../../napi/parser");
|
|
const MANIFEST_PATH = resolve(OXC_ROOT, "package.json");
|
|
|
|
console.log('OXC_ROOT', OXC_ROOT);
|
|
console.log('PACKAGES_ROOT', PACKAGES_ROOT);
|
|
console.log('BINARY_ROOT', BINARY_ROOT);
|
|
console.log('MANIFEST_PATH', MANIFEST_PATH);
|
|
|
|
const LIBC_MAPPING = {
|
|
"gnu": "glibc",
|
|
"musl": "musl",
|
|
}
|
|
|
|
const rootManifest = JSON.parse(
|
|
fs.readFileSync(MANIFEST_PATH).toString("utf-8")
|
|
);
|
|
|
|
function package_name(target) {
|
|
return `@oxc-parser/binding-${target}`
|
|
}
|
|
function generateNativePackage(target) {
|
|
const binaryName = `parser.${target}.node`;
|
|
|
|
const packageRoot = resolve(PACKAGES_ROOT, `oxc-parser-${target}`);
|
|
const binarySource = resolve(BINARY_ROOT, binaryName);
|
|
const binaryTarget = resolve(packageRoot, binaryName);
|
|
|
|
// Remove the directory just in case it already exists (it's autogenerated
|
|
// so there shouldn't be anything important there anyway)
|
|
fs.rmSync(packageRoot, { recursive: true, force: true });
|
|
|
|
// Create the package directory
|
|
console.log(`Create directory ${packageRoot}`);
|
|
fs.mkdirSync(packageRoot);
|
|
|
|
// Generate the package.json manifest
|
|
const { version, author, license, homepage, bugs, repository } = rootManifest;
|
|
|
|
const triple = target.split("-");
|
|
const platform = triple[0];
|
|
const arch = triple[1];
|
|
const libc = triple[2] && LIBC_MAPPING[triple[2]] && { libc: [LIBC_MAPPING[triple[2]]] }
|
|
const manifest = {
|
|
name: package_name(target),
|
|
version,
|
|
main: binaryName,
|
|
license,
|
|
author,
|
|
bugs,
|
|
homepage,
|
|
repository,
|
|
files: [binaryName],
|
|
cpu: [arch],
|
|
os: [platform],
|
|
...libc
|
|
};
|
|
|
|
const manifestPath = resolve(packageRoot, "package.json");
|
|
console.log(`Create manifest ${manifestPath}`);
|
|
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));
|
|
|
|
console.log(`Copy binary ${binaryTarget}`);
|
|
fs.copyFileSync(binarySource, binaryTarget);
|
|
}
|
|
|
|
function writeManifest() {
|
|
const packageRoot = resolve(PACKAGES_ROOT, 'oxc-parser');
|
|
const manifestPath = resolve(packageRoot, "package.json");
|
|
|
|
console.log('packageRoot', packageRoot);
|
|
|
|
const manifestData = JSON.parse(
|
|
fs.readFileSync(manifestPath).toString("utf-8")
|
|
);
|
|
|
|
const nativePackages = TARGETS.map((target) => [
|
|
package_name(target),
|
|
rootManifest.version,
|
|
]);
|
|
|
|
manifestData["version"] = rootManifest.version;
|
|
manifestData["optionalDependencies"] = Object.fromEntries(nativePackages);
|
|
|
|
console.log('manifestPath', manifestPath);
|
|
console.log('manifestData', manifestData);
|
|
|
|
const content = JSON.stringify(manifestData, null, 2);
|
|
fs.writeFileSync(manifestPath, content);
|
|
|
|
let files = ["index.js", "index.d.ts"];
|
|
for (const file of files) {
|
|
fs.copyFileSync(resolve(BINARY_ROOT, file), resolve(packageRoot, file));
|
|
}
|
|
}
|
|
|
|
// NOTE: Must update npm/oxc-parser/package.json
|
|
const TARGETS = [
|
|
"win32-x64-msvc",
|
|
"win32-arm64-msvc",
|
|
"linux-x64-gnu",
|
|
"linux-arm64-gnu",
|
|
"linux-x64-musl",
|
|
"linux-arm64-musl",
|
|
"darwin-x64",
|
|
"darwin-arm64",
|
|
];
|
|
|
|
for (const target of TARGETS) {
|
|
generateNativePackage(target);
|
|
}
|
|
|
|
writeManifest();
|