browser-runtime-svelte 0.0.9 → 0.0.10
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/README.md +1 -1
- package/package.json +2 -2
- package/src/index.js +14 -3
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ Svelte 5 compiler and renderer plugin for [`browser-module-runtime`](https://www
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
7
7
|
```sh
|
|
8
|
-
npm install browser-module-runtime@0.0.
|
|
8
|
+
npm install browser-module-runtime@0.0.10 browser-runtime-svelte@0.0.10 svelte@5
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
## Usage
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "browser-runtime-svelte",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"node": ">=20"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
|
-
"browser-module-runtime": "0.0.
|
|
25
|
+
"browser-module-runtime": "0.0.10",
|
|
26
26
|
"svelte": "^5.0.0"
|
|
27
27
|
},
|
|
28
28
|
"description": "Svelte compiler and renderer adapter for browser-module-runtime.",
|
package/src/index.js
CHANGED
|
@@ -32,12 +32,23 @@ export function svelte({compiler,renderer,reactivity,version='5',provider='esm.s
|
|
|
32
32
|
}],
|
|
33
33
|
renderers:[{
|
|
34
34
|
name:'svelte',types:['svelte','svelte-module'],
|
|
35
|
-
async mount({component,target,props}){
|
|
35
|
+
async mount({component,target,props,children}){
|
|
36
36
|
runtime ||= await (ownerRuntime ? ownerRuntime.import('svelte') : import('svelte'));
|
|
37
37
|
reactiveNamespace ||= await (ownerRuntime ? ownerRuntime.import('svelte/reactivity') : import('svelte/reactivity'));
|
|
38
38
|
const MapType=reactiveNamespace.SvelteMap;
|
|
39
39
|
if(typeof MapType!=='function')throw new TypeError('Svelte 5 renderer requires SvelteMap from svelte/reactivity');
|
|
40
|
-
|
|
40
|
+
// Svelte 5 children must be a snippet, not DOM nodes or a plain string.
|
|
41
|
+
if(children?.count&&typeof runtime.createRawSnippet!=='function')
|
|
42
|
+
throw new TypeError('Svelte children projection requires createRawSnippet() from svelte');
|
|
43
|
+
const snippet=children?.count ? runtime.createRawSnippet(()=>({
|
|
44
|
+
render:()=>children.html()
|
|
45
|
+
})) : undefined;
|
|
46
|
+
const withChildren=next=>{
|
|
47
|
+
const result=snapshotProps(next);
|
|
48
|
+
if(snippet&&!Object.hasOwn(result,'children'))result.children=snippet;
|
|
49
|
+
return result;
|
|
50
|
+
};
|
|
51
|
+
const data=new MapType(Object.entries(withChildren(props)));
|
|
41
52
|
const state=new Proxy(Object.create(null),{
|
|
42
53
|
get(_target,key){return data.get(key);},
|
|
43
54
|
has(_target,key){return data.has(key);},
|
|
@@ -52,7 +63,7 @@ export function svelte({compiler,renderer,reactivity,version='5',provider='esm.s
|
|
|
52
63
|
return {
|
|
53
64
|
async updateProps(next){
|
|
54
65
|
if(closed)throw new Error('Svelte mount has been disposed');
|
|
55
|
-
const incoming=
|
|
66
|
+
const incoming=withChildren(next);
|
|
56
67
|
for(const key of [...data.keys()])if(!Object.hasOwn(incoming,key))data.delete(key);
|
|
57
68
|
for(const [key,value] of Object.entries(incoming))data.set(key,value);
|
|
58
69
|
await runtime.tick?.();
|