@@ -32,6 +32,33 @@ describe("check-database-first-legacy-stores", () => {
|
32 | 32 | } |
33 | 33 | }); |
34 | 34 | |
| 35 | +it("skips generated extension asset bundles", async () => { |
| 36 | +const root = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-db-first-guard-")); |
| 37 | +try { |
| 38 | +await fs.mkdir(path.join(root, "extensions", "diffs", "assets"), { recursive: true }); |
| 39 | +await fs.mkdir(path.join(root, "extensions", "diffs", "src"), { recursive: true }); |
| 40 | +await fs.writeFile( |
| 41 | +path.join(root, "extensions", "diffs", "assets", "viewer-runtime.js"), |
| 42 | +"export const bundled = true;\n", |
| 43 | +); |
| 44 | +await fs.writeFile( |
| 45 | +path.join(root, "extensions", "diffs", "src", "runtime.js"), |
| 46 | +"export const runtime = true;\n", |
| 47 | +); |
| 48 | + |
| 49 | +const files = await collectDatabaseFirstLegacyStoreSourceFiles([ |
| 50 | +path.join(root, "extensions"), |
| 51 | +]); |
| 52 | +const relativeFiles = files |
| 53 | +.map((file) => path.relative(root, file).replaceAll(path.sep, "/")) |
| 54 | +.toSorted(); |
| 55 | + |
| 56 | +expect(relativeFiles).toEqual(["extensions/diffs/src/runtime.js"]); |
| 57 | +} finally { |
| 58 | +await fs.rm(root, { force: true, recursive: true }); |
| 59 | +} |
| 60 | +}); |
| 61 | + |
35 | 62 | it("ignores deeply nested type-only syntax", () => { |
36 | 63 | const nestedType = Array.from({ length: 600 }).reduce((type) => `Readonly<${type}>`, "string"); |
37 | 64 | const violations = collectDatabaseFirstLegacyStoreViolations( |
|