@nifrajs/cli 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/check.d.ts +4 -1
  2. package/dist/check.d.ts.map +1 -1
  3. package/dist/check.js +71 -0
  4. package/dist/check.js.map +1 -1
  5. package/dist/cli.d.ts +9 -0
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +165 -23
  8. package/dist/cli.js.map +1 -1
  9. package/dist/doctor.d.ts +5 -1
  10. package/dist/doctor.d.ts.map +1 -1
  11. package/dist/doctor.js +66 -6
  12. package/dist/doctor.js.map +1 -1
  13. package/dist/load.d.ts +11 -0
  14. package/dist/load.d.ts.map +1 -1
  15. package/dist/load.js +30 -0
  16. package/dist/load.js.map +1 -1
  17. package/dist/mcp-docs-tools.d.ts.map +1 -1
  18. package/dist/mcp-docs-tools.js +7 -3
  19. package/dist/mcp-docs-tools.js.map +1 -1
  20. package/dist/mcp-http.js +1 -1
  21. package/dist/mcp-render.js +9 -1
  22. package/dist/mcp-render.js.map +1 -1
  23. package/dist/mcp.d.ts.map +1 -1
  24. package/dist/mcp.js +44 -2
  25. package/dist/mcp.js.map +1 -1
  26. package/dist/pipeline-guard.d.ts +83 -0
  27. package/dist/pipeline-guard.d.ts.map +1 -0
  28. package/dist/pipeline-guard.js +136 -0
  29. package/dist/pipeline-guard.js.map +1 -0
  30. package/dist/types-search.d.ts +1 -1
  31. package/dist/types-search.d.ts.map +1 -1
  32. package/dist/types-search.js +47 -2
  33. package/dist/types-search.js.map +1 -1
  34. package/docs/examples.json +6 -0
  35. package/docs/llms-full.txt +169 -35
  36. package/docs/types.json +1618 -45
  37. package/package.json +9 -9
  38. package/src/check.ts +91 -0
  39. package/src/cli.ts +173 -24
  40. package/src/doctor.ts +71 -6
  41. package/src/load.ts +44 -0
  42. package/src/mcp-docs-tools.ts +13 -3
  43. package/src/mcp-http.ts +1 -1
  44. package/src/mcp-render.ts +9 -1
  45. package/src/mcp.ts +45 -2
  46. package/src/pipeline-guard.ts +186 -0
  47. package/src/types-search.ts +50 -1
@@ -780,15 +780,15 @@ cache. Pass the same `draftSecret` to `createWebApp` and
780
780
 
781
781
  ```ts
782
782
  // doc-check: skip — fragment spanning three files: your `app`, `env`, `redirect`, and route `slug`.
783
- // 1. A route you gate yourself flips draft mode on for the editor.
784
- import { enableDraft, disableDraft } from "@nifrajs/web"
783
+ // 1. Mount the preview entry point your CMS links to. It checks the token in CONSTANT TIME,
784
+ // sets the signed HttpOnly cookie, and refuses an off-site ?to= (an open redirect otherwise).
785
+ import { previewEndpoint, disableDraft } from "@nifrajs/web"
785
786
 
786
- app.get("/api/preview", async (c) => {
787
- if (c.query.token !== env.PREVIEW_TOKEN) return new Response("nope", { status: 401 })
788
- await enableDraft(c, env.DRAFT_SECRET) // signed, HttpOnly cookie
789
- return redirect(String(c.query.to ?? "/"))
790
- })
787
+ const preview = previewEndpoint({ secret: env.PREVIEW_TOKEN, draftSecret: env.DRAFT_SECRET })
788
+ app.get("/api/preview", (c) => preview(c.req)) // ?token=…&to=/posts/hello
791
789
  app.get("/api/preview/exit", (c) => (disableDraft(c), redirect("/")))
790
+ // Gating it yourself instead? Use enableDraft(c, env.DRAFT_SECRET) AFTER your own check — and
791
+ // compare the token in constant time, since === leaks it one character at a time.
792
792
 
793
793
  // 2. Loaders branch on ctx.draft to load unpublished content.
794
794
  export async function loader({ api, draft }: LoaderArgs<typeof app>) {
@@ -1731,12 +1731,23 @@ treated as a substitute for static provenance.
1731
1731
 
1732
1732
  ```ts
