@bgub/fig-server 0.1.0-alpha.2 → 0.1.0-alpha.3

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.
@@ -0,0 +1,26 @@
1
+ //#region src/escaping.ts
2
+ function escapeText(value) {
3
+ return value.replace(/[&<>]/g, (character) => {
4
+ if (character === "&") return "&amp;";
5
+ if (character === "<") return "&lt;";
6
+ return "&gt;";
7
+ });
8
+ }
9
+ function escapeAttribute(value) {
10
+ return value.replace(/[&"<>]/g, (character) => {
11
+ if (character === "&") return "&amp;";
12
+ if (character === "\"") return "&quot;";
13
+ if (character === "<") return "&lt;";
14
+ return "&gt;";
15
+ });
16
+ }
17
+ function escapeScriptText(value) {
18
+ return value.replaceAll("<", "\\u003C").replaceAll("\u2028", "\\u2028").replaceAll("\u2029", "\\u2029");
19
+ }
20
+ function escapeScriptJson(value) {
21
+ return escapeScriptText(JSON.stringify(value));
22
+ }
23
+ //#endregion
24
+ export { escapeText as i, escapeScriptJson as n, escapeScriptText as r, escapeAttribute as t };
25
+
26
+ //# sourceMappingURL=escaping-DAot8sFu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escaping-DAot8sFu.js","names":[],"sources":["../src/escaping.ts"],"sourcesContent":["export function escapeText(value: string): string {\n return value.replace(/[&<>]/g, (character) => {\n if (character === \"&\") return \"&amp;\";\n if (character === \"<\") return \"&lt;\";\n return \"&gt;\";\n });\n}\n\nexport function escapeAttribute(value: string): string {\n return value.replace(/[&\"<>]/g, (character) => {\n if (character === \"&\") return \"&amp;\";\n if (character === '\"') return \"&quot;\";\n if (character === \"<\") return \"&lt;\";\n return \"&gt;\";\n });\n}\n\n// Script elements are raw-text elements: HTML entities are not decoded in\n// their contents, so escape only characters that can terminate the element\n// or executable source.\nexport function escapeScriptText(value: string): string {\n return value\n .replaceAll(\"<\", \"\\\\u003C\")\n .replaceAll(\"\\u2028\", \"\\\\u2028\")\n .replaceAll(\"\\u2029\", \"\\\\u2029\");\n}\n\nexport function escapeScriptJson(value: unknown): string {\n return escapeScriptText(JSON.stringify(value));\n}\n"],"mappings":";AAAA,SAAgB,WAAW,OAAuB;CAChD,OAAO,MAAM,QAAQ,WAAW,cAAc;EAC5C,IAAI,cAAc,KAAK,OAAO;EAC9B,IAAI,cAAc,KAAK,OAAO;EAC9B,OAAO;CACT,CAAC;AACH;AAEA,SAAgB,gBAAgB,OAAuB;CACrD,OAAO,MAAM,QAAQ,YAAY,cAAc;EAC7C,IAAI,cAAc,KAAK,OAAO;EAC9B,IAAI,cAAc,MAAK,OAAO;EAC9B,IAAI,cAAc,KAAK,OAAO;EAC9B,OAAO;CACT,CAAC;AACH;AAKA,SAAgB,iBAAiB,OAAuB;CACtD,OAAO,MACJ,WAAW,KAAK,SAAS,CAAC,CAC1B,WAAW,UAAU,SAAS,CAAC,CAC/B,WAAW,UAAU,SAAS;AACnC;AAEA,SAAgB,iBAAiB,OAAwB;CACvD,OAAO,iBAAiB,KAAK,UAAU,KAAK,CAAC;AAC/C"}
@@ -0,0 +1,2 @@
1
+ import { i as escapeText, n as escapeScriptJson, r as escapeScriptText, t as escapeAttribute } from "./escaping-DAot8sFu.js";
2
+ export { escapeAttribute, escapeScriptJson, escapeScriptText, escapeText };
@@ -0,0 +1,164 @@
1
+ import { t as escapeAttribute } from "./escaping-DAot8sFu.js";
2
+ //#region src/shared.ts
3
+ const STREAMED_METADATA_ATTRIBUTE = "data-fig-streamed-metadata";
4
+ function contextStack(values, context) {
5
+ let stack = values.get(context);
6
+ if (stack === void 0) {
7
+ stack = [];
8
+ values.set(context, stack);
9
+ }
10
+ return stack;
11
+ }
12
+ function withContextValue(values, context, value, callback) {
13
+ const stack = contextStack(values, context);
14
+ stack.push(value);
15
+ try {
16
+ return callback();
17
+ } finally {
18
+ stack.pop();
19
+ }
20
+ }
21
+ function readContextValue(values, context) {
22
+ const stack = values.get(context);
23
+ if (stack !== void 0 && stack.length > 0) return stack[stack.length - 1];
24
+ return context.defaultValue;
25
+ }
26
+ function deferred() {
27
+ let resolve = () => void 0;
28
+ let reject = () => void 0;
29
+ return {
30
+ promise: new Promise((innerResolve, innerReject) => {
31
+ resolve = innerResolve;
32
+ reject = innerReject;
33
+ }),
34
+ reject,
35
+ resolve
36
+ };
37
+ }
38
+ function cloneContextValues(values) {
39
+ const clone = /* @__PURE__ */ new Map();
40
+ for (const [context, stack] of values) clone.set(context, [...stack]);
41
+ return clone;
42
+ }
43
+ const DEFAULT_STREAM_HIGH_WATER_MARK = 65536;
44
+ function streamHighWaterMark(option) {
45
+ return Math.max(1, option ?? DEFAULT_STREAM_HIGH_WATER_MARK);
46
+ }
47
+ function streamFlowBlocked(controller) {
48
+ const desiredSize = controller?.desiredSize;
49
+ return typeof desiredSize === "number" && desiredSize <= 0;
50
+ }
51
+ function resolveInitialState(initialState) {
52
+ return typeof initialState === "function" ? initialState() : initialState;
53
+ }
54
+ function createStaticDispatcher(options) {
55
+ return {
56
+ useState(initialState) {
57
+ const value = resolveInitialState(initialState);
58
+ const setState = () => {
59
+ throw new Error(options.updateError);
60
+ };
61
+ return [value, setState];
62
+ },
63
+ useActionState(_action, initialState) {
64
+ const runner = () => {
65
+ throw new Error(options.updateError);
66
+ };
67
+ return [
68
+ initialState,
69
+ runner,
70
+ false
71
+ ];
72
+ },
73
+ useId() {
74
+ return options.useId();
75
+ },
76
+ useDeferredValue(value, _initialValue, _hasInitialValue) {
77
+ return value;
78
+ },
79
+ useMemo(calculate, _deps) {
80
+ return calculate();
81
+ },
82
+ useTransition() {
83
+ const startTransition = (callback) => void callback(new AbortController().signal);
84
+ return [false, startTransition];
85
+ },
86
+ useReactive(_effect, _deps) {},
87
+ useBeforePaint(_effect, _deps) {},
88
+ useBeforeLayout(_effect, _deps) {},
89
+ useSyncExternalStore(_subscribe, _getSnapshot, getServerSnapshot) {
90
+ if (getServerSnapshot === void 0) throw new Error(options.externalStoreError);
91
+ return getServerSnapshot();
92
+ },
93
+ useStableEvent(_handler) {
94
+ return (..._args) => {
95
+ throw new Error("Stable events cannot be called during server render.");
96
+ };
97
+ },
98
+ readContext(context) {
99
+ return readContextValue(options.contextValues, context);
100
+ },
101
+ readData(resource, args) {
102
+ return options.readData(resource, args);
103
+ },
104
+ preloadData(resource, args) {
105
+ options.preloadData(resource, args);
106
+ },
107
+ readPromise(promise) {
108
+ return options.readPromise(promise);
109
+ }
110
+ };
111
+ }
112
+ function errorMessage(error) {
113
+ return error instanceof Error ? error.message : String(error);
114
+ }
115
+ function componentStack(stack) {
116
+ const frames = [];
117
+ for (let frame = stack; frame !== null; frame = frame.parent) frames.push(` at ${frame.name}`);
118
+ return frames.length === 0 ? "" : `\n${frames.join("\n")}`;
119
+ }
120
+ function nonceAttribute(nonce) {
121
+ return nonce === void 0 ? "" : ` nonce="${escapeAttribute(nonce)}"`;
122
+ }
123
+ //#endregion
124
+ //#region src/image-preloads.ts
125
+ function imagePreloadFromHostProps(type, props, suppressed) {
126
+ if (suppressed || type.toLowerCase() !== "img") return null;
127
+ if (props.loading === "lazy" || props.fetchpriority === "low") return null;
128
+ const src = stringProp(props.src);
129
+ const srcset = stringProp(props.srcset);
130
+ if (props.src != null && typeof props.src !== "string" || props.srcset != null && typeof props.srcset !== "string" || !src && !srcset || isDataUrl(src) || isDataUrl(srcset)) return null;
131
+ return {
132
+ as: "image",
133
+ crossorigin: imageCrossorigin(props.crossorigin),
134
+ fetchpriority: imageFetchpriority(props.fetchpriority),
135
+ href: src || void 0,
136
+ imagesizes: srcset ? stringProp(props.sizes) : void 0,
137
+ imagesrcset: srcset || void 0,
138
+ kind: "preload",
139
+ referrerpolicy: stringProp(props.referrerpolicy),
140
+ type: stringProp(props.type)
141
+ };
142
+ }
143
+ function suppressesImagePreloads(type) {
144
+ const normalizedType = type.toLowerCase();
145
+ return normalizedType === "picture" || normalizedType === "noscript";
146
+ }
147
+ function stringProp(value) {
148
+ return typeof value === "string" ? value : void 0;
149
+ }
150
+ function isDataUrl(value) {
151
+ return value?.slice(0, 5).toLowerCase() === "data:";
152
+ }
153
+ function imageCrossorigin(value) {
154
+ if (typeof value !== "string") return void 0;
155
+ if (value === "anonymous" || value === "use-credentials" || value === "") return value;
156
+ return "";
157
+ }
158
+ function imageFetchpriority(value) {
159
+ return value === "high" || value === "auto" ? value : void 0;
160
+ }
161
+ //#endregion
162
+ export { componentStack as a, errorMessage as c, streamHighWaterMark as d, withContextValue as f, cloneContextValues as i, nonceAttribute as l, suppressesImagePreloads as n, createStaticDispatcher as o, STREAMED_METADATA_ATTRIBUTE as r, deferred as s, imagePreloadFromHostProps as t, streamFlowBlocked as u };
163
+
164
+ //# sourceMappingURL=image-preloads-D3OBEaWp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-preloads-D3OBEaWp.js","names":[],"sources":["../src/shared.ts","../src/image-preloads.ts"],"sourcesContent":["import type {\n ActionStateAction,\n ActionStateRunner,\n DependencyList,\n EffectCallback,\n ExternalStoreSubscribe,\n FigContext,\n StateSetter,\n StartTransition,\n} from \"@bgub/fig\";\nimport type {\n DataResource,\n RenderDispatcher,\n StableEventCallerArgs,\n} from \"@bgub/fig/internal\";\nimport { escapeAttribute } from \"./escaping.ts\";\n\nexport type ContextValues = Map<FigContext<unknown>, unknown[]>;\n\nexport const STREAMED_METADATA_ATTRIBUTE = \"data-fig-streamed-metadata\";\n\nexport interface StackFrame {\n name: string;\n parent: StackFrame | null;\n}\n\ninterface StaticDispatcherOptions {\n contextValues: ContextValues;\n externalStoreError: string;\n preloadData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n ): void;\n readData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n ): TValue;\n readPromise<T>(promise: PromiseLike<T>): T;\n updateError: string;\n useId(): string;\n}\n\nfunction contextStack(\n values: ContextValues,\n context: FigContext<unknown>,\n): unknown[] {\n let stack = values.get(context);\n\n if (stack === undefined) {\n stack = [];\n values.set(context, stack);\n }\n\n return stack;\n}\n\nexport function withContextValue<T>(\n values: ContextValues,\n context: FigContext<unknown>,\n value: unknown,\n callback: () => T,\n): T {\n const stack = contextStack(values, context);\n stack.push(value);\n\n try {\n return callback();\n } finally {\n stack.pop();\n }\n}\n\nfunction readContextValue<T>(values: ContextValues, context: FigContext<T>): T {\n const stack = values.get(context as FigContext<unknown>);\n if (stack !== undefined && stack.length > 0) {\n return stack[stack.length - 1] as T;\n }\n\n return context.defaultValue;\n}\n\nexport interface Deferred<T> {\n promise: Promise<T>;\n reject: (reason: unknown) => void;\n resolve: (value: T) => void;\n}\n\nexport function deferred<T>(): Deferred<T> {\n let resolve: Deferred<T>[\"resolve\"] = () => undefined;\n let reject: Deferred<T>[\"reject\"] = () => undefined;\n const promise = new Promise<T>((innerResolve, innerReject) => {\n resolve = innerResolve;\n reject = innerReject;\n });\n return { promise, reject, resolve };\n}\n\nexport function cloneContextValues(values: ContextValues): ContextValues {\n const clone: ContextValues = new Map();\n for (const [context, stack] of values) clone.set(context, [...stack]);\n return clone;\n}\n\n// Encoded bytes a render result stream's internal queue holds before flushing\n// pauses (resumed by consumer pulls). Shared by the HTML and payload\n// renderers. Large enough that a healthy consumer never blocks a flush; small\n// enough to bound per-connection buffering when the consumer stalls.\n// Rendering itself never pauses — only writing to the stream does.\nconst DEFAULT_STREAM_HIGH_WATER_MARK = 65536;\n\n// 0 would deadlock: desiredSize never goes positive, and read requests alone\n// do not make it so. 1 byte is the honest pure-pull minimum.\nexport function streamHighWaterMark(option: number | undefined): number {\n return Math.max(1, option ?? DEFAULT_STREAM_HIGH_WATER_MARK);\n}\n\n// Blocked means the stream's internal queue is at or past its high-water\n// mark; completed work then waits un-enqueued until the consumer pulls.\n// desiredSize is null on an errored stream — never blocked, because fatal\n// paths close the request before any further writes.\nexport function streamFlowBlocked(\n controller: ReadableStreamDefaultController<Uint8Array> | null,\n): boolean {\n const desiredSize = controller?.desiredSize;\n return typeof desiredSize === \"number\" && desiredSize <= 0;\n}\n\nfunction resolveInitialState<S>(initialState: S | (() => S)): S {\n return typeof initialState === \"function\"\n ? (initialState as () => S)()\n : initialState;\n}\n\nexport function createStaticDispatcher(\n options: StaticDispatcherOptions,\n): RenderDispatcher {\n return {\n useState<S>(initialState: S | (() => S)): [S, StateSetter<S>] {\n const value = resolveInitialState(initialState);\n const setState: StateSetter<typeof value> = () => {\n throw new Error(options.updateError);\n };\n return [value, setState];\n },\n useActionState<S, Args extends unknown[]>(\n _action: ActionStateAction<S, Args>,\n initialState: S,\n ): [S, ActionStateRunner<Args>, boolean] {\n const runner: ActionStateRunner<Args> = () => {\n throw new Error(options.updateError);\n };\n return [initialState, runner, false];\n },\n useId(): string {\n return options.useId();\n },\n useDeferredValue<T>(\n value: T,\n _initialValue: T | undefined,\n _hasInitialValue: boolean,\n ): T {\n return value;\n },\n useMemo<T>(calculate: () => T, _deps: DependencyList): T {\n return calculate();\n },\n useTransition(): [boolean, StartTransition] {\n // Server transitions run synchronously to completion; the signal never\n // aborts (there is no supersede/unmount lifecycle during a request).\n const startTransition: StartTransition = (\n callback: (signal: AbortSignal) => void | PromiseLike<void>,\n ) => void callback(new AbortController().signal);\n return [false, startTransition];\n },\n useReactive(_effect: EffectCallback, _deps?: DependencyList): void {},\n useBeforePaint(_effect: EffectCallback, _deps?: DependencyList): void {},\n useBeforeLayout(_effect: EffectCallback, _deps?: DependencyList): void {},\n useSyncExternalStore<T>(\n _subscribe: ExternalStoreSubscribe,\n _getSnapshot: () => T,\n getServerSnapshot?: () => T,\n ): T {\n if (getServerSnapshot === undefined) {\n throw new Error(options.externalStoreError);\n }\n\n return getServerSnapshot();\n },\n useStableEvent<Args extends unknown[], Result>(\n _handler: (...args: Args) => Result,\n ): (...args: StableEventCallerArgs<Args>) => Result {\n return (..._args: StableEventCallerArgs<Args>): Result => {\n throw new Error(\"Stable events cannot be called during server render.\");\n };\n },\n readContext<T>(context: FigContext<T>): T {\n return readContextValue(options.contextValues, context);\n },\n readData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n ): TValue {\n return options.readData(resource, args);\n },\n preloadData<TArgs extends unknown[], TValue>(\n resource: DataResource<TArgs, TValue>,\n args: TArgs,\n ): void {\n options.preloadData(resource, args);\n },\n readPromise<T>(promise: PromiseLike<T>): T {\n return options.readPromise(promise);\n },\n };\n}\n\nexport function errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nexport function componentStack(stack: StackFrame | null): string {\n const frames: string[] = [];\n for (let frame = stack; frame !== null; frame = frame.parent) {\n frames.push(` at ${frame.name}`);\n }\n return frames.length === 0 ? \"\" : `\\n${frames.join(\"\\n\")}`;\n}\n\nexport function nonceAttribute(nonce: string | undefined): string {\n return nonce === undefined ? \"\" : ` nonce=\"${escapeAttribute(nonce)}\"`;\n}\n","import type { PreloadResource, Props } from \"@bgub/fig\";\n\nexport function imagePreloadFromHostProps(\n type: string,\n props: Props,\n suppressed: boolean,\n): PreloadResource | null {\n if (suppressed || type.toLowerCase() !== \"img\") return null;\n if (props.loading === \"lazy\" || props.fetchpriority === \"low\") return null;\n\n const src = stringProp(props.src);\n const srcset = stringProp(props.srcset);\n if (\n (props.src != null && typeof props.src !== \"string\") ||\n (props.srcset != null && typeof props.srcset !== \"string\") ||\n (!src && !srcset) ||\n isDataUrl(src) ||\n isDataUrl(srcset)\n ) {\n return null;\n }\n\n return {\n as: \"image\",\n crossorigin: imageCrossorigin(props.crossorigin),\n fetchpriority: imageFetchpriority(props.fetchpriority),\n href: src || undefined,\n imagesizes: srcset ? stringProp(props.sizes) : undefined,\n imagesrcset: srcset || undefined,\n kind: \"preload\",\n referrerpolicy: stringProp(props.referrerpolicy),\n type: stringProp(props.type),\n };\n}\n\nexport function suppressesImagePreloads(type: string): boolean {\n const normalizedType = type.toLowerCase();\n return normalizedType === \"picture\" || normalizedType === \"noscript\";\n}\n\nfunction stringProp(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction isDataUrl(value: string | undefined): boolean {\n return value?.slice(0, 5).toLowerCase() === \"data:\";\n}\n\nfunction imageCrossorigin(value: unknown): PreloadResource[\"crossorigin\"] {\n if (typeof value !== \"string\") return undefined;\n if (value === \"anonymous\" || value === \"use-credentials\" || value === \"\") {\n return value;\n }\n return \"\";\n}\n\nfunction imageFetchpriority(value: unknown): PreloadResource[\"fetchpriority\"] {\n return value === \"high\" || value === \"auto\" ? value : undefined;\n}\n"],"mappings":"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"}