@vidact/runtime 0.2.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/LICENSE +21 -0
- package/README.md +50 -0
- package/dist/actions.d.ts +37 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +295 -0
- package/dist/actions.js.map +1 -0
- package/dist/async.d.ts +22 -0
- package/dist/async.d.ts.map +1 -0
- package/dist/async.js +24 -0
- package/dist/async.js.map +1 -0
- package/dist/compiled/async-resource.d.ts +7 -0
- package/dist/compiled/async-resource.d.ts.map +1 -0
- package/dist/compiled/async-resource.js +89 -0
- package/dist/compiled/async-resource.js.map +1 -0
- package/dist/compiled/core.d.ts +183 -0
- package/dist/compiled/core.d.ts.map +1 -0
- package/dist/compiled/core.js +3170 -0
- package/dist/compiled/core.js.map +1 -0
- package/dist/compiled/types.d.ts +63 -0
- package/dist/compiled/types.d.ts.map +1 -0
- package/dist/compiled/types.js +7 -0
- package/dist/compiled/types.js.map +1 -0
- package/dist/compiled/validation.d.ts +2 -0
- package/dist/compiled/validation.d.ts.map +1 -0
- package/dist/compiled/validation.js +22 -0
- package/dist/compiled/validation.js.map +1 -0
- package/dist/component-spread.d.ts +6 -0
- package/dist/component-spread.d.ts.map +1 -0
- package/dist/component-spread.js +71 -0
- package/dist/component-spread.js.map +1 -0
- package/dist/concurrent.d.ts +26 -0
- package/dist/concurrent.d.ts.map +1 -0
- package/dist/concurrent.js +244 -0
- package/dist/concurrent.js.map +1 -0
- package/dist/direct-dom.d.ts +14 -0
- package/dist/direct-dom.d.ts.map +1 -0
- package/dist/direct-dom.js +239 -0
- package/dist/direct-dom.js.map +1 -0
- package/dist/dom/attributes.d.ts +7 -0
- package/dist/dom/attributes.d.ts.map +1 -0
- package/dist/dom/attributes.js +52 -0
- package/dist/dom/attributes.js.map +1 -0
- package/dist/dom/events.d.ts +3 -0
- package/dist/dom/events.d.ts.map +1 -0
- package/dist/dom/events.js +78 -0
- package/dist/dom/events.js.map +1 -0
- package/dist/dom/forms.d.ts +7 -0
- package/dist/dom/forms.d.ts.map +1 -0
- package/dist/dom/forms.js +217 -0
- package/dist/dom/forms.js.map +1 -0
- package/dist/dom/intrinsic.d.ts +19 -0
- package/dist/dom/intrinsic.d.ts.map +1 -0
- package/dist/dom/intrinsic.js +53 -0
- package/dist/dom/intrinsic.js.map +1 -0
- package/dist/dom/namespace.d.ts +3 -0
- package/dist/dom/namespace.d.ts.map +1 -0
- package/dist/dom/namespace.js +34 -0
- package/dist/dom/namespace.js.map +1 -0
- package/dist/dom/namespaces.d.ts +9 -0
- package/dist/dom/namespaces.d.ts.map +1 -0
- package/dist/dom/namespaces.js +14 -0
- package/dist/dom/namespaces.js.map +1 -0
- package/dist/dom/properties.d.ts +27 -0
- package/dist/dom/properties.d.ts.map +1 -0
- package/dist/dom/properties.js +333 -0
- package/dist/dom/properties.js.map +1 -0
- package/dist/dom/style-properties.d.ts +2 -0
- package/dist/dom/style-properties.d.ts.map +1 -0
- package/dist/dom/style-properties.js +47 -0
- package/dist/dom/style-properties.js.map +1 -0
- package/dist/dom/styles.d.ts +4 -0
- package/dist/dom/styles.d.ts.map +1 -0
- package/dist/dom/styles.js +77 -0
- package/dist/dom/styles.js.map +1 -0
- package/dist/dom-forms.d.ts +3 -0
- package/dist/dom-forms.d.ts.map +1 -0
- package/dist/dom-forms.js +17 -0
- package/dist/dom-forms.js.map +1 -0
- package/dist/dom-styles.d.ts +3 -0
- package/dist/dom-styles.d.ts.map +1 -0
- package/dist/dom-styles.js +11 -0
- package/dist/dom-styles.js.map +1 -0
- package/dist/env.d.ts +6 -0
- package/dist/framework-hydrate.d.ts +21 -0
- package/dist/framework-hydrate.d.ts.map +1 -0
- package/dist/framework-hydrate.js +165 -0
- package/dist/framework-hydrate.js.map +1 -0
- package/dist/framework-protocol.d.ts +33 -0
- package/dist/framework-protocol.d.ts.map +1 -0
- package/dist/framework-protocol.js +235 -0
- package/dist/framework-protocol.js.map +1 -0
- package/dist/framework.d.ts +39 -0
- package/dist/framework.d.ts.map +1 -0
- package/dist/framework.js +111 -0
- package/dist/framework.js.map +1 -0
- package/dist/hydrate.d.ts +9 -0
- package/dist/hydrate.d.ts.map +1 -0
- package/dist/hydrate.js +14 -0
- package/dist/hydrate.js.map +1 -0
- package/dist/hydration-bridge.d.ts +62 -0
- package/dist/hydration-bridge.d.ts.map +1 -0
- package/dist/hydration-bridge.js +95 -0
- package/dist/hydration-bridge.js.map +1 -0
- package/dist/hydration.d.ts +29 -0
- package/dist/hydration.d.ts.map +1 -0
- package/dist/hydration.js +489 -0
- package/dist/hydration.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/indexed-list.d.ts +12 -0
- package/dist/indexed-list.d.ts.map +1 -0
- package/dist/indexed-list.js +10 -0
- package/dist/indexed-list.js.map +1 -0
- package/dist/jsx-runtime.d.ts +12 -0
- package/dist/jsx-runtime.d.ts.map +1 -0
- package/dist/jsx-runtime.js +27 -0
- package/dist/jsx-runtime.js.map +1 -0
- package/dist/keyed-list.d.ts +17 -0
- package/dist/keyed-list.d.ts.map +1 -0
- package/dist/keyed-list.js +180 -0
- package/dist/keyed-list.js.map +1 -0
- package/dist/metadata.d.ts +4 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +187 -0
- package/dist/metadata.js.map +1 -0
- package/dist/nested-prop.d.ts +4 -0
- package/dist/nested-prop.d.ts.map +1 -0
- package/dist/nested-prop.js +18 -0
- package/dist/nested-prop.js.map +1 -0
- package/dist/profiling.d.ts +10 -0
- package/dist/profiling.d.ts.map +1 -0
- package/dist/profiling.js +21 -0
- package/dist/profiling.js.map +1 -0
- package/dist/protocol.d.ts +3 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +7 -0
- package/dist/protocol.js.map +1 -0
- package/dist/raw-html.d.ts +3 -0
- package/dist/raw-html.d.ts.map +1 -0
- package/dist/raw-html.js +172 -0
- package/dist/raw-html.js.map +1 -0
- package/dist/ref.d.ts +6 -0
- package/dist/ref.d.ts.map +1 -0
- package/dist/ref.js +5 -0
- package/dist/ref.js.map +1 -0
- package/dist/renderable-protocol.d.ts +10 -0
- package/dist/renderable-protocol.d.ts.map +1 -0
- package/dist/renderable-protocol.js +12 -0
- package/dist/renderable-protocol.js.map +1 -0
- package/dist/renderable.d.ts +27 -0
- package/dist/renderable.d.ts.map +1 -0
- package/dist/renderable.js +147 -0
- package/dist/renderable.js.map +1 -0
- package/dist/retained-ui.d.ts +8 -0
- package/dist/retained-ui.d.ts.map +1 -0
- package/dist/retained-ui.js +12 -0
- package/dist/retained-ui.js.map +1 -0
- package/dist/root.d.ts +18 -0
- package/dist/root.d.ts.map +1 -0
- package/dist/root.js +94 -0
- package/dist/root.js.map +1 -0
- package/dist/scheduler.d.ts +10 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +124 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/server-framework.d.ts +52 -0
- package/dist/server-framework.d.ts.map +1 -0
- package/dist/server-framework.js +247 -0
- package/dist/server-framework.js.map +1 -0
- package/dist/server.d.ts +159 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +793 -0
- package/dist/server.js.map +1 -0
- package/dist/shared/promise.d.ts +4 -0
- package/dist/shared/promise.d.ts.map +1 -0
- package/dist/shared/promise.js +23 -0
- package/dist/shared/promise.js.map +1 -0
- package/dist/source-mask.d.ts +7 -0
- package/dist/source-mask.d.ts.map +1 -0
- package/dist/source-mask.js +74 -0
- package/dist/source-mask.js.map +1 -0
- package/dist/spread.d.ts +3 -0
- package/dist/spread.d.ts.map +1 -0
- package/dist/spread.js +103 -0
- package/dist/spread.js.map +1 -0
- package/dist/state-slot.d.ts +18 -0
- package/dist/state-slot.d.ts.map +1 -0
- package/dist/state-slot.js +46 -0
- package/dist/state-slot.js.map +1 -0
- package/dist/testing.d.ts +7 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +18 -0
- package/dist/testing.js.map +1 -0
- package/package.json +151 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { decodeFrameworkValue, isClientReference, } from './framework-protocol.js';
|
|
2
|
+
import { isClientBoundaryDefinition } from './framework.js';
|
|
3
|
+
import { installHydration } from './hydration.js';
|
|
4
|
+
import { hydrateRoot } from './root.js';
|
|
5
|
+
installHydration();
|
|
6
|
+
const DEFAULT_REPLAY_EVENTS = ['click', 'input', 'change', 'submit'];
|
|
7
|
+
export function createEventReplayQueue(host, events = DEFAULT_REPLAY_EVENTS) {
|
|
8
|
+
const records = [];
|
|
9
|
+
let disposed = false;
|
|
10
|
+
const capture = (event) => {
|
|
11
|
+
const target = event.target;
|
|
12
|
+
if (!(target instanceof Node))
|
|
13
|
+
return;
|
|
14
|
+
const path = nodePath(host, target);
|
|
15
|
+
if (path === undefined)
|
|
16
|
+
return;
|
|
17
|
+
if (event.type === 'submit')
|
|
18
|
+
event.preventDefault();
|
|
19
|
+
records.push({
|
|
20
|
+
type: event.type,
|
|
21
|
+
path,
|
|
22
|
+
bubbles: event.bubbles,
|
|
23
|
+
cancelable: event.cancelable,
|
|
24
|
+
...(target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement
|
|
25
|
+
? { value: target.value }
|
|
26
|
+
: {}),
|
|
27
|
+
...(target instanceof HTMLInputElement ? { checked: target.checked } : {}),
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
for (const event of events)
|
|
31
|
+
host.addEventListener(event, capture, true);
|
|
32
|
+
const dispose = () => {
|
|
33
|
+
if (disposed)
|
|
34
|
+
return;
|
|
35
|
+
disposed = true;
|
|
36
|
+
for (const event of events)
|
|
37
|
+
host.removeEventListener(event, capture, true);
|
|
38
|
+
};
|
|
39
|
+
return {
|
|
40
|
+
dispose,
|
|
41
|
+
replay() {
|
|
42
|
+
dispose();
|
|
43
|
+
for (const record of records.splice(0)) {
|
|
44
|
+
const target = resolveNodePath(host, record.path);
|
|
45
|
+
if (!(target instanceof Element))
|
|
46
|
+
continue;
|
|
47
|
+
if (record.value !== undefined &&
|
|
48
|
+
(target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement)) {
|
|
49
|
+
target.value = record.value;
|
|
50
|
+
}
|
|
51
|
+
if (record.checked !== undefined && target instanceof HTMLInputElement) {
|
|
52
|
+
target.checked = record.checked;
|
|
53
|
+
}
|
|
54
|
+
target.dispatchEvent(new Event(record.type, { bubbles: record.bubbles, cancelable: record.cancelable }));
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
size: () => records.length,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export function hydrateFrameworkBoundary(host, application, options) {
|
|
61
|
+
try {
|
|
62
|
+
const root = hydrateRoot(host, application, options);
|
|
63
|
+
options?.replay?.replay();
|
|
64
|
+
return root;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
options?.replay?.dispose();
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export async function hydrateClientBoundaries(root, loadModule, options) {
|
|
72
|
+
const hosts = clientBoundaryHosts(root);
|
|
73
|
+
const payloads = hosts.map(readClientBoundaryPayload);
|
|
74
|
+
const replays = hosts.map((host) => createEventReplayQueue(host));
|
|
75
|
+
const roots = [];
|
|
76
|
+
try {
|
|
77
|
+
const applications = await Promise.all(payloads.map((payload) => prepareClientBoundary(loadModule, payload)));
|
|
78
|
+
for (const [index, host] of hosts.entries()) {
|
|
79
|
+
const identifierPrefix = host.getAttribute('data-vidact-identifier-prefix') ?? '';
|
|
80
|
+
roots[index] = hydrateFrameworkBoundary(host, applications[index], {
|
|
81
|
+
...options,
|
|
82
|
+
identifierPrefix,
|
|
83
|
+
replay: replays[index],
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
for (const replay of replays)
|
|
89
|
+
replay.dispose();
|
|
90
|
+
for (const compiledRoot of roots)
|
|
91
|
+
compiledRoot?.unmount();
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
roots,
|
|
96
|
+
dispose() {
|
|
97
|
+
for (const compiledRoot of roots)
|
|
98
|
+
compiledRoot.unmount();
|
|
99
|
+
},
|
|
100
|
+
async replace(nextLoader = loadModule) {
|
|
101
|
+
const applications = await Promise.all(payloads.map((payload) => prepareClientBoundary(nextLoader, payload)));
|
|
102
|
+
for (const [index, compiledRoot] of roots.entries()) {
|
|
103
|
+
compiledRoot.replace(applications[index]);
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
async function prepareClientBoundary(loadModule, { reference, props }) {
|
|
109
|
+
const definition = await loadClientBoundary(loadModule, reference);
|
|
110
|
+
const prepared = await definition.prepare?.(props);
|
|
111
|
+
return () => definition.render(props, prepared);
|
|
112
|
+
}
|
|
113
|
+
async function loadClientBoundary(loadModule, reference) {
|
|
114
|
+
const module = await loadModule(reference);
|
|
115
|
+
const definition = module[reference.exportName];
|
|
116
|
+
if (!isClientBoundaryDefinition(definition)) {
|
|
117
|
+
throw new TypeError(`client module ${reference.id} does not export Vidact boundary ${reference.exportName}`);
|
|
118
|
+
}
|
|
119
|
+
return definition;
|
|
120
|
+
}
|
|
121
|
+
function clientBoundaryHosts(root) {
|
|
122
|
+
const selector = '[data-vidact-client-boundary][data-vidact-client-payload]';
|
|
123
|
+
const descendants = [...root.querySelectorAll(selector)];
|
|
124
|
+
return root instanceof HTMLElement && root.matches(selector)
|
|
125
|
+
? [root, ...descendants]
|
|
126
|
+
: descendants;
|
|
127
|
+
}
|
|
128
|
+
function readClientBoundaryPayload(host) {
|
|
129
|
+
const encoded = host.getAttribute('data-vidact-client-payload');
|
|
130
|
+
if (encoded === null)
|
|
131
|
+
throw new TypeError('client boundary payload is missing');
|
|
132
|
+
const payload = decodeFrameworkValue(encoded);
|
|
133
|
+
if (!isRecord(payload) ||
|
|
134
|
+
!Object.hasOwn(payload, 'props') ||
|
|
135
|
+
!isClientReference(payload.reference)) {
|
|
136
|
+
throw new TypeError('invalid Vidact client boundary payload');
|
|
137
|
+
}
|
|
138
|
+
return { reference: payload.reference, props: payload.props };
|
|
139
|
+
}
|
|
140
|
+
function isRecord(value) {
|
|
141
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
142
|
+
}
|
|
143
|
+
function nodePath(root, node) {
|
|
144
|
+
const path = [];
|
|
145
|
+
let current = node;
|
|
146
|
+
while (current !== null && current !== root) {
|
|
147
|
+
const parentNode = current.parentNode;
|
|
148
|
+
if (parentNode === null)
|
|
149
|
+
return undefined;
|
|
150
|
+
path.push(Array.prototype.indexOf.call(parentNode.childNodes, current));
|
|
151
|
+
current = parentNode;
|
|
152
|
+
}
|
|
153
|
+
return current === root ? path.toReversed() : undefined;
|
|
154
|
+
}
|
|
155
|
+
function resolveNodePath(root, path) {
|
|
156
|
+
let current = root;
|
|
157
|
+
for (const index of path) {
|
|
158
|
+
const next = current.childNodes[index];
|
|
159
|
+
if (next === undefined)
|
|
160
|
+
return undefined;
|
|
161
|
+
current = next;
|
|
162
|
+
}
|
|
163
|
+
return current;
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=framework-hydrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-hydrate.js","sourceRoot":"","sources":["../src/framework-hydrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
declare const CLIENT_REFERENCE: unique symbol;
|
|
2
|
+
declare const SERVER_REFERENCE: unique symbol;
|
|
3
|
+
export declare const VIDACT_FRAMEWORK_PROTOCOL = "vidact-framework-v1";
|
|
4
|
+
export interface ClientReference {
|
|
5
|
+
readonly [CLIENT_REFERENCE]: true;
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly exportName: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ServerFunctionReference {
|
|
10
|
+
readonly [SERVER_REFERENCE]: true;
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly bound: readonly FrameworkValue[];
|
|
13
|
+
}
|
|
14
|
+
export type FrameworkValue = null | undefined | boolean | string | number | bigint | readonly FrameworkValue[] | {
|
|
15
|
+
readonly [key: string]: FrameworkValue;
|
|
16
|
+
} | ClientReference | ServerFunctionReference;
|
|
17
|
+
export interface ClientModuleManifest {
|
|
18
|
+
readonly has: (id: string, exportName: string) => boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface ServerFunctionRegistry {
|
|
21
|
+
readonly invoke: (id: string, arguments_: readonly FrameworkValue[], signal?: AbortSignal) => Promise<FrameworkValue>;
|
|
22
|
+
readonly register: (id: string, implementation: (...arguments_: FrameworkValue[]) => FrameworkValue | PromiseLike<FrameworkValue>) => () => void;
|
|
23
|
+
}
|
|
24
|
+
export declare function createClientReference(id: string, exportName?: string): ClientReference;
|
|
25
|
+
export declare function createServerFunctionReference(id: string, bound?: readonly FrameworkValue[]): ServerFunctionReference;
|
|
26
|
+
export declare function createClientModuleManifest(references: Readonly<Record<string, readonly string[]>>): ClientModuleManifest;
|
|
27
|
+
export declare function createServerFunctionRegistry(): ServerFunctionRegistry;
|
|
28
|
+
export declare function encodeFrameworkValue(value: FrameworkValue, manifest?: ClientModuleManifest): string;
|
|
29
|
+
export declare function decodeFrameworkValue(payload: string, manifest?: ClientModuleManifest): FrameworkValue;
|
|
30
|
+
export declare function invokeServerFunctionPayload(registry: ServerFunctionRegistry, payload: string, signal?: AbortSignal): Promise<string>;
|
|
31
|
+
export declare function isClientReference(value: unknown): value is ClientReference;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=framework-protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-protocol.d.ts","sourceRoot":"","sources":["../src/framework-protocol.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,gBAAgB,eAAmC,CAAA;AACzD,QAAA,MAAM,gBAAgB,eAAmC,CAAA;AAEzD,eAAO,MAAM,yBAAyB,wBAAwB,CAAA;AAE9D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAA;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAA;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAA;CAC1C;AAED,MAAM,MAAM,cAAc,GACtB,IAAI,GACJ,SAAS,GACT,OAAO,GACP,MAAM,GACN,MAAM,GACN,MAAM,GACN,SAAS,cAAc,EAAE,GACzB;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;CAAE,GAC1C,eAAe,GACf,uBAAuB,CAAA;AAE3B,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAA;CAC1D;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,CACf,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,SAAS,cAAc,EAAE,EACrC,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,cAAc,CAAC,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,CACjB,EAAE,EAAE,MAAM,EACV,cAAc,EAAE,CACd,GAAG,UAAU,EAAE,cAAc,EAAE,KAC5B,cAAc,GAAG,WAAW,CAAC,cAAc,CAAC,KAC9C,MAAM,IAAI,CAAA;CAChB;AAyBD,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,SAAY,GAAG,eAAe,CAIzF;AAED,wBAAgB,6BAA6B,CAC3C,EAAE,EAAE,MAAM,EACV,KAAK,GAAE,SAAS,cAAc,EAAO,GACpC,uBAAuB,CAGzB;AAED,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,GACtD,oBAAoB,CAatB;AAED,wBAAgB,4BAA4B,IAAI,sBAAsB,CAwBrE;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,MAAM,CAUR;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,cAAc,CAehB;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,sBAAsB,EAChC,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAgHD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { abortReason, withAbort } from './shared/promise.js';
|
|
2
|
+
const CLIENT_REFERENCE = Symbol('Vidact.ClientReference');
|
|
3
|
+
const SERVER_REFERENCE = Symbol('Vidact.ServerReference');
|
|
4
|
+
export const VIDACT_FRAMEWORK_PROTOCOL = 'vidact-framework-v1';
|
|
5
|
+
const MAX_FRAMEWORK_PAYLOAD_CHARACTERS = 64 * 1024 * 1024;
|
|
6
|
+
const MAX_FRAMEWORK_BODY_CHARACTERS = 32 * 1024 * 1024;
|
|
7
|
+
const MAX_FRAMEWORK_VALUE_DEPTH = 100;
|
|
8
|
+
const MAX_FRAMEWORK_VALUE_NODES = 100_000;
|
|
9
|
+
export function createClientReference(id, exportName = 'default') {
|
|
10
|
+
assertReferencePart(id, 'client module id');
|
|
11
|
+
assertReferencePart(exportName, 'client export name');
|
|
12
|
+
return Object.freeze({ [CLIENT_REFERENCE]: true, id, exportName });
|
|
13
|
+
}
|
|
14
|
+
export function createServerFunctionReference(id, bound = []) {
|
|
15
|
+
assertReferencePart(id, 'server function id');
|
|
16
|
+
return Object.freeze({ [SERVER_REFERENCE]: true, id, bound: Object.freeze([...bound]) });
|
|
17
|
+
}
|
|
18
|
+
export function createClientModuleManifest(references) {
|
|
19
|
+
const allowed = new Set();
|
|
20
|
+
for (const [id, exports] of Object.entries(references)) {
|
|
21
|
+
assertReferencePart(id, 'client module id');
|
|
22
|
+
for (const exportName of exports) {
|
|
23
|
+
assertReferencePart(exportName, 'client export name');
|
|
24
|
+
allowed.add(`${id}\0${exportName}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const manifest = {
|
|
28
|
+
has: (id, exportName) => allowed.has(`${id}\0${exportName}`),
|
|
29
|
+
};
|
|
30
|
+
return Object.freeze(manifest);
|
|
31
|
+
}
|
|
32
|
+
export function createServerFunctionRegistry() {
|
|
33
|
+
const functions = new Map();
|
|
34
|
+
return {
|
|
35
|
+
register(id, implementation) {
|
|
36
|
+
assertReferencePart(id, 'server function id');
|
|
37
|
+
if (functions.has(id))
|
|
38
|
+
throw new Error(`server function ${id} is already registered`);
|
|
39
|
+
functions.set(id, implementation);
|
|
40
|
+
return () => {
|
|
41
|
+
if (functions.get(id) === implementation)
|
|
42
|
+
functions.delete(id);
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
async invoke(id, arguments_, signal) {
|
|
46
|
+
if (signal?.aborted)
|
|
47
|
+
throw abortReason(signal);
|
|
48
|
+
const implementation = functions.get(id);
|
|
49
|
+
if (implementation === undefined)
|
|
50
|
+
throw new Error(`unknown server function ${id}`);
|
|
51
|
+
const operation = Promise.resolve(implementation(...arguments_));
|
|
52
|
+
const result = signal === undefined ? await operation : await withAbort(operation, signal);
|
|
53
|
+
assertFrameworkValue(result);
|
|
54
|
+
return result;
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export function encodeFrameworkValue(value, manifest) {
|
|
59
|
+
const body = JSON.stringify(encodeValue(value, manifest, new Set(), { nodes: 0 }, 0));
|
|
60
|
+
assertFrameworkPayloadSize(body, MAX_FRAMEWORK_BODY_CHARACTERS, 'body');
|
|
61
|
+
const payload = JSON.stringify({
|
|
62
|
+
protocol: VIDACT_FRAMEWORK_PROTOCOL,
|
|
63
|
+
checksum: checksum(body),
|
|
64
|
+
body,
|
|
65
|
+
});
|
|
66
|
+
assertFrameworkPayloadSize(payload, MAX_FRAMEWORK_PAYLOAD_CHARACTERS, 'envelope');
|
|
67
|
+
return payload;
|
|
68
|
+
}
|
|
69
|
+
export function decodeFrameworkValue(payload, manifest) {
|
|
70
|
+
assertFrameworkPayloadSize(payload, MAX_FRAMEWORK_PAYLOAD_CHARACTERS, 'envelope');
|
|
71
|
+
const envelope = JSON.parse(payload);
|
|
72
|
+
if (envelope.protocol !== VIDACT_FRAMEWORK_PROTOCOL ||
|
|
73
|
+
typeof envelope.body !== 'string' ||
|
|
74
|
+
typeof envelope.checksum !== 'string') {
|
|
75
|
+
throw new Error('unsupported Vidact framework payload');
|
|
76
|
+
}
|
|
77
|
+
if (checksum(envelope.body) !== envelope.checksum) {
|
|
78
|
+
throw new Error('Vidact framework payload integrity check failed');
|
|
79
|
+
}
|
|
80
|
+
assertFrameworkPayloadSize(envelope.body, MAX_FRAMEWORK_BODY_CHARACTERS, 'body');
|
|
81
|
+
return decodeValue(JSON.parse(envelope.body), manifest, { nodes: 0 }, 0);
|
|
82
|
+
}
|
|
83
|
+
export function invokeServerFunctionPayload(registry, payload, signal) {
|
|
84
|
+
const request = decodeFrameworkValue(payload);
|
|
85
|
+
if (!isPlainObject(request) || typeof request.id !== 'string' || !Array.isArray(request.args)) {
|
|
86
|
+
return Promise.reject(new TypeError('invalid server function request payload'));
|
|
87
|
+
}
|
|
88
|
+
return registry
|
|
89
|
+
.invoke(request.id, request.args, signal)
|
|
90
|
+
.then((result) => encodeFrameworkValue(result));
|
|
91
|
+
}
|
|
92
|
+
function encodeValue(value, manifest, ancestors, budget, depth) {
|
|
93
|
+
consumeTraversalBudget(budget, depth);
|
|
94
|
+
if (value === undefined)
|
|
95
|
+
return { $vidact: 'undefined' };
|
|
96
|
+
if (typeof value === 'bigint')
|
|
97
|
+
return { $vidact: 'bigint', value: String(value) };
|
|
98
|
+
if (value === null || typeof value === 'boolean' || typeof value === 'string')
|
|
99
|
+
return value;
|
|
100
|
+
if (typeof value === 'number') {
|
|
101
|
+
if (!Number.isFinite(value))
|
|
102
|
+
throw new TypeError('framework values require finite numbers');
|
|
103
|
+
return value;
|
|
104
|
+
}
|
|
105
|
+
if (isClientReference(value)) {
|
|
106
|
+
if (manifest !== undefined && !manifest.has(value.id, value.exportName)) {
|
|
107
|
+
throw new Error(`client reference ${value.id}#${value.exportName} is not in the manifest`);
|
|
108
|
+
}
|
|
109
|
+
return { $vidact: 'client', id: value.id, exportName: value.exportName };
|
|
110
|
+
}
|
|
111
|
+
if (isServerFunctionReference(value)) {
|
|
112
|
+
return {
|
|
113
|
+
$vidact: 'server-function',
|
|
114
|
+
id: value.id,
|
|
115
|
+
bound: encodeValue(value.bound, manifest, ancestors, budget, depth + 1),
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
if (typeof value !== 'object')
|
|
119
|
+
throw new TypeError('unsupported framework value');
|
|
120
|
+
if (ancestors.has(value))
|
|
121
|
+
throw new TypeError('framework values cannot contain cycles');
|
|
122
|
+
ancestors.add(value);
|
|
123
|
+
try {
|
|
124
|
+
if (Array.isArray(value)) {
|
|
125
|
+
return value.map((item) => encodeValue(item, manifest, ancestors, budget, depth + 1));
|
|
126
|
+
}
|
|
127
|
+
if (!isPlainObject(value))
|
|
128
|
+
throw new TypeError('framework objects must use a plain prototype');
|
|
129
|
+
return {
|
|
130
|
+
$vidact: 'object',
|
|
131
|
+
entries: Object.entries(value).map(([key, item]) => {
|
|
132
|
+
assertSafeKey(key);
|
|
133
|
+
return [key, encodeValue(item, manifest, ancestors, budget, depth + 1)];
|
|
134
|
+
}),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
finally {
|
|
138
|
+
ancestors.delete(value);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function decodeValue(value, manifest, budget, depth) {
|
|
142
|
+
consumeTraversalBudget(budget, depth);
|
|
143
|
+
if (value === null || typeof value === 'boolean' || typeof value === 'string')
|
|
144
|
+
return value;
|
|
145
|
+
if (typeof value === 'number') {
|
|
146
|
+
if (!Number.isFinite(value))
|
|
147
|
+
throw new TypeError('framework values require finite numbers');
|
|
148
|
+
return value;
|
|
149
|
+
}
|
|
150
|
+
if (Array.isArray(value)) {
|
|
151
|
+
return value.map((item) => decodeValue(item, manifest, budget, depth + 1));
|
|
152
|
+
}
|
|
153
|
+
if (!isPlainObject(value))
|
|
154
|
+
throw new TypeError('invalid framework value');
|
|
155
|
+
const tag = value.$vidact;
|
|
156
|
+
if (tag === 'undefined')
|
|
157
|
+
return undefined;
|
|
158
|
+
if (tag === 'bigint' && typeof value.value === 'string')
|
|
159
|
+
return BigInt(value.value);
|
|
160
|
+
if (tag === 'client' && typeof value.id === 'string' && typeof value.exportName === 'string') {
|
|
161
|
+
if (manifest !== undefined && !manifest.has(value.id, value.exportName)) {
|
|
162
|
+
throw new Error(`client reference ${value.id}#${value.exportName} is not in the manifest`);
|
|
163
|
+
}
|
|
164
|
+
return createClientReference(value.id, value.exportName);
|
|
165
|
+
}
|
|
166
|
+
if (tag === 'server-function' && typeof value.id === 'string' && Array.isArray(value.bound)) {
|
|
167
|
+
return createServerFunctionReference(value.id, value.bound.map((item) => decodeValue(item, manifest, budget, depth + 1)));
|
|
168
|
+
}
|
|
169
|
+
if (tag === 'object' && Array.isArray(value.entries)) {
|
|
170
|
+
const output = Object.create(null);
|
|
171
|
+
for (const entry of value.entries) {
|
|
172
|
+
if (!Array.isArray(entry) || entry.length !== 2 || typeof entry[0] !== 'string') {
|
|
173
|
+
throw new TypeError('invalid framework object entry');
|
|
174
|
+
}
|
|
175
|
+
const [key, item] = entry;
|
|
176
|
+
assertSafeKey(key);
|
|
177
|
+
output[key] = decodeValue(item, manifest, budget, depth + 1);
|
|
178
|
+
}
|
|
179
|
+
return output;
|
|
180
|
+
}
|
|
181
|
+
if (tag !== undefined)
|
|
182
|
+
throw new TypeError(`invalid framework value tag ${String(tag)}`);
|
|
183
|
+
const output = Object.create(null);
|
|
184
|
+
for (const [key, item] of Object.entries(value)) {
|
|
185
|
+
assertSafeKey(key);
|
|
186
|
+
output[key] = decodeValue(item, manifest, budget, depth + 1);
|
|
187
|
+
}
|
|
188
|
+
return output;
|
|
189
|
+
}
|
|
190
|
+
function assertFrameworkValue(value) {
|
|
191
|
+
encodeFrameworkValue(value);
|
|
192
|
+
}
|
|
193
|
+
export function isClientReference(value) {
|
|
194
|
+
return typeof value === 'object' && value !== null && CLIENT_REFERENCE in value;
|
|
195
|
+
}
|
|
196
|
+
function isServerFunctionReference(value) {
|
|
197
|
+
return typeof value === 'object' && value !== null && SERVER_REFERENCE in value;
|
|
198
|
+
}
|
|
199
|
+
function isPlainObject(value) {
|
|
200
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
201
|
+
return false;
|
|
202
|
+
const prototype = Object.getPrototypeOf(value);
|
|
203
|
+
return prototype === Object.prototype || prototype === null;
|
|
204
|
+
}
|
|
205
|
+
function assertSafeKey(key) {
|
|
206
|
+
if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
|
|
207
|
+
throw new TypeError(`unsafe framework object key ${key}`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
function consumeTraversalBudget(budget, depth) {
|
|
211
|
+
if (depth > MAX_FRAMEWORK_VALUE_DEPTH) {
|
|
212
|
+
throw new RangeError(`framework values cannot exceed depth ${MAX_FRAMEWORK_VALUE_DEPTH}`);
|
|
213
|
+
}
|
|
214
|
+
budget.nodes += 1;
|
|
215
|
+
if (budget.nodes > MAX_FRAMEWORK_VALUE_NODES) {
|
|
216
|
+
throw new RangeError(`framework values cannot exceed ${MAX_FRAMEWORK_VALUE_NODES} nodes`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
function assertFrameworkPayloadSize(value, limit, label) {
|
|
220
|
+
if (value.length > limit) {
|
|
221
|
+
throw new RangeError(`Vidact framework payload ${label} exceeds ${limit} characters`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
function assertReferencePart(value, label) {
|
|
225
|
+
if (value.length === 0 || value.includes('\0'))
|
|
226
|
+
throw new TypeError(`${label} must be non-empty`);
|
|
227
|
+
}
|
|
228
|
+
function checksum(value) {
|
|
229
|
+
let hash = 0x81_1c_9d_c5;
|
|
230
|
+
for (const byte of new TextEncoder().encode(value)) {
|
|
231
|
+
hash = Math.imul(hash ^ byte, 0x01_00_01_93);
|
|
232
|
+
}
|
|
233
|
+
return (hash >>> 0).toString(16).padStart(8, '0');
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=framework-protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-protocol.js","sourceRoot":"","sources":["../src/framework-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { CompiledComponentResult } from './compiled/types.js';
|
|
2
|
+
import type { FrameworkValue } from './framework-protocol.js';
|
|
3
|
+
declare const CLIENT_BOUNDARY_DEFINITION: unique symbol;
|
|
4
|
+
export interface ClientBoundaryDefinition<Props = FrameworkValue, Prepared = unknown> {
|
|
5
|
+
readonly [CLIENT_BOUNDARY_DEFINITION]: true;
|
|
6
|
+
readonly prepare?: (props: Props) => Prepared | PromiseLike<Prepared>;
|
|
7
|
+
readonly render: (props: Props, prepared: Prepared) => CompiledComponentResult;
|
|
8
|
+
}
|
|
9
|
+
export declare function defineClientBoundary<Props = FrameworkValue, Prepared = void>(render: (props: Props, prepared: Prepared) => CompiledComponentResult, prepare?: (props: Props) => Prepared | PromiseLike<Prepared>): ClientBoundaryDefinition<Props, Prepared>;
|
|
10
|
+
export declare function isClientBoundaryDefinition(value: unknown): value is ClientBoundaryDefinition;
|
|
11
|
+
/** @internal */
|
|
12
|
+
export declare function enableFrameworkMetadata(): void;
|
|
13
|
+
export interface ResourceHintOptions {
|
|
14
|
+
readonly crossOrigin?: '' | 'anonymous' | 'use-credentials';
|
|
15
|
+
}
|
|
16
|
+
export interface PreloadOptions extends ResourceHintOptions {
|
|
17
|
+
readonly as: string;
|
|
18
|
+
readonly fetchPriority?: 'high' | 'low' | 'auto';
|
|
19
|
+
readonly imageSizes?: string;
|
|
20
|
+
readonly imageSrcSet?: string;
|
|
21
|
+
readonly integrity?: string;
|
|
22
|
+
readonly nonce?: string;
|
|
23
|
+
readonly referrerPolicy?: string;
|
|
24
|
+
readonly type?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface PreinitOptions extends ResourceHintOptions {
|
|
27
|
+
readonly as: 'script' | 'style';
|
|
28
|
+
readonly precedence?: string;
|
|
29
|
+
readonly integrity?: string;
|
|
30
|
+
readonly nonce?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function preconnect(href: string, options?: ResourceHintOptions): void;
|
|
33
|
+
export declare function prefetchDNS(href: string): void;
|
|
34
|
+
export declare function preload(href: string, options: PreloadOptions): void;
|
|
35
|
+
export declare function preloadModule(href: string, options?: ResourceHintOptions): void;
|
|
36
|
+
export declare function preinit(href: string, options: PreinitOptions): void;
|
|
37
|
+
export declare function preinitModule(href: string, options?: ResourceHintOptions): void;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=framework.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework.d.ts","sourceRoot":"","sources":["../src/framework.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAElE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAQ7D,QAAA,MAAM,0BAA0B,eAA4C,CAAA;AAE5E,MAAM,WAAW,wBAAwB,CAAC,KAAK,GAAG,cAAc,EAAE,QAAQ,GAAG,OAAO;IAClF,QAAQ,CAAC,CAAC,0BAA0B,CAAC,EAAE,IAAI,CAAA;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAA;IACrE,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,KAAK,uBAAuB,CAAA;CAC/E;AAED,wBAAgB,oBAAoB,CAAC,KAAK,GAAG,cAAc,EAAE,QAAQ,GAAG,IAAI,EAC1E,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,KAAK,uBAAuB,EACrE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,GAC3D,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAM3C;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,wBAAwB,CAO5F;AAED,gBAAgB;AAChB,wBAAgB,uBAAuB,IAAI,IAAI,CAO9C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,WAAW,GAAG,iBAAiB,CAAA;CAC5D;AAED,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IACzD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;IAChD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IACzD,QAAQ,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,IAAI,CAEhF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAEnE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,IAAI,CAEnF;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAiBnE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,IAAI,CAQnF"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { installFrameworkMetadata } from './direct-dom.js';
|
|
2
|
+
import { hoistFrameworkMetadata, installFrameworkMetadataPropRekeying, isFrameworkMetadataElement, } from './metadata.js';
|
|
3
|
+
let metadataInstalled = false;
|
|
4
|
+
const CLIENT_BOUNDARY_DEFINITION = Symbol('Vidact.ClientBoundaryDefinition');
|
|
5
|
+
export function defineClientBoundary(render, prepare) {
|
|
6
|
+
return Object.freeze({
|
|
7
|
+
[CLIENT_BOUNDARY_DEFINITION]: true,
|
|
8
|
+
render,
|
|
9
|
+
...(prepare === undefined ? {} : { prepare }),
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
export function isClientBoundaryDefinition(value) {
|
|
13
|
+
return (typeof value === 'object' &&
|
|
14
|
+
value !== null &&
|
|
15
|
+
CLIENT_BOUNDARY_DEFINITION in value &&
|
|
16
|
+
typeof Reflect.get(value, 'render') === 'function');
|
|
17
|
+
}
|
|
18
|
+
/** @internal */
|
|
19
|
+
export function enableFrameworkMetadata() {
|
|
20
|
+
if (metadataInstalled)
|
|
21
|
+
return;
|
|
22
|
+
metadataInstalled = true;
|
|
23
|
+
installFrameworkMetadataPropRekeying();
|
|
24
|
+
installFrameworkMetadata((element, props) => isFrameworkMetadataElement(element, props) ? hoistFrameworkMetadata(element) : element);
|
|
25
|
+
}
|
|
26
|
+
export function preconnect(href, options = {}) {
|
|
27
|
+
appendLink('preconnect', href, options);
|
|
28
|
+
}
|
|
29
|
+
export function prefetchDNS(href) {
|
|
30
|
+
appendLink('dns-prefetch', href, {});
|
|
31
|
+
}
|
|
32
|
+
export function preload(href, options) {
|
|
33
|
+
appendLink('preload', href, options);
|
|
34
|
+
}
|
|
35
|
+
export function preloadModule(href, options = {}) {
|
|
36
|
+
appendLink('modulepreload', href, options);
|
|
37
|
+
}
|
|
38
|
+
export function preinit(href, options) {
|
|
39
|
+
assertHref(href);
|
|
40
|
+
if (options.as === 'style') {
|
|
41
|
+
if (document.head.querySelector(`link[rel="stylesheet"][href="${CSS.escape(href)}"]`))
|
|
42
|
+
return;
|
|
43
|
+
const link = document.createElement('link');
|
|
44
|
+
link.rel = 'stylesheet';
|
|
45
|
+
link.href = href;
|
|
46
|
+
if (options.precedence !== undefined)
|
|
47
|
+
link.dataset.precedence = options.precedence;
|
|
48
|
+
applyResourceOptions(link, options);
|
|
49
|
+
document.head.append(link);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (document.head.querySelector(`script[src="${CSS.escape(href)}"]`))
|
|
53
|
+
return;
|
|
54
|
+
const script = document.createElement('script');
|
|
55
|
+
script.src = href;
|
|
56
|
+
applyResourceOptions(script, options);
|
|
57
|
+
document.head.append(script);
|
|
58
|
+
}
|
|
59
|
+
export function preinitModule(href, options = {}) {
|
|
60
|
+
assertHref(href);
|
|
61
|
+
if (document.head.querySelector(`script[type="module"][src="${CSS.escape(href)}"]`))
|
|
62
|
+
return;
|
|
63
|
+
const script = document.createElement('script');
|
|
64
|
+
script.type = 'module';
|
|
65
|
+
script.src = href;
|
|
66
|
+
applyResourceOptions(script, options);
|
|
67
|
+
document.head.append(script);
|
|
68
|
+
}
|
|
69
|
+
function appendLink(relation, href, options) {
|
|
70
|
+
assertHref(href);
|
|
71
|
+
const as = 'as' in options ? options.as : undefined;
|
|
72
|
+
const selector = `link[rel="${CSS.escape(relation)}"][href="${CSS.escape(href)}"]${as === undefined ? '' : `[as="${CSS.escape(as)}"]`}`;
|
|
73
|
+
if (document.head.querySelector(selector))
|
|
74
|
+
return;
|
|
75
|
+
const link = document.createElement('link');
|
|
76
|
+
link.rel = relation;
|
|
77
|
+
link.href = href;
|
|
78
|
+
if (as !== undefined)
|
|
79
|
+
link.as = as;
|
|
80
|
+
applyResourceOptions(link, options);
|
|
81
|
+
document.head.append(link);
|
|
82
|
+
}
|
|
83
|
+
function applyResourceOptions(element, options) {
|
|
84
|
+
if (options.crossOrigin !== undefined)
|
|
85
|
+
element.crossOrigin = options.crossOrigin;
|
|
86
|
+
if ('integrity' in options && options.integrity !== undefined)
|
|
87
|
+
element.integrity = options.integrity;
|
|
88
|
+
if ('nonce' in options && options.nonce !== undefined)
|
|
89
|
+
element.nonce = options.nonce;
|
|
90
|
+
if (element instanceof HTMLLinkElement) {
|
|
91
|
+
if ('fetchPriority' in options && options.fetchPriority !== undefined) {
|
|
92
|
+
element.fetchPriority = options.fetchPriority;
|
|
93
|
+
}
|
|
94
|
+
if ('imageSizes' in options && options.imageSizes !== undefined) {
|
|
95
|
+
element.imageSizes = options.imageSizes;
|
|
96
|
+
}
|
|
97
|
+
if ('imageSrcSet' in options && options.imageSrcSet !== undefined) {
|
|
98
|
+
element.imageSrcset = options.imageSrcSet;
|
|
99
|
+
}
|
|
100
|
+
if ('referrerPolicy' in options && options.referrerPolicy !== undefined) {
|
|
101
|
+
element.referrerPolicy = options.referrerPolicy;
|
|
102
|
+
}
|
|
103
|
+
if ('type' in options && options.type !== undefined)
|
|
104
|
+
element.type = options.type;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function assertHref(href) {
|
|
108
|
+
if (typeof href !== 'string' || href.length === 0)
|
|
109
|
+
throw new TypeError('resource href must be non-empty');
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=framework.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework.js","sourceRoot":"","sources":["../src/framework.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAE1D,OAAO,EACL,sBAAsB,EACtB,oCAAoC,EACpC,0BAA0B,GAC3B,MAAM,eAAe,CAAA;AAEtB,IAAI,iBAAiB,GAAG,KAAK,CAAA;AAC7B,MAAM,0BAA0B,GAAG,MAAM,CAAC,iCAAiC,CAAC,CAAA;AAQ5E,MAAM,UAAU,oBAAoB,CAClC,MAAqE,EACrE,OAA4D;IAE5D,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,CAAC,0BAA0B,CAAC,EAAE,IAAa;QAC3C,MAAM;QACN,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;KAC9C,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,0BAA0B,IAAI,KAAK;QACnC,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,UAAU,CACnD,CAAA;AACH,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,uBAAuB;IACrC,IAAI,iBAAiB;QAAE,OAAM;IAC7B,iBAAiB,GAAG,IAAI,CAAA;IACxB,oCAAoC,EAAE,CAAA;IACtC,wBAAwB,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAC1C,0BAA0B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CACvF,CAAA;AACH,CAAC;AAwBD,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,OAAO,GAAwB,EAAE;IACxE,UAAU,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,UAAU,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,OAAuB;IAC3D,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAO,GAAwB,EAAE;IAC3E,UAAU,CAAC,eAAe,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,OAAuB;IAC3D,UAAU,CAAC,IAAI,CAAC,CAAA;IAChB,IAAI,OAAO,CAAC,EAAE,KAAK,OAAO,EAAE,CAAC;QAC3B,IAAI,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,gCAAgC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAM;QAC7F,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC3C,IAAI,CAAC,GAAG,GAAG,YAAY,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;QAClF,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACnC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC1B,OAAM;IACR,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAM;IAC5E,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,CAAC,GAAG,GAAG,IAAI,CAAA;IACjB,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAO,GAAwB,EAAE;IAC3E,UAAU,CAAC,IAAI,CAAC,CAAA;IAChB,IAAI,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,8BAA8B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAM;IAC3F,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAA;IACtB,MAAM,CAAC,GAAG,GAAG,IAAI,CAAA;IACjB,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAC9B,CAAC;AAED,SAAS,UAAU,CACjB,QAAgB,EAChB,IAAY,EACZ,OAA6C;IAE7C,UAAU,CAAC,IAAI,CAAC,CAAA;IAChB,MAAM,EAAE,GAAG,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACnD,MAAM,QAAQ,GAAG,aAAa,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAA;IACvI,IAAI,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;QAAE,OAAM;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IAC3C,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAA;IACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAChB,IAAI,EAAE,KAAK,SAAS;QAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IAClC,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACnC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAA4C,EAC5C,OAA8D;IAE9D,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;QAAE,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;IAChF,IAAI,WAAW,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QAC3D,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;IACvC,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;IACpF,IAAI,OAAO,YAAY,eAAe,EAAE,CAAC;QACvC,IAAI,eAAe,IAAI,OAAO,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACtE,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAA;QAC/C,CAAC;QACD,IAAI,YAAY,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAChE,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;QACzC,CAAC;QACD,IAAI,aAAa,IAAI,OAAO,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAClE,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;QAC3C,CAAC;QACD,IAAI,gBAAgB,IAAI,OAAO,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACxE,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAA;QACjD,CAAC;QACD,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IAClF,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAC/C,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAA;AAC1D,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MountCompiledOptions } from './compiled/core.js';
|
|
2
|
+
import type { CompiledComponentResult, CompiledRenderValue } from './compiled/types.js';
|
|
3
|
+
import type { DirectComponent } from './direct-dom.js';
|
|
4
|
+
import { type CompiledRenderable } from './renderable.js';
|
|
5
|
+
import { type CompiledRoot, type HotContext } from './root.js';
|
|
6
|
+
export declare function createElement(type: string | symbol | DirectComponent | CompiledRenderable, props: Record<string, unknown> | null, ...children: CompiledRenderValue[]): CompiledRenderable;
|
|
7
|
+
export declare function hydrateRoot(host: ParentNode, application: () => CompiledComponentResult, options?: MountCompiledOptions): CompiledRoot;
|
|
8
|
+
export declare function hydrateHotRoot(hot: HotContext, host: ParentNode, application: () => CompiledComponentResult, options?: MountCompiledOptions): CompiledRoot;
|
|
9
|
+
//# sourceMappingURL=hydrate.d.ts.map
|