diff --git a/.github/workflows/strr-base-web-ci.yaml b/.github/workflows/strr-base-web-ci.yaml index 6c5bf5397..22a414051 100644 --- a/.github/workflows/strr-base-web-ci.yaml +++ b/.github/workflows/strr-base-web-ci.yaml @@ -18,4 +18,5 @@ jobs: app_name: "strr-base-web-ui" working_directory: "./strr-base-web" codecov_flag: "strrbasewebui" + pnpm_version: 11.9.0 node_version: 24 diff --git a/.github/workflows/strr-examiner-ui-cd.yaml b/.github/workflows/strr-examiner-ui-cd.yaml index 50929e8ab..829568bd4 100644 --- a/.github/workflows/strr-examiner-ui-cd.yaml +++ b/.github/workflows/strr-examiner-ui-cd.yaml @@ -37,7 +37,7 @@ jobs: app_name: "strr-examiner-ui" working_directory: "./strr-examiner-web" node_version: 24 - pnpm_version: 10.0.0 + pnpm_version: 11.9.0 redeploy: ${{ inputs.redeploy }} secrets: WORKLOAD_IDENTIFY_POOLS_PROVIDER: ${{ secrets.WORKLOAD_IDENTIFY_POOLS_PROVIDER }} diff --git a/.github/workflows/strr-examiner-ui-ci.yaml b/.github/workflows/strr-examiner-ui-ci.yaml index d174d8ad9..a68997770 100644 --- a/.github/workflows/strr-examiner-ui-ci.yaml +++ b/.github/workflows/strr-examiner-ui-ci.yaml @@ -19,4 +19,4 @@ jobs: working_directory: "./strr-examiner-web" codecov_flag: "strrexaminerui" node_version: 24 - pnpm_version: 10.0.0 + pnpm_version: 11.9.0 diff --git a/.github/workflows/strr-host-pm-ui-cd.yaml b/.github/workflows/strr-host-pm-ui-cd.yaml index ae5877304..8e3940c4f 100644 --- a/.github/workflows/strr-host-pm-ui-cd.yaml +++ b/.github/workflows/strr-host-pm-ui-cd.yaml @@ -37,7 +37,7 @@ jobs: app_name: "strr-hosts" working_directory: "./strr-host-pm-web" node_version: 24 - pnpm_version: 10.0.0 + pnpm_version: 11.9.0 redeploy: ${{ inputs.redeploy }} secrets: WORKLOAD_IDENTIFY_POOLS_PROVIDER: ${{ secrets.WORKLOAD_IDENTIFY_POOLS_PROVIDER }} diff --git a/.github/workflows/strr-host-pm-ui-ci.yaml b/.github/workflows/strr-host-pm-ui-ci.yaml index 1165b406a..01749eb72 100644 --- a/.github/workflows/strr-host-pm-ui-ci.yaml +++ b/.github/workflows/strr-host-pm-ui-ci.yaml @@ -19,4 +19,4 @@ jobs: working_directory: "./strr-host-pm-web" codecov_flag: "strrhostpmui" node_version: 24 - pnpm_version: 10.0.0 + pnpm_version: 11.9.0 diff --git a/.github/workflows/strr-platform-ui-cd.yaml b/.github/workflows/strr-platform-ui-cd.yaml index c556ff89d..28cbfafdc 100644 --- a/.github/workflows/strr-platform-ui-cd.yaml +++ b/.github/workflows/strr-platform-ui-cd.yaml @@ -37,7 +37,7 @@ jobs: app_name: "strr-platform-ui" working_directory: "./strr-platform-web" node_version: 24 - pnpm_version: 10.0.0 + pnpm_version: 11.9.0 redeploy: ${{ inputs.redeploy }} secrets: WORKLOAD_IDENTIFY_POOLS_PROVIDER: ${{ secrets.WORKLOAD_IDENTIFY_POOLS_PROVIDER }} diff --git a/.github/workflows/strr-platform-ui-ci.yaml b/.github/workflows/strr-platform-ui-ci.yaml index 200cca511..7a3a7a2fd 100644 --- a/.github/workflows/strr-platform-ui-ci.yaml +++ b/.github/workflows/strr-platform-ui-ci.yaml @@ -19,4 +19,4 @@ jobs: working_directory: "./strr-platform-web" codecov_flag: "strrplatformui" node_version: 24 - pnpm_version: 10.0.0 + pnpm_version: 11.9.0 diff --git a/.github/workflows/strr-strata-ui-cd.yaml b/.github/workflows/strr-strata-ui-cd.yaml index 87a6a56fd..444dc82f5 100644 --- a/.github/workflows/strr-strata-ui-cd.yaml +++ b/.github/workflows/strr-strata-ui-cd.yaml @@ -37,7 +37,7 @@ jobs: app_name: "strr-strata-hotel-ui" working_directory: "./strr-strata-web" node_version: 24 - pnpm_version: 10.0.0 + pnpm_version: 11.9.0 redeploy: ${{ inputs.redeploy }} secrets: WORKLOAD_IDENTIFY_POOLS_PROVIDER: ${{ secrets.WORKLOAD_IDENTIFY_POOLS_PROVIDER }} diff --git a/.github/workflows/strr-strata-ui-ci.yaml b/.github/workflows/strr-strata-ui-ci.yaml index 760d54deb..5b09e469f 100644 --- a/.github/workflows/strr-strata-ui-ci.yaml +++ b/.github/workflows/strr-strata-ui-ci.yaml @@ -19,4 +19,4 @@ jobs: working_directory: "./strr-strata-web" codecov_flag: "strrstrataui" node_version: 24 - pnpm_version: 10.0.0 + pnpm_version: 11.9.0 diff --git a/.sonarcloud.properties b/.sonarcloud.properties index 26d11c136..dbb2523b6 100644 --- a/.sonarcloud.properties +++ b/.sonarcloud.properties @@ -15,4 +15,10 @@ sonar.exclusions=strr-api/migrations/**/*,strr-api/devops/**/*,strr-api/tests/** sonar.sourceEncoding=UTF-8 # Exclusions for copy-paste detection -sonar.cpd.exclusions=strr-host-pm-web/tests/**, strr-host-pm-web/vitest.config.ts, strr-examiner-web/tests/** +# */ensure-strr-base-web.mjs is necessarily identical across the 4 STRR apps +# it appears in: each app's CD deploy build context is a fully isolated Docker +# build containing only that app's own directory, so this fallback (fetching +# the shared strr-base-web layer from GitHub when it's not there at all) can't +# be extracted into a shared module the way its normal-case counterpart, +# strr-base-web/prepare.mjs, is - there's nothing to import it from. +sonar.cpd.exclusions=strr-host-pm-web/tests/**, strr-host-pm-web/vitest.config.ts, strr-examiner-web/tests/**, */ensure-strr-base-web.mjs diff --git a/strr-base-web/package.json b/strr-base-web/package.json index 44a274580..15d474c54 100644 --- a/strr-base-web/package.json +++ b/strr-base-web/package.json @@ -42,6 +42,7 @@ "nuxt": "4.5.2", "playwright-core": "^1.57.0", "sass": "^1.77.6", + "tailwindcss": "^3.4.19", "typescript": "^5.9.3", "vitest": "4.1.11" }, @@ -53,5 +54,6 @@ "luxon": "^3.5.0", "nuxt-gtag": "^3.0.3", "vue-country-flag-next": "^2.3.2" - } + }, + "packageManager": "pnpm@11.9.0+sha512.bd682d5d03fe525ef7c9fd6780c6884d1e756ac4c9c9fe00c538782824310dcf90e3ddc4f53835f06dfaebd5085e41855e0bcbb3b60de2ac5bbab89e5036f03b" } diff --git a/strr-base-web/pnpm-lock.yaml b/strr-base-web/pnpm-lock.yaml index f1ea57f2c..4406a76a7 100644 --- a/strr-base-web/pnpm-lock.yaml +++ b/strr-base-web/pnpm-lock.yaml @@ -90,6 +90,9 @@ importers: sass: specifier: ^1.77.6 version: 1.97.1 + tailwindcss: + specifier: ^3.4.19 + version: 3.4.19(yaml@2.9.0) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -792,89 +795,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -1030,6 +1049,7 @@ packages: engines: {node: ^22.20 || ^24.12 || >=25} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} @@ -1288,36 +1308,42 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-arm64-musl@0.95.0': resolution: {integrity: sha512-Pvi1lGe/G+mJZ3hUojMP/aAHAzHA25AEtVr8/iuz7UV72t/15NOgJYr9kELMUMNjPqpr3vKUgXTFmTtAxp11Qw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@oxc-parser/binding-linux-riscv64-gnu@0.95.0': resolution: {integrity: sha512-pUEVHIOVNDfhk4sTlLhn6mrNENhE4/dAwemxIfqpcSyBlYG0xYZND1F3jjR2yWY6DakXZ6VSuDbtiv1LPNlOLw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-s390x-gnu@0.95.0': resolution: {integrity: sha512-5+olaepHTE3J/+w7g0tr3nocvv5BKilAJnzj4L8tWBCLEZbL6olJcGVoldUO+3cgg1SO1xJywP5BuLhT0mDUDw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-x64-gnu@0.95.0': resolution: {integrity: sha512-8huzHlK/N98wrnYKxIcYsK8ZGBWomQchu/Mzi6m+CtbhjWOv9DmK0jQ2fUWImtluQVpTwS0uZT06d3g7XIkJrA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-x64-musl@0.95.0': resolution: {integrity: sha512-bWnrLfGDcx/fab0+UQnFbVFbiykof/btImbYf+cI2pU/1Egb2x+OKSmM5Qt0nEUiIpM5fgJmYXxTopybSZOKYA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@oxc-parser/binding-wasm32-wasi@0.95.0': resolution: {integrity: sha512-0JLyqkZu1HnQIZ4e5LBGOtzqua1QwFEUOoMSycdoerXqayd4LK2b7WMfAx8eCIf+jGm1Uj6f3R00nlsx8g1faQ==} @@ -1383,36 +1409,42 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@oxc-transform/binding-linux-arm64-musl@0.95.0': resolution: {integrity: sha512-GL0ffCPW8JlFI0/jeSgCY665yDdojHxA0pbYG+k8oEHOWCYZUZK9AXL+r0oerNEWYJ8CRB+L5Yq87ZtU/YUitw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@oxc-transform/binding-linux-riscv64-gnu@0.95.0': resolution: {integrity: sha512-tbH7LaClSmN3YFVo1UjMSe7D6gkb5f+CMIbj9i873UUZomVRmAjC4ygioObfzM+sj/tX0WoTXx5L1YOfQkHL6Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxc-transform/binding-linux-s390x-gnu@0.95.0': resolution: {integrity: sha512-8jMqiURWa0iTiPMg7BWaln89VdhhWzNlPyKM90NaFVVhBIKCr2UEhrQWdpBw/E9C8uWf/4VabBEhfPMK+0yS4w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@oxc-transform/binding-linux-x64-gnu@0.95.0': resolution: {integrity: sha512-D5ULJ2uWipsTgfvHIvqmnGkCtB3Fyt2ZN7APRjVO+wLr+HtmnaWddKsLdrRWX/m/6nQ2xQdoQekdJrokYK9LtQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@oxc-transform/binding-linux-x64-musl@0.95.0': resolution: {integrity: sha512-DmCGU+FzRezES5wVAGVimZGzYIjMOapXbWpxuz8M8p3nMrfdBEQ5/tpwBp2vRlIohhABy4vhHJByl4c64ENCGQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@oxc-transform/binding-wasm32-wasi@0.95.0': resolution: {integrity: sha512-tSo1EU4Whd1gXyae7cwSDouhppkuz6Jkd5LY8Uch9VKsHVSRhDLDW19Mq6VSwtyPxDPTJnJ2jYJWm+n8SYXiXQ==} @@ -1460,36 +1492,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.1': resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.1': resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.1': resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.1': resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.1': resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-wasm@2.5.1': resolution: {integrity: sha512-RJxlQQLkaMMIuWRozy+z2vEqbaQlCuaCgVZIUCzQLYggY22LZbP5Y1+ia+FD724Ids9e+XIyOLXLrLgQSHIthw==} @@ -1600,36 +1638,42 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.2.5': resolution: {integrity: sha512-xMvZgnbZg4YVnR/AX2b3oOPDTFYJvUVaJg5FedA/LuvexAtXibZQej4cnTkw3rjsJ/ggUROB64TdtETiim+FYA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@rolldown/binding-linux-ppc64-gnu@1.2.5': resolution: {integrity: sha512-GRjeqTUDHTo5GwntsLaAMcBahG3nlpjftXWZLN73HiYQlhwEowvarFgQnRnQZtIp4keXX7quXFbG38uPZBa2EA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-s390x-gnu@1.2.5': resolution: {integrity: sha512-vLNTR45F2Uwc8AufkNXPmB4VliaXs+FvcheEogIzOXzO4l+LzieXF5A/TWxLy5HtqpsRCHUfd0lPVrrdgXdLHQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-gnu@1.2.5': resolution: {integrity: sha512-Mgj59/HTuYeK9Gz2MA+mBWKnHsAgkBSec15ZMb1st3oIfFbX7gCjOae7GydHhzcyQi9Z/7M1QuN9bR3oFqF0jQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-musl@1.2.5': resolution: {integrity: sha512-mY8AP0/ichsbhAxGnLa3d3+MwV0EfgrPND2bplI3Ym8T6R2pJ0N87bvrKVwNXmdy3jnr6eQBecdqx/HMknBmpA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@rolldown/binding-openharmony-arm64@1.2.5': resolution: {integrity: sha512-8SLssA2oweAxyRgDp789ACfRb/3P+zNRJpzZxSizxF9m8NUDQ4+3xjo8ttjhVGGw6Qxb70oZiEtIjaKikCO7Yw==} @@ -1771,66 +1815,79 @@ packages: resolution: {integrity: sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.62.4': resolution: {integrity: sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.62.4': resolution: {integrity: sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.62.4': resolution: {integrity: sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.62.4': resolution: {integrity: sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.62.4': resolution: {integrity: sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==} cpu: [loong64] os: [linux] + libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.62.4': resolution: {integrity: sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.62.4': resolution: {integrity: sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==} cpu: [ppc64] os: [linux] + libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.62.4': resolution: {integrity: sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.62.4': resolution: {integrity: sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.62.4': resolution: {integrity: sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.62.4': resolution: {integrity: sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.62.4': resolution: {integrity: sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openbsd-x64@4.62.4': resolution: {integrity: sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==} @@ -2191,41 +2248,49 @@ packages: resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} cpu: [arm64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-arm64-musl@1.11.1': resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} cpu: [arm64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} cpu: [riscv64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} cpu: [riscv64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} cpu: [s390x] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-gnu@1.11.1': resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} cpu: [x64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-musl@1.11.1': resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} cpu: [x64] os: [linux] + libc: [musl] '@unrs/resolver-binding-wasm32-wasi@1.11.1': resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} @@ -4490,24 +4555,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.33.0: resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.33.0: resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.33.0: resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.33.0: resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} @@ -5367,10 +5436,6 @@ packages: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} - postcss-selector-parser@7.1.1: - resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} - engines: {node: '>=4'} - postcss-selector-parser@7.1.5: resolution: {integrity: sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw==} engines: {node: '>=4'} @@ -7198,13 +7263,13 @@ snapshots: '@csstools/css-tokenizer@3.0.4': {} - '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.1)': + '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.5)': dependencies: - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.5 - '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.1)': + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.5)': dependencies: - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.5 '@daxiom/nuxt-core-layer-test@0.0.29(6978517269e4075db9ad5d5cb4ec080f)': dependencies: @@ -8538,7 +8603,7 @@ snapshots: '@nuxtjs/tailwindcss@6.14.0(magicast@0.5.4)(yaml@2.9.0)': dependencies: '@nuxt/kit': 3.20.2(magicast@0.5.4) - autoprefixer: 10.4.23(postcss@8.5.6) + autoprefixer: 10.4.23(postcss@8.5.26) c12: 3.3.3(magicast@0.5.4) consola: 3.4.2 defu: 6.1.4 @@ -8547,8 +8612,8 @@ snapshots: ohash: 2.0.11 pathe: 2.0.3 pkg-types: 2.3.0 - postcss: 8.5.6 - postcss-nesting: 13.0.2(postcss@8.5.6) + postcss: 8.5.26 + postcss-nesting: 13.0.2(postcss@8.5.26) tailwind-config-viewer: 2.0.4(tailwindcss@3.4.19(yaml@2.9.0)) tailwindcss: 3.4.19(yaml@2.9.0) ufo: 1.6.1 @@ -8884,7 +8949,7 @@ snapshots: dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 - picomatch: 4.0.3 + picomatch: 4.0.5 optionalDependencies: rollup: 4.62.4 @@ -9532,7 +9597,7 @@ snapshots: '@vue/shared': 3.5.26 estree-walker: 2.0.2 magic-string: 0.30.21 - postcss: 8.5.6 + postcss: 8.5.26 source-map-js: 1.2.1 '@vue/compiler-sfc@3.5.41': @@ -9604,7 +9669,7 @@ snapshots: alien-signals: 3.1.2 muggle-string: 0.4.1 path-browserify: 1.0.1 - picomatch: 4.0.3 + picomatch: 4.0.5 '@vue/reactivity@3.5.41': dependencies: @@ -9951,13 +10016,13 @@ snapshots: at-least-node@1.0.0: {} - autoprefixer@10.4.23(postcss@8.5.6): + autoprefixer@10.4.23(postcss@8.5.26): dependencies: browserslist: 4.28.1 caniuse-lite: 1.0.30001762 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.6 + postcss: 8.5.26 postcss-value-parser: 4.2.0 autoprefixer@10.5.4(postcss@8.5.26): @@ -10061,7 +10126,7 @@ snapshots: dotenv: 17.2.3 exsolve: 1.0.8 giget: 2.0.0 - jiti: 2.6.1 + jiti: 2.7.0 ohash: 2.0.11 pathe: 2.0.3 perfect-debounce: 2.0.0 @@ -12046,7 +12111,7 @@ snapshots: get-port-please: 3.2.0 h3: 1.15.4 http-shutdown: 1.2.2 - jiti: 2.6.1 + jiti: 2.7.0 mlly: 1.8.0 node-forge: 1.3.3 pathe: 1.1.2 @@ -12873,7 +12938,7 @@ snapshots: postcss-calc@10.1.1(postcss@8.5.26): dependencies: postcss: 8.5.26 - postcss-selector-parser: 7.1.1 + postcss-selector-parser: 7.1.5 postcss-value-parser: 4.2.0 postcss-colormin@8.0.4(postcss@8.5.26): @@ -12907,24 +12972,24 @@ snapshots: dependencies: postcss: 8.5.26 - postcss-import@15.1.0(postcss@8.5.6): + postcss-import@15.1.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.11 - postcss-js@4.1.0(postcss@8.5.6): + postcss-js@4.1.0(postcss@8.5.26): dependencies: camelcase-css: 2.0.1 - postcss: 8.5.6 + postcss: 8.5.26 - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.9.0): + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.26)(yaml@2.9.0): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 1.21.7 - postcss: 8.5.6 + postcss: 8.5.26 yaml: 2.9.0 postcss-merge-longhand@8.0.4(postcss@8.5.26): @@ -12968,17 +13033,17 @@ snapshots: postcss: 8.5.26 postcss-selector-parser: 7.1.5 - postcss-nested@6.2.0(postcss@8.5.6): + postcss-nested@6.2.0(postcss@8.5.26): dependencies: - postcss: 8.5.6 + postcss: 8.5.26 postcss-selector-parser: 6.1.2 - postcss-nesting@13.0.2(postcss@8.5.6): + postcss-nesting@13.0.2(postcss@8.5.26): dependencies: - '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.1.1) - '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 + '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.1.5) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.5) + postcss: 8.5.26 + postcss-selector-parser: 7.1.5 postcss-normalize-charset@8.0.4(postcss@8.5.26): dependencies: @@ -13052,11 +13117,6 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-selector-parser@7.1.1: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - postcss-selector-parser@7.1.5: dependencies: cssesc: 3.0.0 @@ -13710,7 +13770,7 @@ snapshots: lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.7 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 ts-interface-checker: 0.1.13 superjson@2.2.6: @@ -13789,11 +13849,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.6 - postcss-import: 15.1.0(postcss@8.5.6) - postcss-js: 4.1.0(postcss@8.5.6) - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.9.0) - postcss-nested: 6.2.0(postcss@8.5.6) + postcss: 8.5.26 + postcss-import: 15.1.0(postcss@8.5.26) + postcss-js: 4.1.0(postcss@8.5.26) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.26)(yaml@2.9.0) + postcss-nested: 6.2.0(postcss@8.5.26) postcss-selector-parser: 6.1.2 resolve: 1.22.11 sucrase: 3.35.1 @@ -14073,7 +14133,7 @@ snapshots: unplugin-utils@0.3.1: dependencies: pathe: 2.0.3 - picomatch: 4.0.3 + picomatch: 4.0.5 unplugin-utils@0.3.2: dependencies: diff --git a/strr-base-web/pnpm-workspace.yaml b/strr-base-web/pnpm-workspace.yaml new file mode 100644 index 000000000..19dcc72cc --- /dev/null +++ b/strr-base-web/pnpm-workspace.yaml @@ -0,0 +1,6 @@ +packages: [] +allowBuilds: + '@parcel/watcher': true + esbuild: true + sharp: true + unrs-resolver: true diff --git a/strr-base-web/prepare.mjs b/strr-base-web/prepare.mjs new file mode 100644 index 000000000..1bfedd6c3 --- /dev/null +++ b/strr-base-web/prepare.mjs @@ -0,0 +1,43 @@ +import { existsSync, readFileSync } from 'node:fs' +import { execSync, execFileSync } from 'node:child_process' +import { fileURLToPath } from 'node:url' +import { dirname, resolve } from 'node:path' +import { createRequire } from 'node:module' + +// strr-base-web is extended as a local sibling layer (not a published package) by +// strr-examiner-web, strr-host-pm-web, strr-platform-web and strr-strata-web, so +// its own generated .nuxt/tsconfig.json may not exist yet in a fresh checkout +// (e.g. CI, where only one app's own `nuxt prepare` runs). Without it, jiti fails +// to resolve strr-base-web/tsconfig.json's "extends" while evaluating its +// tailwind.config.ts, breaking the whole build. Each consuming app's nuxt.config.ts +// calls ensureStrrBaseWebPrepared() to prepare it eagerly if missing - kept here, +// as a single shared module with no external dependencies of its own (safe to +// import even before this package's own node_modules exists), rather than +// duplicated in each app's own config. +// +// Both steps below invoke exact, pre-resolved absolute paths rather than +// shelling out to `npx pnpm`/`npx nuxi` by bare name, so resolution never +// depends on PATH (SonarCloud typescript:S4036). +export function ensureStrrBaseWebPrepared () { + const baseWebDir = dirname(fileURLToPath(import.meta.url)) + if (!existsSync(resolve(baseWebDir, 'node_modules'))) { + // corepack ships in the same directory as the running node binary itself, so + // this resolves it without any PATH search, while still going through corepack + // (rather than a fixed pnpm binary) so it honours this package's own pinned + // packageManager version, same as the original `npx pnpm` invocation did. + const corepackBin = resolve(dirname(process.execPath), process.platform === 'win32' ? 'corepack.cmd' : 'corepack') + // execSync (not execFileSync) here since corepack.cmd is a batch file that + // needs shell interpretation to run on Windows; the command name itself is + // still an absolute, quoted path rather than a bare "npx"/"pnpm" lookup. + execSync(`"${corepackBin}" pnpm install --ignore-scripts`, { cwd: baseWebDir, stdio: 'inherit' }) + } + if (!existsSync(resolve(baseWebDir, '.nuxt/tsconfig.json'))) { + // nuxt's own "bin" field (which its package.json "exports" map deliberately + // doesn't expose as an importable subpath) is how pnpm's own nuxi shim finds + // this same file - read it the same way instead of guessing the path. + const nuxtPkgPath = createRequire(import.meta.url).resolve('nuxt/package.json', { paths: [baseWebDir] }) + const nuxtPkg = JSON.parse(readFileSync(nuxtPkgPath, 'utf-8')) + const nuxtBin = resolve(dirname(nuxtPkgPath), nuxtPkg.bin.nuxi) + execFileSync(process.execPath, [nuxtBin, 'prepare'], { cwd: baseWebDir, stdio: 'inherit' }) + } +} diff --git a/strr-examiner-web/ensure-strr-base-web.mjs b/strr-examiner-web/ensure-strr-base-web.mjs new file mode 100644 index 000000000..de15618df --- /dev/null +++ b/strr-examiner-web/ensure-strr-base-web.mjs @@ -0,0 +1,79 @@ +import { existsSync, mkdirSync, writeFileSync } from 'node:fs' +import { gunzipSync } from 'node:zlib' +import { dirname, join, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' + +// strr-base-web is extended as a local sibling layer (not a published package) - +// see nuxt.config.ts for why. The official CD deploy pipeline's Docker build +// context is scoped to this app's own directory only (bcgov/bcregistry-sre's +// Dockerfile-build does `COPY . /app` from whatever `gcloud builds submit` was +// invoked with, which frontend-cd.yaml scopes to just this app's +// working_directory) - strr-base-web is never uploaded alongside it there, by +// design. CI/local dev/the Cloud Build PR-preview channel all have the full +// repo checked out, so this is CD-pipeline-specific: fetch strr-base-web fresh +// from main when it's not there at all, matching what the old git-hosted +// `extends` layer reference used to do at build time regardless of local +// checkout contents. +// +// This has to run as a standalone `preinstall` script (before pnpm even +// resolves dependencies, well before nuxt.config.ts is loaded via +// `postinstall: nuxt prepare`) rather than inside nuxt.config.ts itself: jiti +// (nuxt.config.ts's loader) resolves import()s ahead of that file's own +// runtime code executing, so a dynamic import there can't depend on a fetch +// step run earlier in the same file. +// +// Fetches and extracts GitHub's tarball using only Node builtins (fetch, +// zlib, fs) rather than shelling out to `git`/`tar`/`curl`: the actual build +// image this runs in (an Alpine-based firebase-repo image) doesn't have git +// installed at all, and a bare `execSync('git ...')`/('tar ...') call would +// also trip SonarCloud typescript:S4036 (PATH-dependent command resolution). +const baseWebDir = resolve(dirname(fileURLToPath(import.meta.url)), '../strr-base-web') + +if (!existsSync(baseWebDir)) { + const res = await fetch('https://codeload.github.com/bcgov/STRR/tar.gz/refs/heads/main') + if (!res.ok) { + throw new Error(`Failed to fetch strr-base-web tarball: ${res.status} ${res.statusText}`) + } + const tar = gunzipSync(Buffer.from(await res.arrayBuffer())) + + // Minimal POSIX tar reader: just enough to pull out the strr-base-web/ + // subtree from a GitHub codeload archive (ustar headers + pax extended + // headers for long paths, which is what git archive/GitHub both produce). + let offset = 0 + let longPath = null + while (offset + 512 <= tar.length) { + const header = tar.subarray(offset, offset + 512) + if (header.every(byte => byte === 0)) { + break + } + const readField = (start, length) => header.subarray(start, start + length).toString('utf-8').replace(/\0.*$/s, '').trim() + const name = longPath ?? readField(0, 100) + const size = parseInt(readField(124, 12) || '0', 8) + const typeflag = String.fromCharCode(header[156]) + const contentStart = offset + 512 + const paddedSize = Math.ceil(size / 512) * 512 + longPath = null + + if (typeflag === 'x') { + // pax extended header: lines like " path=\n" + const pax = tar.subarray(contentStart, contentStart + size).toString('utf-8') + const match = pax.match(/\d+ path=([^\n]+)\n/) + if (match) { + longPath = match[1] + } + } else if ((typeflag === '0' || typeflag === '\0') && name.includes('/strr-base-web/')) { + const relativePath = name.slice(name.indexOf('/strr-base-web/') + '/strr-base-web/'.length) + if (relativePath) { + const destPath = join(baseWebDir, relativePath) + mkdirSync(dirname(destPath), { recursive: true }) + writeFileSync(destPath, tar.subarray(contentStart, contentStart + size)) + } + } + + offset = contentStart + paddedSize + } + + if (!existsSync(baseWebDir)) { + throw new Error('strr-base-web not found in the fetched bcgov/STRR tarball') + } +} diff --git a/strr-examiner-web/nuxt.config.ts b/strr-examiner-web/nuxt.config.ts index a50c8adb5..244080cc9 100644 --- a/strr-examiner-web/nuxt.config.ts +++ b/strr-examiner-web/nuxt.config.ts @@ -1,3 +1,21 @@ +import { ensureStrrBaseWebPrepared } from '../strr-base-web/prepare.mjs' + +// strr-base-web is extended as a local sibling layer (not a published package), +// so its own generated .nuxt/tsconfig.json may not exist yet in a fresh checkout +// (e.g. CI, where only this app's own `nuxt prepare` runs). Without it, jiti fails +// to resolve strr-base-web/tsconfig.json's "extends" while evaluating its +// tailwind.config.ts, breaking the whole build. Prepare it eagerly if missing. +// +// strr-base-web itself is guaranteed to exist by this point: the official CD +// deploy pipeline's Docker build context is scoped to this app's own directory +// only, so a `preinstall` script (ensure-strr-base-web.mjs, run before pnpm +// even resolves dependencies, well before this file is loaded) clones it fresh +// from GitHub there if it's missing outright - see that file for why this +// can't live here instead (jiti pre-resolves import()s before any of this +// file's own runtime code executes, so a dynamic import can't depend on a +// clone step that only just ran a few lines above it). +ensureStrrBaseWebPrepared() + // https://nuxt.com/docs/api/configuration/nuxt-config export default defineNuxtConfig({ devtools: { enabled: false }, @@ -35,8 +53,7 @@ export default defineNuxtConfig({ }, extends: [ - ['github:bcgov/STRR/strr-base-web', { install: true }] - // '../strr-base-web' // dev only + '../strr-base-web' ], imports: { diff --git a/strr-examiner-web/package.json b/strr-examiner-web/package.json index 09bf8eb34..e3fb7dff6 100644 --- a/strr-examiner-web/package.json +++ b/strr-examiner-web/package.json @@ -12,6 +12,7 @@ "dev": "nuxt dev --port 3000", "generate": "nuxt generate", "preview": "nuxt preview", + "preinstall": "node ensure-strr-base-web.mjs", "postinstall": "nuxt prepare", "lint": "eslint --ext .ts,.vue app tests --ignore-path .gitignore", "lint:fix": "pnpm lint --fix", @@ -44,6 +45,7 @@ "otplib": "^12.0.1", "playwright-core": "^1.57.0", "sass": "^1.77.6", + "tailwindcss": "^3.4.19", "typescript": "^5.9.3", "vitest": "3.2.4" }, @@ -53,5 +55,6 @@ "nuxt": "3.15.4", "uuid": "^11.1.0", "v-calendar": "^3.1.2" - } + }, + "packageManager": "pnpm@11.9.0+sha512.bd682d5d03fe525ef7c9fd6780c6884d1e756ac4c9c9fe00c538782824310dcf90e3ddc4f53835f06dfaebd5085e41855e0bcbb3b60de2ac5bbab89e5036f03b" } diff --git a/strr-examiner-web/pnpm-lock.yaml b/strr-examiner-web/pnpm-lock.yaml index ae9f8389d..2ec7db5e2 100644 --- a/strr-examiner-web/pnpm-lock.yaml +++ b/strr-examiner-web/pnpm-lock.yaml @@ -84,6 +84,9 @@ importers: sass: specifier: ^1.77.6 version: 1.100.0 + tailwindcss: + specifier: ^3.4.19 + version: 3.4.19(yaml@2.9.0) typescript: specifier: ^5.9.3 version: 5.9.3 diff --git a/strr-examiner-web/pnpm-workspace.yaml b/strr-examiner-web/pnpm-workspace.yaml new file mode 100644 index 000000000..19dcc72cc --- /dev/null +++ b/strr-examiner-web/pnpm-workspace.yaml @@ -0,0 +1,6 @@ +packages: [] +allowBuilds: + '@parcel/watcher': true + esbuild: true + sharp: true + unrs-resolver: true diff --git a/strr-host-pm-web/ensure-strr-base-web.mjs b/strr-host-pm-web/ensure-strr-base-web.mjs new file mode 100644 index 000000000..de15618df --- /dev/null +++ b/strr-host-pm-web/ensure-strr-base-web.mjs @@ -0,0 +1,79 @@ +import { existsSync, mkdirSync, writeFileSync } from 'node:fs' +import { gunzipSync } from 'node:zlib' +import { dirname, join, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' + +// strr-base-web is extended as a local sibling layer (not a published package) - +// see nuxt.config.ts for why. The official CD deploy pipeline's Docker build +// context is scoped to this app's own directory only (bcgov/bcregistry-sre's +// Dockerfile-build does `COPY . /app` from whatever `gcloud builds submit` was +// invoked with, which frontend-cd.yaml scopes to just this app's +// working_directory) - strr-base-web is never uploaded alongside it there, by +// design. CI/local dev/the Cloud Build PR-preview channel all have the full +// repo checked out, so this is CD-pipeline-specific: fetch strr-base-web fresh +// from main when it's not there at all, matching what the old git-hosted +// `extends` layer reference used to do at build time regardless of local +// checkout contents. +// +// This has to run as a standalone `preinstall` script (before pnpm even +// resolves dependencies, well before nuxt.config.ts is loaded via +// `postinstall: nuxt prepare`) rather than inside nuxt.config.ts itself: jiti +// (nuxt.config.ts's loader) resolves import()s ahead of that file's own +// runtime code executing, so a dynamic import there can't depend on a fetch +// step run earlier in the same file. +// +// Fetches and extracts GitHub's tarball using only Node builtins (fetch, +// zlib, fs) rather than shelling out to `git`/`tar`/`curl`: the actual build +// image this runs in (an Alpine-based firebase-repo image) doesn't have git +// installed at all, and a bare `execSync('git ...')`/('tar ...') call would +// also trip SonarCloud typescript:S4036 (PATH-dependent command resolution). +const baseWebDir = resolve(dirname(fileURLToPath(import.meta.url)), '../strr-base-web') + +if (!existsSync(baseWebDir)) { + const res = await fetch('https://codeload.github.com/bcgov/STRR/tar.gz/refs/heads/main') + if (!res.ok) { + throw new Error(`Failed to fetch strr-base-web tarball: ${res.status} ${res.statusText}`) + } + const tar = gunzipSync(Buffer.from(await res.arrayBuffer())) + + // Minimal POSIX tar reader: just enough to pull out the strr-base-web/ + // subtree from a GitHub codeload archive (ustar headers + pax extended + // headers for long paths, which is what git archive/GitHub both produce). + let offset = 0 + let longPath = null + while (offset + 512 <= tar.length) { + const header = tar.subarray(offset, offset + 512) + if (header.every(byte => byte === 0)) { + break + } + const readField = (start, length) => header.subarray(start, start + length).toString('utf-8').replace(/\0.*$/s, '').trim() + const name = longPath ?? readField(0, 100) + const size = parseInt(readField(124, 12) || '0', 8) + const typeflag = String.fromCharCode(header[156]) + const contentStart = offset + 512 + const paddedSize = Math.ceil(size / 512) * 512 + longPath = null + + if (typeflag === 'x') { + // pax extended header: lines like " path=\n" + const pax = tar.subarray(contentStart, contentStart + size).toString('utf-8') + const match = pax.match(/\d+ path=([^\n]+)\n/) + if (match) { + longPath = match[1] + } + } else if ((typeflag === '0' || typeflag === '\0') && name.includes('/strr-base-web/')) { + const relativePath = name.slice(name.indexOf('/strr-base-web/') + '/strr-base-web/'.length) + if (relativePath) { + const destPath = join(baseWebDir, relativePath) + mkdirSync(dirname(destPath), { recursive: true }) + writeFileSync(destPath, tar.subarray(contentStart, contentStart + size)) + } + } + + offset = contentStart + paddedSize + } + + if (!existsSync(baseWebDir)) { + throw new Error('strr-base-web not found in the fetched bcgov/STRR tarball') + } +} diff --git a/strr-host-pm-web/nuxt.config.ts b/strr-host-pm-web/nuxt.config.ts index 874a8c395..733710c1f 100644 --- a/strr-host-pm-web/nuxt.config.ts +++ b/strr-host-pm-web/nuxt.config.ts @@ -1,3 +1,21 @@ +import { ensureStrrBaseWebPrepared } from '../strr-base-web/prepare.mjs' + +// strr-base-web is extended as a local sibling layer (not a published package), +// so its own generated .nuxt/tsconfig.json may not exist yet in a fresh checkout +// (e.g. CI, where only this app's own `nuxt prepare` runs). Without it, jiti fails +// to resolve strr-base-web/tsconfig.json's "extends" while evaluating its +// tailwind.config.ts, breaking the whole build. Prepare it eagerly if missing. +// +// strr-base-web itself is guaranteed to exist by this point: the official CD +// deploy pipeline's Docker build context is scoped to this app's own directory +// only, so a `preinstall` script (ensure-strr-base-web.mjs, run before pnpm +// even resolves dependencies, well before this file is loaded) clones it fresh +// from GitHub there if it's missing outright - see that file for why this +// can't live here instead (jiti pre-resolves import()s before any of this +// file's own runtime code executes, so a dynamic import can't depend on a +// clone step that only just ran a few lines above it). +ensureStrrBaseWebPrepared() + // https://nuxt.com/docs/api/configuration/nuxt-config export default defineNuxtConfig({ devtools: { enabled: false }, @@ -35,8 +53,7 @@ export default defineNuxtConfig({ }, extends: [ - ['github:bcgov/STRR/strr-base-web', { install: true }], - // '../strr-base-web', // dev only + '../strr-base-web', '@daxiom/nuxt-core-layer-test' // extend again, this prevents the payApi plugin error ], diff --git a/strr-host-pm-web/package.json b/strr-host-pm-web/package.json index ebb2dc66d..4ed91d5bd 100644 --- a/strr-host-pm-web/package.json +++ b/strr-host-pm-web/package.json @@ -12,6 +12,7 @@ "dev": "nuxt dev --port 3000", "generate": "nuxt generate", "preview": "nuxt preview", + "preinstall": "node ensure-strr-base-web.mjs", "postinstall": "nuxt prepare", "lint": "eslint --ext .ts,.vue app tests --ignore-path .gitignore", "lint:fix": "pnpm lint --fix", @@ -44,6 +45,7 @@ "otpauth": "^9.4.1", "playwright-core": "^1.55.0", "sass": "^1.90.0", + "tailwindcss": "^3.4.19", "typescript": "^5.9.2", "vitest": "^3.2.4", "vue-tsc": "^3.3.8" @@ -56,5 +58,5 @@ "uuid": "^11.1.0", "vue-country-flag-next": "^2.3.2" }, - "packageManager": "pnpm@10.21.0+sha1.a2cb35d3f07a58fecfe050af9277c5dc43a1b2e7" + "packageManager": "pnpm@11.9.0+sha512.bd682d5d03fe525ef7c9fd6780c6884d1e756ac4c9c9fe00c538782824310dcf90e3ddc4f53835f06dfaebd5085e41855e0bcbb3b60de2ac5bbab89e5036f03b" } diff --git a/strr-host-pm-web/pnpm-lock.yaml b/strr-host-pm-web/pnpm-lock.yaml index abca85c0e..2e064a5c7 100644 --- a/strr-host-pm-web/pnpm-lock.yaml +++ b/strr-host-pm-web/pnpm-lock.yaml @@ -90,6 +90,9 @@ importers: sass: specifier: ^1.90.0 version: 1.100.0 + tailwindcss: + specifier: ^3.4.19 + version: 3.4.19(yaml@2.9.0) typescript: specifier: ^5.9.2 version: 5.9.3 @@ -1100,89 +1103,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -1593,48 +1612,56 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-arm64-musl@0.128.0': resolution: {integrity: sha512-M7iwBGmYJTx+pKOYFjI0buop4gJvlmcVzFGaXPt21DKpQkbQZG1f63Yg7LloIYT/t9yLxCw0Lhfx/RFlAlMSjA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@oxc-parser/binding-linux-ppc64-gnu@0.128.0': resolution: {integrity: sha512-21LGNIZb1Pcfk5/EGsqabrxv4yqQOWis1407JJrClS7XpFCrbvr74YAB1V+m54cYbwvO6UWwQqS4WecxiyfCRg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-riscv64-gnu@0.128.0': resolution: {integrity: sha512-gyHjOTFpg9bTTYjxPmQirvufb89+VdZwVfcMtAUyPr6F5H8ZswvCQshK4qOW+Q+2Xyb33hduRgY/eFHJQjU/vQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-riscv64-musl@0.128.0': resolution: {integrity: sha512-X6Q2oKUrP5GyDd2xniuEBLk6aFQCZ97W2+aVXGgJXdjx5t4/oFuA9ri0wLOUrBIX+qdSuK581snMBio4z910eA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [musl] '@oxc-parser/binding-linux-s390x-gnu@0.128.0': resolution: {integrity: sha512-BdzTmqxfxoYkpgokoLaSnOX6T+R3/goL42klre2tnG+kHbG2TXS0VN+P5BPofH1axdKOHy5ei4ENZrjmCOt2lA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-x64-gnu@0.128.0': resolution: {integrity: sha512-OO1nW2Q7sSYYvJZpDHdvyFSdRaVcQqRijZSSmWVMqFxPYy8cEF45zJ9fcdIYuzIT3jYq6YRhEFm/VMWNWhE22Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-x64-musl@0.128.0': resolution: {integrity: sha512-4NehAe404MRdoZVS9DW8C5XbJwbXIc/KfVlYdpi5vE4081zc9Y0YzKVqyOYj/Puye7/Do+ohaONBFWlEHYl9hw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@oxc-parser/binding-openharmony-arm64@0.128.0': resolution: {integrity: sha512-kVbqgW9xLL8bh8oc7aYOJilRKXE5G33+tE0jan+duo/9OriaFRpijcCwT2waWs2oqYROYq0GlE7/p3ywoshVeg==} @@ -1715,48 +1742,56 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@oxc-transform/binding-linux-arm64-musl@0.128.0': resolution: {integrity: sha512-dPSjyd0gQ9dE3mpdJi0BHNJaqQz4V7mVW6Fbs6jRSiGnrxwGfXdMJFInXoJ49B3k5Zhfa9Is9Ixp6St7c6ouCA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@oxc-transform/binding-linux-ppc64-gnu@0.128.0': resolution: {integrity: sha512-YNa9XAotPKvAXFJrHC7kBsHMVg0HOB4vRiKuYUjzFsfLkxTbuztKHTKG/gW5kjp7dBw+TNFofTaVCVZgOnHXPQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@oxc-transform/binding-linux-riscv64-gnu@0.128.0': resolution: {integrity: sha512-jjSiG9H8ya/U3igW5DdIBFIDwhffF7Vbc7th2tcHV73eg0DQz75n36a9RmQ1/0aS9vknUuNtY6SODr8/gmuzsQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxc-transform/binding-linux-riscv64-musl@0.128.0': resolution: {integrity: sha512-FVUr/XNT7BfQA4XVMel/HTCJi5mQyEitslgX42ztYPnCFMRFG1sQQKgnlLJdl7qifuyxpvKLR1f7h7HEuwWw1Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [musl] '@oxc-transform/binding-linux-s390x-gnu@0.128.0': resolution: {integrity: sha512-caJnVw5PG8v339zAyHgA7p34xXa3A4Kc9VyrDgsT1znr51qacaUv4BRlgRi0qkqxRWXYNVFfsbU2g0t1qS7E9w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@oxc-transform/binding-linux-x64-gnu@0.128.0': resolution: {integrity: sha512-zkQKjsHEUX3ckQBcZTtHE/7pgFMkWQp6y/4t7N8eT3j8wnoL+vapv7l4ISjgx1/EePRJN1HErYXmriz7tPVKRg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@oxc-transform/binding-linux-x64-musl@0.128.0': resolution: {integrity: sha512-NjYtwl9ijp34iisHxYBvE7nii1Ac0QPP3doHv8MQHhDA3zjUcDCROuBNybfaEYCxnJ1aF+cAPqsyeopnAGsyuQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@oxc-transform/binding-openharmony-arm64@0.128.0': resolution: {integrity: sha512-itsi0tVkVdrYphSppdFChLq9tD0pvbRRS3EV8NQYKZ/NWHMoxzjlf9TFA/ZZYV113juYo1Dq3glVX48knhBeFQ==} @@ -1816,36 +1851,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.6': resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.6': resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.6': resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.6': resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.6': resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-wasm@2.5.6': resolution: {integrity: sha512-byAiBZ1t3tXQvc8dMD/eoyE7lTXYorhn+6uVW5AC+JGI1KtJC/LvDche5cfUE+qiefH+Ybq0bUCJU0aB1cSHUA==} @@ -2035,66 +2076,79 @@ packages: resolution: {integrity: sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.60.4': resolution: {integrity: sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.60.4': resolution: {integrity: sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.60.4': resolution: {integrity: sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.60.4': resolution: {integrity: sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.60.4': resolution: {integrity: sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==} cpu: [loong64] os: [linux] + libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.60.4': resolution: {integrity: sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.60.4': resolution: {integrity: sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==} cpu: [ppc64] os: [linux] + libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.60.4': resolution: {integrity: sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.60.4': resolution: {integrity: sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.60.4': resolution: {integrity: sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.60.4': resolution: {integrity: sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.60.4': resolution: {integrity: sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openbsd-x64@4.60.4': resolution: {integrity: sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==} @@ -2430,51 +2484,61 @@ packages: resolution: {integrity: sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==} cpu: [arm64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-arm64-musl@1.12.2': resolution: {integrity: sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==} cpu: [arm64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-loong64-gnu@1.12.2': resolution: {integrity: sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==} cpu: [loong64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-loong64-musl@1.12.2': resolution: {integrity: sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==} cpu: [loong64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-ppc64-gnu@1.12.2': resolution: {integrity: sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==} cpu: [ppc64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-gnu@1.12.2': resolution: {integrity: sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==} cpu: [riscv64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-musl@1.12.2': resolution: {integrity: sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==} cpu: [riscv64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-s390x-gnu@1.12.2': resolution: {integrity: sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==} cpu: [s390x] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-gnu@1.12.2': resolution: {integrity: sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==} cpu: [x64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-musl@1.12.2': resolution: {integrity: sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==} cpu: [x64] os: [linux] + libc: [musl] '@unrs/resolver-binding-openharmony-arm64@1.12.2': resolution: {integrity: sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==} diff --git a/strr-host-pm-web/pnpm-workspace.yaml b/strr-host-pm-web/pnpm-workspace.yaml new file mode 100644 index 000000000..19dcc72cc --- /dev/null +++ b/strr-host-pm-web/pnpm-workspace.yaml @@ -0,0 +1,6 @@ +packages: [] +allowBuilds: + '@parcel/watcher': true + esbuild: true + sharp: true + unrs-resolver: true diff --git a/strr-host-pm-web/tests/unit/connect-fee-info-amount.spec.ts b/strr-host-pm-web/tests/unit/connect-fee-info-amount.spec.ts index c1abb8332..bdd80572f 100644 --- a/strr-host-pm-web/tests/unit/connect-fee-info-amount.spec.ts +++ b/strr-host-pm-web/tests/unit/connect-fee-info-amount.spec.ts @@ -1,4 +1,4 @@ -import { mountSuspended } from '@nuxt/test-utils/runtime' +import { mountSuspended, mockNuxtImport } from '@nuxt/test-utils/runtime' import { describe, it, expect, beforeEach } from 'vitest' import { baseEnI18n } from '../mocks/i18n' import { ConnectFeeInfoAmount } from '#components' @@ -6,6 +6,12 @@ import { FeeInfo } from '#imports' const $t = baseEnI18n.global.t +// ConnectFeeInfo.* strings live only in strr-base-web's own locale file, which +// the real i18n module doesn't merge in under mountSuspended - stub the +// auto-imported useI18n so the component resolves against the same messages +// this test asserts against. +mockNuxtImport('useI18n', () => () => ({ t: $t })) + const mockFeeItem: ConnectFeeItem = { filingTypeCode: 'STRR', filingType: 'strr', diff --git a/strr-platform-web/ensure-strr-base-web.mjs b/strr-platform-web/ensure-strr-base-web.mjs new file mode 100644 index 000000000..de15618df --- /dev/null +++ b/strr-platform-web/ensure-strr-base-web.mjs @@ -0,0 +1,79 @@ +import { existsSync, mkdirSync, writeFileSync } from 'node:fs' +import { gunzipSync } from 'node:zlib' +import { dirname, join, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' + +// strr-base-web is extended as a local sibling layer (not a published package) - +// see nuxt.config.ts for why. The official CD deploy pipeline's Docker build +// context is scoped to this app's own directory only (bcgov/bcregistry-sre's +// Dockerfile-build does `COPY . /app` from whatever `gcloud builds submit` was +// invoked with, which frontend-cd.yaml scopes to just this app's +// working_directory) - strr-base-web is never uploaded alongside it there, by +// design. CI/local dev/the Cloud Build PR-preview channel all have the full +// repo checked out, so this is CD-pipeline-specific: fetch strr-base-web fresh +// from main when it's not there at all, matching what the old git-hosted +// `extends` layer reference used to do at build time regardless of local +// checkout contents. +// +// This has to run as a standalone `preinstall` script (before pnpm even +// resolves dependencies, well before nuxt.config.ts is loaded via +// `postinstall: nuxt prepare`) rather than inside nuxt.config.ts itself: jiti +// (nuxt.config.ts's loader) resolves import()s ahead of that file's own +// runtime code executing, so a dynamic import there can't depend on a fetch +// step run earlier in the same file. +// +// Fetches and extracts GitHub's tarball using only Node builtins (fetch, +// zlib, fs) rather than shelling out to `git`/`tar`/`curl`: the actual build +// image this runs in (an Alpine-based firebase-repo image) doesn't have git +// installed at all, and a bare `execSync('git ...')`/('tar ...') call would +// also trip SonarCloud typescript:S4036 (PATH-dependent command resolution). +const baseWebDir = resolve(dirname(fileURLToPath(import.meta.url)), '../strr-base-web') + +if (!existsSync(baseWebDir)) { + const res = await fetch('https://codeload.github.com/bcgov/STRR/tar.gz/refs/heads/main') + if (!res.ok) { + throw new Error(`Failed to fetch strr-base-web tarball: ${res.status} ${res.statusText}`) + } + const tar = gunzipSync(Buffer.from(await res.arrayBuffer())) + + // Minimal POSIX tar reader: just enough to pull out the strr-base-web/ + // subtree from a GitHub codeload archive (ustar headers + pax extended + // headers for long paths, which is what git archive/GitHub both produce). + let offset = 0 + let longPath = null + while (offset + 512 <= tar.length) { + const header = tar.subarray(offset, offset + 512) + if (header.every(byte => byte === 0)) { + break + } + const readField = (start, length) => header.subarray(start, start + length).toString('utf-8').replace(/\0.*$/s, '').trim() + const name = longPath ?? readField(0, 100) + const size = parseInt(readField(124, 12) || '0', 8) + const typeflag = String.fromCharCode(header[156]) + const contentStart = offset + 512 + const paddedSize = Math.ceil(size / 512) * 512 + longPath = null + + if (typeflag === 'x') { + // pax extended header: lines like " path=\n" + const pax = tar.subarray(contentStart, contentStart + size).toString('utf-8') + const match = pax.match(/\d+ path=([^\n]+)\n/) + if (match) { + longPath = match[1] + } + } else if ((typeflag === '0' || typeflag === '\0') && name.includes('/strr-base-web/')) { + const relativePath = name.slice(name.indexOf('/strr-base-web/') + '/strr-base-web/'.length) + if (relativePath) { + const destPath = join(baseWebDir, relativePath) + mkdirSync(dirname(destPath), { recursive: true }) + writeFileSync(destPath, tar.subarray(contentStart, contentStart + size)) + } + } + + offset = contentStart + paddedSize + } + + if (!existsSync(baseWebDir)) { + throw new Error('strr-base-web not found in the fetched bcgov/STRR tarball') + } +} diff --git a/strr-platform-web/nuxt.config.ts b/strr-platform-web/nuxt.config.ts index 294538f04..388d8b1b0 100644 --- a/strr-platform-web/nuxt.config.ts +++ b/strr-platform-web/nuxt.config.ts @@ -1,3 +1,21 @@ +import { ensureStrrBaseWebPrepared } from '../strr-base-web/prepare.mjs' + +// strr-base-web is extended as a local sibling layer (not a published package), +// so its own generated .nuxt/tsconfig.json may not exist yet in a fresh checkout +// (e.g. CI, where only this app's own `nuxt prepare` runs). Without it, jiti fails +// to resolve strr-base-web/tsconfig.json's "extends" while evaluating its +// tailwind.config.ts, breaking the whole build. Prepare it eagerly if missing. +// +// strr-base-web itself is guaranteed to exist by this point: the official CD +// deploy pipeline's Docker build context is scoped to this app's own directory +// only, so a `preinstall` script (ensure-strr-base-web.mjs, run before pnpm +// even resolves dependencies, well before this file is loaded) clones it fresh +// from GitHub there if it's missing outright - see that file for why this +// can't live here instead (jiti pre-resolves import()s before any of this +// file's own runtime code executes, so a dynamic import can't depend on a +// clone step that only just ran a few lines above it). +ensureStrrBaseWebPrepared() + // https://nuxt.com/docs/api/configuration/nuxt-config export default defineNuxtConfig({ devtools: { enabled: false }, @@ -20,8 +38,7 @@ export default defineNuxtConfig({ ], extends: [ - ['github:bcgov/STRR/strr-base-web', { install: true }], - // '../strr-base-web', // dev only + '../strr-base-web', '@daxiom/nuxt-core-layer-test' // extend again, this prevents the payApi plugin error ], diff --git a/strr-platform-web/package.json b/strr-platform-web/package.json index 085d210ee..c051b6643 100644 --- a/strr-platform-web/package.json +++ b/strr-platform-web/package.json @@ -12,6 +12,7 @@ "dev": "nuxt dev --port 3000", "generate": "nuxt generate", "preview": "nuxt preview", + "preinstall": "node ensure-strr-base-web.mjs", "postinstall": "nuxt prepare", "lint": "eslint --ext .ts,.vue app tests --ignore-path .gitignore", "lint:fix": "pnpm lint --fix", @@ -41,6 +42,7 @@ "happy-dom": "^20.0.11", "playwright-core": "^1.49.1", "sass": "^1.77.6", + "tailwindcss": "^3.4.19", "typescript": "^5.5.3", "vitest": "3.2.4", "otpauth": "^9.3.6" @@ -50,5 +52,6 @@ "country-codes-list": "^2.0.0", "nuxt": "3.15.4", "vue-country-flag-next": "^2.3.2" - } + }, + "packageManager": "pnpm@11.9.0+sha512.bd682d5d03fe525ef7c9fd6780c6884d1e756ac4c9c9fe00c538782824310dcf90e3ddc4f53835f06dfaebd5085e41855e0bcbb3b60de2ac5bbab89e5036f03b" } diff --git a/strr-platform-web/pnpm-lock.yaml b/strr-platform-web/pnpm-lock.yaml index 9b3a6e055..4daf0f199 100644 --- a/strr-platform-web/pnpm-lock.yaml +++ b/strr-platform-web/pnpm-lock.yaml @@ -81,6 +81,9 @@ importers: sass: specifier: ^1.77.6 version: 1.97.1 + tailwindcss: + specifier: ^3.4.19 + version: 3.4.19(yaml@2.8.2) typescript: specifier: ^5.5.3 version: 5.9.3 @@ -1224,36 +1227,42 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-arm64-musl@0.95.0': resolution: {integrity: sha512-Pvi1lGe/G+mJZ3hUojMP/aAHAzHA25AEtVr8/iuz7UV72t/15NOgJYr9kELMUMNjPqpr3vKUgXTFmTtAxp11Qw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@oxc-parser/binding-linux-riscv64-gnu@0.95.0': resolution: {integrity: sha512-pUEVHIOVNDfhk4sTlLhn6mrNENhE4/dAwemxIfqpcSyBlYG0xYZND1F3jjR2yWY6DakXZ6VSuDbtiv1LPNlOLw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-s390x-gnu@0.95.0': resolution: {integrity: sha512-5+olaepHTE3J/+w7g0tr3nocvv5BKilAJnzj4L8tWBCLEZbL6olJcGVoldUO+3cgg1SO1xJywP5BuLhT0mDUDw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-x64-gnu@0.95.0': resolution: {integrity: sha512-8huzHlK/N98wrnYKxIcYsK8ZGBWomQchu/Mzi6m+CtbhjWOv9DmK0jQ2fUWImtluQVpTwS0uZT06d3g7XIkJrA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-x64-musl@0.95.0': resolution: {integrity: sha512-bWnrLfGDcx/fab0+UQnFbVFbiykof/btImbYf+cI2pU/1Egb2x+OKSmM5Qt0nEUiIpM5fgJmYXxTopybSZOKYA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@oxc-parser/binding-wasm32-wasi@0.95.0': resolution: {integrity: sha512-0JLyqkZu1HnQIZ4e5LBGOtzqua1QwFEUOoMSycdoerXqayd4LK2b7WMfAx8eCIf+jGm1Uj6f3R00nlsx8g1faQ==} @@ -1316,36 +1325,42 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@oxc-transform/binding-linux-arm64-musl@0.95.0': resolution: {integrity: sha512-GL0ffCPW8JlFI0/jeSgCY665yDdojHxA0pbYG+k8oEHOWCYZUZK9AXL+r0oerNEWYJ8CRB+L5Yq87ZtU/YUitw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@oxc-transform/binding-linux-riscv64-gnu@0.95.0': resolution: {integrity: sha512-tbH7LaClSmN3YFVo1UjMSe7D6gkb5f+CMIbj9i873UUZomVRmAjC4ygioObfzM+sj/tX0WoTXx5L1YOfQkHL6Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxc-transform/binding-linux-s390x-gnu@0.95.0': resolution: {integrity: sha512-8jMqiURWa0iTiPMg7BWaln89VdhhWzNlPyKM90NaFVVhBIKCr2UEhrQWdpBw/E9C8uWf/4VabBEhfPMK+0yS4w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@oxc-transform/binding-linux-x64-gnu@0.95.0': resolution: {integrity: sha512-D5ULJ2uWipsTgfvHIvqmnGkCtB3Fyt2ZN7APRjVO+wLr+HtmnaWddKsLdrRWX/m/6nQ2xQdoQekdJrokYK9LtQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@oxc-transform/binding-linux-x64-musl@0.95.0': resolution: {integrity: sha512-DmCGU+FzRezES5wVAGVimZGzYIjMOapXbWpxuz8M8p3nMrfdBEQ5/tpwBp2vRlIohhABy4vhHJByl4c64ENCGQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@oxc-transform/binding-wasm32-wasi@0.95.0': resolution: {integrity: sha512-tSo1EU4Whd1gXyae7cwSDouhppkuz6Jkd5LY8Uch9VKsHVSRhDLDW19Mq6VSwtyPxDPTJnJ2jYJWm+n8SYXiXQ==} @@ -1393,36 +1408,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.1': resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.1': resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.1': resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.1': resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.1': resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-wasm@2.5.1': resolution: {integrity: sha512-RJxlQQLkaMMIuWRozy+z2vEqbaQlCuaCgVZIUCzQLYggY22LZbP5Y1+ia+FD724Ids9e+XIyOLXLrLgQSHIthw==} @@ -1608,56 +1629,67 @@ packages: resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.54.0': resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.54.0': resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.54.0': resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.54.0': resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-gnu@4.54.0': resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.54.0': resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.54.0': resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.54.0': resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.54.0': resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.54.0': resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openharmony-arm64@4.54.0': resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==} @@ -1927,6 +1959,7 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + deprecated: Potential CWE-502 - Update to 1.3.1 or higher '@unhead/dom@1.11.20': resolution: {integrity: sha512-jgfGYdOH+xHJF/j8gudjsYu3oIjFyXhCWcgKaw3vQnT616gSqyqnGQGOItL+BQtQZACKNISwIfx5PuOtztMKLA==} @@ -1984,41 +2017,49 @@ packages: resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} cpu: [arm64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-arm64-musl@1.11.1': resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} cpu: [arm64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} cpu: [riscv64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} cpu: [riscv64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} cpu: [s390x] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-gnu@1.11.1': resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} cpu: [x64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-musl@1.11.1': resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} cpu: [x64] os: [linux] + libc: [musl] '@unrs/resolver-binding-wasm32-wasi@1.11.1': resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} @@ -3688,11 +3729,12 @@ packages: glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me global-directory@4.0.1: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} @@ -5138,6 +5180,7 @@ packages: prebuild-install@7.1.3: resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} engines: {node: '>=10'} + deprecated: No longer maintained. Please contact the author of the relevant native addon; alternatives are available. hasBin: true prelude-ls@1.2.1: @@ -5724,10 +5767,12 @@ packages: tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me tar@7.5.2: resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} engines: {node: '>=18'} + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me terser-webpack-plugin@5.3.16: resolution: {integrity: sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==} @@ -5974,6 +6019,7 @@ packages: unplugin-vue-router@0.11.2: resolution: {integrity: sha512-X8BbQ3BNnMqaCYeMj80jtz5jC4AB0jcpdmECIYey9qKm6jy/upaPZ/WzfuT+iTGRiQAY4WemHueXxuzH127oOg==} + deprecated: 'Merged into vuejs/router. Migrate: https://router.vuejs.org/guide/migration/v4-to-v5.html' peerDependencies: vue-router: ^4.4.0 peerDependenciesMeta: @@ -5982,6 +6028,7 @@ packages: unplugin-vue-router@0.16.2: resolution: {integrity: sha512-lE6ZjnHaXfS2vFI/PSEwdKcdOo5RwAbCKUnPBIN9YwLgSWas3x+qivzQvJa/uxhKzJldE6WK43aDKjGj9Rij9w==} + deprecated: 'Merged into vuejs/router. Migrate: https://router.vuejs.org/guide/migration/v4-to-v5.html' peerDependencies: '@vue/compiler-sfc': ^3.5.17 vue-router: ^4.6.0 @@ -6098,6 +6145,7 @@ packages: uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true validate-npm-package-license@3.0.4: diff --git a/strr-platform-web/pnpm-workspace.yaml b/strr-platform-web/pnpm-workspace.yaml new file mode 100644 index 000000000..19dcc72cc --- /dev/null +++ b/strr-platform-web/pnpm-workspace.yaml @@ -0,0 +1,6 @@ +packages: [] +allowBuilds: + '@parcel/watcher': true + esbuild: true + sharp: true + unrs-resolver: true diff --git a/strr-strata-web/ensure-strr-base-web.mjs b/strr-strata-web/ensure-strr-base-web.mjs new file mode 100644 index 000000000..de15618df --- /dev/null +++ b/strr-strata-web/ensure-strr-base-web.mjs @@ -0,0 +1,79 @@ +import { existsSync, mkdirSync, writeFileSync } from 'node:fs' +import { gunzipSync } from 'node:zlib' +import { dirname, join, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' + +// strr-base-web is extended as a local sibling layer (not a published package) - +// see nuxt.config.ts for why. The official CD deploy pipeline's Docker build +// context is scoped to this app's own directory only (bcgov/bcregistry-sre's +// Dockerfile-build does `COPY . /app` from whatever `gcloud builds submit` was +// invoked with, which frontend-cd.yaml scopes to just this app's +// working_directory) - strr-base-web is never uploaded alongside it there, by +// design. CI/local dev/the Cloud Build PR-preview channel all have the full +// repo checked out, so this is CD-pipeline-specific: fetch strr-base-web fresh +// from main when it's not there at all, matching what the old git-hosted +// `extends` layer reference used to do at build time regardless of local +// checkout contents. +// +// This has to run as a standalone `preinstall` script (before pnpm even +// resolves dependencies, well before nuxt.config.ts is loaded via +// `postinstall: nuxt prepare`) rather than inside nuxt.config.ts itself: jiti +// (nuxt.config.ts's loader) resolves import()s ahead of that file's own +// runtime code executing, so a dynamic import there can't depend on a fetch +// step run earlier in the same file. +// +// Fetches and extracts GitHub's tarball using only Node builtins (fetch, +// zlib, fs) rather than shelling out to `git`/`tar`/`curl`: the actual build +// image this runs in (an Alpine-based firebase-repo image) doesn't have git +// installed at all, and a bare `execSync('git ...')`/('tar ...') call would +// also trip SonarCloud typescript:S4036 (PATH-dependent command resolution). +const baseWebDir = resolve(dirname(fileURLToPath(import.meta.url)), '../strr-base-web') + +if (!existsSync(baseWebDir)) { + const res = await fetch('https://codeload.github.com/bcgov/STRR/tar.gz/refs/heads/main') + if (!res.ok) { + throw new Error(`Failed to fetch strr-base-web tarball: ${res.status} ${res.statusText}`) + } + const tar = gunzipSync(Buffer.from(await res.arrayBuffer())) + + // Minimal POSIX tar reader: just enough to pull out the strr-base-web/ + // subtree from a GitHub codeload archive (ustar headers + pax extended + // headers for long paths, which is what git archive/GitHub both produce). + let offset = 0 + let longPath = null + while (offset + 512 <= tar.length) { + const header = tar.subarray(offset, offset + 512) + if (header.every(byte => byte === 0)) { + break + } + const readField = (start, length) => header.subarray(start, start + length).toString('utf-8').replace(/\0.*$/s, '').trim() + const name = longPath ?? readField(0, 100) + const size = parseInt(readField(124, 12) || '0', 8) + const typeflag = String.fromCharCode(header[156]) + const contentStart = offset + 512 + const paddedSize = Math.ceil(size / 512) * 512 + longPath = null + + if (typeflag === 'x') { + // pax extended header: lines like " path=\n" + const pax = tar.subarray(contentStart, contentStart + size).toString('utf-8') + const match = pax.match(/\d+ path=([^\n]+)\n/) + if (match) { + longPath = match[1] + } + } else if ((typeflag === '0' || typeflag === '\0') && name.includes('/strr-base-web/')) { + const relativePath = name.slice(name.indexOf('/strr-base-web/') + '/strr-base-web/'.length) + if (relativePath) { + const destPath = join(baseWebDir, relativePath) + mkdirSync(dirname(destPath), { recursive: true }) + writeFileSync(destPath, tar.subarray(contentStart, contentStart + size)) + } + } + + offset = contentStart + paddedSize + } + + if (!existsSync(baseWebDir)) { + throw new Error('strr-base-web not found in the fetched bcgov/STRR tarball') + } +} diff --git a/strr-strata-web/nuxt.config.ts b/strr-strata-web/nuxt.config.ts index 51a868360..66ed4022d 100644 --- a/strr-strata-web/nuxt.config.ts +++ b/strr-strata-web/nuxt.config.ts @@ -1,3 +1,21 @@ +import { ensureStrrBaseWebPrepared } from '../strr-base-web/prepare.mjs' + +// strr-base-web is extended as a local sibling layer (not a published package), +// so its own generated .nuxt/tsconfig.json may not exist yet in a fresh checkout +// (e.g. CI, where only this app's own `nuxt prepare` runs). Without it, jiti fails +// to resolve strr-base-web/tsconfig.json's "extends" while evaluating its +// tailwind.config.ts, breaking the whole build. Prepare it eagerly if missing. +// +// strr-base-web itself is guaranteed to exist by this point: the official CD +// deploy pipeline's Docker build context is scoped to this app's own directory +// only, so a `preinstall` script (ensure-strr-base-web.mjs, run before pnpm +// even resolves dependencies, well before this file is loaded) clones it fresh +// from GitHub there if it's missing outright - see that file for why this +// can't live here instead (jiti pre-resolves import()s before any of this +// file's own runtime code executes, so a dynamic import can't depend on a +// clone step that only just ran a few lines above it). +ensureStrrBaseWebPrepared() + // https://nuxt.com/docs/api/configuration/nuxt-config export default defineNuxtConfig({ devtools: { enabled: false }, @@ -35,8 +53,7 @@ export default defineNuxtConfig({ }, extends: [ - ['github:bcgov/STRR/strr-base-web', { install: true }], - // '../strr-base-web', // dev only + '../strr-base-web', '@daxiom/nuxt-core-layer-test' // extend again, this prevents the payApi plugin error ], diff --git a/strr-strata-web/package.json b/strr-strata-web/package.json index adbddcf5a..85116e5ed 100644 --- a/strr-strata-web/package.json +++ b/strr-strata-web/package.json @@ -12,6 +12,7 @@ "dev": "nuxt dev --port 3000", "generate": "nuxt generate", "preview": "nuxt preview", + "preinstall": "node ensure-strr-base-web.mjs", "postinstall": "nuxt prepare", "lint": "eslint --ext .ts,.vue app tests --ignore-path .gitignore", "lint:fix": "pnpm lint --fix", @@ -42,6 +43,7 @@ "otpauth": "^9.3.6", "playwright-core": "^1.49.1", "sass": "^1.97.0", + "tailwindcss": "^3.4.19", "typescript": "^5.9.3", "vitest": "3.2.4" }, @@ -51,5 +53,6 @@ "nuxt": "3.15.4", "vue-country-flag-next": "^2.3.2", "vue-router": "^4.6.4" - } + }, + "packageManager": "pnpm@11.9.0+sha512.bd682d5d03fe525ef7c9fd6780c6884d1e756ac4c9c9fe00c538782824310dcf90e3ddc4f53835f06dfaebd5085e41855e0bcbb3b60de2ac5bbab89e5036f03b" } diff --git a/strr-strata-web/pnpm-lock.yaml b/strr-strata-web/pnpm-lock.yaml index 0be5ff13e..19f23e4a8 100644 --- a/strr-strata-web/pnpm-lock.yaml +++ b/strr-strata-web/pnpm-lock.yaml @@ -10,13 +10,13 @@ importers: dependencies: '@daxiom/nuxt-core-layer-test': specifier: ^0.0.29 - version: 0.0.29(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@nuxt/kit@3.15.4(magicast@0.3.5))(@vue/compiler-dom@3.5.31)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.3.5)(nuxt@3.15.4(@parcel/watcher@2.5.6)(@types/node@25.5.0)(cac@6.7.14)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.60.1)(sass@1.98.0)(srvx@0.11.14)(terser@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3))(rollup@4.60.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3))(yaml@2.8.3) + version: 0.0.29(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@nuxt/kit@3.15.4(magicast@0.5.2))(@vue/compiler-dom@3.5.31)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@3.15.4(@parcel/watcher@2.5.6)(@types/node@25.5.0)(cac@6.7.14)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.60.1)(sass@1.98.0)(srvx@0.11.14)(terser@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3))(rollup@4.60.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3))(yaml@2.8.3) country-codes-list: specifier: ^2.0.0 version: 2.0.0 nuxt: specifier: 3.15.4 - version: 3.15.4(@parcel/watcher@2.5.6)(@types/node@25.5.0)(cac@6.7.14)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.60.1)(sass@1.98.0)(srvx@0.11.14)(terser@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3) + version: 3.15.4(@parcel/watcher@2.5.6)(@types/node@25.5.0)(cac@6.7.14)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.60.1)(sass@1.98.0)(srvx@0.11.14)(terser@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3) vue-country-flag-next: specifier: ^2.3.2 version: 2.3.2(vue@3.5.31(typescript@5.9.3)) @@ -35,16 +35,16 @@ importers: version: 3.2.4(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) '@nuxt/image': specifier: ^2.0.0 - version: 2.0.0(db0@0.3.4)(ioredis@5.10.1)(magicast@0.3.5)(srvx@0.11.14) + version: 2.0.0(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(srvx@0.11.14) '@nuxt/test-utils': specifier: 3.21.0 - version: 3.21.0(@playwright/test@1.59.1)(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@5.9.3)))(@vue/test-utils@2.4.6)(happy-dom@20.8.9)(jsdom@26.1.0)(magicast@0.3.5)(playwright-core@1.59.1)(typescript@5.9.3)(vitest@3.2.4(@types/node@25.5.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3)) + version: 3.21.0(@playwright/test@1.59.1)(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@5.9.3)))(@vue/test-utils@2.4.6)(happy-dom@20.8.9)(jsdom@26.1.0)(magicast@0.5.2)(playwright-core@1.59.1)(typescript@5.9.3)(vitest@3.2.4(@types/node@25.5.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3)) '@nuxtjs/eslint-config-typescript': specifier: ^12.1.0 version: 12.1.0(eslint@8.57.1)(typescript@5.9.3) '@nuxtjs/eslint-module': specifier: ^4.1.0 - version: 4.1.0(eslint@8.57.1)(magicast@0.3.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.105.4) + version: 4.1.0(eslint@8.57.1)(magicast@0.5.2)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.105.4) '@pinia/testing': specifier: ^1.0.3 version: 1.0.3(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))) @@ -84,6 +84,9 @@ importers: sass: specifier: ^1.97.0 version: 1.98.0 + tailwindcss: + specifier: ^3.4.19 + version: 3.4.19(yaml@2.8.3) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -912,89 +915,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -1405,48 +1424,56 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-arm64-musl@0.112.0': resolution: {integrity: sha512-3R0iqjM3xYOZCnwgcxOQXH7hrz64/USDIuLbNTM1kZqQzRqaR4w7SwoWKU934zABo8d0op2oSwOp+CV3hZnM7A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@oxc-parser/binding-linux-ppc64-gnu@0.112.0': resolution: {integrity: sha512-lAQf8PQxfgy7h0bmcfSVE3hg3qMueshPYULFsCrHM+8KefGZ9W+ZMvRyU33gLrB4w1O3Fz1orR0hmKMCRxXNrQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-riscv64-gnu@0.112.0': resolution: {integrity: sha512-2QlvQBUhHuAE3ezD4X3CAEKMXdfgInggQ5Bj/7gb5NcYP3GyfLTj7c+mMu+BRwfC9B3AXBNyqHWbqEuuUvZyRQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-riscv64-musl@0.112.0': resolution: {integrity: sha512-v06iu0osHszgqJ1dLQRb6leWFU1sjG/UQk4MoVBtE6ZPewgfTkby6G9II1SpEAf2onnAuQceVYxQH9iuU3NJqw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [musl] '@oxc-parser/binding-linux-s390x-gnu@0.112.0': resolution: {integrity: sha512-+5HhNHtxsdcd7+ljXFnn9FOoCNXJX3UPgIfIE6vdwS1HqdGNH6eAcVobuqGOp54l8pvcxDQA6F4cPswCgLrQfQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-x64-gnu@0.112.0': resolution: {integrity: sha512-jKwO7ZLNkjxwg7FoCLw+fJszooL9yXRZsDN0AQ1AQUTWq1l8GH/2e44k68N3fcP19jl8O8jGpqLAZcQTYk6skA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-x64-musl@0.112.0': resolution: {integrity: sha512-TYqnuKV/p3eOc+N61E0961nA7DC+gaCeJ3+V2LcjJdTwFMdikqWL6uVk1jlrpUCBrozHDATVUKDZYH7r4FQYjQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@oxc-parser/binding-openharmony-arm64@0.112.0': resolution: {integrity: sha512-ZhrVmWFifVEFQX4XPwLoVFDHw9tAWH9p9vHsHFH+5uCKdfVR+jje4WxVo6YrokWCboGckoOzHq5KKMOcPZfkRg==} @@ -1527,48 +1554,56 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@oxc-transform/binding-linux-arm64-musl@0.112.0': resolution: {integrity: sha512-Lg6VOuSd3oXv7J0eGywgqh/086h+qQzIBOD+47pYKMTTJcbDe+f3h/RgGoMKJE5HhiwT5sH1aGEJfIfaYUiVSw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@oxc-transform/binding-linux-ppc64-gnu@0.112.0': resolution: {integrity: sha512-PXzmj82o1moA4IGphYImTRgc2youTi4VRfyFX3CHwLjxPcQ5JtcsgbDt4QUdOzXZ+zC07s5jf2ZzhRapEOlj2w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@oxc-transform/binding-linux-riscv64-gnu@0.112.0': resolution: {integrity: sha512-vhJsMsVH/6xwa3bt1LGts33FXUkGjaEGDwsRyp4lIfOjSfQVWMtCmWMFNaA0dW9FVWdD2Gt2fSFBSZ+azDxlpg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxc-transform/binding-linux-riscv64-musl@0.112.0': resolution: {integrity: sha512-cXWFb7z+2IjFUEcXtRwluq9oEG5qnyFCjiu3SWrgYNcWwPdHusv3I/7K5/CTbbi4StoZ5txbi7/iSfDHNyWuRw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [musl] '@oxc-transform/binding-linux-s390x-gnu@0.112.0': resolution: {integrity: sha512-eEFu4SRqJTJ20/88KRWmp+jpHKAw0Y1DsnSgpEeXyBIIcsOaLIUMU/TfYWUmqRbvbMV9rmOmI3kp5xWYUq6kSQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@oxc-transform/binding-linux-x64-gnu@0.112.0': resolution: {integrity: sha512-ST1MDT+TlOyZ1c5btrGinRSUW2Jf4Pa+0gdKwsyjDSOC3dxy2ZNkN3mosTf4ywc3J+mxfYKqtjs7zSwHz03ILA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@oxc-transform/binding-linux-x64-musl@0.112.0': resolution: {integrity: sha512-ISQoA3pD4cyTGpf9sXXeerH6pL2L6EIpdy6oAy2ttkswyVFDyQNVOVIGIdLZDgbpmqGljxZnWqt/J/N68pQaig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@oxc-transform/binding-openharmony-arm64@0.112.0': resolution: {integrity: sha512-UOGVrGIv7yLJovyEXEyUTADuLq98vd/cbMHFLJweRXD+11I8Tn4jASi4WzdsN8C3BVYGRHrXH2NlSBmhz33a4g==} @@ -1628,36 +1663,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.6': resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.6': resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.6': resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.6': resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.6': resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-wasm@2.5.6': resolution: {integrity: sha512-byAiBZ1t3tXQvc8dMD/eoyE7lTXYorhn+6uVW5AC+JGI1KtJC/LvDche5cfUE+qiefH+Ybq0bUCJU0aB1cSHUA==} @@ -1843,66 +1884,79 @@ packages: resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.60.1': resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.60.1': resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.60.1': resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.60.1': resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.60.1': resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==} cpu: [loong64] os: [linux] + libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.60.1': resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.60.1': resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==} cpu: [ppc64] os: [linux] + libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.60.1': resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.60.1': resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.60.1': resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.60.1': resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.60.1': resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openbsd-x64@4.60.1': resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==} @@ -2169,6 +2223,7 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + deprecated: Potential CWE-502 - Update to 1.3.1 or higher '@unhead/dom@1.11.20': resolution: {integrity: sha512-jgfGYdOH+xHJF/j8gudjsYu3oIjFyXhCWcgKaw3vQnT616gSqyqnGQGOItL+BQtQZACKNISwIfx5PuOtztMKLA==} @@ -2226,41 +2281,49 @@ packages: resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} cpu: [arm64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-arm64-musl@1.11.1': resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} cpu: [arm64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} cpu: [riscv64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} cpu: [riscv64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} cpu: [s390x] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-gnu@1.11.1': resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} cpu: [x64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-musl@1.11.1': resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} cpu: [x64] os: [linux] + libc: [musl] '@unrs/resolver-binding-wasm32-wasi@1.11.1': resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} @@ -6313,6 +6376,7 @@ packages: uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true validate-npm-package-license@3.0.4: @@ -7086,20 +7150,20 @@ snapshots: dependencies: postcss-selector-parser: 7.1.1 - '@daxiom/nuxt-core-layer-test@0.0.29(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@nuxt/kit@3.15.4(magicast@0.3.5))(@vue/compiler-dom@3.5.31)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.3.5)(nuxt@3.15.4(@parcel/watcher@2.5.6)(@types/node@25.5.0)(cac@6.7.14)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.60.1)(sass@1.98.0)(srvx@0.11.14)(terser@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3))(rollup@4.60.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3))(yaml@2.8.3)': + '@daxiom/nuxt-core-layer-test@0.0.29(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@nuxt/kit@3.15.4(magicast@0.5.2))(@vue/compiler-dom@3.5.31)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@3.15.4(@parcel/watcher@2.5.6)(@types/node@25.5.0)(cac@6.7.14)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.60.1)(sass@1.98.0)(srvx@0.11.14)(terser@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3))(rollup@4.60.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3))(yaml@2.8.3)': dependencies: '@iconify-json/mdi': 1.2.3 '@nuxt/ui': 2.22.3(magicast@0.3.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3))(yaml@2.8.3)(zod@3.25.76) - '@nuxtjs/i18n': 10.2.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vue/compiler-dom@3.5.31)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.3.5)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3)))(rollup@4.60.1)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3)) - '@pinia/nuxt': 0.11.3(magicast@0.3.5)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))) - '@vueuse/nuxt': 13.9.0(magicast@0.3.5)(nuxt@3.15.4(@parcel/watcher@2.5.6)(@types/node@25.5.0)(cac@6.7.14)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.60.1)(sass@1.98.0)(srvx@0.11.14)(terser@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) + '@nuxtjs/i18n': 10.2.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vue/compiler-dom@3.5.31)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.5.2)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3)))(rollup@4.60.1)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3)) + '@pinia/nuxt': 0.11.3(magicast@0.5.2)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))) + '@vueuse/nuxt': 13.9.0(magicast@0.5.2)(nuxt@3.15.4(@parcel/watcher@2.5.6)(@types/node@25.5.0)(cac@6.7.14)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.60.1)(sass@1.98.0)(srvx@0.11.14)(terser@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) dompurify: 3.3.3 jsdom: 26.1.0 keycloak-js: 26.2.3 launchdarkly-vue-client-sdk: 2.5.0(vue@3.5.31(typescript@5.9.3)) maska: 3.2.0 pinia: 3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3)) - pinia-plugin-persistedstate: 4.7.1(@nuxt/kit@3.15.4(magicast@0.3.5))(@pinia/nuxt@0.11.3(magicast@0.3.5)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))))(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))) + pinia-plugin-persistedstate: 4.7.1(@nuxt/kit@3.15.4(magicast@0.5.2))(@pinia/nuxt@0.11.3(magicast@0.5.2)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))))(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))) zod: 3.25.76 transitivePeerDependencies: - '@azure/app-configuration' @@ -7830,9 +7894,9 @@ snapshots: - magicast - supports-color - '@nuxt/devtools-kit@2.7.0(magicast@0.3.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))': + '@nuxt/devtools-kit@2.7.0(magicast@0.5.2)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))': dependencies: - '@nuxt/kit': 3.21.2(magicast@0.3.5) + '@nuxt/kit': 3.21.2(magicast@0.5.2) execa: 8.0.1 vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3) transitivePeerDependencies: @@ -7958,14 +8022,14 @@ snapshots: - utf-8-validate - vue - '@nuxt/icon@1.15.0(magicast@0.3.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3))': + '@nuxt/icon@1.15.0(magicast@0.5.2)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3))': dependencies: '@iconify/collections': 1.0.668 '@iconify/types': 2.0.0 '@iconify/utils': 2.3.0 '@iconify/vue': 5.0.0(vue@3.5.31(typescript@5.9.3)) - '@nuxt/devtools-kit': 2.7.0(magicast@0.3.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3)) - '@nuxt/kit': 3.21.2(magicast@0.3.5) + '@nuxt/devtools-kit': 2.7.0(magicast@0.5.2)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3)) + '@nuxt/kit': 3.21.2(magicast@0.5.2) consola: 3.4.2 local-pkg: 1.1.2 mlly: 1.8.2 @@ -7980,9 +8044,9 @@ snapshots: - vite - vue - '@nuxt/image@2.0.0(db0@0.3.4)(ioredis@5.10.1)(magicast@0.3.5)(srvx@0.11.14)': + '@nuxt/image@2.0.0(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(srvx@0.11.14)': dependencies: - '@nuxt/kit': 4.4.2(magicast@0.3.5) + '@nuxt/kit': 4.4.2(magicast@0.5.2) consola: 3.4.2 defu: 6.1.6 h3: 1.15.11 @@ -8043,6 +8107,32 @@ snapshots: - magicast - supports-color + '@nuxt/kit@3.15.4(magicast@0.5.2)': + dependencies: + c12: 2.0.4(magicast@0.5.2) + consola: 3.4.2 + defu: 6.1.6 + destr: 2.0.5 + globby: 14.1.0 + ignore: 7.0.5 + jiti: 2.6.1 + klona: 2.0.6 + knitwork: 1.3.0 + mlly: 1.8.2 + ohash: 1.1.6 + pathe: 2.0.3 + pkg-types: 1.3.1 + scule: 1.3.0 + semver: 7.7.4 + std-env: 3.10.0 + ufo: 1.6.3 + unctx: 2.5.0 + unimport: 4.2.0 + untyped: 1.5.2 + transitivePeerDependencies: + - magicast + - supports-color + '@nuxt/kit@3.21.2(magicast@0.3.5)': dependencies: c12: 3.3.4(magicast@0.3.5) @@ -8069,9 +8159,9 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/kit@4.4.2(magicast@0.3.5)': + '@nuxt/kit@3.21.2(magicast@0.5.2)': dependencies: - c12: 3.3.4(magicast@0.3.5) + c12: 3.3.4(magicast@0.5.2) consola: 3.4.2 defu: 6.1.6 destr: 2.0.5 @@ -8080,6 +8170,7 @@ snapshots: ignore: 7.0.5 jiti: 2.6.1 klona: 2.0.6 + knitwork: 1.3.0 mlly: 1.8.2 ohash: 2.0.11 pathe: 2.0.3 @@ -8128,14 +8219,14 @@ snapshots: '@nuxt/telemetry@2.8.0(@nuxt/kit@3.15.4(magicast@0.3.5))': dependencies: - '@nuxt/kit': 3.15.4(magicast@0.3.5) + '@nuxt/kit': 3.15.4(magicast@0.5.2) citty: 0.2.2 consola: 3.4.2 ofetch: 2.0.0-alpha.3 rc9: 3.0.1 std-env: 4.0.0 - '@nuxt/test-utils@3.21.0(@playwright/test@1.59.1)(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@5.9.3)))(@vue/test-utils@2.4.6)(happy-dom@20.8.9)(jsdom@26.1.0)(magicast@0.3.5)(playwright-core@1.59.1)(typescript@5.9.3)(vitest@3.2.4(@types/node@25.5.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))': + '@nuxt/test-utils@3.21.0(@playwright/test@1.59.1)(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@5.9.3)))(@vue/test-utils@2.4.6)(happy-dom@20.8.9)(jsdom@26.1.0)(magicast@0.5.2)(playwright-core@1.59.1)(typescript@5.9.3)(vitest@3.2.4(@types/node@25.5.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))': dependencies: '@nuxt/kit': 3.21.2(magicast@0.3.5) c12: 3.3.4(magicast@0.3.5) @@ -8160,7 +8251,7 @@ snapshots: tinyexec: 1.0.4 ufo: 1.6.3 unplugin: 2.3.11 - vitest-environment-nuxt: 1.0.1(@playwright/test@1.59.1)(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@5.9.3)))(@vue/test-utils@2.4.6)(happy-dom@20.8.9)(jsdom@26.1.0)(magicast@0.3.5)(playwright-core@1.59.1)(typescript@5.9.3)(vitest@3.2.4(@types/node@25.5.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3)) + vitest-environment-nuxt: 1.0.1(@playwright/test@1.59.1)(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@5.9.3)))(@vue/test-utils@2.4.6)(happy-dom@20.8.9)(jsdom@26.1.0)(magicast@0.5.2)(playwright-core@1.59.1)(typescript@5.9.3)(vitest@3.2.4(@types/node@25.5.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3)) vue: 3.5.31(typescript@5.9.3) optionalDependencies: '@playwright/test': 1.59.1 @@ -8179,9 +8270,9 @@ snapshots: '@headlessui/tailwindcss': 0.2.2(tailwindcss@3.4.19(yaml@2.8.3)) '@headlessui/vue': 1.7.23(vue@3.5.31(typescript@5.9.3)) '@iconify-json/heroicons': 1.2.3 - '@nuxt/icon': 1.15.0(magicast@0.3.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) - '@nuxt/kit': 4.4.2(magicast@0.3.5) - '@nuxtjs/color-mode': 3.5.2(magicast@0.3.5) + '@nuxt/icon': 1.15.0(magicast@0.5.2)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) + '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@nuxtjs/color-mode': 3.5.2(magicast@0.5.2) '@nuxtjs/tailwindcss': 6.14.0(magicast@0.3.5)(yaml@2.8.3) '@popperjs/core': 2.11.8 '@standard-schema/spec': 1.1.0 @@ -8220,9 +8311,9 @@ snapshots: - vue - yaml - '@nuxt/vite-builder@3.15.4(@types/node@25.5.0)(eslint@8.57.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.60.1)(sass@1.98.0)(terser@5.46.1)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))(yaml@2.8.3)': + '@nuxt/vite-builder@3.15.4(@types/node@25.5.0)(eslint@8.57.1)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.60.1)(sass@1.98.0)(terser@5.46.1)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))(yaml@2.8.3)': dependencies: - '@nuxt/kit': 3.15.4(magicast@0.3.5) + '@nuxt/kit': 3.15.4(magicast@0.5.2) '@rollup/plugin-replace': 6.0.3(rollup@4.60.1) '@vitejs/plugin-vue': 5.2.4(vite@6.4.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) '@vitejs/plugin-vue-jsx': 4.2.0(vite@6.4.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) @@ -8279,9 +8370,9 @@ snapshots: - vue-tsc - yaml - '@nuxtjs/color-mode@3.5.2(magicast@0.3.5)': + '@nuxtjs/color-mode@3.5.2(magicast@0.5.2)': dependencies: - '@nuxt/kit': 3.21.2(magicast@0.3.5) + '@nuxt/kit': 3.21.2(magicast@0.5.2) pathe: 1.1.2 pkg-types: 1.3.1 semver: 7.7.4 @@ -8320,9 +8411,9 @@ snapshots: - eslint-import-resolver-webpack - supports-color - '@nuxtjs/eslint-module@4.1.0(eslint@8.57.1)(magicast@0.3.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.105.4)': + '@nuxtjs/eslint-module@4.1.0(eslint@8.57.1)(magicast@0.5.2)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(webpack@5.105.4)': dependencies: - '@nuxt/kit': 3.21.2(magicast@0.3.5) + '@nuxt/kit': 3.21.2(magicast@0.5.2) chokidar: 3.6.0 eslint: 8.57.1 eslint-webpack-plugin: 4.2.0(eslint@8.57.1)(webpack@5.105.4) @@ -8333,7 +8424,7 @@ snapshots: - vite - webpack - '@nuxtjs/i18n@10.2.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vue/compiler-dom@3.5.31)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.3.5)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3)))(rollup@4.60.1)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))': + '@nuxtjs/i18n@10.2.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vue/compiler-dom@3.5.31)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.5.2)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3)))(rollup@4.60.1)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))': dependencies: '@intlify/core': 11.3.0 '@intlify/h3': 0.7.4 @@ -8341,7 +8432,7 @@ snapshots: '@intlify/unplugin-vue-i18n': 11.0.7(@vue/compiler-dom@3.5.31)(eslint@8.57.1)(rollup@4.60.1)(typescript@5.9.3)(vue-i18n@11.3.0(vue@3.5.31(typescript@5.9.3)))(vue@3.5.31(typescript@5.9.3)) '@intlify/utils': 0.14.1 '@miyaneee/rollup-plugin-json5': 1.2.0(rollup@4.60.1) - '@nuxt/kit': 4.4.2(magicast@0.3.5) + '@nuxt/kit': 4.4.2(magicast@0.5.2) '@rollup/plugin-yaml': 4.1.2(rollup@4.60.1) '@vue/compiler-sfc': 3.5.31 defu: 6.1.6 @@ -8397,7 +8488,7 @@ snapshots: '@nuxtjs/tailwindcss@6.14.0(magicast@0.3.5)(yaml@2.8.3)': dependencies: - '@nuxt/kit': 3.21.2(magicast@0.3.5) + '@nuxt/kit': 3.21.2(magicast@0.5.2) autoprefixer: 10.4.27(postcss@8.5.8) c12: 3.3.4(magicast@0.3.5) consola: 3.4.2 @@ -8618,9 +8709,9 @@ snapshots: '@parcel/watcher-win32-ia32': 2.5.6 '@parcel/watcher-win32-x64': 2.5.6 - '@pinia/nuxt@0.11.3(magicast@0.3.5)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3)))': + '@pinia/nuxt@0.11.3(magicast@0.5.2)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3)))': dependencies: - '@nuxt/kit': 4.4.2(magicast@0.3.5) + '@nuxt/kit': 4.4.2(magicast@0.5.2) pinia: 3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3)) transitivePeerDependencies: - magicast @@ -9453,13 +9544,13 @@ snapshots: '@vueuse/metadata@13.9.0': {} - '@vueuse/nuxt@13.9.0(magicast@0.3.5)(nuxt@3.15.4(@parcel/watcher@2.5.6)(@types/node@25.5.0)(cac@6.7.14)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.60.1)(sass@1.98.0)(srvx@0.11.14)(terser@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3))': + '@vueuse/nuxt@13.9.0(magicast@0.5.2)(nuxt@3.15.4(@parcel/watcher@2.5.6)(@types/node@25.5.0)(cac@6.7.14)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.60.1)(sass@1.98.0)(srvx@0.11.14)(terser@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3))': dependencies: - '@nuxt/kit': 3.21.2(magicast@0.3.5) + '@nuxt/kit': 3.21.2(magicast@0.5.2) '@vueuse/core': 13.9.0(vue@3.5.31(typescript@5.9.3)) '@vueuse/metadata': 13.9.0 local-pkg: 1.1.2 - nuxt: 3.15.4(@parcel/watcher@2.5.6)(@types/node@25.5.0)(cac@6.7.14)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.60.1)(sass@1.98.0)(srvx@0.11.14)(terser@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3) + nuxt: 3.15.4(@parcel/watcher@2.5.6)(@types/node@25.5.0)(cac@6.7.14)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.60.1)(sass@1.98.0)(srvx@0.11.14)(terser@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3) vue: 3.5.31(typescript@5.9.3) transitivePeerDependencies: - magicast @@ -9879,6 +9970,23 @@ snapshots: optionalDependencies: magicast: 0.3.5 + c12@2.0.4(magicast@0.5.2): + dependencies: + chokidar: 4.0.3 + confbox: 0.1.8 + defu: 6.1.6 + dotenv: 16.6.1 + giget: 1.2.5 + jiti: 2.6.1 + mlly: 1.8.2 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 1.0.0 + pkg-types: 1.3.1 + rc9: 2.1.2 + optionalDependencies: + magicast: 0.5.2 + c12@3.3.4(magicast@0.3.5): dependencies: chokidar: 5.0.0 @@ -12226,15 +12334,15 @@ snapshots: nuxt-define@1.0.0: {} - nuxt@3.15.4(@parcel/watcher@2.5.6)(@types/node@25.5.0)(cac@6.7.14)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.60.1)(sass@1.98.0)(srvx@0.11.14)(terser@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3): + nuxt@3.15.4(@parcel/watcher@2.5.6)(@types/node@25.5.0)(cac@6.7.14)(db0@0.3.4)(eslint@8.57.1)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.60.1)(sass@1.98.0)(srvx@0.11.14)(terser@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3): dependencies: '@nuxt/cli': 3.34.0(@nuxt/schema@3.15.4)(cac@6.7.14)(magicast@0.3.5) '@nuxt/devalue': 2.0.2 '@nuxt/devtools': 1.7.0(rollup@4.60.1)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.31(typescript@5.9.3)) - '@nuxt/kit': 3.15.4(magicast@0.3.5) + '@nuxt/kit': 3.15.4(magicast@0.5.2) '@nuxt/schema': 3.15.4 '@nuxt/telemetry': 2.8.0(@nuxt/kit@3.15.4(magicast@0.3.5)) - '@nuxt/vite-builder': 3.15.4(@types/node@25.5.0)(eslint@8.57.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.60.1)(sass@1.98.0)(terser@5.46.1)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))(yaml@2.8.3) + '@nuxt/vite-builder': 3.15.4(@types/node@25.5.0)(eslint@8.57.1)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.60.1)(sass@1.98.0)(terser@5.46.1)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))(yaml@2.8.3) '@unhead/dom': 1.11.20 '@unhead/shared': 1.11.20 '@unhead/ssr': 1.11.20 @@ -12646,12 +12754,12 @@ snapshots: pify@2.3.0: {} - pinia-plugin-persistedstate@4.7.1(@nuxt/kit@3.15.4(magicast@0.3.5))(@pinia/nuxt@0.11.3(magicast@0.3.5)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))))(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))): + pinia-plugin-persistedstate@4.7.1(@nuxt/kit@3.15.4(magicast@0.5.2))(@pinia/nuxt@0.11.3(magicast@0.5.2)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))))(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))): dependencies: defu: 6.1.6 optionalDependencies: - '@nuxt/kit': 3.15.4(magicast@0.3.5) - '@pinia/nuxt': 0.11.3(magicast@0.3.5)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))) + '@nuxt/kit': 3.15.4(magicast@0.5.2) + '@pinia/nuxt': 0.11.3(magicast@0.5.2)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))) pinia: 3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3)) pinia@3.0.4(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3)): @@ -14101,7 +14209,7 @@ snapshots: sirv: 3.0.2 vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3) optionalDependencies: - '@nuxt/kit': 3.15.4(magicast@0.3.5) + '@nuxt/kit': 3.15.4(magicast@0.5.2) transitivePeerDependencies: - rollup - supports-color @@ -14180,9 +14288,9 @@ snapshots: terser: 5.46.1 yaml: 2.8.3 - vitest-environment-nuxt@1.0.1(@playwright/test@1.59.1)(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@5.9.3)))(@vue/test-utils@2.4.6)(happy-dom@20.8.9)(jsdom@26.1.0)(magicast@0.3.5)(playwright-core@1.59.1)(typescript@5.9.3)(vitest@3.2.4(@types/node@25.5.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3)): + vitest-environment-nuxt@1.0.1(@playwright/test@1.59.1)(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@5.9.3)))(@vue/test-utils@2.4.6)(happy-dom@20.8.9)(jsdom@26.1.0)(magicast@0.5.2)(playwright-core@1.59.1)(typescript@5.9.3)(vitest@3.2.4(@types/node@25.5.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3)): dependencies: - '@nuxt/test-utils': 3.21.0(@playwright/test@1.59.1)(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@5.9.3)))(@vue/test-utils@2.4.6)(happy-dom@20.8.9)(jsdom@26.1.0)(magicast@0.3.5)(playwright-core@1.59.1)(typescript@5.9.3)(vitest@3.2.4(@types/node@25.5.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3)) + '@nuxt/test-utils': 3.21.0(@playwright/test@1.59.1)(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@5.9.3)))(@vue/test-utils@2.4.6)(happy-dom@20.8.9)(jsdom@26.1.0)(magicast@0.5.2)(playwright-core@1.59.1)(typescript@5.9.3)(vitest@3.2.4(@types/node@25.5.0)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@26.1.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.3)) transitivePeerDependencies: - '@cucumber/cucumber' - '@jest/globals' diff --git a/strr-strata-web/pnpm-workspace.yaml b/strr-strata-web/pnpm-workspace.yaml new file mode 100644 index 000000000..19dcc72cc --- /dev/null +++ b/strr-strata-web/pnpm-workspace.yaml @@ -0,0 +1,6 @@ +packages: [] +allowBuilds: + '@parcel/watcher': true + esbuild: true + sharp: true + unrs-resolver: true