happo 6.4.1 → 6.5.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 (44) hide show
  1. package/dist/cli/cancelJob-VXWND6VO.js +10 -0
  2. package/dist/cli/{chunk-XM2DXDSO.js → chunk-6TFMGRAI.js} +2 -2
  3. package/dist/cli/{chunk-JAUTKTZY.js → chunk-J36FZKJS.js} +2 -2
  4. package/dist/cli/{chunk-F4CUEMIS.js → chunk-LOWIGCXB.js} +3 -3
  5. package/dist/cli/{chunk-JQ5JKJGY.js → chunk-O45JRUNT.js} +2 -2
  6. package/dist/cli/{chunk-FZHTC4L5.js → chunk-W7MO2NTZ.js} +2 -2
  7. package/dist/cli/{chunk-FZHTC4L5.js.map → chunk-W7MO2NTZ.js.map} +1 -1
  8. package/dist/cli/{chunk-NAK4M3PS.js → chunk-XWK4EJNY.js} +2 -2
  9. package/dist/cli/createAsyncComparison-M6AWTU4R.js +10 -0
  10. package/dist/cli/{createAsyncReport-XKNIFAJB.js → createAsyncReport-UN2QKCNH.js} +4 -4
  11. package/dist/cli/{getFlakes-KRJUAUHV.js → getFlakes-2AOSNDXZ.js} +4 -4
  12. package/dist/cli/index.d.ts.map +1 -1
  13. package/dist/cli/main.js +147 -96
  14. package/dist/cli/main.js.map +3 -3
  15. package/dist/cli/package-ONTBKT57.js +7 -0
  16. package/dist/cli/parseOptions.d.ts +83 -0
  17. package/dist/cli/parseOptions.d.ts.map +1 -0
  18. package/dist/cli/{prepareSnapRequests-EXILTRP4.js → prepareSnapRequests-XD63A3BP.js} +4 -4
  19. package/dist/cli/startJob-33OSMHV4.js +10 -0
  20. package/dist/cli/{wrapper-KRUJ2F4T.js → wrapper-DENWASOQ.js} +7 -7
  21. package/dist/cypress/task.js +1 -1
  22. package/dist/cypress/task.js.map +1 -1
  23. package/dist/environment/index.d.ts +2 -16
  24. package/dist/environment/index.d.ts.map +1 -1
  25. package/dist/playwright/index.js +1 -1
  26. package/dist/playwright/index.js.map +1 -1
  27. package/package.json +1 -1
  28. package/dist/cli/cancelJob-ROJDWYPD.js +0 -10
  29. package/dist/cli/createAsyncComparison-37KSA6M4.js +0 -10
  30. package/dist/cli/package-S5HBIHRL.js +0 -7
  31. package/dist/cli/startJob-KT7MPC4H.js +0 -10
  32. /package/dist/cli/{cancelJob-ROJDWYPD.js.map → cancelJob-VXWND6VO.js.map} +0 -0
  33. /package/dist/cli/{chunk-XM2DXDSO.js.map → chunk-6TFMGRAI.js.map} +0 -0
  34. /package/dist/cli/{chunk-JAUTKTZY.js.map → chunk-J36FZKJS.js.map} +0 -0
  35. /package/dist/cli/{chunk-F4CUEMIS.js.map → chunk-LOWIGCXB.js.map} +0 -0
  36. /package/dist/cli/{chunk-JQ5JKJGY.js.map → chunk-O45JRUNT.js.map} +0 -0
  37. /package/dist/cli/{chunk-NAK4M3PS.js.map → chunk-XWK4EJNY.js.map} +0 -0
  38. /package/dist/cli/{createAsyncComparison-37KSA6M4.js.map → createAsyncComparison-M6AWTU4R.js.map} +0 -0
  39. /package/dist/cli/{createAsyncReport-XKNIFAJB.js.map → createAsyncReport-UN2QKCNH.js.map} +0 -0
  40. /package/dist/cli/{getFlakes-KRJUAUHV.js.map → getFlakes-2AOSNDXZ.js.map} +0 -0
  41. /package/dist/cli/{package-S5HBIHRL.js.map → package-ONTBKT57.js.map} +0 -0
  42. /package/dist/cli/{prepareSnapRequests-EXILTRP4.js.map → prepareSnapRequests-XD63A3BP.js.map} +0 -0
  43. /package/dist/cli/{startJob-KT7MPC4H.js.map → startJob-33OSMHV4.js.map} +0 -0
  44. /package/dist/cli/{wrapper-KRUJ2F4T.js.map → wrapper-DENWASOQ.js.map} +0 -0