1733
1733
  // doc-check: skip — combines route and assurance-config excerpts.
1734
- // route: exact effect declaration + runtime beacon at the owned adapter seam
1735
- import { useCapability } from "@nifrajs/core/capabilities"
1734
+ // route: exact effect declaration + correlated execution at the owned adapter seam
1735
+ import { executeCapability } from "@nifrajs/core/capabilities"
1736
+
1737
+ app.aroundCapability(async (effect, next) => {
1738
+ // Ask an entitlement service or short-lived approval gate using token-only metadata.
1739
+ // effect.signal aborts on request cancellation or the interceptor timeout.
1740
+ if (!policyAllows(effect.capability, effect.target)) return // deny fail-closed
1741
+ await next()
1742
+ }, { timeoutMs: 5_000 })
1736
1743
 
1737
1744
  app.post("/orders", { capabilities: ["db.write"] }, async (c) => {
1738
- useCapability(c, "db.write") // undeclared use fails before the effect
1739
- return orders.write(c.body)
1745
+ return executeCapability(
1746
+ c,
1747
+ "db.write",
1748
+ { target: "repo:orders" },
1749
+ ({ signal }) => orders.write(c.body, { signal }),
1750
+ )
1740
1751
  })
1741
1752
 
1742
1753
  // in nifra.assurance.ts, alongside policy:
@@ -1766,6 +1777,51 @@ Domain writes on `GET`/`HEAD` are hard violations. Each write definition may
1766
1777
  require request idempotency or durable command/provider-key evidence. The lockfile contains only
1767
1778
  method, path, and capability tokens—no payloads or tenant data—and CI never rewrites it.
1768
1779
 
1780
+ ### Durable approval, compensation, and reconciliation
1781
+
1782
+ The durable execution subpath turns the capability boundary into a crash-visible workflow.
1783
+ Approval resumes are HMAC-signed, expire, bind to the tenant, principal, capability, target, and
1784
+ digest, and are consumed atomically once. The effect journal marks execution before the provider
1785
+ call, so a crash after an external commit remains `ambiguous` for reconciliation instead
1786
+ of being retried blindly. Typed sagas persist compensation arguments separately from the sealed
1787
+ token-only ledger and compensate committed steps in reverse order with retry/backoff state.
1788
+
1789
+ ```ts
1790
+ // doc-check: skip — durable store implementations are deployment-specific.
1791
+ import {
1792
+ createApprovalCoordinator,
1793
+ createDurableEffectJournal,
1794
+ createSagaEngine,
1795
+ } from "@nifrajs/core/durable-execution"
1796
+ import { effectTracing } from "@nifrajs/otel/effects"
1797
+
1798
+ const effects = effectTracing({ exporter })
1799
+ app.use(effects)
1800
+
1801
+ const approval = createApprovalCoordinator({
1802
+ store: durableApprovalStore, // must declare durability: "durable"
1803
+ secret: approvalHmacKey, // 32+ random bytes, stored separately
1804
+ })
1805
+ const journal = createDurableEffectJournal({ store: durableEffectStore })
1806
+
1807
+ await executeCapability(c, "payments.charge", {
1808
+ target: "provider:stripe",
1809
+ digest,
1810
+ journal,
1811
+ approval: {
1812
+ gate: approval,
1813
+ tenantId: c.principal.tenantId,
1814
+ principalId: c.principal.userId,
1815
+ resumeToken,
1816
+ },
1817
+ }, ({ effectId, signal }) => payments.charge(input, { idempotencyKey: effectId, signal }))
1818
+
1819
+ const sagas = createSagaEngine({
1820
+ store: durableSagaStore,
1821
+ observer: effects.observer,
1822
+ })
1823
+ ```
1824
+
1769
1825
  ### Already built in
1770
1826
 
1771
1827
  These add to Nifra's standing defaults: strict-by-default schema validation (unknown fields
@@ -2761,11 +2817,13 @@ the command printed by the build.
2761
2817
 
2762
2818
  ## Nifra — Dev & HMR
2763
2819
 
