mirror of
https://github.com/danbulant/oxc
synced 2026-05-25 04:42:10 +00:00
I didn't introduce a new set of native packages for the `oxc_language_server` binary, This change temporarily bundles them as part of oxlint, We most probably would want to make it an optional dependency in the future if we start to add more futures like formatting, jump to definition, etc to it.
114 lines
3.3 KiB
JavaScript
114 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 OXLINT_BIN_NAME = "oxlint";
|
|
const OXLS_BIN_NAME = "oxc_language_server";
|
|
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")
|
|
);
|
|
|
|
const LIBC_MAPPING = {
|
|
"gnu": "glibc",
|
|
"musl": "musl",
|
|
}
|
|
|
|
function generateNativePackage(target) {
|
|
const packageName = `@${OXLINT_BIN_NAME}/${target}`;
|
|
const packageRoot = resolve(PACKAGES_ROOT, `${OXLINT_BIN_NAME}-${target}`);
|
|
|
|
// 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: [LIBC_MAPPING[triple[2]]] }
|
|
const manifest = {
|
|
name: packageName,
|
|
version,
|
|
author,
|
|
license,
|
|
homepage,
|
|
bugs,
|
|
repository,
|
|
os: [platform],
|
|
cpu: [arch],
|
|
...libc
|
|
};
|
|
|
|
const manifestPath = resolve(packageRoot, "package.json");
|
|
console.log(`Create manifest ${manifestPath}`);
|
|
fs.writeFileSync(manifestPath, JSON.stringify(manifest));
|
|
|
|
// Copy the binary
|
|
const ext = platform === "win32" ? ".exe" : "";
|
|
|
|
const oxlintBinSource = resolve(REPO_ROOT, `${OXLINT_BIN_NAME}-${target}${ext}`);
|
|
const oxlintBinTarget = resolve(packageRoot, `${OXLINT_BIN_NAME}${ext}`);
|
|
|
|
const oxlsBinSource = resolve(REPO_ROOT, `${OXLS_BIN_NAME}-${target}${ext}`);
|
|
const oxlsBinTarget = resolve(packageRoot, `${OXLS_BIN_NAME}${ext}`);
|
|
|
|
console.log(`Copy linter binary ${oxlintBinSource}`);
|
|
fs.copyFileSync(oxlintBinSource, oxlintBinTarget);
|
|
fs.chmodSync(oxlintBinTarget, 0o755);
|
|
|
|
console.log(`Copy language server binary ${oxlsBinSource}`);
|
|
fs.copyFileSync(oxlsBinSource, oxlsBinTarget);
|
|
fs.chmodSync(oxlsBinTarget, 0o755);
|
|
}
|
|
|
|
function writeManifest() {
|
|
const manifestPath = resolve(PACKAGES_ROOT, OXLINT_BIN_NAME, "package.json");
|
|
|
|
const manifestData = JSON.parse(
|
|
fs.readFileSync(manifestPath).toString("utf-8")
|
|
);
|
|
|
|
const nativePackages = TARGETS.map((target) => [
|
|
`@${OXLINT_BIN_NAME}/${target}`,
|
|
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);
|
|
}
|
|
|
|
// NOTE: Must update npm/oxlint/bin/oxlint
|
|
// and npm/oxlint/bin/oxc_language_server
|
|
const TARGETS = [
|
|
"win32-x64",
|
|
"win32-arm64",
|
|
"linux-x64-gnu",
|
|
"linux-arm64-gnu",
|
|
"linux-x64-musl",
|
|
"linux-arm64-musl",
|
|
"darwin-x64",
|
|
"darwin-arm64",
|
|
]
|
|
|
|
for (const target of TARGETS) {
|
|
generateNativePackage(target);
|
|
}
|
|
|
|
writeManifest();
|