mirror of
https://github.com/openclaw/openclaw.git
synced 2026-10-03 01:29:56 +00:00
pnpm owns source dependency versions and workspace links. Remove both source pruning owners, isolate npm bundle staging, preserve importer trees in CI caches, and keep the Bun Undici workaround importer-relative. Source tests now exercise declared plugin versions after install and build. Packaged runtime cleanup remains unchanged; no dependency pins change. Related: https://github.com/openclaw/openclaw/pull/132385
57 lines
2.2 KiB
TypeScript
57 lines
2.2 KiB
TypeScript
import fs from "node:fs";
|
|
import { createRequire } from "node:module";
|
|
import path from "node:path";
|
|
import { createServer } from "vite";
|
|
import { afterEach, expect, it } from "vitest";
|
|
import { useAutoCleanupTempDirTracker } from "./helpers/temp-dir.js";
|
|
import { sharedVitestConfig } from "./vitest/vitest.shared.config.ts";
|
|
|
|
const tempDirs = useAutoCleanupTempDirTracker(afterEach);
|
|
|
|
it("resolves Undici's real entry from each importer instead of the root install or Bun builtin", async () => {
|
|
const root = tempDirs.make("openclaw-vitest-dependency-resolution-");
|
|
const importers = [
|
|
[root, "1.0.0"],
|
|
[path.join(root, "extensions", "plugin-a"), "2.0.0"],
|
|
[path.join(root, "extensions", "plugin-b"), "3.0.0"],
|
|
] as const;
|
|
for (const [dir, version] of importers) {
|
|
const dependencyDir = path.join(dir, "node_modules", "undici");
|
|
fs.mkdirSync(dependencyDir, { recursive: true });
|
|
fs.writeFileSync(path.join(dir, "source.test.ts"), 'import "undici";');
|
|
fs.writeFileSync(
|
|
path.join(dir, "package.json"),
|
|
JSON.stringify({ dependencies: { undici: version } }),
|
|
);
|
|
fs.writeFileSync(
|
|
path.join(dependencyDir, "package.json"),
|
|
JSON.stringify({ name: "undici", version, main: "index.js" }),
|
|
);
|
|
fs.writeFileSync(
|
|
path.join(dependencyDir, "index.js"),
|
|
`exports.version = ${JSON.stringify(version)};`,
|
|
);
|
|
}
|
|
const server = await createServer({
|
|
root,
|
|
configFile: false,
|
|
envDir: false,
|
|
resolve: sharedVitestConfig.resolve,
|
|
server: { middlewareMode: true, hmr: false, watch: null },
|
|
optimizeDeps: { noDiscovery: true },
|
|
});
|
|
try {
|
|
for (const [dir, version] of importers) {
|
|
const importer = path.join(dir, "source.test.ts");
|
|
const require = createRequire(importer);
|
|
const resolved = await server.environments.ssr.pluginContainer.resolveId("undici", importer);
|
|
expect(resolved).not.toBeNull();
|
|
const entry = resolved!.id;
|
|
expect(require(path.join(path.dirname(entry), "package.json")).version).toBe(version);
|
|
expect(entry).toBe(require.resolve("undici/index.js"));
|
|
expect(require(entry).version).toBe(version);
|
|
}
|
|
} finally {
|
|
await server.close();
|
|
}
|
|
});
|