2764
- > Use `nifra dev` for a Vite-backed state-preserving HMR loop, or `@nifrajs/web/dev` for a Bun-native live-reload loop. Production builds use Bun.
2820
+ > Use `nifra dev` for a Vite-backed state-preserving HMR loop, or `@nifrajs/web/dev` for a Bun-native HMR loop with no Vite dependency. Production builds use Bun.
2765
2821
 
2766
- Nifra gives you two local development loops. Use `nifra dev` for
2767
- state-preserving UI edits, or use `@nifrajs/web/dev` when you want a Bun-only
2768
- live-reload server. Both serve your real SSR app locally.
2822
+ Nifra gives you two local development loops, and the rule between them is that one
2823
+ toolchain owns a whole phase. **Both** give you React Fast Refresh with state
2824
+ preserved. Use `nifra dev` (Vite) for the plugin ecosystem, or
2825
+ `nifra dev --bun` for one bundler across dev and prod with no Vite dependency.
2826
+ Both serve your real SSR app locally, and neither mixes the two bundlers in one process.
2769
2827
 
2770
2828
  ### Two loops, same app
2771
2829
 
@@ -2776,9 +2834,9 @@ use when
2776
2834
 
2777
2835
  `@nifrajs/web/dev`
2778
2836
 
2779
- rebuild + full-page live-reload
2837
+ Bun HMR + Fast Refresh (native)
2780
2838
  none (Bun only)
2781
- default; zero extra deps
2839
+ one bundler dev+prod; no Vite dep (no CSS Modules)
2782
2840
 
2783
2841
  `@nifrajs/web/vite`
2784
2842
 
@@ -2826,50 +2884,44 @@ can edit routes, components, loaders, actions, and styles in one local loop.
2826
2884
 
2827
2885
  ### Framework coverage
2828
2886
 
2829
- All five adapters have a dev setup. Pass the framework's official Vite plugin, and for Vue,
2830
- Svelte, and Solid, preload the matching Nifra compiler plugin for server rendering.
2887
+ All five adapters have a dev setup. Pass the framework's official Vite plugin and you are
2888
+ done: under `nifra dev` the Vite pipeline compiles both halves, so the same plugin
2889
+ that transforms your components for the browser also transforms them for SSR. No separate
2890
+ server-side compiler plugin to preload, and no way for the two halves to disagree about a
2891
+ specifier.
2831
2892
 
2832
2893
  framework
2833
- client (Vite plugin)
2834
- SSR compile
2894
+ Vite plugin (client + SSR)
2835
2895
  local state on edit
2836
2896
 
2837
2897
  React
2838
2898
 
2839
2899
  `@vitejs/plugin-react`
2840
2900
 
2841
- Bun-native
2842
2901
  preserved (Fast Refresh)
2843
2902
 
2844
2903
  Preact
2845
2904
 
2846
2905
  `@preact/preset-vite`
2847
2906
 
2848
- Bun-native
2849
2907
  preserved (prefresh)
2850
2908
 
2851
2909
  Vue
2852
2910
 
2853
2911
  `@vitejs/plugin-vue`
2854
2912
 
2855
- `vueBunPlugin` preload
2856
-
2857
2913
  preserved (rerender)
2858
2914
 
2859
2915
  Solid
2860
2916
 
2861
2917
  `vite-plugin-solid` (`{ ssr: true }`)
2862
2918
 
2863
- `solidBunPlugin` preload
2864
-
2865
2919
  resets (solid-refresh)
2866
2920
 
2867
2921
  Svelte
2868
2922
 
2869
2923
  `@sveltejs/vite-plugin-svelte`
2870
2924
 
2871
- `svelteBunPlugin` preload
2872
-
2873
2925
  resets (svelte HMR)
2874
2926
 
2875
2927
  For **React, Preact, and Vue**, an edit hot-swaps with component state preserved.
@@ -2912,17 +2964,72 @@ instead.
2912
2964
 
2913
2965
  ### The zero-dep alternative
2914
2966
 
