@timber-js/app 0.2.0-alpha.197 → 0.2.0-alpha.199
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.
- package/dist/_chunks/{actions-BS-m5SLv.js → actions-d1hCqnU3.js} +35 -8
- package/dist/_chunks/actions-d1hCqnU3.js.map +1 -0
- package/dist/_chunks/als-registry-C6kcfprT.js.map +1 -1
- package/dist/_chunks/{cache-api-DqzgTEqk.js → cache-api-ByagcC-J.js} +2 -2
- package/dist/_chunks/{cache-api-DqzgTEqk.js.map → cache-api-ByagcC-J.js.map} +1 -1
- package/dist/_chunks/canonicalize-CgHoscYO.js +66 -0
- package/dist/_chunks/canonicalize-CgHoscYO.js.map +1 -0
- package/dist/_chunks/{chains-CZG7E5zg.js → chains-Bpb0W4ax.js} +3 -3
- package/dist/_chunks/{chains-CZG7E5zg.js.map → chains-Bpb0W4ax.js.map} +1 -1
- package/dist/_chunks/{cli-check-bE3H5Bjr.js → cli-check-D6VolrDV.js} +3 -3
- package/dist/_chunks/{cli-check-bE3H5Bjr.js.map → cli-check-D6VolrDV.js.map} +1 -1
- package/dist/_chunks/{cli-schema-sync-DTy_-Msq.js → cli-schema-sync-D6rO-VcS.js} +2 -2
- package/dist/_chunks/{cli-schema-sync-DTy_-Msq.js.map → cli-schema-sync-D6rO-VcS.js.map} +1 -1
- package/dist/_chunks/{convention-lint-n3RJLgww.js → convention-lint-fRkwVwEH.js} +27 -4
- package/dist/_chunks/convention-lint-fRkwVwEH.js.map +1 -0
- package/dist/_chunks/error-boundary-BfPHZjm0.js +1050 -0
- package/dist/_chunks/error-boundary-BfPHZjm0.js.map +1 -0
- package/dist/_chunks/{live-graph-BXDsdzBv.js → live-graph-D_2D32Ad.js} +3 -3
- package/dist/_chunks/{live-graph-BXDsdzBv.js.map → live-graph-D_2D32Ad.js.map} +1 -1
- package/dist/_chunks/{logger-DDirEsn7.js → logger-uLBuGKDI.js} +471 -440
- package/dist/_chunks/logger-uLBuGKDI.js.map +1 -0
- package/dist/_chunks/{navigation-root-B00jjGd5.js → navigation-context-D0TU0Jog.js} +3 -101
- package/dist/_chunks/navigation-context-D0TU0Jog.js.map +1 -0
- package/dist/_chunks/navigation-root-mHSK9psY.js +126 -0
- package/dist/_chunks/{navigation-root-B00jjGd5.js.map → navigation-root-mHSK9psY.js.map} +1 -1
- package/dist/_chunks/{poison-scan-BoDLgbix.js → poison-scan-Bm9Yyqk9.js} +2 -2
- package/dist/_chunks/{poison-scan-BoDLgbix.js.map → poison-scan-Bm9Yyqk9.js.map} +1 -1
- package/dist/_chunks/{scanner-tdFPvDYi.js → scanner-AiazgH_f.js} +6 -5
- package/dist/_chunks/scanner-AiazgH_f.js.map +1 -0
- package/dist/_chunks/{segment-keys-BhqoHiLc.js → segment-keys-lqtdookO.js} +2 -65
- package/dist/_chunks/segment-keys-lqtdookO.js.map +1 -0
- package/dist/_chunks/{ssr-data-BQGhTPAK.js → ssr-data-D6T6Y3ef.js} +4 -26
- package/dist/_chunks/ssr-data-D6T6Y3ef.js.map +1 -0
- package/dist/_chunks/state-FippDgxN.js +52 -0
- package/dist/_chunks/state-FippDgxN.js.map +1 -0
- package/dist/_chunks/status-page-marker-DwQBrLBz.js +496 -0
- package/dist/_chunks/status-page-marker-DwQBrLBz.js.map +1 -0
- package/dist/_chunks/{walkers-DNX05dC0.js → walkers-B6XUtmqK.js} +2 -2
- package/dist/_chunks/{walkers-DNX05dC0.js.map → walkers-B6XUtmqK.js.map} +1 -1
- package/dist/analyze/crawl-entry.js +2 -2
- package/dist/analyze/graph-command.js +2 -2
- package/dist/cache/index.js +1 -1
- package/dist/cli.js +2 -2
- package/dist/client/browser-entry/action-dispatch.d.ts +6 -4
- package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -1
- package/dist/client/browser-entry/action-queue.d.ts +44 -0
- package/dist/client/browser-entry/action-queue.d.ts.map +1 -0
- package/dist/client/browser-entry/router-init.d.ts.map +1 -1
- package/dist/client/deny-last-resort.d.ts +29 -0
- package/dist/client/deny-last-resort.d.ts.map +1 -0
- package/dist/client/error-boundary.d.ts +48 -2
- package/dist/client/error-boundary.d.ts.map +1 -1
- package/dist/client/error-boundary.js +2 -2
- package/dist/client/history.d.ts +21 -2
- package/dist/client/history.d.ts.map +1 -1
- package/dist/client/index.js +34 -14
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.d.ts +1 -0
- package/dist/client/internal.d.ts.map +1 -1
- package/dist/client/internal.js +272 -1225
- package/dist/client/internal.js.map +1 -1
- package/dist/client/link.d.ts.map +1 -1
- package/dist/client/navigation-commit.d.ts +12 -19
- package/dist/client/navigation-commit.d.ts.map +1 -1
- package/dist/client/navigation-transition.d.ts +62 -11
- package/dist/client/navigation-transition.d.ts.map +1 -1
- package/dist/client/router-effects.d.ts +9 -8
- package/dist/client/router-effects.d.ts.map +1 -1
- package/dist/client/router-lifecycle.d.ts +60 -17
- package/dist/client/router-lifecycle.d.ts.map +1 -1
- package/dist/client/router-pipeline.d.ts +7 -4
- package/dist/client/router-pipeline.d.ts.map +1 -1
- package/dist/client/router-types.d.ts +63 -8
- package/dist/client/router-types.d.ts.map +1 -1
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +0 -9
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +23 -8
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/state.d.ts +16 -0
- package/dist/client/state.d.ts.map +1 -1
- package/dist/client/status-page-marker.d.ts +25 -0
- package/dist/client/status-page-marker.d.ts.map +1 -0
- package/dist/cookies/index.js +1 -1
- package/dist/dev-tools/holding-server.d.ts +4 -17
- package/dist/dev-tools/holding-server.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +74 -175
- package/dist/index.js.map +1 -1
- package/dist/plugins/dev-server.d.ts.map +1 -1
- package/dist/routing/codegen-write.d.ts.map +1 -1
- package/dist/routing/index.js +2 -2
- package/dist/routing/interception.d.ts +2 -2
- package/dist/routing/slot-placement.d.ts +2 -2
- package/dist/server/access-gate.d.ts +73 -1
- package/dist/server/access-gate.d.ts.map +1 -1
- package/dist/server/action-handler.d.ts.map +1 -1
- package/dist/server/actions.d.ts +16 -1
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +3 -9
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/children-interception.d.ts +1 -1
- package/dist/server/default-status-page.d.ts +2 -2
- package/dist/server/default-status-page.d.ts.map +1 -1
- package/dist/server/deny-boundary.d.ts +15 -9
- package/dist/server/deny-boundary.d.ts.map +1 -1
- package/dist/server/deny-renderer.d.ts.map +1 -1
- package/dist/server/error-boundary-wrapper.d.ts +21 -4
- package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
- package/dist/server/error-response-headers.d.ts +3 -0
- package/dist/server/error-response-headers.d.ts.map +1 -0
- package/dist/server/index.js +3 -3
- package/dist/server/index.js.map +1 -1
- package/dist/server/internal.d.ts +1 -2
- package/dist/server/internal.d.ts.map +1 -1
- package/dist/server/internal.js +2339 -2506
- package/dist/server/internal.js.map +1 -1
- package/dist/server/metadata-collector.d.ts +2 -5
- package/dist/server/metadata-collector.d.ts.map +1 -1
- package/dist/server/param-coercion.d.ts +10 -3
- package/dist/server/param-coercion.d.ts.map +1 -1
- package/dist/server/pipeline-outcome.d.ts.map +1 -1
- package/dist/server/pipeline-phases.d.ts +11 -0
- package/dist/server/pipeline-phases.d.ts.map +1 -1
- package/dist/server/port-resolution.d.ts +3 -89
- package/dist/server/port-resolution.d.ts.map +1 -1
- package/dist/server/primitives.d.ts +38 -10
- package/dist/server/primitives.d.ts.map +1 -1
- package/dist/server/response-cache-policy.d.ts +3 -0
- package/dist/server/response-cache-policy.d.ts.map +1 -0
- package/dist/server/route-element-builder.d.ts +11 -41
- package/dist/server/route-element-builder.d.ts.map +1 -1
- package/dist/server/route-element-helpers.d.ts +12 -0
- package/dist/server/route-element-helpers.d.ts.map +1 -0
- package/dist/server/route-module-loader.d.ts +37 -0
- package/dist/server/route-module-loader.d.ts.map +1 -0
- package/dist/server/rsc-cache-key-guard.d.ts.map +1 -1
- package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -1
- package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/render-route.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-payload.d.ts +22 -1
- package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts +4 -11
- package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
- package/dist/server/rsc-error-envelope.d.ts +11 -0
- package/dist/server/rsc-error-envelope.d.ts.map +1 -0
- package/dist/server/skippable-prefix.d.ts +18 -15
- package/dist/server/skippable-prefix.d.ts.map +1 -1
- package/dist/server/slot-resolver.d.ts.map +1 -1
- package/dist/server/slot-subtree-contain.d.ts +54 -0
- package/dist/server/slot-subtree-contain.d.ts.map +1 -0
- package/dist/server/stream-utils.d.ts.map +1 -1
- package/dist/server/utils/element-type.d.ts +10 -0
- package/dist/server/utils/element-type.d.ts.map +1 -1
- package/dist/shared/rsc-error-envelope.d.ts +0 -9
- package/dist/shared/rsc-error-envelope.d.ts.map +1 -1
- package/dist/shared/status-reason-phrase.d.ts +26 -0
- package/dist/shared/status-reason-phrase.d.ts.map +1 -0
- package/docs/api/30-api-server.mdx +4 -2
- package/docs/api/31-api-client.mdx +5 -1
- package/docs/api/36-cli.mdx +5 -3
- package/docs/learn/12-error-handling.mdx +5 -1
- package/package.json +10 -10
- package/src/client/browser-entry/action-dispatch.ts +166 -99
- package/src/client/browser-entry/action-queue.ts +90 -0
- package/src/client/browser-entry/router-init.ts +60 -35
- package/src/client/deny-last-resort.tsx +54 -0
- package/src/client/error-boundary.tsx +144 -42
- package/src/client/history.ts +52 -3
- package/src/client/internal.ts +1 -0
- package/src/client/link.tsx +70 -35
- package/src/client/navigation-commit.ts +79 -27
- package/src/client/navigation-transition.ts +176 -127
- package/src/client/router-effects.ts +14 -17
- package/src/client/router-lifecycle.ts +181 -115
- package/src/client/router-pipeline.ts +94 -71
- package/src/client/router-types.ts +61 -7
- package/src/client/router.ts +147 -74
- package/src/client/rsc-fetch.ts +0 -13
- package/src/client/segment-cache.ts +43 -10
- package/src/client/state.ts +26 -0
- package/src/client/status-page-marker.tsx +32 -0
- package/src/dev-tools/holding-server.ts +4 -17
- package/src/index.ts +18 -34
- package/src/plugins/dev-server.ts +2 -1
- package/src/react-canary.d.ts +2 -0
- package/src/routing/codegen-write.ts +2 -0
- package/src/routing/interception.ts +2 -2
- package/src/routing/slot-placement.ts +2 -2
- package/src/server/access-gate.tsx +89 -21
- package/src/server/action-client.ts +2 -2
- package/src/server/action-handler.ts +23 -10
- package/src/server/actions.ts +81 -34
- package/src/server/als-registry.ts +3 -9
- package/src/server/children-interception.ts +1 -1
- package/src/server/default-status-page.ts +7 -47
- package/src/server/deny-boundary.ts +45 -28
- package/src/server/deny-renderer.ts +6 -2
- package/src/server/error-boundary-wrapper.ts +23 -4
- package/src/server/error-response-headers.ts +18 -0
- package/src/server/internal.ts +2 -10
- package/src/server/metadata-collector.ts +3 -18
- package/src/server/param-coercion.ts +13 -4
- package/src/server/pipeline-outcome.ts +35 -13
- package/src/server/pipeline-phases.ts +22 -16
- package/src/server/port-resolution.ts +3 -165
- package/src/server/prebuilt-builder.ts +4 -4
- package/src/server/primitives.ts +75 -11
- package/src/server/response-cache-policy.ts +45 -0
- package/src/server/route-element-builder.ts +149 -412
- package/src/server/route-element-helpers.ts +37 -0
- package/src/server/route-handler.ts +2 -2
- package/src/server/route-module-loader.ts +161 -0
- package/src/server/rsc-cache-key-guard.ts +2 -42
- package/src/server/rsc-entry/action-middleware-runner.ts +4 -4
- package/src/server/rsc-entry/api-handler.ts +5 -5
- package/src/server/rsc-entry/error-renderer.ts +3 -4
- package/src/server/rsc-entry/helpers.ts +1 -1
- package/src/server/rsc-entry/index.ts +3 -3
- package/src/server/rsc-entry/render-route.ts +4 -8
- package/src/server/rsc-entry/rsc-payload.ts +59 -42
- package/src/server/rsc-entry/rsc-stream.ts +48 -27
- package/src/server/rsc-entry/ssr-renderer.ts +6 -10
- package/src/server/rsc-error-envelope.ts +18 -0
- package/src/server/skippable-prefix.ts +105 -7
- package/src/server/slot-resolver.ts +43 -12
- package/src/server/slot-subtree-contain.ts +255 -0
- package/src/server/stream-utils.ts +12 -8
- package/src/server/utils/element-type.ts +18 -2
- package/src/shared/rsc-error-envelope.ts +0 -15
- package/src/shared/status-reason-phrase.ts +61 -0
- package/dist/_chunks/actions-BS-m5SLv.js.map +0 -1
- package/dist/_chunks/convention-lint-n3RJLgww.js.map +0 -1
- package/dist/_chunks/error-boundary-BvRCCmbN.js +0 -353
- package/dist/_chunks/error-boundary-BvRCCmbN.js.map +0 -1
- package/dist/_chunks/logger-DDirEsn7.js.map +0 -1
- package/dist/_chunks/mdx-file-CXyHGUpS.js +0 -25
- package/dist/_chunks/mdx-file-CXyHGUpS.js.map +0 -1
- package/dist/_chunks/router-ref-8gr8qsxN.js +0 -28
- package/dist/_chunks/router-ref-8gr8qsxN.js.map +0 -1
- package/dist/_chunks/rsc-error-envelope-tT5PJs4q.js +0 -40
- package/dist/_chunks/rsc-error-envelope-tT5PJs4q.js.map +0 -1
- package/dist/_chunks/scanner-tdFPvDYi.js.map +0 -1
- package/dist/_chunks/segment-keys-BhqoHiLc.js.map +0 -1
- package/dist/_chunks/ssr-data-BQGhTPAK.js.map +0 -1
- package/dist/server/tree-builder.d.ts +0 -150
- package/dist/server/tree-builder.d.ts.map +0 -1
- package/src/server/tree-builder.ts +0 -313
|
@@ -20,14 +20,6 @@ export interface PrefetchResult {
|
|
|
20
20
|
params?: PublishedParams | Promise<PublishedParams>;
|
|
21
21
|
/** Segment paths skipped by the server (for client-side merging). */
|
|
22
22
|
skippedSegments?: string[] | null;
|
|
23
|
-
/**
|
|
24
|
-
* HTTP status of the prefetched response. A deny payload is an ordinary
|
|
25
|
-
* Flight response carrying a 4xx, so it prefetches and caches like any
|
|
26
|
-
* other — and the tree it renders is one the segment cache must not learn
|
|
27
|
-
* from. Absent on entries that predate the field, and on the negative
|
|
28
|
-
* sentinel. See TIM-1356.
|
|
29
|
-
*/
|
|
30
|
-
status?: number;
|
|
31
23
|
}
|
|
32
24
|
/**
|
|
33
25
|
* A node in the client-side segment tree. Each node represents a mounted
|
|
@@ -173,6 +165,7 @@ export declare class PrefetchCache {
|
|
|
173
165
|
private static readonly TTL_MS;
|
|
174
166
|
private entries;
|
|
175
167
|
private flights;
|
|
168
|
+
private evictionGen;
|
|
176
169
|
set(key: PrefetchKey, result: PrefetchResult): void;
|
|
177
170
|
get(key: PrefetchKey): PrefetchResult | undefined;
|
|
178
171
|
/** True if a ready or negative entry exists for this key. */
|
|
@@ -212,5 +205,27 @@ export declare class PrefetchCache {
|
|
|
212
205
|
setNegative(key: PrefetchKey): void;
|
|
213
206
|
/** Check if the entry is a negative cache entry (URL is not a route). */
|
|
214
207
|
isNegative(key: PrefetchKey): boolean;
|
|
208
|
+
/**
|
|
209
|
+
* Invalidate all entries whose destination URL matches (TIM-1454).
|
|
210
|
+
* Used by `revalidatePath` on a non-current route so the next navigation
|
|
211
|
+
* fetches fresh data instead of replaying a stale prefetch.
|
|
212
|
+
*/
|
|
213
|
+
invalidateUrl(url: string): void;
|
|
214
|
+
/**
|
|
215
|
+
* Evict all ready entries and fence in-flight singleflights (TIM-1476).
|
|
216
|
+
* Called after a server action that revalidated data — the mutation may
|
|
217
|
+
* affect any route, not just the paths the server named. In-flight
|
|
218
|
+
* singleflights are not aborted (they may carry post-mutation data),
|
|
219
|
+
* but their results are discarded if they complete after eviction:
|
|
220
|
+
* `fetchOrCoalesce` captures the generation before the flight and
|
|
221
|
+
* skips the store when it has been bumped.
|
|
222
|
+
*
|
|
223
|
+
* Consumers that join an in-flight flight via `joinInflight` must
|
|
224
|
+
* check `getEvictionGen()` before and after the await: if the gen
|
|
225
|
+
* changed, the result predates the eviction and must be discarded
|
|
226
|
+
* (codex on #1131 round 2).
|
|
227
|
+
*/
|
|
228
|
+
clearReady(): void;
|
|
229
|
+
getEvictionGen(): number;
|
|
215
230
|
}
|
|
216
231
|
//# sourceMappingURL=segment-cache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segment-cache.d.ts","sourceRoot":"","sources":["../../src/client/segment-cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAKxE,8DAA8D;AAC9D,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACrC,uFAAuF;IACvF,WAAW,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACnC;;;;OAIG;IACH,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACpD,qEAAqE;IACrE,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"segment-cache.d.ts","sourceRoot":"","sources":["../../src/client/segment-cache.ts"],"names":[],"mappings":"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"}
|
package/dist/client/state.d.ts
CHANGED
|
@@ -39,4 +39,20 @@ export declare function _setCachedSearch(search: string, params: URLSearchParams
|
|
|
39
39
|
/** Whether the page is currently being unloaded. */
|
|
40
40
|
export declare let unloading: boolean;
|
|
41
41
|
export declare function _setUnloading(value: boolean): void;
|
|
42
|
+
/**
|
|
43
|
+
* Whether a status page for the main route has rendered since the last
|
|
44
|
+
* navigation was prepared. Raised by `StatusPageMarker`, consumed by the
|
|
45
|
+
* navigation's commit. See navigation-commit.ts §"What a status page
|
|
46
|
+
* teaches the cache".
|
|
47
|
+
*/
|
|
48
|
+
export declare let statusPageRendered: boolean;
|
|
49
|
+
export declare function _setStatusPageRendered(value: boolean): void;
|
|
50
|
+
/**
|
|
51
|
+
* What a status page report does beyond raising the flag: registered by the
|
|
52
|
+
* router's committer so the report can clear the segment cache at once, for
|
|
53
|
+
* the commits no navigation consumes (a row arriving inside Suspense after
|
|
54
|
+
* its navigation published, a status document being hydrated).
|
|
55
|
+
*/
|
|
56
|
+
export declare let onStatusPageRendered: (() => void) | undefined;
|
|
57
|
+
export declare function _setOnStatusPageRendered(handler: (() => void) | undefined): void;
|
|
42
58
|
//# sourceMappingURL=state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/client/state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,+DAA+D;AAC/D,eAAO,IAAI,YAAY,EAAE,cAAc,GAAG,IAAW,CAAC;AAEtD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAEpE;AAID;;;GAGG;AACH,eAAO,IAAI,eAAe,EAAE,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;AAEpE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,SAAS,GAAG,IAAI,CAE3F;AAED,gEAAgE;AAChE,eAAO,IAAI,cAAc,EAAE,OAAO,GAAG,SAAS,CAAC;AAE/C,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAElE;AAID,uEAAuE;AACvE,eAAO,IAAI,YAAY,QAAK,CAAC;AAC7B,eAAO,IAAI,kBAAkB,iBAAwB,CAAC;AAEtD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAG9E;AAID,oDAAoD;AACpD,eAAO,IAAI,SAAS,SAAQ,CAAC;AAE7B,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAElD"}
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/client/state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,+DAA+D;AAC/D,eAAO,IAAI,YAAY,EAAE,cAAc,GAAG,IAAW,CAAC;AAEtD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAEpE;AAID;;;GAGG;AACH,eAAO,IAAI,eAAe,EAAE,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;AAEpE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,SAAS,GAAG,IAAI,CAE3F;AAED,gEAAgE;AAChE,eAAO,IAAI,cAAc,EAAE,OAAO,GAAG,SAAS,CAAC;AAE/C,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAElE;AAID,uEAAuE;AACvE,eAAO,IAAI,YAAY,QAAK,CAAC;AAC7B,eAAO,IAAI,kBAAkB,iBAAwB,CAAC;AAEtD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAG9E;AAID,oDAAoD;AACpD,eAAO,IAAI,SAAS,SAAQ,CAAC;AAE7B,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAElD;AAID;;;;;GAKG;AACH,eAAO,IAAI,kBAAkB,SAAQ,CAAC;AAEtC,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAE3D;AAED;;;;;GAKG;AACH,eAAO,IAAI,oBAAoB,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;AAE1D,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAEhF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one way a status page tells the router it is on screen.
|
|
3
|
+
*
|
|
4
|
+
* A status page replaces a subtree, and the segment cache must not learn a
|
|
5
|
+
* chain that never mounted (see `navigation-commit.ts` §"What a status page
|
|
6
|
+
* teaches the cache"). Status pages are produced in three places — an
|
|
7
|
+
* in-tree catch site rendering the page it owns, the server's fallback
|
|
8
|
+
* renderers, and a client boundary rendering its fallback for a Flight row —
|
|
9
|
+
* and every one of them wraps the page in this marker, so the report does
|
|
10
|
+
* not depend on which producer it was. In particular the in-tree case, the
|
|
11
|
+
* common `access.ts` deny, never involves a client boundary at all.
|
|
12
|
+
*
|
|
13
|
+
* A layout effect, on every commit that renders the marker rather than on
|
|
14
|
+
* mount only: React reuses the fiber when one status page is replaced by
|
|
15
|
+
* another at the same position, and the second one must report too. Layout
|
|
16
|
+
* effects run child-before-parent, so the report lands before the ancestor
|
|
17
|
+
* `NavigationRoot` publishes the same commit, and never for a render React
|
|
18
|
+
* discards. Idempotent, so StrictMode's double invocation and a status page
|
|
19
|
+
* re-rendering on its own state are harmless. See TIM-1495.
|
|
20
|
+
*/
|
|
21
|
+
import { type ReactNode } from 'react';
|
|
22
|
+
export declare function StatusPageMarker({ children }: {
|
|
23
|
+
children: ReactNode;
|
|
24
|
+
}): ReactNode;
|
|
25
|
+
//# sourceMappingURL=status-page-marker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-page-marker.d.ts","sourceRoot":"","sources":["../../src/client/status-page-marker.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGxD,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,GAAG,SAAS,CAKjF"}
|
package/dist/cookies/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { i as assertValidCookieName, r as stringifySetCookie, t as parseCookie } from "../_chunks/dist-DtrJyBbw.js";
|
|
2
|
-
import { n as getSsrData } from "../_chunks/ssr-data-BQGhTPAK.js";
|
|
3
2
|
import { a as resolveCodecOrSchema } from "../_chunks/schema-bridge-C83xa9lT.js";
|
|
3
|
+
import { n as getSsrData } from "../_chunks/ssr-data-D6T6Y3ef.js";
|
|
4
4
|
import * as React$1 from "react";
|
|
5
5
|
import { getCookieJar } from "@timber-js/app/server";
|
|
6
6
|
//#region src/client/use-cookie.ts
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* The holding server is started in rootSync's config() hook (the
|
|
15
15
|
* earliest Vite plugin lifecycle point where we know the port) and
|
|
16
16
|
* closed directly in timber-dev-server's configureServer() hook
|
|
17
|
-
* (the last plugin,
|
|
17
|
+
* (the last plugin, awaited). configureServer runs during
|
|
18
18
|
* createServer(), well before Vite's port probe and bind, so the
|
|
19
19
|
* port is free by the time httpServerStart() runs. (TIM-1419)
|
|
20
20
|
*
|
|
@@ -38,22 +38,9 @@ export interface HoldingServer {
|
|
|
38
38
|
/**
|
|
39
39
|
* Create a holding HTTP server that serves a loading page during startup.
|
|
40
40
|
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* // Use bindWithBump() to honor the default-3000 + auto-bump policy
|
|
45
|
-
* // (see ../server/port-resolution.ts and TIM-842).
|
|
46
|
-
* const holding = createHoldingServer();
|
|
47
|
-
* await bindWithBump((p) => holding.listen(p), { startPort: 3000, autoBump: true });
|
|
48
|
-
*
|
|
49
|
-
* // In last plugin's configureServer() — close directly so Vite 8's
|
|
50
|
-
* // isPortAvailable() probe and httpServer.listen() both see a free
|
|
51
|
-
* // port. SO_REUSEADDR allows immediate rebind. (TIM-1419)
|
|
52
|
-
* if (ctx.holdingServer) {
|
|
53
|
-
* ctx.holdingServer.close().catch(() => {});
|
|
54
|
-
* ctx.holdingServer = null;
|
|
55
|
-
* }
|
|
56
|
-
* ```
|
|
41
|
+
* The config hook attempts one bind on the requested port. If it fails,
|
|
42
|
+
* startup continues without the holding page; Vite owns port selection.
|
|
43
|
+
* The last configureServer hook awaits close() before Vite probes/binds.
|
|
57
44
|
*/
|
|
58
45
|
export declare function createHoldingServer(): HoldingServer;
|
|
59
46
|
//# sourceMappingURL=holding-server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"holding-server.d.ts","sourceRoot":"","sources":["../../src/dev-tools/holding-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAErD,kEAAkE;IAClE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AA8ED
|
|
1
|
+
{"version":3,"file":"holding-server.d.ts","sourceRoot":"","sources":["../../src/dev-tools/holding-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAErD,kEAAkE;IAClE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AA8ED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAyDnD"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAU,YAAY,EAAE,MAAM,MAAM,CAAC;AAyCjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAa1D,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAQ1D,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAElG;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,MAAM;CAAG;AAE1B;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAEvE;AAyGD,wBAAgB,MAAM,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAU,YAAY,EAAE,MAAM,MAAM,CAAC;AAyCjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAa1D,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAQ1D,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAElG;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,MAAM;CAAG;AAE1B;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAEvE;AAyGD,wBAAgB,MAAM,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,YAAY,EAAE,CAqXhE;eAEc,MAAM"}
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { l as registerDevDiscovery } from "./_chunks/graph-cache-CP4GEmf9.js";
|
|
2
2
|
import { n as isScannableSourceFile, t as buildSourceExtensions } from "./_chunks/scan-BoP17W3w.js";
|
|
3
3
|
import { t as RSC_CONTENT_TYPE } from "./_chunks/rsc-media-type-DDc7duTD.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { c as writeRouteCodegen, i as getPrerenderExport, l as buildDirToRouteMap, n as formatConventionWarnings, r as lintConventions, s as flushCodegenWrites, t as checkAppDirExists } from "./_chunks/convention-lint-
|
|
4
|
+
import { M as isSsrStreamError, h as swallow } from "./_chunks/logger-uLBuGKDI.js";
|
|
5
|
+
import { c as isMetadataRouteServePath, s as isDynamicMetadataExtension } from "./_chunks/segment-keys-lqtdookO.js";
|
|
6
|
+
import { r as canonicalize } from "./_chunks/canonicalize-CgHoscYO.js";
|
|
7
|
+
import { i as matchUrlParts, n as scanRoutes, r as collectInterceptionRewrites } from "./_chunks/scanner-AiazgH_f.js";
|
|
8
|
+
import { c as writeRouteCodegen, i as getPrerenderExport, l as buildDirToRouteMap, n as formatConventionWarnings, r as lintConventions, s as flushCodegenWrites, t as checkAppDirExists, u as MDX_EXTENSIONS } from "./_chunks/convention-lint-fRkwVwEH.js";
|
|
9
9
|
import { c as resolveClientJavascript, i as mergeFileConfig, l as createNoopTimer, o as resolveAppDir, r as loadTimberConfigFile, s as resolveBuildDir, t as createPluginContext } from "./_chunks/plugin-context-8idfR3UZ.js";
|
|
10
|
-
import { r as validateSchemaAgainstRoutes, t as collectLeafRoutes } from "./_chunks/walkers-
|
|
10
|
+
import { r as validateSchemaAgainstRoutes, t as collectLeafRoutes } from "./_chunks/walkers-B6XUtmqK.js";
|
|
11
11
|
import { i as poisonPillSource, r as markerFor, t as EXPLICIT_MARKERS } from "./_chunks/poison-rules-DoEhbqaY.js";
|
|
12
12
|
import { i as withBasePath, n as normalizeBasePath, t as isRelativeBase } from "./_chunks/base-path-DaQrzbez.js";
|
|
13
13
|
import { t as EMPTY_BUILD_MANIFEST } from "./_chunks/build-manifest-DTmSGLRz.js";
|
|
@@ -117,7 +117,7 @@ function timberContent(ctx) {
|
|
|
117
117
|
};
|
|
118
118
|
}
|
|
119
119
|
//#endregion
|
|
120
|
-
//#region ../../node_modules/.pnpm/srvx@0.
|
|
120
|
+
//#region ../../node_modules/.pnpm/srvx@1.0.4/node_modules/srvx/dist/adapters/node.mjs
|
|
121
121
|
function sendNodeResponse(nodeRes, webRes) {
|
|
122
122
|
try {
|
|
123
123
|
return _sendNodeResponse(nodeRes, webRes, false) || Promise.resolve();
|
|
@@ -1524,7 +1524,7 @@ function createGraphEndpointMiddleware(server, ctx) {
|
|
|
1524
1524
|
}
|
|
1525
1525
|
reflectCors(res, origin);
|
|
1526
1526
|
try {
|
|
1527
|
-
const { classifyLiveFile, classifyLiveProject } = await import("./_chunks/live-graph-
|
|
1527
|
+
const { classifyLiveFile, classifyLiveProject } = await import("./_chunks/live-graph-D_2D32Ad.js");
|
|
1528
1528
|
const preserveSymlinks = server.config.resolve.preserveSymlinks;
|
|
1529
1529
|
const root = normalizePath(preserveSymlinks ? ctx.root : await realpath(ctx.root));
|
|
1530
1530
|
const appDir = normalizePath(preserveSymlinks ? ctx.appDir : await realpath(ctx.appDir).catch(() => join(root, relative(ctx.root, ctx.appDir))));
|
|
@@ -2013,7 +2013,7 @@ function createTimberMiddleware(server, ctx) {
|
|
|
2013
2013
|
await sendNodeResponse(res, finalResponse);
|
|
2014
2014
|
} catch (error) {
|
|
2015
2015
|
if (error instanceof Error) {
|
|
2016
|
-
const displayError = error
|
|
2016
|
+
const displayError = isSsrStreamError(error) && error.cause instanceof Error ? error.cause : error;
|
|
2017
2017
|
const phase = classifyErrorPhase(displayError, projectRoot);
|
|
2018
2018
|
sendErrorToOverlay(server, displayError, phase, projectRoot);
|
|
2019
2019
|
respond500(res, displayError, phase, projectRoot, hmrOptions);
|
|
@@ -4809,7 +4809,7 @@ function renderEntryCss(entry, urlPrefix) {
|
|
|
4809
4809
|
return cssParts.join("\n\n");
|
|
4810
4810
|
}
|
|
4811
4811
|
//#endregion
|
|
4812
|
-
//#region ../../node_modules/.pnpm/@jridgewell+sourcemap-codec@1.
|
|
4812
|
+
//#region ../../node_modules/.pnpm/@jridgewell+sourcemap-codec@1.6.0/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs
|
|
4813
4813
|
var comma = ",".charCodeAt(0);
|
|
4814
4814
|
var semicolon = ";".charCodeAt(0);
|
|
4815
4815
|
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
@@ -4820,16 +4820,16 @@ for (let i = 0; i < chars.length; i++) {
|
|
|
4820
4820
|
intToChar[i] = c;
|
|
4821
4821
|
charToInt[c] = i;
|
|
4822
4822
|
}
|
|
4823
|
-
function encodeInteger(builder, num
|
|
4824
|
-
let delta = num - relative;
|
|
4825
|
-
delta = delta < 0 ? -delta << 1 | 1 : delta << 1;
|
|
4823
|
+
function encodeInteger(builder, num) {
|
|
4826
4824
|
do {
|
|
4827
|
-
let clamped =
|
|
4828
|
-
|
|
4829
|
-
if (
|
|
4825
|
+
let clamped = num & 31;
|
|
4826
|
+
num >>>= 5;
|
|
4827
|
+
if (num > 0) clamped |= 32;
|
|
4830
4828
|
builder.write(intToChar[clamped]);
|
|
4831
|
-
} while (
|
|
4832
|
-
|
|
4829
|
+
} while (num > 0);
|
|
4830
|
+
}
|
|
4831
|
+
function encodeSign(num) {
|
|
4832
|
+
return num < 0 ? -num << 1 | 1 : num << 1;
|
|
4833
4833
|
}
|
|
4834
4834
|
var bufLength = 16384;
|
|
4835
4835
|
var td = typeof TextDecoder !== "undefined" ? /* @__PURE__ */ new TextDecoder() : typeof Buffer !== "undefined" ? { decode(buf) {
|
|
@@ -4872,19 +4872,24 @@ function encode(decoded) {
|
|
|
4872
4872
|
for (let j = 0; j < line.length; j++) {
|
|
4873
4873
|
const segment = line[j];
|
|
4874
4874
|
if (j > 0) writer.write(comma);
|
|
4875
|
-
|
|
4875
|
+
encodeInteger(writer, encodeSign(segment[0] - genColumn));
|
|
4876
|
+
genColumn = segment[0];
|
|
4876
4877
|
if (segment.length === 1) continue;
|
|
4877
|
-
|
|
4878
|
-
|
|
4879
|
-
|
|
4878
|
+
encodeInteger(writer, encodeSign(segment[1] - sourcesIndex));
|
|
4879
|
+
encodeInteger(writer, encodeSign(segment[2] - sourceLine));
|
|
4880
|
+
encodeInteger(writer, encodeSign(segment[3] - sourceColumn));
|
|
4881
|
+
sourcesIndex = segment[1];
|
|
4882
|
+
sourceLine = segment[2];
|
|
4883
|
+
sourceColumn = segment[3];
|
|
4880
4884
|
if (segment.length === 4) continue;
|
|
4881
|
-
|
|
4885
|
+
encodeInteger(writer, encodeSign(segment[4] - namesIndex));
|
|
4886
|
+
namesIndex = segment[4];
|
|
4882
4887
|
}
|
|
4883
4888
|
}
|
|
4884
4889
|
return writer.flush();
|
|
4885
4890
|
}
|
|
4886
4891
|
//#endregion
|
|
4887
|
-
//#region ../../node_modules/.pnpm/magic-string@1.2.
|
|
4892
|
+
//#region ../../node_modules/.pnpm/magic-string@1.2.3/node_modules/magic-string/dist/index.mjs
|
|
4888
4893
|
var BitSet = class BitSet {
|
|
4889
4894
|
constructor(arg) {
|
|
4890
4895
|
this.bits = arg instanceof BitSet ? arg.bits.slice() : [];
|
|
@@ -5585,8 +5590,8 @@ var MagicString = class MagicString {
|
|
|
5585
5590
|
end = end + this.offset;
|
|
5586
5591
|
if (typeof content !== "string") throw new MagicStringError(`content must be a string, got ${typeof content}`);
|
|
5587
5592
|
if (this.original.length !== 0) {
|
|
5588
|
-
|
|
5589
|
-
|
|
5593
|
+
if (start < 0) start = Math.max(0, start + this.original.length);
|
|
5594
|
+
if (end < 0) end = Math.max(0, end + this.original.length);
|
|
5590
5595
|
}
|
|
5591
5596
|
if (start < 0) throw new MagicStringError(`start ${start} is out of bounds`);
|
|
5592
5597
|
if (end > this.original.length) throw new MagicStringError(`end ${end} is out of bounds`);
|
|
@@ -5669,8 +5674,8 @@ var MagicString = class MagicString {
|
|
|
5669
5674
|
start = start + this.offset;
|
|
5670
5675
|
end = end + this.offset;
|
|
5671
5676
|
if (this.original.length !== 0) {
|
|
5672
|
-
|
|
5673
|
-
|
|
5677
|
+
if (start < 0) start = Math.max(0, start + this.original.length);
|
|
5678
|
+
if (end < 0) end = Math.max(0, end + this.original.length);
|
|
5674
5679
|
}
|
|
5675
5680
|
if (start === end) return this;
|
|
5676
5681
|
if (start < 0 || end > this.original.length) throw new MagicStringError(`range ${start}–${end} is out of bounds`);
|
|
@@ -5693,8 +5698,8 @@ var MagicString = class MagicString {
|
|
|
5693
5698
|
start = start + this.offset;
|
|
5694
5699
|
end = end + this.offset;
|
|
5695
5700
|
if (this.original.length !== 0) {
|
|
5696
|
-
|
|
5697
|
-
|
|
5701
|
+
if (start < 0) start = Math.max(0, start + this.original.length);
|
|
5702
|
+
if (end < 0) end = Math.max(0, end + this.original.length);
|
|
5698
5703
|
}
|
|
5699
5704
|
if (start === end) return this;
|
|
5700
5705
|
if (start < 0 || end > this.original.length) throw new MagicStringError(`range ${start}–${end} is out of bounds`);
|
|
@@ -5755,8 +5760,8 @@ var MagicString = class MagicString {
|
|
|
5755
5760
|
start = start + this.offset;
|
|
5756
5761
|
end = end + this.offset;
|
|
5757
5762
|
if (this.original.length !== 0) {
|
|
5758
|
-
|
|
5759
|
-
|
|
5763
|
+
if (start < 0) start = Math.max(0, start + this.original.length);
|
|
5764
|
+
if (end < 0) end = Math.max(0, end + this.original.length);
|
|
5760
5765
|
}
|
|
5761
5766
|
let result = "";
|
|
5762
5767
|
let chunk = this.firstChunk;
|
|
@@ -5942,27 +5947,19 @@ var MagicString = class MagicString {
|
|
|
5942
5947
|
});
|
|
5943
5948
|
else return replacement(match[0], ...match.slice(1), match.index, str, match.groups);
|
|
5944
5949
|
}
|
|
5945
|
-
|
|
5946
|
-
|
|
5947
|
-
|
|
5948
|
-
|
|
5949
|
-
|
|
5950
|
-
|
|
5951
|
-
|
|
5952
|
-
|
|
5953
|
-
|
|
5954
|
-
|
|
5955
|
-
|
|
5956
|
-
const replacement = getReplacement(match, this.original);
|
|
5957
|
-
if (replacement !== match[0]) this.overwrite(match.index, match.index + match[0].length, replacement);
|
|
5958
|
-
}
|
|
5959
|
-
});
|
|
5960
|
-
else {
|
|
5950
|
+
const replaceMatch = (match) => {
|
|
5951
|
+
if (match.index == null) return;
|
|
5952
|
+
const replacement = getReplacement(match, this.original);
|
|
5953
|
+
if (replacement === match[0]) return;
|
|
5954
|
+
if (match[0].length === 0) this.appendRight(match.index, replacement);
|
|
5955
|
+
else this.overwrite(match.index, match.index + match[0].length, replacement);
|
|
5956
|
+
};
|
|
5957
|
+
if (searchValue.global) {
|
|
5958
|
+
searchValue.lastIndex = 0;
|
|
5959
|
+
for (const match of this.original.matchAll(searchValue)) replaceMatch(match);
|
|
5960
|
+
} else {
|
|
5961
5961
|
const match = this.original.match(searchValue);
|
|
5962
|
-
if (match
|
|
5963
|
-
const replacement = getReplacement(match, this.original);
|
|
5964
|
-
if (replacement !== match[0]) this.overwrite(match.index, match.index + match[0].length, replacement);
|
|
5965
|
-
}
|
|
5962
|
+
if (match) replaceMatch(match);
|
|
5966
5963
|
}
|
|
5967
5964
|
return this;
|
|
5968
5965
|
}
|
|
@@ -5972,7 +5969,8 @@ var MagicString = class MagicString {
|
|
|
5972
5969
|
const index = original.indexOf(string);
|
|
5973
5970
|
if (index !== -1) {
|
|
5974
5971
|
if (typeof replacement === "function") replacement = replacement(string, index, original);
|
|
5975
|
-
if (string !== replacement)
|
|
5972
|
+
if (string !== replacement) if (string.length === 0) this.appendRight(index, replacement);
|
|
5973
|
+
else this.overwrite(index, index + string.length, replacement);
|
|
5976
5974
|
}
|
|
5977
5975
|
return this;
|
|
5978
5976
|
}
|
|
@@ -5987,6 +5985,13 @@ var MagicString = class MagicString {
|
|
|
5987
5985
|
_replaceAllString(string, replacement) {
|
|
5988
5986
|
const { original } = this;
|
|
5989
5987
|
const stringLength = string.length;
|
|
5988
|
+
if (stringLength === 0) {
|
|
5989
|
+
for (let index = 0; index <= original.length; index += 1) {
|
|
5990
|
+
const _replacement = typeof replacement === "function" ? replacement("", index, original) : replacement;
|
|
5991
|
+
if (_replacement !== "") this.appendRight(index, _replacement);
|
|
5992
|
+
}
|
|
5993
|
+
return this;
|
|
5994
|
+
}
|
|
5990
5995
|
for (let index = original.indexOf(string); index !== -1; index = original.indexOf(string, index + stringLength)) {
|
|
5991
5996
|
const previous = original.slice(index, index + stringLength);
|
|
5992
5997
|
const _replacement = typeof replacement === "function" ? replacement(previous, index, original) : replacement;
|
|
@@ -10797,7 +10802,7 @@ function validateKeyFormat(key) {
|
|
|
10797
10802
|
* The holding server is started in rootSync's config() hook (the
|
|
10798
10803
|
* earliest Vite plugin lifecycle point where we know the port) and
|
|
10799
10804
|
* closed directly in timber-dev-server's configureServer() hook
|
|
10800
|
-
* (the last plugin,
|
|
10805
|
+
* (the last plugin, awaited). configureServer runs during
|
|
10801
10806
|
* createServer(), well before Vite's port probe and bind, so the
|
|
10802
10807
|
* port is free by the time httpServerStart() runs. (TIM-1419)
|
|
10803
10808
|
*
|
|
@@ -10881,22 +10886,9 @@ var HOLDING_PAGE_HTML = [
|
|
|
10881
10886
|
/**
|
|
10882
10887
|
* Create a holding HTTP server that serves a loading page during startup.
|
|
10883
10888
|
*
|
|
10884
|
-
*
|
|
10885
|
-
*
|
|
10886
|
-
*
|
|
10887
|
-
* // Use bindWithBump() to honor the default-3000 + auto-bump policy
|
|
10888
|
-
* // (see ../server/port-resolution.ts and TIM-842).
|
|
10889
|
-
* const holding = createHoldingServer();
|
|
10890
|
-
* await bindWithBump((p) => holding.listen(p), { startPort: 3000, autoBump: true });
|
|
10891
|
-
*
|
|
10892
|
-
* // In last plugin's configureServer() — close directly so Vite 8's
|
|
10893
|
-
* // isPortAvailable() probe and httpServer.listen() both see a free
|
|
10894
|
-
* // port. SO_REUSEADDR allows immediate rebind. (TIM-1419)
|
|
10895
|
-
* if (ctx.holdingServer) {
|
|
10896
|
-
* ctx.holdingServer.close().catch(() => {});
|
|
10897
|
-
* ctx.holdingServer = null;
|
|
10898
|
-
* }
|
|
10899
|
-
* ```
|
|
10889
|
+
* The config hook attempts one bind on the requested port. If it fails,
|
|
10890
|
+
* startup continues without the holding page; Vite owns port selection.
|
|
10891
|
+
* The last configureServer hook awaits close() before Vite probes/binds.
|
|
10900
10892
|
*/
|
|
10901
10893
|
function createHoldingServer() {
|
|
10902
10894
|
const server = nodeHTTP.createServer((req, res) => {
|
|
@@ -10942,33 +10934,10 @@ function createHoldingServer() {
|
|
|
10942
10934
|
}
|
|
10943
10935
|
};
|
|
10944
10936
|
}
|
|
10945
|
-
//#endregion
|
|
10946
|
-
//#region src/server/port-resolution.ts
|
|
10947
|
-
/**
|
|
10948
|
-
* Port resolution for the dev server, Vite preview, and the Node
|
|
10949
|
-
* production preview server.
|
|
10950
|
-
*
|
|
10951
|
-
* Behavior (see TIM-842):
|
|
10952
|
-
*
|
|
10953
|
-
* 1. Default port is **3000** for both dev and prod.
|
|
10954
|
-
* 2. If the user did NOT set an explicit port, auto-bump from 3000
|
|
10955
|
-
* until a free port is found (3000 → 3001 → 3002 → …).
|
|
10956
|
-
* 3. If the user DID set an explicit port (via `--port`, `PORT` env
|
|
10957
|
-
* var, or `vite.config.ts` `server.port`), use it as-is and let
|
|
10958
|
-
* the bind fail loudly on conflict (`strictPort: true`).
|
|
10959
|
-
*
|
|
10960
|
-
* The port-bump probe is performed by binding the **actual** server
|
|
10961
|
-
* (e.g. the dev holding server) — not a throwaway probe — so there is
|
|
10962
|
-
* no time-of-check / time-of-use race between probing and listening.
|
|
10963
|
-
*
|
|
10964
|
-
* Design doc: 21-dev-server.md §"Default Port and Auto-Bump".
|
|
10965
|
-
*/
|
|
10966
|
-
/** Default port used by `timber dev` and `timber preview`. */
|
|
10967
|
-
var DEFAULT_PORT = 3e3;
|
|
10968
10937
|
/**
|
|
10969
10938
|
* Pure: compute the starting port from config / env / defaults.
|
|
10970
10939
|
*
|
|
10971
|
-
* Performs no I/O
|
|
10940
|
+
* Performs no I/O.
|
|
10972
10941
|
*/
|
|
10973
10942
|
function resolveStartPort(input) {
|
|
10974
10943
|
const defaultPort = input.defaultPort ?? 3e3;
|
|
@@ -10988,76 +10957,6 @@ function resolveStartPort(input) {
|
|
|
10988
10957
|
explicit: false
|
|
10989
10958
|
};
|
|
10990
10959
|
}
|
|
10991
|
-
/**
|
|
10992
|
-
* Bind a server starting at `startPort`, optionally bumping the port
|
|
10993
|
-
* on `EADDRINUSE` until a free one is found.
|
|
10994
|
-
*
|
|
10995
|
-
* Use this with the actual server you intend to keep listening (e.g.
|
|
10996
|
-
* the dev holding server). Pairing the probe with the real listen
|
|
10997
|
-
* eliminates the TOCTOU race that a throwaway probe would introduce.
|
|
10998
|
-
*/
|
|
10999
|
-
async function bindWithBump(listen, options) {
|
|
11000
|
-
const maxAttempts = options.autoBump ? options.maxAttempts ?? 100 : 1;
|
|
11001
|
-
let lastErr = null;
|
|
11002
|
-
for (let i = 0; i < maxAttempts; i++) {
|
|
11003
|
-
const port = options.startPort + i;
|
|
11004
|
-
try {
|
|
11005
|
-
return {
|
|
11006
|
-
port: await listen(port),
|
|
11007
|
-
bumped: i > 0
|
|
11008
|
-
};
|
|
11009
|
-
} catch (err) {
|
|
11010
|
-
lastErr = err;
|
|
11011
|
-
if (!isAddrInUse(err)) throw err;
|
|
11012
|
-
}
|
|
11013
|
-
}
|
|
11014
|
-
throw lastErr ?? /* @__PURE__ */ new Error(`Could not bind to a free port starting at ${options.startPort}`);
|
|
11015
|
-
}
|
|
11016
|
-
/** True if `err` is a Node `EADDRINUSE` error from `server.listen()`. */
|
|
11017
|
-
function isAddrInUse(err) {
|
|
11018
|
-
return typeof err === "object" && err !== null && err.code === "EADDRINUSE";
|
|
11019
|
-
}
|
|
11020
|
-
/**
|
|
11021
|
-
* Run the full dev-server port resolution + holding-server bind sequence.
|
|
11022
|
-
*
|
|
11023
|
-
* Resolves the port from config / env / default, attempts to bind the
|
|
11024
|
-
* holding server (auto-bumping when the port came from the default),
|
|
11025
|
-
* and logs the chosen URL. On a clean failure for an explicit port, it
|
|
11026
|
-
* warns and falls back to the requested port so Vite can surface the
|
|
11027
|
-
* conflict via `strictPort: true`.
|
|
11028
|
-
*
|
|
11029
|
-
* Extracted from `index.ts` so the rootSync `config()` hook stays
|
|
11030
|
-
* focused on plugin assembly.
|
|
11031
|
-
*/
|
|
11032
|
-
async function startDevServerPort(input) {
|
|
11033
|
-
const log = input.log ?? ((msg) => console.log(msg));
|
|
11034
|
-
const warn = input.warn ?? ((msg) => console.warn(msg));
|
|
11035
|
-
const start = resolveStartPort({
|
|
11036
|
-
configPort: input.configPort,
|
|
11037
|
-
envPort: input.envPort,
|
|
11038
|
-
defaultPort: DEFAULT_PORT
|
|
11039
|
-
});
|
|
11040
|
-
try {
|
|
11041
|
-
const result = await bindWithBump(input.listen, {
|
|
11042
|
-
startPort: start.port,
|
|
11043
|
-
autoBump: !start.explicit
|
|
11044
|
-
});
|
|
11045
|
-
if (result.bumped) log(`\n \x1b[33m[timber]\x1b[0m Port ${start.port} in use, using ${result.port}\n`);
|
|
11046
|
-
log(`\n \x1b[2m\u{1FAB5} timber.js dev server starting at\x1b[0m \x1b[36mhttp://localhost:${result.port}\x1b[0m\n`);
|
|
11047
|
-
return {
|
|
11048
|
-
port: result.port,
|
|
11049
|
-
explicit: start.explicit,
|
|
11050
|
-
bound: true
|
|
11051
|
-
};
|
|
11052
|
-
} catch (err) {
|
|
11053
|
-
if (start.explicit && isAddrInUse(err)) warn(`\n \x1b[33m[timber]\x1b[0m Port ${start.port} is already in use. Set PORT (or remove the override) to pick another port.\n`);
|
|
11054
|
-
return {
|
|
11055
|
-
port: start.port,
|
|
11056
|
-
explicit: start.explicit,
|
|
11057
|
-
bound: false
|
|
11058
|
-
};
|
|
11059
|
-
}
|
|
11060
|
-
}
|
|
11061
10960
|
//#endregion
|
|
11062
10961
|
//#region src/index.ts
|
|
11063
10962
|
/**
|
|
@@ -11178,18 +11077,18 @@ function timber(config) {
|
|
|
11178
11077
|
const isMiddlewareMode = Boolean(userConfig.server?.middlewareMode);
|
|
11179
11078
|
const resolvedHost = typeof userConfig.server?.host === "string" ? userConfig.server.host : userConfig.server?.host === true ? void 0 : "localhost";
|
|
11180
11079
|
if (command === "serve" && !isPreview && !isMiddlewareMode) {
|
|
11181
|
-
|
|
11182
|
-
|
|
11183
|
-
|
|
11184
|
-
configPort: typeof userConfig.server?.port === "number" ? userConfig.server.port : void 0,
|
|
11185
|
-
envPort: process.env.PORT,
|
|
11186
|
-
listen: (p) => holdingRef.listen(p, resolvedHost)
|
|
11080
|
+
const start = resolveStartPort({
|
|
11081
|
+
configPort: userConfig.server?.port,
|
|
11082
|
+
envPort: process.env.PORT
|
|
11187
11083
|
});
|
|
11188
|
-
|
|
11189
|
-
|
|
11190
|
-
|
|
11191
|
-
|
|
11192
|
-
|
|
11084
|
+
resolvedDevPort = start.port;
|
|
11085
|
+
resolvedDevPortExplicit = userConfig.server?.strictPort ?? false;
|
|
11086
|
+
if (start.port !== 0) {
|
|
11087
|
+
ctx.holdingServer = createHoldingServer();
|
|
11088
|
+
await ctx.holdingServer.listen(start.port, resolvedHost).catch(() => {
|
|
11089
|
+
ctx.holdingServer = null;
|
|
11090
|
+
});
|
|
11091
|
+
}
|
|
11193
11092
|
} else if (command === "serve" && isPreview) {
|
|
11194
11093
|
const start = resolveStartPort({
|
|
11195
11094
|
configPort: typeof userConfig.preview?.port === "number" ? userConfig.preview.port : typeof userConfig.server?.port === "number" ? userConfig.server.port : void 0,
|