fix(package): omit unpacked test helpers from inventory

This commit is contained in:
Vincent Koc
2026-05-27 08:42:54 +02:00
parent cc662ba7d3
commit 6c42fea2d8
2 changed files with 75 additions and 0 deletions

View File

@@ -34,6 +34,40 @@ const OMITTED_PRIVATE_QA_PLUGIN_SDK_FILES = new Set([
"dist/plugin-sdk/src/plugin-sdk/qa-runtime.d.ts",
]);
const OMITTED_PRIVATE_QA_DIST_PREFIXES = ["dist/qa-runtime-"];
const OMITTED_PLUGIN_SDK_TEST_FILES = new Set([
"dist/plugin-sdk/agent-runtime-test-contracts.d.ts",
"dist/plugin-sdk/agent-runtime-test-contracts.js",
"dist/plugin-sdk/channel-contract-testing.d.ts",
"dist/plugin-sdk/channel-contract-testing.js",
"dist/plugin-sdk/channel-target-testing.d.ts",
"dist/plugin-sdk/channel-target-testing.js",
"dist/plugin-sdk/channel-test-helpers.d.ts",
"dist/plugin-sdk/channel-test-helpers.js",
"dist/plugin-sdk/plugin-test-api.d.ts",
"dist/plugin-sdk/plugin-test-api.js",
"dist/plugin-sdk/plugin-test-contracts.d.ts",
"dist/plugin-sdk/plugin-test-contracts.js",
"dist/plugin-sdk/plugin-test-runtime.d.ts",
"dist/plugin-sdk/plugin-test-runtime.js",
"dist/plugin-sdk/provider-http-test-mocks.d.ts",
"dist/plugin-sdk/provider-http-test-mocks.js",
"dist/plugin-sdk/provider-test-contracts.d.ts",
"dist/plugin-sdk/provider-test-contracts.js",
"dist/plugin-sdk/test-env.d.ts",
"dist/plugin-sdk/test-env.js",
"dist/plugin-sdk/test-fixtures.d.ts",
"dist/plugin-sdk/test-fixtures.js",
"dist/plugin-sdk/test-node-mocks.d.ts",
"dist/plugin-sdk/test-node-mocks.js",
"dist/plugin-sdk/testing.d.ts",
"dist/plugin-sdk/testing.js",
]);
const OMITTED_PLUGIN_SDK_TEST_PREFIXES = [
"dist/plugin-sdk/src/agents/test-helpers/",
"dist/plugin-sdk/src/plugin-sdk/test-helpers/",
"dist/plugin-sdk/src/test-helpers/",
"dist/plugin-sdk/src/test-utils/",
];
const OMITTED_DIST_SUBTREE_PATTERNS = [
/^dist\/extensions\/node_modules(?:\/|$)/u,
/^dist\/extensions\/[^/]+\/node_modules(?:\/|$)/u,
@@ -145,6 +179,15 @@ function isExternalizedBundledExtensionDistPath(
);
}
function isOmittedPluginSdkTestPath(relativePath: string): boolean {
return (
OMITTED_PLUGIN_SDK_TEST_FILES.has(relativePath) ||
OMITTED_PLUGIN_SDK_TEST_PREFIXES.some(
(prefix) => relativePath === prefix.slice(0, -1) || relativePath.startsWith(prefix),
)
);
}
async function collectExternalizedBundledExtensionIds(
packageRoot: string,
): Promise<ExternalizedBundledExtensionIds> {
@@ -177,6 +220,9 @@ function isPackagedDistPath(
if (relativePath === "dist/plugin-sdk/.tsbuildinfo") {
return false;
}
if (isOmittedPluginSdkTestPath(relativePath)) {
return false;
}
if (
OMITTED_PRIVATE_QA_PLUGIN_SDK_PREFIXES.some((prefix) => relativePath.startsWith(prefix)) ||
OMITTED_PRIVATE_QA_PLUGIN_SDK_FILES.has(relativePath) ||
@@ -197,6 +243,7 @@ function isOmittedDistSubtree(
return (
isExternalizedBundledExtensionDistPath(relativePath, externalizedExtensionIds) ||
isLegacyPluginDependencyDirPath(relativePath) ||
isOmittedPluginSdkTestPath(relativePath) ||
OMITTED_DIST_SUBTREE_PATTERNS.some((pattern) => pattern.test(relativePath))
);
}

View File

@@ -595,6 +595,34 @@ describe("bundled plugin postinstall", () => {
await expectPathMissing(staleFile);
});
it("omits unpacked plugin-sdk test helpers from the package dist inventory", async () => {
const packageRoot = await createTempDirAsync("openclaw-packaged-inventory-");
const runtimeFile = path.join(packageRoot, "dist", "plugin-sdk", "runtime.js");
const testHelperFile = path.join(packageRoot, "dist", "plugin-sdk", "testing.js");
const nestedTestHelperFile = path.join(
packageRoot,
"dist",
"plugin-sdk",
"src",
"plugin-sdk",
"test-helpers",
"provider-contract.d.ts",
);
await fs.mkdir(path.dirname(nestedTestHelperFile), { recursive: true });
await fs.mkdir(path.dirname(runtimeFile), { recursive: true });
await fs.writeFile(runtimeFile, "export {};\n");
await fs.writeFile(testHelperFile, "export {};\n");
await fs.writeFile(nestedTestHelperFile, "export {};\n");
const inventory = await writePackageDistInventory(packageRoot);
expect(inventory).toContain("dist/plugin-sdk/runtime.js");
expect(inventory).not.toContain("dist/plugin-sdk/testing.js");
expect(inventory).not.toContain(
"dist/plugin-sdk/src/plugin-sdk/test-helpers/provider-contract.d.ts",
);
});
it("prunes legacy plugin runtime deps state during packaged postinstall", async () => {
const prefix = await createTempDirAsync("openclaw-packaged-prefix-");
const packageRoot = path.join(prefix, "lib", "node_modules", "openclaw");