happo 6.9.0 → 6.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist/cli/cancelJob-PHMDAIJB.js +10 -0
  2. package/dist/cli/{chunk-CVX5DVCT.js → chunk-AJQL27KK.js} +2 -2
  3. package/dist/cli/{chunk-J2EA5OBW.js → chunk-JIRDD3RO.js} +2 -2
  4. package/dist/cli/{chunk-R6YURZXU.js → chunk-JJOM7NVS.js} +2 -2
  5. package/dist/cli/{chunk-P4EXA4AX.js → chunk-KTUIEOPK.js} +8 -4
  6. package/dist/cli/chunk-KTUIEOPK.js.map +7 -0
  7. package/dist/cli/chunk-ML3Z5Z22.js +44 -0
  8. package/dist/cli/chunk-ML3Z5Z22.js.map +7 -0
  9. package/dist/cli/{chunk-BK32666K.js → chunk-V2ULNFYX.js} +3 -3
  10. package/dist/cli/{chunk-BESQLM5F.js → chunk-WUYZIKHR.js} +2 -2
  11. package/dist/cli/createAsyncComparison-D525PJCA.js +10 -0
  12. package/dist/cli/{createAsyncReport-4ZD53TJC.js → createAsyncReport-QFCSVMAO.js} +4 -4
  13. package/dist/cli/createExtendsReportSnapRequest-X2DLPLP5.js +32 -0
  14. package/dist/cli/createExtendsReportSnapRequest-X2DLPLP5.js.map +7 -0
  15. package/dist/cli/findBaselineReport-N4AUOVXP.js +36 -0
  16. package/dist/cli/findBaselineReport-N4AUOVXP.js.map +7 -0
  17. package/dist/cli/{getFlakes-6ZGTWZTM.js → getFlakes-M2LSXSTW.js} +4 -4
  18. package/dist/cli/index.d.ts.map +1 -1
  19. package/dist/cli/main.js +154 -20
  20. package/dist/cli/main.js.map +3 -3
  21. package/dist/cli/package-3UUMFV7J.js +7 -0
  22. package/dist/cli/parseOptions.d.ts +4 -1
  23. package/dist/cli/parseOptions.d.ts.map +1 -1
  24. package/dist/cli/{prepareSnapRequests-2LHSGFZV.js → prepareSnapRequests-RINWFSWA.js} +170 -65
  25. package/dist/cli/prepareSnapRequests-RINWFSWA.js.map +7 -0
  26. package/dist/cli/startJob-JAVHOIR6.js +10 -0
  27. package/dist/cli/{wrapper-7RE2N7Y3.js → wrapper-YYNZLEMW.js} +45 -26
  28. package/dist/cli/wrapper-YYNZLEMW.js.map +7 -0
  29. package/dist/config/index.d.ts +0 -8
  30. package/dist/config/index.d.ts.map +1 -1
  31. package/dist/config/index.js.map +2 -2
  32. package/dist/custom/index.d.ts.map +1 -1
  33. package/dist/custom/index.js +70 -14
  34. package/dist/custom/index.js.map +3 -3
  35. package/dist/cypress/chunk-TYBGAHYH.js +69 -0
  36. package/dist/cypress/chunk-TYBGAHYH.js.map +7 -0
  37. package/dist/cypress/index.d.ts.map +1 -1
  38. package/dist/cypress/index.js +14 -4
  39. package/dist/cypress/index.js.map +2 -2
  40. package/dist/cypress/task.d.ts +4 -2
  41. package/dist/cypress/task.d.ts.map +1 -1
  42. package/dist/cypress/task.js +25 -6
  43. package/dist/cypress/task.js.map +4 -4
  44. package/dist/e2e/wrapper.d.ts +1 -1
  45. package/dist/e2e/wrapper.d.ts.map +1 -1
  46. package/dist/environment/index.d.ts +2 -1
  47. package/dist/environment/index.d.ts.map +1 -1
  48. package/dist/isomorphic/parseOnly.d.ts +15 -0
  49. package/dist/isomorphic/parseOnly.d.ts.map +1 -0
  50. package/dist/isomorphic/parseSkip.d.ts +28 -0
  51. package/dist/isomorphic/parseSkip.d.ts.map +1 -0
  52. package/dist/isomorphic/types.d.ts +11 -0
  53. package/dist/isomorphic/types.d.ts.map +1 -1
  54. package/dist/network/createExtendsReportSnapRequest.d.ts +4 -0
  55. package/dist/network/createExtendsReportSnapRequest.d.ts.map +1 -0
  56. package/dist/network/findBaselineReport.d.ts +5 -0
  57. package/dist/network/findBaselineReport.d.ts.map +1 -0
  58. package/dist/network/prepareSnapRequests.d.ts +9 -1
  59. package/dist/network/prepareSnapRequests.d.ts.map +1 -1
  60. package/dist/playwright/index.d.ts.map +1 -1
  61. package/dist/playwright/index.js +59 -3
  62. package/dist/playwright/index.js.map +3 -3
  63. package/dist/storybook/browser/register.d.ts +2 -1
  64. package/dist/storybook/browser/register.d.ts.map +1 -1
  65. package/dist/storybook/browser/register.js +5 -1
  66. package/dist/storybook/browser/register.js.map +2 -2
  67. package/dist/storybook/index.d.ts +9 -1
  68. package/dist/storybook/index.d.ts.map +1 -1
  69. package/dist/storybook/index.js +134 -42
  70. package/dist/storybook/index.js.map +4 -4
  71. package/dist/storybook/isomorphic/types.d.ts +4 -0
  72. package/dist/storybook/isomorphic/types.d.ts.map +1 -1
  73. package/dist/storybook/resolveStoryFileItems.d.ts +21 -0
  74. package/dist/storybook/resolveStoryFileItems.d.ts.map +1 -0
  75. package/package.json +7 -3
  76. package/dist/cli/cancelJob-Y4WJCCU6.js +0 -10
  77. package/dist/cli/chunk-P4EXA4AX.js.map +0 -7
  78. package/dist/cli/createAsyncComparison-CQLGQXY2.js +0 -10
  79. package/dist/cli/package-4NRNRUE3.js +0 -7
  80. package/dist/cli/prepareSnapRequests-2LHSGFZV.js.map +0 -7
  81. package/dist/cli/startJob-JAO5FUA2.js +0 -10
  82. package/dist/cli/wrapper-7RE2N7Y3.js.map +0 -7
  83. package/dist/cypress/chunk-RKK2MPML.js +0 -20
  84. package/dist/cypress/chunk-RKK2MPML.js.map +0 -7
  85. /package/dist/cli/{cancelJob-Y4WJCCU6.js.map → cancelJob-PHMDAIJB.js.map} +0 -0
  86. /package/dist/cli/{chunk-CVX5DVCT.js.map → chunk-AJQL27KK.js.map} +0 -0
  87. /package/dist/cli/{chunk-J2EA5OBW.js.map → chunk-JIRDD3RO.js.map} +0 -0
  88. /package/dist/cli/{chunk-R6YURZXU.js.map → chunk-JJOM7NVS.js.map} +0 -0
  89. /package/dist/cli/{chunk-BK32666K.js.map → chunk-V2ULNFYX.js.map} +0 -0
  90. /package/dist/cli/{chunk-BESQLM5F.js.map → chunk-WUYZIKHR.js.map} +0 -0
  91. /package/dist/cli/{createAsyncComparison-CQLGQXY2.js.map → createAsyncComparison-D525PJCA.js.map} +0 -0
  92. /package/dist/cli/{createAsyncReport-4ZD53TJC.js.map → createAsyncReport-QFCSVMAO.js.map} +0 -0
  93. /package/dist/cli/{getFlakes-6ZGTWZTM.js.map → getFlakes-M2LSXSTW.js.map} +0 -0
  94. /package/dist/cli/{package-4NRNRUE3.js.map → package-3UUMFV7J.js.map} +0 -0
  95. /package/dist/cli/{startJob-JAO5FUA2.js.map → startJob-JAVHOIR6.js.map} +0 -0
