@bgub/fig-tanstack-start 0.0.0-tegami-trusted-publish-setup → 0.1.0-alpha.2

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 (42) hide show
  1. package/CHANGELOG.md +225 -0
  2. package/LICENSE +21 -0
  3. package/README.md +280 -3
  4. package/dist/client-B2okTbp3.js +29 -0
  5. package/dist/client-B2okTbp3.js.map +1 -0
  6. package/dist/client.d.ts +13 -0
  7. package/dist/client.js +2 -0
  8. package/dist/data.d.ts +14 -0
  9. package/dist/data.js +34 -0
  10. package/dist/data.js.map +1 -0
  11. package/dist/default-entry/client.d.ts +1 -0
  12. package/dist/default-entry/client.js +7 -0
  13. package/dist/default-entry/client.js.map +1 -0
  14. package/dist/default-entry/server.d.ts +4 -0
  15. package/dist/default-entry/server.js +6 -0
  16. package/dist/default-entry/server.js.map +1 -0
  17. package/dist/default-entry/start.d.ts +4 -0
  18. package/dist/default-entry/start.js +6 -0
  19. package/dist/default-entry/start.js.map +1 -0
  20. package/dist/payload-assets-eHfSAMbN.js +14 -0
  21. package/dist/payload-assets-eHfSAMbN.js.map +1 -0
  22. package/dist/payload-internal-CZhfVhwH.js +168 -0
  23. package/dist/payload-internal-CZhfVhwH.js.map +1 -0
  24. package/dist/payload.d.ts +19 -0
  25. package/dist/payload.js +38 -0
  26. package/dist/payload.js.map +1 -0
  27. package/dist/plugin/vite.d.ts +6 -0
  28. package/dist/plugin/vite.js +857 -0
  29. package/dist/plugin/vite.js.map +1 -0
  30. package/dist/server.d.ts +20 -0
  31. package/dist/server.js +111 -0
  32. package/dist/server.js.map +1 -0
  33. package/dist/start-context-DZ2gsb5m.js +12 -0
  34. package/dist/start-context-DZ2gsb5m.js.map +1 -0
  35. package/dist/storage-context.d.ts +9 -0
  36. package/dist/storage-context.js +21 -0
  37. package/dist/storage-context.js.map +1 -0
  38. package/dist/store-CibAGqiI.js +13 -0
  39. package/dist/store-CibAGqiI.js.map +1 -0
  40. package/dist/transport-DKcSG44e.js +33 -0
  41. package/dist/transport-DKcSG44e.js.map +1 -0
  42. package/package.json +90 -3