@@ -0,0 +1,10 @@
1
+ import {
2
+ cancelJob
3
+ } from "./chunk-LOWIGCXB.js";
4
+ import "./chunk-6TFMGRAI.js";
5
+ import "./chunk-J36FZKJS.js";
6
+ import "./chunk-W7MO2NTZ.js";
7
+ export {
8
+ cancelJob as default
9
+ };
10
+ //# sourceMappingURL=cancelJob-VXWND6VO.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  fetchWithRetry
3
- } from "./chunk-JAUTKTZY.js";
3
+ } from "./chunk-J36FZKJS.js";
4
4
 
5
5
  // src/network/makeHappoAPIRequest.ts
6
6
  import { SignJWT } from "jose";
@@ -51,4 +51,4 @@ async function makeHappoAPIRequest({ url, path, method = "GET", formData, body }
51
51
  export {
52
52
  makeHappoAPIRequest
53
53
  };
54
- //# sourceMappingURL=chunk-XM2DXDSO.js.map
54
+ //# sourceMappingURL=chunk-6TFMGRAI.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  package_default
3
- } from "./chunk-FZHTC4L5.js";
3
+ } from "./chunk-W7MO2NTZ.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-JAUTKTZY.js.map
98
+ //# sourceMappingURL=chunk-J36FZKJS.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  makeHappoAPIRequest
3
- } from "./chunk-XM2DXDSO.js";
3
+ } from "./chunk-6TFMGRAI.js";
4
4
  import {
5
5
  ErrorWithStatusCode
6
- } from "./chunk-JAUTKTZY.js";
6
+ } from "./chunk-J36FZKJS.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-F4CUEMIS.js.map
46
+ //# sourceMappingURL=chunk-LOWIGCXB.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  makeHappoAPIRequest
3
- } from "./chunk-XM2DXDSO.js";
3
+ } from "./chunk-6TFMGRAI.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-JQ5JKJGY.js.map
39
+ //# sourceMappingURL=chunk-O45JRUNT.js.map
@@ -1,7 +1,7 @@
1
1
  // package.json
2
2
  var package_default = {
3
3
  name: "happo",
4
- version: "6.4.1",
4
+ version: "6.5.0",
5
5
  description: "Catch unexpected visual and accessibility changes and UI bugs",
6
6
  license: "MIT",
7
7
  repository: {
@@ -183,4 +183,4 @@ var package_default = {
183
183
  export {
184
184
  package_default
185
185
  };
186
- //# sourceMappingURL=chunk-FZHTC4L5.js.map
186
+ //# sourceMappingURL=chunk-W7MO2NTZ.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../package.json"],
4
- "sourcesContent": ["{\n \"name\": \"happo\",\n \"version\": \"6.4.1\",\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\": \"./scripts/build.ts\",\n \"build:types\": \"pnpm tsc --pretty\",\n \"build:watch\": \"tsc --build --watch\",\n \"clean\": \"rm -rf dist tmp/tsc tmp/happo-custom\",\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:storybook\": \"pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.storybook.config.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 \"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.27.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\": \"^63.0.0\",\n \"jiti\": \"^2.6.1\",\n \"jsdom\": \"^28.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\": \"^5.9.2\",\n \"typescript-eslint\": \"^8.56.1\"\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"],
4
+ "sourcesContent": ["{\n \"name\": \"happo\",\n \"version\": \"6.5.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\": \"./scripts/build.ts\",\n \"build:types\": \"pnpm tsc --pretty\",\n \"build:watch\": \"tsc --build --watch\",\n \"clean\": \"rm -rf dist tmp/tsc tmp/happo-custom\",\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:storybook\": \"pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.storybook.config.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 \"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.27.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\": \"^63.0.0\",\n \"jiti\": \"^2.6.1\",\n \"jsdom\": \"^28.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\": \"^5.9.2\",\n \"typescript-eslint\": \"^8.56.1\"\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
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  makeHappoAPIRequest
3
- } from "./chunk-XM2DXDSO.js";
3
+ } from "./chunk-6TFMGRAI.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-NAK4M3PS.js.map
63
+ //# sourceMappingURL=chunk-XWK4EJNY.js.map
@@ -0,0 +1,10 @@
1
+ import {
2
+ createAsyncComparison
3
+ } from "./chunk-XWK4EJNY.js";
4
+ import "./chunk-6TFMGRAI.js";
5
+ import "./chunk-J36FZKJS.js";
6
+ import "./chunk-W7MO2NTZ.js";
7
+ export {
8
+ createAsyncComparison as default
9
+ };
10
+ //# sourceMappingURL=createAsyncComparison-M6AWTU4R.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  makeHappoAPIRequest
3
- } from "./chunk-XM2DXDSO.js";
4
- import "./chunk-JAUTKTZY.js";
5
- import "./chunk-FZHTC4L5.js";
3
+ } from "./chunk-6TFMGRAI.js";
4
+ import "./chunk-J36FZKJS.js";
5
+ import "./chunk-W7MO2NTZ.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-XKNIFAJB.js.map
41
+ //# sourceMappingURL=createAsyncReport-UN2QKCNH.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  makeHappoAPIRequest
3
- } from "./chunk-XM2DXDSO.js";
4
- import "./chunk-JAUTKTZY.js";
5
- import "./chunk-FZHTC4L5.js";
3
+ } from "./chunk-6TFMGRAI.js";
4
+ import "./chunk-J36FZKJS.js";
5
+ import "./chunk-W7MO2NTZ.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-KRJUAUHV.js.map
73
+ //# sourceMappingURL=getFlakes-2AOSNDXZ.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;AAkOrD,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":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAqMrD,wBAAsB,IAAI,CACxB,OAAO,GAAE,KAAK,CAAC,MAAM,CAAgB,EACrC,MAAM,GAAE,MAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CA4Ff"}
package/dist/cli/main.js CHANGED
@@ -4,10 +4,10 @@ import {
4
4
  } from "./chunk-JTRP4JVC.js";