@@ -0,0 +1,10 @@
1
+ import {
2
+ cancelJob
3
+ } from "./chunk-V2ULNFYX.js";
4
+ import "./chunk-JJOM7NVS.js";
5
+ import "./chunk-WUYZIKHR.js";
6
+ import "./chunk-KTUIEOPK.js";
7
+ export {
8
+ cancelJob as default
9
+ };
10
+ //# sourceMappingURL=cancelJob-PHMDAIJB.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  makeHappoAPIRequest
3
- } from "./chunk-R6YURZXU.js";
3
+ } from "./chunk-JJOM7NVS.js";
4
4
 
5
5
  // src/network/startJob.ts
6
6
  function assertResultIsStartJobResult(result) {
@@ -36,4 +36,4 @@ async function startJob(config, { beforeSha, afterSha, link, message }, logger)
36
36
  export {
37
37
  startJob
38
38
  };
39
- //# sourceMappingURL=chunk-CVX5DVCT.js.map
39
+ //# sourceMappingURL=chunk-AJQL27KK.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  makeHappoAPIRequest
3
- } from "./chunk-R6YURZXU.js";
3
+ } from "./chunk-JJOM7NVS.js";
4
4
 
5
5
  // src/network/createAsyncComparison.ts
6
6
  function assertResultIsCreateAsyncComparisonResult(result) {
@@ -60,4 +60,4 @@ async function createAsyncComparison(config, {
60
60
  export {
61
61
  createAsyncComparison
62
62
  };
63
- //# sourceMappingURL=chunk-J2EA5OBW.js.map
63
+ //# sourceMappingURL=chunk-JIRDD3RO.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  fetchWithRetry
3
- } from "./chunk-BESQLM5F.js";
3
+ } from "./chunk-WUYZIKHR.js";
4
4
 
5
5
  // src/network/getSignedToken.ts
6
6
  import { SignJWT } from "jose";
@@ -81,4 +81,4 @@ async function makeHappoAPIRequest({ url, path, method = "GET", formData, body }
81
81
  export {
82
82
  makeHappoAPIRequest
83
83
  };
84
- //# sourceMappingURL=chunk-R6YURZXU.js.map
84
+ //# sourceMappingURL=chunk-JJOM7NVS.js.map
@@ -1,7 +1,7 @@
1
1
  // package.json
2
2
  var package_default = {
3
3
  name: "happo",
4
- version: "6.9.0",
4
+ version: "6.10.0",
5
5
  description: "Catch unexpected visual and accessibility changes and UI bugs",
6
6
  license: "MIT",
7
7
  repository: {
@@ -76,7 +76,10 @@ var package_default = {
76
76
  "test:playwright": "pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.playwright.config.ts e2e -- playwright test",
77
77
  "test:playwright:nonce": "pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.playwright-nonce.config.ts --nonce $HAPPO_NONCE e2e -- playwright test && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.playwright-nonce.config.ts --nonce $HAPPO_NONCE finalize",
78
78
  "test:storybook": "pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.storybook.config.ts",
79
+ "test:storybook:skipped": 'pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.storybook.config.ts --project storybook-skipped --skip "$(node ./scripts/getSkip.ts)"',
80
+ "test:storybook:only": 'pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.storybook.config.ts --project storybook-only --only "$(node ./scripts/getOnly.ts)"',
79
81
  "test:pages": "pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.pages.config.ts",
82
+ release: "set -a && source .env && set +a && release-with-ease",
80
83
  tsc: "tsc --build tsconfig.json"
81
84
  },
82
85
  browserslist: {
@@ -118,13 +121,13 @@ var package_default = {
118
121
  "@types/react": "^19.2.0",
119
122
  "@types/react-dom": "^19.2.0",
120
123
  cypress: "^15.5.0",
121
- esbuild: "^0.27.0",
124
+ esbuild: "^0.28.0",
122
125
  eslint: "^10.0.2",
123
126
  "eslint-config-prettier": "^10.1.8",
124
127
  "eslint-plugin-compat": "^7.0.1",
125
128
  "eslint-plugin-depend": "^1.4.0",
126
129
  "eslint-plugin-simple-import-sort": "^12.1.1",
127
- "eslint-plugin-unicorn": "^63.0.0",
130
+ "eslint-plugin-unicorn": "^64.0.0",
128
131
  jiti: "^2.6.1",
129
132
  jsdom: "^29.0.0",
130
133
  multiparty: "^4.2.3",
@@ -134,6 +137,7 @@ var package_default = {
134
137
  "react-error-boundary": "^6.0.0",
135
138
  storybook: "^10.0.1",
136
139
  typescript: "^6.0.2",
140
+ "release-with-ease": "^2.1.0",
137
141
  "typescript-eslint": "^8.57.2"
138
142
  },
139
143
  dependencies: {
@@ -184,4 +188,4 @@ var package_default = {
184
188
  export {
185
189
  package_default
186
190
  };
187
- //# sourceMappingURL=chunk-P4EXA4AX.js.map
191
+ //# sourceMappingURL=chunk-KTUIEOPK.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../package.json"],
4
+ "sourcesContent": ["{\n \"name\": \"happo\",\n \"version\": \"6.10.0\",\n \"description\": \"Catch unexpected visual and accessibility changes and UI bugs\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/happo/happo.git\"\n },\n \"bugs\": \"https://github.com/happo/happo/issues\",\n \"homepage\": \"https://happo.io\",\n \"bin\": {\n \"happo\": \"dist/cli/main.js\"\n },\n \"type\": \"module\",\n \"main\": \"./dist/config/index.js\",\n \"types\": \"./dist/config/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/config/index.d.ts\",\n \"default\": \"./dist/config/index.js\"\n },\n \"./cypress\": {\n \"types\": \"./dist/cypress/index.d.ts\",\n \"default\": \"./dist/cypress/index.js\"\n },\n \"./cypress/task\": {\n \"types\": \"./dist/cypress/task.d.ts\",\n \"default\": \"./dist/cypress/task.js\"\n },\n \"./playwright\": {\n \"types\": \"./dist/playwright/index.d.ts\",\n \"default\": \"./dist/playwright/index.js\"\n },\n \"./custom\": {\n \"types\": \"./dist/custom/index.d.ts\",\n \"default\": \"./dist/custom/index.js\"\n },\n \"./storybook/addon\": {\n \"types\": \"./dist/storybook/browser/addon.d.ts\",\n \"default\": \"./dist/storybook/browser/addon.js\"\n },\n \"./storybook/decorator\": {\n \"types\": \"./dist/storybook/browser/decorator.d.ts\",\n \"default\": \"./dist/storybook/browser/decorator.js\"\n },\n \"./storybook/preset\": {\n \"types\": \"./dist/storybook/preset.d.ts\",\n \"default\": \"./dist/storybook/preset.js\"\n },\n \"./storybook/register\": {\n \"types\": \"./dist/storybook/browser/register.d.ts\",\n \"default\": \"./dist/storybook/browser/register.js\"\n }\n },\n \"files\": [\n \"dist\",\n \"preset.js\"\n ],\n \"scripts\": {\n \"all\": \"node ./scripts/allchecks.ts\",\n \"build\": \"pnpm build:types && pnpm build:dist\",\n \"build:custom\": \"esbuild src/custom/__happo__/index.ts --bundle --format=iife --global-name=happoCustom --outfile=tmp/happo-custom/bundle.js --platform=browser --target=esnext\",\n \"build:dist\": \"node ./scripts/build.ts\",\n \"build:types\": \"pnpm tsc --pretty\",\n \"build:watch\": \"tsc --build --watch\",\n \"clean\": \"node ./scripts/clean.ts\",\n \"lint\": \"eslint .\",\n \"prepublishOnly\": \"pnpm clean && pnpm build\",\n \"storybook:dev\": \"storybook dev --config-dir src/storybook/__tests__/storybook-app -p ${PORT:-6007}\",\n \"test\": \"node --env-file-if-exists=.env.local ./scripts/test.ts\",\n \"test:custom\": \"pnpm build:dist && pnpm build:custom && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.custom.config.ts\",\n \"test:cypress\": \"pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.cypress.config.ts e2e -- cypress run -C src/cypress/__cypress__/cypress.config.ts\",\n \"test:cypress:open\": \"cypress open -C src/cypress/__cypress__/cypress.config.ts\",\n \"test:playwright\": \"pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.playwright.config.ts e2e -- playwright test\",\n \"test:playwright:nonce\": \"pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.playwright-nonce.config.ts --nonce $HAPPO_NONCE e2e -- playwright test && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.playwright-nonce.config.ts --nonce $HAPPO_NONCE finalize\",\n \"test:storybook\": \"pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.storybook.config.ts\",\n \"test:storybook:skipped\": \"pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.storybook.config.ts --project storybook-skipped --skip \\\"$(node ./scripts/getSkip.ts)\\\"\",\n \"test:storybook:only\": \"pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.storybook.config.ts --project storybook-only --only \\\"$(node ./scripts/getOnly.ts)\\\"\",\n \"test:pages\": \"pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.pages.config.ts\",\n \"release\": \"set -a && source .env && set +a && release-with-ease\",\n \"tsc\": \"tsc --build tsconfig.json\"\n },\n \"browserslist\": {\n \"node\": [\n \"node 22\"\n ],\n \"browser\": [\n \"last 2 Chrome major versions\",\n \"last 2 Firefox major versions\",\n \"last 2 Safari major versions\",\n \"last 2 Edge major versions\"\n ],\n \"isomorphic\": [\n \"node 22\",\n \"last 2 Chrome major versions\",\n \"last 2 Firefox major versions\",\n \"last 2 Safari major versions\",\n \"last 2 Edge major versions\"\n ]\n },\n \"prettier\": {\n \"printWidth\": 85,\n \"singleQuote\": true,\n \"trailingComma\": \"all\",\n \"arrowParens\": \"always\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.55.1\",\n \"@reporters/github\": \"^1.11.0\",\n \"@storybook/builder-vite\": \"^10.0.1\",\n \"@storybook/react-vite\": \"^10.0.1\",\n \"@types/async-retry\": \"^1.4.9\",\n \"@types/base64-stream\": \"^1.0.5\",\n \"@types/jsdom\": \"^28.0.0\",\n \"@types/mime-types\": \"^3.0.1\",\n \"@types/multiparty\": \"^4.2.1\",\n \"@types/node\": \"^24.9.1\",\n \"@types/react\": \"^19.2.0\",\n \"@types/react-dom\": \"^19.2.0\",\n \"cypress\": \"^15.5.0\",\n \"esbuild\": \"^0.28.0\",\n \"eslint\": \"^10.0.2\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"eslint-plugin-compat\": \"^7.0.1\",\n \"eslint-plugin-depend\": \"^1.4.0\",\n \"eslint-plugin-simple-import-sort\": \"^12.1.1\",\n \"eslint-plugin-unicorn\": \"^64.0.0\",\n \"jiti\": \"^2.6.1\",\n \"jsdom\": \"^29.0.0\",\n \"multiparty\": \"^4.2.3\",\n \"prettier\": \"^3.6.2\",\n \"react\": \"^19.2.0\",\n \"react-dom\": \"^19.2.0\",\n \"react-error-boundary\": \"^6.0.0\",\n \"storybook\": \"^10.0.1\",\n \"typescript\": \"^6.0.2\",\n \"release-with-ease\": \"^2.1.0\",\n \"typescript-eslint\": \"^8.57.2\"\n },\n \"dependencies\": {\n \"async-retry\": \"^1.3.3\",\n \"base64-stream\": \"^1.0.0\",\n \"empathic\": \"^2.0.0\",\n \"fflate\": \"^0.8.2\",\n \"jose\": \"^6.1.0\",\n \"limit-concur\": \"^4.0.0\",\n \"mime-types\": \"^3.0.1\",\n \"srcset\": \"^5.0.2\"\n },\n \"storybook\": {\n \"displayName\": \"Happo\",\n \"icon\": \"https://happo.io/static/happo-hippo.png\",\n \"supportedFrameworks\": [\n \"angular\",\n \"ember\",\n \"html\",\n \"preact\",\n \"react\",\n \"react-native\",\n \"svelte\",\n \"vue\",\n \"web-components\"\n ],\n \"unsupportedFrameworks\": []\n },\n \"keywords\": [\n \"storybook-addon\",\n \"accessibility\",\n \"cypress\",\n \"playwright\",\n \"regression\",\n \"storybook\",\n \"test\",\n \"testing\",\n \"ui\",\n \"visual-regression\",\n \"visual\",\n \"vrt\"\n ],\n \"engines\": {\n \"node\": \"^22.18.0 || ^23.6.0 || >=24.0.0\"\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,44 @@
1
+ // src/isomorphic/parseSkip.ts
2
+ function isSkipItem(item) {
3
+ if (typeof item !== "object" || item === null) return false;
4
+ const record = item;
5
+ const hasComponent = typeof record["component"] === "string";
6
+ const hasStoryFile = typeof record["storyFile"] === "string";
7
+ if (hasComponent && hasStoryFile) return false;
8
+ if (hasStoryFile) return record["variant"] === void 0;
9
+ if (hasComponent) return record["variant"] === void 0 || typeof record["variant"] === "string";
10
+ return false;
11
+ }
12
+ function validateSkip(json) {
13
+ const parsed = JSON.parse(json);
14
+ if (!Array.isArray(parsed) || !parsed.every(isSkipItem)) {
15
+ throw new TypeError(
16
+ "--skip must be a JSON array of {component, variant?} or {storyFile} objects"
17
+ );
18
+ }
19
+ return parsed;
20
+ }
21
+ function toSkipSet(items) {
22
+ const componentOnly = /* @__PURE__ */ new Set();
23
+ const componentVariant = /* @__PURE__ */ new Set();
24
+ for (const item of items) {
25
+ if (!("component" in item)) continue;
26
+ const { component, variant } = item;
27
+ if (variant === void 0) {
28
+ componentOnly.add(component);
29
+ } else {
30
+ componentVariant.add(`${component}\0${variant}`);
31
+ }
32
+ }
33
+ return [componentOnly, componentVariant];
34
+ }
35
+ function isInSkipSet([componentOnly, componentVariant], component, variant) {
36
+ return componentOnly.has(component) || componentVariant.has(`${component}\0${variant}`);
37
+ }
38
+
39
+ export {
40
+ validateSkip,
41
+ toSkipSet,
42
+ isInSkipSet
43
+ };
44
+ //# sourceMappingURL=chunk-ML3Z5Z22.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/isomorphic/parseSkip.ts"],
4
+ "sourcesContent": ["import type { SkipItem } from './types.ts';\n\n/**\n * A pair of Sets used for O(1) skip lookups.\n * - [0]: component-only skips (match all variants of the component)\n * - [1]: component+variant skips (match a specific variant, keyed as \"component\\0variant\")\n */\nexport type SkipSet = readonly [componentOnly: Set<string>, componentVariant: Set<string>];\n\nfunction isSkipItem(item: unknown): item is SkipItem {\n if (typeof item !== 'object' || item === null) return false;\n const record = item as Record<string, unknown>;\n const hasComponent = typeof record['component'] === 'string';\n const hasStoryFile = typeof record['storyFile'] === 'string';\n if (hasComponent && hasStoryFile) return false;\n if (hasStoryFile) return record['variant'] === undefined;\n if (hasComponent) return record['variant'] === undefined || typeof record['variant'] === 'string';\n return false;\n}\n\n/**\n * Parses and validates a JSON string, returning an array of SkipItems.\n * Throws a TypeError if the JSON is invalid or not an array of SkipItems.\n */\nexport function validateSkip(json: string): Array<SkipItem> {\n const parsed: unknown = JSON.parse(json);\n if (!Array.isArray(parsed) || !parsed.every(isSkipItem)) {\n throw new TypeError(\n '--skip must be a JSON array of {component, variant?} or {storyFile} objects',\n );\n }\n return parsed;\n}\n\n/**\n * Parses a JSON string into an array of SkipItems. Returns an empty array on\n * any parse error or if the value is not a valid array of SkipItems.\n */\nexport function parseSkip(json?: string): Array<SkipItem> {\n if (!json) return [];\n try {\n return validateSkip(json);\n } catch {\n return [];\n }\n}\n\n/**\n * Converts an array of SkipItems into a SkipSet for efficient lookups.\n * Items with a `storyFile` key (unresolved) are silently ignored.\n */\nexport function toSkipSet(items: Array<SkipItem>): SkipSet {\n const componentOnly = new Set<string>();\n const componentVariant = new Set<string>();\n for (const item of items) {\n if (!('component' in item)) continue;\n const { component, variant } = item;\n if (variant === undefined) {\n componentOnly.add(component);\n } else {\n componentVariant.add(`${component}\\0${variant}`);\n }\n }\n return [componentOnly, componentVariant];\n}\n\n/**\n * Returns true if the given component+variant should be skipped according to\n * the SkipSet.\n */\nexport function isInSkipSet(\n [componentOnly, componentVariant]: SkipSet,\n component: string,\n variant: string,\n): boolean {\n return componentOnly.has(component) || componentVariant.has(`${component}\\0${variant}`);\n}\n"],
5
+ "mappings": ";AASA,SAAS,WAAW,MAAiC;AACnD,MAAI,OAAO,SAAS,YAAY,SAAS,KAAM,QAAO;AACtD,QAAM,SAAS;AACf,QAAM,eAAe,OAAO,OAAO,WAAW,MAAM;AACpD,QAAM,eAAe,OAAO,OAAO,WAAW,MAAM;AACpD,MAAI,gBAAgB,aAAc,QAAO;AACzC,MAAI,aAAc,QAAO,OAAO,SAAS,MAAM;AAC/C,MAAI,aAAc,QAAO,OAAO,SAAS,MAAM,UAAa,OAAO,OAAO,SAAS,MAAM;AACzF,SAAO;AACT;AAMO,SAAS,aAAa,MAA+B;AAC1D,QAAM,SAAkB,KAAK,MAAM,IAAI;AACvC,MAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,CAAC,OAAO,MAAM,UAAU,GAAG;AACvD,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAmBO,SAAS,UAAU,OAAiC;AACzD,QAAM,gBAAgB,oBAAI,IAAY;AACtC,QAAM,mBAAmB,oBAAI,IAAY;AACzC,aAAW,QAAQ,OAAO;AACxB,QAAI,EAAE,eAAe,MAAO;AAC5B,UAAM,EAAE,WAAW,QAAQ,IAAI;AAC/B,QAAI,YAAY,QAAW;AACzB,oBAAc,IAAI,SAAS;AAAA,IAC7B,OAAO;AACL,uBAAiB,IAAI,GAAG,SAAS,KAAK,OAAO,EAAE;AAAA,IACjD;AAAA,EACF;AACA,SAAO,CAAC,eAAe,gBAAgB;AACzC;AAMO,SAAS,YACd,CAAC,eAAe,gBAAgB,GAChC,WACA,SACS;AACT,SAAO,cAAc,IAAI,SAAS,KAAK,iBAAiB,IAAI,GAAG,SAAS,KAAK,OAAO,EAAE;AACxF;",
6
+ "names": []
7
+ }
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  makeHappoAPIRequest
3
- } from "./chunk-R6YURZXU.js";
3
+ } from "./chunk-JJOM7NVS.js";
4
4
  import {
5
5
  ErrorWithStatusCode
6
- } from "./chunk-BESQLM5F.js";
6
+ } from "./chunk-WUYZIKHR.js";
7
7
 
8
8
  // src/network/cancelJob.ts
9
9
  async function cancelJob(status, message, config, { beforeSha, afterSha, link }, logger) {
@@ -43,4 +43,4 @@ async function cancelJob(status, message, config, { beforeSha, afterSha, link },
43
43
  export {
44
44
  cancelJob
45
45
  };
46
- //# sourceMappingURL=chunk-BK32666K.js.map
46
+ //# sourceMappingURL=chunk-V2ULNFYX.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  package_default
3
- } from "./chunk-P4EXA4AX.js";
3
+ } from "./chunk-KTUIEOPK.js";
4
4
 
5
5
  // src/network/fetchWithRetry.ts
6
6
  import asyncRetry from "async-retry";
@@ -95,4 +95,4 @@ export {
95
95
  ErrorWithStatusCode,
96
96
  fetchWithRetry
97
97
  };
98
- //# sourceMappingURL=chunk-BESQLM5F.js.map
98
+ //# sourceMappingURL=chunk-WUYZIKHR.js.map
@@ -0,0 +1,10 @@
1
+ import {
2
+ createAsyncComparison
3
+ } from "./chunk-JIRDD3RO.js";
4
+ import "./chunk-JJOM7NVS.js";
5
+ import "./chunk-WUYZIKHR.js";
6
+ import "./chunk-KTUIEOPK.js";
7
+ export {
8
+ createAsyncComparison as default
9
+ };
10
+ //# sourceMappingURL=createAsyncComparison-D525PJCA.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  makeHappoAPIRequest
3
- } from "./chunk-R6YURZXU.js";
4
- import "./chunk-BESQLM5F.js";
5
- import "./chunk-P4EXA4AX.js";
3
+ } from "./chunk-JJOM7NVS.js";
4
+ import "./chunk-WUYZIKHR.js";
5
+ import "./chunk-KTUIEOPK.js";
6
6
 
7
7
  // src/network/createAsyncReport.ts
8
8
  function assertResultIsCreateAsyncReportResult(result) {
@@ -38,4 +38,4 @@ async function createAsyncReport(snapRequestIds, config, { afterSha, link, messa
38
38
  export {
39
39
  createAsyncReport as default
40
40
  };
41
- //# sourceMappingURL=createAsyncReport-4ZD53TJC.js.map
41
+ //# sourceMappingURL=createAsyncReport-QFCSVMAO.js.map
@@ -0,0 +1,32 @@
1
+ import {
2
+ makeHappoAPIRequest
3
+ } from "./chunk-JJOM7NVS.js";
4
+ import "./chunk-WUYZIKHR.js";
5
+ import "./chunk-KTUIEOPK.js";
6
+
7
+ // src/network/createExtendsReportSnapRequest.ts
8
+ async function createExtendsReportSnapRequest(extendsSha, skip, config) {
9
+ const result = await makeHappoAPIRequest(
10
+ {
11
+ path: "/api/snap-requests/extends-report",
12
+ method: "POST",
13
+ body: {
14
+ extendedSnaps: skip.filter(
15
+ (item) => "component" in item
16
+ ),
17
+ extendsSha,
18
+ project: config.project
19
+ }
20
+ },
21
+ config,
22
+ { retryCount: 3 }
23
+ );
24
+ if (!result || !("requestId" in result) || typeof result.requestId !== "number") {
25
+ throw new Error(`Invalid response from extends-report snap request API: ${JSON.stringify(result)}`);
26
+ }
27
+ return result.requestId;
28
+ }
29
+ export {
30
+ createExtendsReportSnapRequest as default
31
+ };
32
+ //# sourceMappingURL=createExtendsReportSnapRequest-X2DLPLP5.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/network/createExtendsReportSnapRequest.ts"],
4
+ "sourcesContent": ["import type { ConfigWithDefaults } from '../config/index.ts';\nimport type { SkipItem } from '../isomorphic/types.ts';\nimport makeHappoAPIRequest from './makeHappoAPIRequest.ts';\n\nexport default async function createExtendsReportSnapRequest(\n extendsSha: string,\n skip: Array<SkipItem>,\n config: ConfigWithDefaults,\n): Promise<number> {\n const result = await makeHappoAPIRequest(\n {\n path: '/api/snap-requests/extends-report',\n method: 'POST',\n body: {\n extendedSnaps: skip.filter(\n (item): item is { component: string; variant?: string } => 'component' in item,\n ),\n extendsSha,\n project: config.project,\n },\n },\n config,\n { retryCount: 3 },\n );\n\n if (!result || !('requestId' in result) || typeof result.requestId !== 'number') {\n throw new Error(`Invalid response from extends-report snap request API: ${JSON.stringify(result)}`);\n }\n\n return result.requestId;\n}\n"],
5
+ "mappings": ";;;;;;;AAIA,eAAO,+BACL,YACA,MACA,QACiB;AACjB,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,MACE,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,eAAe,KAAK;AAAA,UAClB,CAAC,SAA0D,eAAe;AAAA,QAC5E;AAAA,QACA;AAAA,QACA,SAAS,OAAO;AAAA,MAClB;AAAA,IACF;AAAA,IACA;AAAA,IACA,EAAE,YAAY,EAAE;AAAA,EAClB;AAEA,MAAI,CAAC,UAAU,EAAE,eAAe,WAAW,OAAO,OAAO,cAAc,UAAU;AAC/E,UAAM,IAAI,MAAM,0DAA0D,KAAK,UAAU,MAAM,CAAC,EAAE;AAAA,EACpG;AAEA,SAAO,OAAO;AAChB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,36 @@
1
+ import {
2
+ makeHappoAPIRequest
3
+ } from "./chunk-JJOM7NVS.js";
4
+ import "./chunk-WUYZIKHR.js";
5
+ import "./chunk-KTUIEOPK.js";
6
+
7
+ // src/network/findBaselineReport.ts
8
+ async function findBaselineReport(environment, config, logger) {
9
+ const shas = [environment.beforeSha, ...environment.fallbackShas ?? []].filter(Boolean);
10
+ try {
11
+ const result = await makeHappoAPIRequest(
12
+ {
13
+ path: `/api/reports/${environment.afterSha}/find-baseline`,
14
+ method: "POST",
15
+ body: {
16
+ project: config.project,
17
+ shas
18
+ }
19
+ },
20
+ config,
21
+ { retryCount: 2 },
22
+ logger
23
+ );
24
+ if (result && "sha" in result && typeof result.sha === "string") {
25
+ return result.sha;
26
+ }
27
+ throw new Error(`Unexpected response from find-baseline API: ${JSON.stringify(result)}`);
28
+ } catch (e) {
29
+ logger.error("[HAPPO] Failed to find baseline report:", e);
30
+ }
31
+ return void 0;
32
+ }
33
+ export {
34
+ findBaselineReport as default
35
+ };
36
+ //# sourceMappingURL=findBaselineReport-N4AUOVXP.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/network/findBaselineReport.ts"],
4
+ "sourcesContent": ["import type { ConfigWithDefaults } from '../config/index.ts';\nimport type { EnvironmentResult } from '../environment/index.ts';\nimport type { Logger } from '../isomorphic/types.ts';\nimport makeHappoAPIRequest from './makeHappoAPIRequest.ts';\n\nexport default async function findBaselineReport(\n environment: EnvironmentResult,\n config: ConfigWithDefaults,\n logger: Logger,\n): Promise<string | undefined> {\n const shas = [environment.beforeSha, ...(environment.fallbackShas ?? [])].filter(Boolean);\n\n try {\n const result = await makeHappoAPIRequest(\n {\n path: `/api/reports/${environment.afterSha}/find-baseline`,\n method: 'POST',\n body: {\n project: config.project,\n shas,\n },\n },\n config,\n { retryCount: 2 },\n logger,\n );\n\n if (result && 'sha' in result && typeof result.sha === 'string') {\n return result.sha;\n }\n throw new Error(`Unexpected response from find-baseline API: ${JSON.stringify(result)}`);\n } catch (e) {\n logger.error('[HAPPO] Failed to find baseline report:', e);\n }\n\n return undefined;\n}\n"],
5
+ "mappings": ";;;;;;;AAKA,eAAO,mBACL,aACA,QACA,QAC6B;AAC7B,QAAM,OAAO,CAAC,YAAY,WAAW,GAAI,YAAY,gBAAgB,CAAC,CAAE,EAAE,OAAO,OAAO;AAExF,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,QACE,MAAM,gBAAgB,YAAY,QAAQ;AAAA,QAC1C,QAAQ;AAAA,QACR,MAAM;AAAA,UACJ,SAAS,OAAO;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,MACA,EAAE,YAAY,EAAE;AAAA,MAChB;AAAA,IACF;AAEA,QAAI,UAAU,SAAS,UAAU,OAAO,OAAO,QAAQ,UAAU;AAC/D,aAAO,OAAO;AAAA,IAChB;AACA,UAAM,IAAI,MAAM,+CAA+C,KAAK,UAAU,MAAM,CAAC,EAAE;AAAA,EACzF,SAAS,GAAG;AACV,WAAO,MAAM,2CAA2C,CAAC;AAAA,EAC3D;AAEA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  makeHappoAPIRequest
3
- } from "./chunk-R6YURZXU.js";
4
- import "./chunk-BESQLM5F.js";
5
- import "./chunk-P4EXA4AX.js";
3
+ } from "./chunk-JJOM7NVS.js";
4
+ import "./chunk-WUYZIKHR.js";
5
+ import "./chunk-KTUIEOPK.js";
6
6
 
7
7
  // src/network/getFlakes.ts
8
8
  function formatFlakeOutput(flakes) {
@@ -70,4 +70,4 @@ export {
70
70
  getFlakes as default,
71
71
  formatFlakeOutput
72
72
  };
73
- //# sourceMappingURL=getFlakes-6ZGTWZTM.js.map
73
+ //# sourceMappingURL=getFlakes-M2LSXSTW.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAwMrD,wBAAsB,IAAI,CACxB,OAAO,GAAE,KAAK,CAAC,MAAM,CAAgB,EACrC,MAAM,GAAE,MAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CA4Ff"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAsB,MAAM,wBAAwB,CAAC;AA2MzE,wBAAsB,IAAI,CACxB,OAAO,GAAE,KAAK,CAAC,MAAM,CAAgB,EACrC,MAAM,GAAE,MAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CA+Gf"}