@@ -0,0 +1,6 @@
1
+ //#region src/default-entry/server.ts
2
+ const figTanStackStartDefaultServerEntry = true;
3
+ //#endregion
4
+ export { figTanStackStartDefaultServerEntry };
5
+
6
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","names":[],"sources":["../../src/default-entry/server.ts"],"sourcesContent":["export const figTanStackStartDefaultServerEntry = true;\n"],"mappings":";AAAA,MAAa,qCAAqC"}
@@ -0,0 +1,4 @@
1
+ //#region src/default-entry/start.d.ts
2
+ declare const startInstance: undefined;
3
+ //#endregion
4
+ export { startInstance };
@@ -0,0 +1,6 @@
1
+ //#region src/default-entry/start.ts
2
+ const startInstance = void 0;
3
+ //#endregion
4
+ export { startInstance };
5
+
6
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","names":[],"sources":["../../src/default-entry/start.ts"],"sourcesContent":["export const startInstance = undefined;\n"],"mappings":";AAAA,MAAa,gBAAgB,KAAA"}
@@ -0,0 +1,14 @@
1
+ import { stylesheet } from "@bgub/fig";
2
+ //#region src/payload-assets.ts
3
+ const payloadStylesheetsSymbolKey = "fig.tanstack-start.payload-stylesheets";
4
+ const payloadStylesheetsSymbol = Symbol.for(payloadStylesheetsSymbolKey);
5
+ function compiledPayloadAssets(type) {
6
+ if (typeof type !== "function") return void 0;
7
+ const hrefs = Reflect.get(type, payloadStylesheetsSymbol);
8
+ if (!Array.isArray(hrefs) || !hrefs.every((href) => typeof href === "string")) return;
9
+ return hrefs.map((href) => stylesheet(href, { precedence: "payload" }));
10
+ }
11
+ //#endregion
12
+ export { payloadStylesheetsSymbolKey as n, compiledPayloadAssets as t };
13
+
14
+ //# sourceMappingURL=payload-assets-eHfSAMbN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-assets-eHfSAMbN.js","names":[],"sources":["../src/payload-assets.ts"],"sourcesContent":["import { type FigAssetResourceList, stylesheet } from \"@bgub/fig\";\n\nexport const payloadStylesheetsSymbolKey =\n \"fig.tanstack-start.payload-stylesheets\";\n\nconst payloadStylesheetsSymbol = Symbol.for(payloadStylesheetsSymbolKey);\n\nexport function compiledPayloadAssets(\n type: unknown,\n): FigAssetResourceList | undefined {\n if (typeof type !== \"function\") return undefined;\n const hrefs = Reflect.get(type, payloadStylesheetsSymbol);\n if (\n !Array.isArray(hrefs) ||\n !hrefs.every((href): href is string => typeof href === \"string\")\n ) {\n return undefined;\n }\n return hrefs.map((href) => stylesheet(href, { precedence: \"payload\" }));\n}\n"],"mappings":";;AAEA,MAAa,8BACX;AAEF,MAAM,2BAA2B,OAAO,IAAI,2BAA2B;AAEvE,SAAgB,sBACd,MACkC;CAClC,IAAI,OAAO,SAAS,YAAY,OAAO,KAAA;CACvC,MAAM,QAAQ,QAAQ,IAAI,MAAM,wBAAwB;CACxD,IACE,CAAC,MAAM,QAAQ,KAAK,KACpB,CAAC,MAAM,OAAO,SAAyB,OAAO,SAAS,QAAQ,GAE/D;CAEF,OAAO,MAAM,KAAK,SAAS,WAAW,MAAM,EAAE,YAAY,UAAU,CAAC,CAAC;AACxE"}
@@ -0,0 +1,168 @@
1
+ import { t as getStartContext } from "./start-context-DZ2gsb5m.js";
2
+ import "@bgub/fig";
3
+ import { HYDRATION_SKIP_ATTRIBUTE, jsonPayloadCodec, normalizeDataResourceKey } from "@bgub/fig/internal";
4
+ import { escapeAttribute, escapeScriptText } from "@bgub/fig-server/html";
5
+ //#region src/document-markers.ts
6
+ const payloadTransportMarkerId = "__fig_tanstack_payloads__";
7
+ const payloadTransportMarker = `<template id="${payloadTransportMarkerId}"`;
8
+ //#endregion
9
+ //#region src/payload-internal.ts
10
+ const payloadKeyAttribute = "data-fig-tanstack-payload-key";
11
+ const requestPayloads = /* @__PURE__ */ new WeakMap();
12
+ const consumedPayloads = /* @__PURE__ */ new WeakSet();
13
+ function initialPayloadResponse(key) {
14
+ if (typeof document === "undefined") return void 0;
15
+ const canonicalKey = normalizeDataResourceKey(key);
16
+ const script = Array.from(document.querySelectorAll(`script[${payloadKeyAttribute}]`)).find((candidate) => candidate.getAttribute(payloadKeyAttribute) === canonicalKey);
17
+ if (script === void 0 || consumedPayloads.has(script)) return void 0;
18
+ consumedPayloads.add(script);
19
+ return new Response(script.textContent ?? "", { headers: { "content-type": script.getAttribute("type") ?? jsonPayloadCodec.contentType } });
20
+ }
21
+ function registerPayloadResponse(key, response) {
22
+ if (!response.ok || response.body === null) return response;
23
+ const payloads = currentRequestPayloads(true);
24
+ if (payloads === void 0) return response;
25
+ const canonicalKey = normalizeDataResourceKey(key);
26
+ if (payloads.has(canonicalKey)) return response;
27
+ const [decodeStream, documentStream] = response.body.tee();
28
+ payloads.set(canonicalKey, {
29
+ contentType: response.headers.get("content-type") ?? jsonPayloadCodec.contentType,
30
+ stream: documentStream
31
+ });
32
+ return new Response(decodeStream, {
33
+ headers: response.headers,
34
+ status: response.status,
35
+ statusText: response.statusText
36
+ });
37
+ }
38
+ function serializableStartData(entries) {
39
+ const payloads = currentRequestPayloads(false);
40
+ if (payloads === void 0 || payloads.size === 0) return entries;
41
+ return entries.filter((entry) => !payloads.has(normalizeDataResourceKey(entry.key)));
42
+ }
43
+ function injectPayloadDocument(html, nonce, ready = Promise.resolve()) {
44
+ const requestPayloads = currentRequestPayloads(true);
45
+ if (requestPayloads === void 0) return html;
46
+ const registeredPayloads = requestPayloads;
47
+ const collectors = /* @__PURE__ */ new Map();
48
+ const decoder = new TextDecoder();
49
+ const encoder = new TextEncoder();
50
+ let buffer = "";
51
+ let injected = false;
52
+ let htmlReader = null;
53
+ function collectRegisteredPayloads() {
54
+ for (const [key, entry] of registeredPayloads) {
55
+ if (collectors.has(key)) continue;
56
+ const collector = collectPayload(key, entry);
57
+ collectors.set(key, collector);
58
+ collector.result.catch(() => void 0);
59
+ }
60
+ }
61
+ async function payloads() {
62
+ await ready;
63
+ collectRegisteredPayloads();
64
+ return Promise.all([...collectors.values()].map((collector) => collector.result));
65
+ }
66
+ collectRegisteredPayloads();
67
+ function enqueue(controller, value) {
68
+ if (value.length === 0) return false;
69
+ controller.enqueue(encoder.encode(value));
70
+ return true;
71
+ }
72
+ async function flush(controller, final) {
73
+ if (injected) {
74
+ const emitted = enqueue(controller, buffer);
75
+ buffer = "";
76
+ return emitted;
77
+ }
78
+ const marker = buffer.indexOf(payloadTransportMarker);
79
+ if (marker !== -1) {
80
+ let emitted = enqueue(controller, buffer.slice(0, marker));
81
+ buffer = buffer.slice(marker);
82
+ emitted = enqueue(controller, payloadDocumentScripts(await payloads(), nonce)) || emitted;
83
+ injected = true;
84
+ emitted = enqueue(controller, buffer) || emitted;
85
+ buffer = "";
86
+ return emitted;
87
+ }
88
+ if (final) {
89
+ if ((await payloads()).length > 0) throw new Error("Initial TanStack Start Payload responses require <StartScripts /> in the root document.");
90
+ const emitted = enqueue(controller, buffer);
91
+ buffer = "";
92
+ injected = true;
93
+ return emitted;
94
+ }
95
+ const length = Math.max(0, buffer.length - payloadTransportMarker.length);
96
+ const emitted = enqueue(controller, buffer.slice(0, length));
97
+ buffer = buffer.slice(length);
98
+ return emitted;
99
+ }
100
+ return new ReadableStream({
101
+ start() {
102
+ htmlReader = html.getReader();
103
+ },
104
+ async pull(controller) {
105
+ if (htmlReader === null) return;
106
+ for (;;) {
107
+ const result = await htmlReader.read();
108
+ if (result.done) {
109
+ buffer += decoder.decode();
110
+ await flush(controller, true);
111
+ controller.close();
112
+ return;
113
+ }
114
+ buffer += decoder.decode(result.value, { stream: true });
115
+ if (await flush(controller, false)) return;
116
+ }
117
+ },
118
+ cancel(reason) {
119
+ htmlReader?.cancel(reason).catch(() => void 0);
120
+ collectRegisteredPayloads();
121
+ for (const collector of collectors.values()) collector.cancel(reason);
122
+ }
123
+ });
124
+ }
125
+ function collectPayload(key, entry) {
126
+ let reader = null;
127
+ return {
128
+ cancel(reason) {
129
+ reader?.cancel(reason).catch(() => void 0);
130
+ },
131
+ result: (async () => {
132
+ reader = entry.stream.getReader();
133
+ const decoder = new TextDecoder();
134
+ const chunks = [];
135
+ for (;;) {
136
+ const next = await reader.read();
137
+ chunks.push(decoder.decode(next.value, { stream: !next.done }));
138
+ if (next.done) return {
139
+ contentType: entry.contentType,
140
+ key,
141
+ payload: chunks.join("")
142
+ };
143
+ }
144
+ })()
145
+ };
146
+ }
147
+ function currentRequestPayloads(create) {
148
+ const context = getStartContext({ throwIfNotFound: false });
149
+ if (typeof context !== "object" && typeof context !== "function" || context === null) return;
150
+ let payloads = requestPayloads.get(context);
151
+ if (payloads === void 0 && create) {
152
+ payloads = /* @__PURE__ */ new Map();
153
+ requestPayloads.set(context, payloads);
154
+ }
155
+ return payloads;
156
+ }
157
+ function payloadDocumentScripts(entries, nonce) {
158
+ const nonceAttribute = scriptNonceAttribute(nonce);
159
+ return entries.map((entry) => `<script type="${escapeAttribute(entry.contentType)}" ${payloadKeyAttribute}="${escapeAttribute(entry.key)}" ${HYDRATION_SKIP_ATTRIBUTE}=""${nonceAttribute}>${escapeScriptText(entry.payload)}<\/script>`).join("");
160
+ }
161
+ function scriptNonceAttribute(nonce) {
162
+ if (nonce === void 0) return "";
163
+ return ` nonce="${escapeAttribute(nonce)}"`;
164
+ }
165
+ //#endregion
166
+ export { payloadTransportMarkerId as a, serializableStartData as i, injectPayloadDocument as n, registerPayloadResponse as r, initialPayloadResponse as t };
167
+
168
+ //# sourceMappingURL=payload-internal-CZhfVhwH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-internal-CZhfVhwH.js","names":[],"sources":["../src/document-markers.ts","../src/payload-internal.ts"],"sourcesContent":["export const payloadTransportMarkerId = \"__fig_tanstack_payloads__\";\n\nexport const payloadTransportMarker = `<template id=\"${payloadTransportMarkerId}\"`;\n","import { type DataResourceKey, type FigDataHydrationEntry } from \"@bgub/fig\";\nimport {\n HYDRATION_SKIP_ATTRIBUTE,\n jsonPayloadCodec,\n normalizeDataResourceKey,\n} from \"@bgub/fig/internal\";\nimport { escapeAttribute, escapeScriptText } from \"@bgub/fig-server/html\";\nimport { payloadTransportMarker } from \"./document-markers.ts\";\nimport { getStartContext } from \"./start-context.ts\";\n\nconst payloadKeyAttribute = \"data-fig-tanstack-payload-key\";\n\ninterface PayloadDocumentEntry {\n contentType: string;\n key: string;\n payload: string;\n}\n\ninterface RegisteredPayloadStream {\n contentType: string;\n stream: ReadableStream<Uint8Array>;\n}\n\ninterface PayloadCollector {\n cancel(reason: unknown): void;\n result: Promise<PayloadDocumentEntry>;\n}\n\nconst requestPayloads = new WeakMap<\n object,\n Map<string, RegisteredPayloadStream>\n>();\nconst consumedPayloads = new WeakSet<Element>();\n\nexport function initialPayloadResponse(\n key: DataResourceKey,\n): Response | undefined {\n if (typeof document === \"undefined\") return undefined;\n const canonicalKey = normalizeDataResourceKey(key);\n const script = Array.from(\n document.querySelectorAll(`script[${payloadKeyAttribute}]`),\n ).find(\n (candidate) => candidate.getAttribute(payloadKeyAttribute) === canonicalKey,\n );\n if (script === undefined || consumedPayloads.has(script)) return undefined;\n consumedPayloads.add(script);\n\n return new Response(script.textContent ?? \"\", {\n headers: {\n \"content-type\":\n script.getAttribute(\"type\") ?? jsonPayloadCodec.contentType,\n },\n });\n}\n\nexport function registerPayloadResponse(\n key: DataResourceKey,\n response: Response,\n): Response {\n if (!response.ok || response.body === null) return response;\n const payloads = currentRequestPayloads(true);\n if (payloads === undefined) return response;\n\n const canonicalKey = normalizeDataResourceKey(key);\n if (payloads.has(canonicalKey)) return response;\n\n const [decodeStream, documentStream] = response.body.tee();\n payloads.set(canonicalKey, {\n contentType:\n response.headers.get(\"content-type\") ?? jsonPayloadCodec.contentType,\n stream: documentStream,\n });\n\n return new Response(decodeStream, {\n headers: response.headers,\n status: response.status,\n statusText: response.statusText,\n });\n}\n\nexport function serializableStartData(\n entries: readonly FigDataHydrationEntry[],\n): readonly FigDataHydrationEntry[] {\n const payloads = currentRequestPayloads(false);\n if (payloads === undefined || payloads.size === 0) return entries;\n return entries.filter(\n (entry) => !payloads.has(normalizeDataResourceKey(entry.key)),\n );\n}\n\nexport function injectPayloadDocument(\n html: ReadableStream<Uint8Array>,\n nonce: string | undefined,\n ready: PromiseLike<void> = Promise.resolve(),\n): ReadableStream<Uint8Array> {\n const requestPayloads = currentRequestPayloads(true);\n if (requestPayloads === undefined) return html;\n const registeredPayloads = requestPayloads;\n const collectors = new Map<string, PayloadCollector>();\n const decoder = new TextDecoder();\n const encoder = new TextEncoder();\n let buffer = \"\";\n let injected = false;\n let htmlReader: ReadableStreamDefaultReader<Uint8Array> | null = null;\n\n function collectRegisteredPayloads(): void {\n for (const [key, entry] of registeredPayloads) {\n if (collectors.has(key)) continue;\n const collector = collectPayload(key, entry);\n collectors.set(key, collector);\n void collector.result.catch(() => undefined);\n }\n }\n\n async function payloads(): Promise<PayloadDocumentEntry[]> {\n await ready;\n collectRegisteredPayloads();\n return Promise.all(\n [...collectors.values()].map((collector) => collector.result),\n );\n }\n\n collectRegisteredPayloads();\n\n function enqueue(\n controller: ReadableStreamDefaultController<Uint8Array>,\n value: string,\n ): boolean {\n if (value.length === 0) return false;\n controller.enqueue(encoder.encode(value));\n return true;\n }\n\n async function flush(\n controller: ReadableStreamDefaultController<Uint8Array>,\n final: boolean,\n ): Promise<boolean> {\n if (injected) {\n const emitted = enqueue(controller, buffer);\n buffer = \"\";\n return emitted;\n }\n\n const marker = buffer.indexOf(payloadTransportMarker);\n if (marker !== -1) {\n let emitted = enqueue(controller, buffer.slice(0, marker));\n buffer = buffer.slice(marker);\n emitted =\n enqueue(controller, payloadDocumentScripts(await payloads(), nonce)) ||\n emitted;\n injected = true;\n emitted = enqueue(controller, buffer) || emitted;\n buffer = \"\";\n return emitted;\n }\n\n if (final) {\n const entries = await payloads();\n if (entries.length > 0) {\n throw new Error(\n \"Initial TanStack Start Payload responses require <StartScripts /> in the root document.\",\n );\n }\n const emitted = enqueue(controller, buffer);\n buffer = \"\";\n injected = true;\n return emitted;\n }\n\n const length = Math.max(0, buffer.length - payloadTransportMarker.length);\n const emitted = enqueue(controller, buffer.slice(0, length));\n buffer = buffer.slice(length);\n return emitted;\n }\n\n return new ReadableStream<Uint8Array>({\n start() {\n htmlReader = html.getReader();\n },\n async pull(controller) {\n if (htmlReader === null) return;\n for (;;) {\n const result = await htmlReader.read();\n if (result.done) {\n buffer += decoder.decode();\n await flush(controller, true);\n controller.close();\n return;\n }\n buffer += decoder.decode(result.value, { stream: true });\n if (await flush(controller, false)) return;\n }\n },\n cancel(reason) {\n void htmlReader?.cancel(reason).catch(() => undefined);\n collectRegisteredPayloads();\n for (const collector of collectors.values()) collector.cancel(reason);\n },\n });\n}\n\nfunction collectPayload(\n key: string,\n entry: RegisteredPayloadStream,\n): PayloadCollector {\n let reader: ReadableStreamDefaultReader<Uint8Array> | null = null;\n const result = (async (): Promise<PayloadDocumentEntry> => {\n reader = entry.stream.getReader();\n const decoder = new TextDecoder();\n const chunks: string[] = [];\n for (;;) {\n const next = await reader.read();\n chunks.push(decoder.decode(next.value, { stream: !next.done }));\n if (next.done) {\n return {\n contentType: entry.contentType,\n key,\n payload: chunks.join(\"\"),\n };\n }\n }\n })();\n\n return {\n cancel(reason) {\n void reader?.cancel(reason).catch(() => undefined);\n },\n result,\n };\n}\n\nfunction currentRequestPayloads(\n create: boolean,\n): Map<string, RegisteredPayloadStream> | undefined {\n const context = getStartContext({ throwIfNotFound: false });\n if (\n (typeof context !== \"object\" && typeof context !== \"function\") ||\n context === null\n ) {\n return undefined;\n }\n\n let payloads = requestPayloads.get(context);\n if (payloads === undefined && create) {\n payloads = new Map();\n requestPayloads.set(context, payloads);\n }\n return payloads;\n}\n\nfunction payloadDocumentScripts(\n entries: readonly PayloadDocumentEntry[],\n nonce: string | undefined,\n): string {\n const nonceAttribute = scriptNonceAttribute(nonce);\n return entries\n .map(\n (entry) =>\n `<script type=\"${escapeAttribute(entry.contentType)}\" ${payloadKeyAttribute}=\"${escapeAttribute(entry.key)}\" ${HYDRATION_SKIP_ATTRIBUTE}=\"\"${nonceAttribute}>${escapeScriptText(entry.payload)}</script>`,\n )\n .join(\"\");\n}\n\nfunction scriptNonceAttribute(nonce: string | undefined): string {\n if (nonce === undefined) return \"\";\n return ` nonce=\"${escapeAttribute(nonce)}\"`;\n}\n"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { ComponentProps, ComponentType, FigNode } from "@bgub/fig";
2
+ import { PayloadComponentLoader } from "@bgub/fig-dom";
3
+ //#region src/payload.d.ts
4
+ type IsomorphicProps<TComponent extends ComponentType<any>> = Omit<ComponentProps<TComponent>, "component"> & {
5
+ component: TComponent;
6
+ };
7
+ /**
8
+ * Marks one component use as an SSR-capable browser hydration boundary.
9
+ * The TanStack Start compiler replaces `component` with a generated client
10
+ * reference; application code keeps an ordinary static component import.
11
+ */
12
+ declare function Isomorphic<TComponent extends ComponentType<any>>(props: IsomorphicProps<TComponent>): FigNode;
13
+ /**
14
+ * Compiles a server component into a TanStack server function that returns a
15
+ * Payload stream. Pass the result to createPayloadComponent from @bgub/fig-dom.
16
+ */
17
+ declare function serverPayload<TProps extends object>(render: (props: TProps) => FigNode): PayloadComponentLoader<TProps>;
18
+ //#endregion
19
+ export { Isomorphic, IsomorphicProps, serverPayload };
@@ -0,0 +1,38 @@
1
+ import { r as registerPayloadResponse, t as initialPayloadResponse } from "./payload-internal-CZhfVhwH.js";
2
+ import { createElement } from "@bgub/fig";
3
+ import { isClientReference } from "@bgub/fig/internal";
4
+ import { resolveIsomorphicReference } from "virtual:fig-tanstack-start/payload-manifest";
5
+ //#region src/payload.ts
6
+ const compiledServerPayloadMarker = Symbol.for("fig.tanstack-start.compiled-server-payload");
7
+ /**
8
+ * Marks one component use as an SSR-capable browser hydration boundary.
9
+ * The TanStack Start compiler replaces `component` with a generated client
10
+ * reference; application code keeps an ordinary static component import.
11
+ */
12
+ function Isomorphic(props) {
13
+ const { component, ...componentProps } = props;
14
+ if (!isClientReference(component)) throw new Error("Isomorphic must receive a statically imported component through the Fig TanStack Start compiler.");
15
+ return createElement(component, componentProps);
16
+ }
17
+ /**
18
+ * Compiles a server component into a TanStack server function that returns a
19
+ * Payload stream. Pass the result to createPayloadComponent from @bgub/fig-dom.
20
+ */
21
+ function serverPayload(render) {
22
+ const request = render;
23
+ if (request[compiledServerPayloadMarker] !== true) throw new Error("serverPayload must be compiled by the Fig TanStack Start Vite plugin.");
24
+ const load = async (props, context) => {
25
+ const initial = initialPayloadResponse(context.key);
26
+ if (initial !== void 0) return initial;
27
+ const response = await request(props, context);
28
+ if (!(response instanceof Response)) throw new Error("The compiled serverPayload request did not return a Response.");
29
+ return registerPayloadResponse(context.key, response);
30
+ };
31
+ load.resolveClientReference = resolveIsomorphicReference;
32
+ load.retainAssets = typeof document === "undefined";
33
+ return load;
34
+ }
35
+ //#endregion
36
+ export { Isomorphic, serverPayload };
37
+
38
+ //# sourceMappingURL=payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.js","names":[],"sources":["../src/payload.ts"],"sourcesContent":["import {\n createElement,\n type ComponentProps,\n type ComponentType,\n type FigNode,\n} from \"@bgub/fig\";\nimport { isClientReference } from \"@bgub/fig/internal\";\nimport type { PayloadComponentLoader } from \"@bgub/fig-dom\";\nimport { resolveIsomorphicReference } from \"virtual:fig-tanstack-start/payload-manifest\";\nimport {\n initialPayloadResponse,\n registerPayloadResponse,\n} from \"./payload-internal.ts\";\n\nconst compiledServerPayloadMarker = Symbol.for(\n \"fig.tanstack-start.compiled-server-payload\",\n);\n\nexport type IsomorphicProps<TComponent extends ComponentType<any>> = Omit<\n ComponentProps<TComponent>,\n \"component\"\n> & {\n component: TComponent;\n};\n\n/**\n * Marks one component use as an SSR-capable browser hydration boundary.\n * The TanStack Start compiler replaces `component` with a generated client\n * reference; application code keeps an ordinary static component import.\n */\nexport function Isomorphic<TComponent extends ComponentType<any>>(\n props: IsomorphicProps<TComponent>,\n): FigNode {\n const { component, ...componentProps } = props;\n if (!isClientReference(component)) {\n throw new Error(\n \"Isomorphic must receive a statically imported component through the Fig TanStack Start compiler.\",\n );\n }\n return createElement(component, componentProps);\n}\n\n/**\n * Compiles a server component into a TanStack server function that returns a\n * Payload stream. Pass the result to createPayloadComponent from @bgub/fig-dom.\n */\nexport function serverPayload<TProps extends object>(\n render: (props: TProps) => FigNode,\n): PayloadComponentLoader<TProps> {\n // The compiler replaces `render` with the generated server-function proxy.\n const request = render as unknown as PayloadComponentLoader<TProps> & {\n [compiledServerPayloadMarker]?: true;\n };\n if (request[compiledServerPayloadMarker] !== true) {\n throw new Error(\n \"serverPayload must be compiled by the Fig TanStack Start Vite plugin.\",\n );\n }\n const load: PayloadComponentLoader<TProps> = async (props, context) => {\n const initial = initialPayloadResponse(context.key);\n if (initial !== undefined) return initial;\n\n const response = await request(props, context);\n if (!(response instanceof Response)) {\n throw new Error(\n \"The compiled serverPayload request did not return a Response.\",\n );\n }\n return registerPayloadResponse(context.key, response);\n };\n load.resolveClientReference = resolveIsomorphicReference;\n load.retainAssets = typeof document === \"undefined\";\n return load;\n}\n"],"mappings":";;;;;AAcA,MAAM,8BAA8B,OAAO,IACzC,4CACF;;;;;;AAcA,SAAgB,WACd,OACS;CACT,MAAM,EAAE,WAAW,GAAG,mBAAmB;CACzC,IAAI,CAAC,kBAAkB,SAAS,GAC9B,MAAM,IAAI,MACR,kGACF;CAEF,OAAO,cAAc,WAAW,cAAc;AAChD;;;;;AAMA,SAAgB,cACd,QACgC;CAEhC,MAAM,UAAU;CAGhB,IAAI,QAAQ,iCAAiC,MAC3C,MAAM,IAAI,MACR,uEACF;CAEF,MAAM,OAAuC,OAAO,OAAO,YAAY;EACrE,MAAM,UAAU,uBAAuB,QAAQ,GAAG;EAClD,IAAI,YAAY,KAAA,GAAW,OAAO;EAElC,MAAM,WAAW,MAAM,QAAQ,OAAO,OAAO;EAC7C,IAAI,EAAE,oBAAoB,WACxB,MAAM,IAAI,MACR,+DACF;EAEF,OAAO,wBAAwB,QAAQ,KAAK,QAAQ;CACtD;CACA,KAAK,yBAAyB;CAC9B,KAAK,eAAe,OAAO,aAAa;CACxC,OAAO;AACT"}
@@ -0,0 +1,6 @@
1
+ import { TanStackStartViteInputConfig } from "@tanstack/start-plugin-core/vite";
2
+ import { PluginOption } from "vite";
3
+ //#region src/plugin/vite.d.ts
4
+ declare function tanstackStart(options?: TanStackStartViteInputConfig): PluginOption[];
5
+ //#endregion
6
+ export { tanstackStart };