5
5
  import {
6
6
  fetchWithRetry
7
- } from "./chunk-JAUTKTZY.js";
7
+ } from "./chunk-J36FZKJS.js";
8
8
  import {
9
9
  package_default
10
- } from "./chunk-FZHTC4L5.js";
10
+ } from "./chunk-W7MO2NTZ.js";
11
11
 
12
12
  // src/cli/index.ts
13
13
  import path3 from "node:path";
@@ -814,6 +814,86 @@ async function resolveEnvironment(cliArgs, env = process.env) {
814
814
  return result;
815
815
  }
816
816
 
817
+ // src/cli/parseOptions.ts
818
+ var parseOptions = {
819
+ version: {
820
+ type: "boolean",
821
+ short: "v"
822
+ },
823
+ help: {
824
+ type: "boolean",
825
+ short: "h"
826
+ },
827
+ config: {
828
+ type: "string",
829
+ short: "c"
830
+ },
831
+ baseBranch: {
832
+ type: "string"
833
+ },
834
+ link: {
835
+ type: "string"
836
+ },
837
+ message: {
838
+ type: "string"
839
+ },
840
+ authorEmail: {
841
+ type: "string"
842
+ },
843
+ afterSha: {
844
+ type: "string"
845
+ },
846
+ beforeSha: {
847
+ type: "string"
848
+ },
849
+ beforeShaTagMatcher: {
850
+ type: "string"
851
+ },
852
+ fallbackShas: {
853
+ type: "string"
854
+ },
855
+ fallbackShasCount: {
856
+ type: "string"
857
+ },
858
+ notify: {
859
+ type: "string"
860
+ },
861
+ nonce: {
862
+ type: "string"
863
+ },
864
+ githubToken: {
865
+ type: "string"
866
+ },
867
+ // Flake command options
868
+ allProjects: {
869
+ type: "boolean"
870
+ },
871
+ format: {
872
+ type: "string"
873
+ },
874
+ project: {
875
+ type: "string"
876
+ },
877
+ limit: {
878
+ type: "string"
879
+ },
880
+ page: {
881
+ type: "string"
882
+ },
883
+ component: {
884
+ type: "string"
885
+ },
886
+ variant: {
887
+ type: "string"
888
+ },
889
+ target: {
890
+ type: "string"
891
+ },
892
+ sha: {
893
+ type: "string"
894
+ }
895
+ };
896
+
817
897
  // src/cli/telemetry.ts
818
898
  import crypto2 from "node:crypto";
819
899
  import fs2 from "node:fs";
