pnpm workspace root for Barazo forum development — shared configuration, tooling, and cross-package dependency management barazo.forum

chore(workspace): P2.9 developer experience + AI agent readiness (#10)

* chore(workspace): add prettier and lint-staged to pnpm catalog

Add prettier ^3.8.1 and lint-staged ^16.2.7 to the pnpm catalog for
consistent version management across all workspace packages. Add both
as workspace root devDependencies using catalog: references.

* chore(workspace): add prettier config and prettierignore

Add workspace-level prettier.config.mjs matching the existing barazo-web
config (semi: false, singleQuote, tabWidth: 2, trailingComma: es5,
printWidth: 100). Add .prettierignore to exclude generated files, dist,
node_modules, lockfiles, and build artifacts.

* chore(workspace): fix husky hooks and add lint-staged config

Fix pre-commit hook: replace broken `npm test` with `pnpm exec lint-staged`.
Add missing commit-msg hook to enforce conventional commits via commitlint.
Add workspace-level lint-staged config for root config files (md, yml,
yaml, json).

* chore(workspace): add devcontainer for Codespaces and Dev Containers

Add .devcontainer/devcontainer.json with Node.js 24 (typescript-node
base image), Docker-in-Docker for test containers, port forwarding for
web (3000), API (3100), PostgreSQL (5432), and Valkey (6379). Includes
VS Code extensions and auto-install via corepack + pnpm.

* chore(workspace): add VS Code workspace settings

Add recommended VS Code extensions (ESLint, Prettier, Tailwind CSS,
Vitest Explorer) and workspace settings with Prettier as default
formatter, format-on-save, ESLint auto-fix, and common file excludes.

* fix(workspace): regenerate lockfile for sub-repo main branches

The workspace lockfile was generated with local sub-repo changes
that haven't been merged to main yet. Regenerated to match the
current main branch state of all sub-repos.

authored by

Guido X Jansen and committed by
GitHub
90fddb97 c99d894b

+177 -69
+34
.devcontainer/devcontainer.json
··· 1 + { 2 + "name": "Barazo Development", 3 + "image": "mcr.microsoft.com/devcontainers/typescript-node:24-bookworm", 4 + "features": { 5 + "ghcr.io/devcontainers/features/docker-in-docker:2": {} 6 + }, 7 + "forwardPorts": [3000, 3100, 5432, 6379], 8 + "portsAttributes": { 9 + "3000": { "label": "Barazo Web", "onAutoForward": "notify" }, 10 + "3100": { "label": "Barazo API", "onAutoForward": "notify" }, 11 + "5432": { "label": "PostgreSQL", "onAutoForward": "silent" }, 12 + "6379": { "label": "Valkey", "onAutoForward": "silent" } 13 + }, 14 + "postCreateCommand": "corepack enable && pnpm install", 15 + "postStartCommand": "pnpm dev:infra", 16 + "customizations": { 17 + "vscode": { 18 + "extensions": [ 19 + "dbaeumer.vscode-eslint", 20 + "esbenp.prettier-vscode", 21 + "bradlc.vscode-tailwindcss", 22 + "vitest.explorer" 23 + ], 24 + "settings": { 25 + "editor.defaultFormatter": "esbenp.prettier-vscode", 26 + "editor.formatOnSave": true, 27 + "editor.codeActionsOnSave": { 28 + "source.fixAll.eslint": "explicit" 29 + }, 30 + "typescript.preferences.importModuleSpecifier": "non-relative" 31 + } 32 + } 33 + } 34 + }
+1
.husky/commit-msg
··· 1 + pnpm exec commitlint --edit "$1"
+1 -1
.husky/pre-commit
··· 1 - npm test 1 + pnpm exec lint-staged
+8
.prettierignore
··· 1 + dist/ 2 + node_modules/ 3 + .next/ 4 + coverage/ 5 + *.min.js 6 + pnpm-lock.yaml 7 + barazo-api/src/generated/ 8 + barazo-lexicons/src/generated/
+8
.vscode/extensions.json
··· 1 + { 2 + "recommendations": [ 3 + "dbaeumer.vscode-eslint", 4 + "esbenp.prettier-vscode", 5 + "bradlc.vscode-tailwindcss", 6 + "vitest.explorer" 7 + ] 8 + }
+13
.vscode/settings.json
··· 1 + { 2 + "editor.defaultFormatter": "esbenp.prettier-vscode", 3 + "editor.formatOnSave": true, 4 + "editor.codeActionsOnSave": { 5 + "source.fixAll.eslint": "explicit" 6 + }, 7 + "typescript.preferences.importModuleSpecifier": "non-relative", 8 + "files.exclude": { 9 + "**/node_modules": true, 10 + "**/dist": true, 11 + "**/.next": true 12 + } 13 + }
+3
lint-staged.config.mjs
··· 1 + export default { 2 + '*.{md,yml,yaml,json}': ['prettier --write'], 3 + }
+5 -1
package.json
··· 12 12 "test": "pnpm -r test", 13 13 "lint": "pnpm -r lint", 14 14 "typecheck": "pnpm -r typecheck", 15 - "build": "pnpm -r build" 15 + "build": "pnpm -r build", 16 + "format": "prettier --write .", 17 + "format:check": "prettier --check ." 16 18 }, 17 19 "pnpm": { 18 20 "onlyBuiltDependencies": [ ··· 24 26 "@commitlint/cli": "catalog:", 25 27 "@commitlint/config-conventional": "catalog:", 26 28 "husky": "catalog:", 29 + "lint-staged": "catalog:", 30 + "prettier": "catalog:", 27 31 "typescript": "catalog:", 28 32 "typescript-eslint": "catalog:", 29 33 "vitest": "catalog:"
+92 -67
pnpm-lock.yaml
··· 25 25 husky: 26 26 specifier: ^9.1.7 27 27 version: 9.1.7 28 + lint-staged: 29 + specifier: ^16.2.7 30 + version: 16.2.7 28 31 multiformats: 29 32 specifier: ^13.4.2 30 33 version: 13.4.2 34 + prettier: 35 + specifier: ^3.8.1 36 + version: 3.8.1 31 37 typescript: 32 38 specifier: ^5.9.3 33 39 version: 5.9.3 ··· 54 60 husky: 55 61 specifier: 'catalog:' 56 62 version: 9.1.7 63 + lint-staged: 64 + specifier: 'catalog:' 65 + version: 16.2.7 66 + prettier: 67 + specifier: 'catalog:' 68 + version: 3.8.1 57 69 typescript: 58 70 specifier: 'catalog:' 59 71 version: 5.9.3 ··· 87 99 '@fastify/helmet': 88 100 specifier: ^13.0.0 89 101 version: 13.0.2 102 + '@fastify/multipart': 103 + specifier: ^9.4.0 104 + version: 9.4.0 90 105 '@fastify/rate-limit': 91 106 specifier: ^10.2.0 92 107 version: 10.3.0 ··· 115 130 specifier: ^5.6.1 116 131 version: 5.9.3 117 132 multiformats: 118 - specifier: 'catalog:' 133 + specifier: ^13.4.2 119 134 version: 13.4.2 120 135 postgres: 121 136 specifier: ^3.4.8 ··· 124 139 specifier: ^0.34.5 125 140 version: 0.34.5 126 141 zod: 127 - specifier: 'catalog:' 142 + specifier: ^4.3.6 128 143 version: 4.3.6 129 144 devDependencies: 130 145 '@testcontainers/postgresql': 131 146 specifier: ^11.11.0 132 147 version: 11.11.0 133 148 '@types/node': 134 - specifier: 'catalog:' 149 + specifier: ^25.2.3 135 150 version: 25.2.3 136 151 '@vitest/coverage-v8': 137 - specifier: 'catalog:' 152 + specifier: ^4.0.18 138 153 version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.2.3)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(lightningcss@1.30.2)(msw@2.12.10(@types/node@25.2.3)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2)) 139 154 drizzle-kit: 140 155 specifier: ^0.31.9 141 156 version: 0.31.9 142 157 eslint: 143 - specifier: 'catalog:' 158 + specifier: ^9.39.2 144 159 version: 9.39.2(jiti@2.6.1) 145 160 supertest: 146 161 specifier: ^7.1.0 ··· 152 167 specifier: ^4.20.3 153 168 version: 4.21.0 154 169 typescript: 155 - specifier: 'catalog:' 170 + specifier: ^5.9.3 156 171 version: 5.9.3 157 172 typescript-eslint: 158 - specifier: 'catalog:' 173 + specifier: ^8.55.0 159 174 version: 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) 160 175 vitest: 161 - specifier: 'catalog:' 176 + specifier: ^4.0.18 162 177 version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.2.3)(jiti@2.6.1)(jsdom@28.1.0(@noble/hashes@1.8.0))(lightningcss@1.30.2)(msw@2.12.10(@types/node@25.2.3)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) 163 178 164 179 barazo-lexicons: ··· 371 386 version: 9.39.2(jiti@2.6.1) 372 387 eslint-config-next: 373 388 specifier: 16.1.6 374 - version: 16.1.6(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) 389 + version: 16.1.6(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) 375 390 eslint-plugin-jsx-a11y: 376 391 specifier: ^6.10.2 377 392 version: 6.10.2(eslint@9.39.2(jiti@2.6.1)) ··· 1272 1287 '@fastify/ajv-compiler@4.0.5': 1273 1288 resolution: {integrity: sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A==} 1274 1289 1290 + '@fastify/busboy@3.2.0': 1291 + resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} 1292 + 1275 1293 '@fastify/cookie@11.0.2': 1276 1294 resolution: {integrity: sha512-GWdwdGlgJxyvNv+QcKiGNevSspMQXncjMZ1J8IvuDQk0jvkzgWWZFNC2En3s+nHndZBGV8IbLwOI/sxCZw/mzA==} 1277 1295 1278 1296 '@fastify/cors@11.2.0': 1279 1297 resolution: {integrity: sha512-LbLHBuSAdGdSFZYTLVA3+Ch2t+sA6nq3Ejc6XLAKiQ6ViS2qFnvicpj0htsx03FyYeLs04HfRNBsz/a8SvbcUw==} 1298 + 1299 + '@fastify/deepmerge@3.2.0': 1300 + resolution: {integrity: sha512-aO5giNgFN+rD4fMUAkro9nEL7c9gh5Q3lh0ZGKMDAhQAytf22HLicF/qZ2EYTDmH+XL2WvdazwBfOdmp6NiwBg==} 1280 1301 1281 1302 '@fastify/error@4.2.0': 1282 1303 resolution: {integrity: sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==} ··· 1293 1314 '@fastify/merge-json-schemas@0.2.1': 1294 1315 resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==} 1295 1316 1317 + '@fastify/multipart@9.4.0': 1318 + resolution: {integrity: sha512-Z404bzZeLSXTBmp/trCBuoVFX28pM7rhv849Q5TsbTFZHuk1lc4QjQITTPK92DKVpXmNtJXeHSSc7GYvqFpxAQ==} 1319 + 1296 1320 '@fastify/proxy-addr@5.1.0': 1297 1321 resolution: {integrity: sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==} 1298 1322 ··· 3385 3409 ajv@6.12.6: 3386 3410 resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 3387 3411 3388 - ajv@8.18.0: 3389 - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} 3412 + ajv@8.17.1: 3413 + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} 3390 3414 3391 3415 ansi-colors@4.1.3: 3392 3416 resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} ··· 3544 3568 resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 3545 3569 engines: {node: '>= 0.4'} 3546 3570 3547 - avvio@9.2.0: 3548 - resolution: {integrity: sha512-2t/sy01ArdHHE0vRH5Hsay+RtCZt3dLPji7W7/MMOCEgze5b7SNDC4j5H6FnVgPkI1MTNFGzHdHrVXDDl7QSSQ==} 3571 + avvio@9.1.0: 3572 + resolution: {integrity: sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==} 3549 3573 3550 3574 await-lock@2.2.2: 3551 3575 resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==} ··· 3558 3582 resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} 3559 3583 engines: {node: '>= 0.4'} 3560 3584 3561 - b4a@1.7.4: 3562 - resolution: {integrity: sha512-u20zJLDaSWpxaZ+zaAkEIB2dZZ1o+DF4T/MRbmsvGp9nletHOyiai19OzX1fF8xUBYsO1bPXxODvcd0978pnug==} 3585 + b4a@1.7.3: 3586 + resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==} 3563 3587 peerDependencies: 3564 3588 react-native-b4a: '*' 3565 3589 peerDependenciesMeta: ··· 3712 3736 resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 3713 3737 engines: {node: '>=6'} 3714 3738 3715 - caniuse-lite@1.0.30001770: 3716 - resolution: {integrity: sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==} 3739 + caniuse-lite@1.0.30001769: 3740 + resolution: {integrity: sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==} 3717 3741 3718 3742 cborg@1.10.2: 3719 3743 resolution: {integrity: sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==} ··· 5532 5556 resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 5533 5557 engines: {node: '>= 0.6'} 5534 5558 5535 - mime-db@1.54.0: 5536 - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} 5537 - engines: {node: '>= 0.6'} 5538 - 5539 5559 mime-types@2.1.35: 5540 5560 resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 5541 5561 engines: {node: '>= 0.6'} ··· 6104 6124 resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} 6105 6125 engines: {node: '>=0.6'} 6106 6126 6107 - qs@6.15.0: 6108 - resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} 6109 - engines: {node: '>=0.6'} 6110 - 6111 6127 queue-microtask@1.2.3: 6112 6128 resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 6113 6129 ··· 6668 6684 testcontainers@11.11.0: 6669 6685 resolution: {integrity: sha512-nKTJn3n/gkyGg/3SVkOwX+isPOGSHlfI+CWMobSmvQrsj7YW01aWvl2pYIfV4LMd+C8or783yYrzKSK2JlP+Qw==} 6670 6686 6671 - text-decoder@1.2.7: 6672 - resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} 6687 + text-decoder@1.2.3: 6688 + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} 6673 6689 6674 6690 third-party-web@0.26.7: 6675 6691 resolution: {integrity: sha512-buUzX4sXC4efFX6xg2bw6/eZsCUh8qQwSavC4D9HpONMFlRbcHhD8Je5qwYdCpViR6q0qla2wPP+t91a2vgolg==} ··· 7689 7705 '@commitlint/config-validator@20.4.0': 7690 7706 dependencies: 7691 7707 '@commitlint/types': 20.4.0 7692 - ajv: 8.18.0 7708 + ajv: 8.17.1 7693 7709 7694 7710 '@commitlint/ensure@20.4.1': 7695 7711 dependencies: ··· 8101 8117 8102 8118 '@fastify/ajv-compiler@4.0.5': 8103 8119 dependencies: 8104 - ajv: 8.18.0 8105 - ajv-formats: 3.0.1(ajv@8.18.0) 8120 + ajv: 8.17.1 8121 + ajv-formats: 3.0.1(ajv@8.17.1) 8106 8122 fast-uri: 3.1.0 8123 + 8124 + '@fastify/busboy@3.2.0': {} 8107 8125 8108 8126 '@fastify/cookie@11.0.2': 8109 8127 dependencies: ··· 8114 8132 dependencies: 8115 8133 fastify-plugin: 5.1.0 8116 8134 toad-cache: 3.7.0 8135 + 8136 + '@fastify/deepmerge@3.2.0': {} 8117 8137 8118 8138 '@fastify/error@4.2.0': {} 8119 8139 ··· 8132 8152 dependencies: 8133 8153 dequal: 2.0.3 8134 8154 8155 + '@fastify/multipart@9.4.0': 8156 + dependencies: 8157 + '@fastify/busboy': 3.2.0 8158 + '@fastify/deepmerge': 3.2.0 8159 + '@fastify/error': 4.2.0 8160 + fastify-plugin: 5.1.0 8161 + secure-json-parse: 4.1.0 8162 + 8135 8163 '@fastify/proxy-addr@5.1.0': 8136 8164 dependencies: 8137 8165 '@fastify/forwarded': 3.0.1 ··· 9641 9669 '@scalar/json-magic': 0.11.1 9642 9670 '@scalar/openapi-types': 0.5.3 9643 9671 '@scalar/openapi-upgrader': 0.1.8 9644 - ajv: 8.18.0 9645 - ajv-draft-04: 1.0.0(ajv@8.18.0) 9646 - ajv-formats: 3.0.1(ajv@8.18.0) 9672 + ajv: 8.17.1 9673 + ajv-draft-04: 1.0.0(ajv@8.17.1) 9674 + ajv-formats: 3.0.1(ajv@8.17.1) 9647 9675 jsonpointer: 5.0.1 9648 9676 leven: 4.1.0 9649 9677 yaml: 2.8.2 ··· 10292 10320 10293 10321 agent-base@7.1.4: {} 10294 10322 10295 - ajv-draft-04@1.0.0(ajv@8.18.0): 10323 + ajv-draft-04@1.0.0(ajv@8.17.1): 10296 10324 optionalDependencies: 10297 - ajv: 8.18.0 10325 + ajv: 8.17.1 10298 10326 10299 - ajv-formats@3.0.1(ajv@8.18.0): 10327 + ajv-formats@3.0.1(ajv@8.17.1): 10300 10328 optionalDependencies: 10301 - ajv: 8.18.0 10329 + ajv: 8.17.1 10302 10330 10303 10331 ajv@6.12.6: 10304 10332 dependencies: ··· 10307 10335 json-schema-traverse: 0.4.1 10308 10336 uri-js: 4.4.1 10309 10337 10310 - ajv@8.18.0: 10338 + ajv@8.17.1: 10311 10339 dependencies: 10312 10340 fast-deep-equal: 3.1.3 10313 10341 fast-uri: 3.1.0 ··· 10492 10520 dependencies: 10493 10521 possible-typed-array-names: 1.1.0 10494 10522 10495 - avvio@9.2.0: 10523 + avvio@9.1.0: 10496 10524 dependencies: 10497 10525 '@fastify/error': 4.2.0 10498 10526 fastq: 1.20.1 ··· 10503 10531 10504 10532 axobject-query@4.1.0: {} 10505 10533 10506 - b4a@1.7.4: {} 10534 + b4a@1.7.3: {} 10507 10535 10508 10536 babel-plugin-react-compiler@1.0.0: 10509 10537 dependencies: ··· 10617 10645 browserslist@4.28.1: 10618 10646 dependencies: 10619 10647 baseline-browser-mapping: 2.9.19 10620 - caniuse-lite: 1.0.30001770 10648 + caniuse-lite: 1.0.30001769 10621 10649 electron-to-chromium: 1.5.286 10622 10650 node-releases: 2.0.27 10623 10651 update-browserslist-db: 1.2.3(browserslist@4.28.1) ··· 10666 10694 10667 10695 camelcase@5.3.1: {} 10668 10696 10669 - caniuse-lite@1.0.30001770: {} 10697 + caniuse-lite@1.0.30001769: {} 10670 10698 10671 10699 cborg@1.10.2: {} 10672 10700 ··· 10832 10860 10833 10861 compressible@2.0.18: 10834 10862 dependencies: 10835 - mime-db: 1.54.0 10863 + mime-db: 1.52.0 10836 10864 10837 10865 compression@1.8.1: 10838 10866 dependencies: ··· 11388 11416 optionalDependencies: 11389 11417 source-map: 0.6.1 11390 11418 11391 - eslint-config-next@16.1.6(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): 11419 + eslint-config-next@16.1.6(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): 11392 11420 dependencies: 11393 11421 '@next/eslint-plugin-next': 16.1.6 11394 11422 eslint: 9.39.2(jiti@2.6.1) 11395 11423 eslint-import-resolver-node: 0.3.9 11396 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)) 11397 - eslint-plugin-import: 2.32.0(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)) 11424 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) 11425 + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) 11398 11426 eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.2(jiti@2.6.1)) 11399 11427 eslint-plugin-react: 7.37.5(eslint@9.39.2(jiti@2.6.1)) 11400 11428 eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) ··· 11416 11444 transitivePeerDependencies: 11417 11445 - supports-color 11418 11446 11419 - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)): 11447 + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): 11420 11448 dependencies: 11421 11449 '@nolyfill/is-core-module': 1.0.39 11422 11450 debug: 4.4.3 ··· 11427 11455 tinyglobby: 0.2.15 11428 11456 unrs-resolver: 1.11.1 11429 11457 optionalDependencies: 11430 - eslint-plugin-import: 2.32.0(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)) 11458 + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) 11431 11459 transitivePeerDependencies: 11432 11460 - supports-color 11433 11461 11434 - eslint-module-utils@2.12.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)): 11462 + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): 11435 11463 dependencies: 11436 11464 debug: 3.2.7 11437 11465 optionalDependencies: 11466 + '@typescript-eslint/parser': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) 11438 11467 eslint: 9.39.2(jiti@2.6.1) 11439 11468 eslint-import-resolver-node: 0.3.9 11440 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)) 11469 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) 11441 11470 transitivePeerDependencies: 11442 11471 - supports-color 11443 11472 11444 - eslint-plugin-import@2.32.0(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)): 11473 + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): 11445 11474 dependencies: 11446 11475 '@rtsao/scc': 1.1.0 11447 11476 array-includes: 3.1.9 ··· 11452 11481 doctrine: 2.1.0 11453 11482 eslint: 9.39.2(jiti@2.6.1) 11454 11483 eslint-import-resolver-node: 0.3.9 11455 - eslint-module-utils: 2.12.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.2(jiti@2.6.1)) 11484 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) 11456 11485 hasown: 2.0.2 11457 11486 is-core-module: 2.16.1 11458 11487 is-glob: 4.0.3 ··· 11463 11492 semver: 6.3.1 11464 11493 string.prototype.trimend: 1.0.9 11465 11494 tsconfig-paths: 3.15.0 11495 + optionalDependencies: 11496 + '@typescript-eslint/parser': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) 11466 11497 transitivePeerDependencies: 11467 11498 - eslint-import-resolver-typescript 11468 11499 - eslint-import-resolver-webpack ··· 11681 11712 fast-json-stringify@6.3.0: 11682 11713 dependencies: 11683 11714 '@fastify/merge-json-schemas': 0.2.1 11684 - ajv: 8.18.0 11685 - ajv-formats: 3.0.1(ajv@8.18.0) 11715 + ajv: 8.17.1 11716 + ajv-formats: 3.0.1(ajv@8.17.1) 11686 11717 fast-uri: 3.1.0 11687 11718 json-schema-ref-resolver: 3.0.0 11688 11719 rfdc: 1.4.1 ··· 11710 11741 '@fastify/fast-json-stringify-compiler': 5.0.3 11711 11742 '@fastify/proxy-addr': 5.1.0 11712 11743 abstract-logging: 2.0.1 11713 - avvio: 9.2.0 11744 + avvio: 9.1.0 11714 11745 fast-json-stringify: 6.3.0 11715 11746 find-my-way: 9.4.0 11716 11747 light-my-request: 6.6.0 ··· 12720 12751 12721 12752 mime-db@1.52.0: {} 12722 12753 12723 - mime-db@1.54.0: {} 12724 - 12725 12754 mime-types@2.1.35: 12726 12755 dependencies: 12727 12756 mime-db: 1.52.0 ··· 12836 12865 '@next/env': 16.1.6 12837 12866 '@swc/helpers': 0.5.15 12838 12867 baseline-browser-mapping: 2.9.19 12839 - caniuse-lite: 1.0.30001770 12868 + caniuse-lite: 1.0.30001769 12840 12869 postcss: 8.4.31 12841 12870 react: 19.2.4 12842 12871 react-dom: 19.2.4(react@19.2.4) ··· 13346 13375 dependencies: 13347 13376 side-channel: 1.1.0 13348 13377 13349 - qs@6.15.0: 13350 - dependencies: 13351 - side-channel: 1.1.0 13352 - 13353 13378 queue-microtask@1.2.3: {} 13354 13379 13355 13380 quick-format-unescaped@4.0.4: {} ··· 13841 13866 dependencies: 13842 13867 events-universal: 1.0.1 13843 13868 fast-fifo: 1.3.2 13844 - text-decoder: 1.2.7 13869 + text-decoder: 1.2.3 13845 13870 transitivePeerDependencies: 13846 13871 - bare-abort-controller 13847 13872 - react-native-b4a ··· 13982 14007 formidable: 3.5.4 13983 14008 methods: 1.1.2 13984 14009 mime: 2.6.0 13985 - qs: 6.15.0 14010 + qs: 6.14.2 13986 14011 transitivePeerDependencies: 13987 14012 - supports-color 13988 14013 ··· 14047 14072 14048 14073 tar-stream@3.1.7: 14049 14074 dependencies: 14050 - b4a: 1.7.4 14075 + b4a: 1.7.3 14051 14076 fast-fifo: 1.3.2 14052 14077 streamx: 2.23.0 14053 14078 transitivePeerDependencies: ··· 14077 14102 - react-native-b4a 14078 14103 - supports-color 14079 14104 14080 - text-decoder@1.2.7: 14105 + text-decoder@1.2.3: 14081 14106 dependencies: 14082 - b4a: 1.7.4 14107 + b4a: 1.7.3 14083 14108 transitivePeerDependencies: 14084 14109 - react-native-b4a 14085 14110
+2
pnpm-workspace.yaml
··· 14 14 "@commitlint/config-conventional": "^20.4.1" 15 15 "@vitest/coverage-v8": "^4.0.18" 16 16 husky: "^9.1.7" 17 + lint-staged: "^16.2.7" 17 18 multiformats: "^13.4.2" 19 + prettier: "^3.8.1"
+10
prettier.config.mjs
··· 1 + const config = { 2 + semi: false, 3 + singleQuote: true, 4 + tabWidth: 2, 5 + trailingComma: 'es5', 6 + printWidth: 100, 7 + plugins: [], 8 + } 9 + 10 + export default config