browser-runtime-vue 0.0.7 → 0.0.9

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.
Files changed (2) hide show
  1. package/package.json +2 -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.7",
3
+ "version": "0.0.9",
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.7",
18
+ "browser-module-runtime": "0.0.9",
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({...props});
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
- if(!next||typeof next!=='object'||Array.isArray(next))throw new TypeError('Vue props must be a plain object');
41
- for(const key of Object.keys(state))if(!Object.hasOwn(next,key))delete state[key];
42
- Object.assign(state,next);
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
  };