@weaverse/core 0.3.2 → 0.3.3

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/dist/index.d.ts CHANGED
@@ -20,6 +20,34 @@ declare type WeaverseType = {
20
20
  projectKey?: string;
21
21
  projectData?: ProjectDataType;
22
22
  };
23
+ /**
24
+ * WeaverseItemStore is a store for Weaverse item, it can be used to subscribe/update the item data
25
+ * @param itemData {ProjectDataItemType} Weaverse item data
26
+ * @param weaverse {Weaverse} Weaverse instance
27
+ * Usage:
28
+ * ```jsx
29
+ * useEffect(() => {
30
+ * let handleUpdate = (update: any) => {
31
+ * setData({...update})
32
+ * }
33
+ * itemInstance.subscribe(handleUpdate)
34
+ * return () => {
35
+ * itemInstance.unsubscribe(handleUpdate)
36
+ * }
37
+ * }, [])
38
+ * ```
39
+ */
40
+ declare class WeaverseItemStore {
41
+ data: any;
42
+ listeners: Set<any>;
43
+ Component: any;
44
+ ref: any;
45
+ constructor(itemData: any, weaverse: Weaverse);
46
+ setData: (data: any) => void;
47
+ subscribe: (fn: any) => void;
48
+ unsubscribe: (fn: any) => void;
49
+ triggerUpdate: () => void;
50
+ }
23
51
  declare class Weaverse {
24
52
  /**
25
53
  * For storing, registering element React component from Weaverse or created by user/developer
@@ -63,6 +91,7 @@ declare class Weaverse {
63
91
  */
64
92
  stitchesInstance: Stitches | any;
65
93
  studioBridge?: any;
94
+ static WeaverseItemStore: typeof WeaverseItemStore;
66
95
  /**
67
96
  * constructor
68
97
  * @param appUrl {string} Weaverse base URL that can provide by user/developer. for local development, use localhost:3000
@@ -77,7 +106,6 @@ declare class Weaverse {
77
106
  */
78
107
  registerElement(name: string, element: any): void;
79
108
  init(): void;
80
- listen(callback: any): void;
81
109
  loadStudio(): void;
82
110
  subscribe(fn: any): void;
83
111
  unsubscribe(fn: any): void;
@@ -91,37 +119,7 @@ declare class Weaverse {
91
119
  * fetch and update the project data, then trigger update to re-render the WeaverseRoot
92
120
  */
93
121
  updateProjectData(): void;
94
- triggerEditorUpdate(type?: string): void;
95
122
  initProjectItemData(): void;
96
- addItem(item: any): WeaverseItemStore;
97
- }
98
- /**
99
- * WeaverseItemStore is a store for Weaverse item, it can be used to subscribe/update the item data
100
- * @param itemData {ProjectDataItemType} Weaverse item data
101
- * @param weaverse {Weaverse} Weaverse instance
102
- * Usage:
103
- * ```jsx
104
- * useEffect(() => {
105
- * let handleUpdate = (update: any) => {
106
- * setData({...update})
107
- * }
108
- * itemInstance.subscribe(handleUpdate)
109
- * return () => {
110
- * itemInstance.unsubscribe(handleUpdate)
111
- * }
112
- * }, [])
113
- * ```
114
- */
115
- declare class WeaverseItemStore {
116
- data: any;
117
- listeners: Set<any>;
118
- Component: any;
119
- ref: any;
120
- constructor(itemData: any, weaverse: Weaverse);
121
- setData: (data: any) => void;
122
- subscribe: (fn: any) => void;
123
- unsubscribe: (fn: any) => void;
124
- triggerUpdate: () => void;
125
123
  }
126
124
 
127
125
  declare const isReactNative: boolean;
package/dist/index.js CHANGED
@@ -43,6 +43,37 @@ var isIframe = isBrowser && window.top !== window.self;
43
43
 
44
44
  // src/core.ts
45
45
  var stitches = __toESM(require("@stitches/core"));
46
+ var WeaverseItemStore = class {
47
+ constructor(itemData = {}, weaverse) {
48
+ this.data = {};
49
+ this.listeners = /* @__PURE__ */ new Set();
50
+ this.ref = {
51
+ current: null
52
+ };
53
+ this.setData = (data) => {
54
+ this.data = Object.assign(this.data, data);
55
+ this.triggerUpdate();
56
+ };
57
+ this.subscribe = (fn) => {
58
+ this.listeners.add(fn);
59
+ };
60
+ this.unsubscribe = (fn) => {
61
+ this.listeners.delete(fn);
62
+ };
63
+ this.triggerUpdate = () => {
64
+ this.listeners.forEach((fn) => {
65
+ return fn(this.data);
66
+ });
67
+ };
68
+ this.data = itemData;
69
+ let { type, id } = itemData;
70
+ if (type && id) {
71
+ this.Component = weaverse.elementInstances.get(type);
72
+ weaverse.itemInstances.set(id, this);
73
+ console.log("WeaverseItemStore created", this);
74
+ }
75
+ }
76
+ };
46
77
  var Weaverse = class {
47
78
  constructor({ appUrl, projectKey, projectData } = {}) {
48
79
  this.elementInstances = /* @__PURE__ */ new Map();
@@ -74,39 +105,32 @@ var Weaverse = class {
74
105
  });
75
106
  this.loadStudio();
76
107
  }
77
- listen(callback) {
78
- if (window.addEventListener) {
79
- window.addEventListener("message", callback, false);
80
- } else {
81
- window.attachEvent("onmessage", callback);
82
- }
83
- }
84
108
  loadStudio() {
109
+ console.log("loadStudio", { isIframe });
85
110
  if (isIframe) {
86
111
  console.log("Weaverse SDK is initializing...", isIframe);
87
- let initStudio = () => {
88
- let StudioBridge = window.WeaverseStudioBridge;
89
- this.studioBridge = new StudioBridge(this);
90
- this.studioBridge.subscribeMessageEvent();
91
- this.triggerUpdate();
92
- console.log("studio bridge initialized", this.studioBridge);
93
- };
94
- window.addEventListener("load", () => {
95
- window.addEventListener("message", (e) => {
96
- var _a;
97
- if (((_a = e.data) == null ? void 0 : _a.type) === "weaverse.editor.ready") {
98
- console.log("studio message", e.data);
99
- this.isEditor = true;
100
- if (!window.WeaverseStudioBridge) {
101
- const studioBridgeScript = document.createElement("script");
102
- studioBridgeScript.src = `${this.appUrl}/assets/studio/studio-bridge.js?t=1`;
103
- studioBridgeScript.onload = initStudio;
104
- document.body.appendChild(studioBridgeScript);
105
- } else {
106
- initStudio();
107
- }
112
+ window.addEventListener("message", (e) => {
113
+ var _a;
114
+ if (((_a = e.data) == null ? void 0 : _a.type) === "weaverse.preview.initializeEditor") {
115
+ let initStudio = () => {
116
+ let StudioBridge = window.WeaverseStudioBridge;
117
+ this.studioBridge = new StudioBridge(this);
118
+ this.studioBridge.subscribeMessageEvent();
119
+ this.triggerUpdate();
120
+ console.log("studio bridge initialized", this.studioBridge);
121
+ };
122
+ console.log("studio message", e.data);
123
+ this.isEditor = true;
124
+ if (!window.WeaverseStudioBridge) {
125
+ const studioBridgeScript = document.createElement("script");
126
+ studioBridgeScript.src = `${this.appUrl}/assets/studio/studio-bridge.js`;
127
+ studioBridgeScript.type = "module";
128
+ studioBridgeScript.onload = initStudio;
129
+ document.body.appendChild(studioBridgeScript);
130
+ } else {
131
+ initStudio();
108
132
  }
109
- });
133
+ }
110
134
  });
111
135
  }
112
136
  }
@@ -118,7 +142,13 @@ var Weaverse = class {
118
142
  }
119
143
  triggerUpdate() {
120
144
  this.listeners.forEach((fn) => fn());
121
- this.triggerEditorUpdate();
145
+ if (this.isEditor && this.studioBridge) {
146
+ this.studioBridge.sendMessageToEditor("weaverse.editor.updateProject", {
147
+ projectData: this.projectData,
148
+ projectKey: this.projectKey,
149
+ appUrl: this.appUrl
150
+ });
151
+ }
122
152
  }
123
153
  fetchProjectData(fetch = globalThis.fetch) {
124
154
  console.log("fetching project data...");
@@ -137,59 +167,20 @@ var Weaverse = class {
137
167
  });
138
168
  }
139
169
  }
140
- triggerEditorUpdate(type = "weaverse.workspace.init") {
141
- if (this.isEditor && this.studioBridge) {
142
- this.studioBridge.sendMessageToEditor(type, {
143
- projectData: this.projectData,
144
- projectKey: this.projectKey,
145
- appUrl: this.appUrl
146
- });
147
- }
148
- }
149
170
  initProjectItemData() {
150
171
  let data = this.projectData;
172
+ console.log("init project data", data);
151
173
  if (data.items) {
152
174
  data.items.forEach((item) => {
153
- let itemStore = this.itemInstances.get(item.id) || new WeaverseItemStore(item, this);
154
- this.itemInstances.set(item.id, itemStore);
155
- });
156
- }
157
- }
158
- addItem(item) {
159
- let itemStore = new WeaverseItemStore(item, this);
160
- this.itemInstances.set(item.id, itemStore);
161
- return itemStore;
162
- }
163
- };
164
- var WeaverseItemStore = class {
165
- constructor(itemData = {}, weaverse) {
166
- this.data = {};
167
- this.listeners = /* @__PURE__ */ new Set();
168
- this.ref = {
169
- current: null
170
- };
171
- this.setData = (data) => {
172
- this.data = Object.assign(this.data, data);
173
- this.triggerUpdate();
174
- };
175
- this.subscribe = (fn) => {
176
- this.listeners.add(fn);
177
- };
178
- this.unsubscribe = (fn) => {
179
- this.listeners.delete(fn);
180
- };
181
- this.triggerUpdate = () => {
182
- this.listeners.forEach((fn) => {
183
- return fn(this.data);
175
+ if (!this.itemInstances.get(item.id)) {
176
+ console.log("init item instance", item);
177
+ new WeaverseItemStore(item, this);
178
+ }
184
179
  });
185
- };
186
- this.data = itemData;
187
- let { type, id } = itemData;
188
- if (type && id) {
189
- this.Component = weaverse.elementInstances.get(type);
190
180
  }
191
181
  }
192
182
  };
183
+ Weaverse.WeaverseItemStore = WeaverseItemStore;
193
184
  module.exports = __toCommonJS(src_exports);
194
185
  // Annotate the CommonJS export names for ESM import in node:
195
186
  0 && (module.exports = {
package/dist/index.mjs CHANGED
@@ -5,6 +5,37 @@ var isIframe = isBrowser && window.top !== window.self;
5
5
 
6
6
  // src/core.ts
7
7
  import * as stitches from "@stitches/core";
8
+ var WeaverseItemStore = class {
9
+ constructor(itemData = {}, weaverse) {
10
+ this.data = {};
11
+ this.listeners = /* @__PURE__ */ new Set();
12
+ this.ref = {
13
+ current: null
14
+ };
15
+ this.setData = (data) => {
16
+ this.data = Object.assign(this.data, data);
17
+ this.triggerUpdate();
18
+ };
19
+ this.subscribe = (fn) => {
20
+ this.listeners.add(fn);
21
+ };
22
+ this.unsubscribe = (fn) => {
23
+ this.listeners.delete(fn);
24
+ };
25
+ this.triggerUpdate = () => {
26
+ this.listeners.forEach((fn) => {
27
+ return fn(this.data);
28
+ });
29
+ };
30
+ this.data = itemData;
31
+ let { type, id } = itemData;
32
+ if (type && id) {
33
+ this.Component = weaverse.elementInstances.get(type);
34
+ weaverse.itemInstances.set(id, this);
35
+ console.log("WeaverseItemStore created", this);
36
+ }
37
+ }
38
+ };
8
39
  var Weaverse = class {
9
40
  constructor({ appUrl, projectKey, projectData } = {}) {
10
41
  this.elementInstances = /* @__PURE__ */ new Map();
@@ -36,39 +67,32 @@ var Weaverse = class {
36
67
  });
37
68
  this.loadStudio();
38
69
  }
39
- listen(callback) {
40
- if (window.addEventListener) {
41
- window.addEventListener("message", callback, false);
42
- } else {
43
- window.attachEvent("onmessage", callback);
44
- }
45
- }
46
70
  loadStudio() {
71
+ console.log("loadStudio", { isIframe });
47
72
  if (isIframe) {
48
73
  console.log("Weaverse SDK is initializing...", isIframe);
49
- let initStudio = () => {
50
- let StudioBridge = window.WeaverseStudioBridge;
51
- this.studioBridge = new StudioBridge(this);
52
- this.studioBridge.subscribeMessageEvent();
53
- this.triggerUpdate();
54
- console.log("studio bridge initialized", this.studioBridge);
55
- };
56
- window.addEventListener("load", () => {
57
- window.addEventListener("message", (e) => {
58
- var _a;
59
- if (((_a = e.data) == null ? void 0 : _a.type) === "weaverse.editor.ready") {
60
- console.log("studio message", e.data);
61
- this.isEditor = true;
62
- if (!window.WeaverseStudioBridge) {
63
- const studioBridgeScript = document.createElement("script");
64
- studioBridgeScript.src = `${this.appUrl}/assets/studio/studio-bridge.js?t=1`;
65
- studioBridgeScript.onload = initStudio;
66
- document.body.appendChild(studioBridgeScript);
67
- } else {
68
- initStudio();
69
- }
74
+ window.addEventListener("message", (e) => {
75
+ var _a;
76
+ if (((_a = e.data) == null ? void 0 : _a.type) === "weaverse.preview.initializeEditor") {
77
+ let initStudio = () => {
78
+ let StudioBridge = window.WeaverseStudioBridge;
79
+ this.studioBridge = new StudioBridge(this);
80
+ this.studioBridge.subscribeMessageEvent();
81
+ this.triggerUpdate();
82
+ console.log("studio bridge initialized", this.studioBridge);
83
+ };
84
+ console.log("studio message", e.data);
85
+ this.isEditor = true;
86
+ if (!window.WeaverseStudioBridge) {
87
+ const studioBridgeScript = document.createElement("script");
88
+ studioBridgeScript.src = `${this.appUrl}/assets/studio/studio-bridge.js`;
89
+ studioBridgeScript.type = "module";
90
+ studioBridgeScript.onload = initStudio;
91
+ document.body.appendChild(studioBridgeScript);
92
+ } else {
93
+ initStudio();
70
94
  }
71
- });
95
+ }
72
96
  });
73
97
  }
74
98
  }
@@ -80,7 +104,13 @@ var Weaverse = class {
80
104
  }
81
105
  triggerUpdate() {
82
106
  this.listeners.forEach((fn) => fn());
83
- this.triggerEditorUpdate();
107
+ if (this.isEditor && this.studioBridge) {
108
+ this.studioBridge.sendMessageToEditor("weaverse.editor.updateProject", {
109
+ projectData: this.projectData,
110
+ projectKey: this.projectKey,
111
+ appUrl: this.appUrl
112
+ });
113
+ }
84
114
  }
85
115
  fetchProjectData(fetch = globalThis.fetch) {
86
116
  console.log("fetching project data...");
@@ -99,59 +129,20 @@ var Weaverse = class {
99
129
  });
100
130
  }
101
131
  }
102
- triggerEditorUpdate(type = "weaverse.workspace.init") {
103
- if (this.isEditor && this.studioBridge) {
104
- this.studioBridge.sendMessageToEditor(type, {
105
- projectData: this.projectData,
106
- projectKey: this.projectKey,
107
- appUrl: this.appUrl
108
- });
109
- }
110
- }
111
132
  initProjectItemData() {
112
133
  let data = this.projectData;
134
+ console.log("init project data", data);
113
135
  if (data.items) {
114
136
  data.items.forEach((item) => {
115
- let itemStore = this.itemInstances.get(item.id) || new WeaverseItemStore(item, this);
116
- this.itemInstances.set(item.id, itemStore);
117
- });
118
- }
119
- }
120
- addItem(item) {
121
- let itemStore = new WeaverseItemStore(item, this);
122
- this.itemInstances.set(item.id, itemStore);
123
- return itemStore;
124
- }
125
- };
126
- var WeaverseItemStore = class {
127
- constructor(itemData = {}, weaverse) {
128
- this.data = {};
129
- this.listeners = /* @__PURE__ */ new Set();
130
- this.ref = {
131
- current: null
132
- };
133
- this.setData = (data) => {
134
- this.data = Object.assign(this.data, data);
135
- this.triggerUpdate();
136
- };
137
- this.subscribe = (fn) => {
138
- this.listeners.add(fn);
139
- };
140
- this.unsubscribe = (fn) => {
141
- this.listeners.delete(fn);
142
- };
143
- this.triggerUpdate = () => {
144
- this.listeners.forEach((fn) => {
145
- return fn(this.data);
137
+ if (!this.itemInstances.get(item.id)) {
138
+ console.log("init item instance", item);
139
+ new WeaverseItemStore(item, this);
140
+ }
146
141
  });
147
- };
148
- this.data = itemData;
149
- let { type, id } = itemData;
150
- if (type && id) {
151
- this.Component = weaverse.elementInstances.get(type);
152
142
  }
153
143
  }
154
144
  };
145
+ Weaverse.WeaverseItemStore = WeaverseItemStore;
155
146
  export {
156
147
  Weaverse,
157
148
  WeaverseItemStore,
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.3.2",
2
+ "version": "0.3.3",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -16,12 +16,12 @@
16
16
  "scripts": {
17
17
  "start": "npm run dev",
18
18
  "dev": "tsup src/index.ts --format esm,cjs --dts --outDir dist --watch",
19
- "build": "tsup src/index.ts --format esm,cjs --dts --outDir dist"
19
+ "build": "tsup src/index.ts --format esm,cjs --dts --outDir dist",
20
+ "prepublish": "npm run build"
20
21
  },
21
22
  "name": "@weaverse/core",
22
23
  "author": "Paul",
23
24
  "dependencies": {
24
- "@stitches/core": "^1.2.7",
25
- "uuid": "^8.3.2"
25
+ "@stitches/core": "^1.2.7"
26
26
  }
27
27
  }