browser-runtime-vue 0.0.4 → 0.0.8
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 +2 -2
- package/src/index.js +10 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "browser-runtime-vue",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Vue 3 SFC compiler and reactive renderer adapter for browser-module-runtime.",
|
|
6
6
|
"exports": {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"README.md"
|
|
16
16
|
],
|
|
17
17
|
"peerDependencies": {
|
|
18
|
-
"browser-module-runtime": "0.0.
|
|
18
|
+
"browser-module-runtime": "0.0.8",
|
|
19
19
|
"vue": "^3.5.0"
|
|
20
20
|
},
|
|
21
21
|
"peerDependenciesMeta": {
|
package/src/index.js
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
function snapshotProps(next){
|
|
2
|
+
if(next===null||typeof next!=="object"||Array.isArray(next)||
|
|
3
|
+
(Object.getPrototypeOf(next)!==Object.prototype&&Object.getPrototypeOf(next)!==null))
|
|
4
|
+
throw new TypeError('updateProps expects a plain object of next props');
|
|
5
|
+
return {...next};
|
|
6
|
+
}
|
|
1
7
|
import {normalizeInlineVue} from './inline-source.js';
|
|
2
8
|
export {normalizeInlineVue} from './inline-source.js';
|
|
3
9
|
|
|
@@ -29,7 +35,7 @@ export function vue({compiler,renderer,version='3.5.18',provider='esm.sh',script
|
|
|
29
35
|
throw new TypeError('Vue renderer requires createApp(), h(), and reactive().');
|
|
30
36
|
// Parent wrapper keeps the component mounted when props change.
|
|
31
37
|
// Spreading state inside render tracks every property and allows additions/removals.
|
|
32
|
-
const state=vueRuntime.reactive(
|
|
38
|
+
const state=vueRuntime.reactive(snapshotProps(props));
|
|
33
39
|
const wrapper={name:'BrowserRuntimeVueHost',render(){return vueRuntime.h(component,{...state});}};
|
|
34
40
|
const app=vueRuntime.createApp(wrapper);
|
|
35
41
|
app.mount(target);
|
|
@@ -37,9 +43,9 @@ export function vue({compiler,renderer,version='3.5.18',provider='esm.sh',script
|
|
|
37
43
|
return {
|
|
38
44
|
updateProps(next){
|
|
39
45
|
if(disposed)throw new Error('Vue mount has been disposed');
|
|
40
|
-
|
|
41
|
-
for(const key of Object.keys(state))if(!Object.hasOwn(
|
|
42
|
-
Object.assign(state,
|
|
46
|
+
const incoming=snapshotProps(next);
|
|
47
|
+
for(const key of Object.keys(state))if(!Object.hasOwn(incoming,key))delete state[key];
|
|
48
|
+
Object.assign(state,incoming);
|
|
43
49
|
},
|
|
44
50
|
dispose(){if(!disposed){disposed=true;app.unmount();}}
|
|
45
51
|
};
|