pi-mono/scripts/use-local-packages.mjs
Christian Klotz 23cf2b948d
feat: unify package artifact validation (#10197)
* feat: unify package artifact validation

* fix: restrict local artifact output paths

* fix: clarify package artifact module names

* feat: support pnpm package artifact consumers

* fix: preserve local release package installs

Keep npm and Bun consumer installs as runnable release artifacts while retaining isolated validation for other packages. Simplify smoke fixtures and avoid redundant release work.
2026-10-06 13:30:02 +02:00

41 lines
1.7 KiB
JavaScript

#!/usr/bin/env node
import { resolve } from "node:path";
import { parseArgs } from "node:util";
import { wireConsumer } from "./local-package-install.mjs";
import { readArtifactSet } from "./package-artifacts.mjs";
function printUsage() {
console.log(`Usage: node scripts/use-local-packages.mjs --manifest <path> --consumer <dir> --package <name> [--package <name> ...] [--package-manager npm|pnpm]
Updates an external project's package configuration to use direct packages and
all transitive Pi packages from a local package artifact set. Defaults to npm.
`);
}
const { values } = parseArgs({
options: {
consumer: { type: "string" },
help: { type: "boolean", default: false },
manifest: { type: "string" },
package: { type: "string", multiple: true, default: [] },
"package-manager": { type: "string", default: "npm" },
},
});
if (values.help) {
printUsage();
process.exit(0);
}
if (!values.manifest) throw new Error("--manifest is required");
if (!values.consumer) throw new Error("--consumer is required");
if (values.package.length === 0) throw new Error("At least one --package is required");
if (values["package-manager"] !== "npm" && values["package-manager"] !== "pnpm") {
throw new Error(`Unsupported package manager: ${values["package-manager"]}`);
}
const artifactSet = readArtifactSet(resolve(values.manifest));
const consumerDirectory = resolve(values.consumer);
wireConsumer({ artifactSet, consumerDirectory, packageManager: values["package-manager"], packageNames: values.package });
console.log(`Updated ${consumerDirectory}/package.json from ${artifactSet.manifestPath}`);
console.log(`Run ${values["package-manager"]} install --ignore-scripts in the consumer project.`);