From b9fe29c066c861926b5af0303391b669797e3f59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Sun, 23 Aug 2026 18:50:02 +0200 Subject: [PATCH 1/8] Bump knip from 6.16.1 to 6.32.2 The newer resolver tracks each re-export as its own reference site, so a barrel line that nothing imports is now reported instead of being counted as used whenever the underlying symbol was used anywhere. The gate goes from zero findings to 206 on unchanged code. --- package.json | 2 +- pnpm-lock.yaml | 433 ++++++++++++++++++++++++------------------------- 2 files changed, 216 insertions(+), 219 deletions(-) diff --git a/package.json b/package.json index eaf031622..6725904df 100644 --- a/package.json +++ b/package.json @@ -123,7 +123,7 @@ "@vitest/coverage-v8": "^4.1.5", "eslint": "^9", "eslint-config-next": "16.2.12", - "knip": "^6.16.1", + "knip": "^6.32.2", "lefthook": "^2.1.10", "pdf-parse": "^2.4.5", "pdfjs-dist": "6.2.108", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 24853b490..271314a1c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -228,8 +228,8 @@ importers: specifier: 16.2.12 version: 16.2.12(@typescript-eslint/parser@8.65.0(eslint@9.39.3(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3))(eslint@9.39.3(jiti@2.7.0)(supports-color@7.2.0))(supports-color@7.2.0)(typescript@6.0.3) knip: - specifier: ^6.16.1 - version: 6.16.1 + specifier: ^6.32.2 + version: 6.32.2 lefthook: specifier: ^2.1.10 version: 2.1.10 @@ -580,6 +580,9 @@ packages: '@emnapi/core@1.11.1': resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} + '@emnapi/core@1.11.2': + resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==} + '@emnapi/core@1.8.1': resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} @@ -589,6 +592,9 @@ packages: '@emnapi/runtime@1.11.1': resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + '@emnapi/runtime@1.11.2': + resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} + '@emnapi/runtime@1.8.1': resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} @@ -1357,12 +1363,6 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@napi-rs/wasm-runtime@1.1.4': - resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} - peerDependencies: - '@emnapi/core': ^1.7.1 - '@emnapi/runtime': ^1.7.1 - '@napi-rs/wasm-runtime@1.2.2': resolution: {integrity: sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==} engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} @@ -1634,239 +1634,234 @@ packages: cpu: [x64] os: [win32] - '@oxc-parser/binding-android-arm-eabi@0.133.0': - resolution: {integrity: sha512-l/44caGse+VpnY9gx0yvvc5QnnG3yG1FO3KZgYvNL1GZrfK86zIwAOgGEVlxDyRymzrU/KHiblPFpevKOmJmUA==} + '@oxc-parser/binding-android-arm-eabi@0.143.0': + resolution: {integrity: sha512-n9uozULWflPqBtdmI8lAabLqGKNgLVNN0ZH8HfgCwpKGNtzRzauB76jTiW/3YLkcA7N1zskpi9GdVnZuu1SAvg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-parser/binding-android-arm64@0.133.0': - resolution: {integrity: sha512-KUHmPMziLBp4u+zbrLdB7iWS7KshuZe+RAp7ELnY9SI9nNXBZ+dp8fiBqWOxhXqn+FQg3a4UcQhwmsJOKV8Jjg==} + '@oxc-parser/binding-android-arm64@0.143.0': + resolution: {integrity: sha512-9BbdjHETk6O3zH/DDid9IgBtF0GlpLabNKN231uraXpRDSfY+iiZxTP5bk1Z63GBownVdhdINFIeddmMz4MzpQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-parser/binding-darwin-arm64@0.133.0': - resolution: {integrity: sha512-q8dWmnU/8ea2tga9w2f1PinQ5rcMPDUGkF64T189b65YMjUomET4oy5oRldOr4AwOQkneOG/Zttnz1Dvrc62wg==} + '@oxc-parser/binding-darwin-arm64@0.143.0': + resolution: {integrity: sha512-gh+6ecoHUy4/sUcolBl/1qPXKBbYNxFY0Pk0ujgQvINTMSftJY7o4yb8gOkDJPeZeB8+a+u7xTe6umoP8N5HFA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-parser/binding-darwin-x64@0.133.0': - resolution: {integrity: sha512-cOKeIELIB2bJnCKwqx4Rdj+1Lss/U6uCbLxRySZrhyOOQa1flKhwZFjEHRHxk8fU1NKmhK5OnTdPQ4CpjuFuVw==} + '@oxc-parser/binding-darwin-x64@0.143.0': + resolution: {integrity: sha512-qd1hl2d+lXgHv/VQ/M9qm8TrMC5T4RqDBwtOnl+1D0QMjwcz+8AaB4JSg8STgeag0GP6a6L74XEGAsrTSJWNzQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-parser/binding-freebsd-x64@0.133.0': - resolution: {integrity: sha512-OpaSv4pW3KgFrMYQxTaS0aOE4T1DQF3qZE/4B6uqqv1KgPWWd4UQhJALi8PJPX1RRV5K7ThKXRfF7qGg2+3l1A==} + '@oxc-parser/binding-freebsd-x64@0.143.0': + resolution: {integrity: sha512-M5XXcNa7aOqLPKTR41msfghKu2yQ4xWvCm11/gwU0JzOzHNk5sgW//rVEjJ+LO48+VDAMzXTSzurUVxIDKwozw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-parser/binding-linux-arm-gnueabihf@0.133.0': - resolution: {integrity: sha512-JGK1wlGrGwxBIlVSF7KWTX1/ru6BEtf28fRROztDRkLfiW+Kxa4onnriezMIiogfn9hVw2KzYcKiLjkLR2ns8A==} + '@oxc-parser/binding-linux-arm-gnueabihf@0.143.0': + resolution: {integrity: sha512-T/GXusuOkPNQhCQCSBbcU/N8j0rAypuDBl1IyFK+lyYT594XsVz80clPC/OtbSSpBGyJxj8uYEfctxVuxVYoww==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm-musleabihf@0.133.0': - resolution: {integrity: sha512-yuZO533Ftonxn/iyoqQzURzLQHMspvsIyfiCSNi1t/ER4eIQaR0SsmUOUm5b/lmSig7IWIUa5/BrbEkAPwcilQ==} + '@oxc-parser/binding-linux-arm-musleabihf@0.143.0': + resolution: {integrity: sha512-oKu4RcBlXSqo3OC62dp6YTnQaZIurNDpCX3BnAM3+bJxt7s8J2TJKMnC0UYer1qhlRaDCg6wkTaTw+2IlsZ12w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm64-gnu@0.133.0': - resolution: {integrity: sha512-hvpbqT5pN2rR+3+xtWeizwfR/aZ0vGceg6TqYMl+ToxMpk9/tmnX7kSvQnfEUkoua8mhogzvIKsAkn0wxgblBA==} + '@oxc-parser/binding-linux-arm64-gnu@0.143.0': + resolution: {integrity: sha512-WJBbD186AZmMGaSIhlktC+rPl8L3peCTXAh88Ih9uEvK0en2mPojGyCGYiL6mHtV1RPV3JyfJW5t6n5hh0lXhA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-arm64-musl@0.133.0': - resolution: {integrity: sha512-wJQGamIosQBoJHW9+S5XxrtKRo3eyJxsnS1XCPrqN0LHi8uw1pTqqTfn3t/NVuvbBg7Pumn4ez9Eidgcn0xbEg==} + '@oxc-parser/binding-linux-arm64-musl@0.143.0': + resolution: {integrity: sha512-t1AcYOwEzgceadT4v5e+vaCCb0AncCA3v5AyzfBAz/tMq11qzVccXKzNHtkWdjBsgvTKwRkaUF3QvT4kot8vcQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-ppc64-gnu@0.133.0': - resolution: {integrity: sha512-Koaz32/O5+abIfrNGdyndgRvdOZ9jEf5/z3Ep9h3h2QWpdDiUQpVwgH0OcMXCs+l9aXxPLtkupqyVig9W6FDKw==} + '@oxc-parser/binding-linux-ppc64-gnu@0.143.0': + resolution: {integrity: sha512-RsnO/NoD8376LMJq8JS8TwI0ieNaFRTuNe2GVJntQg6gwZNMENZsEbknHdVwjpOmxdGLGodcwaGSbAeRr5Bgjw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-gnu@0.133.0': - resolution: {integrity: sha512-R4vOjWzxhnNWHnVLeiB6jNuIifdy9vcMXZGPc7StXcxBovI+U2zg1QhZ9o8OjV80oGivs1lX5NfPLzk4IPqlRA==} + '@oxc-parser/binding-linux-riscv64-gnu@0.143.0': + resolution: {integrity: sha512-48fSVfR9TZi5CASZFyv0VC6z6BCoeihFsX031mAD/oSH7d9PYsPgIqza7d9mjP7Z2KTEpTFyH6SIu0Ui6R1vdg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-musl@0.133.0': - resolution: {integrity: sha512-iwgBNUTHiMdxARLYuM0SBlnYeb19iw1Ea5M+4ERZupCsBMLArti6FyZ6UfFjJxIiTDr2oW2DGQFxlQVQ/dW9rA==} + '@oxc-parser/binding-linux-riscv64-musl@0.143.0': + resolution: {integrity: sha512-T8CpdD+SfE01DnIOD4HpVxu0ZJOfMJ/VhCvikKfaXAxkZ+9veyLM/D2hpi7Y2hFUyPmVQO3FNZHmYzV/WlVR4g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-s390x-gnu@0.133.0': - resolution: {integrity: sha512-ZwZNo8FZmB/gVfboQl+wXilBigGl+6nQQs+nITOeAP/HcAOjiHl6XZJL9F/KXNEspODQcbjAiyjUbeCJd9a0fA==} + '@oxc-parser/binding-linux-s390x-gnu@0.143.0': + resolution: {integrity: sha512-QLdeMsCcacenPEFsfxnBUDF1y6opyz5+fmOz9bfD5Y7fiGCMupUCuB3KTPQhNwshIG1P9fPqar9MHxuBDd4bwQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-gnu@0.133.0': - resolution: {integrity: sha512-govCvWx1dBlED3uu4qXctxpRcouu9I8Kn+DBktGCl760JtlGJzc9l/OmPJKlYWSbrRqKkMZehNeZ/4Wfma7uSA==} + '@oxc-parser/binding-linux-x64-gnu@0.143.0': + resolution: {integrity: sha512-659ujfqLy6k7cuH3sbzhd8b+ztSq+i6E2E9pG78Q0BmHjAExfGIdgc8cGgMdwAozDXeZFHkJ+LXYJdWsaGdgyw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-musl@0.133.0': - resolution: {integrity: sha512-ssTlpXD5Mq9uCssDJPzlRWqBt4Y7Zzd9i+XZhWmK/9Y6KUIuAxVYTYiI8lxcGWi0+3/Cz4A8q9UrD4NK9Y2j7g==} + '@oxc-parser/binding-linux-x64-musl@0.143.0': + resolution: {integrity: sha512-/Mw/9j4TfZcnKphPrzOE6t4MMknXadcAAuVUlDRTF/ETWB5xOgQvOJV2Mh9We/bWxZdoxaGAdc+hy4GuYwQ2yQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxc-parser/binding-openharmony-arm64@0.133.0': - resolution: {integrity: sha512-51aByfXhPtLEdWG4a2Ihdw6cPWV1ei1AarALpFdDP8MLWDLE2NuUMgbo3DERR2Kt8fT/ok1GUvBiLxVGke9uUQ==} + '@oxc-parser/binding-openharmony-arm64@0.143.0': + resolution: {integrity: sha512-8rIKWR2BFuifbIK/1XB9wTaSdtuJ25dlE7ZQYDnEwj/2xH2vHsxnvIjHT3ZjSVuLLwGGlSslIG/fbOJ8TV8rTw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-parser/binding-wasm32-wasi@0.133.0': - resolution: {integrity: sha512-2e16tkKp+wDO2GTAmXfxbBcCmGEaFPIJEIRBBmVKNVXSc8/fJsSIaBGyFTPHM9ST5GNWgJcYIt94rDTks+PLwA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] - - '@oxc-parser/binding-win32-arm64-msvc@0.133.0': - resolution: {integrity: sha512-KPTNDKbxH1cglrqTyVeXHb4Pk4oksz8EcE1/v8zqU7N4UXbiHfA/IwtXZ2U77fnRAWBbgVkl/lZbL7o3hRdejg==} + '@oxc-parser/binding-win32-arm64-msvc@0.143.0': + resolution: {integrity: sha512-5U9kQYMfRRI6Zq7KDxgbIP0RMnKrfn3gLepRMgJuRkPSUALTiRCk9d/uyhb4lGDjUdzwK7mBkKqhLgzBPCmLpQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-parser/binding-win32-ia32-msvc@0.133.0': - resolution: {integrity: sha512-Una1bNYv9zCavQrfnDR9wuZVB3itLjCEH4Oz7i6CwAJN/Xq9b+zbbcxmvdkKvvJt4Ngc/MBmIYlbLo3zS4TQ0A==} + '@oxc-parser/binding-win32-ia32-msvc@0.143.0': + resolution: {integrity: sha512-25P7AaHk4R88Yv2XH4gToDVmh0cOu+bEURQU10CRrmvgabfRArSGAP5osmwUKeSUHj0VS50upbpbRWWW/m7mHA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-parser/binding-win32-x64-msvc@0.133.0': - resolution: {integrity: sha512-kjBhCiOGSYTwDJQuuZa7a94JbP8htWu7J0X1KwH74kV2K5eYf6eyJRYmkpCDvr0XEL8tMxYI4WU1VekblFCLgg==} + '@oxc-parser/binding-win32-x64-msvc@0.143.0': + resolution: {integrity: sha512-ORMh3JE1s6V7ySicdRK7vgaDQnn5o+UHg9ct989PlWHbel8O9ARrmWXM6kZjrBMtNucxNayQ8g69G0VfWzhANw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxc-project/types@0.133.0': - resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} - '@oxc-project/types@0.139.0': resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} - '@oxc-resolver/binding-android-arm-eabi@11.20.0': - resolution: {integrity: sha512-IjfWOXRgJFNdORDl+Uf1aibNgZY2guOD3zmOhx1BGVb/MIiqlFTdmjpQNplSN58lhWehnX4UNqC3QwpUo8pjJg==} + '@oxc-project/types@0.143.0': + resolution: {integrity: sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA==} + + '@oxc-resolver/binding-android-arm-eabi@11.24.2': + resolution: {integrity: sha512-y09e0L0SRI2OA2tUIrjBgoV3eH5hvUKXNkJqXmNo5V2WxIjyC7I7aJfRLMEVpA8yi95f90gFDvO0VMgrDw+vwA==} cpu: [arm] os: [android] - '@oxc-resolver/binding-android-arm64@11.20.0': - resolution: {integrity: sha512-QqslZAuFQG8Q9xm7JuIn8JUbvywhSBMVhuQHtYW+auirZJloS41oxUUaBXk7uUhZJgp44c5zQLeVvmFaDQB+2Q==} + '@oxc-resolver/binding-android-arm64@11.24.2': + resolution: {integrity: sha512-cl4icWaZFnLdg8m6qtnh5rBMuGbxc/ptStFHLeCNwr+2cZjkjNwQu/jYRS0CHlnPecOJMpuS5M6/BH+0J/YkEg==} cpu: [arm64] os: [android] - '@oxc-resolver/binding-darwin-arm64@11.20.0': - resolution: {integrity: sha512-MUcavykj2ewlR+kc5arpg4tC2RvzJkUxWtNv74pf7lcNk00GpIpN43vXMj+j6r4eMmfZhlb8hueKoIb8e9kAGQ==} + '@oxc-resolver/binding-darwin-arm64@11.24.2': + resolution: {integrity: sha512-At29QEMF6HajbQvgY8K6OXnHD1x9rad74xBEfmCB6ZqCGsdq75aK7tOYcTbOanMy8qdIBrfL3SMr3p/lfSlb9w==} cpu: [arm64] os: [darwin] - '@oxc-resolver/binding-darwin-x64@11.20.0': - resolution: {integrity: sha512-BGB16nRUK5Etiv//ihPyzj8Lj1px0mhh4YIfe0FDf045ywknfSm0GEbiRESpr6Q4K82AvnyaRIhhluHByvS4bg==} + '@oxc-resolver/binding-darwin-x64@11.24.2': + resolution: {integrity: sha512-A5Kqr1EUj4oIL5CF4WRssq/o5P0Y11cwoFouMRmQ7YnC/A8V93nv1nb7aSU8HwcgmXropjLNkVTl4MN87cu28Q==} cpu: [x64] os: [darwin] - '@oxc-resolver/binding-freebsd-x64@11.20.0': - resolution: {integrity: sha512-JZgtePaqj3qmD5XFHJaSLWzHRxQu0LaPkdoM1KJXYADvAaa83ijXHclV3ej3CueeW0wxfIAbGCZVP45J0CA7uQ==} + '@oxc-resolver/binding-freebsd-x64@11.24.2': + resolution: {integrity: sha512-R5xkRBRRz7ceH/P5Jrc6G7FmdUdgpLYyESFAUDVTNQ9K0sGPxcp4ljiwEwEqsvNcQ4sYbMRrWcHHBCu7ksAJVw==} cpu: [x64] os: [freebsd] - '@oxc-resolver/binding-linux-arm-gnueabihf@11.20.0': - resolution: {integrity: sha512-hOQ/p3ry3v3SchUBXicrrnszaI/UmYzM4wtS4RGfwgVUX7a+HbyQSzJ5aOzu+o6XZkFkS3ZXN4PZAzhOb77OSg==} + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': + resolution: {integrity: sha512-k/RuYL4L/R58IBn3wT5ma3Wh4k62bp1eYCFRWCmMsasUOqL+H6sW0VGFadEzKWXFFlz+2uIMoeMk9ySSZJHgbg==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm-musleabihf@11.20.0': - resolution: {integrity: sha512-2ArPksaw0AqeuGBfoS715VF+JvJQAhD2niWgjE5hVO+L+nAfikVQopvngCMX9x4BD8itWoQ3dnikrQyl5Ho5Jg==} + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': + resolution: {integrity: sha512-bnHAak3ujYfH5pKk4NieFNbvYvernfoQDgwLddbZ3OtMYrem87/qjlA+u+aKG0oZcqSLGCful/6/CEA+aeAgaA==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm64-gnu@11.20.0': - resolution: {integrity: sha512-0bJnmYFp62JdZ4nVMDUZ/C58BCZOCcqgKtnUlp7L9Ojf/czIN+3j72YlLPeWLkzlr6SlYvIQA4SGV/HyO0d+qg==} + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': + resolution: {integrity: sha512-vDT3KHgzYp47gmtNOqL2VNhCyl5Zv643eyxm//A68J8DeUGXrvD1pZFiaT4jSfe+RInfnn1R2yVHye4enx6RnA==} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-arm64-musl@11.20.0': - resolution: {integrity: sha512-wKHHzPKZo7Ufhv/Bt6yxT7FOgnIgW4gwXcJUipkShGp68W3wGVqvr1Sr0fY65lN0Oy6y41+g2kIDvkgZaMMUkw==} + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': + resolution: {integrity: sha512-+kMlQvbzfyEYtu5FcjE4p+ttBLpKW4d/AsAsuE69BxV6V4twZJeIQZFfD8gh/wqglY0MkPSezWXQH0jBV13MUw==} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-resolver/binding-linux-ppc64-gnu@11.20.0': - resolution: {integrity: sha512-RN8goF7Ie0B79L4i4G6OeBocTgSC56vJbQ65VJje+oXnldVpLnOU7j/AQ/dP94TcCS+Yh6WG8u3Qt4ETteXFNQ==} + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': + resolution: {integrity: sha512-shjfMhmZ3gq9fv/w7bi3PnZlgOPG+2QAOFf0BJF0EgBSIGZ6PMLN2zbGEblTUYB/NKVDRyYhE2ff3dJ1QqNPkA==} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-riscv64-gnu@11.20.0': - resolution: {integrity: sha512-5l1yU6/xQEqLZRzxqmMxJfWPslpwCmBsdDGaBvABPehxquCXDC7dd7oraNdKSJUMDXSM7VvVj8H2D2FTjU7oWw==} + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': + resolution: {integrity: sha512-zGelwFR5oRo+b69k8Lrzun86DyUHzfKN6cnjbR9l7Z7NIRznOE/2ZvPa1IUKqAL2PzAXOdwkfVqNvO1H2RlpAw==} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-riscv64-musl@11.20.0': - resolution: {integrity: sha512-xHEvkbgz6UC+A3JOyDQy76LkUaxsNSfIr3/GV8slwZsnuooJiIB34gzJfsyvR4JdCYNUUPsRJc/w/oWkODu+hg==} + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': + resolution: {integrity: sha512-qxZ1SWCXJY0eyhAlP6Lmo9F2Nrtx7EkYj9oCgL8apDPCwXwCEDA2U697bbT81JIc2IrVjxO4KX6WU2N+oN9Z4w==} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-resolver/binding-linux-s390x-gnu@11.20.0': - resolution: {integrity: sha512-aWPDUUmSeyHvlW+SoEUd+JIJsQhVhu6a5tBpDRMu058naPAchTgAVGCFy35zjbnFlt0i8hLWziff6HX0D3LU4g==} + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': + resolution: {integrity: sha512-sGCecF3cx2DFlH4t/z7ApnOnXqN48p5p5mlHDEnHTAukQa2P+qMVE4CwyWE9W+q/m3QJ7kKfGrIjax31f44oFQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-x64-gnu@11.20.0': - resolution: {integrity: sha512-x2YeSimvhJjKLVD8KSu8f/rqU1potcdEMkApIPJqjZWN7c2Fpt4g2X32WDg1p+XDAmyT7nuQGe0vnhvXeLbH+g==} + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': + resolution: {integrity: sha512-k/VlMMcSzMlahb3/fENM4rTlsJ0s3fFROA0KXPBmKggqmTSaE383sl8F3KCOXPLmVsYfW6hCitMhXCEtNeZxxg==} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-resolver/binding-linux-x64-musl@11.20.0': - resolution: {integrity: sha512-kcRLEIxpZefeYfLChjpgFf3ilBzRDZ+yobMrpRsQlSrxuFGtm3U6PMU7AaEpMqo3NfDGVyJJseAjnRLzMFHjwQ==} + '@oxc-resolver/binding-linux-x64-musl@11.24.2': + resolution: {integrity: sha512-8hbnZyNi97b/8wapYaIF9+t9GmZKBW2vunaOc3h9HGJptH7b7XpvZqOTBSm/MpTjr7H497BlgOaSfLUdhmy2bw==} cpu: [x64] os: [linux] libc: [musl] - '@oxc-resolver/binding-openharmony-arm64@11.20.0': - resolution: {integrity: sha512-HHcfnApSZGtKhTiHqe8OZruOZe5XuFQH5/E0Yhj3u8fnFvzkM4/k6WjacUf4SvA0SPEAbfbgYmVPuo0VX/fIBQ==} + '@oxc-resolver/binding-openharmony-arm64@11.24.2': + resolution: {integrity: sha512-MvyGik3a6pVgZ0t/kWlbmFxFLmXQJwgLsY2eYFHLpy0wGwRbfzeIGgDwQ3kXqE30z+kSXennRkCrT7TUvkptNg==} cpu: [arm64] os: [openharmony] - '@oxc-resolver/binding-wasm32-wasi@11.20.0': - resolution: {integrity: sha512-Tn0y1XOFYHNfK1wp1Z5QK8Rcld/bsOwRISQXfqAZ5IBpv8Gz1IvV39fUWNprqNdRizgcvFhOzWwFun2zkJsyBg==} + '@oxc-resolver/binding-wasm32-wasi@11.24.2': + resolution: {integrity: sha512-vHcssMPwO08RTvj/c0iOBz90attxyG3wQJ0dTcyEQK43LRpcdLWZlV5feBhv6Isn6ahbQIzHbCgfa81+RiML0Q==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-resolver/binding-win32-arm64-msvc@11.20.0': - resolution: {integrity: sha512-qPi25YNPe4YenS8MgsQU2+bIFHxxpLx1LVna2444cEHqNPhNjvWf9zqj4aWE43H9LpAsTmkkAlA3eL5ElBU3mA==} + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': + resolution: {integrity: sha512-uokJqro2iBqkFvJdKQLP7d8/BUmFwESQFVmIJUQKj1Xn1a/LysJoe1vmeECLF5b3jsV8CAL5sEMJXX6SdK9Nhg==} cpu: [arm64] os: [win32] - '@oxc-resolver/binding-win32-x64-msvc@11.20.0': - resolution: {integrity: sha512-Wb14jWEW8huH6It9F6sXd9vrYmIS7pMrgkU6sxpLxkP+9z+wRgs71hUEhRpcn8FOXAFa27FVWfY2tRpbfTzfLw==} + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': + resolution: {integrity: sha512-UqGPmo56KDfLlfXFAFIrNflHT8tFxWGEivWg3Zeyp4Uy2NlKN1FGPr6/BxcLGG3+kZ6Wp14g5Uj+n71boqZfiw==} cpu: [x64] os: [win32] @@ -4671,9 +4666,6 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.14.0: - resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} - get-tsconfig@4.14.1: resolution: {integrity: sha512-Dz/6HxkrxgNehhxLVeyv8sad9UzF2xBVeaKBQNDfJ5XiSXmp2gTR0eO0RWiT2NCKS5aGP9jjkOMggTN90qU50A==} @@ -5183,8 +5175,8 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - knip@6.16.1: - resolution: {integrity: sha512-TKMn1rxgH6h9vXR9Y0B+Cq7AdPTr9EI02IwoT65NzqYUkvoDQAaJ/aPybiFpAhZ1px6cNYYwXf86iHkBgzCo9w==} + knip@6.32.2: + resolution: {integrity: sha512-WXTXbmocrw7gqm1A1TQvFN0OgJ7hUSU6E1g6SPRIzzHFogUBhXByc7cYeOFVtJ2uODg7DP4VbESYBYnfbtBYsg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -5707,12 +5699,12 @@ packages: resolution: {integrity: sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==} engines: {node: '>= 0.4'} - oxc-parser@0.133.0: - resolution: {integrity: sha512-661RSx+ZcjBmjBYid+Fpp/2F5EbtildpeoZh5HdgnGs+jZ03nqQEQW8yGkt4BGyOC3OMPDQQRl8M5kqD2/g6jw==} + oxc-parser@0.143.0: + resolution: {integrity: sha512-ov0NzaDCOInknS7mP1cwKdJERt3utPW8ldjtdUXQ8Ty0GEFD08wk422vCUN0d7pST6kqtV7dxoI9w1Zi0l/9TA==} engines: {node: ^20.19.0 || >=22.12.0} - oxc-resolver@11.20.0: - resolution: {integrity: sha512-CblytBiV/a/ZXY34dsVU2NxhIOxMXst8CvDCtyBelVITgd7PLrKzbEbA6oKLdPjvDKDzCiW48qzmzZ+mYaqn+g==} + oxc-resolver@11.24.2: + resolution: {integrity: sha512-FY91FiDBj7ls5MsFS9jN3tjz2o0/zsdSsymlakySaBwVJZorHhkWyICLZMKxlu1R9vYo+sd3z1jwb4J8x7bNDw==} p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} @@ -6457,6 +6449,10 @@ packages: resolution: {integrity: sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==} engines: {node: '>= 18'} + smol-toml@1.8.0: + resolution: {integrity: sha512-kCZr2V3ch9i00x8zXRhjUNVcjG9ijES5dDudkXvUVCT5QlJNQWElSJdZqyPemffHoLNUYwOcou0Fy+ojN0uHSQ==} + engines: {node: '>= 18'} + sonner@2.0.7: resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} peerDependencies: @@ -6800,8 +6796,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - unbash@3.0.0: - resolution: {integrity: sha512-FeFPZ/WFT0mbRCuydiZzpPFlrYN8ZUpphQKoq4EeElVIYjYyGzPMxQR/simUwCOJIyVhpFk4RbtyO7RuMpMnHA==} + unbash@4.0.10: + resolution: {integrity: sha512-b7zoBQvpWp0vuN5q2vK2RRBR2SvuruQAs50DApdDveBSn3eSYd84IaHodFqQIMlvY9K2VnyBUEXgwOBuGU9GBg==} engines: {node: '>=14'} unbox-primitive@1.1.0: @@ -7681,6 +7677,12 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/core@1.11.2': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + '@emnapi/core@1.8.1': dependencies: '@emnapi/wasi-threads': 1.1.0 @@ -7697,6 +7699,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.11.2': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.8.1': dependencies: tslib: 2.8.1 @@ -8334,13 +8341,6 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.1 - optional: true - '@napi-rs/wasm-runtime@1.2.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: '@emnapi/core': 1.10.0 @@ -8355,6 +8355,13 @@ snapshots: '@tybys/wasm-util': 0.10.3 optional: true + '@napi-rs/wasm-runtime@1.2.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': + dependencies: + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@tybys/wasm-util': 0.10.3 + optional: true + '@next/bundle-analyzer@16.3.1': dependencies: webpack-bundle-analyzer: 4.10.1 @@ -8575,133 +8582,126 @@ snapshots: '@openai/codex@0.144.6-win32-x64': optional: true - '@oxc-parser/binding-android-arm-eabi@0.133.0': + '@oxc-parser/binding-android-arm-eabi@0.143.0': optional: true - '@oxc-parser/binding-android-arm64@0.133.0': + '@oxc-parser/binding-android-arm64@0.143.0': optional: true - '@oxc-parser/binding-darwin-arm64@0.133.0': + '@oxc-parser/binding-darwin-arm64@0.143.0': optional: true - '@oxc-parser/binding-darwin-x64@0.133.0': + '@oxc-parser/binding-darwin-x64@0.143.0': optional: true - '@oxc-parser/binding-freebsd-x64@0.133.0': + '@oxc-parser/binding-freebsd-x64@0.143.0': optional: true - '@oxc-parser/binding-linux-arm-gnueabihf@0.133.0': + '@oxc-parser/binding-linux-arm-gnueabihf@0.143.0': optional: true - '@oxc-parser/binding-linux-arm-musleabihf@0.133.0': + '@oxc-parser/binding-linux-arm-musleabihf@0.143.0': optional: true - '@oxc-parser/binding-linux-arm64-gnu@0.133.0': + '@oxc-parser/binding-linux-arm64-gnu@0.143.0': optional: true - '@oxc-parser/binding-linux-arm64-musl@0.133.0': + '@oxc-parser/binding-linux-arm64-musl@0.143.0': optional: true - '@oxc-parser/binding-linux-ppc64-gnu@0.133.0': + '@oxc-parser/binding-linux-ppc64-gnu@0.143.0': optional: true - '@oxc-parser/binding-linux-riscv64-gnu@0.133.0': + '@oxc-parser/binding-linux-riscv64-gnu@0.143.0': optional: true - '@oxc-parser/binding-linux-riscv64-musl@0.133.0': + '@oxc-parser/binding-linux-riscv64-musl@0.143.0': optional: true - '@oxc-parser/binding-linux-s390x-gnu@0.133.0': + '@oxc-parser/binding-linux-s390x-gnu@0.143.0': optional: true - '@oxc-parser/binding-linux-x64-gnu@0.133.0': + '@oxc-parser/binding-linux-x64-gnu@0.143.0': optional: true - '@oxc-parser/binding-linux-x64-musl@0.133.0': + '@oxc-parser/binding-linux-x64-musl@0.143.0': optional: true - '@oxc-parser/binding-openharmony-arm64@0.133.0': + '@oxc-parser/binding-openharmony-arm64@0.143.0': optional: true - '@oxc-parser/binding-wasm32-wasi@0.133.0': - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@oxc-parser/binding-win32-arm64-msvc@0.143.0': optional: true - '@oxc-parser/binding-win32-arm64-msvc@0.133.0': + '@oxc-parser/binding-win32-ia32-msvc@0.143.0': optional: true - '@oxc-parser/binding-win32-ia32-msvc@0.133.0': + '@oxc-parser/binding-win32-x64-msvc@0.143.0': optional: true - '@oxc-parser/binding-win32-x64-msvc@0.133.0': - optional: true - - '@oxc-project/types@0.133.0': {} - '@oxc-project/types@0.139.0': {} - '@oxc-resolver/binding-android-arm-eabi@11.20.0': + '@oxc-project/types@0.143.0': {} + + '@oxc-resolver/binding-android-arm-eabi@11.24.2': optional: true - '@oxc-resolver/binding-android-arm64@11.20.0': + '@oxc-resolver/binding-android-arm64@11.24.2': optional: true - '@oxc-resolver/binding-darwin-arm64@11.20.0': + '@oxc-resolver/binding-darwin-arm64@11.24.2': optional: true - '@oxc-resolver/binding-darwin-x64@11.20.0': + '@oxc-resolver/binding-darwin-x64@11.24.2': optional: true - '@oxc-resolver/binding-freebsd-x64@11.20.0': + '@oxc-resolver/binding-freebsd-x64@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm-gnueabihf@11.20.0': + '@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm-musleabihf@11.20.0': + '@oxc-resolver/binding-linux-arm-musleabihf@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm64-gnu@11.20.0': + '@oxc-resolver/binding-linux-arm64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-arm64-musl@11.20.0': + '@oxc-resolver/binding-linux-arm64-musl@11.24.2': optional: true - '@oxc-resolver/binding-linux-ppc64-gnu@11.20.0': + '@oxc-resolver/binding-linux-ppc64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-riscv64-gnu@11.20.0': + '@oxc-resolver/binding-linux-riscv64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-riscv64-musl@11.20.0': + '@oxc-resolver/binding-linux-riscv64-musl@11.24.2': optional: true - '@oxc-resolver/binding-linux-s390x-gnu@11.20.0': + '@oxc-resolver/binding-linux-s390x-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-x64-gnu@11.20.0': + '@oxc-resolver/binding-linux-x64-gnu@11.24.2': optional: true - '@oxc-resolver/binding-linux-x64-musl@11.20.0': + '@oxc-resolver/binding-linux-x64-musl@11.24.2': optional: true - '@oxc-resolver/binding-openharmony-arm64@11.20.0': + '@oxc-resolver/binding-openharmony-arm64@11.24.2': optional: true - '@oxc-resolver/binding-wasm32-wasi@11.20.0': + '@oxc-resolver/binding-wasm32-wasi@11.24.2': dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@emnapi/core': 1.11.2 + '@emnapi/runtime': 1.11.2 + '@napi-rs/wasm-runtime': 1.2.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) optional: true - '@oxc-resolver/binding-win32-arm64-msvc@11.20.0': + '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': optional: true - '@oxc-resolver/binding-win32-x64-msvc@11.20.0': + '@oxc-resolver/binding-win32-x64-msvc@11.24.2': optional: true '@parse/node-apn@8.1.0(supports-color@7.2.0)': @@ -11807,10 +11807,6 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.14.0: - dependencies: - resolve-pkg-maps: 1.0.0 - get-tsconfig@4.14.1: dependencies: resolve-pkg-maps: 1.0.0 @@ -12283,19 +12279,19 @@ snapshots: kleur@4.1.5: {} - knip@6.16.1: + knip@6.32.2: dependencies: - fdir: 6.5.0(picomatch@4.0.4) + fdir: 6.5.0(picomatch@4.0.5) formatly: 0.3.0 - get-tsconfig: 4.14.0 + get-tsconfig: 4.14.1 jiti: 2.7.0 - oxc-parser: 0.133.0 - oxc-resolver: 11.20.0 - picomatch: 4.0.4 - smol-toml: 1.6.1 + oxc-parser: 0.143.0 + oxc-resolver: 11.24.2 + picomatch: 4.0.5 + smol-toml: 1.8.0 strip-json-comments: 5.0.3 tinyglobby: 0.2.17 - unbash: 3.0.0 + unbash: 4.0.10 yaml: 2.9.0 zod: 4.4.3 @@ -12777,52 +12773,51 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - oxc-parser@0.133.0: + oxc-parser@0.143.0: dependencies: - '@oxc-project/types': 0.133.0 + '@oxc-project/types': 0.143.0 optionalDependencies: - '@oxc-parser/binding-android-arm-eabi': 0.133.0 - '@oxc-parser/binding-android-arm64': 0.133.0 - '@oxc-parser/binding-darwin-arm64': 0.133.0 - '@oxc-parser/binding-darwin-x64': 0.133.0 - '@oxc-parser/binding-freebsd-x64': 0.133.0 - '@oxc-parser/binding-linux-arm-gnueabihf': 0.133.0 - '@oxc-parser/binding-linux-arm-musleabihf': 0.133.0 - '@oxc-parser/binding-linux-arm64-gnu': 0.133.0 - '@oxc-parser/binding-linux-arm64-musl': 0.133.0 - '@oxc-parser/binding-linux-ppc64-gnu': 0.133.0 - '@oxc-parser/binding-linux-riscv64-gnu': 0.133.0 - '@oxc-parser/binding-linux-riscv64-musl': 0.133.0 - '@oxc-parser/binding-linux-s390x-gnu': 0.133.0 - '@oxc-parser/binding-linux-x64-gnu': 0.133.0 - '@oxc-parser/binding-linux-x64-musl': 0.133.0 - '@oxc-parser/binding-openharmony-arm64': 0.133.0 - '@oxc-parser/binding-wasm32-wasi': 0.133.0 - '@oxc-parser/binding-win32-arm64-msvc': 0.133.0 - '@oxc-parser/binding-win32-ia32-msvc': 0.133.0 - '@oxc-parser/binding-win32-x64-msvc': 0.133.0 + '@oxc-parser/binding-android-arm-eabi': 0.143.0 + '@oxc-parser/binding-android-arm64': 0.143.0 + '@oxc-parser/binding-darwin-arm64': 0.143.0 + '@oxc-parser/binding-darwin-x64': 0.143.0 + '@oxc-parser/binding-freebsd-x64': 0.143.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.143.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.143.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.143.0 + '@oxc-parser/binding-linux-arm64-musl': 0.143.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.143.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.143.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.143.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.143.0 + '@oxc-parser/binding-linux-x64-gnu': 0.143.0 + '@oxc-parser/binding-linux-x64-musl': 0.143.0 + '@oxc-parser/binding-openharmony-arm64': 0.143.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.143.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.143.0 + '@oxc-parser/binding-win32-x64-msvc': 0.143.0 - oxc-resolver@11.20.0: + oxc-resolver@11.24.2: optionalDependencies: - '@oxc-resolver/binding-android-arm-eabi': 11.20.0 - '@oxc-resolver/binding-android-arm64': 11.20.0 - '@oxc-resolver/binding-darwin-arm64': 11.20.0 - '@oxc-resolver/binding-darwin-x64': 11.20.0 - '@oxc-resolver/binding-freebsd-x64': 11.20.0 - '@oxc-resolver/binding-linux-arm-gnueabihf': 11.20.0 - '@oxc-resolver/binding-linux-arm-musleabihf': 11.20.0 - '@oxc-resolver/binding-linux-arm64-gnu': 11.20.0 - '@oxc-resolver/binding-linux-arm64-musl': 11.20.0 - '@oxc-resolver/binding-linux-ppc64-gnu': 11.20.0 - '@oxc-resolver/binding-linux-riscv64-gnu': 11.20.0 - '@oxc-resolver/binding-linux-riscv64-musl': 11.20.0 - '@oxc-resolver/binding-linux-s390x-gnu': 11.20.0 - '@oxc-resolver/binding-linux-x64-gnu': 11.20.0 - '@oxc-resolver/binding-linux-x64-musl': 11.20.0 - '@oxc-resolver/binding-openharmony-arm64': 11.20.0 - '@oxc-resolver/binding-wasm32-wasi': 11.20.0 - '@oxc-resolver/binding-win32-arm64-msvc': 11.20.0 - '@oxc-resolver/binding-win32-x64-msvc': 11.20.0 + '@oxc-resolver/binding-android-arm-eabi': 11.24.2 + '@oxc-resolver/binding-android-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-arm64': 11.24.2 + '@oxc-resolver/binding-darwin-x64': 11.24.2 + '@oxc-resolver/binding-freebsd-x64': 11.24.2 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.24.2 + '@oxc-resolver/binding-linux-arm64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-arm64-musl': 11.24.2 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-riscv64-musl': 11.24.2 + '@oxc-resolver/binding-linux-s390x-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-gnu': 11.24.2 + '@oxc-resolver/binding-linux-x64-musl': 11.24.2 + '@oxc-resolver/binding-openharmony-arm64': 11.24.2 + '@oxc-resolver/binding-wasm32-wasi': 11.24.2 + '@oxc-resolver/binding-win32-arm64-msvc': 11.24.2 + '@oxc-resolver/binding-win32-x64-msvc': 11.24.2 p-limit@2.3.0: dependencies: @@ -13677,6 +13672,8 @@ snapshots: smol-toml@1.6.1: {} + smol-toml@1.8.0: {} + sonner@2.0.7(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: react: 19.2.7 @@ -13972,8 +13969,8 @@ snapshots: tinyglobby@0.2.17: dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 tinyrainbow@3.1.0: {} @@ -14098,7 +14095,7 @@ snapshots: typescript@6.0.3: {} - unbash@3.0.0: {} + unbash@4.0.10: {} unbox-primitive@1.1.0: dependencies: @@ -14224,7 +14221,7 @@ snapshots: dependencies: lightningcss: 1.32.0 picomatch: 4.0.5 - postcss: 8.5.25 + postcss: 8.5.26 rolldown: 1.1.5 tinyglobby: 0.2.17 optionalDependencies: From 7e1c63cec3ed531f2416b75accd913ed13ac4517 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Sun, 23 Aug 2026 18:53:17 +0200 Subject: [PATCH 2/8] Drop unimported re-exports from the derived-metrics barrel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The barrel mirrored every export under src/lib/insights/derived. Of the 124 lines, 101 had no importer: consumers and per-metric tests reach for the concrete module (./sleep-score, ./trajectory, …) directly. Keep the cross-cutting surface — registry, dispatcher, baseline loader, and the value shapes outside consumers read — and say in the header that the barrel is not a mirror, so the next addition needs a consumer first. Definitions are untouched; only the re-export lines go. --- src/lib/insights/derived/index.ts | 188 ++++-------------------------- 1 file changed, 25 insertions(+), 163 deletions(-) diff --git a/src/lib/insights/derived/index.ts b/src/lib/insights/derived/index.ts index 3197156a9..9d5026d18 100644 --- a/src/lib/insights/derived/index.ts +++ b/src/lib/insights/derived/index.ts @@ -1,185 +1,47 @@ /** * v1.10.0 — public barrel for the derived-metrics layer. * - * The one module every consumer imports from. Append-only per wave — - * Wave 1 exports the foundation (`Derived` + coverage builders + - * registry + norms + the flagship baseline engine + the route - * dispatcher); W2/W3 append their per-metric engines (`fitness-age`, - * `vascular-age`, `sleep-score`, `readiness`) here. + * Carries the cross-cutting surface: the registry (which metrics exist and + * how they are archetyped), the route dispatcher, the baseline profile + * loader, and the handful of per-metric compute engines and value shapes + * that consumers outside this directory actually reach for. * - * Re-exports the client-safe types/coverage builders and the - * server-only compute engines from one place; consumers import only what - * they need. (A `"use client"` component must value-import only from - * `./types` + `./coverage` + `./registry` — those are server-import-free. - * The route + server consumers may import the engines below.) + * It is deliberately NOT a mirror of every export under `./`. The per-metric + * scoring helpers, their `*Opts` / `*Band` types and the sub-score weights are + * imported from their concrete module (`./sleep-score`, `./trajectory`, …) by + * the code and tests that use them; re-exporting them here only produced lines + * nothing imported. Add a line below when an outside consumer appears, not in + * anticipation of one. + * + * A `"use client"` component must value-import only from `./types`, + * `./coverage` and `./registry` — those are server-import-free. The route and + * server consumers may import the engines below. */ -// ── client-safe contract (types + pure builders + metadata) ────────── -export type { - Derived, - DerivedOk, - DerivedInsufficient, - DerivedCoverage, - DerivedConfidence, - DerivedConfidenceBand, - DerivedProvenance, - DerivedProvenanceSource, -} from "./types"; +// ── client-safe contract ───────────────────────────────────────────── export { isDerivedOk } from "./types"; -export { - deriveCoverage, - buildOk, - buildInsufficient, - scoreToBand, - nowProvenanceTimestamp, -} from "./coverage"; -export type { DeriveCoverageArgs } from "./coverage"; - export { DERIVED_METRIC_IDS, - VITALS_BASELINE_TYPES, TRAJECTORY_TYPES, - SAME_TIME_BASELINE_TYPES, - SAME_TIME_BASELINE_WINDOW_DAYS, - SAME_TIME_BASELINE_MIN_HISTORY_DAYS, isDerivedMetricId, - getDerivedMetricMeta, - isVitalsBaselineType, - isTrajectoryType, - isSameTimeBaselineType, } from "./registry"; -export type { - DerivedMetricId, - DerivedMetricMeta, - DerivedArchetype, -} from "./registry"; - -export { - lookupNormalRange, - hasSharpenedNorm, - predictSixMinuteWalkDistance, -} from "./norms"; -export type { NormRange, NormSex } from "./norms"; +export type { DerivedMetricId } from "./registry"; // ── server-only compute engines (do NOT value-import from a client component) ── -export { - computeVitalsBaseline, - loadBaselineProfile, - buildBaselineBand, - median, - medianAbsoluteDeviation, -} from "./baseline"; -export type { - VitalsBaselineValue, - VitalsBaselineOpts, - BaselineProfile, -} from "./baseline"; +export { loadBaselineProfile } from "./baseline"; +export type { BaselineProfile } from "./baseline"; export { computeDerivedMetric } from "./dispatch"; -export type { DerivedComputeArgs } from "./dispatch"; -// ── W2b vitals tier: passthrough re-frames + derived bands ─────────── -export { - computeFitnessAge, - placeVo2Band, - fitnessAgeDeltaYears, -} from "./fitness-age"; -export type { FitnessAgeValue, FitnessBand } from "./fitness-age"; +export type { SleepScoreValue } from "./sleep-score"; -export { - computeSixMinuteWalkBand, - placeSixMinuteWalkBand, -} from "./six-minute-walk"; -export type { SixMinuteWalkValue, SixMinuteWalkBand } from "./six-minute-walk"; +export { computeReadiness } from "./readiness"; +export type { ReadinessValue, ReadinessComponentKey } from "./readiness"; -export { computeVascularAgeDelta, placeVascularBand } from "./vascular-age"; -export type { VascularAgeDeltaValue, VascularBand } from "./vascular-age"; +export { computeCoincidentDeviation } from "./coincident-deviation"; -export { computeHrvBalance, placeHrvBalance } from "./hrv-balance"; -export type { HrvBalanceValue, HrvBalanceBand } from "./hrv-balance"; +export type { WellnessScoreValue } from "./wellness-scores"; -export { computeBmi, classifyBmi } from "./bmi"; -export type { BmiValue, BmiBand, BmiCategory } from "./bmi"; -// ── W3 composites (server-only compute engines) ────────────────────── -export { - computeSleepScore, - blendSleepSubScores, - reconstructNights, - sleepNeedMinutes, - scoreSufficiency, - scoreEfficiency, - scoreComposition, - scoreConsistency, - scoreTiming, - SLEEP_SUBSCORE_WEIGHTS, -} from "./sleep-score"; -export type { - SleepScoreValue, - SleepScoreOpts, - SleepSubScore, - SleepSubScoreKey, - NightSummary, -} from "./sleep-score"; - -export { - computeReadiness, - blendReadinessComponents, - scoreDeviation, - READINESS_WEIGHTS, - READINESS_MIN_COMPONENTS, -} from "./readiness"; -export type { - ReadinessValue, - ReadinessOpts, - ReadinessComponent, - ReadinessComponentKey, -} from "./readiness"; - -export { - computeCoincidentDeviation, - classifyDeviation, - COINCIDENT_FIRE_THRESHOLD, - COINCIDENT_MIN_BANDS, -} from "./coincident-deviation"; -export type { - CoincidentDeviationValue, - CoincidentDeviationOpts, - VitalDeviation, -} from "./coincident-deviation"; - -// ── persisted nightly wellness scores (passthrough read) ───────────── -export { - computeWellnessScore, - bandWellnessScore, - WELLNESS_SCORE_TYPES, -} from "./wellness-scores"; -export type { - WellnessScoreValue, - WellnessScoreBand, - WellnessScoreType, - WellnessScoreOpts, -} from "./wellness-scores"; - -// ── v1.11.0 (Epic B, Pillar 3) forecasting engine (server-only) ────── -export { - computeTrajectory, - fitOls, - predictionIntervalHalfWidth, - TRAJECTORY_MIN_R2, - TRAJECTORY_MIN_HISTORY_DAYS, -} from "./trajectory"; -export type { - TrajectoryValue, - TrajectoryPoint, - TrajectoryOpts, - OlsFit, -} from "./trajectory"; - -// ── v1.34.0 same-time baseline for cumulative metrics (server-only) ── -export { computeSameTimeBaseline } from "./same-time-baseline"; -export type { - SameTimeBaselineValue, - SameTimeBaselineOpts, - SameTimeBand, -} from "./same-time-baseline"; +export { computeTrajectory } from "./trajectory"; +export type { TrajectoryValue } from "./trajectory"; From c00904068b0f49c545b648738ec856741914929d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Sun, 23 Aug 2026 18:53:55 +0200 Subject: [PATCH 3/8] Drop unimported re-exports from the MCP barrel The barrel mirrored the tool, resource, prompt, write and scope registries; its only consumer is the /mcp transport route, which needs three of them. The registries are imported from their concrete module by ./server and by their own tests, so the other 31 lines had no importer. --- src/lib/mcp/index.ts | 52 ++++++++++---------------------------------- 1 file changed, 11 insertions(+), 41 deletions(-) diff --git a/src/lib/mcp/index.ts b/src/lib/mcp/index.ts index 1302cec27..7a734c5eb 100644 --- a/src/lib/mcp/index.ts +++ b/src/lib/mcp/index.ts @@ -1,47 +1,17 @@ /** * HealthLog MCP server — barrel. * - * A read-only-by-default Model Context Protocol surface that re-exports + * A read-only-by-default Model Context Protocol surface that exposes * HealthLog's existing server-authoritative read paths over the MCP wire, so a * user can query their own health data from any MCP-capable assistant. The tool - * / resource layer here is transport-agnostic; transports (stdio now, remote - * `/mcp` later) attach to `createMcpServer(ctx)`. + * / resource layer under this directory is transport-agnostic; transports + * attach to `createMcpServer(ctx)`. + * + * The barrel carries only what the remote `/mcp` transport route needs. The + * tool, resource, prompt and write registries are imported from their concrete + * module by `./server` and by their own tests — mirroring them here produced + * lines nothing imported. */ -export { createMcpServer, MCP_SERVER_NAME, MCP_SERVER_VERSION } from "./server"; -export { resolveMcpAuthContext, type McpAuthContext } from "./auth"; -export { MCP_TOOLS, MCP_TOOL_NAMES, type McpToolDefinition } from "./tools"; -export { MCP_WRITE_TOOLS, MCP_WRITE_TOOL_NAMES } from "./write-tools"; -export { - logMcpMeasurement, - logMcpMood, - type McpMeasurementResult, - type McpMoodResult, -} from "./writes"; -export { - MCP_RESOURCES, - MCP_RESOURCE_URIS, - type McpResourceDefinition, -} from "./resources"; -export { - MCP_PROMPTS, - MCP_PROMPT_NAMES, - type McpPromptDefinition, - type McpPromptResult, - type McpPromptMessage, -} from "./prompts"; -export { - getCorrelation, - compareMetric, - getMetricBaseline, - detectChangepoints, - resolveRichMetric, - type RichMetric, -} from "./rich-reads"; -export { - SCOPE_HEALTH_READ, - SCOPE_HEALTH_WRITE, - SCOPE_WILDCARD, - tokenAllowsRead, - tokenAllowsWrite, - sessionBinding, -} from "./scopes"; +export { createMcpServer } from "./server"; +export { resolveMcpAuthContext } from "./auth"; +export { SCOPE_HEALTH_READ } from "./scopes"; From 244a939d05f1614bcf09c8b2273a00c3fe2787aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Sun, 23 Aug 2026 18:55:52 +0200 Subject: [PATCH 4/8] Drop unimported re-exports from the remaining barrels Same shape as the derived and MCP barrels: the line in the barrel had no importer because the consumer imports the concrete module. Affected: cycle (15), coach tools (9), record-settings (8), links (4), data-list, workout-detail and analytics/score (1 each). analytics/score also carried CompositeValue on an explicit export line above an export * of the same module, so the name stays exported either way. Definitions are untouched. --- src/components/data-list/index.ts | 1 - .../insights/workout-detail/index.ts | 5 +---- src/lib/ai/coach/tools/index.ts | 22 +++---------------- src/lib/analytics/score/index.ts | 3 +-- src/lib/cycle/index.ts | 18 +-------------- src/lib/links/index.ts | 4 ---- src/lib/record-settings/index.ts | 13 ++--------- 7 files changed, 8 insertions(+), 58 deletions(-) diff --git a/src/components/data-list/index.ts b/src/components/data-list/index.ts index e57f9faa4..5ae4cd35f 100644 --- a/src/components/data-list/index.ts +++ b/src/components/data-list/index.ts @@ -16,5 +16,4 @@ export { selectAllState, selectedIdsOnPage, selectedCountOnPage, - type SelectAllState, } from "./selection"; diff --git a/src/components/insights/workout-detail/index.ts b/src/components/insights/workout-detail/index.ts index 1b77f8345..ed2a654a1 100644 --- a/src/components/insights/workout-detail/index.ts +++ b/src/components/insights/workout-detail/index.ts @@ -11,7 +11,4 @@ export { WorkoutDetailZones } from "./zones"; export { WorkoutDetailRoute } from "./route-map"; export { WorkoutDetailSplits } from "./splits"; export { WorkoutDetailDayContext } from "./day-context"; -export { - WorkoutInsightCard, - type WorkoutActivityInsightData, -} from "./insight-slot"; +export { WorkoutInsightCard } from "./insight-slot"; diff --git a/src/lib/ai/coach/tools/index.ts b/src/lib/ai/coach/tools/index.ts index 55d8b8a1f..6c3972b28 100644 --- a/src/lib/ai/coach/tools/index.ts +++ b/src/lib/ai/coach/tools/index.ts @@ -6,28 +6,12 @@ * figures, and a bounded loop that executes them. The legacy snapshot path * stays alive as the no-tools fallback (per-provider `supportsTools`). */ -export { - COACH_TOOL_DEFS, - COACH_TOOL_NAMES, - isCoachToolName, - type CoachToolName, -} from "./definitions"; -export { - executeCoachTool, - type CoachToolResult, - type CoachToolTrace, -} from "./executor"; +export { COACH_TOOL_DEFS } from "./definitions"; +export type { CoachToolTrace } from "./executor"; export { buildCoachDataInventory, renderDataInventory, renderFocusHint, - type CoachDataInventory, - type InventoryEntry, } from "./inventory"; export { buildToolModeAddendum } from "./system-addendum"; -export { - runCoachToolLoop, - MAX_ROUNDS, - HARD_CAP, - type CoachToolLoopResult, -} from "./loop"; +export { runCoachToolLoop, MAX_ROUNDS } from "./loop"; diff --git a/src/lib/analytics/score/index.ts b/src/lib/analytics/score/index.ts index b06e0e637..a044997c5 100644 --- a/src/lib/analytics/score/index.ts +++ b/src/lib/analytics/score/index.ts @@ -11,7 +11,6 @@ import { SCORE_PILLAR_DOMAINS, SCORE_PILLAR_IDS, SCORE_VERSION, - type CompositeValue, type HealthScoreReport, type PillarInputs, type ScorePillarId, @@ -95,5 +94,5 @@ export function computeHealthScore( }; } -export type { CompositeValue, HealthScoreReport }; +export type { HealthScoreReport }; export * from "./types"; diff --git a/src/lib/cycle/index.ts b/src/lib/cycle/index.ts index 14fac3fa0..4dc97406a 100644 --- a/src/lib/cycle/index.ts +++ b/src/lib/cycle/index.ts @@ -10,25 +10,9 @@ export * from "./types"; export * from "./day-math"; export { predictCycle, - estimateCycleLength, - estimatePeriodLength, - observedPeriodLength, - detectTempShift, - detectMucusPeak, - confirmSymptothermal, - detectTemperatureTrend, - detectLhSurgeOvulation, median, mad, resolveLuteal, clampLuteal, } from "./prediction"; -export { phaseForDay, phaseSeries, type PhaseCycle } from "./phase"; -export { - resolveCycleVerdict, - type CycleVerdict, - type CycleVerdictState, - type CyclePhaseSpan, - type CycleProfileLengths, - type VerdictCalendarDay, -} from "./verdict"; +export { phaseForDay, type PhaseCycle } from "./phase"; diff --git a/src/lib/links/index.ts b/src/lib/links/index.ts index 3de5c1e27..e3f340e04 100644 --- a/src/lib/links/index.ts +++ b/src/lib/links/index.ts @@ -41,9 +41,5 @@ export { listTargets, listTargetsBySource, listDistinctTargets, - type LinkSourceKind, type LinkTargetKind, - type LinkRequest, - type LinkResult, - type LinkedTarget, } from "@/lib/links/link-service"; diff --git a/src/lib/record-settings/index.ts b/src/lib/record-settings/index.ts index f479498fb..525bae0a7 100644 --- a/src/lib/record-settings/index.ts +++ b/src/lib/record-settings/index.ts @@ -1,17 +1,9 @@ -export { - assertRecordSettingsAccess, - resolveGuardianRecordSettingsAccess, - type RecordSettingsAccess, -} from "./access"; -export { toRecordSettingsDto, type RecordSettingsDto } from "./dto"; +export { resolveGuardianRecordSettingsAccess } from "./access"; +export { toRecordSettingsDto } from "./dto"; export { resolveManagedIntegrationState } from "./integrations"; export { classifySettingsDestination, - isGuardianSettingsWriteAllowed, isManageDelegateSettingsDestination, - SETTINGS_DESTINATION_INVENTORY, - type SettingsDestinationClassification, - type SettingsDestinationKind, } from "./classification"; export { isManagedRecordSettingsFamily, @@ -22,6 +14,5 @@ export { parseManagedRecordSettingsPatch, safeParseManagedRecordSettingsPatch, type ManagedRecordSettingsFamily, - type ManagedRecordSettingsPatch, } from "./configuration"; export { assertRecordSettingsResponseForRecord } from "./response"; From 0e9c5f1a0099eab04f604cd110a9b3a236da0c7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Sun, 23 Aug 2026 18:58:14 +0200 Subject: [PATCH 5/8] Drop unimported re-exports outside the barrels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Eighteen modules carried a convenience re-export of a symbol defined elsewhere. In each case the callers the comment describes now import the concrete module directly, so the line had no importer left. Where the whole re-export block went, the comment explaining it went with it — doctor-report-pdf-core, trend-card and medication-extract-prompt each claimed to be a single import surface that nothing was using. Definitions are untouched; imports that existed only to feed a removed re-export go too. --- src/components/charts/trend-card.tsx | 6 ------ src/components/insights/coach-panel/use-coach.ts | 2 -- src/components/medications/wizard/wizard-payload.ts | 7 ++----- src/lib/ai/coach/about-me.ts | 2 -- src/lib/ai/coach/medication-extract-prompt.ts | 7 ------- src/lib/ai/coach/snapshot-freshness.ts | 7 +------ src/lib/auth/invite-token.ts | 2 -- src/lib/auth/oidc-native-handoff.ts | 6 ------ src/lib/crypto/encryption-corpus.ts | 3 --- src/lib/cycle/custom-symptoms.ts | 2 -- src/lib/doctor-report-pdf-core.ts | 8 +------- src/lib/fhir/lab-loinc.ts | 3 --- src/lib/insights/derived/coach-read.ts | 7 +------ src/lib/insights/mood-aggregates.ts | 6 +----- src/lib/insights/status-provider.ts | 3 --- src/lib/report-selection/saved-profile.ts | 7 ------- src/lib/tz/resolver.ts | 1 - src/lib/validations/labs.ts | 3 --- 18 files changed, 6 insertions(+), 76 deletions(-) diff --git a/src/components/charts/trend-card.tsx b/src/components/charts/trend-card.tsx index fe0e873be..63d4bbfcf 100644 --- a/src/components/charts/trend-card.tsx +++ b/src/components/charts/trend-card.tsx @@ -15,14 +15,8 @@ import { getTrendSentiment, sentimentColorClass, type TrendDirectionSentiment, - type TrendSentimentDirection, } from "@/lib/insights/trend-sentiment"; -// v1.9.0 — the metric-aware sentiment mapping moved to a shared module so the -// range-delta caption paints the same colour for the same signal. Re-exported -// here so existing `@/components/charts/trend-card` importers keep the type. -export type { TrendDirectionSentiment, TrendSentimentDirection }; - interface SecondaryMetric { /** Sub-value latest reading (e.g. diastolic when latest is systolic). */ latest: number | null; diff --git a/src/components/insights/coach-panel/use-coach.ts b/src/components/insights/coach-panel/use-coach.ts index 532d58f60..a08d4a325 100644 --- a/src/components/insights/coach-panel/use-coach.ts +++ b/src/components/insights/coach-panel/use-coach.ts @@ -13,7 +13,6 @@ import { toast } from "sonner"; import type { CoachConversationAttachmentDTO, CoachConversationDetailDTO, - CoachConversationDTO, CoachConversationsPage, CoachProvenance, CoachScope, @@ -1118,7 +1117,6 @@ export function useSendCoachMessage(opts: UseSendCoachMessageOptions = {}) { // `@/lib/ai/coach/types` directly. export type { CoachConversationAttachmentDTO, - CoachConversationDTO, CoachConversationDetailDTO, CoachProvenance, CoachSuggestion, diff --git a/src/components/medications/wizard/wizard-payload.ts b/src/components/medications/wizard/wizard-payload.ts index 7413270a9..55ca08a23 100644 --- a/src/components/medications/wizard/wizard-payload.ts +++ b/src/components/medications/wizard/wizard-payload.ts @@ -44,10 +44,7 @@ */ import { encodeCadence } from "@/components/medications/scheduling/cadence-picker"; -import { - dateToIsoString, - isoStringToDate, -} from "@/components/medications/scheduling/course-window-row"; +import { dateToIsoString } from "@/components/medications/scheduling/course-window-row"; import { type CadenceKind, type CadenceSubControls, @@ -1277,4 +1274,4 @@ function subControlsFromRrule(rrule: string): CadenceSubControls { // Re-exports — convenience for the dialog and tests // ──────────────────────────────────────────────────────────────────── -export { dateToIsoString, isoStringToDate }; +export { dateToIsoString }; diff --git a/src/lib/ai/coach/about-me.ts b/src/lib/ai/coach/about-me.ts index 24c514cc8..31cf2ffa7 100644 --- a/src/lib/ai/coach/about-me.ts +++ b/src/lib/ai/coach/about-me.ts @@ -42,8 +42,6 @@ import { } from "@/lib/validations/health-profile-facts"; import { decryptHealthProfileFactValue } from "@/lib/profile/health-facts"; -export { ABOUT_ME_MAX_CHARS } from "@/lib/validations/about-me"; - export interface SelfContext { aboutMe: string | null; conditions: string | null; diff --git a/src/lib/ai/coach/medication-extract-prompt.ts b/src/lib/ai/coach/medication-extract-prompt.ts index c5858d08c..2132c0573 100644 --- a/src/lib/ai/coach/medication-extract-prompt.ts +++ b/src/lib/ai/coach/medication-extract-prompt.ts @@ -90,13 +90,6 @@ export type MedicationExtractionResult = z.infer< typeof medicationExtractionSchema >; -/** - * Re-export the wizard `CadenceKind` + `WeekdayToken` types so callers - * (the route, the tests) import a single module rather than chasing - * the wizard types directory. - */ -export type { CadenceKind, WeekdayToken }; - /** * Build the system prompt. Same shape across calls — the model only * sees the user's free text via `buildUserPrompt()`. The system prompt diff --git a/src/lib/ai/coach/snapshot-freshness.ts b/src/lib/ai/coach/snapshot-freshness.ts index 7f27fe8e7..09cf91dc8 100644 --- a/src/lib/ai/coach/snapshot-freshness.ts +++ b/src/lib/ai/coach/snapshot-freshness.ts @@ -26,10 +26,7 @@ * * Pure and in-place — the snapshot is a plain record by the time it gets here. */ -import { - TODAY_CLAIM_MAX_AGE_DAYS, - isCurrentForTodayClaim, -} from "@/lib/insights/measurement-freshness"; +import { isCurrentForTodayClaim } from "@/lib/insights/measurement-freshness"; /** When a metric block's series actually ends, and what may be said about it. */ export interface SnapshotAsOf { @@ -187,5 +184,3 @@ export function annotateSnapshotFreshness(snapshot: Record): { } return { stale, coarseWithheld }; } - -export { TODAY_CLAIM_MAX_AGE_DAYS }; diff --git a/src/lib/auth/invite-token.ts b/src/lib/auth/invite-token.ts index ecc15be0b..2916cb20d 100644 --- a/src/lib/auth/invite-token.ts +++ b/src/lib/auth/invite-token.ts @@ -20,8 +20,6 @@ import { randomBytes } from "node:crypto"; import { prisma } from "@/lib/db"; import { hashToken } from "@/lib/auth/hmac"; -export { INVITE_MAX_TTL_DAYS } from "@/lib/validations/invite"; - /** Raw-token prefix — distinct from `hlk_` (API) and `hlr_` (refresh). */ export const INVITE_TOKEN_PREFIX = "hlv_"; diff --git a/src/lib/auth/oidc-native-handoff.ts b/src/lib/auth/oidc-native-handoff.ts index 35fec970c..c2d9076cc 100644 --- a/src/lib/auth/oidc-native-handoff.ts +++ b/src/lib/auth/oidc-native-handoff.ts @@ -44,13 +44,7 @@ export function buildNativeCallbackUrl(params: Record): string { // Re-export the shared mint/consume core so the OIDC callback + token route // keep importing from here unchanged. export { - HANDOFF_CODE_PREFIX, mintNativeHandoff, consumeNativeHandoff, stampIssuedRefreshToken, } from "@/lib/auth/native-handoff"; -export type { - HandoffFlow, - MintedHandoff, - ConsumeHandoffResult, -} from "@/lib/auth/native-handoff"; diff --git a/src/lib/crypto/encryption-corpus.ts b/src/lib/crypto/encryption-corpus.ts index 4230770eb..cadeee22d 100644 --- a/src/lib/crypto/encryption-corpus.ts +++ b/src/lib/crypto/encryption-corpus.ts @@ -40,7 +40,6 @@ import { } from "@/lib/crypto"; import { ENCRYPTED_COLUMNS, - encryptedColumnKey, type EncryptedColumn, } from "@/lib/crypto/encrypted-columns"; @@ -381,5 +380,3 @@ export async function rotateCorpus( totalErrors, }; } - -export { encryptedColumnKey }; diff --git a/src/lib/cycle/custom-symptoms.ts b/src/lib/cycle/custom-symptoms.ts index 7435d731a..fcfd4bd66 100644 --- a/src/lib/cycle/custom-symptoms.ts +++ b/src/lib/cycle/custom-symptoms.ts @@ -26,10 +26,8 @@ import { CUSTOM_SYMPTOM_KEY_PREFIX } from "@/lib/cycle/custom-symptoms-shared"; export { CUSTOM_SYMPTOM_KEY_PREFIX, - CUSTOM_SYMPTOM_CATEGORY_KEY, CUSTOM_SYMPTOM_CATEGORY_ID, MAX_CUSTOM_SYMPTOMS_PER_USER, - CUSTOM_SYMPTOM_ICON_ALLOWLIST, isCustomSymptomKey, createCustomSymptomSchema, updateCustomSymptomSchema, diff --git a/src/lib/doctor-report-pdf-core.ts b/src/lib/doctor-report-pdf-core.ts index f5e79a422..d193958ad 100644 --- a/src/lib/doctor-report-pdf-core.ts +++ b/src/lib/doctor-report-pdf-core.ts @@ -18,7 +18,7 @@ import { isStructuredLeafId, REPORT_GROUPS, } from "./report-selection/catalogue"; -import { MEASUREMENT_TYPE_LABEL_KEYS } from "./measurements/type-label-keys"; + import { getUnitForType } from "./validations/measurement"; import { makeFormatters, @@ -166,12 +166,6 @@ export interface DoctorReportRenderOptions { includeCharts?: boolean; } -// Per-type label keys live in a lucide-free module so leaf consumers — the -// public clinician share view, this renderer — can import the map without -// dragging icon components into their graph. Re-exported here so the PDF core -// stays the single import surface its existing callers already use. -export { MEASUREMENT_TYPE_LABEL_KEYS }; - export const DOCTOR_REPORT_TYPE_UNIT_KEYS: Record = { WEIGHT: "kg", BLOOD_PRESSURE_SYS: "mmHg", diff --git a/src/lib/fhir/lab-loinc.ts b/src/lib/fhir/lab-loinc.ts index 0e748d0f9..d9e883349 100644 --- a/src/lib/fhir/lab-loinc.ts +++ b/src/lib/fhir/lab-loinc.ts @@ -37,12 +37,9 @@ * to show a biomarker's name resolves it through the labs catalog instead. */ -import { LOINC_SYSTEM, UCUM_SYSTEM } from "@/lib/fhir/loinc-map"; import { localisedValues } from "@/lib/i18n/shared-resolve"; import { stripDiacritics } from "@/lib/i18n/fold-for-match"; -export { LOINC_SYSTEM, UCUM_SYSTEM }; - /** A curated biomarker → LOINC + canonical-UCUM entry. */ export interface LabLoincMapping { loinc: string; diff --git a/src/lib/insights/derived/coach-read.ts b/src/lib/insights/derived/coach-read.ts index 346df7bae..7467e1f98 100644 --- a/src/lib/insights/derived/coach-read.ts +++ b/src/lib/insights/derived/coach-read.ts @@ -39,12 +39,7 @@ import { type CoachReadStripData, } from "@/lib/insights/derived/coach-read-shape"; -export type { - CoachReadBaseline, - CoachReadDriver, - CoachReadStripData, - CoachReadBaselinePlacement, -} from "@/lib/insights/derived/coach-read-shape"; +export type { CoachReadStripData } from "@/lib/insights/derived/coach-read-shape"; /** * Read the latest reading for `(userId, type)` — the value the strip places diff --git a/src/lib/insights/mood-aggregates.ts b/src/lib/insights/mood-aggregates.ts index 985b998ea..f829df5f6 100644 --- a/src/lib/insights/mood-aggregates.ts +++ b/src/lib/insights/mood-aggregates.ts @@ -39,11 +39,7 @@ import { computeMoodDimensionSeries, type MoodDimensionSummary, } from "@/lib/insights/mood-dimension-series"; -export { - computeMoodDimensionSeries, - type MoodDimensionPoint, - type MoodDimensionSummary, -} from "@/lib/insights/mood-dimension-series"; +export { type MoodDimensionSummary } from "@/lib/insights/mood-dimension-series"; import { resolveUserTimezone } from "@/lib/tz/resolver"; import { annotate } from "@/lib/logging/context"; import { createCustomLabelResolver } from "@/lib/mood/custom-tags"; diff --git a/src/lib/insights/status-provider.ts b/src/lib/insights/status-provider.ts index 8f36e8a1d..f30a7b36a 100644 --- a/src/lib/insights/status-provider.ts +++ b/src/lib/insights/status-provider.ts @@ -1,6 +1,5 @@ import { resolveProvider, resolveProviderChain } from "@/lib/ai/provider"; import { - AllProvidersFailedError, runRawCompletionWithFallback, type ProviderChainResolved, } from "@/lib/ai/provider-runner"; @@ -299,5 +298,3 @@ export async function runStatusCompletion( tokensUsed: result.tokensUsed ?? null, }; } - -export { AllProvidersFailedError }; diff --git a/src/lib/report-selection/saved-profile.ts b/src/lib/report-selection/saved-profile.ts index 987c2c02c..c23988809 100644 --- a/src/lib/report-selection/saved-profile.ts +++ b/src/lib/report-selection/saved-profile.ts @@ -26,13 +26,6 @@ import { type ReportSelection, } from "./selection"; -export { - savedReportProfileSchema, - parseSavedProfile, - SAVED_PROFILE_FALLBACK, - type SavedReportProfile, -} from "./profile-shape"; - /** * Resolve the owner's saved selection. * diff --git a/src/lib/tz/resolver.ts b/src/lib/tz/resolver.ts index a51feb7a8..1835432d5 100644 --- a/src/lib/tz/resolver.ts +++ b/src/lib/tz/resolver.ts @@ -49,7 +49,6 @@ export { formatInUserTz, userDayKey, hourInTz, - type FormatInUserTzShape, } from "./format"; const BERLIN_DAY_FORMATTER = new Intl.DateTimeFormat("en-US", { diff --git a/src/lib/validations/labs.ts b/src/lib/validations/labs.ts index 8a1b7c6bc..d7c2ea3c3 100644 --- a/src/lib/validations/labs.ts +++ b/src/lib/validations/labs.ts @@ -307,10 +307,7 @@ export type ListLabResultsInput = z.infer; * implementation. Re-exported here for the existing import sites. */ export { - classifyAgainstEffectiveRange, classifyReferenceRange, - formatReferenceRange, - resolveEffectiveReferenceRange, type EffectiveReferenceRange, type ReferenceRangeOrigin, type ReferenceRangeStatus, From fb344c4f789ae378d9fe7dea91570cc2d3393149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Sun, 23 Aug 2026 18:59:01 +0200 Subject: [PATCH 6/8] Remove two dead alias constants MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SENSITIVE_LEAVES and COACH_SUGGESTED_ACTION_TYPES each aliased a constant defined elsewhere and were never imported. Neither is a re-export the way the barrel lines were — the definition itself is the dead thing, and both doc comments describe a consumer that does not exist: the purity guard reads SENSITIVE_LEAF_IDS from ./catalogue directly, and nothing mirrors the suggested-action allowlist. The imports that fed them go with them. --- src/lib/report-selection/template.ts | 5 +---- src/lib/validations/coach-reminder.ts | 4 ---- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/lib/report-selection/template.ts b/src/lib/report-selection/template.ts index 0a2cc953f..c5246cc08 100644 --- a/src/lib/report-selection/template.ts +++ b/src/lib/report-selection/template.ts @@ -11,7 +11,7 @@ * The template intersects the fenced tier at zero leaves, and * `catalogue-guard.test.ts` fails the build if that stops being true. */ -import { SENSITIVE_LEAF_IDS, type ReportLeafId } from "./catalogue"; +import { type ReportLeafId } from "./catalogue"; /** * Identity and insurer (the cover page a practice files the document under), @@ -59,6 +59,3 @@ export function standardTemplateFor( const hidden = new Set(hiddenLeaves); return STANDARD_TEMPLATE_LEAVES.filter((leaf) => !hidden.has(leaf)); } - -/** Exported so the purity guard reads the same set the panel does. */ -export const SENSITIVE_LEAVES = SENSITIVE_LEAF_IDS; diff --git a/src/lib/validations/coach-reminder.ts b/src/lib/validations/coach-reminder.ts index 9a1eccccb..1e0d4eb91 100644 --- a/src/lib/validations/coach-reminder.ts +++ b/src/lib/validations/coach-reminder.ts @@ -19,7 +19,6 @@ import { REMINDER_METRIC_MAX_CHARS, } from "@/lib/ai/coach/reminders"; import { - SUGGESTED_ACTION_TYPES, CHECKUP_LABEL_MAX_CHARS, ACTION_NOTE_MAX_CHARS, ACTION_METRIC_MAX_CHARS, @@ -133,6 +132,3 @@ export const coachSuggestedActionSchema = z export type CoachSuggestedActionInput = z.infer< typeof coachSuggestedActionSchema >; - -/** Stable list of confirmable action types (mirrors the lib allowlist). */ -export const COACH_SUGGESTED_ACTION_TYPES = SUGGESTED_ACTION_TYPES; From 949677008fe7f312a0af07ff6161026be0c84c3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Sun, 23 Aug 2026 19:04:37 +0200 Subject: [PATCH 7/8] Drop the type imports left behind by the extract-prompt re-export CadenceKind and WeekdayToken were imported only to be re-exported. The re-export went in the previous commit but the import survived, because the doc comment above it still named both types at the time. --- src/lib/ai/coach/medication-extract-prompt.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/lib/ai/coach/medication-extract-prompt.ts b/src/lib/ai/coach/medication-extract-prompt.ts index 2132c0573..bbabd616c 100644 --- a/src/lib/ai/coach/medication-extract-prompt.ts +++ b/src/lib/ai/coach/medication-extract-prompt.ts @@ -29,11 +29,7 @@ import { z } from "zod/v4"; -import { - WEEKDAY_TOKENS, - type CadenceKind, - type WeekdayToken, -} from "@/components/medications/scheduling/types"; +import { WEEKDAY_TOKENS } from "@/components/medications/scheduling/types"; /** Closed list — matches the design-synthesis dose-unit dropdown. */ export const DOSE_UNITS = [ From 03293bc2eb2561a972b23b64e30df8612135bd40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Sun, 23 Aug 2026 19:07:08 +0200 Subject: [PATCH 8/8] Record what the dead-code gate was blind to before knip 6.28.0 ignoreExportsUsedInFile did not only exempt exports used inside their own module; until 6.28.0 it also marked every re-export as referenced in its own file, so a barrel line nothing imported was never reported. The upgrade took this repo from 0 findings to 206 on unchanged code. Write it down next to the setting, because a green gate on any earlier knip proved nothing about re-exports. Also correct the production-pass file count, which had drifted to 21. --- knip.jsonc | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/knip.jsonc b/knip.jsonc index 42ce9d06b..7361033fa 100644 --- a/knip.jsonc +++ b/knip.jsonc @@ -32,7 +32,7 @@ // This is a review tool, not a second gate, for two reasons written down so // the next reader does not have to rediscover them: // -// 1. It reports 29 files today. Some are test-only by construction (the +// 1. It reports 21 files today. Some are test-only by construction (the // guard helpers under `src/__tests__/helpers/`, the settings section // harness) and some are deliberately unreachable from production // (`src/lib/ai/mock-client.ts` is excluded structurally by the @@ -130,6 +130,19 @@ // Scoped to a single file: an export used only inside its own module is not // a finding. It is also why the default pass cannot answer the question the // production pass answers — this setting is about exports, not reachability. + // + // It had a second effect nobody asked for, worth knowing because it means + // the gate under-reported for a year. Until knip 6.28.0 this setting also + // exempted every RE-EXPORT: a barrel line was unconditionally marked + // "referenced in its own file", so `export { x } from "./x"` that nothing + // imported was never reported. knip 6.28.0 (PR webpro-nl/knip#1895, fixing + // issue #1894 — `--fix` deleted the source export and left the barrel line + // behind, emitting code that did not compile) dropped the exemption. The + // upgrade from 6.16.1 took this repo from 0 findings to 206 on unchanged + // code; all but two were barrel lines with no importer, and they are gone + // now. The suppression was entirely gated on this setting — with it off, + // 6.16.1 and 6.32.2 agree exactly. So a green Dead-code gate on any knip + // before 6.28.0 said nothing about re-exports. "ignoreExportsUsedInFile": true, "ignoreIssues": { "src/components/ui/**": ["exports", "types"],