2915
- `@nifrajs/web/dev` is a self-contained server: it builds the client on boot,
2916
- serves SSR, watches the routes, and does a full-page reload on change.
2967
+ `nifra dev --bun` (library: `@nifrajs/web/dev`) is self-contained —
2968
+ no Vite anywhere. `Bun.serve`'s native HMR bundles and hot-reloads the client while
2969
+ Bun's runtime resolves SSR, and it applies **React Fast Refresh natively**: editing
2970
+ a component-only module swaps its markup with `useState` state intact, no reload. The
2971
+ boundary rule is the same as Vite's (see below). The real prize is that dev and production use
2972
+ the _same bundler_, so the dev/prod seam disappears.
2973
+
2974
+ One gap: **CSS Modules**. Bun's dev-server bundler has no
2975
+ `*.module.css` transform (its production `Bun.build` does), so the CLI
2976
+ refuses `--bun` for a CSS-Modules app rather than serving a broken client. Plain CSS
2977
+ and Tailwind work normally.
2917
2978
 
2918
2979
  ```ts
2919
2980
  // doc-check: skip — fragment: routesDir/outDir/clientModule/createApp are your app's dev config.
2920
- // dev.ts — Bun-native live reload
2981
+ // dev.ts — Bun-native HMR, no Vite in the process
2921
2982
  import { createDevServer } from "@nifrajs/web/dev"
2922
- // builds the client on boot, serves SSR, watches routes, full-page live-reload on change.
2983
+ // Bun.serve bundles + hot-reloads the client; Bun's runtime resolves SSR. An edit reloads the
2984
+ // changed module graph — with React Fast Refresh (state preserved) applied natively by Bun, no plugin.
2985
+ // CSS + the entry URL come from Bun. Plain CSS/Tailwind work; *.module.css does not (Bun's dev bundler).
2923
2986
  const server = await createDevServer({ routesDir, outDir, clientModule, createApp })
2924
2987
  ```
2925
2988
 
