diff --git a/scripts/check-database-first-legacy-stores.mjs b/scripts/check-database-first-legacy-stores.mjs index 1781695b00c..551af6a7c70 100644 --- a/scripts/check-database-first-legacy-stores.mjs +++ b/scripts/check-database-first-legacy-stores.mjs @@ -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; diff --git a/test/scripts/check-database-first-legacy-stores.test.ts b/test/scripts/check-database-first-legacy-stores.test.ts index aafeced7d1b..f3bda08b817 100644 --- a/test/scripts/check-database-first-legacy-stores.test.ts +++ b/test/scripts/check-database-first-legacy-stores.test.ts @@ -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 }, );