feat!: produce a dual ESM/CJS build#401
Conversation
The global fetch API is built into Node 20+, browsers, Deno, Cloudflare Workers, and Vercel Edge. On modern versions of node taht use undici internally, this should result in improved perfomance. BREAKING CHANGE: The `$response` property type changes from `AxiosResponse<T>` to `FgaResponse<T>`. The constructor now accepts an optional `HttpClient` instead of `AxiosInstance`. `baseOptions.httpAgent`/`httpsAgent` are no longer applicable as fetch handles connection pooling natively.
…T" to avoid undefined request method, streaming timeout kills long-running streams
…cts. With fetch, createStreamingRequestFunction returns the raw ReadableStream directly — $response is never set, so the fallback was the only path that ever executed.
…rror properties Overwriting .constructor and .name on an error doesn't actually change its type, so instanceof checks failed for non-401/403 token endpoint errors.
…d of mutating error properties" This reverts commit e2e8878.
Inline async pool to remove it as the only CJS-style required runtime dependency. Info: about tiny-async-pool: - URL: https://github.com/rxaviers/async-pool - License: MIT - Author: Rafael Xavier de Souza | https://github.com/rxaviers
Separates crypto-free utilities from generate-random-id.ts (which imports from "crypto"). This allows consumers to import from utils/utils-lite without pulling in the crypto dependency. We faced this issue recently when we tried to use assertNever from this lib in syntaxt-transformer
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Tip 💬 Introducing Slack Agent: The best way for teams to turn conversations into code.Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.
Built for teams:
One agent for your entire SDLC. Right inside Slack. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## feat/drop-axios #401 +/- ##
===================================================
- Coverage 86.41% 86.24% -0.17%
===================================================
Files 25 27 +2
Lines 1354 1374 +20
Branches 287 263 -24
===================================================
+ Hits 1170 1185 +15
- Misses 111 116 +5
Partials 73 73 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Conflicts: * errors.ts — main brought in PR #329's "stop mutating token refresh errors into auth errors" fix. Adapted for the fetch-era branch: FgaApiAuthenticationError now accepts HttpErrorContext | FgaApiError. When given an existing FgaApiError (re-wrap path from credentials/), it COPIES fields and preserves the original stack — the canonical fix for the audit-confirmed `instanceof` mutation P0. The HttpErrorContext path is unchanged. Also added the optional `context?: { clientId, audience, grantType }` second parameter from main so callers can override extracted values. * package.json — took main's bumped @opentelemetry/api ^1.9.1; left axios out (the whole point of this branch). * package-lock.json — regenerated via `npm install` after resolving package.json (don't hand-merge lockfiles). Removed two helper functions (parseRequestData, getAuthenticationErrorMessage) that main introduced for the AxiosError path; the fetch branch doesn't have AxiosError as a type, and the helpers had no other callers.
Pulls the fetch-based HTTP client + the FgaApiAuthenticationError re-wrap path (PR #329) into the WIP ESM/CJS dual-build branch. Conflicts: * package.json — kept ESM build setup (main / module / exports fields, build:cjs / build:esm / build:post scripts) AND took drop-axios's newer dep versions inherited from main: jest 30.3.0, ts-jest 29.4.9, eslint ^10.3.0, typescript ^6.0.3, nock ^14.0.14, @types/node ^25.6.0, @typescript-eslint/* ^8.59.2, @opentelemetry/api ^1.9.1. Removed tiny-async-pool + @types/tiny-async-pool (this branch already replaced tiny-async-pool with a native impl). * package-lock.json — regenerated via \`npm install\`. 0 axios entries, 0 tiny-async-pool entries, 0 vulnerabilities. * tests/apiExecutor.test.ts, tests/credentials.test.ts, tests/headers.test.ts — pure import-style conflicts. Kept this branch's \`.js\` extensions on every relative import (mandatory for ESM resolution) and drop-axios's default \`import nock from "nock"\` shape (nock 14's main entry is callable only via the default export; \`import * as nock\` works for namespace methods but breaks \`nock(url)\` calls). credentials.test.ts also kept the FgaApiAuthenticationError import that PR #329's tests need (it was lost on this branch when feat/esm-modules forked from the pre-#329 base). Files auto-merged: credentials/credentials.ts, errors.ts (which now includes PR #329's re-wrap branch in FgaApiAuthenticationError — typed \`HttpErrorContext | FgaApiError\` with optional context arg), tests/client.test.ts, tests/index.test.ts, tests/jest.config.js, tests/helpers/nocks.ts, tsconfig.json. Build (cjs + esm) clean. Tests: 302 passed across 15 suites.
Description
This, coupled with dropping axios, should address #17 #72
What problem is being solved?
How is it being solved?
What changes are made to solve it?
References
Review Checklist
mainInline async pool to remove it as the only CJS-style required runtime dependency.
Info: about tiny-async-pool: