@weaverse/core 0.3.1 → 0.3.4

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
@@ -1,5 +1,21 @@
1
1
  import Stitches from '@stitches/core/types/stitches';
2
2
 
3
+ declare type WeaverseElement = {
4
+ Component: any;
5
+ schema: {
6
+ type: string;
7
+ [key: string]: any;
8
+ };
9
+ };
10
+ declare type WeaverseElementMap = {
11
+ [key: string]: WeaverseElement;
12
+ };
13
+ declare global {
14
+ interface Window {
15
+ WeaverseStudioBridge: any;
16
+ }
17
+ }
18
+
3
19
  interface ProjectDataItemType {
4
20
  type: string;
5
21
  name?: string;
@@ -12,6 +28,7 @@ interface ProjectDataItemType {
12
28
  }
13
29
  interface ProjectDataType {
14
30
  items: ProjectDataItemType[];
31
+ rootId: string | number;
15
32
  }
16
33
  declare type WeaverseType = {
17
34
  [key: string]: any;
@@ -19,12 +36,40 @@ declare type WeaverseType = {
19
36
  projectKey?: string;
20
37
  projectData?: ProjectDataType;
21
38
  };
39
+ /**
40
+ * WeaverseItemStore is a store for Weaverse item, it can be used to subscribe/update the item data
41
+ * @param itemData {ProjectDataItemType} Weaverse item data
42
+ * @param weaverse {Weaverse} Weaverse instance
43
+ * Usage:
44
+ * ```jsx
45
+ * useEffect(() => {
46
+ * let handleUpdate = (update: any) => {
47
+ * setData({...update})
48
+ * }
49
+ * itemInstance.subscribe(handleUpdate)
50
+ * return () => {
51
+ * itemInstance.unsubscribe(handleUpdate)
52
+ * }
53
+ * }, [])
54
+ * ```
55
+ */
56
+ declare class WeaverseItemStore {
57
+ data: any;
58
+ listeners: Set<any>;
59
+ Component: any;
60
+ ref: any;
61
+ constructor(itemData: any, weaverse: Weaverse);
62
+ setData: (data: any) => void;
63
+ subscribe: (fn: any) => void;
64
+ unsubscribe: (fn: any) => void;
65
+ triggerUpdate: () => void;
66
+ }
22
67
  declare class Weaverse {
23
68
  /**
24
69
  * For storing, registering element React component from Weaverse or created by user/developer
25
70
  * @type {Map<string, React.Component>}
26
71
  */
27
- elementInstances: Map<string, any>;
72
+ elementInstances: Map<string, WeaverseElement>;
28
73
  /**
29
74
  * list of element/items store to provide data, handle state update, state sharing, etc.
30
75
  * @type {Map<string, any>}
@@ -62,6 +107,7 @@ declare class Weaverse {
62
107
  */
63
108
  stitchesInstance: Stitches | any;
64
109
  studioBridge?: any;
110
+ static WeaverseItemStore: typeof WeaverseItemStore;
65
111
  /**
66
112
  * constructor
67
113
  * @param appUrl {string} Weaverse base URL that can provide by user/developer. for local development, use localhost:3000
@@ -74,7 +120,7 @@ declare class Weaverse {
74
120
  * @param name {string} unique name of the custom React Component
75
121
  * @param element {React.Component} custom React Component
76
122
  */
77
- registerElement(name: string, element: any): void;
123
+ registerElement(element: WeaverseElement): void;
78
124
  init(): void;
79
125
  loadStudio(): void;
80
126
  subscribe(fn: any): void;
@@ -82,46 +128,18 @@ declare class Weaverse {
82
128
  triggerUpdate(): void;
83
129
  /**
84
130
  * fetch data from Weaverse API (https://weaverse.io/api/v1/projects/:projectKey)
131
+ * @param fetch {fetch} custom fetch function, pass in custom fetch function if you want to use your own fetch function
85
132
  */
86
- fetchProjectData(): Promise<any>;
133
+ fetchProjectData(fetch?: typeof globalThis.fetch): Promise<any>;
87
134
  /**
88
135
  * fetch and update the project data, then trigger update to re-render the WeaverseRoot
89
136
  */
90
137
  updateProjectData(): void;
91
- triggerEditorUpdate(type?: string): void;
92
- initItemData(): void;
93
- }
94
- /**
95
- * WeaverseItemStore is a store for Weaverse item, it can be used to subscribe/update the item data
96
- * @param itemData {ProjectDataItemType} Weaverse item data
97
- * @param weaverse {Weaverse} Weaverse instance
98
- * Usage:
99
- * ```jsx
100
- * useEffect(() => {
101
- * let handleUpdate = (update: any) => {
102
- * setData({...update})
103
- * }
104
- * itemInstance.subscribe(handleUpdate)
105
- * return () => {
106
- * itemInstance.unsubscribe(handleUpdate)
107
- * }
108
- * }, [])
109
- * ```
110
- */
111
- declare class WeaverseItemStore {
112
- data: any;
113
- listeners: Set<any>;
114
- Component: any;
115
- ref: any;
116
- constructor(itemData: any, weaverse: Weaverse);
117
- setData: (data: any) => void;
118
- subscribe: (fn: any) => void;
119
- unsubscribe: (fn: any) => void;
120
- triggerUpdate: () => void;
138
+ initProjectItemData(): void;
121
139
  }
122
140
 
123
141
  declare const isReactNative: boolean;
124
142
  declare const isBrowser: boolean;
125
143
  declare const isIframe: boolean;
126
144
 
127
- export { ProjectDataItemType, ProjectDataType, Weaverse, WeaverseItemStore, WeaverseType, isBrowser, isIframe, isReactNative };
145
+ export { ProjectDataItemType, ProjectDataType, Weaverse, WeaverseElement, WeaverseElementMap, WeaverseItemStore, WeaverseType, isBrowser, isIframe, isReactNative };
package/dist/index.js CHANGED
@@ -4,52 +4,20 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getProtoOf = Object.getPrototypeOf;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
- var __esm = (fn, res) => function __init() {
9
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
10
- };
11
- var __commonJS = (cb, mod) => function __require() {
12
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
13
- };
14
7
  var __export = (target, all) => {
15
8
  for (var name in all)
16
9
  __defProp(target, name, { get: all[name], enumerable: true });
17
10
  };
18
- var __reExport = (target, module2, copyDefault, desc) => {
19
- if (module2 && typeof module2 === "object" || typeof module2 === "function") {
20
- for (let key of __getOwnPropNames(module2))
21
- if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
22
- __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
16
  }
24
- return target;
25
- };
26
- var __toESM = (module2, isNodeMode) => {
27
- return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
17
+ return to;
28
18
  };
29
- var __toCommonJS = /* @__PURE__ */ ((cache) => {
30
- return (module2, temp) => {
31
- return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
32
- };
33
- })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
34
-
35
- // ../../node_modules/tsup/assets/cjs_shims.js
36
- var init_cjs_shims = __esm({
37
- "../../node_modules/tsup/assets/cjs_shims.js"() {
38
- }
39
- });
40
-
41
- // src/utils/fetch.js
42
- var require_fetch = __commonJS({
43
- "src/utils/fetch.js"(exports, module2) {
44
- init_cjs_shims();
45
- function r(m) {
46
- return m && m.default || m;
47
- }
48
- module2.exports = globalThis.fetch = globalThis.fetch || (typeof process == "undefined" ? r(require("unfetch")) : function(url, opts) {
49
- return r(require("node-fetch"))(String(url).replace(/^\/\//g, "https://"), opts);
50
- });
51
- }
52
- });
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
53
21
 
54
22
  // src/index.ts
55
23
  var src_exports = {};
@@ -60,20 +28,45 @@ __export(src_exports, {
60
28
  isIframe: () => isIframe,
61
29
  isReactNative: () => isReactNative
62
30
  });
63
- init_cjs_shims();
64
-
65
- // src/core.ts
66
- init_cjs_shims();
67
- var import_fetch = __toESM(require_fetch());
31
+ module.exports = __toCommonJS(src_exports);
68
32
 
69
33
  // src/utils/index.ts
70
- init_cjs_shims();
71
34
  var isReactNative = typeof navigator === "object" && navigator.product === "ReactNative";
72
35
  var isBrowser = typeof window !== "undefined" && !isReactNative;
73
36
  var isIframe = isBrowser && window.top !== window.self;
74
37
 
75
38
  // src/core.ts
76
39
  var stitches = __toESM(require("@stitches/core"));
40
+ var WeaverseItemStore = class {
41
+ constructor(itemData = {}, weaverse) {
42
+ this.data = {};
43
+ this.listeners = /* @__PURE__ */ new Set();
44
+ this.ref = {
45
+ current: null
46
+ };
47
+ this.setData = (data) => {
48
+ this.data = Object.assign(this.data, data);
49
+ this.triggerUpdate();
50
+ };
51
+ this.subscribe = (fn) => {
52
+ this.listeners.add(fn);
53
+ };
54
+ this.unsubscribe = (fn) => {
55
+ this.listeners.delete(fn);
56
+ };
57
+ this.triggerUpdate = () => {
58
+ this.listeners.forEach((fn) => {
59
+ return fn(this.data);
60
+ });
61
+ };
62
+ this.data = itemData;
63
+ let { type, id } = itemData;
64
+ if (type && id) {
65
+ this.Component = weaverse.elementInstances.get(type);
66
+ weaverse.itemInstances.set(id, this);
67
+ }
68
+ }
69
+ };
77
70
  var Weaverse = class {
78
71
  constructor({ appUrl, projectKey, projectData } = {}) {
79
72
  this.elementInstances = /* @__PURE__ */ new Map();
@@ -81,7 +74,8 @@ var Weaverse = class {
81
74
  this.appUrl = process.env.NODE_ENV === "development" ? "http://localhost:3000" : "https://weaverse.io";
82
75
  this.projectKey = "";
83
76
  this.projectData = {
84
- items: []
77
+ items: [],
78
+ rootId: 0
85
79
  };
86
80
  this.listeners = /* @__PURE__ */ new Set();
87
81
  this.isEditor = false;
@@ -90,12 +84,17 @@ var Weaverse = class {
90
84
  projectData && (this.projectData = projectData);
91
85
  this.init();
92
86
  }
93
- registerElement(name, element) {
94
- this.elementInstances.set(name, element);
87
+ registerElement(element) {
88
+ var _a;
89
+ if ((_a = element == null ? void 0 : element.schema) == null ? void 0 : _a.type) {
90
+ this.elementInstances.set(element.schema.type, element);
91
+ } else {
92
+ throw new Error("Weaverse: registerElement: schema.type is required");
93
+ }
95
94
  }
96
95
  init() {
97
96
  this.stitchesInstance = stitches.createStitches({
98
- prefix: "weaverse",
97
+ prefix: "we",
99
98
  media: {
100
99
  bp1: "(min-width: 640px)",
101
100
  bp2: "(max-width: 768px)",
@@ -106,20 +105,20 @@ var Weaverse = class {
106
105
  }
107
106
  loadStudio() {
108
107
  if (isIframe) {
109
- let initStudio = () => {
110
- let StudioBridge = window.WeaverseStudioBridge;
111
- this.studioBridge = new StudioBridge(this);
112
- this.studioBridge.subscribeMessageEvent();
113
- this.triggerUpdate();
114
- console.log("studio bridge initialized", this.studioBridge);
115
- };
116
108
  window.addEventListener("message", (e) => {
117
109
  var _a;
118
- if (((_a = e.data) == null ? void 0 : _a.type) === "weaverse.editor.ready") {
110
+ if (((_a = e.data) == null ? void 0 : _a.type) === "weaverse.preview.initializeEditor") {
111
+ let initStudio = () => {
112
+ let StudioBridge = window.WeaverseStudioBridge;
113
+ this.studioBridge = new StudioBridge(this);
114
+ this.studioBridge.subscribeMessageEvent();
115
+ this.triggerUpdate();
116
+ };
119
117
  this.isEditor = true;
120
118
  if (!window.WeaverseStudioBridge) {
121
119
  const studioBridgeScript = document.createElement("script");
122
120
  studioBridgeScript.src = `${this.appUrl}/assets/studio/studio-bridge.js`;
121
+ studioBridgeScript.type = "module";
123
122
  studioBridgeScript.onload = initStudio;
124
123
  document.body.appendChild(studioBridgeScript);
125
124
  } else {
@@ -137,17 +136,23 @@ var Weaverse = class {
137
136
  }
138
137
  triggerUpdate() {
139
138
  this.listeners.forEach((fn) => fn());
140
- this.triggerEditorUpdate();
139
+ if (this.isEditor && this.studioBridge) {
140
+ this.studioBridge.sendMessageToEditor("weaverse.editor.updateProject", {
141
+ projectData: this.projectData,
142
+ projectKey: this.projectKey,
143
+ appUrl: this.appUrl
144
+ });
145
+ }
141
146
  }
142
- fetchProjectData() {
143
- return (0, import_fetch.default)(this.appUrl + `/api/public/${this.projectKey}`).then((r) => r.json()).catch(console.error);
147
+ fetchProjectData(fetch = globalThis.fetch) {
148
+ return fetch(this.appUrl + `/api/public/${this.projectKey}`).then((r) => r.json()).catch(console.error);
144
149
  }
145
150
  updateProjectData() {
146
151
  if (this.projectKey) {
147
152
  this.fetchProjectData().then((data) => {
148
153
  if (data) {
149
154
  this.projectData = data;
150
- this.initItemData();
155
+ this.initProjectItemData();
151
156
  this.triggerUpdate();
152
157
  }
153
158
  }).catch((err) => {
@@ -155,55 +160,18 @@ var Weaverse = class {
155
160
  });
156
161
  }
157
162
  }
158
- triggerEditorUpdate(type = "weaverse.workspace.init") {
159
- if (this.isEditor && this.studioBridge) {
160
- this.studioBridge.sendMessageToEditor(type, {
161
- projectData: this.projectData,
162
- projectKey: this.projectKey,
163
- appUrl: this.appUrl
164
- });
165
- }
166
- }
167
- initItemData() {
163
+ initProjectItemData() {
168
164
  let data = this.projectData;
169
165
  if (data.items) {
170
166
  data.items.forEach((item) => {
171
- let itemStore = this.itemInstances.get(item.id) || new WeaverseItemStore(item, this);
172
- this.itemInstances.set(item.id, itemStore);
173
- });
174
- }
175
- }
176
- };
177
- var WeaverseItemStore = class {
178
- constructor(itemData = {}, weaverse) {
179
- this.data = {};
180
- this.listeners = /* @__PURE__ */ new Set();
181
- this.ref = {
182
- current: null
183
- };
184
- this.setData = (data) => {
185
- this.data = Object.assign(this.data, data);
186
- this.triggerUpdate();
187
- };
188
- this.subscribe = (fn) => {
189
- this.listeners.add(fn);
190
- };
191
- this.unsubscribe = (fn) => {
192
- this.listeners.delete(fn);
193
- };
194
- this.triggerUpdate = () => {
195
- this.listeners.forEach((fn) => {
196
- return fn(this.data);
167
+ if (!this.itemInstances.get(item.id)) {
168
+ new WeaverseItemStore(item, this);
169
+ }
197
170
  });
198
- };
199
- this.data = itemData;
200
- let { type } = itemData;
201
- if (type) {
202
- this.Component = weaverse.elementInstances.get(type);
203
171
  }
204
172
  }
205
173
  };
206
- module.exports = __toCommonJS(src_exports);
174
+ Weaverse.WeaverseItemStore = WeaverseItemStore;
207
175
  // Annotate the CommonJS export names for ESM import in node:
208
176
  0 && (module.exports = {
209
177
  Weaverse,
package/dist/index.mjs CHANGED
@@ -1,69 +1,40 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
9
- get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
10
- }) : x)(function(x) {
11
- if (typeof require !== "undefined")
12
- return require.apply(this, arguments);
13
- throw new Error('Dynamic require of "' + x + '" is not supported');
14
- });
15
- var __esm = (fn, res) => function __init() {
16
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
17
- };
18
- var __commonJS = (cb, mod) => function __require2() {
19
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
20
- };
21
- var __reExport = (target, module, copyDefault, desc) => {
22
- if (module && typeof module === "object" || typeof module === "function") {
23
- for (let key of __getOwnPropNames(module))
24
- if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
25
- __defProp(target, key, { get: () => module[key], enumerable: !(desc = __getOwnPropDesc(module, key)) || desc.enumerable });
26
- }
27
- return target;
28
- };
29
- var __toESM = (module, isNodeMode) => {
30
- return __reExport(__markAsModule(__defProp(module != null ? __create(__getProtoOf(module)) : {}, "default", !isNodeMode && module && module.__esModule ? { get: () => module.default, enumerable: true } : { value: module, enumerable: true })), module);
31
- };
32
-
33
- // ../../node_modules/tsup/assets/esm_shims.js
34
- var init_esm_shims = __esm({
35
- "../../node_modules/tsup/assets/esm_shims.js"() {
36
- }
37
- });
38
-
39
- // src/utils/fetch.js
40
- var require_fetch = __commonJS({
41
- "src/utils/fetch.js"(exports, module) {
42
- init_esm_shims();
43
- function r(m) {
44
- return m && m.default || m;
45
- }
46
- module.exports = globalThis.fetch = globalThis.fetch || (typeof process == "undefined" ? r(__require("unfetch")) : function(url, opts) {
47
- return r(__require("node-fetch"))(String(url).replace(/^\/\//g, "https://"), opts);
48
- });
49
- }
50
- });
51
-
52
- // src/index.ts
53
- init_esm_shims();
54
-
55
- // src/core.ts
56
- init_esm_shims();
57
- var import_fetch = __toESM(require_fetch());
58
-
59
1
  // src/utils/index.ts
60
- init_esm_shims();
61
2
  var isReactNative = typeof navigator === "object" && navigator.product === "ReactNative";
62
3
  var isBrowser = typeof window !== "undefined" && !isReactNative;
63
4
  var isIframe = isBrowser && window.top !== window.self;
64
5
 
65
6
  // src/core.ts
66
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
+ }
36
+ }
37
+ };
67
38
  var Weaverse = class {
68
39
  constructor({ appUrl, projectKey, projectData } = {}) {
69
40
  this.elementInstances = /* @__PURE__ */ new Map();
@@ -71,7 +42,8 @@ var Weaverse = class {
71
42
  this.appUrl = process.env.NODE_ENV === "development" ? "http://localhost:3000" : "https://weaverse.io";
72
43
  this.projectKey = "";
73
44
  this.projectData = {
74
- items: []
45
+ items: [],
46
+ rootId: 0
75
47
  };
76
48
  this.listeners = /* @__PURE__ */ new Set();
77
49
  this.isEditor = false;
@@ -80,12 +52,17 @@ var Weaverse = class {
80
52
  projectData && (this.projectData = projectData);
81
53
  this.init();
82
54
  }
83
- registerElement(name, element) {
84
- this.elementInstances.set(name, element);
55
+ registerElement(element) {
56
+ var _a;
57
+ if ((_a = element == null ? void 0 : element.schema) == null ? void 0 : _a.type) {
58
+ this.elementInstances.set(element.schema.type, element);
59
+ } else {
60
+ throw new Error("Weaverse: registerElement: schema.type is required");
61
+ }
85
62
  }
86
63
  init() {
87
64
  this.stitchesInstance = stitches.createStitches({
88
- prefix: "weaverse",
65
+ prefix: "we",
89
66
  media: {
90
67
  bp1: "(min-width: 640px)",
91
68
  bp2: "(max-width: 768px)",
@@ -96,20 +73,20 @@ var Weaverse = class {
96
73
  }
97
74
  loadStudio() {
98
75
  if (isIframe) {
99
- let initStudio = () => {
100
- let StudioBridge = window.WeaverseStudioBridge;
101
- this.studioBridge = new StudioBridge(this);
102
- this.studioBridge.subscribeMessageEvent();
103
- this.triggerUpdate();
104
- console.log("studio bridge initialized", this.studioBridge);
105
- };
106
76
  window.addEventListener("message", (e) => {
107
77
  var _a;
108
- if (((_a = e.data) == null ? void 0 : _a.type) === "weaverse.editor.ready") {
78
+ if (((_a = e.data) == null ? void 0 : _a.type) === "weaverse.preview.initializeEditor") {
79
+ let initStudio = () => {
80
+ let StudioBridge = window.WeaverseStudioBridge;
81
+ this.studioBridge = new StudioBridge(this);
82
+ this.studioBridge.subscribeMessageEvent();
83
+ this.triggerUpdate();
84
+ };
109
85
  this.isEditor = true;
110
86
  if (!window.WeaverseStudioBridge) {
111
87
  const studioBridgeScript = document.createElement("script");
112
88
  studioBridgeScript.src = `${this.appUrl}/assets/studio/studio-bridge.js`;
89
+ studioBridgeScript.type = "module";
113
90
  studioBridgeScript.onload = initStudio;
114
91
  document.body.appendChild(studioBridgeScript);
115
92
  } else {
@@ -127,17 +104,23 @@ var Weaverse = class {
127
104
  }
128
105
  triggerUpdate() {
129
106
  this.listeners.forEach((fn) => fn());
130
- 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
+ }
131
114
  }
132
- fetchProjectData() {
133
- return (0, import_fetch.default)(this.appUrl + `/api/public/${this.projectKey}`).then((r) => r.json()).catch(console.error);
115
+ fetchProjectData(fetch = globalThis.fetch) {
116
+ return fetch(this.appUrl + `/api/public/${this.projectKey}`).then((r) => r.json()).catch(console.error);
134
117
  }
135
118
  updateProjectData() {
136
119
  if (this.projectKey) {
137
120
  this.fetchProjectData().then((data) => {
138
121
  if (data) {
139
122
  this.projectData = data;
140
- this.initItemData();
123
+ this.initProjectItemData();
141
124
  this.triggerUpdate();
142
125
  }
143
126
  }).catch((err) => {
@@ -145,54 +128,18 @@ var Weaverse = class {
145
128
  });
146
129
  }
147
130
  }
148
- triggerEditorUpdate(type = "weaverse.workspace.init") {
149
- if (this.isEditor && this.studioBridge) {
150
- this.studioBridge.sendMessageToEditor(type, {
151
- projectData: this.projectData,
152
- projectKey: this.projectKey,
153
- appUrl: this.appUrl
154
- });
155
- }
156
- }
157
- initItemData() {
131
+ initProjectItemData() {
158
132
  let data = this.projectData;
159
133
  if (data.items) {
160
134
  data.items.forEach((item) => {
161
- let itemStore = this.itemInstances.get(item.id) || new WeaverseItemStore(item, this);
162
- this.itemInstances.set(item.id, itemStore);
163
- });
164
- }
165
- }
166
- };
167
- var WeaverseItemStore = class {
168
- constructor(itemData = {}, weaverse) {
169
- this.data = {};
170
- this.listeners = /* @__PURE__ */ new Set();
171
- this.ref = {
172
- current: null
173
- };
174
- this.setData = (data) => {
175
- this.data = Object.assign(this.data, data);
176
- this.triggerUpdate();
177
- };
178
- this.subscribe = (fn) => {
179
- this.listeners.add(fn);
180
- };
181
- this.unsubscribe = (fn) => {
182
- this.listeners.delete(fn);
183
- };
184
- this.triggerUpdate = () => {
185
- this.listeners.forEach((fn) => {
186
- return fn(this.data);
135
+ if (!this.itemInstances.get(item.id)) {
136
+ new WeaverseItemStore(item, this);
137
+ }
187
138
  });
188
- };
189
- this.data = itemData;
190
- let { type } = itemData;
191
- if (type) {
192
- this.Component = weaverse.elementInstances.get(type);
193
139
  }
194
140
  }
195
141
  };
142
+ Weaverse.WeaverseItemStore = WeaverseItemStore;
196
143
  export {
197
144
  Weaverse,
198
145
  WeaverseItemStore,
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.3.1",
2
+ "version": "0.3.4",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -7,7 +7,6 @@
7
7
  "publishConfig": {
8
8
  "access": "public"
9
9
  },
10
- "type": "commonjs",
11
10
  "files": [
12
11
  "dist"
13
12
  ],
@@ -17,15 +16,12 @@
17
16
  "scripts": {
18
17
  "start": "npm run dev",
19
18
  "dev": "tsup src/index.ts --format esm,cjs --dts --outDir dist --watch",
20
- "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"
21
21
  },
22
22
  "name": "@weaverse/core",
23
23
  "author": "Paul",
24
24
  "dependencies": {
25
- "@stitches/core": "^1.2.6"
26
- },
27
- "peerDependencies": {
28
- "node-fetch": "^3",
29
- "unfetch": "^4"
25
+ "@stitches/core": "^1.2.7"
30
26
  }
31
27
  }