Repository navigation
Conversation
Replace the Deno toolchain with Vite+ (vp): Oxfmt and Oxlint with type-aware checks via vp check, Vitest via vp test, and tsdown via vp pack. Use a pnpm workspace that includes the docs site. - Move entry points to src/index.ts and src/mocks/index.ts, and tests to tests/ - Convert tests from Deno.test and @std/assert to Vitest - Generate package exports with vp pack and validate them with publint and attw - Build and test with setup-vp in CI, then publish the packed tarball to npm (with provenance) and GitHub Packages from a separate job - Stop publishing to JSR - Add VS Code, pre-commit hook, and Dependabot config Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
npm 11 rejects prerelease versions published without --tag. Resolve the dist-tag once: latest for stable release versions, next for everything else. Use it for both npm and GitHub Packages. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Generate Markdown API docs from the JSDoc in src/ with TypeDoc, typedoc-plugin-markdown, and typedoc-vitepress-theme on every docs build, and add them to the VitePress nav and sidebar. TypeDoc does not support TypeScript 7 yet, so it lives in its own workspace package (docs/typedoc) with TypeScript 6. Installing it in the docs package would create a second Vite+ core instance for VitePress and its plugins. - Export public types that appear in signatures but were not importable: GetRequestOptions, GroupRateLimiterOptions, CacheEntry, Counter, IObjectEvent, Link, and Links - Inline the internal Fetch alias in FetchClientOptions - Fix stale @PARAM tags and name the two entry-point modules - Fix the VitePress 2 peer rule so it matches prereleases Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Pass the version, ref, and dist-tag to scripts through env, and reject versions that aren't valid semver. Branch names and dispatch input could otherwise inject shell commands. - Split tests into unit and integration Vitest projects. Unit tests run offline and gate publishing. Integration tests call dummyjson.com in a separate job that reports failures without blocking a release. - Run CI for pull requests (including forks) and build the docs site in CI, instead of only when deploying from main. - Default the workflow token to read-only and don't persist checkout credentials. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1.3.4 shipped a top-level types field, so TypeScript projects using moduleResolution "node" resolved the root import. The generated exports map alone does not cover that mode.
- vite-plus 1.4.0, with @vitest/coverage-v8 moved into the catalog so it stays on the Vitest version vite-plus bundles (5.0.5) - setup-vp v1.22.0, pnpm 12.16.1, VitePress 2.0.0-alpha.21 - zod 4.6.7, typedoc-plugin-markdown 4.14.1 - AGENTS.md picks up the updated Vite+ agent guidance from vp config
Covers the root, docs and typedoc workspace packages. vite-plus and the @vitest packages are grouped so coverage-v8 stays on the bundled Vitest version, and a cooldown gives new releases a few days before they're proposed.
Default the token to read-only, pin the runner like ci.yml, stop checkout from persisting credentials, drop the unneeded full-history fetch, and serialize Pages deployments.
Updates dompurify, markdown-it and minimatch within their allowed ranges. The remaining katex and minimatch advisories need major versions that mermaid 11 and typedoc don't accept yet; both are docs build-time only.
- Pin vitest through the catalog and a vitest@* override, as vp migrate does when a package (here @vitest/coverage-v8) has a required vitest peer; a second vp migrate run is now a no-op - Ignore Vitest 5's .vitest/ output directory - Have Dependabot skip the toolchain packages and document vp migrate as the upgrade path, since it re-pins vite-plus, the core alias and Vitest together - Run VS Code npm scripts through vp, like the vp create template - Add a CLAUDE.md that points Claude Code at AGENTS.md
Drop options that restate VitePress defaults, stop ignoring dead links (the build has none, so new ones should fail it), and point logo URLs at Foundatio's main branch instead of the old master branch.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Replaces the Deno toolchain with Vite+ 1.4 (
vp), following the layout of Vite+'s own library template andvp migrateoutput.deno fmt/deno lint/deno checkvp check: Oxfmt, Oxlint (type-aware), and TypeScript 7 type-checking in one passdeno test+@std/assertvp test: Vitest 5 withexpectdeno pack+ a CI step that patchedpackage.jsonvp pack: tsdown, generatedexports, publint and attw checksdeno.jsonpackage.json,vite.config.ts,tsconfig.json, pnpm workspace (includesdocs/)Layout
mod.ts→src/index.ts,src/mocks/mod.ts→src/mocks/index.ts,src/tests/→tests/npm ci --force. VitePress 2 builds on Vite+'s bundled Vite 8.Tests
toBe,toEqual,toBeInstanceOf,toContain, comparison matchers, andrejects.*.assert, so later lines keep TypeScript's type narrowing.Requestfollows itsinit.signalonly through a weak reference. The "abort during body read" test's fake fetch didn't keep theRequestreachable, so garbage collection could drop it before the abort fired. The test then hung, flakily. The test now keeps theRequestalive and has a comment explaining why. Verified with forced GC.Package output
.and./mockssubpaths. Output is bundled intodist/withplatform: "neutral"(it targets browsers, Deno and Bun as well as Node), plussideEffects: false.typesfield like 1.3.4, so TypeScript projects using"moduleResolution": "node"still resolve the root import. attw'sesm-onlyprofile doesn't check that mode, so this was verified with a full attw run against the 1.3.4 tarball.deno packhad collapsed the default export andmiddlewaretoany.nodenextandbundlerresolution), and in Deno 2.9 vianpm:.CI and publishing
setup-vp(pinned tov1.22.0) replacessetup-denoin the CI, docs and Copilot workflows.vp pack→vp pm pack, then uploads the tarball as an artifact.id-token/packages: write. It publishes that exact tarball to npm with--provenanceand to GitHub Packages. Trigger conditions, tags, the recovery-branch flow andworkflow_dispatchversioning are unchanged.ci.yml, so npm trusted publishing should keep matching.devEnginespins pnpm.latestfor stable release versions andnextfor everything else, on both npm and GitHub Packages. Before, npm 11 would reject a prerelease tag likev1.4.0-beta.1, because the npmjs step passed no--tag.CI hardening
env:, and versions that aren't valid semver are rejected. Before, arelease/npm/*branch name or aworkflow_dispatchinput could inject shell commands.unitandintegrationVitest projects.unithas 192 tests, runs fully offline (verified withfetchdisabled), and gates publishing.integration(tests/integration/) calls dummyjson.com in its own job, so an outage there can't block a release.pull_request, including PRs from forks, and builds the docs site so docs or TypeDoc breaks show up before merge. Pushes now trigger CI only onmain,release/npm/**andv*tags. Feature branches get CI through their PR.contents: read, and checkout doesn't persist credentials. The docs deploy workflow gets the same treatment, plus a Pages concurrency guard.Other
@ts-ignore: New in Deno 1.44anddeno-lint-ignorecomments. Fixed the lint findings: a useless spread, a<string>cast thaterasableSyntaxOnlyrejects, and two redundantunknown | …unions. Added targeted suppressions for the intentional thenable class and the spread of headers that are known to be a plain object.launch.json/tasks.jsonare removed; the Vitest extension covers debugging.vp stagedrunsvp check --fix. It's installed byprepare: vp configonvp install.docs,docs/typedoc) weekly, with a 3-day cooldown.vite-plusand@vitest/*are grouped, and@vitest/coverage-v8lives in the pnpm catalog next tovite-plus, so it stays on the Vitest version Vite+ bundles.API reference on the docs site
This replaces the JSR API docs.
typedoc-plugin-markdown, andtypedoc-vitepress-themeturn the JSDoc insrc/into Markdown pages underdocs/api/on every docs build. The output is gitignored.@foundatiofx/fetchclientand@foundatiofx/fetchclient/mocks.docs/typedocwith TypeScript 6. Installing TypeScript 6 indocsmade pnpm create a second Vite+ core instance, which broke type-checking of the VitePress config. Overrides andpackageExtensionscan't redirect a peer dependency, so a separate package is the way around it.vp checkdoesn't depend on the docs having been built.GetRequestOptions,GroupRateLimiterOptions,CacheEntry,Counter,IObjectEvent,Link,Links. These appear in public signatures but couldn't be imported before.Fetchalias, and fixed two stale@paramtags.Verification
vp check: clean, no warningsvp test --coverage: 13 files, 200 tests passingvp pack: publint and attw report no issuesvp run docs:build: succeeds, including the generated API reference (TypeDoc: 0 errors, 0 warnings)npm publish --dry-runwith npm 11 on the resulting tarballFollow-ups (manual)
@foundatiofx/fetchclienton jsr.io, pointing users tonpm:@foundatiofx/fetchclient.publish; it wasnpm.