fix(scripts): skip generated dist in legacy store guard

This commit is contained in:
Vincent Koc 2026-06-19 17:16:22 +02:00
parent 2005812dff
commit 6ef4684b89
No known key found for this signature in database
2 changed files with 39 additions and 9 deletions

View file

@ -218,8 +218,18 @@ function isSourceFile(filePath) {
}
function isGeneratedAssetSourceFile(filePath) {
return /(?:^|\/)extensions\/[^/]+\/assets\/[^/]+\.[cm]?js$/u.test(
filePath.replaceAll(path.sep, "/"),
const normalized = filePath.replaceAll(path.sep, "/");
return (
/(?:^|\/)extensions\/[^/]+\/(?:assets|dist)\/.+\.[cm]?js$/u.test(normalized) ||
/(?:^|\/)packages\/[^/]+\/dist\/.+\.[cm]?js$/u.test(normalized)
);
}
function isGeneratedAssetSourcePath(filePath) {
return (
/(?:^|\/)extensions\/[^/]+\/(?:assets|dist)(?:\/|$)/u.test(
filePath.replaceAll(path.sep, "/"),
) || /(?:^|\/)packages\/[^/]+\/dist(?:\/|$)/u.test(filePath.replaceAll(path.sep, "/"))
);
}
@ -253,6 +263,9 @@ async function collectSourceFiles(targetPath) {
continue;
}
const entryPath = path.join(targetPath, entry.name);
if (isGeneratedAssetSourcePath(entryPath)) {
continue;
}
if (entry.isDirectory()) {
files.push(...(await collectSourceFiles(entryPath)));
continue;

View file

@ -32,28 +32,49 @@ describe("check-database-first-legacy-stores", () => {
}
});
it("skips generated extension asset bundles", async () => {
it("skips generated extension asset and dist bundles", async () => {
const root = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-db-first-guard-"));
try {
await fs.mkdir(path.join(root, "extensions", "diffs", "assets"), { recursive: true });
await fs.mkdir(path.join(root, "extensions", "diffs", "dist", "assets"), {
recursive: true,
});
await fs.mkdir(path.join(root, "extensions", "diffs", "src"), { recursive: true });
await fs.mkdir(path.join(root, "packages", "plugin-sdk", "dist"), { recursive: true });
await fs.mkdir(path.join(root, "packages", "plugin-sdk", "src"), { recursive: true });
await fs.writeFile(
path.join(root, "extensions", "diffs", "assets", "viewer-runtime.js"),
"export const bundled = true;\n",
);
await fs.writeFile(
path.join(root, "extensions", "diffs", "dist", "assets", "viewer-runtime.js"),
"export const bundled = true;\n",
);
await fs.writeFile(
path.join(root, "extensions", "diffs", "src", "runtime.js"),
"export const runtime = true;\n",
);
await fs.writeFile(
path.join(root, "packages", "plugin-sdk", "dist", "index.js"),
"export const bundled = true;\n",
);
await fs.writeFile(
path.join(root, "packages", "plugin-sdk", "src", "index.js"),
"export const runtime = true;\n",
);
const files = await collectDatabaseFirstLegacyStoreSourceFiles([
path.join(root, "extensions"),
path.join(root, "packages"),
]);
const relativeFiles = files
.map((file) => path.relative(root, file).replaceAll(path.sep, "/"))
.toSorted();
expect(relativeFiles).toEqual(["extensions/diffs/src/runtime.js"]);
expect(relativeFiles).toEqual([
"extensions/diffs/src/runtime.js",
"packages/plugin-sdk/src/index.js",
]);
} finally {
await fs.rm(root, { force: true, recursive: true });
}
@ -8387,11 +8408,7 @@ describe("check-database-first-legacy-stores", () => {
[`${relativePath}:legacy store filesystem write:${allowedWrite}`, 1],
]);
const violations = collectDatabaseFirstLegacyStoreViolations(
[
`import fs from "node:fs";`,
`${allowedWrite};`,
`${allowedWrite};`,
].join("\n"),
[`import fs from "node:fs";`, `${allowedWrite};`, `${allowedWrite};`].join("\n"),
relativePath,
{ currentLegacyWriteAllowances },
);