mirror of
https://github.com/astral-sh/setup-uv.git
synced 2026-11-05 01:35:32 +00:00
fix: preserve cache error class names in save-cache bundle (#1093)
## Summary - Preserve class names in the save-cache bundle so `@actions/cache` error-name comparisons distinguish validation errors, benign cache-reservation races, and finalization errors correctly. - Add regression coverage that exercises the bundled `ValidationError`, `ReserveCacheError`, and `FinalizeCacheError` constructors. Fixes #1028 ## Verification - `npm run all` passed on Ubuntu 24.04 with Node 24.19.0: build, Biome, packaging, and all 159 tests across 15 suites. - `git diff --check` passed. The save-cache bundle increases by about 77 KB raw (14 KB gzip) to preserve the required names.
This commit is contained in:
+33
@@ -0,0 +1,33 @@
|
|||||||
|
import { readFileSync } from "node:fs";
|
||||||
|
import { runInNewContext } from "node:vm";
|
||||||
|
import { expect, it } from "@jest/globals";
|
||||||
|
|
||||||
|
const saveCacheBundle = readFileSync(
|
||||||
|
new URL("../../dist/save-cache/index.cjs", import.meta.url),
|
||||||
|
"utf8",
|
||||||
|
);
|
||||||
|
|
||||||
|
function bundledErrorClass(name: string): new (message: string) => Error {
|
||||||
|
const start = saveCacheBundle.indexOf(`var ${name} = class`);
|
||||||
|
expect(start).toBeGreaterThanOrEqual(0);
|
||||||
|
|
||||||
|
const end = saveCacheBundle.indexOf("\n};", start);
|
||||||
|
expect(end).toBeGreaterThan(start);
|
||||||
|
|
||||||
|
const declaration = saveCacheBundle.slice(start, end + 3);
|
||||||
|
return runInNewContext(`${declaration}; ${name}`, {
|
||||||
|
__name: (target: object, value: string) =>
|
||||||
|
Object.defineProperty(target, "name", { configurable: true, value }),
|
||||||
|
}) as new (
|
||||||
|
message: string,
|
||||||
|
) => Error;
|
||||||
|
}
|
||||||
|
|
||||||
|
it.each(["ValidationError", "ReserveCacheError", "FinalizeCacheError"])(
|
||||||
|
"preserves the %s name in the save-cache bundle",
|
||||||
|
(name) => {
|
||||||
|
const ErrorClass = bundledErrorClass(name);
|
||||||
|
|
||||||
|
expect(new ErrorClass("test").name).toBe(ErrorClass.name);
|
||||||
|
},
|
||||||
|
);
|
||||||
+2532
-720
File diff suppressed because it is too large
Load Diff
@@ -9,6 +9,8 @@ const builds = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
entryPoints: ["src/save-cache.ts"],
|
entryPoints: ["src/save-cache.ts"],
|
||||||
|
// @actions/cache compares error.name to the error constructor's name.
|
||||||
|
keepNames: true,
|
||||||
outfile: "dist/save-cache/index.cjs",
|
outfile: "dist/save-cache/index.cjs",
|
||||||
staleOutfiles: ["dist/save-cache/index.mjs"],
|
staleOutfiles: ["dist/save-cache/index.mjs"],
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user