Ctrl K
ComunidadGuías…

pnpm-workspace.yaml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
packages:
  - "apps/*"
  - "packages/*"
  - "packages/providers/*"
  - "tooling/*"
  - "e2e"

# better-call's zod peer is optional; without a pin pnpm may re-resolve it to
# zod@4 (present transitively), which breaks better-auth's type exports.
overrides:
  "better-call>zod": ^3
  # nwsapi is jsdom's CSS selector engine, so it decides what every
  # testing-library query matches. 2.2.26 makes interaction tests hang rather
  # than fail: five suites went from milliseconds to timing out at 5s each
  # (currency picker, remove-holding, dividend calendar, dividends page), and
  # the reported error is a bare "Test timed out" that names nothing. 2.2.25 is
  # fine; the break is exactly .26.
  #
  # To retire this: drop the line, `pnpm install`, and run
  # `apps/web` vitest. If the interaction suites still pass in milliseconds,
  # upstream fixed it and the pin can go.
  nwsapi: "<2.2.26"

allowBuilds:
  cpu-features: false
  esbuild: true
  msw: false
  protobufjs: false
  sharp: true
  ssh2: false

# Single source of truth for shared dependency versions (pnpm catalogs).
catalog:
  "@changesets/cli": ^2
  "@eslint/js": ^9
  "@next/eslint-plugin-next": ^16
  # Floor, not just a lockfile pin: <1.19.15 is path traversal in `serveStatic`
  # on Windows via an encoded backslash (GHSA-frvp-7c67-39w9). Sage's API mounts
  # no static middleware at all, so exposure is nil — but a public repo should
  # not resolve to a known-vulnerable range. Staying on 1.x deliberately: 2.x is
  # a major and carries its own open advisories at the time of writing.
  "@hono/node-server": ^1.19.15
  "@tailwindcss/postcss": ^4
  "@tanstack/react-query": ^5
  "@tanstack/react-query-devtools": ^5
  "@testcontainers/postgresql": ^12
  "@testing-library/jest-dom": ^6
  "@testing-library/react": ^16
  "@types/node": ^22
  "@types/react": ^19
  "@types/react-dom": ^19
  # Floor, not just a lockfile pin: <1.6.22 allows account takeover by
  # pre-account hijacking on magic-link and email-OTP sign-in. Sage enables
  # neither — auth.ts configures emailAndPassword with no plugins, and there is
  # no email capability anywhere in the tree — so it is not reachable here. The
  # floor stands anyway: a public repo should not ship an auth library on a
  # known-vulnerable range, and the day someone adds a plugin is not the day to
  # remember this.
  #
  # 1.7 needs `account.issuer` — migration 0028. Below that migration the
  # library refuses every write to the table, so the two move together: do not
  # raise this into 1.7 territory on a checkout that lacks 0028, and do not
  # lower it below 1.7 now that 0028 has run.
  better-auth: ^1.7.1
  class-variance-authority: ^0.7
  clsx: ^2
  decimal.js: ^10
  drizzle-kit: ^0.31
  drizzle-orm: ^0.45
  esbuild: ^0.28
  eslint: ^9
  eslint-plugin-react: ^7
  eslint-plugin-react-hooks: ^5
  globals: ^16
  # Floor, not just a lockfile pin: <4.12.34 carries cross-request data
  # disclosure in hono/jsx, an XSS bypass in cx(), and a header de-duplication
  # bug. Sage serves JSON and uses neither hono/jsx nor cx(), so exposure is
  # limited — but a public repo should not resolve to a known-vulnerable range.
  hono: ^4.12.34
  jsdom: ^26
  lucide-react: ^0.460
  msw: ^2
  # Floor, not just a lockfile pin: <15.5.21 carries SSRF via attacker-
  # controlled rewrite destinations, SSRF in Server Actions on custom servers,
  # DoS in Server Actions, and unauthenticated disclosure of internal Server
  # Function endpoints.
  #
  # On 16, not 15, for the transitive advisories. This note used to claim that
  # bumping within 15 also cleared the sharp (libvips) and postcss findings; it
  # does not, and could not: 15.x pins `postcss` at exactly 8.4.31 and `sharp`
  # at ^0.34.3, both of which sit under every relevant advisory, so no in-range
  # bump reaches a fixed version. 16.x pins postcss 8.5.23 and sharp ^0.35.3,
  # which clears both — upstream, rather than by overriding a pin Next chose.
  #
  # `sharp` is worth naming precisely: it arrives through `next`, which is a
  # production dependency, not through build tooling. Nothing in this app
  # invokes it (the single next/image is `unoptimized`), but /_next/image
  # exists on the server regardless.
  next: ^16.3.3
  next-themes: ^0.4
  postgres: ^3
  prettier: ^3
  react: ^19
  react-dom: ^19
  tailwind-merge: ^3
  tailwindcss: ^4
  tsx: ^4
  turbo: ^2
  typescript: ^5
  typescript-eslint: ^8
  vitest: ^3
  yahoo-finance2: ^4.0.2
  zod: ^3

minimumReleaseAgeExclude:
  - yahoo-finance2@4.0.2