Ship file viewer, editor improvements, and private package releases

This commit is contained in:
Clintchiz committed 2026-09-09 11:20:11 +05:30
1 parent 645914955c
commit a4a31032b9
158 files changed
+10523 -137

No files matched your search

+15 -6
View File
@@ -210,14 +210,16 @@ function publishManifest(
for (const [k, v] of Object.entries(m.bin)) out.bin[k] = js(v as string);
}
if (m.dependencies) {
out.dependencies = {};
for (const [dep, range] of Object.entries(m.dependencies)) {
out.dependencies[dep] = String(range).startsWith("workspace:")
for (const field of ["dependencies", "optionalDependencies", "peerDependencies"]) {
if (!m[field]) continue;
out[field] = {};
for (const [dep, range] of Object.entries(m[field])) {
out[field][dep] = String(range).startsWith("workspace:")
? `^${workspaceVersions.get(dep) ?? version}`
: range;
}
}
if (m.peerDependenciesMeta) out.peerDependenciesMeta = structuredClone(m.peerDependenciesMeta);
if (m.wrnexus) {
out.wrnexus = structuredClone(m.wrnexus);
@@ -264,8 +266,15 @@ async function main() {
outDir: join(p.dir, "dist"),
format: ["esm"],
dts: true,
external: [/^@wrnexus\//, /^bun:/, /^node:/],
tsconfig: join(repoRoot, "tsconfig.json"),
external: [
/^@wrnexus\//,
/^bun:/,
/^node:/,
...Object.keys(p.manifest.peerDependencies ?? {}),
],
tsconfig: existsSync(join(p.dir, "tsconfig.json"))
? join(p.dir, "tsconfig.json")
: join(repoRoot, "tsconfig.json"),
clean: true,
// Shared modules must be emitted ONCE as a chunk both entries import,
// not inlined into each. Several packages hold mutable module state --
+14 -1
View File
@@ -28,6 +28,9 @@ function run(command: string, args: string[], capture = false, allowFailure = fa
}
function runNpm(args: string[], capture = false, allowFailure = false) {
if (process.env.WRNEXUS_NPM_REGISTRY) {
args = ["--registry", process.env.WRNEXUS_NPM_REGISTRY, ...args];
}
return process.platform === "win32"
? run(
process.env.ComSpec ?? "cmd.exe",
@@ -138,7 +141,17 @@ if (mode === "plan") {
run(process.execPath, ["test", ...selected.map((pkg) => `packages/${pkg.dir}`)]);
run(process.execPath, ["run", "scripts/publish-packages.ts", ...selected.map((pkg) => pkg.name)]);
runNpm(["whoami"]);
for (const pkg of selected) {
// Staging records dependencies first; preserve that order during publication.
const integrity = JSON.parse(
readFileSync(join(root, ".publish", "PACKAGE-INTEGRITY.json"), "utf8"),
);
const ordered = integrity.packages.map((entry: { name: string }) => {
const pkg = selected.find((pkg) => pkg.name === entry.name);
if (!pkg) throw new Error(`Unexpected staged package ${entry.name}`);
return pkg;
}) as PackageInfo[];
if (ordered.length !== selected.length) throw new Error("Staged package selection is incomplete");
for (const pkg of ordered) {
const stage = join(root, ".publish", pkg.dir);
if (!registryHas(pkg)) runNpm(["publish", stage, "--access", "restricted"]);
console.log(` ✓ ${pkg.name}@${pkg.manifest.version}`);
+39
View File
@@ -53,6 +53,12 @@ if (
const consumer = mkdtempSync(join(tmpdir(), "wrnexus-staged-consumer-"));
try {
if (process.env.WRNEXUS_NPM_REGISTRY) {
writeFileSync(
join(consumer, ".npmrc"),
`@wrnexus:registry=${process.env.WRNEXUS_NPM_REGISTRY}\n`,
);
}
const tarballRoot = join(consumer, "tarballs");
mkdirSync(tarballRoot, { recursive: true });
const dependencies = {};
@@ -74,6 +80,12 @@ try {
}
dependencies[pkg.manifest.name] = `file:${join(tarballRoot, filename).replace(/\\/g, "/")}`;
}
if (stagedPackageNames.has("@wrnexus/viewer")) {
const viewer = JSON.parse(readFileSync(join(root, "packages/viewer/package.json"), "utf8"));
for (const name of ["fflate", "mammoth", "pdfjs-dist", "xlsx"]) {
dependencies[name] = viewer.devDependencies[name];
}
}
writeFileSync(
join(consumer, "package.json"),
JSON.stringify(
@@ -118,6 +130,33 @@ try {
throw new Error(`Staged package import probe failed:\n${probe.stderr || probe.stdout}`);
if (probe.stdout) process.stdout.write(probe.stdout);
if (stagedPackageNames.has("@wrnexus/viewer")) {
writeFileSync(
join(consumer, "viewer-probe.mjs"),
`import { existsSync, readFileSync } from "node:fs";
import { viewerPlugin } from "@wrnexus/viewer/plugin";
const manifest = JSON.parse(readFileSync("node_modules/@wrnexus/viewer/package.json", "utf8"));
if (!manifest.peerDependenciesMeta?.xlsx?.optional || manifest.peerDependencies?.["@wrnexus/uploader"]?.startsWith("workspace:")) throw new Error("Viewer peer metadata was lost");
const plugin = viewerPlugin({ convert: { converters: [], resolveSource: async () => undefined }, uploads: {} });
for (const asset of [...plugin.clientRuntimes, ...plugin.routeEntries, ...plugin.styleSources]) {
if (!existsSync(asset.entry)) throw new Error("Missing published viewer asset: " + asset.entry);
}
for (const runtime of plugin.clientRuntimes.filter((runtime) => runtime.bundle !== false)) {
const result = await Bun.build({ entrypoints: [runtime.entry], target: "browser" });
if (!result.success) throw new AggregateError(result.logs, "Viewer browser runtime failed: " + runtime.id);
}
console.log("Published viewer routes, metadata, and browser runtimes passed.");
`,
);
const viewer = spawnSync(bun, ["viewer-probe.mjs"], {
cwd: consumer,
encoding: "utf8",
});
if (viewer.status !== 0)
throw new Error(`Staged viewer probe failed:\n${viewer.stderr || viewer.stdout}`);
if (viewer.stdout) process.stdout.write(viewer.stdout);
}
const browserPackages = ["@wrnexus/csr", "@wrnexus/reactive"].filter((name) =>
existsSync(join(consumer, "node_modules", ...name.split("/"))),
);