2989
+ ### Production is Bun — with a Vite escape hatch
2990
+
2991
+ Production builds default to **Bun** (`buildClient` /
2992
+ `nifra build`): faster, Bun-native, and the profile Nifra is tuned for. If an app
2993
+ genuinely needs a **Vite-only transform** with no Bun equivalent, you can run a
2994
+ Vite/Rollup production client build instead — but it must carry the same client-leak guards the
2995
+ Bun build enforces, or a second pipeline becomes a way for server-only code to reach the
2996
+ browser unnoticed. Add `viteLeakGuard()`: it runs the _same_ detection and
2997
+ emits the _same_ error as the Bun build (one implementation, adapted to Rollup's graph),
2998
+ so `node:` builtins and `server-only` modules fail the build either way.
2999
+
3000
+ ```ts
3001
+ // vite.config.ts — a Vite/Rollup PRODUCTION client build (the escape hatch, not the default).
3002
+ // Only reach for this when an app needs a Vite-only transform with no Bun equivalent; nifra's default
3003
+ // production bundler stays Bun (buildClient), which is faster and Bun-native.
3004
+ import { viteLeakGuard } from "@nifrajs/web/plugins/vite-leak-guard"
3005
+
3006
+ export default {
3007
+ build: {
3008
+ // The SAME two client-leak guards nifra's Bun build runs — server-only code or a node: builtin
3009
+ // reaching the browser fails the build, with the identical error message. A second production
3010
+ // pipeline must not ship without them.
3011
+ rollupOptions: { plugins: [viteLeakGuard()] },
3012
+ },
3013
+ }
3014
+ ```
3015
+
3016
+ For the full deploy, `nifra build --vite --target <t>` builds
3017
+ _both_ halves — client and SSR worker — with Vite and assembles the identical per-target
3018
+ deploy dir the Bun build produces (same `_worker.js` / `server.js`, same
3019
+ `_routes.json`, same prerender + size report). Only the bundler differs: both go
3020
+ through one orchestrator, so the deploy shape can't drift between pipelines. The leak guards run
3021
+ automatically.
3022
+
3023
+ You usually don't need the flag. `nifra build` picks the bundler from your config:
3024
+ Bun by default, but Vite when your _only_ transforms are `vitePlugins`, and it
3025
+ prints the reason. That case is the one where the phase defaults would otherwise bite — dev runs
3026
+ Vite, so your plugins run; the Bun build reads `clientPlugins`/
3027
+ `serverPlugins` and never `vitePlugins`, so it would drop them and still
3028
+ succeed. An app declaring both slots has supplied the Bun equivalent on purpose, so it keeps the
3029
+ faster Bun default. `--vite` and `--bun` force the choice; `--bun`
3030
+ is refused for a `vitePlugins`-only app rather than silently building without your
3031
+ transforms.
3032
+
2926
3033
  ### Styling (CSS)
2927
3034
 
2928
3035
  Import a stylesheet anywhere — `import "./app.css"` in a route, layout, or component.
@@ -5754,6 +5861,33 @@ import { defineAssurancePolicy } from "@nifrajs/core/assurance"
5754
5861
  IP-restriction, and security-header modules publish reflection-safe enforcement evidence.
5755
5862
  An ordered `AssurancePolicy` classifies every route and fails closed on missing or forbidden
5756
5863
  evidence without adding work to the request path.
5864
+ - **Owned effect execution.** `executeCapability()` correlates intent and terminal evidence with an
5865
+ opaque `effectId`, records outcomes automatically, and forwards request cancellation. Add
5866
+ order-scoped `aroundCapability()` policies for async approval/admission; they receive token-only
5867
+ metadata, have bounded timeouts, and must call `next()` exactly once before the effect can run.
5868
+ - **Durable workflows (opt in).** `@nifrajs/core/durable-execution` provides tenant/principal-bound,
5869
+ signed single-use approval resumes; a durable effect journal + reconciliation scanner; and a typed
5870
+ saga state machine with reverse compensation, retry/backoff, and ambiguous-crash detection. Production
5871
+ constructors reject stores that do not declare `durability: "durable"`. Operational scans use bounded
5872
+ cursor pages through `reconcileEffectsPage()` / `reconcileSagasPage()`. Provider-confirmed manual
5873
+ review uses effect-ID-bound `resolveAmbiguity()`, followed by `resume()` or `compensate()`.
5874
+ - **Production durable adapters.** `@nifrajs/core/durable-adapters` supplies
5875
+ `PostgresDurableExecutionAdapter`, `SQLiteDurableExecutionAdapter`, and
5876
+ `DurableObjectExecutionAdapter`. Each exposes compatible `effects`, `approvals`, `sagas`, and
5877
+ `leases` stores. Run `runDurableExecutionAdapterConformance()` against the deployment backend.
5878
+ - **Bounded reconciliation workers.** `@nifrajs/core/reconciliation-worker` runs effect or saga
5879
+ scans under an atomic lease with durable cursor checkpoints, a finite page budget, bounded handler
5880
+ concurrency, filters, cancellation, and token-only metrics. A worker invocation always terminates.
5881
+ - **Rich wire values (opt in).** `@nifrajs/core/wire` round-trips dates, bigints, maps, sets, binary,
5882
+ shared references, and cycles through JSON transports. Decoding validates every reachable shape,
5883
+ preserves owned `__proto__` keys without prototype mutation, and enforces configurable node, depth,
5884
+ collection-entry, and decoded-byte limits.
5885
+ - **Versioned transport codecs (opt in).** Add `.use(transportCodecs(registry))` from
5886
+ `@nifrajs/core/transport-plugin` and configure the typed
5887
+ client's `transport` option with the same registry. `@nifrajs/core/transport-codec` negotiates
5888
+ bounded HTTP representations and supplies the same frame/loader adapters for WebSockets and
5889
+ deferred data. Import `richWireCodec()` from `@nifrajs/core/transport-codec-rich`; the separate
5890
+ subpath keeps rich-wire code out of plain JSON bundles.
5757
5891
 
5758
5892
  ```ts
5759
5893
  import { defineAssurancePolicy, evaluateRouteAssurance, NIFRA_ASSURANCE } from "@nifrajs/core/assurance"
@@ -7375,7 +7509,7 @@ done-gate, or `nifra mcp` to give the agent live project tools.
7375
7509
 
7376
7510
  ## @nifrajs/otel
7377
7511
 
7378
- `ActiveObservation`, `AttributeValue`, `causalitySpanLink`, `combineObservationAdapters`, `consoleSpanExporter`, `createObservationLifecycle`, `EndObservation`, `formatTraceparent`, `generateSpanId`, `generateTraceId`, `NifraSpan`, `ObservationAdapter`, `ObservationClock`, `ObservationContext`, `ObservationLifecycle`, `ObservationLifecycleOptions`, `ObservationLink`, `ObservationParent`, `otlpExporter`, `OtlpExporter`, `OtlpExporterOptions`, `ParsedTraceparent`, `parseTraceparent`, `SpanStatus`, `StartObservation`, `TraceContext`, `traceHeaders`, `tracing`, `TracingOptions`
7512
+ `ActiveObservation`, `AttributeValue`, `causalitySpanLink`, `combineObservationAdapters`, `consoleSpanExporter`, `createObservationLifecycle`, `effectTracing`, `EffectTracingOptions`, `EffectTracingPlugin`, `EndObservation`, `formatTraceparent`, `generateSpanId`, `generateTraceId`, `NifraSpan`, `ObservationAdapter`, `ObservationClock`, `ObservationContext`, `ObservationLifecycle`, `ObservationLifecycleOptions`, `ObservationLink`, `ObservationParent`, `otlpExporter`, `OtlpExporter`, `OtlpExporterOptions`, `ParsedTraceparent`, `parseTraceparent`, `SpanStatus`, `StartObservation`, `TraceContext`, `traceHeaders`, `tracing`, `TracingOptions`
7379
7513
 
7380
7514
  ## @nifrajs/prompt
7381
7515
 
@@ -7403,7 +7537,7 @@ done-gate, or `nifra mcp` to give the agent live project tools.
7403
7537
 
7404
7538
  ## @nifrajs/web
7405
7539
 
7406
- `Action`, `ACTION_GLOBAL`, `apiKey`, `assertRenderAdapterConformance`, `BrowserNavigate`, `buildManifest`, `CachedResponse`, `CacheStore`, `canonical`, `clientEntry`, `ClientRouter`, `ClientRouterOptions`, `createClientRouter`, `createMatcher`, `createMutation`, `createQueryClient`, `createWebApp`, `CreateWebAppOptions`, `DATA_GLOBAL`, `DATA_HEADER`, `DEFAULT_DEV_PORT`, `defer`, `Deferred`, `DehydratedState`, `disableDraft`, `DRAFT_COOKIE`, `DraftCookieControls`, `enableDraft`, `EnableDraftOptions`, `enumerateStaticRoutes`, `Fetcher`, `FetcherState`, `FetchRouteData`, `filePathToPattern`, `filePathToPatterns`, `FontDisplay`, `fontFace`, `FontFace`, `fontPreload`, `FontPreloadInput`, `FontSource`, `generateClientEntry`, `GenerateClientEntryOptions`, `generateServerManifest`, `GenerateServerManifestOptions`, `getBrowserNavigate`, `GetStaticPaths`, `hashQueryKey`, `InfiniteData`, `InfiniteQueryHandle`, `InfiniteQueryOptions`, `isDraftEnabled`, `ISR_REVALIDATE_HEADER`, `ISR_STATUS_HEADER`, `ISRApp`, `ISROptions`, `ISRPlatform`, `jsonLd`, `KVCacheStore`, `KVCacheStoreOptions`, `KVNamespaceLike`, `LayoutEntry`, `LinkDescriptor`, `Loader`, `LoaderContext`, `manifest`, `Manifest`, `MemoryCacheStore`, `MemoryCacheStoreOptions`, `mergeHeads`, `meta`, `Meta`, `MetaArgs`, `MetaInput`, `MountRouterOptions`, `MutationCallbacks`, `MutationHandle`, `MutationState`, `MutationStatus`, `NavigateOptions`, `openGraph`, `OpenGraphInput`, `PRE_HYDRATION_GUARD`, `QueryClient`, `QueryClientOptions`, `QueryHandle`, `QueryOptions`, `QueryState`, `QueryStatus`, `redirect`, `REDIRECT_HEADER`, `RedirectOptions`, `RenderAdapter`, `RenderAdapterConformanceError`, `RenderAdapterConformanceFixture`, `RenderedPage`, `renderPage`, `RenderPageOptions`, `renderPageResult`, `RenderProps`, `resolveMeta`, `revalidate`, `REVALIDATE_HEADER`, `revalidateEndpoint`, `RevalidateEndpointOptions`, `RevalidateResult`, `ROUTE_GLOBAL`, `RouteEntry`, `RouteMatch`, `RouteModule`, `RoutePattern`, `RouterState`, `routeStyles`, `ScriptDescriptor`, `serializeData`, `ServerOnly`, `setBrowserNavigate`, `StaticPath`, `StaticPaths`, `StaticRoutes`, `styles`, `Submission`, `SubmitOptions`, `withISR`
7540
+ `Action`, `ACTION_GLOBAL`, `apiKey`, `assertRenderAdapterConformance`, `BrowserNavigate`, `buildManifest`, `CachedResponse`, `CacheStore`, `canonical`, `clientEntry`, `ClientRouter`, `ClientRouterOptions`, `createClientRouter`, `createMatcher`, `createMutation`, `createQueryClient`, `createWebApp`, `CreateWebAppOptions`, `DATA_GLOBAL`, `DATA_HEADER`, `DEFAULT_DEV_PORT`, `defer`, `Deferred`, `DehydratedState`, `disableDraft`, `DRAFT_COOKIE`, `DraftCookieControls`, `enableDraft`, `EnableDraftOptions`, `enumerateStaticRoutes`, `Fetcher`, `FetcherState`, `FetchRouteData`, `filePathToPattern`, `filePathToPatterns`, `FontDisplay`, `fontFace`, `FontFace`, `fontPreload`, `FontPreloadInput`, `FontSource`, `gate`, `generateClientEntry`, `GenerateClientEntryOptions`, `generateServerManifest`, `GenerateServerManifestOptions`, `getBrowserNavigate`, `GetStaticPaths`, `gone`, `hashQueryKey`, `InfiniteData`, `InfiniteQueryHandle`, `InfiniteQueryOptions`, `isDraftEnabled`, `ISR_REVALIDATE_HEADER`, `ISR_STATUS_HEADER`, `ISRApp`, `ISROptions`, `ISRPlatform`, `jsonLd`, `KVCacheStore`, `KVCacheStoreOptions`, `KVNamespaceLike`, `LAYOUT_DATA_GLOBAL`, `LayoutEntry`, `LinkDescriptor`, `Loader`, `LoaderContext`, `manifest`, `Manifest`, `MemoryCacheStore`, `MemoryCacheStoreOptions`, `mergeHeads`, `meta`, `Meta`, `MetaArgs`, `MetaInput`, `MountRouterOptions`, `MutationCallbacks`, `MutationHandle`, `MutationState`, `MutationStatus`, `NAV_FROM_HEADER`, `NavigateOptions`, `notFound`, `openGraph`, `OpenGraphInput`, `PRE_HYDRATION_GUARD`, `previewEndpoint`, `PreviewEndpointOptions`, `PublicDirCache`, `QueryClient`, `QueryClientOptions`, `QueryHandle`, `QueryOptions`, `QueryState`, `QueryStatus`, `redirect`, `REDIRECT_HEADER`, `RedirectOptions`, `RenderAdapter`, `RenderAdapterConformanceError`, `RenderAdapterConformanceFixture`, `RenderedPage`, `renderPage`, `RenderPageOptions`, `renderPageResult`, `RenderProps`, `resolveMeta`, `resolvePublicPath`, `RETAIN_HEADER`, `revalidate`, `REVALIDATE_HEADER`, `revalidateEndpoint`, `RevalidateEndpointOptions`, `RevalidateResult`, `ROUTE_GLOBAL`, `RouteEntry`, `RouteMatch`, `RouteModule`, `RoutePattern`, `RouterState`, `routeStyles`, `ScriptDescriptor`, `serializeData`, `servePublicDir`, `ServePublicDirOptions`, `ServerOnly`, `setBrowserNavigate`, `StaticPath`, `StaticPaths`, `StaticRoutes`, `STATUS_HEADER`, `statusPage`, `StatusPageOptions`, `styles`, `Submission`, `SubmitOptions`, `withISR`
7407
7541
 
7408
7542
  ## @nifrajs/web-preact
7409
7543