@openelement/core 0.41.0-alpha.1
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/LICENSE +21 -0
- package/README.md +36 -0
- package/package.json +124 -0
- package/src/binding-activation.d.ts +2 -0
- package/src/binding-activation.js +254 -0
- package/src/binding-descriptor.d.ts +79 -0
- package/src/binding-descriptor.js +9 -0
- package/src/context.d.ts +32 -0
- package/src/context.js +76 -0
- package/src/csr.d.ts +13 -0
- package/src/csr.js +14 -0
- package/src/dsd-hydration-events.d.ts +2 -0
- package/src/dsd-hydration-events.js +13 -0
- package/src/dsd-hydration.d.ts +40 -0
- package/src/dsd-hydration.js +48 -0
- package/src/errors.d.ts +54 -0
- package/src/errors.js +113 -0
- package/src/event-hydration.d.ts +12 -0
- package/src/event-hydration.js +118 -0
- package/src/event-marker.d.ts +7 -0
- package/src/event-marker.js +54 -0
- package/src/html-escape.d.ts +29 -0
- package/src/html-escape.js +126 -0
- package/src/hydrate.d.ts +15 -0
- package/src/hydrate.js +15 -0
- package/src/index.d.ts +58 -0
- package/src/index.js +46 -0
- package/src/island-transform.d.ts +14 -0
- package/src/island-transform.js +60 -0
- package/src/island.d.ts +59 -0
- package/src/island.js +342 -0
- package/src/isr-runtime.d.ts +28 -0
- package/src/isr-runtime.js +99 -0
- package/src/isr.d.ts +22 -0
- package/src/isr.js +41 -0
- package/src/jsx-render-dom.d.ts +22 -0
- package/src/jsx-render-dom.js +376 -0
- package/src/jsx-runtime.d.ts +58 -0
- package/src/jsx-runtime.js +99 -0
- package/src/jsx-types.d.ts +46 -0
- package/src/logger.d.ts +15 -0
- package/src/logger.js +24 -0
- package/src/prop.d.ts +24 -0
- package/src/prop.js +160 -0
- package/src/registry.d.ts +17 -0
- package/src/registry.js +219 -0
- package/src/render-dsd-stream.d.ts +46 -0
- package/src/render-dsd-stream.js +86 -0
- package/src/render-dsd.d.ts +27 -0
- package/src/render-dsd.js +315 -0
- package/src/render-ir.d.ts +32 -0
- package/src/render-ir.js +245 -0
- package/src/runtime.d.ts +9 -0
- package/src/runtime.js +16 -0
- package/src/security.d.ts +1 -0
- package/src/security.js +40 -0
- package/src/signal-context.d.ts +15 -0
- package/src/signal-context.js +59 -0
- package/src/static.d.ts +35 -0
- package/src/static.js +34 -0
- package/src/style-sheet.d.ts +9 -0
- package/src/style-sheet.js +56 -0
- package/src/tag-utils.d.ts +11 -0
- package/src/tag-utils.js +28 -0
- package/src/vnode.d.ts +15 -0
- package/src/vnode.js +31 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Zhi
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# @openelement/core
|
|
2
|
+
|
|
3
|
+
Advanced openElement runtime kernel.
|
|
4
|
+
|
|
5
|
+
Most users should start from `@openelement/app`, `@openelement/element`, or
|
|
6
|
+
`@openelement/ui`. `@openelement/core` owns low-level primitives used by those
|
|
7
|
+
products:
|
|
8
|
+
|
|
9
|
+
- JSX and VNode runtime primitives.
|
|
10
|
+
- DSD rendering through `renderDsd()` and `renderDsdStream()`.
|
|
11
|
+
- Static props, event hydration, island metadata, and SSR context helpers.
|
|
12
|
+
- Unified errors, signal-like utilities, and DOM rendering helpers.
|
|
13
|
+
- StyleSheet (SSR-safe CSSStyleSheet abstraction).
|
|
14
|
+
|
|
15
|
+
The `OpenElement` base class is now authored from `@openelement/element`.
|
|
16
|
+
|
|
17
|
+
This package does not contain Vite, CLI, or build orchestration logic.
|
|
18
|
+
|
|
19
|
+
## Install
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm install @openelement/core
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Low-Level Component Authoring
|
|
26
|
+
|
|
27
|
+
For component authoring with `OpenElement`, ErrorBoundary, prop system,
|
|
28
|
+
and defineElement helper, use `@openelement/element`:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm install @openelement/element
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## License
|
|
35
|
+
|
|
36
|
+
MIT
|
package/package.json
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@openelement/core",
|
|
3
|
+
"version": "0.41.0-alpha.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./src/index.js",
|
|
6
|
+
"types": "./src/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./src/index.d.ts",
|
|
10
|
+
"import": "./src/index.js",
|
|
11
|
+
"default": "./src/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./static": {
|
|
14
|
+
"types": "./src/static.d.ts",
|
|
15
|
+
"import": "./src/static.js",
|
|
16
|
+
"default": "./src/static.js"
|
|
17
|
+
},
|
|
18
|
+
"./hydrate": {
|
|
19
|
+
"types": "./src/hydrate.d.ts",
|
|
20
|
+
"import": "./src/hydrate.js",
|
|
21
|
+
"default": "./src/hydrate.js"
|
|
22
|
+
},
|
|
23
|
+
"./csr": {
|
|
24
|
+
"types": "./src/csr.d.ts",
|
|
25
|
+
"import": "./src/csr.js",
|
|
26
|
+
"default": "./src/csr.js"
|
|
27
|
+
},
|
|
28
|
+
"./prop": {
|
|
29
|
+
"types": "./src/prop.d.ts",
|
|
30
|
+
"import": "./src/prop.js",
|
|
31
|
+
"default": "./src/prop.js"
|
|
32
|
+
},
|
|
33
|
+
"./errors": {
|
|
34
|
+
"types": "./src/errors.d.ts",
|
|
35
|
+
"import": "./src/errors.js",
|
|
36
|
+
"default": "./src/errors.js"
|
|
37
|
+
},
|
|
38
|
+
"./context": {
|
|
39
|
+
"types": "./src/context.d.ts",
|
|
40
|
+
"import": "./src/context.js",
|
|
41
|
+
"default": "./src/context.js"
|
|
42
|
+
},
|
|
43
|
+
"./logger": {
|
|
44
|
+
"types": "./src/logger.d.ts",
|
|
45
|
+
"import": "./src/logger.js",
|
|
46
|
+
"default": "./src/logger.js"
|
|
47
|
+
},
|
|
48
|
+
"./isr": {
|
|
49
|
+
"types": "./src/isr.d.ts",
|
|
50
|
+
"import": "./src/isr.js",
|
|
51
|
+
"default": "./src/isr.js"
|
|
52
|
+
},
|
|
53
|
+
"./isr-runtime": {
|
|
54
|
+
"types": "./src/isr-runtime.d.ts",
|
|
55
|
+
"import": "./src/isr-runtime.js",
|
|
56
|
+
"default": "./src/isr-runtime.js"
|
|
57
|
+
},
|
|
58
|
+
"./runtime": {
|
|
59
|
+
"types": "./src/runtime.d.ts",
|
|
60
|
+
"import": "./src/runtime.js",
|
|
61
|
+
"default": "./src/runtime.js"
|
|
62
|
+
},
|
|
63
|
+
"./signal-context": {
|
|
64
|
+
"types": "./src/signal-context.d.ts",
|
|
65
|
+
"import": "./src/signal-context.js",
|
|
66
|
+
"default": "./src/signal-context.js"
|
|
67
|
+
},
|
|
68
|
+
"./render-dsd-stream": {
|
|
69
|
+
"types": "./src/render-dsd-stream.d.ts",
|
|
70
|
+
"import": "./src/render-dsd-stream.js",
|
|
71
|
+
"default": "./src/render-dsd-stream.js"
|
|
72
|
+
},
|
|
73
|
+
"./style-sheet": {
|
|
74
|
+
"types": "./src/style-sheet.d.ts",
|
|
75
|
+
"import": "./src/style-sheet.js",
|
|
76
|
+
"default": "./src/style-sheet.js"
|
|
77
|
+
},
|
|
78
|
+
"./html-escape": {
|
|
79
|
+
"types": "./src/html-escape.d.ts",
|
|
80
|
+
"import": "./src/html-escape.js",
|
|
81
|
+
"default": "./src/html-escape.js"
|
|
82
|
+
},
|
|
83
|
+
"./tag-utils": {
|
|
84
|
+
"types": "./src/tag-utils.d.ts",
|
|
85
|
+
"import": "./src/tag-utils.js",
|
|
86
|
+
"default": "./src/tag-utils.js"
|
|
87
|
+
},
|
|
88
|
+
"./jsx-runtime": {
|
|
89
|
+
"types": "./src/jsx-runtime.d.ts",
|
|
90
|
+
"import": "./src/jsx-runtime.js",
|
|
91
|
+
"default": "./src/jsx-runtime.js"
|
|
92
|
+
},
|
|
93
|
+
"./jsx-dev-runtime": {
|
|
94
|
+
"types": "./src/jsx-runtime.d.ts",
|
|
95
|
+
"import": "./src/jsx-runtime.js",
|
|
96
|
+
"default": "./src/jsx-runtime.js"
|
|
97
|
+
},
|
|
98
|
+
"./island-transform": {
|
|
99
|
+
"types": "./src/island-transform.d.ts",
|
|
100
|
+
"import": "./src/island-transform.js",
|
|
101
|
+
"default": "./src/island-transform.js"
|
|
102
|
+
},
|
|
103
|
+
"./dsd-hydration": {
|
|
104
|
+
"types": "./src/dsd-hydration.d.ts",
|
|
105
|
+
"import": "./src/dsd-hydration.js",
|
|
106
|
+
"default": "./src/dsd-hydration.js"
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
"repository": {
|
|
110
|
+
"type": "git",
|
|
111
|
+
"url": "git+https://github.com/open-element/openelement.git"
|
|
112
|
+
},
|
|
113
|
+
"keywords": [
|
|
114
|
+
"openelement",
|
|
115
|
+
"web-components",
|
|
116
|
+
"ssg",
|
|
117
|
+
"framework",
|
|
118
|
+
"deno"
|
|
119
|
+
],
|
|
120
|
+
"dependencies": {
|
|
121
|
+
"@openelement/protocol": "^0.41.0-alpha.1",
|
|
122
|
+
"@openelement/signal": "^0.41.0-alpha.1"
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import type { BindingDescriptor, BindingDispose, BindingLifecycle } from "./binding-descriptor.js";
|
|
2
|
+
/** Apply a single binding descriptor and return a dispose function. */ export declare function applyBindingDescriptor(desc: BindingDescriptor, lifecycle: BindingLifecycle): BindingDispose;
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @openelement/core - Unified binding activation (ADR-0109 Phase 1).
|
|
3
|
+
*
|
|
4
|
+
* Applies a declarative BindingDescriptor to a host element.
|
|
5
|
+
*
|
|
6
|
+
* @module @openelement/core/binding-activation
|
|
7
|
+
*/ import { effect, unwrapSignalLike } from '@openelement/signal';
|
|
8
|
+
import { trustRenderHtml } from './security.js';
|
|
9
|
+
import { renderToDom } from './jsx-render-dom.js';
|
|
10
|
+
import { Fragment } from './jsx-runtime.js';
|
|
11
|
+
import { createLogger } from './logger.js';
|
|
12
|
+
import { formatError } from './errors.js';
|
|
13
|
+
const bindingLog = createLogger('binding');
|
|
14
|
+
const noop = ()=>{};
|
|
15
|
+
/** Register a dispose function with the lifecycle. */ export function registerDispose(dispose, lifecycle) {
|
|
16
|
+
lifecycle.disposers?.add(dispose);
|
|
17
|
+
if (lifecycle.signal) {
|
|
18
|
+
lifecycle.signal.addEventListener('abort', dispose, {
|
|
19
|
+
once: true
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** Apply a single binding descriptor and return a dispose function. */ export function applyBindingDescriptor(desc, lifecycle) {
|
|
24
|
+
switch(desc.kind){
|
|
25
|
+
case 'static-attr':
|
|
26
|
+
return applyStaticAttr(desc, lifecycle);
|
|
27
|
+
case 'static-prop':
|
|
28
|
+
return applyStaticProp(desc, lifecycle);
|
|
29
|
+
case 'static-boolean':
|
|
30
|
+
return applyStaticBoolean(desc, lifecycle);
|
|
31
|
+
case 'static-style':
|
|
32
|
+
return applyStaticStyle(desc, lifecycle);
|
|
33
|
+
case 'signal-text':
|
|
34
|
+
return applySignalText(desc, lifecycle);
|
|
35
|
+
case 'signal-class':
|
|
36
|
+
return applySignalClass(desc, lifecycle);
|
|
37
|
+
case 'signal-attr':
|
|
38
|
+
return applySignalAttr(desc, lifecycle);
|
|
39
|
+
case 'signal-html':
|
|
40
|
+
return applySignalHtml(desc, lifecycle);
|
|
41
|
+
case 'signal-render':
|
|
42
|
+
return applySignalRender(desc, lifecycle);
|
|
43
|
+
case 'event':
|
|
44
|
+
return applyEvent(desc, lifecycle);
|
|
45
|
+
case 'ref':
|
|
46
|
+
return applyRef(desc, lifecycle);
|
|
47
|
+
default:
|
|
48
|
+
{
|
|
49
|
+
// Exhaustiveness guard: unknown descriptor kinds are no-ops.
|
|
50
|
+
const _exhaustive = desc;
|
|
51
|
+
void _exhaustive;
|
|
52
|
+
return noop;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function applyStaticAttr(desc, _lifecycle) {
|
|
57
|
+
if (desc.value == null) {
|
|
58
|
+
desc.el.removeAttribute(desc.attrName);
|
|
59
|
+
} else {
|
|
60
|
+
desc.el.setAttribute(desc.attrName, String(desc.value));
|
|
61
|
+
}
|
|
62
|
+
return noop;
|
|
63
|
+
}
|
|
64
|
+
function applyStaticProp(desc, _lifecycle) {
|
|
65
|
+
desc.el[desc.propName] = desc.value;
|
|
66
|
+
return noop;
|
|
67
|
+
}
|
|
68
|
+
function applyStaticBoolean(desc, _lifecycle) {
|
|
69
|
+
if (desc.value) {
|
|
70
|
+
desc.el.setAttribute(desc.attrName, '');
|
|
71
|
+
} else {
|
|
72
|
+
desc.el.removeAttribute(desc.attrName);
|
|
73
|
+
}
|
|
74
|
+
return noop;
|
|
75
|
+
}
|
|
76
|
+
function applyStaticStyle(desc, _lifecycle) {
|
|
77
|
+
const target = desc.el;
|
|
78
|
+
for (const [k, v] of Object.entries(desc.value)){
|
|
79
|
+
target.style.setProperty(k, String(v));
|
|
80
|
+
}
|
|
81
|
+
return noop;
|
|
82
|
+
}
|
|
83
|
+
function applySignalText(desc, lifecycle) {
|
|
84
|
+
const target = desc.el;
|
|
85
|
+
const sig = desc.signal;
|
|
86
|
+
const update = ()=>{
|
|
87
|
+
const value = unwrapSignalLike(sig.value);
|
|
88
|
+
const text = value == null ? '' : String(value);
|
|
89
|
+
target.textContent = text;
|
|
90
|
+
};
|
|
91
|
+
const dispose = effect(()=>{
|
|
92
|
+
try {
|
|
93
|
+
update();
|
|
94
|
+
} catch (err) {
|
|
95
|
+
bindingLog.error(`signal-text binding failed: ${formatError(err)}`);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
registerDispose(dispose, lifecycle);
|
|
99
|
+
return dispose;
|
|
100
|
+
}
|
|
101
|
+
function applySignalClass(desc, lifecycle) {
|
|
102
|
+
const { el, className, signal } = desc;
|
|
103
|
+
const update = ()=>{
|
|
104
|
+
const value = Boolean(unwrapSignalLike(signal.value));
|
|
105
|
+
el.classList.toggle(className, value);
|
|
106
|
+
};
|
|
107
|
+
const dispose = effect(()=>{
|
|
108
|
+
try {
|
|
109
|
+
update();
|
|
110
|
+
} catch (err) {
|
|
111
|
+
bindingLog.error(`signal-class binding failed: ${formatError(err)}`);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
registerDispose(dispose, lifecycle);
|
|
115
|
+
return dispose;
|
|
116
|
+
}
|
|
117
|
+
function applySignalAttr(desc, lifecycle) {
|
|
118
|
+
const { el, attrNames, signal } = desc;
|
|
119
|
+
const update = ()=>{
|
|
120
|
+
const value = unwrapSignalLike(signal.value);
|
|
121
|
+
for (const attrName of attrNames){
|
|
122
|
+
if (value == null || value === false) {
|
|
123
|
+
el.removeAttribute(attrName);
|
|
124
|
+
} else if (value === true) {
|
|
125
|
+
el.setAttribute(attrName, '');
|
|
126
|
+
} else {
|
|
127
|
+
el.setAttribute(attrName, String(value));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
const dispose = effect(()=>{
|
|
132
|
+
try {
|
|
133
|
+
update();
|
|
134
|
+
} catch (err) {
|
|
135
|
+
bindingLog.error(`signal-attr binding failed: ${formatError(err)}`);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
registerDispose(dispose, lifecycle);
|
|
139
|
+
return dispose;
|
|
140
|
+
}
|
|
141
|
+
function applySignalHtml(desc, lifecycle) {
|
|
142
|
+
const { el, signal, trusted } = desc;
|
|
143
|
+
const update = ()=>{
|
|
144
|
+
const raw = unwrapSignalLike(signal.value);
|
|
145
|
+
const str = raw == null ? '' : String(raw);
|
|
146
|
+
if (trusted) {
|
|
147
|
+
el.innerHTML = trustRenderHtml(str);
|
|
148
|
+
} else {
|
|
149
|
+
el.textContent = str;
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
const dispose = effect(()=>{
|
|
153
|
+
try {
|
|
154
|
+
update();
|
|
155
|
+
} catch (err) {
|
|
156
|
+
bindingLog.error(`signal-html binding failed: ${formatError(err)}`);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
registerDispose(dispose, lifecycle);
|
|
160
|
+
return dispose;
|
|
161
|
+
}
|
|
162
|
+
function applySignalRender(desc, lifecycle) {
|
|
163
|
+
const { el, signal } = desc;
|
|
164
|
+
let currentChildren = [];
|
|
165
|
+
const currentNestedDisposers = new Set();
|
|
166
|
+
const clearRender = ()=>{
|
|
167
|
+
for (const dispose of currentNestedDisposers){
|
|
168
|
+
try {
|
|
169
|
+
dispose();
|
|
170
|
+
} catch (err) {
|
|
171
|
+
bindingLog.error(`signal-render nested dispose failed: ${formatError(err)}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
currentNestedDisposers.clear();
|
|
175
|
+
for (const child of currentChildren){
|
|
176
|
+
child.remove();
|
|
177
|
+
}
|
|
178
|
+
currentChildren = [];
|
|
179
|
+
};
|
|
180
|
+
const render = ()=>{
|
|
181
|
+
clearRender();
|
|
182
|
+
const raw = unwrapSignalLike(signal.value);
|
|
183
|
+
if (raw == null) return;
|
|
184
|
+
// Render into a fresh child lifecycle so nested signal effects can be
|
|
185
|
+
// disposed per render without leaking into previous renders.
|
|
186
|
+
const renderLifecycle = {
|
|
187
|
+
disposers: currentNestedDisposers
|
|
188
|
+
};
|
|
189
|
+
if (lifecycle.signal) {
|
|
190
|
+
renderLifecycle.signal = lifecycle.signal;
|
|
191
|
+
}
|
|
192
|
+
// Normalize VNode[] into a Fragment so multiple rendered nodes can be
|
|
193
|
+
// tracked and replaced together across updates.
|
|
194
|
+
const node = Array.isArray(raw) ? {
|
|
195
|
+
tag: Fragment,
|
|
196
|
+
props: {},
|
|
197
|
+
children: raw
|
|
198
|
+
} : raw;
|
|
199
|
+
const result = renderToDom(node, renderLifecycle);
|
|
200
|
+
if (result.nodeType === 11 || result.nodeType === 0) {
|
|
201
|
+
const fragChildren = [];
|
|
202
|
+
while(result.firstChild){
|
|
203
|
+
const child = result.firstChild;
|
|
204
|
+
fragChildren.push(child);
|
|
205
|
+
el.appendChild(child);
|
|
206
|
+
}
|
|
207
|
+
currentChildren = fragChildren;
|
|
208
|
+
} else {
|
|
209
|
+
const child = result;
|
|
210
|
+
el.appendChild(child);
|
|
211
|
+
currentChildren = [
|
|
212
|
+
child
|
|
213
|
+
];
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
const dispose = effect(()=>{
|
|
217
|
+
try {
|
|
218
|
+
render();
|
|
219
|
+
} catch (err) {
|
|
220
|
+
bindingLog.error(`signal-render binding failed: ${formatError(err)}`);
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
const fullDispose = ()=>{
|
|
224
|
+
clearRender();
|
|
225
|
+
dispose();
|
|
226
|
+
};
|
|
227
|
+
registerDispose(fullDispose, lifecycle);
|
|
228
|
+
return fullDispose;
|
|
229
|
+
}
|
|
230
|
+
function applyEvent(desc, lifecycle) {
|
|
231
|
+
const { el, type, handler, options } = desc;
|
|
232
|
+
const listenerOptions = lifecycle.signal ? {
|
|
233
|
+
...typeof options === 'object' && options !== null ? options : {},
|
|
234
|
+
signal: lifecycle.signal
|
|
235
|
+
} : options ?? {};
|
|
236
|
+
el.addEventListener(type, handler, listenerOptions);
|
|
237
|
+
const dispose = ()=>{
|
|
238
|
+
el.removeEventListener(type, handler, listenerOptions);
|
|
239
|
+
};
|
|
240
|
+
// When no AbortSignal was provided we still want an explicit dispose path.
|
|
241
|
+
if (!lifecycle.signal) {
|
|
242
|
+
registerDispose(dispose, lifecycle);
|
|
243
|
+
}
|
|
244
|
+
return dispose;
|
|
245
|
+
}
|
|
246
|
+
function applyRef(desc, _lifecycle) {
|
|
247
|
+
try {
|
|
248
|
+
desc.callback(desc.el);
|
|
249
|
+
} catch (err) {
|
|
250
|
+
bindingLog.error(`ref binding failed: ${formatError(err)}`);
|
|
251
|
+
}
|
|
252
|
+
return noop;
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9jb3JlL3NyYy9iaW5kaW5nLWFjdGl2YXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAb3BlbmVsZW1lbnQvY29yZSAtIFVuaWZpZWQgYmluZGluZyBhY3RpdmF0aW9uIChBRFItMDEwOSBQaGFzZSAxKS5cbiAqXG4gKiBBcHBsaWVzIGEgZGVjbGFyYXRpdmUgQmluZGluZ0Rlc2NyaXB0b3IgdG8gYSBob3N0IGVsZW1lbnQuXG4gKlxuICogQG1vZHVsZSBAb3BlbmVsZW1lbnQvY29yZS9iaW5kaW5nLWFjdGl2YXRpb25cbiAqL1xuXG5pbXBvcnQgeyBlZmZlY3QsIHVud3JhcFNpZ25hbExpa2UgfSBmcm9tICdAb3BlbmVsZW1lbnQvc2lnbmFsJztcbmltcG9ydCB7IHRydXN0UmVuZGVySHRtbCB9IGZyb20gJy4vc2VjdXJpdHkuanMnO1xuaW1wb3J0IHsgcmVuZGVyVG9Eb20gfSBmcm9tICcuL2pzeC1yZW5kZXItZG9tLmpzJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnLi9qc3gtcnVudGltZS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBmb3JtYXRFcnJvciB9IGZyb20gJy4vZXJyb3JzLmpzJztcbmltcG9ydCB0eXBlIHsgQmluZGluZ0Rlc2NyaXB0b3IsIEJpbmRpbmdEaXNwb3NlLCBCaW5kaW5nTGlmZWN5Y2xlIH0gZnJvbSAnLi9iaW5kaW5nLWRlc2NyaXB0b3IuanMnO1xuXG5jb25zdCBiaW5kaW5nTG9nID0gY3JlYXRlTG9nZ2VyKCdiaW5kaW5nJyk7XG5cbmNvbnN0IG5vb3A6IEJpbmRpbmdEaXNwb3NlID0gKCkgPT4ge307XG5cbi8qKiBSZWdpc3RlciBhIGRpc3Bvc2UgZnVuY3Rpb24gd2l0aCB0aGUgbGlmZWN5Y2xlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGlzcG9zZShkaXNwb3NlOiBCaW5kaW5nRGlzcG9zZSwgbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlKTogdm9pZCB7XG4gIGxpZmVjeWNsZS5kaXNwb3NlcnM/LmFkZChkaXNwb3NlKTtcbiAgaWYgKGxpZmVjeWNsZS5zaWduYWwpIHtcbiAgICBsaWZlY3ljbGUuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgZGlzcG9zZSwgeyBvbmNlOiB0cnVlIH0pO1xuICB9XG59XG5cbi8qKiBBcHBseSBhIHNpbmdsZSBiaW5kaW5nIGRlc2NyaXB0b3IgYW5kIHJldHVybiBhIGRpc3Bvc2UgZnVuY3Rpb24uICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlCaW5kaW5nRGVzY3JpcHRvcihcbiAgZGVzYzogQmluZGluZ0Rlc2NyaXB0b3IsXG4gIGxpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbik6IEJpbmRpbmdEaXNwb3NlIHtcbiAgc3dpdGNoIChkZXNjLmtpbmQpIHtcbiAgICBjYXNlICdzdGF0aWMtYXR0cic6XG4gICAgICByZXR1cm4gYXBwbHlTdGF0aWNBdHRyKGRlc2MsIGxpZmVjeWNsZSk7XG4gICAgY2FzZSAnc3RhdGljLXByb3AnOlxuICAgICAgcmV0dXJuIGFwcGx5U3RhdGljUHJvcChkZXNjLCBsaWZlY3ljbGUpO1xuICAgIGNhc2UgJ3N0YXRpYy1ib29sZWFuJzpcbiAgICAgIHJldHVybiBhcHBseVN0YXRpY0Jvb2xlYW4oZGVzYywgbGlmZWN5Y2xlKTtcbiAgICBjYXNlICdzdGF0aWMtc3R5bGUnOlxuICAgICAgcmV0dXJuIGFwcGx5U3RhdGljU3R5bGUoZGVzYywgbGlmZWN5Y2xlKTtcbiAgICBjYXNlICdzaWduYWwtdGV4dCc6XG4gICAgICByZXR1cm4gYXBwbHlTaWduYWxUZXh0KGRlc2MsIGxpZmVjeWNsZSk7XG4gICAgY2FzZSAnc2lnbmFsLWNsYXNzJzpcbiAgICAgIHJldHVybiBhcHBseVNpZ25hbENsYXNzKGRlc2MsIGxpZmVjeWNsZSk7XG4gICAgY2FzZSAnc2lnbmFsLWF0dHInOlxuICAgICAgcmV0dXJuIGFwcGx5U2lnbmFsQXR0cihkZXNjLCBsaWZlY3ljbGUpO1xuICAgIGNhc2UgJ3NpZ25hbC1odG1sJzpcbiAgICAgIHJldHVybiBhcHBseVNpZ25hbEh0bWwoZGVzYywgbGlmZWN5Y2xlKTtcbiAgICBjYXNlICdzaWduYWwtcmVuZGVyJzpcbiAgICAgIHJldHVybiBhcHBseVNpZ25hbFJlbmRlcihkZXNjLCBsaWZlY3ljbGUpO1xuICAgIGNhc2UgJ2V2ZW50JzpcbiAgICAgIHJldHVybiBhcHBseUV2ZW50KGRlc2MsIGxpZmVjeWNsZSk7XG4gICAgY2FzZSAncmVmJzpcbiAgICAgIHJldHVybiBhcHBseVJlZihkZXNjLCBsaWZlY3ljbGUpO1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIC8vIEV4aGF1c3RpdmVuZXNzIGd1YXJkOiB1bmtub3duIGRlc2NyaXB0b3Iga2luZHMgYXJlIG5vLW9wcy5cbiAgICAgIGNvbnN0IF9leGhhdXN0aXZlOiBuZXZlciA9IGRlc2M7XG4gICAgICB2b2lkIF9leGhhdXN0aXZlO1xuICAgICAgcmV0dXJuIG5vb3A7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5U3RhdGljQXR0cihcbiAgZGVzYzogRXh0cmFjdDxCaW5kaW5nRGVzY3JpcHRvciwgeyBraW5kOiAnc3RhdGljLWF0dHInIH0+LFxuICBfbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlLFxuKTogQmluZGluZ0Rpc3Bvc2Uge1xuICBpZiAoZGVzYy52YWx1ZSA9PSBudWxsKSB7XG4gICAgZGVzYy5lbC5yZW1vdmVBdHRyaWJ1dGUoZGVzYy5hdHRyTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgZGVzYy5lbC5zZXRBdHRyaWJ1dGUoZGVzYy5hdHRyTmFtZSwgU3RyaW5nKGRlc2MudmFsdWUpKTtcbiAgfVxuICByZXR1cm4gbm9vcDtcbn1cblxuZnVuY3Rpb24gYXBwbHlTdGF0aWNQcm9wKFxuICBkZXNjOiBFeHRyYWN0PEJpbmRpbmdEZXNjcmlwdG9yLCB7IGtpbmQ6ICdzdGF0aWMtcHJvcCcgfT4sXG4gIF9saWZlY3ljbGU6IEJpbmRpbmdMaWZlY3ljbGUsXG4pOiBCaW5kaW5nRGlzcG9zZSB7XG4gIChkZXNjLmVsIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2Rlc2MucHJvcE5hbWVdID0gZGVzYy52YWx1ZTtcbiAgcmV0dXJuIG5vb3A7XG59XG5cbmZ1bmN0aW9uIGFwcGx5U3RhdGljQm9vbGVhbihcbiAgZGVzYzogRXh0cmFjdDxCaW5kaW5nRGVzY3JpcHRvciwgeyBraW5kOiAnc3RhdGljLWJvb2xlYW4nIH0+LFxuICBfbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlLFxuKTogQmluZGluZ0Rpc3Bvc2Uge1xuICBpZiAoZGVzYy52YWx1ZSkge1xuICAgIGRlc2MuZWwuc2V0QXR0cmlidXRlKGRlc2MuYXR0ck5hbWUsICcnKTtcbiAgfSBlbHNlIHtcbiAgICBkZXNjLmVsLnJlbW92ZUF0dHJpYnV0ZShkZXNjLmF0dHJOYW1lKTtcbiAgfVxuICByZXR1cm4gbm9vcDtcbn1cblxuZnVuY3Rpb24gYXBwbHlTdGF0aWNTdHlsZShcbiAgZGVzYzogRXh0cmFjdDxCaW5kaW5nRGVzY3JpcHRvciwgeyBraW5kOiAnc3RhdGljLXN0eWxlJyB9PixcbiAgX2xpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbik6IEJpbmRpbmdEaXNwb3NlIHtcbiAgY29uc3QgdGFyZ2V0ID0gZGVzYy5lbCBhcyBIVE1MRWxlbWVudDtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzYy52YWx1ZSkpIHtcbiAgICB0YXJnZXQuc3R5bGUuc2V0UHJvcGVydHkoaywgU3RyaW5nKHYpKTtcbiAgfVxuICByZXR1cm4gbm9vcDtcbn1cblxuZnVuY3Rpb24gYXBwbHlTaWduYWxUZXh0KFxuICBkZXNjOiBFeHRyYWN0PEJpbmRpbmdEZXNjcmlwdG9yLCB7IGtpbmQ6ICdzaWduYWwtdGV4dCcgfT4sXG4gIGxpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbik6IEJpbmRpbmdEaXNwb3NlIHtcbiAgY29uc3QgdGFyZ2V0ID0gZGVzYy5lbCBhcyBUZXh0IHwgRWxlbWVudDtcbiAgY29uc3Qgc2lnID0gZGVzYy5zaWduYWw7XG5cbiAgY29uc3QgdXBkYXRlID0gKCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gdW53cmFwU2lnbmFsTGlrZShzaWcudmFsdWUpO1xuICAgIGNvbnN0IHRleHQgPSB2YWx1ZSA9PSBudWxsID8gJycgOiBTdHJpbmcodmFsdWUpO1xuICAgIHRhcmdldC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIH07XG5cbiAgY29uc3QgZGlzcG9zZSA9IGVmZmVjdCgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYmluZGluZ0xvZy5lcnJvcihgc2lnbmFsLXRleHQgYmluZGluZyBmYWlsZWQ6ICR7Zm9ybWF0RXJyb3IoZXJyKX1gKTtcbiAgICB9XG4gIH0pO1xuICByZWdpc3RlckRpc3Bvc2UoZGlzcG9zZSwgbGlmZWN5Y2xlKTtcbiAgcmV0dXJuIGRpc3Bvc2U7XG59XG5cbmZ1bmN0aW9uIGFwcGx5U2lnbmFsQ2xhc3MoXG4gIGRlc2M6IEV4dHJhY3Q8QmluZGluZ0Rlc2NyaXB0b3IsIHsga2luZDogJ3NpZ25hbC1jbGFzcycgfT4sXG4gIGxpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbik6IEJpbmRpbmdEaXNwb3NlIHtcbiAgY29uc3QgeyBlbCwgY2xhc3NOYW1lLCBzaWduYWwgfSA9IGRlc2M7XG5cbiAgY29uc3QgdXBkYXRlID0gKCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gQm9vbGVhbih1bndyYXBTaWduYWxMaWtlKHNpZ25hbC52YWx1ZSkpO1xuICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoY2xhc3NOYW1lLCB2YWx1ZSk7XG4gIH07XG5cbiAgY29uc3QgZGlzcG9zZSA9IGVmZmVjdCgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYmluZGluZ0xvZy5lcnJvcihgc2lnbmFsLWNsYXNzIGJpbmRpbmcgZmFpbGVkOiAke2Zvcm1hdEVycm9yKGVycil9YCk7XG4gICAgfVxuICB9KTtcbiAgcmVnaXN0ZXJEaXNwb3NlKGRpc3Bvc2UsIGxpZmVjeWNsZSk7XG4gIHJldHVybiBkaXNwb3NlO1xufVxuXG5mdW5jdGlvbiBhcHBseVNpZ25hbEF0dHIoXG4gIGRlc2M6IEV4dHJhY3Q8QmluZGluZ0Rlc2NyaXB0b3IsIHsga2luZDogJ3NpZ25hbC1hdHRyJyB9PixcbiAgbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlLFxuKTogQmluZGluZ0Rpc3Bvc2Uge1xuICBjb25zdCB7IGVsLCBhdHRyTmFtZXMsIHNpZ25hbCB9ID0gZGVzYztcblxuICBjb25zdCB1cGRhdGUgPSAoKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSB1bndyYXBTaWduYWxMaWtlKHNpZ25hbC52YWx1ZSk7XG4gICAgZm9yIChjb25zdCBhdHRyTmFtZSBvZiBhdHRyTmFtZXMpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoYXR0ck5hbWUpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUsICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgU3RyaW5nKHZhbHVlKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRpc3Bvc2UgPSBlZmZlY3QoKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGJpbmRpbmdMb2cuZXJyb3IoYHNpZ25hbC1hdHRyIGJpbmRpbmcgZmFpbGVkOiAke2Zvcm1hdEVycm9yKGVycil9YCk7XG4gICAgfVxuICB9KTtcbiAgcmVnaXN0ZXJEaXNwb3NlKGRpc3Bvc2UsIGxpZmVjeWNsZSk7XG4gIHJldHVybiBkaXNwb3NlO1xufVxuXG5mdW5jdGlvbiBhcHBseVNpZ25hbEh0bWwoXG4gIGRlc2M6IEV4dHJhY3Q8QmluZGluZ0Rlc2NyaXB0b3IsIHsga2luZDogJ3NpZ25hbC1odG1sJyB9PixcbiAgbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlLFxuKTogQmluZGluZ0Rpc3Bvc2Uge1xuICBjb25zdCB7IGVsLCBzaWduYWwsIHRydXN0ZWQgfSA9IGRlc2M7XG5cbiAgY29uc3QgdXBkYXRlID0gKCkgPT4ge1xuICAgIGNvbnN0IHJhdyA9IHVud3JhcFNpZ25hbExpa2Uoc2lnbmFsLnZhbHVlKTtcbiAgICBjb25zdCBzdHIgPSByYXcgPT0gbnVsbCA/ICcnIDogU3RyaW5nKHJhdyk7XG4gICAgaWYgKHRydXN0ZWQpIHtcbiAgICAgIGVsLmlubmVySFRNTCA9IHRydXN0UmVuZGVySHRtbChzdHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC50ZXh0Q29udGVudCA9IHN0cjtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGlzcG9zZSA9IGVmZmVjdCgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYmluZGluZ0xvZy5lcnJvcihgc2lnbmFsLWh0bWwgYmluZGluZyBmYWlsZWQ6ICR7Zm9ybWF0RXJyb3IoZXJyKX1gKTtcbiAgICB9XG4gIH0pO1xuICByZWdpc3RlckRpc3Bvc2UoZGlzcG9zZSwgbGlmZWN5Y2xlKTtcbiAgcmV0dXJuIGRpc3Bvc2U7XG59XG5cbmZ1bmN0aW9uIGFwcGx5U2lnbmFsUmVuZGVyKFxuICBkZXNjOiBFeHRyYWN0PEJpbmRpbmdEZXNjcmlwdG9yLCB7IGtpbmQ6ICdzaWduYWwtcmVuZGVyJyB9PixcbiAgbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlLFxuKTogQmluZGluZ0Rpc3Bvc2Uge1xuICBjb25zdCB7IGVsLCBzaWduYWwgfSA9IGRlc2M7XG5cbiAgbGV0IGN1cnJlbnRDaGlsZHJlbjogQ2hpbGROb2RlW10gPSBbXTtcbiAgY29uc3QgY3VycmVudE5lc3RlZERpc3Bvc2VycyA9IG5ldyBTZXQ8KCkgPT4gdm9pZD4oKTtcblxuICBjb25zdCBjbGVhclJlbmRlciA9ICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGRpc3Bvc2Ugb2YgY3VycmVudE5lc3RlZERpc3Bvc2Vycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGlzcG9zZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGJpbmRpbmdMb2cuZXJyb3IoYHNpZ25hbC1yZW5kZXIgbmVzdGVkIGRpc3Bvc2UgZmFpbGVkOiAke2Zvcm1hdEVycm9yKGVycil9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGN1cnJlbnROZXN0ZWREaXNwb3NlcnMuY2xlYXIoKTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGN1cnJlbnRDaGlsZHJlbikge1xuICAgICAgY2hpbGQucmVtb3ZlKCk7XG4gICAgfVxuICAgIGN1cnJlbnRDaGlsZHJlbiA9IFtdO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlciA9ICgpID0+IHtcbiAgICBjbGVhclJlbmRlcigpO1xuICAgIGNvbnN0IHJhdyA9IHVud3JhcFNpZ25hbExpa2Uoc2lnbmFsLnZhbHVlKTtcbiAgICBpZiAocmF3ID09IG51bGwpIHJldHVybjtcblxuICAgIC8vIFJlbmRlciBpbnRvIGEgZnJlc2ggY2hpbGQgbGlmZWN5Y2xlIHNvIG5lc3RlZCBzaWduYWwgZWZmZWN0cyBjYW4gYmVcbiAgICAvLyBkaXNwb3NlZCBwZXIgcmVuZGVyIHdpdGhvdXQgbGVha2luZyBpbnRvIHByZXZpb3VzIHJlbmRlcnMuXG4gICAgY29uc3QgcmVuZGVyTGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlID0ge1xuICAgICAgZGlzcG9zZXJzOiBjdXJyZW50TmVzdGVkRGlzcG9zZXJzLFxuICAgIH07XG4gICAgaWYgKGxpZmVjeWNsZS5zaWduYWwpIHtcbiAgICAgIHJlbmRlckxpZmVjeWNsZS5zaWduYWwgPSBsaWZlY3ljbGUuc2lnbmFsO1xuICAgIH1cblxuICAgIC8vIE5vcm1hbGl6ZSBWTm9kZVtdIGludG8gYSBGcmFnbWVudCBzbyBtdWx0aXBsZSByZW5kZXJlZCBub2RlcyBjYW4gYmVcbiAgICAvLyB0cmFja2VkIGFuZCByZXBsYWNlZCB0b2dldGhlciBhY3Jvc3MgdXBkYXRlcy5cbiAgICBjb25zdCBub2RlID0gQXJyYXkuaXNBcnJheShyYXcpID8geyB0YWc6IEZyYWdtZW50LCBwcm9wczoge30sIGNoaWxkcmVuOiByYXcgfSA6IHJhdztcbiAgICBjb25zdCByZXN1bHQgPSByZW5kZXJUb0RvbShub2RlLCByZW5kZXJMaWZlY3ljbGUpO1xuXG4gICAgaWYgKHJlc3VsdC5ub2RlVHlwZSA9PT0gMTEgfHwgcmVzdWx0Lm5vZGVUeXBlID09PSAwKSB7XG4gICAgICBjb25zdCBmcmFnQ2hpbGRyZW46IENoaWxkTm9kZVtdID0gW107XG4gICAgICB3aGlsZSAocmVzdWx0LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSByZXN1bHQuZmlyc3RDaGlsZCBhcyBDaGlsZE5vZGU7XG4gICAgICAgIGZyYWdDaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgZWwuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgfVxuICAgICAgY3VycmVudENoaWxkcmVuID0gZnJhZ0NoaWxkcmVuO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjaGlsZCA9IHJlc3VsdCBhcyBDaGlsZE5vZGU7XG4gICAgICBlbC5hcHBlbmRDaGlsZChjaGlsZCk7XG4gICAgICBjdXJyZW50Q2hpbGRyZW4gPSBbY2hpbGRdO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkaXNwb3NlID0gZWZmZWN0KCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmVuZGVyKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBiaW5kaW5nTG9nLmVycm9yKGBzaWduYWwtcmVuZGVyIGJpbmRpbmcgZmFpbGVkOiAke2Zvcm1hdEVycm9yKGVycil9YCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBmdWxsRGlzcG9zZTogQmluZGluZ0Rpc3Bvc2UgPSAoKSA9PiB7XG4gICAgY2xlYXJSZW5kZXIoKTtcbiAgICBkaXNwb3NlKCk7XG4gIH07XG4gIHJlZ2lzdGVyRGlzcG9zZShmdWxsRGlzcG9zZSwgbGlmZWN5Y2xlKTtcbiAgcmV0dXJuIGZ1bGxEaXNwb3NlO1xufVxuXG5mdW5jdGlvbiBhcHBseUV2ZW50KFxuICBkZXNjOiBFeHRyYWN0PEJpbmRpbmdEZXNjcmlwdG9yLCB7IGtpbmQ6ICdldmVudCcgfT4sXG4gIGxpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbik6IEJpbmRpbmdEaXNwb3NlIHtcbiAgY29uc3QgeyBlbCwgdHlwZSwgaGFuZGxlciwgb3B0aW9ucyB9ID0gZGVzYztcblxuICBjb25zdCBsaXN0ZW5lck9wdGlvbnM6IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zIHwgYm9vbGVhbiA9IGxpZmVjeWNsZS5zaWduYWxcbiAgICA/IHtcbiAgICAgIC4uLih0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgJiYgb3B0aW9ucyAhPT0gbnVsbCA/IG9wdGlvbnMgOiB7fSksXG4gICAgICBzaWduYWw6IGxpZmVjeWNsZS5zaWduYWwsXG4gICAgfVxuICAgIDogKG9wdGlvbnMgPz8ge30pO1xuXG4gIGVsLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgbGlzdGVuZXJPcHRpb25zKTtcblxuICBjb25zdCBkaXNwb3NlOiBCaW5kaW5nRGlzcG9zZSA9ICgpID0+IHtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGxpc3RlbmVyT3B0aW9ucyk7XG4gIH07XG5cbiAgLy8gV2hlbiBubyBBYm9ydFNpZ25hbCB3YXMgcHJvdmlkZWQgd2Ugc3RpbGwgd2FudCBhbiBleHBsaWNpdCBkaXNwb3NlIHBhdGguXG4gIGlmICghbGlmZWN5Y2xlLnNpZ25hbCkge1xuICAgIHJlZ2lzdGVyRGlzcG9zZShkaXNwb3NlLCBsaWZlY3ljbGUpO1xuICB9XG4gIHJldHVybiBkaXNwb3NlO1xufVxuXG5mdW5jdGlvbiBhcHBseVJlZihcbiAgZGVzYzogRXh0cmFjdDxCaW5kaW5nRGVzY3JpcHRvciwgeyBraW5kOiAncmVmJyB9PixcbiAgX2xpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbik6IEJpbmRpbmdEaXNwb3NlIHtcbiAgdHJ5IHtcbiAgICBkZXNjLmNhbGxiYWNrKGRlc2MuZWwpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBiaW5kaW5nTG9nLmVycm9yKGByZWYgYmluZGluZyBmYWlsZWQ6ICR7Zm9ybWF0RXJyb3IoZXJyKX1gKTtcbiAgfVxuICByZXR1cm4gbm9vcDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0NBTUMsR0FFRCxTQUFTLE1BQU0sRUFBRSxnQkFBZ0IsUUFBUSxzQkFBc0I7QUFDL0QsU0FBUyxlQUFlLFFBQVEsZ0JBQWdCO0FBQ2hELFNBQVMsV0FBVyxRQUFRLHNCQUFzQjtBQUNsRCxTQUFTLFFBQVEsUUFBUSxtQkFBbUI7QUFDNUMsU0FBUyxZQUFZLFFBQVEsY0FBYztBQUMzQyxTQUFTLFdBQVcsUUFBUSxjQUFjO0FBRzFDLE1BQU0sYUFBYSxhQUFhO0FBRWhDLE1BQU0sT0FBdUIsS0FBTztBQUVwQyxvREFBb0QsR0FDcEQsT0FBTyxTQUFTLGdCQUFnQixPQUF1QixFQUFFLFNBQTJCO0VBQ2xGLFVBQVUsU0FBUyxFQUFFLElBQUk7RUFDekIsSUFBSSxVQUFVLE1BQU0sRUFBRTtJQUNwQixVQUFVLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLFNBQVM7TUFBRSxNQUFNO0lBQUs7RUFDbkU7QUFDRjtBQUVBLHFFQUFxRSxHQUNyRSxPQUFPLFNBQVMsdUJBQ2QsSUFBdUIsRUFDdkIsU0FBMkI7RUFFM0IsT0FBUSxLQUFLLElBQUk7SUFDZixLQUFLO01BQ0gsT0FBTyxn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
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @openelement/core - Unified binding descriptor types (ADR-0109 Phase 1).
|
|
3
|
+
*
|
|
4
|
+
* Declarative DOM binding contracts used by the runtime and hydration layers.
|
|
5
|
+
* Each descriptor captures one side effect to apply to a host element.
|
|
6
|
+
*
|
|
7
|
+
* @module @openelement/core/binding-descriptor
|
|
8
|
+
*/ import type { Signal } from '@openelement/protocol/signal';
|
|
9
|
+
/** Shared lifecycle context for a set of bindings. */ export interface BindingLifecycle {
|
|
10
|
+
/** AbortSignal that triggers automatic disposal when aborted. */ signal?: AbortSignal;
|
|
11
|
+
/** Explicit disposers collected for batch cleanup. */ disposers?: Set<() => void>;
|
|
12
|
+
}
|
|
13
|
+
/** Dispose function returned by bindings and registered into lifecycle. */ export type BindingDispose = () => void;
|
|
14
|
+
export interface StaticAttrBindingDescriptor {
|
|
15
|
+
kind: 'static-attr';
|
|
16
|
+
el: Element;
|
|
17
|
+
key: string;
|
|
18
|
+
attrName: string;
|
|
19
|
+
value: unknown;
|
|
20
|
+
}
|
|
21
|
+
export interface StaticPropBindingDescriptor {
|
|
22
|
+
kind: 'static-prop';
|
|
23
|
+
el: Element;
|
|
24
|
+
propName: string;
|
|
25
|
+
value: unknown;
|
|
26
|
+
}
|
|
27
|
+
export interface StaticBooleanBindingDescriptor {
|
|
28
|
+
kind: 'static-boolean';
|
|
29
|
+
el: Element;
|
|
30
|
+
attrName: string;
|
|
31
|
+
value: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface StaticStyleBindingDescriptor {
|
|
34
|
+
kind: 'static-style';
|
|
35
|
+
el: Element;
|
|
36
|
+
value: Record<string, string | number>;
|
|
37
|
+
}
|
|
38
|
+
export interface SignalTextBindingDescriptor {
|
|
39
|
+
kind: 'signal-text';
|
|
40
|
+
el: Element | Text;
|
|
41
|
+
signal: Signal<unknown>;
|
|
42
|
+
}
|
|
43
|
+
export interface SignalClassBindingDescriptor {
|
|
44
|
+
kind: 'signal-class';
|
|
45
|
+
el: Element;
|
|
46
|
+
className: string;
|
|
47
|
+
signal: Signal<unknown>;
|
|
48
|
+
}
|
|
49
|
+
export interface SignalAttrBindingDescriptor {
|
|
50
|
+
kind: 'signal-attr';
|
|
51
|
+
el: Element;
|
|
52
|
+
attrNames: string[];
|
|
53
|
+
signal: Signal<unknown>;
|
|
54
|
+
}
|
|
55
|
+
export interface SignalHtmlBindingDescriptor {
|
|
56
|
+
kind: 'signal-html';
|
|
57
|
+
el: Element;
|
|
58
|
+
signal: Signal<unknown>;
|
|
59
|
+
trusted: boolean;
|
|
60
|
+
}
|
|
61
|
+
export interface SignalRenderBindingDescriptor {
|
|
62
|
+
kind: 'signal-render';
|
|
63
|
+
el: Element;
|
|
64
|
+
signal: Signal<unknown>;
|
|
65
|
+
lifecycle: BindingLifecycle;
|
|
66
|
+
}
|
|
67
|
+
export interface EventBindingDescriptor {
|
|
68
|
+
kind: 'event';
|
|
69
|
+
el: EventTarget;
|
|
70
|
+
type: string;
|
|
71
|
+
handler: EventListenerOrEventListenerObject;
|
|
72
|
+
options?: AddEventListenerOptions | boolean;
|
|
73
|
+
}
|
|
74
|
+
export interface RefBindingDescriptor {
|
|
75
|
+
kind: 'ref';
|
|
76
|
+
el: Element;
|
|
77
|
+
callback: (el: Element) => void;
|
|
78
|
+
}
|
|
79
|
+
/** Union of all supported binding descriptors. */ export type BindingDescriptor = StaticAttrBindingDescriptor | StaticPropBindingDescriptor | StaticBooleanBindingDescriptor | StaticStyleBindingDescriptor | SignalTextBindingDescriptor | SignalClassBindingDescriptor | SignalAttrBindingDescriptor | SignalHtmlBindingDescriptor | SignalRenderBindingDescriptor | EventBindingDescriptor | RefBindingDescriptor;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @openelement/core - Unified binding descriptor types (ADR-0109 Phase 1).
|
|
3
|
+
*
|
|
4
|
+
* Declarative DOM binding contracts used by the runtime and hydration layers.
|
|
5
|
+
* Each descriptor captures one side effect to apply to a host element.
|
|
6
|
+
*
|
|
7
|
+
* @module @openelement/core/binding-descriptor
|
|
8
|
+
*/
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9jb3JlL3NyYy9iaW5kaW5nLWRlc2NyaXB0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAb3BlbmVsZW1lbnQvY29yZSAtIFVuaWZpZWQgYmluZGluZyBkZXNjcmlwdG9yIHR5cGVzIChBRFItMDEwOSBQaGFzZSAxKS5cbiAqXG4gKiBEZWNsYXJhdGl2ZSBET00gYmluZGluZyBjb250cmFjdHMgdXNlZCBieSB0aGUgcnVudGltZSBhbmQgaHlkcmF0aW9uIGxheWVycy5cbiAqIEVhY2ggZGVzY3JpcHRvciBjYXB0dXJlcyBvbmUgc2lkZSBlZmZlY3QgdG8gYXBwbHkgdG8gYSBob3N0IGVsZW1lbnQuXG4gKlxuICogQG1vZHVsZSBAb3BlbmVsZW1lbnQvY29yZS9iaW5kaW5nLWRlc2NyaXB0b3JcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gJ0BvcGVuZWxlbWVudC9wcm90b2NvbC9zaWduYWwnO1xuXG4vKiogU2hhcmVkIGxpZmVjeWNsZSBjb250ZXh0IGZvciBhIHNldCBvZiBiaW5kaW5ncy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluZGluZ0xpZmVjeWNsZSB7XG4gIC8qKiBBYm9ydFNpZ25hbCB0aGF0IHRyaWdnZXJzIGF1dG9tYXRpYyBkaXNwb3NhbCB3aGVuIGFib3J0ZWQuICovXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKiogRXhwbGljaXQgZGlzcG9zZXJzIGNvbGxlY3RlZCBmb3IgYmF0Y2ggY2xlYW51cC4gKi9cbiAgZGlzcG9zZXJzPzogU2V0PCgpID0+IHZvaWQ+O1xufVxuXG4vKiogRGlzcG9zZSBmdW5jdGlvbiByZXR1cm5lZCBieSBiaW5kaW5ncyBhbmQgcmVnaXN0ZXJlZCBpbnRvIGxpZmVjeWNsZS4gKi9cbmV4cG9ydCB0eXBlIEJpbmRpbmdEaXNwb3NlID0gKCkgPT4gdm9pZDtcblxuLy8g4pSA4pSA4pSAIFN0YXRpYyBkZXNjcmlwdG9ycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNBdHRyQmluZGluZ0Rlc2NyaXB0b3Ige1xuICBraW5kOiAnc3RhdGljLWF0dHInO1xuICBlbDogRWxlbWVudDtcbiAga2V5OiBzdHJpbmc7XG4gIGF0dHJOYW1lOiBzdHJpbmc7XG4gIHZhbHVlOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRpY1Byb3BCaW5kaW5nRGVzY3JpcHRvciB7XG4gIGtpbmQ6ICdzdGF0aWMtcHJvcCc7XG4gIGVsOiBFbGVtZW50O1xuICBwcm9wTmFtZTogc3RyaW5nO1xuICB2YWx1ZTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNCb29sZWFuQmluZGluZ0Rlc2NyaXB0b3Ige1xuICBraW5kOiAnc3RhdGljLWJvb2xlYW4nO1xuICBlbDogRWxlbWVudDtcbiAgYXR0ck5hbWU6IHN0cmluZztcbiAgdmFsdWU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGljU3R5bGVCaW5kaW5nRGVzY3JpcHRvciB7XG4gIGtpbmQ6ICdzdGF0aWMtc3R5bGUnO1xuICBlbDogRWxlbWVudDtcbiAgdmFsdWU6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj47XG59XG5cbi8vIOKUgOKUgOKUgCBTaWduYWwgZGVzY3JpcHRvcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmFsVGV4dEJpbmRpbmdEZXNjcmlwdG9yIHtcbiAga2luZDogJ3NpZ25hbC10ZXh0JztcbiAgZWw6IEVsZW1lbnQgfCBUZXh0O1xuICBzaWduYWw6IFNpZ25hbDx1bmtub3duPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduYWxDbGFzc0JpbmRpbmdEZXNjcmlwdG9yIHtcbiAga2luZDogJ3NpZ25hbC1jbGFzcyc7XG4gIGVsOiBFbGVtZW50O1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgc2lnbmFsOiBTaWduYWw8dW5rbm93bj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmFsQXR0ckJpbmRpbmdEZXNjcmlwdG9yIHtcbiAga2luZDogJ3NpZ25hbC1hdHRyJztcbiAgZWw6IEVsZW1lbnQ7XG4gIGF0dHJOYW1lczogc3RyaW5nW107XG4gIHNpZ25hbDogU2lnbmFsPHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25hbEh0bWxCaW5kaW5nRGVzY3JpcHRvciB7XG4gIGtpbmQ6ICdzaWduYWwtaHRtbCc7XG4gIGVsOiBFbGVtZW50O1xuICBzaWduYWw6IFNpZ25hbDx1bmtub3duPjtcbiAgdHJ1c3RlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduYWxSZW5kZXJCaW5kaW5nRGVzY3JpcHRvciB7XG4gIGtpbmQ6ICdzaWduYWwtcmVuZGVyJztcbiAgZWw6IEVsZW1lbnQ7XG4gIHNpZ25hbDogU2lnbmFsPHVua25vd24+O1xuICBsaWZlY3ljbGU6IEJpbmRpbmdMaWZlY3ljbGU7XG59XG5cbi8vIOKUgOKUgOKUgCBFdmVudCAvIHJlZiBkZXNjcmlwdG9ycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBFdmVudEJpbmRpbmdEZXNjcmlwdG9yIHtcbiAga2luZDogJ2V2ZW50JztcbiAgZWw6IEV2ZW50VGFyZ2V0O1xuICB0eXBlOiBzdHJpbmc7XG4gIGhhbmRsZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3Q7XG4gIG9wdGlvbnM/OiBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyB8IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVmQmluZGluZ0Rlc2NyaXB0b3Ige1xuICBraW5kOiAncmVmJztcbiAgZWw6IEVsZW1lbnQ7XG4gIGNhbGxiYWNrOiAoZWw6IEVsZW1lbnQpID0+IHZvaWQ7XG59XG5cbi8qKiBVbmlvbiBvZiBhbGwgc3VwcG9ydGVkIGJpbmRpbmcgZGVzY3JpcHRvcnMuICovXG5leHBvcnQgdHlwZSBCaW5kaW5nRGVzY3JpcHRvciA9XG4gIHwgU3RhdGljQXR0ckJpbmRpbmdEZXNjcmlwdG9yXG4gIHwgU3RhdGljUHJvcEJpbmRpbmdEZXNjcmlwdG9yXG4gIHwgU3RhdGljQm9vbGVhbkJpbmRpbmdEZXNjcmlwdG9yXG4gIHwgU3RhdGljU3R5bGVCaW5kaW5nRGVzY3JpcHRvclxuICB8IFNpZ25hbFRleHRCaW5kaW5nRGVzY3JpcHRvclxuICB8IFNpZ25hbENsYXNzQmluZGluZ0Rlc2NyaXB0b3JcbiAgfCBTaWduYWxBdHRyQmluZGluZ0Rlc2NyaXB0b3JcbiAgfCBTaWduYWxIdG1sQmluZGluZ0Rlc2NyaXB0b3JcbiAgfCBTaWduYWxSZW5kZXJCaW5kaW5nRGVzY3JpcHRvclxuICB8IEV2ZW50QmluZGluZ0Rlc2NyaXB0b3JcbiAgfCBSZWZCaW5kaW5nRGVzY3JpcHRvcjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztDQU9DLEdBRUQifQ==
|
package/src/context.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @openelement/core - Request Context
|
|
3
|
+
* Provides a per-request context object that flows through SSR rendering
|
|
4
|
+
* and is accessible to islands and layout components.
|
|
5
|
+
*
|
|
6
|
+
* Web Standards alignment:
|
|
7
|
+
* - Built on standard Request/URL APIs
|
|
8
|
+
* - Minimal framework overhead - only what's needed for SSR + Islands
|
|
9
|
+
*/ import type { RouteEntry } from '@openelement/protocol/framework';
|
|
10
|
+
import type { IslandDescriptor, SsrContext } from '@openelement/protocol/context';
|
|
11
|
+
export type { IslandDescriptor, SsrContext };
|
|
12
|
+
/**
|
|
13
|
+
* Extract route params from a pathname using a route pattern.
|
|
14
|
+
* e.g., pattern '/posts/:id' + pathname '/posts/123' -> { id: '123' }
|
|
15
|
+
*
|
|
16
|
+
* Uses WHATWG URLPattern API - available in:
|
|
17
|
+
* ✅ Deno 1.33+ (native, no flags)
|
|
18
|
+
* ✅ Node.js 19+ (--experimental-url-pattern)
|
|
19
|
+
* ✅ Bun (native)
|
|
20
|
+
* ✅ All modern browsers
|
|
21
|
+
*/ export declare function extractParams(pattern: string, pathname: string): Record<string, string>;
|
|
22
|
+
/**
|
|
23
|
+
* Parse URL search params into a plain object.
|
|
24
|
+
* Uses standard URLSearchParams - zero framework magic.
|
|
25
|
+
* Supports multi-value keys (e.g., ?tag=a&tag=b -> { tag: ['a', 'b'] }).
|
|
26
|
+
*/ export declare function parseQuery(url: URL): Record<string, string | string[]>;
|
|
27
|
+
/**
|
|
28
|
+
* Create a fresh SsrContext for a request.
|
|
29
|
+
* This is the single source of truth for per-request state.
|
|
30
|
+
*/ export declare function createSsrContext(route: RouteEntry, url: URL, options?: {
|
|
31
|
+
requestId?: string;
|
|
32
|
+
}): SsrContext;
|