@craft-ts/component 0.7.0-beta.13 → 0.7.0-beta.16
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/package.json +7 -2
- package/src/index.d.ts +40 -40
- package/src/index.js +35 -35
- package/src/lib/a11y-control.d.ts +0 -1
- package/src/lib/a11y-control.js +0 -1
- package/src/lib/a11y.d.ts +4 -5
- package/src/lib/a11y.js +3 -4
- package/src/lib/ai/ai-context-menu.d.ts +24 -25
- package/src/lib/ai/ai-context-menu.js +2 -3
- package/src/lib/ai/ai-send-dialog.d.ts +277 -278
- package/src/lib/ai/ai-send-dialog.js +4 -5
- package/src/lib/ai/send-context-to-ai.d.ts +1 -2
- package/src/lib/ai/send-context-to-ai.js +4 -5
- package/src/lib/assert-defined-input.d.ts +1 -2
- package/src/lib/assert-defined-input.js +0 -1
- package/src/lib/bootstrap.d.ts +4 -3
- package/src/lib/bootstrap.js +6 -8
- package/src/lib/bridge.d.ts +9 -10
- package/src/lib/bridge.js +3 -4
- package/src/lib/catch-node.d.ts +35 -0
- package/src/lib/{block.js → catch-node.js} +9 -10
- package/src/lib/component.d.ts +23 -10
- package/src/lib/component.js +5 -6
- package/src/lib/composition.d.ts +1 -2
- package/src/lib/composition.js +2 -3
- package/src/lib/craft-defaults.d.ts +0 -1
- package/src/lib/craft-defaults.js +4 -5
- package/src/lib/craft-host-tokens.d.ts +0 -1
- package/src/lib/craft-host-tokens.js +0 -1
- package/src/lib/craft-router-outlet.d.ts +1 -2
- package/src/lib/craft-router-outlet.js +1 -2
- package/src/lib/css-vars.d.ts +0 -1
- package/src/lib/css-vars.js +0 -1
- package/src/lib/css-vars.type.d.ts +1 -2
- package/src/lib/css-vars.type.js +0 -1
- package/src/lib/{defer.d.ts → defer-node.d.ts} +4 -5
- package/src/lib/{defer.js → defer-node.js} +1 -2
- package/src/lib/directive.d.ts +1 -2
- package/src/lib/directive.js +1 -2
- package/src/lib/factory-runtime.d.ts +1 -2
- package/src/lib/factory-runtime.js +0 -1
- package/src/lib/{field-exception-block.d.ts → field-error-node.d.ts} +22 -23
- package/src/lib/{field-exception-block.js → field-error-node.js} +8 -9
- package/src/lib/for-node.d.ts +28 -0
- package/src/lib/{each.js → for-node.js} +4 -5
- package/src/lib/for-scheduling.d.ts +58 -0
- package/src/lib/{each-scheduling.js → for-scheduling.js} +14 -15
- package/src/lib/host-runtime.d.ts +0 -1
- package/src/lib/host-runtime.js +0 -1
- package/src/lib/hydrate.d.ts +2 -3
- package/src/lib/hydrate.js +57 -18
- package/src/lib/hyperscript.d.ts +1 -2
- package/src/lib/hyperscript.js +1 -2
- package/src/lib/if-node.d.ts +7 -0
- package/src/lib/{if-block.js → if-node.js} +2 -3
- package/src/lib/locator.d.ts +5 -6
- package/src/lib/locator.js +1 -2
- package/src/lib/{match-block.d.ts → match-node.d.ts} +8 -9
- package/src/lib/{match-block.js → match-node.js} +3 -4
- package/src/lib/{pending-block.d.ts → pending-node.d.ts} +28 -29
- package/src/lib/{pending-block.js → pending-node.js} +12 -13
- package/src/lib/project.d.ts +2 -3
- package/src/lib/project.js +2 -3
- package/src/lib/render/hydration-metadata.d.ts +0 -1
- package/src/lib/render/hydration-metadata.js +0 -1
- package/src/lib/render/hydration.d.ts +0 -1
- package/src/lib/render/hydration.js +0 -1
- package/src/lib/render/interpreter.d.ts +9 -8
- package/src/lib/render/interpreter.js +156 -81
- package/src/lib/render/server-style-collector.d.ts +0 -1
- package/src/lib/render/server-style-collector.js +0 -1
- package/src/lib/render/ssr-coordinator.d.ts +4 -2
- package/src/lib/render/ssr-coordinator.js +14 -3
- package/src/lib/render/string-dom.d.ts +0 -1
- package/src/lib/render/string-dom.js +48 -7
- package/src/lib/render/style-registry.d.ts +3 -2
- package/src/lib/render/style-registry.js +3 -2
- package/src/lib/render/style-scope.d.ts +0 -1
- package/src/lib/render/style-scope.js +0 -1
- package/src/lib/render/vnode.d.ts +117 -54
- package/src/lib/render/vnode.js +26 -27
- package/src/lib/security.d.ts +54 -0
- package/src/lib/security.js +502 -0
- package/src/lib/server-render.d.ts +12 -3
- package/src/lib/server-render.js +76 -17
- package/src/lib/start.d.ts +2 -3
- package/src/lib/start.js +3 -3
- package/src/lib/template-contract.d.ts +22 -23
- package/src/lib/template-contract.js +0 -1
- package/src/lib/template.d.ts +2 -3
- package/src/lib/template.js +2 -3
- package/src/lib/testing.d.ts +3 -4
- package/src/lib/testing.js +5 -6
- package/src/lib/types.d.ts +40 -28
- package/src/lib/types.js +3 -4
- package/testing/public-api.d.ts +0 -1
- package/testing/public-api.js +0 -1
- package/src/index.d.ts.map +0 -1
- package/src/index.js.map +0 -1
- package/src/lib/a11y-control.d.ts.map +0 -1
- package/src/lib/a11y-control.js.map +0 -1
- package/src/lib/a11y.d.ts.map +0 -1
- package/src/lib/a11y.js.map +0 -1
- package/src/lib/ai/ai-context-menu.d.ts.map +0 -1
- package/src/lib/ai/ai-context-menu.js.map +0 -1
- package/src/lib/ai/ai-send-dialog.d.ts.map +0 -1
- package/src/lib/ai/ai-send-dialog.js.map +0 -1
- package/src/lib/ai/send-context-to-ai.d.ts.map +0 -1
- package/src/lib/ai/send-context-to-ai.js.map +0 -1
- package/src/lib/assert-defined-input.d.ts.map +0 -1
- package/src/lib/assert-defined-input.js.map +0 -1
- package/src/lib/block.d.ts +0 -36
- package/src/lib/block.d.ts.map +0 -1
- package/src/lib/block.js.map +0 -1
- package/src/lib/bootstrap.d.ts.map +0 -1
- package/src/lib/bootstrap.js.map +0 -1
- package/src/lib/bridge.d.ts.map +0 -1
- package/src/lib/bridge.js.map +0 -1
- package/src/lib/component.d.ts.map +0 -1
- package/src/lib/component.js.map +0 -1
- package/src/lib/composition.d.ts.map +0 -1
- package/src/lib/composition.js.map +0 -1
- package/src/lib/craft-defaults.d.ts.map +0 -1
- package/src/lib/craft-defaults.js.map +0 -1
- package/src/lib/craft-host-tokens.d.ts.map +0 -1
- package/src/lib/craft-host-tokens.js.map +0 -1
- package/src/lib/craft-router-outlet.d.ts.map +0 -1
- package/src/lib/craft-router-outlet.js.map +0 -1
- package/src/lib/css-vars.d.ts.map +0 -1
- package/src/lib/css-vars.js.map +0 -1
- package/src/lib/css-vars.type.d.ts.map +0 -1
- package/src/lib/css-vars.type.js.map +0 -1
- package/src/lib/defer.d.ts.map +0 -1
- package/src/lib/defer.js.map +0 -1
- package/src/lib/directive.d.ts.map +0 -1
- package/src/lib/directive.js.map +0 -1
- package/src/lib/each-scheduling.d.ts +0 -59
- package/src/lib/each-scheduling.d.ts.map +0 -1
- package/src/lib/each-scheduling.js.map +0 -1
- package/src/lib/each.d.ts +0 -29
- package/src/lib/each.d.ts.map +0 -1
- package/src/lib/each.js.map +0 -1
- package/src/lib/factory-runtime.d.ts.map +0 -1
- package/src/lib/factory-runtime.js.map +0 -1
- package/src/lib/field-exception-block.d.ts.map +0 -1
- package/src/lib/field-exception-block.js.map +0 -1
- package/src/lib/host-runtime.d.ts.map +0 -1
- package/src/lib/host-runtime.js.map +0 -1
- package/src/lib/hydrate.d.ts.map +0 -1
- package/src/lib/hydrate.js.map +0 -1
- package/src/lib/hyperscript.d.ts.map +0 -1
- package/src/lib/hyperscript.js.map +0 -1
- package/src/lib/if-block.d.ts +0 -8
- package/src/lib/if-block.d.ts.map +0 -1
- package/src/lib/if-block.js.map +0 -1
- package/src/lib/locator.d.ts.map +0 -1
- package/src/lib/locator.js.map +0 -1
- package/src/lib/match-block.d.ts.map +0 -1
- package/src/lib/match-block.js.map +0 -1
- package/src/lib/pending-block.d.ts.map +0 -1
- package/src/lib/pending-block.js.map +0 -1
- package/src/lib/project.d.ts.map +0 -1
- package/src/lib/project.js.map +0 -1
- package/src/lib/render/hydration-metadata.d.ts.map +0 -1
- package/src/lib/render/hydration-metadata.js.map +0 -1
- package/src/lib/render/hydration.d.ts.map +0 -1
- package/src/lib/render/hydration.js.map +0 -1
- package/src/lib/render/interpreter.d.ts.map +0 -1
- package/src/lib/render/interpreter.js.map +0 -1
- package/src/lib/render/server-style-collector.d.ts.map +0 -1
- package/src/lib/render/server-style-collector.js.map +0 -1
- package/src/lib/render/ssr-coordinator.d.ts.map +0 -1
- package/src/lib/render/ssr-coordinator.js.map +0 -1
- package/src/lib/render/string-dom.d.ts.map +0 -1
- package/src/lib/render/string-dom.js.map +0 -1
- package/src/lib/render/style-registry.d.ts.map +0 -1
- package/src/lib/render/style-registry.js.map +0 -1
- package/src/lib/render/style-scope.d.ts.map +0 -1
- package/src/lib/render/style-scope.js.map +0 -1
- package/src/lib/render/vnode.d.ts.map +0 -1
- package/src/lib/render/vnode.js.map +0 -1
- package/src/lib/server-render.d.ts.map +0 -1
- package/src/lib/server-render.js.map +0 -1
- package/src/lib/start.d.ts.map +0 -1
- package/src/lib/start.js.map +0 -1
- package/src/lib/template-contract.d.ts.map +0 -1
- package/src/lib/template-contract.js.map +0 -1
- package/src/lib/template.d.ts.map +0 -1
- package/src/lib/template.js.map +0 -1
- package/src/lib/testing.d.ts.map +0 -1
- package/src/lib/testing.js.map +0 -1
- package/src/lib/types.d.ts.map +0 -1
- package/src/lib/types.js.map +0 -1
- package/testing/public-api.d.ts.map +0 -1
- package/testing/public-api.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type CraftInjector, type CraftTransferSnapshot } from '@craft-ts/core';
|
|
2
|
-
import { type CraftComponent, type PropsOf } from './types';
|
|
1
|
+
import { type CraftInjector, type CraftSecurityPolicyInput, type CraftRuntimeMode, type CraftTransferSnapshot } from '@craft-ts/core';
|
|
2
|
+
import { type CraftComponent, type PropsOf } from './types.js';
|
|
3
3
|
export declare const CRAFT_TRANSFER_SCRIPT_ID = "__CRAFT_TRANSFER__";
|
|
4
4
|
export type RenderCraftOptions = Readonly<{
|
|
5
5
|
config: {
|
|
@@ -11,6 +11,13 @@ export type RenderCraftOptions = Readonly<{
|
|
|
11
11
|
signal?: AbortSignal;
|
|
12
12
|
includeStyles?: boolean;
|
|
13
13
|
includeSnapshotScript?: boolean;
|
|
14
|
+
mode?: CraftRuntimeMode;
|
|
15
|
+
securityPolicy?: CraftSecurityPolicyInput;
|
|
16
|
+
/**
|
|
17
|
+
* Nonce CSP de la requête. Il est reporté sur les styles rendus, ce qui
|
|
18
|
+
* permet une politique sans `'unsafe-inline'`.
|
|
19
|
+
*/
|
|
20
|
+
cspNonce?: string;
|
|
14
21
|
}>;
|
|
15
22
|
export type RenderCraftResult = Readonly<{
|
|
16
23
|
html: string;
|
|
@@ -26,9 +33,11 @@ export type RenderToStringOptions<Component extends CraftComponent<any>> = Reado
|
|
|
26
33
|
url?: string;
|
|
27
34
|
timeoutMs?: number;
|
|
28
35
|
signal?: AbortSignal;
|
|
36
|
+
mode?: CraftRuntimeMode;
|
|
37
|
+
securityPolicy?: CraftSecurityPolicyInput;
|
|
38
|
+
cspNonce?: string;
|
|
29
39
|
}>;
|
|
30
40
|
/** Low-level component convenience API built on the same per-request runtime. */
|
|
31
41
|
export declare function renderToString<Component extends CraftComponent<any>>(component: Component, options?: RenderToStringOptions<Component>): Promise<string>;
|
|
32
42
|
/** Kept type-visible for adapters that need to share the request injector. */
|
|
33
43
|
export type CraftServerInjector = CraftInjector;
|
|
34
|
-
//# sourceMappingURL=server-render.d.ts.map
|
package/src/lib/server-render.js
CHANGED
|
@@ -1,28 +1,58 @@
|
|
|
1
|
-
import { CRAFT_PLATFORM, CRAFT_PRIMITIVE_REGISTRY, CRAFT_SSR_RUNTIME, captureCraftTransferSnapshot, createCraftRenderIdentity, createServerPlatform, serializeCraftTransferSnapshot, } from '@craft-ts/core';
|
|
2
|
-
import { ɵcreateCraftApplicationInjector, ɵrunCraftAppInitializers, } from './bootstrap';
|
|
3
|
-
import { CRAFT_ROOT_COMPONENT } from './craft-host-tokens';
|
|
4
|
-
import { provideCraftRootComponent } from './bridge';
|
|
5
|
-
import { mountInterpretedComponentWithOptions, } from './render/interpreter';
|
|
6
|
-
import { createServerStyleCollector } from './render/server-style-collector';
|
|
7
|
-
import { CraftSsrCoordinator } from './render/ssr-coordinator';
|
|
8
|
-
import { createStringDomAdapter } from './render/string-dom';
|
|
9
|
-
import { CRAFT_COMPONENT } from './types';
|
|
1
|
+
import { CRAFT_PLATFORM, CRAFT_PRIMITIVE_REGISTRY, CRAFT_SECURITY_POLICY, CRAFT_SSR_RUNTIME, CraftCspNonce, captureCraftTransferSnapshot, createCraftSecurityPolicy, createCraftRenderIdentity, createServerPlatform, assertCraftCspNonce, serializeCraftTransferSnapshot, } from '@craft-ts/core';
|
|
2
|
+
import { ɵcreateCraftApplicationInjector, ɵrunCraftAppInitializers, } from './bootstrap.js';
|
|
3
|
+
import { CRAFT_ROOT_COMPONENT } from './craft-host-tokens.js';
|
|
4
|
+
import { provideCraftRootComponent } from './bridge.js';
|
|
5
|
+
import { mountInterpretedComponentWithOptions, } from './render/interpreter.js';
|
|
6
|
+
import { createServerStyleCollector } from './render/server-style-collector.js';
|
|
7
|
+
import { CraftSsrCoordinator } from './render/ssr-coordinator.js';
|
|
8
|
+
import { createStringDomAdapter } from './render/string-dom.js';
|
|
9
|
+
import { CRAFT_COMPONENT } from './types.js';
|
|
10
10
|
export const CRAFT_TRANSFER_SCRIPT_ID = '__CRAFT_TRANSFER__';
|
|
11
11
|
/** Renders one fully isolated Craft application request to deterministic HTML. */
|
|
12
12
|
export async function renderCraft(options) {
|
|
13
|
+
const requestedPolicy = options.securityPolicy
|
|
14
|
+
? createCraftSecurityPolicy(options.securityPolicy)
|
|
15
|
+
: undefined;
|
|
16
|
+
const defaultPolicy = requestedPolicy ?? createCraftSecurityPolicy();
|
|
17
|
+
const hasConfiguredPolicy = options.config.providers.some((provider) => typeof provider === 'object' &&
|
|
18
|
+
provider !== null &&
|
|
19
|
+
('provide' in provider
|
|
20
|
+
? provider.provide === CRAFT_SECURITY_POLICY
|
|
21
|
+
: 'token' in provider && provider.token === CRAFT_SECURITY_POLICY));
|
|
22
|
+
const controller = new AbortController();
|
|
23
|
+
const removeExternalAbort = forwardAbort(options.signal, controller);
|
|
24
|
+
const timeoutMs = options.timeoutMs ?? defaultPolicy.ssr.timeoutMs;
|
|
25
|
+
const timeout = setTimeout(() => controller.abort(new Error(`Craft SSR timed out after ${timeoutMs}ms.`)), timeoutMs);
|
|
13
26
|
const dom = createStringDomAdapter();
|
|
14
27
|
const platform = createServerPlatform({
|
|
15
28
|
url: options.url,
|
|
16
29
|
document: dom.document,
|
|
17
|
-
signal:
|
|
30
|
+
signal: controller.signal,
|
|
18
31
|
});
|
|
19
|
-
const coordinator = new CraftSsrCoordinator((source, mode) => platform.serverResources?.decide(source, mode));
|
|
32
|
+
const coordinator = new CraftSsrCoordinator((source, mode) => platform.serverResources?.decide(source, mode), defaultPolicy.ssr.sourceTimeoutMs);
|
|
20
33
|
const injector = ɵcreateCraftApplicationInjector(options.config, [
|
|
21
34
|
{ provide: CRAFT_PLATFORM, useValue: platform },
|
|
22
35
|
{ provide: CRAFT_SSR_RUNTIME, useValue: coordinator },
|
|
23
|
-
|
|
36
|
+
...(requestedPolicy || !hasConfiguredPolicy
|
|
37
|
+
? [
|
|
38
|
+
{
|
|
39
|
+
provide: CRAFT_SECURITY_POLICY,
|
|
40
|
+
useValue: requestedPolicy ?? defaultPolicy,
|
|
41
|
+
},
|
|
42
|
+
]
|
|
43
|
+
: []),
|
|
44
|
+
...(options.cspNonce
|
|
45
|
+
? [
|
|
46
|
+
{
|
|
47
|
+
provide: CraftCspNonce,
|
|
48
|
+
useValue: assertCraftCspNonce(options.cspNonce),
|
|
49
|
+
},
|
|
50
|
+
]
|
|
51
|
+
: []),
|
|
52
|
+
], options.mode);
|
|
24
53
|
let mounted;
|
|
25
54
|
try {
|
|
55
|
+
const securityPolicy = injector.get(CRAFT_SECURITY_POLICY, defaultPolicy);
|
|
26
56
|
await Promise.all(ɵrunCraftAppInitializers(injector));
|
|
27
57
|
const root = injector.get(CRAFT_ROOT_COMPONENT);
|
|
28
58
|
if (!root) {
|
|
@@ -39,16 +69,21 @@ export async function renderCraft(options) {
|
|
|
39
69
|
ssr: coordinator,
|
|
40
70
|
serverStyles,
|
|
41
71
|
});
|
|
42
|
-
await coordinator.untilSettled(
|
|
72
|
+
await coordinator.untilSettled(timeoutMs, controller.signal);
|
|
43
73
|
const styles = serverStyles.cssText();
|
|
44
|
-
const snapshot = captureCraftTransferSnapshot(injector.get(CRAFT_PRIMITIVE_REGISTRY));
|
|
74
|
+
const snapshot = captureCraftTransferSnapshot(injector.get(CRAFT_PRIMITIVE_REGISTRY), { policy: securityPolicy.transfer });
|
|
45
75
|
const rootHtml = dom.serialize(host);
|
|
76
|
+
const htmlSize = byteLength(rootHtml) + byteLength(styles);
|
|
77
|
+
if (htmlSize > securityPolicy.ssr.maxHtmlBytes) {
|
|
78
|
+
throw new Error(`CRAFT_SSR_HTML_TOO_LARGE: generated HTML exceeds ${securityPolicy.ssr.maxHtmlBytes} bytes.`);
|
|
79
|
+
}
|
|
80
|
+
const nonce = injector.get(CraftCspNonce, null);
|
|
46
81
|
const styleHtml = options.includeStyles === false || !styles
|
|
47
82
|
? ''
|
|
48
|
-
: `<style data-craft-ssr>${escapeStyleText(styles)}</style>`;
|
|
83
|
+
: `<style data-craft-ssr${nonce ? ` nonce="${escapeAttribute(nonce)}"` : ''}>${escapeStyleText(styles)}</style>`;
|
|
49
84
|
const snapshotHtml = options.includeSnapshotScript === false
|
|
50
85
|
? ''
|
|
51
|
-
: `<script id="${CRAFT_TRANSFER_SCRIPT_ID}" type="application/json">${serializeCraftTransferSnapshot(snapshot)}</script>`;
|
|
86
|
+
: `<script id="${CRAFT_TRANSFER_SCRIPT_ID}" type="application/json">${serializeCraftTransferSnapshot(snapshot, securityPolicy.transfer)}</script>`;
|
|
52
87
|
return {
|
|
53
88
|
html: `${styleHtml}${rootHtml}${snapshotHtml}`,
|
|
54
89
|
rootHtml,
|
|
@@ -57,6 +92,9 @@ export async function renderCraft(options) {
|
|
|
57
92
|
};
|
|
58
93
|
}
|
|
59
94
|
finally {
|
|
95
|
+
clearTimeout(timeout);
|
|
96
|
+
removeExternalAbort();
|
|
97
|
+
coordinator.dispose();
|
|
60
98
|
mounted?.destroy();
|
|
61
99
|
platform.history.dispose();
|
|
62
100
|
injector.destroy?.();
|
|
@@ -75,10 +113,31 @@ export async function renderToString(component, options = {}) {
|
|
|
75
113
|
url: options.url,
|
|
76
114
|
timeoutMs: options.timeoutMs,
|
|
77
115
|
signal: options.signal,
|
|
116
|
+
mode: options.mode,
|
|
117
|
+
...(options.securityPolicy ? { securityPolicy: options.securityPolicy } : {}),
|
|
118
|
+
...(options.cspNonce ? { cspNonce: options.cspNonce } : {}),
|
|
78
119
|
});
|
|
79
120
|
return result.html;
|
|
80
121
|
}
|
|
81
122
|
function escapeStyleText(value) {
|
|
82
123
|
return value.replace(/<\/style/gi, '<\\/style');
|
|
83
124
|
}
|
|
84
|
-
|
|
125
|
+
function escapeAttribute(value) {
|
|
126
|
+
return value
|
|
127
|
+
.replace(/&/g, '&')
|
|
128
|
+
.replace(/"/g, '"')
|
|
129
|
+
.replace(/'/g, ''');
|
|
130
|
+
}
|
|
131
|
+
function byteLength(value) {
|
|
132
|
+
return new TextEncoder().encode(value).byteLength;
|
|
133
|
+
}
|
|
134
|
+
function forwardAbort(source, target) {
|
|
135
|
+
if (!source)
|
|
136
|
+
return () => undefined;
|
|
137
|
+
const abort = () => target.abort(source.reason);
|
|
138
|
+
if (source.aborted)
|
|
139
|
+
abort();
|
|
140
|
+
else
|
|
141
|
+
source.addEventListener('abort', abort, { once: true });
|
|
142
|
+
return () => source.removeEventListener('abort', abort);
|
|
143
|
+
}
|
package/src/lib/start.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type CraftAppRef } from './bootstrap';
|
|
2
|
-
import { type HydrateCraftOptions, type HydratedCraftAppRef } from './hydrate';
|
|
1
|
+
import { type CraftAppRef } from './bootstrap.js';
|
|
2
|
+
import { type HydrateCraftOptions, type HydratedCraftAppRef } from './hydrate.js';
|
|
3
3
|
/** Options shared by a normal browser start and an SSR hydration. */
|
|
4
4
|
export type StartCraftOptions = HydrateCraftOptions;
|
|
5
5
|
export type StartedCraftAppRef = CraftAppRef | HydratedCraftAppRef;
|
|
@@ -10,4 +10,3 @@ export type StartedCraftAppRef = CraftAppRef | HydratedCraftAppRef;
|
|
|
10
10
|
* hydrated; otherwise a fresh client render is mounted.
|
|
11
11
|
*/
|
|
12
12
|
export declare function startCraft(options: StartCraftOptions): StartedCraftAppRef;
|
|
13
|
-
//# sourceMappingURL=start.d.ts.map
|
package/src/lib/start.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { bootstrapCraft, } from './bootstrap';
|
|
2
|
-
import { hydrateCraft, } from './hydrate';
|
|
1
|
+
import { bootstrapCraft, } from './bootstrap.js';
|
|
2
|
+
import { hydrateCraft, } from './hydrate.js';
|
|
3
3
|
/**
|
|
4
4
|
* Starts a Craft application in the browser.
|
|
5
5
|
*
|
|
@@ -14,7 +14,7 @@ export function startCraft(options) {
|
|
|
14
14
|
const bootstrapOptions = {
|
|
15
15
|
config: options.config,
|
|
16
16
|
host,
|
|
17
|
+
mode: options.mode,
|
|
17
18
|
};
|
|
18
19
|
return bootstrapCraft(bootstrapOptions);
|
|
19
20
|
}
|
|
20
|
-
//# sourceMappingURL=start.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { CraftComponent, ComponentTemplateOf, ComponentTemplateNameOf, FactoryContext, Output, PropsOf, TemplateMethodUse } from './types';
|
|
1
|
+
import type { CraftComponent, ComponentTemplateOf, ComponentTemplateNameOf, FactoryContext, Output, PropsOf, TemplateMethodUse } from './types.js';
|
|
2
2
|
import type { NamedYieldableValue, Yieldable, YieldableMethod } from '@craft-ts/core';
|
|
3
|
-
import type { ComponentNode, CraftDirectiveNode, CraftNodeChildren, DeferNode,
|
|
3
|
+
import type { ComponentNode, CraftDirectiveNode, CraftNodeChildren, DeferNode, ForNode, IfNode, ElementNodeBase } from './render/vnode.js';
|
|
4
4
|
export type TemplateContractError<Message extends string> = {
|
|
5
5
|
readonly error: Message;
|
|
6
6
|
};
|
|
@@ -32,7 +32,7 @@ type InvalidOutputCallbacks<ActualProps, Component extends CraftComponent<any, a
|
|
|
32
32
|
type ComponentOfNode<Node> = Node extends {
|
|
33
33
|
readonly component: infer Component;
|
|
34
34
|
} ? Component extends CraftComponent<any, any> ? Component : never : never;
|
|
35
|
-
type VisitChildren<Children, Registry extends readonly CraftComponent<any, any>[], Seen extends readonly unknown[]> = Children extends readonly (infer Child)[] ? VisitChildren<Child, Registry, Seen> : Children extends ElementNodeBase<any, any, infer Props, infer Nested> ? InvalidElementCallbacks<Props> | VisitChildren<Nested, Registry, Seen> : Children extends ComponentNode<infer ActualProps, any, any> ? ComponentPropsMatch<ActualProps, ComponentOfNode<Children>> | InvalidOutputCallbacks<ActualProps, ComponentOfNode<Children>> | VisitComponent<ComponentOfNode<Children>, Registry, Seen> : Children extends CraftDirectiveNode<any> ? VisitChildren<Children['node'], Registry, Seen> : Children extends
|
|
35
|
+
type VisitChildren<Children, Registry extends readonly CraftComponent<any, any>[], Seen extends readonly unknown[]> = Children extends readonly (infer Child)[] ? VisitChildren<Child, Registry, Seen> : Children extends ElementNodeBase<any, any, infer Props, infer Nested> ? InvalidElementCallbacks<Props> | VisitChildren<Nested, Registry, Seen> : Children extends ComponentNode<infer ActualProps, any, any> ? ComponentPropsMatch<ActualProps, ComponentOfNode<Children>> | InvalidOutputCallbacks<ActualProps, ComponentOfNode<Children>> | VisitComponent<ComponentOfNode<Children>, Registry, Seen> : Children extends CraftDirectiveNode<any> ? VisitChildren<Children['node'], Registry, Seen> : Children extends ForNode<infer _Item, infer _Key, infer _Dependencies> ? VisitChildren<ReturnType<Children['itemTemplate']> | (Children['empty'] extends (...args: any[]) => infer Empty ? Empty : never), Registry, Seen> : Children extends DeferNode<infer Loaded, infer _Dependencies> ? VisitChildren<Loaded extends CraftComponent<any, any> ? ComponentNode<PropsOf<Loaded>, {}, Loaded> : ReturnType<Children['resolve']>, Registry, Seen> : true;
|
|
36
36
|
type VisitComponent<Component extends CraftComponent<any, any>, Registry extends readonly CraftComponent<any, any>[], Seen extends readonly unknown[]> = IsAny<Component> extends true ? TemplateContractError<'Dynamic component references cannot be resolved.'> : IsUnion<Component> extends true ? TemplateContractError<'Union component references cannot be resolved by the template contract; register a concrete component.'> : Registered<Component, Registry> extends true ? Component extends Seen[number] ? true : VisitChildren<ReturnType<ComponentTemplateOf<Component>>, Registry, [
|
|
37
37
|
...Seen,
|
|
38
38
|
Component
|
|
@@ -51,21 +51,21 @@ export type TemplateContractAssertions<Component extends CraftComponent<any, any
|
|
|
51
51
|
*/
|
|
52
52
|
export type SetupTestComponentTemplate<Component extends CraftComponent<any, any>, Registry extends readonly CraftComponent<any, any>[] = []> = ContractResult<RootVisit<Component, Registry>> extends infer Result ? Result extends TemplateContractError<any> ? Result : TemplateContractAssertions<Component, Registry> : never;
|
|
53
53
|
type ElementMatching<Children, Tag extends string, Props> = Children extends ElementNodeBase<any, infer ActualTag, infer ActualProps> ? ActualTag extends Tag ? [Props] extends [never] ? true : ActualProps extends Props ? Props extends ActualProps ? true : false : false : false : never;
|
|
54
|
-
type FindElement<Children, Tag extends string, Props = never> = Children extends readonly (infer Child)[] ? FindElement<Child, Tag, Props> : Children extends ElementNodeBase<any, infer ActualTag, any> ? ActualTag extends Tag ? ElementMatching<Children, Tag, Props> : FindElement<Children['children'], Tag, Props> : Children extends CraftDirectiveNode<any> ? FindElement<Children['node'], Tag, Props> : Children extends ComponentNode<any, any, infer Component> ? FindElement<ReturnType<ComponentTemplateOf<Component>>, Tag, Props> : Children extends
|
|
54
|
+
type FindElement<Children, Tag extends string, Props = never> = Children extends readonly (infer Child)[] ? FindElement<Child, Tag, Props> : Children extends ElementNodeBase<any, infer ActualTag, any> ? ActualTag extends Tag ? ElementMatching<Children, Tag, Props> : FindElement<Children['children'], Tag, Props> : Children extends CraftDirectiveNode<any> ? FindElement<Children['node'], Tag, Props> : Children extends ComponentNode<any, any, infer Component> ? FindElement<ReturnType<ComponentTemplateOf<Component>>, Tag, Props> : Children extends ForNode<any, any> ? FindElement<ReturnType<Children['itemTemplate']> | (Children['empty'] extends (...args: any[]) => infer Empty ? Empty : never), Tag, Props> : Children extends IfNode<infer ConditionName, any, infer True, infer False> ? FindElement<True | False, Tag, Props> : Children extends DeferNode<infer Loaded> ? FindElement<Loaded extends CraftComponent<any, any> ? ReturnType<ComponentTemplateOf<Loaded>> : ReturnType<Children['resolve']>, Tag, Props> : false;
|
|
55
55
|
export type TemplateHasElement<Children extends CraftNodeChildren, Tag extends string> = FindElement<Children, Tag>;
|
|
56
56
|
/** Checks the exact tag and props of a matching element. */
|
|
57
57
|
export type TemplateHasElementWithProps<Children extends CraftNodeChildren, Tag extends string, Props extends object> = FindElement<Children, Tag, Props>;
|
|
58
|
-
type VisitProperty<Children, Tag extends string, Property extends string, Value> = Children extends readonly (infer Child)[] ? VisitProperty<Child, Tag, Property, Value> : Children extends ElementNodeBase<any, infer ActualTag, infer Props, infer Nested> ? ActualTag extends Tag ? Property extends keyof Props ? NonNullable<Props[Property]> extends Value ? true : false : false : VisitProperty<Nested, Tag, Property, Value> : Children extends CraftDirectiveNode<any> ? VisitProperty<Children['node'], Tag, Property, Value> : Children extends ComponentNode<any, any, infer Component> ? VisitProperty<ReturnType<ComponentTemplateOf<Component>>, Tag, Property, Value> : Children extends
|
|
58
|
+
type VisitProperty<Children, Tag extends string, Property extends string, Value> = Children extends readonly (infer Child)[] ? VisitProperty<Child, Tag, Property, Value> : Children extends ElementNodeBase<any, infer ActualTag, infer Props, infer Nested> ? ActualTag extends Tag ? Property extends keyof Props ? NonNullable<Props[Property]> extends Value ? true : false : false : VisitProperty<Nested, Tag, Property, Value> : Children extends CraftDirectiveNode<any> ? VisitProperty<Children['node'], Tag, Property, Value> : Children extends ComponentNode<any, any, infer Component> ? VisitProperty<ReturnType<ComponentTemplateOf<Component>>, Tag, Property, Value> : Children extends ForNode<any, any> ? VisitProperty<(ReturnType<Children['itemTemplate']> | (Children['empty'] extends (...args: any[]) => infer Empty ? Empty : never)) & CraftNodeChildren, Tag, Property, Value> : Children extends DeferNode<infer Loaded> ? VisitProperty<Loaded extends CraftComponent<any, any> ? ReturnType<ComponentTemplateOf<Loaded>> : ReturnType<Children['resolve']>, Tag, Property, Value> : false;
|
|
59
59
|
/** Checks the type of a static or dynamic property on an element. */
|
|
60
60
|
export type TemplateHasProperty<Children extends CraftNodeChildren, Tag extends string, Property extends string, Value> = VisitProperty<Children, Tag, Property, Value>;
|
|
61
61
|
/** Checks that an element property is driven by a no-argument generator. */
|
|
62
62
|
export type TemplateHasYieldableProperty<Children extends CraftNodeChildren, Tag extends string, Property extends string, Result> = TemplateHasProperty<Children, Tag, Property, Yieldable<[], Result, unknown>>;
|
|
63
|
-
type VisitContextUse<Children, Tag extends string, Property extends string, ContextMethod extends string> = Children extends readonly (infer Child)[] ? VisitContextUse<Child, Tag, Property, ContextMethod> : Children extends ElementNodeBase<any, infer ActualTag, infer Props, infer Nested> ? ActualTag extends Tag ? Property extends keyof Props ? NonNullable<Props[Property]> extends (...args: any[]) => Generator<infer Yielded, infer Returned, any> ? TemplateMethodUse<ContextMethod> extends Yielded | Returned ? true : Extract<Yielded | Returned, TemplateMethodUse<ContextMethod>> extends never ? false : true : false : false : VisitContextUse<Nested, Tag, Property, ContextMethod> : Children extends CraftDirectiveNode<any> ? VisitContextUse<Children['node'], Tag, Property, ContextMethod> : Children extends ComponentNode<any, any, infer Component> ? VisitContextUse<ReturnType<ComponentTemplateOf<Component>>, Tag, Property, ContextMethod> : Children extends
|
|
63
|
+
type VisitContextUse<Children, Tag extends string, Property extends string, ContextMethod extends string> = Children extends readonly (infer Child)[] ? VisitContextUse<Child, Tag, Property, ContextMethod> : Children extends ElementNodeBase<any, infer ActualTag, infer Props, infer Nested> ? ActualTag extends Tag ? Property extends keyof Props ? NonNullable<Props[Property]> extends (...args: any[]) => Generator<infer Yielded, infer Returned, any> ? TemplateMethodUse<ContextMethod> extends Yielded | Returned ? true : Extract<Yielded | Returned, TemplateMethodUse<ContextMethod>> extends never ? false : true : false : false : VisitContextUse<Nested, Tag, Property, ContextMethod> : Children extends CraftDirectiveNode<any> ? VisitContextUse<Children['node'], Tag, Property, ContextMethod> : Children extends ComponentNode<any, any, infer Component> ? VisitContextUse<ReturnType<ComponentTemplateOf<Component>>, Tag, Property, ContextMethod> : Children extends ForNode<any, any> ? VisitContextUse<(ReturnType<Children['itemTemplate']> | (Children['empty'] extends (...args: any[]) => infer Empty ? Empty : never)) & CraftNodeChildren, Tag, Property, ContextMethod> : Children extends DeferNode<infer Loaded> ? VisitContextUse<Loaded extends CraftComponent<any, any> ? ReturnType<ComponentTemplateOf<Loaded>> : ReturnType<Children['resolve']>, Tag, Property, ContextMethod> : false;
|
|
64
64
|
/** Checks that a property callback delegates to a named template context member. */
|
|
65
65
|
export type TemplateDelegatesToContext<Children extends CraftNodeChildren, Tag extends string, Property extends string, ContextMethod extends string = Property> = VisitContextUse<Children, Tag, Property, ContextMethod>;
|
|
66
66
|
type EventHandlerOf<Props, EventName extends string> = EventName extends keyof Props ? Props[EventName] : `on${Capitalize<EventName>}` extends keyof Props ? Props[`on${Capitalize<EventName>}`] : never;
|
|
67
67
|
type VisitEvent<Children, Tag extends string, EventName extends string, Handler extends (...args: any[]) => any> = Children extends readonly (infer Child)[] ? VisitEvent<Child, Tag, EventName, Handler> : Children extends ElementNodeBase<any, infer ActualTag, infer Props> ? ActualTag extends Tag ? EventHandlerOf<Props, EventName> extends Handler ? Handler extends EventHandlerOf<Props, EventName> ? true : false : false : VisitEvent<Children['children'], Tag, EventName, Handler> : Children extends CraftDirectiveNode<any> ? VisitEvent<Children['node'], Tag, EventName, Handler> : Children extends ComponentNode<any, any, infer Component> ? VisitEvent<ReturnType<ComponentTemplateOf<Component>>, Tag, EventName, Handler> : false;
|
|
68
|
-
type VisitOutput<Children, Target extends CraftComponent<any, any>, Name extends keyof PropsOf<Target> & string, Handler extends (...args: any[]) => any> = Children extends readonly (infer Child)[] ? VisitOutput<Child, Target, Name, Handler> : Children extends ElementNodeBase<any, any, any, infer Nested> ? VisitOutput<Nested, Target, Name, Handler> : Children extends CraftDirectiveNode<any> ? VisitOutput<Children['node'], Target, Name, Handler> : Children extends ComponentNode<infer Props, any, infer Actual> ? [Actual] extends [Target] ? Name extends keyof Props ? Props[Name] extends Handler ? Handler extends Props[Name] ? true : false : false : false : VisitOutput<ReturnType<ComponentTemplateOf<Actual>>, Target, Name, Handler> : Children extends
|
|
68
|
+
type VisitOutput<Children, Target extends CraftComponent<any, any>, Name extends keyof PropsOf<Target> & string, Handler extends (...args: any[]) => any> = Children extends readonly (infer Child)[] ? VisitOutput<Child, Target, Name, Handler> : Children extends ElementNodeBase<any, any, any, infer Nested> ? VisitOutput<Nested, Target, Name, Handler> : Children extends CraftDirectiveNode<any> ? VisitOutput<Children['node'], Target, Name, Handler> : Children extends ComponentNode<infer Props, any, infer Actual> ? [Actual] extends [Target] ? Name extends keyof Props ? Props[Name] extends Handler ? Handler extends Props[Name] ? true : false : false : false : VisitOutput<ReturnType<ComponentTemplateOf<Actual>>, Target, Name, Handler> : Children extends ForNode<any, any> ? VisitOutput<ReturnType<Children['itemTemplate']> | (Children['empty'] extends (...args: any[]) => infer Empty ? Empty : never), Target, Name, Handler> : Children extends DeferNode<infer Loaded> ? VisitOutput<Loaded extends CraftComponent<any, any> ? ReturnType<ComponentTemplateOf<Loaded>> : ReturnType<Children['resolve']>, Target, Name, Handler> : false;
|
|
69
69
|
/** Checks an event callback and therefore preserves its argument type. */
|
|
70
70
|
export type TemplateHasEvent<Children extends CraftNodeChildren, Tag extends string, EventName extends string, Handler extends (...args: any[]) => any> = VisitEvent<Children, Tag, EventName, Handler>;
|
|
71
71
|
/** Checks that a DOM event is a generator callback with the given arguments. */
|
|
@@ -75,7 +75,7 @@ export type TemplateHasYieldableMethodEvent<Children extends CraftNodeChildren,
|
|
|
75
75
|
type VisitYieldableEvent<Children, Tag extends string, EventName extends string, Args extends unknown[]> = Children extends readonly (infer Child)[] ? VisitYieldableEvent<Child, Tag, EventName, Args> : Children extends ElementNodeBase<any, infer ActualTag, infer Props> ? ActualTag extends Tag ? EventHandlerOf<Props, EventName> extends (...args: infer ActualArgs) => Generator<any, any, any> ? ActualArgs extends Args ? Args extends ActualArgs ? true : false : false : false : VisitYieldableEvent<Children['children'], Tag, EventName, Args> : Children extends CraftDirectiveNode<any> ? VisitYieldableEvent<Children['node'], Tag, EventName, Args> : Children extends ComponentNode<any, any, infer Component> ? VisitYieldableEvent<ReturnType<ComponentTemplateOf<Component>>, Tag, EventName, Args> : false;
|
|
76
76
|
/** Checks an output callback passed to a concrete Craft child component. */
|
|
77
77
|
export type TemplateHasOutput<Children extends CraftNodeChildren, Component extends CraftComponent<any, any>, Name extends keyof PropsOf<Component> & string, Handler extends (...args: any[]) => any> = VisitOutput<Children, Component, Name, Handler>;
|
|
78
|
-
export type TemplateUsesComponent<Children extends CraftNodeChildren, Component extends CraftComponent<any, any>> = Children extends readonly (infer Child)[] ? TemplateUsesComponent<Child & CraftNodeChildren, Component> : Children extends ComponentNode<any, any, infer Actual> ? [Actual] extends [Component] ? true : TemplateUsesComponent<ReturnType<ComponentTemplateOf<Actual>>, Component> : Children extends ElementNodeBase<any, any, any, infer Nested> ? TemplateUsesComponent<Nested, Component> : Children extends CraftDirectiveNode<any> ? TemplateUsesComponent<Children['node'], Component> : Children extends
|
|
78
|
+
export type TemplateUsesComponent<Children extends CraftNodeChildren, Component extends CraftComponent<any, any>> = Children extends readonly (infer Child)[] ? TemplateUsesComponent<Child & CraftNodeChildren, Component> : Children extends ComponentNode<any, any, infer Actual> ? [Actual] extends [Component] ? true : TemplateUsesComponent<ReturnType<ComponentTemplateOf<Actual>>, Component> : Children extends ElementNodeBase<any, any, any, infer Nested> ? TemplateUsesComponent<Nested, Component> : Children extends CraftDirectiveNode<any> ? TemplateUsesComponent<Children['node'], Component> : Children extends ForNode<any, any> ? TemplateUsesComponent<(ReturnType<Children['itemTemplate']> | (Children['empty'] extends (...args: any[]) => infer Empty ? Empty : never)) & CraftNodeChildren, Component> : Children extends DeferNode<infer Loaded> ? Loaded extends CraftComponent<any, any> ? [Loaded] extends [Component] ? true : TemplateUsesComponent<ReturnType<ComponentTemplateOf<Loaded>>, Component> : TemplateUsesComponent<ReturnType<Children['resolve']>, Component> : false;
|
|
79
79
|
type VisibilityValue = boolean | 'nonEmpty' | 'empty';
|
|
80
80
|
type Visibility = Readonly<Record<string, VisibilityValue>>;
|
|
81
81
|
type VisibilityMatches<Actual extends Visibility, Expected extends Visibility> = keyof Expected extends never ? keyof Actual extends never ? true : false : {
|
|
@@ -105,13 +105,13 @@ type VisitRenderedState<Children, StateName extends string, Expected extends Vis
|
|
|
105
105
|
], [
|
|
106
106
|
...Depth,
|
|
107
107
|
unknown
|
|
108
|
-
]> : Children extends
|
|
108
|
+
]> : Children extends ForNode<any, any, any, infer SourceName, infer Item, infer Empty> ? VisitRenderedState<Item, StateName, Expected, Extract<SourceName, string> extends never ? Current : AddVisibility<Current, Extract<SourceName, string>, 'nonEmpty'>, Seen, [
|
|
109
109
|
...Depth,
|
|
110
110
|
unknown
|
|
111
111
|
]> | VisitRenderedState<Empty, StateName, Expected, Extract<SourceName, string> extends never ? Current : AddVisibility<Current, Extract<SourceName, string>, 'empty'>, Seen, [
|
|
112
112
|
...Depth,
|
|
113
113
|
unknown
|
|
114
|
-
]> : Children extends
|
|
114
|
+
]> : Children extends IfNode<infer ConditionName, any, infer True, infer False> ? VisitRenderedState<True, StateName, Expected, AddVisibility<Current, ConditionName, true>, Seen, [
|
|
115
115
|
...Depth,
|
|
116
116
|
unknown
|
|
117
117
|
]> | VisitRenderedState<False, StateName, Expected, AddVisibility<Current, ConditionName, false>, Seen, [
|
|
@@ -145,13 +145,13 @@ type VisitAvailableAction<Children, EventName extends string, LocalName extends
|
|
|
145
145
|
], [
|
|
146
146
|
...Depth,
|
|
147
147
|
unknown
|
|
148
|
-
]> : Children extends
|
|
148
|
+
]> : Children extends ForNode<any, any, any, infer SourceName, infer Item, infer Empty> ? VisitAvailableAction<Item, EventName, LocalName, Expected, Extract<SourceName, string> extends never ? Current : AddVisibility<Current, Extract<SourceName, string>, 'nonEmpty'>, Seen, [
|
|
149
149
|
...Depth,
|
|
150
150
|
unknown
|
|
151
151
|
]> | VisitAvailableAction<Empty, EventName, LocalName, Expected, Extract<SourceName, string> extends never ? Current : AddVisibility<Current, Extract<SourceName, string>, 'empty'>, Seen, [
|
|
152
152
|
...Depth,
|
|
153
153
|
unknown
|
|
154
|
-
]> : Children extends
|
|
154
|
+
]> : Children extends IfNode<infer ConditionName, any, infer True, infer False> ? VisitAvailableAction<True, EventName, LocalName, Expected, AddVisibility<Current, ConditionName, true>, Seen, [
|
|
155
155
|
...Depth,
|
|
156
156
|
unknown
|
|
157
157
|
]> | VisitAvailableAction<False, EventName, LocalName, Expected, AddVisibility<Current, ConditionName, false>, Seen, [
|
|
@@ -191,10 +191,10 @@ type VisitNamedElementIdentities<Children, Owner extends string = never, Seen ex
|
|
|
191
191
|
], [
|
|
192
192
|
...Depth,
|
|
193
193
|
unknown
|
|
194
|
-
]> : Children extends
|
|
194
|
+
]> : Children extends ForNode<any, any, any, any, infer Item, infer Empty> ? VisitNamedElementIdentities<Item | Empty, Owner, Seen, [
|
|
195
195
|
...Depth,
|
|
196
196
|
unknown
|
|
197
|
-
]> : Children extends
|
|
197
|
+
]> : Children extends IfNode<any, any, infer True, infer False> ? VisitNamedElementIdentities<True | False, Owner, Seen, [
|
|
198
198
|
...Depth,
|
|
199
199
|
unknown
|
|
200
200
|
]> : Children extends DeferNode<infer Loaded> ? VisitNamedElementIdentities<Loaded extends CraftComponent<any, any> ? ReturnType<ComponentTemplateOf<Loaded>> : ReturnType<Children['resolve']>, Owner, Seen, [
|
|
@@ -227,10 +227,10 @@ type NamedElementPropsOf<Children, Identity extends string, Owner extends string
|
|
|
227
227
|
], [
|
|
228
228
|
...Depth,
|
|
229
229
|
unknown
|
|
230
|
-
]> : Children extends
|
|
230
|
+
]> : Children extends ForNode<any, any, any, any, infer Item, infer Empty> ? NamedElementPropsOf<Item | Empty, Identity, Owner, Seen, [
|
|
231
231
|
...Depth,
|
|
232
232
|
unknown
|
|
233
|
-
]> : Children extends
|
|
233
|
+
]> : Children extends IfNode<any, any, infer True, infer False> ? NamedElementPropsOf<True | False, Identity, Owner, Seen, [
|
|
234
234
|
...Depth,
|
|
235
235
|
unknown
|
|
236
236
|
]> : Children extends DeferNode<infer Loaded> ? NamedElementPropsOf<Loaded extends CraftComponent<any, any> ? ReturnType<ComponentTemplateOf<Loaded>> : ReturnType<Children['resolve']>, Identity, Owner, Seen, [
|
|
@@ -256,10 +256,10 @@ type NamedElementDelegatesToContextOf<Children, Identity extends string, Propert
|
|
|
256
256
|
], [
|
|
257
257
|
...Depth,
|
|
258
258
|
unknown
|
|
259
|
-
]> : Children extends
|
|
259
|
+
]> : Children extends ForNode<any, any, any, any, infer Item, infer Empty> ? NamedElementDelegatesToContextOf<Item | Empty, Identity, Property, ContextMethod, Owner, Seen, [
|
|
260
260
|
...Depth,
|
|
261
261
|
unknown
|
|
262
|
-
]> : Children extends
|
|
262
|
+
]> : Children extends IfNode<any, any, infer True, infer False> ? NamedElementDelegatesToContextOf<True | False, Identity, Property, ContextMethod, Owner, Seen, [
|
|
263
263
|
...Depth,
|
|
264
264
|
unknown
|
|
265
265
|
]> : Children extends DeferNode<infer Loaded> ? NamedElementDelegatesToContextOf<Loaded extends CraftComponent<any, any> ? ReturnType<ComponentTemplateOf<Loaded>> : ReturnType<Children['resolve']>, Identity, Property, ContextMethod, Owner, Seen, [
|
|
@@ -283,13 +283,13 @@ type NamedElementRendersStateWhenOf<Children, Identity extends string, Property
|
|
|
283
283
|
], [
|
|
284
284
|
...Depth,
|
|
285
285
|
unknown
|
|
286
|
-
]> : Children extends
|
|
286
|
+
]> : Children extends ForNode<any, any, any, infer SourceName, infer Item, infer Empty> ? NamedElementRendersStateWhenOf<Item, Identity, Property, StateName, Expected, Owner, Extract<SourceName, string> extends never ? Current : AddVisibility<Current, Extract<SourceName, string>, 'nonEmpty'>, Seen, [
|
|
287
287
|
...Depth,
|
|
288
288
|
unknown
|
|
289
289
|
]> | NamedElementRendersStateWhenOf<Empty, Identity, Property, StateName, Expected, Owner, Extract<SourceName, string> extends never ? Current : AddVisibility<Current, Extract<SourceName, string>, 'empty'>, Seen, [
|
|
290
290
|
...Depth,
|
|
291
291
|
unknown
|
|
292
|
-
]> : Children extends
|
|
292
|
+
]> : Children extends IfNode<infer ConditionName, any, infer True, infer False> ? NamedElementRendersStateWhenOf<True, Identity, Property, StateName, Expected, Owner, AddVisibility<Current, ConditionName, true>, Seen, [
|
|
293
293
|
...Depth,
|
|
294
294
|
unknown
|
|
295
295
|
]> | NamedElementRendersStateWhenOf<False, Identity, Property, StateName, Expected, Owner, AddVisibility<Current, ConditionName, false>, Seen, [
|
|
@@ -320,13 +320,13 @@ type VisitNamedElement<Children, Identity extends string, Expected extends Visib
|
|
|
320
320
|
], [
|
|
321
321
|
...Depth,
|
|
322
322
|
unknown
|
|
323
|
-
]> : Children extends
|
|
323
|
+
]> : Children extends ForNode<any, any, any, infer SourceName, infer Item, infer Empty> ? VisitNamedElement<Item, Identity, Expected, Owner, Extract<SourceName, string> extends never ? Current : AddVisibility<Current, Extract<SourceName, string>, 'nonEmpty'>, Seen, [
|
|
324
324
|
...Depth,
|
|
325
325
|
unknown
|
|
326
326
|
]> | VisitNamedElement<Empty, Identity, Expected, Owner, Extract<SourceName, string> extends never ? Current : AddVisibility<Current, Extract<SourceName, string>, 'empty'>, Seen, [
|
|
327
327
|
...Depth,
|
|
328
328
|
unknown
|
|
329
|
-
]> : Children extends
|
|
329
|
+
]> : Children extends IfNode<infer ConditionName, any, infer True, infer False> ? VisitNamedElement<True, Identity, Expected, Owner, AddVisibility<Current, ConditionName, true>, Seen, [
|
|
330
330
|
...Depth,
|
|
331
331
|
unknown
|
|
332
332
|
]> | VisitNamedElement<False, Identity, Expected, Owner, AddVisibility<Current, ConditionName, false>, Seen, [
|
|
@@ -344,4 +344,3 @@ export type TemplateRendersNamedElementWhen<Children, Identity extends TemplateN
|
|
|
344
344
|
readonly when: infer When extends Visibility;
|
|
345
345
|
} ? When : {}, TemplateContractOwner<Children>>>;
|
|
346
346
|
export {};
|
|
347
|
-
//# sourceMappingURL=template-contract.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=template-contract.js.map
|
package/src/lib/template.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { CraftNodeChildren, CraftNodeChildrenDependencies, TemplateNode } from './render/vnode';
|
|
2
|
-
import { type CraftTemplate, type InputValue } from './types';
|
|
1
|
+
import type { CraftNodeChildren, CraftNodeChildrenDependencies, TemplateNode } from './render/vnode.js';
|
|
2
|
+
import { type CraftTemplate, type InputValue } from './types.js';
|
|
3
3
|
type TemplateContextInput<Context> = Context extends object ? {
|
|
4
4
|
[Key in keyof Context]: Context[Key] | InputValue<Context[Key]>;
|
|
5
5
|
} : Context | InputValue<Context>;
|
|
@@ -8,4 +8,3 @@ export declare function craftTemplate<Context, Output extends CraftNodeChildren
|
|
|
8
8
|
/** Schedules a typed template for rendering without evaluating it eagerly. */
|
|
9
9
|
export declare function renderTemplate<Context, Output extends CraftNodeChildren>(template: CraftTemplate<Context, Output>, context: TemplateContextInput<NoInfer<Context>>): TemplateNode<Context, Output, CraftNodeChildrenDependencies<Output>>;
|
|
10
10
|
export {};
|
|
11
|
-
//# sourceMappingURL=template.d.ts.map
|
package/src/lib/template.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CRAFT_TEMPLATE, } from './types';
|
|
2
|
-
import { currentCraftRenderContext } from './render/vnode';
|
|
1
|
+
import { CRAFT_TEMPLATE, } from './types.js';
|
|
2
|
+
import { currentCraftRenderContext } from './render/vnode.js';
|
|
3
3
|
/** Creates an inert, reusable and context-checked Craft template fragment. */
|
|
4
4
|
export function craftTemplate(renderer) {
|
|
5
5
|
const template = ((context) => renderer(context));
|
|
@@ -18,4 +18,3 @@ export function renderTemplate(template, context) {
|
|
|
18
18
|
declarationContext: currentCraftRenderContext(),
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
|
-
//# sourceMappingURL=template.js.map
|
package/src/lib/testing.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type CraftServiceProvider, type CompleteServiceDependencyMapFromYielded, type FlattenDependencyTree } from '@craft-ts/core';
|
|
2
|
-
import { type ComponentFactory, type ComponentTemplate, type CraftComponent, type CraftDirective, type FactoryContext, type FactoryYielded, type PropsOf, type TemplateDependencies } from './types';
|
|
3
|
-
import type { CraftTemplateLocatorApi } from './locator';
|
|
2
|
+
import { type ComponentFactory, type ComponentTemplate, type CraftComponent, type CraftDirective, type FactoryContext, type FactoryYielded, type PropsOf, type TemplateDependencies } from './types.js';
|
|
3
|
+
import type { CraftTemplateLocatorApi } from './locator.js';
|
|
4
4
|
type IsAny<T> = 0 extends 1 & T ? true : false;
|
|
5
5
|
type ComponentFactoryOf<Component> = Component extends CraftComponent<any, any, infer Factory extends ComponentFactory> ? Factory : ComponentFactory;
|
|
6
6
|
type ComponentTemplateDepsOf<Component> = Component extends CraftComponent<any, any, any, any, any, infer TemplateDeps> ? TemplateDeps : {};
|
|
@@ -105,7 +105,7 @@ export declare function renderCraftComponent<Component extends CraftComponent<an
|
|
|
105
105
|
}): Promise<{
|
|
106
106
|
nativeElement: HTMLDivElement;
|
|
107
107
|
element: HTMLDivElement;
|
|
108
|
-
mounted: import("./render/interpreter").MountedCraftComponent<PropsOf<Component>>;
|
|
108
|
+
mounted: import("./render/interpreter.js").MountedCraftComponent<PropsOf<Component>>;
|
|
109
109
|
injector: import("@craft-ts/core").ɵEnvironmentInjector & import("@craft-ts/core").CraftInjector;
|
|
110
110
|
detectChanges: () => void;
|
|
111
111
|
flush: () => Promise<void>;
|
|
@@ -154,4 +154,3 @@ export declare const setupCraftDirectiveTemplateTest: typeof setupCraftDirective
|
|
|
154
154
|
*/
|
|
155
155
|
export declare function assertAccessible(container: Element): Promise<void>;
|
|
156
156
|
export {};
|
|
157
|
-
//# sourceMappingURL=testing.d.ts.map
|
package/src/lib/testing.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { createEnvironmentInjector, ElementRef, Injector, runInInjectionContext, ɵEffectScheduler, ɵINJECTOR_SCOPE, } from './host-runtime';
|
|
1
|
+
import { createEnvironmentInjector, ElementRef, Injector, runInInjectionContext, ɵEffectScheduler, ɵINJECTOR_SCOPE, } from './host-runtime.js';
|
|
2
2
|
import { CRAFT_SERVICE_PROVIDER_BRAND, createExposedServiceValue, getRegisteredAppStartServices, getServiceMetaData, runServiceAppStart, SERVICE_RUNTIME_OVERRIDES, } from '@craft-ts/core';
|
|
3
|
-
import { mountInterpretedComponent, mountInterpretedComponentTemplate, } from './render/interpreter';
|
|
4
|
-
import { craftComponent } from './component';
|
|
5
|
-
import { executeCraftComponentFactory } from './factory-runtime';
|
|
6
|
-
import { CRAFT_COMPONENT, CRAFT_DIRECTIVE, } from './types';
|
|
3
|
+
import { mountInterpretedComponent, mountInterpretedComponentTemplate, } from './render/interpreter.js';
|
|
4
|
+
import { craftComponent } from './component.js';
|
|
5
|
+
import { executeCraftComponentFactory } from './factory-runtime.js';
|
|
6
|
+
import { CRAFT_COMPONENT, CRAFT_DIRECTIVE, } from './types.js';
|
|
7
7
|
function isProvider(value) {
|
|
8
8
|
return (typeof value === 'object' &&
|
|
9
9
|
value !== null &&
|
|
@@ -413,4 +413,3 @@ export async function assertAccessible(container) {
|
|
|
413
413
|
throw new Error(`Accessibility violations:\n- ${violations.join('\n- ')}`);
|
|
414
414
|
}
|
|
415
415
|
}
|
|
416
|
-
//# sourceMappingURL=testing.js.map
|