@@ -1108,7 +1188,7 @@ function createReporter(opts = {}) {
1108
1188
 
1109
1189
  // src/cli/index.ts
1110
1190
  async function getVersion() {
1111
- const packageJson = await import("./package-S5HBIHRL.js");
1191
+ const packageJson = await import("./package-ONTBKT57.js");
1112
1192
  return packageJson.default.version;
1113
1193
  }
1114
1194
  function parseDashdashCommandParts(rawArgs) {
@@ -1118,92 +1198,63 @@ function parseDashdashCommandParts(rawArgs) {
1118
1198
  }
1119
1199
  return rawArgs.slice(dashdashIndex + 1);
1120
1200
  }
1121
- var fallbackOptions = {
1122
- allProjects: {
1123
- type: "boolean"
1124
- },
1125
- format: {
1126
- type: "string"
1127
- },
1128
- project: {
1129
- type: "string"
1130
- },
1131
- limit: {
1132
- type: "string"
1133
- },
1134
- page: {
1135
- type: "string"
1136
- },
1137
- component: {
1138
- type: "string"
1139
- },
1140
- variant: {
1141
- type: "string"
1142
- },
1143
- target: {
1144
- type: "string"
1145
- },
1146
- sha: {
1147
- type: "string"
1201
+ function levenshtein(a, b) {
1202
+ const n = b.length;
1203
+ const row = Array.from({ length: n + 1 }, (_, j) => j);
1204
+ for (let i = 1; i <= a.length; i++) {
1205
+ let prev = row[0];
1206
+ row[0] = i;
1207
+ for (let j = 1; j <= n; j++) {
1208
+ const temp = row[j];
1209
+ row[j] = a[i - 1] === b[j - 1] ? prev : 1 + Math.min(prev, temp, row[j - 1]);
1210
+ prev = temp;
1211
+ }
1148
1212
  }
1149
- };
1213
+ return row[n];
1214
+ }
1215
+ function findClosestOption(unknownName, knownNames) {
1216
+ let bestMatch;
1217
+ let bestDistance = Infinity;
1218
+ for (const known of knownNames) {
1219
+ const distance = levenshtein(unknownName, known);
1220
+ const threshold = Math.floor(Math.max(unknownName.length, known.length) / 3);
1221
+ if (distance <= threshold && distance < bestDistance) {
1222
+ bestDistance = distance;
1223
+ bestMatch = known;
1224
+ }
1225
+ }
1226
+ return bestMatch;
1227
+ }
1150
1228
  function parseRawArgs(rawArgs) {
1151
- const parsedArgs = parseArgs({
1152
- args: rawArgs,
1153
- options: {
1154
- version: {
1155
- type: "boolean",
1156
- short: "v"
1157
- },
1158
- help: {
1159
- type: "boolean",
1160
- short: "h"
1161
- },
1162
- config: {
1163
- type: "string",
1164
- short: "c"
1165
- },
1166
- baseBranch: {
1167
- type: "string"
1168
- },
1169
- link: {
1170
- type: "string"
1171
- },
1172
- message: {
1173
- type: "string"
1174
- },
1175
- authorEmail: {
1176
- type: "string"
1177
- },
1178
- afterSha: {
1179
- type: "string"
1180
- },
1181
- beforeSha: {
1182
- type: "string"
1183
- },
1184
- fallbackShas: {
1185
- type: "string"
1186
- },
1187
- fallbackShasCount: {
1188
- type: "string"
1189
- },
1190
- notify: {
1191
- type: "string"
1192
- },
1193
- nonce: {
1194
- type: "string"
1195
- },
1196
- githubToken: {
1197
- type: "string"
1198
- },
1199
- ...fallbackOptions
1200
- },
1201
- allowPositionals: true
1202
- });
1203
- return {
1204
- ...parsedArgs,
1205
- dashdashCommandParts: parseDashdashCommandParts(rawArgs)
1206
- };
1229
+ try {
1230
+ const parsedArgs = parseArgs({
1231
+ args: rawArgs,
1232
+ options: parseOptions,
1233
+ allowPositionals: true
1234
+ });
1235
+ return {
1236
+ ...parsedArgs,
1237
+ dashdashCommandParts: parseDashdashCommandParts(rawArgs)
1238
+ };
1239
+ } catch (error) {
1240
+ if (error instanceof Error && "code" in error && error.code === "ERR_PARSE_ARGS_UNKNOWN_OPTION") {
1241
+ const match = error.message.match(/^Unknown option '(--[^']+)'/);
1242
+ if (match && match[1]) {
1243
+ const unknownOption = match[1];
1244
+ const suggestion = findClosestOption(
1245
+ unknownOption.slice(2),
1246
+ Object.keys(parseOptions)
1247
+ );
1248
+ if (suggestion !== void 0) {
1249
+ throw new TypeError(
1250
+ `Unknown option: '${unknownOption}'. Did you mean '--${suggestion}'?`,
1251
+ { cause: error }
1252
+ );
1253
+ }
1254
+ }
1255
+ }
1256
+ throw error;
1257
+ }
1207
1258
  }
1208
1259
  var helpText = `Happo ${await getVersion()}
1209
1260
  Usage: happo [options]
@@ -1379,10 +1430,10 @@ async function main(rawArgs = process.argv, logger = console) {
1379
1430
  async function handleDefaultCommand(config, environment, logger) {
1380
1431
  logger.log("Running happo tests...");
1381
1432
  const [startJob, createAsyncComparison, createAsyncReport, prepareSnapRequests] = await Promise.all([
1382
- (await import("./startJob-KT7MPC4H.js")).default,
1383
- (await import("./createAsyncComparison-37KSA6M4.js")).default,
1384
- (await import("./createAsyncReport-XKNIFAJB.js")).default,
1385
- (await import("./prepareSnapRequests-EXILTRP4.js")).default
1433
+ (await import("./startJob-33OSMHV4.js")).default,
1434
+ (await import("./createAsyncComparison-M6AWTU4R.js")).default,
1435
+ (await import("./createAsyncReport-UN2QKCNH.js")).default,
1436
+ (await import("./prepareSnapRequests-XD63A3BP.js")).default
1386
1437
  ]);
1387
1438
  await startJob(config, environment, logger);
1388
1439
  try {
@@ -1415,7 +1466,7 @@ async function handleDefaultCommand(config, environment, logger) {
1415
1466
  } catch (e) {
1416
1467
  const message = e instanceof Error ? e.message : String(e);
1417
1468
  logger.error(`${config.integration.type} run failed: ${message}`, e);
1418
- const cancelJob = (await import("./cancelJob-ROJDWYPD.js")).default;
1469
+ const cancelJob = (await import("./cancelJob-VXWND6VO.js")).default;
1419
1470
  await cancelJob("failure", message, config, environment, logger);
1420
1471
  process.exitCode = 1;
1421
1472
  return;
@@ -1426,7 +1477,7 @@ async function handleFinalizeCommand(config, environment, logger) {
1426
1477
  logger.log("Config:", config);
1427
1478
  logger.log("Environment:", environment);
1428
1479
  try {
1429
- const finalizeAll = (await import("./wrapper-KRUJ2F4T.js")).finalizeAll;
1480
+ const finalizeAll = (await import("./wrapper-DENWASOQ.js")).finalizeAll;
1430
1481
  await finalizeAll({ happoConfig: config, environment, logger });
1431
1482
  } catch (e) {
1432
1483
  logger.error(e instanceof Error ? e.message : String(e), e);
@@ -1447,14 +1498,14 @@ async function handleFlakeCommand(config, {
1447
1498
  target,
1448
1499
  sha
1449
1500
  }, logger) {
1450
- if (format && (format !== "json" && format !== "human")) {
1501
+ if (format && format !== "json" && format !== "human") {
1451
1502
  logger.error(
1452
1503
  `Unsupported format: ${format}. Use --format=json for raw JSON output or --format=human for human-readable output.`
1453
1504
  );
1454
1505
  process.exitCode = 1;
1455
1506
  return;
1456
1507
  }
1457
- const { default: getFlakes, formatFlakeOutput } = await import("./getFlakes-KRJUAUHV.js");
1508
+ const { default: getFlakes, formatFlakeOutput } = await import("./getFlakes-2AOSNDXZ.js");
1458
1509
  const project = allProjects ? void 0 : projectOverride ?? config.project;
1459
1510
  const flakes = await getFlakes(
1460
1511
  {
@@ -1496,7 +1547,7 @@ async function handleE2ECommand(config, environment, dashdashCommandParts, confi
1496
1547
  logger.log("Config:", config);
1497
1548
  logger.log("Environment:", environment);
1498
1549
  logger.log("Dashdash command parts:", dashdashCommandParts);
1499
- const runWithWrapper = (await import("./wrapper-KRUJ2F4T.js")).default;
1550
+ const runWithWrapper = (await import("./wrapper-DENWASOQ.js")).default;
1500
1551
  const exitCode = await runWithWrapper(
1501
1552
  dashdashCommandParts,
1502
1553
  config,