mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 20:32:10 +00:00
89 lines
2.7 KiB
JavaScript
89 lines
2.7 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 BIN_NAME = "oxlint";
|
|
const OXLINT_ROOT = resolve(fileURLToPath(import.meta.url), "../..");
|
|
const PACKAGES_ROOT = resolve(OXLINT_ROOT, "..");
|
|
const REPO_ROOT = resolve(PACKAGES_ROOT, "..");
|
|
const MANIFEST_PATH = resolve(OXLINT_ROOT, "package.json");
|
|
|
|
const rootManifest = JSON.parse(
|
|
fs.readFileSync(MANIFEST_PATH).toString("utf-8")
|
|
);
|
|
|
|
function generateNativePackage(platform, arch) {
|
|
const packageName = `@${BIN_NAME}/${platform}-${arch}`;
|
|
const packageRoot = resolve(PACKAGES_ROOT, `${BIN_NAME}-${platform}-${arch}`);
|
|
|
|
// 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 manifest = JSON.stringify({
|
|
name: packageName,
|
|
version,
|
|
author,
|
|
license,
|
|
homepage,
|
|
bugs,
|
|
repository,
|
|
os: [platform],
|
|
cpu: [arch],
|
|
});
|
|
|
|
const manifestPath = resolve(packageRoot, "package.json");
|
|
console.log(`Create manifest ${manifestPath}`);
|
|
fs.writeFileSync(manifestPath, manifest);
|
|
|
|
// Copy the binary
|
|
const ext = platform === "win32" ? ".exe" : "";
|
|
const binarySource = resolve(REPO_ROOT, `${BIN_NAME}-${platform}-${arch}${ext}`);
|
|
const binaryTarget = resolve(packageRoot, `${BIN_NAME}${ext}`);
|
|
|
|
console.log(`Copy binary ${binaryTarget}`);
|
|
fs.copyFileSync(binarySource, binaryTarget);
|
|
fs.chmodSync(binaryTarget, 0o755);
|
|
}
|
|
|
|
function writeManifest() {
|
|
const manifestPath = resolve(PACKAGES_ROOT, BIN_NAME, "package.json");
|
|
|
|
const manifestData = JSON.parse(
|
|
fs.readFileSync(manifestPath).toString("utf-8")
|
|
);
|
|
|
|
const nativePackages = PLATFORMS.flatMap((platform) =>
|
|
ARCHITECTURES.map((arch) => [
|
|
`@${BIN_NAME}/${platform}-${arch}`,
|
|
rootManifest.version,
|
|
])
|
|
);
|
|
|
|
manifestData["version"] = rootManifest.version;
|
|
manifestData["optionalDependencies"] = Object.fromEntries(nativePackages);
|
|
|
|
console.log(`Update manifest ${manifestPath}`);
|
|
const content = JSON.stringify(manifestData);
|
|
fs.writeFileSync(manifestPath, content);
|
|
}
|
|
|
|
const PLATFORMS = ["win32", "darwin", "linux"];
|
|
const ARCHITECTURES = ["x64", "arm64"];
|
|
|
|
for (const platform of PLATFORMS) {
|
|
for (const arch of ARCHITECTURES) {
|
|
generateNativePackage(platform, arch);
|
|
}
|
|
}
|
|
|
|
writeManifest();
|