Skip to content

refactor(flags): extract framework-agnostic shared/ module#411

Draft
dferber90 wants to merge 1 commit into
mainfrom
extract-shared-flag-core
Draft

refactor(flags): extract framework-agnostic shared/ module#411
dferber90 wants to merge 1 commit into
mainfrom
extract-shared-flag-core

Conversation

@dferber90

Copy link
Copy Markdown
Collaborator

Both flags/next and flags/sveltekit implemented the same flag pipeline twice and had drifted. This lifts the parts that are framework-agnostic (or trivially so) into src/shared/, with each framework keeping thin wrappers for its differences. Zero public API change — the generated .d.ts for flags, flags/next and flags/sveltekit are byte-identical.

  • shared/seal.ts: sealHeaders/sealCookies/transformToHeaders (was duplicated in next/evaluate.ts and sveltekit/index.ts)
  • shared/overrides.ts: readOverrides + memoized decrypt; SvelteKit now gets the override memoization Next already had. Removes next/overrides.ts.
  • shared/precompute.ts: combine/serialize/deserialize/generatePermutations
    • getPrecomputed core. Frameworks keep wrappers for secret defaulting and the getPrecomputed(flag) vs getPrecomputed(key) signatures.
  • shared/discovery.ts: shared authorize -> 401-or-data -> version-header control flow behind createFlagsDiscoveryEndpoint.

Named "shared" rather than "core" to avoid confusion with the separate @vercel/flags-core package.

Both flags/next and flags/sveltekit implemented the same flag pipeline
twice and had drifted. This lifts the parts that are framework-agnostic
(or trivially so) into src/shared/, with each framework keeping thin
wrappers for its differences. Zero public API change — the generated
.d.ts for flags, flags/next and flags/sveltekit are byte-identical.

- shared/seal.ts: sealHeaders/sealCookies/transformToHeaders
  (was duplicated in next/evaluate.ts and sveltekit/index.ts)
- shared/overrides.ts: readOverrides + memoized decrypt; SvelteKit now
  gets the override memoization Next already had. Removes next/overrides.ts.
- shared/precompute.ts: combine/serialize/deserialize/generatePermutations
  + getPrecomputed core. Frameworks keep wrappers for secret defaulting
  and the getPrecomputed(flag) vs getPrecomputed(key) signatures.
- shared/discovery.ts: shared authorize -> 401-or-data -> version-header
  control flow behind createFlagsDiscoveryEndpoint.

Named "shared" rather than "core" to avoid confusion with the separate
@vercel/flags-core package.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
flags-playground Ready Ready Preview, Comment, Open in v0 Jun 25, 2026 12:24pm
flags-sdk-dev Ready Ready Preview, Comment, Open in v0 Jun 25, 2026 12:24pm
flags-sdk-snippets Ready Ready Preview, Comment, Open in v0 Jun 25, 2026 12:24pm
flags-sdk-sveltekit-snippets Ready Ready Preview, Comment, Open in v0 Jun 25, 2026 12:24pm
shirt-shop Ready Ready Preview, Comment, Open in v0 Jun 25, 2026 12:24pm
shirt-shop-api Ready Ready Preview, Comment, Open in v0 Jun 25, 2026 12:24pm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant