From a4101341b46c9bb86f4dfd648cfef2c708d90fcd Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Wed, 1 Oct 2025 18:14:34 -0700 Subject: [PATCH 01/19] chore: Husky for auto lint fix and formatting --- .husky/install.mjs | 6 ++++++ .husky/pre-commit | 1 + biome.json | 2 +- package.json | 8 +++++++- 4 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 .husky/install.mjs create mode 100644 .husky/pre-commit diff --git a/.husky/install.mjs b/.husky/install.mjs new file mode 100644 index 00000000..3be5a5d0 --- /dev/null +++ b/.husky/install.mjs @@ -0,0 +1,6 @@ +// Skip Husky install in production and CI +if (process.env.NODE_ENV === 'production' || process.env.CI === 'true') { + process.exit(0); +} +const husky = (await import('husky')).default; +console.log(husky()); diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 00000000..5ee7abd8 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +pnpm exec lint-staged diff --git a/biome.json b/biome.json index dbe53541..b22f1665 100644 --- a/biome.json +++ b/biome.json @@ -7,7 +7,7 @@ }, "files": { "ignoreUnknown": false, - "includes": ["**", "!**/dist/**/*", "!**/coverage/**/*", "!**/.astro/**/*"] + "includes": ["**", "!**/dist/**/*", "!**/coverage/**/*", "!**/.astro/**/*", "!**/.husky/**/*"] }, "formatter": { "enabled": true, diff --git a/package.json b/package.json index 74db936a..a527d00a 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "@vitest/coverage-istanbul": "3.2.4", "buffer": "6.0.0", "git-cliff": "2.10.0", + "husky": "9.1.7", "parcel": "2.15.4", "process": "0.11.10", "typescript": "5.9.2", @@ -31,5 +32,10 @@ "node": "22.11.0", "pnpm": "9.14.2" }, - "packageManager": "pnpm@9.14.2" + "packageManager": "pnpm@9.14.2", + "lint-staged": { + "*": [ + "biome check . --write" + ] + } } From 3ab630ca20bcb6e714c02973ac45482cedeebcb1 Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Wed, 1 Oct 2025 20:13:21 -0700 Subject: [PATCH 02/19] Run install since I coded it on the plane --- pnpm-lock.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 790ff78d..6d6baefd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,6 +26,9 @@ importers: git-cliff: specifier: 2.10.0 version: 2.10.0 + husky: + specifier: 9.1.7 + version: 9.1.7 parcel: specifier: 2.15.4 version: 2.15.4(@swc/helpers@0.5.17) @@ -2907,6 +2910,11 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + i18next@23.16.8: resolution: {integrity: sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==} @@ -7681,6 +7689,8 @@ snapshots: human-signals@5.0.0: {} + husky@9.1.7: {} + i18next@23.16.8: dependencies: '@babel/runtime': 7.27.0 From c3e8281c7255d8ad9978c8344fdb07750c66905a Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Wed, 1 Oct 2025 20:45:51 -0700 Subject: [PATCH 03/19] lint-staged install --- package.json | 4 +- pnpm-lock.yaml | 247 +++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 212 insertions(+), 39 deletions(-) diff --git a/package.json b/package.json index a527d00a..80d3a00d 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "fmt:check": "biome format .", "lint": "biome lint . --write", "lint:check": "biome lint .", - "changelog": "pnpm -r run changelog" + "changelog": "pnpm -r run changelog", + "prepare": "node .husky/install.mjs" }, "devDependencies": { "@biomejs/biome": "2.2.2", @@ -23,6 +24,7 @@ "buffer": "6.0.0", "git-cliff": "2.10.0", "husky": "9.1.7", + "lint-staged": "16.2.3", "parcel": "2.15.4", "process": "0.11.10", "typescript": "5.9.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6d6baefd..e49275c9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,7 +19,7 @@ importers: version: 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))(typescript@5.9.2) '@vitest/coverage-istanbul': specifier: 3.2.4 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(lightningcss@1.30.1)(yaml@2.7.1)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(lightningcss@1.30.1)(yaml@2.8.1)) buffer: specifier: 6.0.0 version: 6.0.0 @@ -29,6 +29,9 @@ importers: husky: specifier: 9.1.7 version: 9.1.7 + lint-staged: + specifier: 16.2.3 + version: 16.2.3 parcel: specifier: 2.15.4 version: 2.15.4(@swc/helpers@0.5.17) @@ -40,7 +43,7 @@ importers: version: 5.9.2 vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(lightningcss@1.30.1)(yaml@2.7.1) + version: 3.2.4(@types/debug@4.1.12)(lightningcss@1.30.1)(yaml@2.8.1) packages/core: dependencies: @@ -109,13 +112,13 @@ importers: version: 0.9.4(typescript@5.8.3) '@astrojs/mdx': specifier: 4.3.0 - version: 4.3.0(astro@5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.7.1)) + version: 4.3.0(astro@5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.8.1)) '@astrojs/react': specifier: 4.3.0 - version: 4.3.0(@types/node@22.1.0)(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(yaml@2.7.1) + version: 4.3.0(@types/node@22.1.0)(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(yaml@2.8.1) '@astrojs/starlight': specifier: 0.34.3 - version: 0.34.3(astro@5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.7.1)) + version: 0.34.3(astro@5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.8.1)) '@czi-sds/components': specifier: 20.0.1 version: 20.0.1(yhvdhk7sonewaw25ryh4hrzn6m) @@ -151,7 +154,7 @@ importers: version: 19.1.3(@types/react@19.1.3) astro: specifier: 5.8.0 - version: 5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.7.1) + version: 5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.8.1) file-saver: specifier: 2.0.5 version: 2.0.5 @@ -2256,6 +2259,10 @@ packages: ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + ansi-escapes@7.1.1: + resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==} + engines: {node: '>=18'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -2426,6 +2433,14 @@ packages: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-truncate@5.1.0: + resolution: {integrity: sha512-7JDGG+4Zp0CsknDCedl0DYdaeOhc46QNpXi3NLQblkZpXXgA6LncLDUUyvrjSvZeF3VRQa+KiMGomazQrC1V8g==} + engines: {node: '>=20'} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -2455,6 +2470,9 @@ packages: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -2462,6 +2480,10 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} + commander@14.0.1: + resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} + engines: {node: '>=20'} + common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} @@ -2612,6 +2634,10 @@ packages: resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} engines: {node: '>=0.12'} + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -2755,6 +2781,10 @@ packages: resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} engines: {node: '>=18'} + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} + get-port@4.2.0: resolution: {integrity: sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==} engines: {node: '>=6'} @@ -2966,6 +2996,10 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + engines: {node: '>=18'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -3135,6 +3169,15 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + lint-staged@16.2.3: + resolution: {integrity: sha512-1OnJEESB9zZqsp61XHH2fvpS1es3hRCxMplF/AJUDa8Ho8VrscYDIuxGrj3m8KPXbcWZ8fT9XTMUhEQmOVKpKw==} + engines: {node: '>=20.17'} + hasBin: true + + listr2@9.0.4: + resolution: {integrity: sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ==} + engines: {node: '>=20.0.0'} + lmdb@2.8.5: resolution: {integrity: sha512-9bMdFfc80S+vSldBmG3HOuLVHnxRdNTlpzR6QDnzqCQtCzGUEAGTzBKYMeIM+I/sU4oZfgbcbS7X7F65/z/oxQ==} hasBin: true @@ -3142,6 +3185,10 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -3355,6 +3402,10 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -3380,6 +3431,10 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + nano-spawn@1.0.3: + resolution: {integrity: sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==} + engines: {node: '>=20.17'} + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -3455,6 +3510,10 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + oniguruma-parser@0.12.1: resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} @@ -3551,6 +3610,11 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + postcss-nested@6.2.0: resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} engines: {node: '>=12.0'} @@ -3739,6 +3803,10 @@ packages: engines: {node: '>= 0.4'} hasBin: true + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + restructure@3.0.2: resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==} @@ -3758,6 +3826,9 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + rollup@4.40.2: resolution: {integrity: sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -3831,6 +3902,10 @@ packages: engines: {node: '>=14.0.0', npm: '>=6.0.0'} hasBin: true + slice-ansi@7.1.2: + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} + engines: {node: '>=18'} + smol-toml@1.3.4: resolution: {integrity: sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==} engines: {node: '>= 18'} @@ -3859,6 +3934,10 @@ packages: stream-replace-string@2.0.0: resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==} + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -3871,6 +3950,10 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + string-width@8.1.0: + resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==} + engines: {node: '>=20'} + stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} @@ -4434,6 +4517,11 @@ packages: engines: {node: '>= 14'} hasBin: true + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -4577,12 +4665,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@4.3.0(astro@5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.7.1))': + '@astrojs/mdx@4.3.0(astro@5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.8.1))': dependencies: '@astrojs/markdown-remark': 6.3.2 '@mdx-js/mdx': 3.1.0(acorn@8.14.1) acorn: 8.14.1 - astro: 5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.7.1) + astro: 5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.8.1) es-module-lexer: 1.7.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -4604,15 +4692,15 @@ snapshots: dependencies: prismjs: 1.30.0 - '@astrojs/react@4.3.0(@types/node@22.1.0)(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(yaml@2.7.1)': + '@astrojs/react@4.3.0(@types/node@22.1.0)(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(yaml@2.8.1)': dependencies: '@types/react': 19.1.3 '@types/react-dom': 19.1.3(@types/react@19.1.3) - '@vitejs/plugin-react': 4.4.1(vite@6.3.5(@types/node@22.1.0)(lightningcss@1.30.1)(yaml@2.7.1)) + '@vitejs/plugin-react': 4.4.1(vite@6.3.5(@types/node@22.1.0)(lightningcss@1.30.1)(yaml@2.8.1)) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) ultrahtml: 1.6.0 - vite: 6.3.5(@types/node@22.1.0)(lightningcss@1.30.1)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.1.0)(lightningcss@1.30.1)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -4633,17 +4721,17 @@ snapshots: stream-replace-string: 2.0.0 zod: 3.25.76 - '@astrojs/starlight@0.34.3(astro@5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.7.1))': + '@astrojs/starlight@0.34.3(astro@5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.8.1))': dependencies: '@astrojs/markdown-remark': 6.3.1 - '@astrojs/mdx': 4.3.0(astro@5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.7.1)) + '@astrojs/mdx': 4.3.0(astro@5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.8.1)) '@astrojs/sitemap': 3.3.1 '@pagefind/default-ui': 1.3.0 '@types/hast': 3.0.4 '@types/js-yaml': 4.0.9 '@types/mdast': 4.0.4 - astro: 5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.7.1) - astro-expressive-code: 0.41.2(astro@5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.7.1)) + astro: 5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.8.1) + astro-expressive-code: 0.41.2(astro@5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.8.1)) bcp-47: 2.1.0 hast-util-from-html: 2.0.3 hast-util-select: 6.0.4 @@ -6671,18 +6759,18 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@22.1.0)(lightningcss@1.30.1)(yaml@2.7.1))': + '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@22.1.0)(lightningcss@1.30.1)(yaml@2.8.1))': dependencies: '@babel/core': 7.27.1 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.1) '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.27.1) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.5(@types/node@22.1.0)(lightningcss@1.30.1)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.1.0)(lightningcss@1.30.1)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitest/coverage-istanbul@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(lightningcss@1.30.1)(yaml@2.7.1))': + '@vitest/coverage-istanbul@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(lightningcss@1.30.1)(yaml@2.8.1))': dependencies: '@istanbuljs/schema': 0.1.3 debug: 4.4.1 @@ -6694,7 +6782,7 @@ snapshots: magicast: 0.3.5 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(lightningcss@1.30.1)(yaml@2.7.1) + vitest: 3.2.4(@types/debug@4.1.12)(lightningcss@1.30.1)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -6706,13 +6794,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.0.0(lightningcss@1.30.1)(yaml@2.7.1))': + '@vitest/mocker@3.2.4(vite@7.0.0(lightningcss@1.30.1)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 7.0.0(lightningcss@1.30.1)(yaml@2.7.1) + vite: 7.0.0(lightningcss@1.30.1)(yaml@2.8.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -6812,6 +6900,10 @@ snapshots: dependencies: string-width: 4.2.3 + ansi-escapes@7.1.1: + dependencies: + environment: 1.1.0 + ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} @@ -6839,12 +6931,12 @@ snapshots: astring@1.9.0: {} - astro-expressive-code@0.41.2(astro@5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.7.1)): + astro-expressive-code@0.41.2(astro@5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.8.1)): dependencies: - astro: 5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.7.1) + astro: 5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.8.1) rehype-expressive-code: 0.41.2 - astro@5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.7.1): + astro@5.8.0(@types/node@22.1.0)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)(yaml@2.8.1): dependencies: '@astrojs/compiler': 2.12.0 '@astrojs/internal-helpers': 0.6.1 @@ -6899,8 +6991,8 @@ snapshots: unist-util-visit: 5.0.0 unstorage: 1.16.0 vfile: 6.0.3 - vite: 6.3.5(@types/node@22.1.0)(lightningcss@1.30.1)(yaml@2.7.1) - vitefu: 1.0.6(vite@6.3.5(@types/node@22.1.0)(lightningcss@1.30.1)(yaml@2.7.1)) + vite: 6.3.5(@types/node@22.1.0)(lightningcss@1.30.1)(yaml@2.8.1) + vitefu: 1.0.6(vite@6.3.5(@types/node@22.1.0)(lightningcss@1.30.1)(yaml@2.8.1)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.2 @@ -7056,6 +7148,15 @@ snapshots: cli-boxes@3.0.0: {} + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-truncate@5.1.0: + dependencies: + slice-ansi: 7.1.2 + string-width: 8.1.0 + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -7084,10 +7185,14 @@ snapshots: color-convert: 2.0.1 color-string: 1.9.1 + colorette@2.0.20: {} + comma-separated-tokens@2.0.3: {} commander@12.1.0: {} + commander@14.0.1: {} + common-ancestor-path@1.0.1: {} convert-source-map@1.9.0: {} @@ -7205,6 +7310,8 @@ snapshots: entities@6.0.0: {} + environment@1.1.0: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -7412,6 +7519,8 @@ snapshots: get-east-asian-width@1.3.0: {} + get-east-asian-width@1.4.0: {} + get-port@4.2.0: {} get-stream@8.0.1: {} @@ -7731,6 +7840,10 @@ snapshots: is-fullwidth-code-point@3.0.0: {} + is-fullwidth-code-point@5.1.0: + dependencies: + get-east-asian-width: 1.4.0 + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -7865,6 +7978,25 @@ snapshots: lines-and-columns@1.2.4: {} + lint-staged@16.2.3: + dependencies: + commander: 14.0.1 + listr2: 9.0.4 + micromatch: 4.0.8 + nano-spawn: 1.0.3 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.8.1 + + listr2@9.0.4: + dependencies: + cli-truncate: 5.1.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 + lmdb@2.8.5: dependencies: msgpackr: 1.11.4 @@ -7882,6 +8014,14 @@ snapshots: lodash@4.17.21: {} + log-update@6.1.0: + dependencies: + ansi-escapes: 7.1.1 + cli-cursor: 5.0.0 + slice-ansi: 7.1.2 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + longest-streak@3.1.0: {} loose-envify@1.4.0: @@ -8384,6 +8524,8 @@ snapshots: mimic-fn@4.0.0: {} + mimic-function@5.0.1: {} + minimatch@9.0.5: dependencies: brace-expansion: 2.0.2 @@ -8412,6 +8554,8 @@ snapshots: muggle-string@0.4.1: {} + nano-spawn@1.0.3: {} + nanoid@3.3.11: {} neotraverse@0.6.18: {} @@ -8473,6 +8617,10 @@ snapshots: dependencies: mimic-fn: 4.0.0 + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + oniguruma-parser@0.12.1: {} oniguruma-to-es@4.3.3: @@ -8588,6 +8736,8 @@ snapshots: picomatch@4.0.2: {} + pidtree@0.6.0: {} + postcss-nested@6.2.0(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -8829,6 +8979,11 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + restructure@3.0.2: {} retext-latin@4.0.0: @@ -8858,6 +9013,8 @@ snapshots: reusify@1.1.0: {} + rfdc@1.4.1: {} + rollup@4.40.2: dependencies: '@types/estree': 1.0.7 @@ -9014,6 +9171,11 @@ snapshots: arg: 5.0.2 sax: 1.4.1 + slice-ansi@7.1.2: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.1.0 + smol-toml@1.3.4: {} source-map-js@1.2.1: {} @@ -9030,6 +9192,8 @@ snapshots: stream-replace-string@2.0.0: {} + string-argv@0.3.2: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -9048,6 +9212,11 @@ snapshots: get-east-asian-width: 1.3.0 strip-ansi: 7.1.0 + string-width@8.1.0: + dependencies: + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 @@ -9267,13 +9436,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@3.2.4(lightningcss@1.30.1)(yaml@2.7.1): + vite-node@3.2.4(lightningcss@1.30.1)(yaml@2.8.1): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.0.0(lightningcss@1.30.1)(yaml@2.7.1) + vite: 7.0.0(lightningcss@1.30.1)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -9288,7 +9457,7 @@ snapshots: - tsx - yaml - vite@6.3.5(@types/node@22.1.0)(lightningcss@1.30.1)(yaml@2.7.1): + vite@6.3.5(@types/node@22.1.0)(lightningcss@1.30.1)(yaml@2.8.1): dependencies: esbuild: 0.25.4 fdir: 6.4.6(picomatch@4.0.2) @@ -9300,9 +9469,9 @@ snapshots: '@types/node': 22.1.0 fsevents: 2.3.3 lightningcss: 1.30.1 - yaml: 2.7.1 + yaml: 2.8.1 - vite@7.0.0(lightningcss@1.30.1)(yaml@2.7.1): + vite@7.0.0(lightningcss@1.30.1)(yaml@2.8.1): dependencies: esbuild: 0.25.5 fdir: 6.4.6(picomatch@4.0.2) @@ -9313,17 +9482,17 @@ snapshots: optionalDependencies: fsevents: 2.3.3 lightningcss: 1.30.1 - yaml: 2.7.1 + yaml: 2.8.1 - vitefu@1.0.6(vite@6.3.5(@types/node@22.1.0)(lightningcss@1.30.1)(yaml@2.7.1)): + vitefu@1.0.6(vite@6.3.5(@types/node@22.1.0)(lightningcss@1.30.1)(yaml@2.8.1)): optionalDependencies: - vite: 6.3.5(@types/node@22.1.0)(lightningcss@1.30.1)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.1.0)(lightningcss@1.30.1)(yaml@2.8.1) - vitest@3.2.4(@types/debug@4.1.12)(lightningcss@1.30.1)(yaml@2.7.1): + vitest@3.2.4(@types/debug@4.1.12)(lightningcss@1.30.1)(yaml@2.8.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.0.0(lightningcss@1.30.1)(yaml@2.7.1)) + '@vitest/mocker': 3.2.4(vite@7.0.0(lightningcss@1.30.1)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -9341,8 +9510,8 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.0.0(lightningcss@1.30.1)(yaml@2.7.1) - vite-node: 3.2.4(lightningcss@1.30.1)(yaml@2.7.1) + vite: 7.0.0(lightningcss@1.30.1)(yaml@2.8.1) + vite-node: 3.2.4(lightningcss@1.30.1)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -9540,6 +9709,8 @@ snapshots: yaml@2.7.1: {} + yaml@2.8.1: {} + yargs-parser@21.1.1: {} yargs@17.7.2: From ee3b10d11f4940b79bfad79241a4be8f8419ac8f Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Wed, 1 Oct 2025 21:07:59 -0700 Subject: [PATCH 04/19] try to get the lint staged and husky trigger --- .husky/install.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/install.mjs b/.husky/install.mjs index 3be5a5d0..ff21667f 100644 --- a/.husky/install.mjs +++ b/.husky/install.mjs @@ -1,4 +1,4 @@ -// Skip Husky install in production and CI +// Skip Husky install in production and CI! if (process.env.NODE_ENV === 'production' || process.env.CI === 'true') { process.exit(0); } From f6884658ebc0d098ddbc186637fcd87d72d9a6e5 Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Wed, 1 Oct 2025 21:08:34 -0700 Subject: [PATCH 05/19] ugh tyr again --- .husky/install.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.husky/install.mjs b/.husky/install.mjs index ff21667f..e3c0b941 100644 --- a/.husky/install.mjs +++ b/.husky/install.mjs @@ -1,6 +1,6 @@ -// Skip Husky install in production and CI! +// Skip Husky install in production and CI if (process.env.NODE_ENV === 'production' || process.env.CI === 'true') { process.exit(0); } const husky = (await import('husky')).default; -console.log(husky()); +console.log('husky', husky()); From 9c73202ea4048c4327d2f00a58ec08525ae15e27 Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Wed, 1 Oct 2025 21:10:48 -0700 Subject: [PATCH 06/19] try again --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 80d3a00d..58ebbf7b 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,8 @@ "packageManager": "pnpm@9.14.2", "lint-staged": { "*": [ - "biome check . --write" + "biome check . --write", + "git add" ] } } From 7582f914e54015fa486db1eb093aba2b139c50bd Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Wed, 1 Oct 2025 21:11:59 -0700 Subject: [PATCH 07/19] try again' --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 58ebbf7b..bee6d722 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "lint-staged": { "*": [ "biome check . --write", + "echo 'wat'", "git add" ] } From 657b93d81cd0604f4c4e1cd80e566500ffb07c16 Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Wed, 1 Oct 2025 21:22:09 -0700 Subject: [PATCH 08/19] try again! --- package.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index bee6d722..5b857d4e 100644 --- a/package.json +++ b/package.json @@ -37,9 +37,8 @@ "packageManager": "pnpm@9.14.2", "lint-staged": { "*": [ - "biome check . --write", - "echo 'wat'", - "git add" + "biome check --write", + "echo 'wat'" ] } } From 99d228fc5daa9fefadb619fe50911e89c395982b Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Wed, 1 Oct 2025 21:30:01 -0700 Subject: [PATCH 09/19] ahhh will this do it --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 5b857d4e..85abe247 100644 --- a/package.json +++ b/package.json @@ -37,8 +37,7 @@ "packageManager": "pnpm@9.14.2", "lint-staged": { "*": [ - "biome check --write", - "echo 'wat'" + "biome check --no-errors-on-unmatched --files-ignore-unknown=true" ] } } From 907827372b08c5364056e155bfef6a76feeb7bb3 Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Wed, 1 Oct 2025 21:30:44 -0700 Subject: [PATCH 10/19] maybe now --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 85abe247..e3c92dfc 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "packageManager": "pnpm@9.14.2", "lint-staged": { "*": [ - "biome check --no-errors-on-unmatched --files-ignore-unknown=true" + "biome check --no-errors-on-unmatched --files-ignore-unknown=true --write" ] } } From f4b3b1a96428963f9ff707db5364a4baea25e9be Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Wed, 1 Oct 2025 21:33:30 -0700 Subject: [PATCH 11/19] whyyyyy --- package.json | 2 +- site/src/examples/omezarr/omezarr-demo.tsx | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index e3c92dfc..edef7d18 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "packageManager": "pnpm@9.14.2", "lint-staged": { "*": [ - "biome check --no-errors-on-unmatched --files-ignore-unknown=true --write" + "biome check --write --no-errors-on-unmatched --files-ignore-unknown=true" ] } } diff --git a/site/src/examples/omezarr/omezarr-demo.tsx b/site/src/examples/omezarr/omezarr-demo.tsx index fd84c661..bf7c3a79 100644 --- a/site/src/examples/omezarr/omezarr-demo.tsx +++ b/site/src/examples/omezarr/omezarr-demo.tsx @@ -1,13 +1,14 @@ -import { Box2D, type Interval, PLANE_XY, type box2D, type vec2 } from '@alleninstitute/vis-geometry'; -import { type OmeZarrMetadata, loadMetadata, sizeInUnits } from '@alleninstitute/vis-omezarr'; -import type { RenderSettings, RenderSettingsChannels } from '@alleninstitute/vis-omezarr'; import { logger, type WebResource } from '@alleninstitute/vis-core'; +import { Box2D, type box2D, type Interval, PLANE_XY, type vec2 } from '@alleninstitute/vis-geometry'; +import type { RenderSettings, RenderSettingsChannels } from '@alleninstitute/vis-omezarr'; +import { loadMetadata, type OmeZarrMetadata, sizeInUnits } from '@alleninstitute/vis-omezarr'; import type React from 'react'; import { useEffect, useId, useMemo, useState } from 'react'; import { pan, zoom } from '../common/camera'; import { RenderServerProvider } from '../common/react/render-server-provider'; import { OmezarrViewer } from './omezarr-viewer'; import { SliceView } from './sliceview'; + type DemoOption = { value: string; label: string; res: WebResource }; const demoOptions: DemoOption[] = [ From 2dd0568c1a22d53e11413784cd79963cb4eb9081 Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Wed, 1 Oct 2025 21:38:19 -0700 Subject: [PATCH 12/19] oops remove something I didn't mean to leave in --- .husky/install.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.husky/install.mjs b/.husky/install.mjs index e3c0b941..3be5a5d0 100644 --- a/.husky/install.mjs +++ b/.husky/install.mjs @@ -3,4 +3,4 @@ if (process.env.NODE_ENV === 'production' || process.env.CI === 'true') { process.exit(0); } const husky = (await import('husky')).default; -console.log('husky', husky()); +console.log(husky()); From 4040d455d42daea44740a2510682cca1472dbc95 Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Wed, 18 Feb 2026 21:31:37 -0800 Subject: [PATCH 13/19] try again with the fmt and auto lint fixes but not blocking on failed things --- package.json | 4 ++-- packages/core/src/index.ts | 28 +++++++++++++--------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index fff821ae..78640533 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "packageManager": "pnpm@9.14.2", "lint-staged": { "*": [ - "biome check --write --no-errors-on-unmatched --files-ignore-unknown=true" + "biome check --write --no-errors-on-unmatched --files-ignore-unknown=true || true" ] } -} \ No newline at end of file +} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 995da9b4..ccb31bed 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,34 +1,32 @@ -export { beginLongRunningFrame } from './render-queue'; -export { AsyncDataCache } from './dataset-cache'; -export { ReglLayer2D } from './layers/layer-2D'; -export * from './layers/buffer-pair'; -export * from './resources'; -export * from './errors'; -export * from './colors'; - export { beginFrame, buildAsyncRenderer, type RenderFrameConfig, } from './abstract/async-frame'; +export { RenderServer } from './abstract/render-server'; export type { CachedTexture, CachedVertexBuffer, ReglCacheEntry, Renderer, } from './abstract/types'; -export { RenderServer } from './abstract/render-server'; - +export * from './colors'; +export { AsyncDataCache } from './dataset-cache'; +export * from './errors'; +export * from './layers/buffer-pair'; +export { ReglLayer2D } from './layers/layer-2D'; export { Logger, logger } from './logger'; -export { PriorityCache, AsyncPriorityCache, type Cacheable } from './shared-priority-cache/priority-cache'; +export { beginLongRunningFrame } from './render-queue'; +export * from './resources'; +export { AsyncPriorityCache, type Cacheable, PriorityCache } from './shared-priority-cache/priority-cache'; export { SharedPriorityCache } from './shared-priority-cache/shared-cache'; export { - type WorkerMessage, - type WorkerMessageWithId, + HEARTBEAT_RATE_MS, isWorkerMessage, isWorkerMessageWithId, - HEARTBEAT_RATE_MS, + type WorkerMessage, + type WorkerMessageWithId, } from './workers/messages'; -export { WorkerPool, type WorkerInit } from './workers/worker-pool'; +export { type WorkerInit, WorkerPool } from './workers/worker-pool'; From 4b63d639c419b37e692c43c019defb13bacb60ed Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Wed, 18 Feb 2026 21:35:13 -0800 Subject: [PATCH 14/19] fix issue from merge --- .../omezarr/selectable-image-demo/omezarr-demo.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/site/src/examples/omezarr/selectable-image-demo/omezarr-demo.tsx b/site/src/examples/omezarr/selectable-image-demo/omezarr-demo.tsx index 496fbe2b..ac39ec66 100644 --- a/site/src/examples/omezarr/selectable-image-demo/omezarr-demo.tsx +++ b/site/src/examples/omezarr/selectable-image-demo/omezarr-demo.tsx @@ -1,13 +1,13 @@ -import { Box2D, type Interval, PLANE_XY, type box2D, type vec2 } from '@alleninstitute/vis-geometry'; -import { type OmeZarrMetadata, loadMetadata, nextSliceStep, sizeInUnits } from '@alleninstitute/vis-omezarr'; +import { logger, type WebResource } from '@alleninstitute/vis-core'; +import { Box2D, type box2D, type Interval, PLANE_XY, type vec2 } from '@alleninstitute/vis-geometry'; import type { RenderSettings, RenderSettingsChannels } from '@alleninstitute/vis-omezarr'; -import { loadMetadata, type OmeZarrMetadata, sizeInUnits } from '@alleninstitute/vis-omezarr'; +import { loadMetadata, nextSliceStep, type OmeZarrMetadata, sizeInUnits } from '@alleninstitute/vis-omezarr'; import type React from 'react'; import { useId, useMemo, useState } from 'react'; +import { OMEZARR_DEMO_FILESETS } from 'src/examples/common/filesets/omezarr'; import { pan, zoom } from '../../common/camera'; import { RenderServerProvider } from '../../common/react/render-server-provider'; import { OmezarrViewer } from './omezarr-viewer'; -import { OMEZARR_DEMO_FILESETS } from 'src/examples/common/filesets/omezarr'; const screenSize: vec2 = [800, 800]; From 13158187b91cefea4429719606f5c39e3b728154 Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Thu, 13 Aug 2026 21:04:44 -0700 Subject: [PATCH 15/19] chore: replace husky and lint-staged with lefthook - Add lefthook.yml running oxlint --fix, oxfmt, and prettier on staged files - Autofix only: the hook never blocks a commit, CI remains the gate - Re-stage fixes via stage_fixed so commits record the formatted output - Remove .husky/ and the biome-era lint-staged config - Restore pnpm-workspace.yaml to match main (pnpm 11 scaffolding backed out) Co-Authored-By: Claude Opus 5 --- .husky/install.mjs | 7 -- .husky/pre-commit | 1 - lefthook.yml | 24 ++++ package.json | 14 +-- pnpm-lock.yaml | 283 ++++++++++++++++---------------------------- pnpm-workspace.yaml | 16 +-- 6 files changed, 130 insertions(+), 215 deletions(-) delete mode 100644 .husky/install.mjs delete mode 100644 .husky/pre-commit create mode 100644 lefthook.yml diff --git a/.husky/install.mjs b/.husky/install.mjs deleted file mode 100644 index f816a5b8..00000000 --- a/.husky/install.mjs +++ /dev/null @@ -1,7 +0,0 @@ -// Skip Husky install in production and CI -if (process.env.NODE_ENV === 'production' || process.env.CI === 'true') { - process.exit(0); -} -const husky = (await import('husky')).default; -// oxlint-disable-next-line no-console -- husky() returns install output meant for the terminal -console.log(husky()); diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100644 index 5ee7abd8..00000000 --- a/.husky/pre-commit +++ /dev/null @@ -1 +0,0 @@ -pnpm exec lint-staged diff --git a/lefthook.yml b/lefthook.yml new file mode 100644 index 00000000..bc0556d0 --- /dev/null +++ b/lefthook.yml @@ -0,0 +1,24 @@ +# Autofix-only: these commands never block a commit. Unfixable lint errors are +# printed for visibility, but `|| true` keeps the hook green. CI is what gates. +# +# `glob` scopes each tool to the file types it handles, so a commit touching +# only e.g. Markdown skips all three commands instead of spawning no-op +# processes. Lefthook already skips a command when its file list comes out +# empty, so the globs are for clarity and speed, not safety. +pre-commit: + commands: + lint: + priority: 1 + glob: '*.{js,jsx,mjs,cjs,mts,cts,ts,tsx}' + run: pnpm exec oxlint --fix {staged_files} || true + stage_fixed: true + fmt: + priority: 2 + glob: '*.{js,jsx,mjs,cjs,mts,cts,ts,tsx,json,jsonc,yaml,yml}' + run: pnpm exec oxfmt {staged_files} || true + stage_fixed: true + fmt-astro: + priority: 2 + glob: '*.astro' + run: pnpm exec prettier --write {staged_files} || true + stage_fixed: true diff --git a/package.json b/package.json index a9a2495f..dbed501a 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "check": "oxfmt --check && prettier --check 'site/**/*.astro' && oxlint", "check:fix": "oxfmt && prettier --write 'site/**/*.astro' && oxlint --fix", "changelog": "pnpm -r run changelog", - "prepare": "node .husky/install.mjs" + "prepare": "lefthook install" }, "devDependencies": { "oxfmt": "0.61.0", @@ -26,8 +26,7 @@ "@vitest/coverage-istanbul": "4.1.1", "buffer": "6.0.3", "git-cliff": "2.13.1", - "husky": "9.1.7", - "lint-staged": "16.2.7", + "lefthook": "2.1.10", "parcel": "2.16.4", "process": "0.11.10", "typescript": "5.9.3", @@ -36,14 +35,5 @@ "volta": { "node": "24.15.0", "pnpm": "10.33.0" - }, - "lint-staged": { - "*.{js,jsx,mjs,cjs,ts,tsx,json}": [ - "oxfmt", - "oxlint --fix" - ], - "*.astro": [ - "prettier --write" - ] } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5c2b7596..a423bc94 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,12 +23,9 @@ importers: git-cliff: specifier: 2.13.1 version: 2.13.1 - husky: - specifier: 9.1.7 - version: 9.1.7 - lint-staged: - specifier: 16.2.7 - version: 16.2.7 + lefthook: + specifier: 2.1.10 + version: 2.1.10 oxfmt: specifier: 0.61.0 version: 0.61.0 @@ -2237,10 +2234,6 @@ packages: ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - ansi-escapes@7.3.0: - resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} - engines: {node: '>=18'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -2391,14 +2384,6 @@ packages: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} - cli-cursor@5.0.0: - resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} - engines: {node: '>=18'} - - cli-truncate@5.2.0: - resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} - engines: {node: '>=20'} - cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -2421,9 +2406,6 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -2435,10 +2417,6 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} - commander@14.0.3: - resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} - engines: {node: '>=20'} - common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} @@ -2586,10 +2564,6 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} - environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} - es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} @@ -2718,10 +2692,6 @@ packages: resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} engines: {node: '>=18'} - get-east-asian-width@1.6.0: - resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} - engines: {node: '>=18'} - get-port@4.2.0: resolution: {integrity: sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==} engines: {node: '>=6'} @@ -2858,11 +2828,6 @@ packages: resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} engines: {node: '>=18.18.0'} - husky@9.1.7: - resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} - engines: {node: '>=18'} - hasBin: true - i18next@23.16.8: resolution: {integrity: sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==} @@ -2900,10 +2865,6 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-fullwidth-code-point@5.1.0: - resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} - engines: {node: '>=18'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -2993,6 +2954,60 @@ packages: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} + lefthook-darwin-arm64@2.1.10: + resolution: {integrity: sha512-nw+X8wRNDoUUV6WSteyKBbcLySq+fsmZt5WV/s50ZJpysmsDKJOUMln6SllNfP+60dzUahAO7REco/2633BsLg==} + cpu: [arm64] + os: [darwin] + + lefthook-darwin-x64@2.1.10: + resolution: {integrity: sha512-KQ/bHmvpkFdHMn4pZnUdTf+GuSC+aBBgBTxZT4GW+6cSf+qbErKZBhK7cH6BmILsvx43+VzEArvHYY7YOfRFOQ==} + cpu: [x64] + os: [darwin] + + lefthook-freebsd-arm64@2.1.10: + resolution: {integrity: sha512-8su6DwydP7+pv7kG0zCtjphqsw4ouOnfexRUErapy5GTxYBoUOhYz3RSHTSWNRsK6W4jva7FPUh2Lp5/PSn30w==} + cpu: [arm64] + os: [freebsd] + + lefthook-freebsd-x64@2.1.10: + resolution: {integrity: sha512-GeAJEFxko3Lk+AsnS3NleAFrpyMLFUKOlgJvPKuU0xHwVEI/z+ZoCcmuO0BX+4CS0NLbZhC/YQAvBASqDvvVdQ==} + cpu: [x64] + os: [freebsd] + + lefthook-linux-arm64@2.1.10: + resolution: {integrity: sha512-1sHTCmpTWjVMs+yKPBLRNT1kuuIr1yjietlk7rCB6wFPVOS6Ph3o2zPFH2AvW1UymHlqwyHXzBr9EtDpQ7j1mQ==} + cpu: [arm64] + os: [linux] + + lefthook-linux-x64@2.1.10: + resolution: {integrity: sha512-z/VlRB3bh6mBvW3r1rwnJ5vP8z+Krx5gJzkZ4veDXh+6FlRTx8wtd3g3fllOv/yZMxkgmL3fQoFXv05Esa7vBQ==} + cpu: [x64] + os: [linux] + + lefthook-openbsd-arm64@2.1.10: + resolution: {integrity: sha512-430zL8sSIKw5P0YXGG6PB+eAhHa06n0PXuaERaAQE4Ss3odfqwnl5Mq9hQmkEnOS1EGiQEKkd0UHv/i4PtMNIQ==} + cpu: [arm64] + os: [openbsd] + + lefthook-openbsd-x64@2.1.10: + resolution: {integrity: sha512-bgkO8PphGZVDhQgCJ524aYYPI5491pVmCiLPGjBIo1AvOSlIyw4N1Y+1C3QfqwEmechzw+Aq16SNc8pqv6UuXg==} + cpu: [x64] + os: [openbsd] + + lefthook-windows-arm64@2.1.10: + resolution: {integrity: sha512-5Q6etF0Fla2DDA4ilDySrdNgiR5+W7cJZwnZ69Je3kvWCaWm4wnkuc8FEdjp3kiL2x3ZXipdI00f5vpO8aWmog==} + cpu: [arm64] + os: [win32] + + lefthook-windows-x64@2.1.10: + resolution: {integrity: sha512-c/XH8YZtylG4XaxzqFfXluvq2LXq2W/p54Bnzn3+Z7E5X2Fk3JlFJAibulMbIt2+w8T7UI/r97ok5GqE4kGaeA==} + cpu: [x64] + os: [win32] + + lefthook@2.1.10: + resolution: {integrity: sha512-K7mM4WoqMwqfXYK11EHy+lSH1uW8XHni3Yn/bSqyerPkUPygGdf3xn18JoV5HyA06xuQL3ofGAOjG01QX9oJ4w==} + hasBin: true + lightningcss-android-arm64@1.30.2: resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} engines: {node: '>= 12.0.0'} @@ -3067,15 +3082,6 @@ packages: resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} engines: {node: '>= 12.0.0'} - lint-staged@16.2.7: - resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==} - engines: {node: '>=20.17'} - hasBin: true - - listr2@9.0.5: - resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} - engines: {node: '>=20.0.0'} - lmdb@2.8.5: resolution: {integrity: sha512-9bMdFfc80S+vSldBmG3HOuLVHnxRdNTlpzR6QDnzqCQtCzGUEAGTzBKYMeIM+I/sU4oZfgbcbS7X7F65/z/oxQ==} hasBin: true @@ -3089,10 +3095,6 @@ packages: lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} - log-update@6.1.0: - resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} - engines: {node: '>=18'} - longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -3295,10 +3297,6 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} - engines: {node: '>=18'} - mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} @@ -3316,10 +3314,6 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} - nano-spawn@2.1.0: - resolution: {integrity: sha512-yTW+2okrElHiH4fsiz/+/zc0EDo9BDDoC3iKk8dpv1GeRc9nUWzUZHx6TofMWErchhUQR8hY9/Eu1Uja9x1nqA==} - engines: {node: '>=20.17'} - nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -3386,10 +3380,6 @@ packages: ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} - onetime@7.0.0: - resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} - engines: {node: '>=18'} - oniguruma-parser@0.12.1: resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} @@ -3498,11 +3488,6 @@ packages: resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} - pidtree@0.6.1: - resolution: {integrity: sha512-e0F9AOF1JMrCfBsyJOwU9lNvQ0WtXTq0j/4jk0BQ5JSI9VAybPXmDpPRw/2FQ3e5d3ZFN1mLh7jW99m/jjaptw==} - engines: {node: '>=0.10'} - hasBin: true - postcss-nested@6.2.0: resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} engines: {node: '>=12.0'} @@ -3675,10 +3660,6 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - restore-cursor@5.1.0: - resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} - engines: {node: '>=18'} - retext-latin@4.0.0: resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} @@ -3691,9 +3672,6 @@ packages: retext@9.0.0: resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} - rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@4.57.1: resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -3764,14 +3742,6 @@ packages: deprecated: 'SECURITY: Multiple vulnerabilities fixed in 8.0.1 (XML injection, path traversal, command injection, protocol injection). Upgrade immediately: npm install sitemap@8.0.1' hasBin: true - slice-ansi@7.1.2: - resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} - engines: {node: '>=18'} - - slice-ansi@8.0.0: - resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==} - engines: {node: '>=20'} - smol-toml@1.6.0: resolution: {integrity: sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==} engines: {node: '>= 18'} @@ -3796,10 +3766,6 @@ packages: stream-replace-string@2.0.0: resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==} - string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -3808,10 +3774,6 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} - string-width@8.2.2: - resolution: {integrity: sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==} - engines: {node: '>=20'} - stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} @@ -6402,10 +6364,6 @@ snapshots: dependencies: string-width: 4.2.3 - ansi-escapes@7.3.0: - dependencies: - environment: 1.1.0 - ansi-regex@5.0.1: {} ansi-regex@6.2.2: {} @@ -6629,15 +6587,6 @@ snapshots: cli-boxes@3.0.0: {} - cli-cursor@5.0.0: - dependencies: - restore-cursor: 5.1.0 - - cli-truncate@5.2.0: - dependencies: - slice-ansi: 8.0.0 - string-width: 8.2.2 - cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -6656,16 +6605,12 @@ snapshots: color-name@1.1.4: {} - colorette@2.0.20: {} - comma-separated-tokens@2.0.3: {} commander@11.1.0: {} commander@12.1.0: {} - commander@14.0.3: {} - common-ancestor-path@1.0.1: {} convert-source-map@2.0.0: {} @@ -6789,8 +6734,6 @@ snapshots: entities@6.0.1: {} - environment@1.1.0: {} - es-module-lexer@1.7.0: {} es-module-lexer@2.0.0: {} @@ -6977,8 +6920,6 @@ snapshots: get-east-asian-width@1.4.0: {} - get-east-asian-width@1.6.0: {} - get-port@4.2.0: {} get-stream@9.0.1: @@ -7236,8 +7177,6 @@ snapshots: human-signals@8.0.1: {} - husky@9.1.7: {} - i18next@23.16.8: dependencies: '@babel/runtime': 7.28.4 @@ -7265,10 +7204,6 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-fullwidth-code-point@5.1.0: - dependencies: - get-east-asian-width: 1.4.0 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -7330,6 +7265,49 @@ snapshots: klona@2.0.6: {} + lefthook-darwin-arm64@2.1.10: + optional: true + + lefthook-darwin-x64@2.1.10: + optional: true + + lefthook-freebsd-arm64@2.1.10: + optional: true + + lefthook-freebsd-x64@2.1.10: + optional: true + + lefthook-linux-arm64@2.1.10: + optional: true + + lefthook-linux-x64@2.1.10: + optional: true + + lefthook-openbsd-arm64@2.1.10: + optional: true + + lefthook-openbsd-x64@2.1.10: + optional: true + + lefthook-windows-arm64@2.1.10: + optional: true + + lefthook-windows-x64@2.1.10: + optional: true + + lefthook@2.1.10: + optionalDependencies: + lefthook-darwin-arm64: 2.1.10 + lefthook-darwin-x64: 2.1.10 + lefthook-freebsd-arm64: 2.1.10 + lefthook-freebsd-x64: 2.1.10 + lefthook-linux-arm64: 2.1.10 + lefthook-linux-x64: 2.1.10 + lefthook-openbsd-arm64: 2.1.10 + lefthook-openbsd-x64: 2.1.10 + lefthook-windows-arm64: 2.1.10 + lefthook-windows-x64: 2.1.10 + lightningcss-android-arm64@1.30.2: optional: true @@ -7379,25 +7357,6 @@ snapshots: lightningcss-win32-arm64-msvc: 1.30.2 lightningcss-win32-x64-msvc: 1.30.2 - lint-staged@16.2.7: - dependencies: - commander: 14.0.3 - listr2: 9.0.5 - micromatch: 4.0.8 - nano-spawn: 2.1.0 - pidtree: 0.6.1 - string-argv: 0.3.2 - yaml: 2.8.1 - - listr2@9.0.5: - dependencies: - cli-truncate: 5.2.0 - colorette: 2.0.20 - eventemitter3: 5.0.1 - log-update: 6.1.0 - rfdc: 1.4.1 - wrap-ansi: 9.0.2 - lmdb@2.8.5: dependencies: msgpackr: 1.11.5 @@ -7419,14 +7378,6 @@ snapshots: lodash@4.18.1: {} - log-update@6.1.0: - dependencies: - ansi-escapes: 7.3.0 - cli-cursor: 5.0.0 - slice-ansi: 7.1.2 - strip-ansi: 7.1.2 - wrap-ansi: 9.0.2 - longest-streak@3.1.0: {} lru-cache@11.2.6: {} @@ -7925,8 +7876,6 @@ snapshots: braces: 3.0.3 picomatch: 2.3.2 - mimic-function@5.0.1: {} - mrmime@2.0.1: {} ms@2.1.3: {} @@ -7949,8 +7898,6 @@ snapshots: muggle-string@0.4.1: {} - nano-spawn@2.1.0: {} - nanoid@3.3.11: {} nanoid@3.3.16: {} @@ -8007,10 +7954,6 @@ snapshots: ohash@2.0.11: {} - onetime@7.0.0: - dependencies: - mimic-function: 5.0.1 - oniguruma-parser@0.12.1: {} oniguruma-to-es@4.3.4: @@ -8155,8 +8098,6 @@ snapshots: picomatch@4.0.5: {} - pidtree@0.6.1: {} - postcss-nested@6.2.0(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -8377,11 +8318,6 @@ snapshots: require-from-string@2.0.2: {} - restore-cursor@5.1.0: - dependencies: - onetime: 7.0.0 - signal-exit: 4.1.0 - retext-latin@4.0.0: dependencies: '@types/nlcst': 2.0.3 @@ -8407,8 +8343,6 @@ snapshots: retext-stringify: 4.0.0 unified: 11.0.5 - rfdc@1.4.1: {} - rollup@4.57.1: dependencies: '@types/estree': 1.0.8 @@ -8550,16 +8484,6 @@ snapshots: arg: 5.0.2 sax: 1.4.1 - slice-ansi@7.1.2: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 - - slice-ansi@8.0.0: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 - smol-toml@1.6.0: {} source-map-js@1.2.1: {} @@ -8574,8 +8498,6 @@ snapshots: stream-replace-string@2.0.0: {} - string-argv@0.3.2: {} - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -8588,11 +8510,6 @@ snapshots: get-east-asian-width: 1.4.0 strip-ansi: 7.1.2 - string-width@8.2.2: - dependencies: - get-east-asian-width: 1.6.0 - strip-ansi: 7.1.2 - stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f77c0dcf..ea87e48f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,16 +1,8 @@ packages: - - 'packages/**' - - 'site/**' - - '!**test**' - -allowBuilds: - '@parcel/watcher': set this to true or false - '@swc/core': set this to true or false - esbuild: set this to true or false - lmdb: set this to true or false - msgpackr-extract: set this to true or false - sharp: set this to true or false + - 'packages/**' + - 'site/**' + - '!**test**' minimumReleaseAge: 10080 minimumReleaseAgeExclude: - - '@alleninstitute/*' + - '@alleninstitute/*' From cc6931ac93463a5a5152164384c4acad3cfd6c58 Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Thu, 13 Aug 2026 21:09:47 -0700 Subject: [PATCH 16/19] chore: revert biome-era import reordering These import sorts came from the branch's original Biome-based work and are unrelated to the lefthook change. Restores both files to match main. Co-Authored-By: Claude Opus 5 --- site/astro.config.mjs | 6 +++--- site/src/examples/scatterbrain/demo.tsx | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/site/astro.config.mjs b/site/astro.config.mjs index e26d353d..de967509 100644 --- a/site/astro.config.mjs +++ b/site/astro.config.mjs @@ -1,9 +1,9 @@ // @ts-check - +import { defineConfig } from 'astro/config'; import mdx from '@astrojs/mdx'; -import react from '@astrojs/react'; import starlight from '@astrojs/starlight'; -import { defineConfig } from 'astro/config'; + +import react from '@astrojs/react'; // https://astro.build/config export default defineConfig({ diff --git a/site/src/examples/scatterbrain/demo.tsx b/site/src/examples/scatterbrain/demo.tsx index 5ac8ffd9..e88be784 100644 --- a/site/src/examples/scatterbrain/demo.tsx +++ b/site/src/examples/scatterbrain/demo.tsx @@ -1,13 +1,13 @@ import type { vec2, vec4 } from '@alleninstitute/vis-geometry'; +import { SharedCacheContext, SharedCacheProvider } from '../common/react/priority-cache-provider'; +import { useContext, useEffect, useRef, useState } from 'react'; import { buildScatterbrainRenderFn, - type Dataset, loadScatterbrainDataset, - type ShaderSettings, setCategoricalLookupTableValues, + type Dataset, + type ShaderSettings, } from '@alleninstitute/vis-scatterbrain'; -import { useContext, useEffect, useRef, useState } from 'react'; -import { SharedCacheContext, SharedCacheProvider } from '../common/react/priority-cache-provider'; const screenSize: vec2 = [800, 800]; const tenx = From 7b0a809dac83f8dc648bc68701e2cafe678678ff Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Thu, 13 Aug 2026 21:14:29 -0700 Subject: [PATCH 17/19] chore: cover md, mdx, html, and astro in lefthook globs oxfmt formats md/mdx/html and oxlint reads astro, but the globs listed only the js/ts subset. A markdown- or astro-only commit skipped the hook entirely and then failed CI, which is the exact case the hook exists to prevent. Also includes a deliberate console.log in site/src/examples/types.ts demonstrating that the hook reformats the line and lets the commit through while still reporting the lint error. Remove before merge. Co-Authored-By: Claude Opus 5 --- lefthook.yml | 7 +++++-- site/src/examples/types.ts | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lefthook.yml b/lefthook.yml index bc0556d0..58f346f6 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -9,12 +9,15 @@ pre-commit: commands: lint: priority: 1 - glob: '*.{js,jsx,mjs,cjs,mts,cts,ts,tsx}' + # oxlint reads .astro too, and CI's bare `oxlint` discovers them. + glob: '*.{js,jsx,mjs,cjs,mts,cts,ts,tsx,astro}' run: pnpm exec oxlint --fix {staged_files} || true stage_fixed: true fmt: priority: 2 - glob: '*.{js,jsx,mjs,cjs,mts,cts,ts,tsx,json,jsonc,yaml,yml}' + # Must cover every type oxfmt handles, or the hook stays silent on a + # file that `pnpm run check` then fails on in CI. + glob: '*.{js,jsx,mjs,cjs,mts,cts,ts,tsx,json,jsonc,yaml,yml,md,mdx,html}' run: pnpm exec oxfmt {staged_files} || true stage_fixed: true fmt-astro: diff --git a/site/src/examples/types.ts b/site/src/examples/types.ts index 2eae1103..8e5b1e54 100644 --- a/site/src/examples/types.ts +++ b/site/src/examples/types.ts @@ -31,7 +31,7 @@ export type CacheEntry = } | ColumnBuffer | GpuMesh; - +console.log('complain mr linter! but let me commit mr lefthook'); export type ScatterPlotLayer = { type: 'scatterplot'; data: DynamicGridSlide; From 6c278cdf3a364ea955bb3a2b77fd66809dc298e1 Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Thu, 13 Aug 2026 21:15:25 -0700 Subject: [PATCH 18/19] remove the test console thing to trigger a lint error --- site/src/examples/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/src/examples/types.ts b/site/src/examples/types.ts index 8e5b1e54..2eae1103 100644 --- a/site/src/examples/types.ts +++ b/site/src/examples/types.ts @@ -31,7 +31,7 @@ export type CacheEntry = } | ColumnBuffer | GpuMesh; -console.log('complain mr linter! but let me commit mr lefthook'); + export type ScatterPlotLayer = { type: 'scatterplot'; data: DynamicGridSlide; From 9858801a3e7fafc2d2f38e74f577843923e9c166 Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Thu, 13 Aug 2026 21:22:39 -0700 Subject: [PATCH 19/19] chore: install lefthook hooks via pnpm allowBuilds Follow lefthook's documented pnpm setup instead of a custom prepare script: allow its postinstall to run, which is what syncs the git hooks. pnpm 11 reads this from pnpm-workspace.yaml's allowBuilds. The docs also mention pnpm.onlyBuiltDependencies in package.json, but pnpm 11 ignores that field and warns about it, so it is omitted. Co-Authored-By: Claude Opus 5 --- package.json | 3 +-- pnpm-workspace.yaml | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b42dc5f3..626adb08 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,7 @@ "lint:check": "oxlint", "check": "oxfmt --check && prettier --check 'site/**/*.astro' && oxlint", "check:fix": "oxfmt && prettier --write 'site/**/*.astro' && oxlint --fix", - "changelog": "pnpm -r run changelog", - "prepare": "lefthook install" + "changelog": "pnpm -r run changelog" }, "devDependencies": { "oxfmt": "0.61.0", diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index db3a0b79..52ba6f88 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -9,6 +9,8 @@ allowBuilds: '@parcel/watcher': false '@swc/core': false esbuild: false + # lefthook's postinstall is what installs the git hooks. + lefthook: true lmdb: false msgpackr-extract: false sharp: false