@weaverse/core 0.3.2 → 0.3.5
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 +60 -34
- package/dist/index.js +77 -96
- package/dist/index.mjs +68 -80
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
import Stitches from '@stitches/core/types/stitches';
|
|
2
2
|
|
|
3
|
+
declare type InspectorComponentType = "textarea" | "color";
|
|
4
|
+
declare type WeaverseElementInspector = {
|
|
5
|
+
binding: 'data' | 'style';
|
|
6
|
+
key: string;
|
|
7
|
+
componentType: InspectorComponentType;
|
|
8
|
+
};
|
|
9
|
+
declare type WeaverseElementSetting = {
|
|
10
|
+
tab: string;
|
|
11
|
+
label: string;
|
|
12
|
+
inspectors: WeaverseElementInspector[];
|
|
13
|
+
};
|
|
14
|
+
declare type WeaverseElement = {
|
|
15
|
+
Component: any;
|
|
16
|
+
schema: {
|
|
17
|
+
title: string;
|
|
18
|
+
type: string;
|
|
19
|
+
settings: WeaverseElementSetting[];
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
declare type WeaverseElementMap = {
|
|
23
|
+
[key: string]: WeaverseElement;
|
|
24
|
+
};
|
|
25
|
+
declare global {
|
|
26
|
+
interface Window {
|
|
27
|
+
WeaverseStudioBridge: any;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
3
31
|
interface ProjectDataItemType {
|
|
4
32
|
type: string;
|
|
5
33
|
name?: string;
|
|
@@ -20,12 +48,40 @@ declare type WeaverseType = {
|
|
|
20
48
|
projectKey?: string;
|
|
21
49
|
projectData?: ProjectDataType;
|
|
22
50
|
};
|
|
51
|
+
/**
|
|
52
|
+
* WeaverseItemStore is a store for Weaverse item, it can be used to subscribe/update the item data
|
|
53
|
+
* @param itemData {ProjectDataItemType} Weaverse item data
|
|
54
|
+
* @param weaverse {Weaverse} Weaverse instance
|
|
55
|
+
* Usage:
|
|
56
|
+
* ```jsx
|
|
57
|
+
* useEffect(() => {
|
|
58
|
+
* let handleUpdate = (update: any) => {
|
|
59
|
+
* setData({...update})
|
|
60
|
+
* }
|
|
61
|
+
* itemInstance.subscribe(handleUpdate)
|
|
62
|
+
* return () => {
|
|
63
|
+
* itemInstance.unsubscribe(handleUpdate)
|
|
64
|
+
* }
|
|
65
|
+
* }, [])
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
declare class WeaverseItemStore {
|
|
69
|
+
data: any;
|
|
70
|
+
listeners: Set<any>;
|
|
71
|
+
Component: any;
|
|
72
|
+
ref: any;
|
|
73
|
+
constructor(itemData: any, weaverse: Weaverse);
|
|
74
|
+
setData: (data: any) => void;
|
|
75
|
+
subscribe: (fn: any) => void;
|
|
76
|
+
unsubscribe: (fn: any) => void;
|
|
77
|
+
triggerUpdate: () => void;
|
|
78
|
+
}
|
|
23
79
|
declare class Weaverse {
|
|
24
80
|
/**
|
|
25
81
|
* For storing, registering element React component from Weaverse or created by user/developer
|
|
26
82
|
* @type {Map<string, React.Component>}
|
|
27
83
|
*/
|
|
28
|
-
elementInstances: Map<string,
|
|
84
|
+
elementInstances: Map<string, WeaverseElement>;
|
|
29
85
|
/**
|
|
30
86
|
* list of element/items store to provide data, handle state update, state sharing, etc.
|
|
31
87
|
* @type {Map<string, any>}
|
|
@@ -63,6 +119,7 @@ declare class Weaverse {
|
|
|
63
119
|
*/
|
|
64
120
|
stitchesInstance: Stitches | any;
|
|
65
121
|
studioBridge?: any;
|
|
122
|
+
static WeaverseItemStore: typeof WeaverseItemStore;
|
|
66
123
|
/**
|
|
67
124
|
* constructor
|
|
68
125
|
* @param appUrl {string} Weaverse base URL that can provide by user/developer. for local development, use localhost:3000
|
|
@@ -75,9 +132,8 @@ declare class Weaverse {
|
|
|
75
132
|
* @param name {string} unique name of the custom React Component
|
|
76
133
|
* @param element {React.Component} custom React Component
|
|
77
134
|
*/
|
|
78
|
-
registerElement(
|
|
135
|
+
registerElement(element: WeaverseElement): void;
|
|
79
136
|
init(): void;
|
|
80
|
-
listen(callback: any): void;
|
|
81
137
|
loadStudio(): void;
|
|
82
138
|
subscribe(fn: any): void;
|
|
83
139
|
unsubscribe(fn: any): void;
|
|
@@ -91,41 +147,11 @@ declare class Weaverse {
|
|
|
91
147
|
* fetch and update the project data, then trigger update to re-render the WeaverseRoot
|
|
92
148
|
*/
|
|
93
149
|
updateProjectData(): void;
|
|
94
|
-
triggerEditorUpdate(type?: string): void;
|
|
95
150
|
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
151
|
}
|
|
126
152
|
|
|
127
153
|
declare const isReactNative: boolean;
|
|
128
154
|
declare const isBrowser: boolean;
|
|
129
155
|
declare const isIframe: boolean;
|
|
130
156
|
|
|
131
|
-
export { ProjectDataItemType, ProjectDataType, Weaverse, WeaverseItemStore, WeaverseType, isBrowser, isIframe, isReactNative };
|
|
157
|
+
export { InspectorComponentType, ProjectDataItemType, ProjectDataType, Weaverse, WeaverseElement, WeaverseElementInspector, WeaverseElementMap, WeaverseElementSetting, WeaverseItemStore, WeaverseType, isBrowser, isIframe, isReactNative };
|
package/dist/index.js
CHANGED
|
@@ -4,27 +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
7
|
var __export = (target, all) => {
|
|
9
8
|
for (var name in all)
|
|
10
9
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
10
|
};
|
|
12
|
-
var
|
|
13
|
-
if (
|
|
14
|
-
for (let key of __getOwnPropNames(
|
|
15
|
-
if (!__hasOwnProp.call(
|
|
16
|
-
__defProp(
|
|
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 });
|
|
17
16
|
}
|
|
18
|
-
return
|
|
17
|
+
return to;
|
|
19
18
|
};
|
|
20
|
-
var __toESM = (
|
|
21
|
-
|
|
22
|
-
};
|
|
23
|
-
var __toCommonJS = /* @__PURE__ */ ((cache) => {
|
|
24
|
-
return (module2, temp) => {
|
|
25
|
-
return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
|
|
26
|
-
};
|
|
27
|
-
})(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
|
|
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);
|
|
28
21
|
|
|
29
22
|
// src/index.ts
|
|
30
23
|
var src_exports = {};
|
|
@@ -35,6 +28,7 @@ __export(src_exports, {
|
|
|
35
28
|
isIframe: () => isIframe,
|
|
36
29
|
isReactNative: () => isReactNative
|
|
37
30
|
});
|
|
31
|
+
module.exports = __toCommonJS(src_exports);
|
|
38
32
|
|
|
39
33
|
// src/utils/index.ts
|
|
40
34
|
var isReactNative = typeof navigator === "object" && navigator.product === "ReactNative";
|
|
@@ -43,6 +37,36 @@ var isIframe = isBrowser && window.top !== window.self;
|
|
|
43
37
|
|
|
44
38
|
// src/core.ts
|
|
45
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
|
+
};
|
|
46
70
|
var Weaverse = class {
|
|
47
71
|
constructor({ appUrl, projectKey, projectData } = {}) {
|
|
48
72
|
this.elementInstances = /* @__PURE__ */ new Map();
|
|
@@ -60,12 +84,17 @@ var Weaverse = class {
|
|
|
60
84
|
projectData && (this.projectData = projectData);
|
|
61
85
|
this.init();
|
|
62
86
|
}
|
|
63
|
-
registerElement(
|
|
64
|
-
|
|
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
|
+
}
|
|
65
94
|
}
|
|
66
95
|
init() {
|
|
67
96
|
this.stitchesInstance = stitches.createStitches({
|
|
68
|
-
prefix: "
|
|
97
|
+
prefix: "we",
|
|
69
98
|
media: {
|
|
70
99
|
bp1: "(min-width: 640px)",
|
|
71
100
|
bp2: "(max-width: 768px)",
|
|
@@ -74,39 +103,28 @@ var Weaverse = class {
|
|
|
74
103
|
});
|
|
75
104
|
this.loadStudio();
|
|
76
105
|
}
|
|
77
|
-
listen(callback) {
|
|
78
|
-
if (window.addEventListener) {
|
|
79
|
-
window.addEventListener("message", callback, false);
|
|
80
|
-
} else {
|
|
81
|
-
window.attachEvent("onmessage", callback);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
106
|
loadStudio() {
|
|
85
107
|
if (isIframe) {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
document.body.appendChild(studioBridgeScript);
|
|
105
|
-
} else {
|
|
106
|
-
initStudio();
|
|
107
|
-
}
|
|
108
|
+
window.addEventListener("message", (e) => {
|
|
109
|
+
var _a;
|
|
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
|
+
};
|
|
117
|
+
this.isEditor = true;
|
|
118
|
+
if (!window.WeaverseStudioBridge) {
|
|
119
|
+
const studioBridgeScript = document.createElement("script");
|
|
120
|
+
studioBridgeScript.src = `${this.appUrl}/assets/studio/studio-bridge.js`;
|
|
121
|
+
studioBridgeScript.type = "module";
|
|
122
|
+
studioBridgeScript.onload = initStudio;
|
|
123
|
+
document.body.appendChild(studioBridgeScript);
|
|
124
|
+
} else {
|
|
125
|
+
initStudio();
|
|
108
126
|
}
|
|
109
|
-
}
|
|
127
|
+
}
|
|
110
128
|
});
|
|
111
129
|
}
|
|
112
130
|
}
|
|
@@ -118,10 +136,15 @@ var Weaverse = class {
|
|
|
118
136
|
}
|
|
119
137
|
triggerUpdate() {
|
|
120
138
|
this.listeners.forEach((fn) => fn());
|
|
121
|
-
this.
|
|
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
|
+
}
|
|
122
146
|
}
|
|
123
147
|
fetchProjectData(fetch = globalThis.fetch) {
|
|
124
|
-
console.log("fetching project data...");
|
|
125
148
|
return fetch(this.appUrl + `/api/public/${this.projectKey}`).then((r) => r.json()).catch(console.error);
|
|
126
149
|
}
|
|
127
150
|
updateProjectData() {
|
|
@@ -137,60 +160,18 @@ var Weaverse = class {
|
|
|
137
160
|
});
|
|
138
161
|
}
|
|
139
162
|
}
|
|
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
163
|
initProjectItemData() {
|
|
150
164
|
let data = this.projectData;
|
|
151
165
|
if (data.items) {
|
|
152
166
|
data.items.forEach((item) => {
|
|
153
|
-
|
|
154
|
-
|
|
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);
|
|
167
|
+
if (!this.itemInstances.get(item.id)) {
|
|
168
|
+
new WeaverseItemStore(item, this);
|
|
169
|
+
}
|
|
184
170
|
});
|
|
185
|
-
};
|
|
186
|
-
this.data = itemData;
|
|
187
|
-
let { type, id } = itemData;
|
|
188
|
-
if (type && id) {
|
|
189
|
-
this.Component = weaverse.elementInstances.get(type);
|
|
190
171
|
}
|
|
191
172
|
}
|
|
192
173
|
};
|
|
193
|
-
|
|
174
|
+
Weaverse.WeaverseItemStore = WeaverseItemStore;
|
|
194
175
|
// Annotate the CommonJS export names for ESM import in node:
|
|
195
176
|
0 && (module.exports = {
|
|
196
177
|
Weaverse,
|
package/dist/index.mjs
CHANGED
|
@@ -5,6 +5,36 @@ 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
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
8
38
|
var Weaverse = class {
|
|
9
39
|
constructor({ appUrl, projectKey, projectData } = {}) {
|
|
10
40
|
this.elementInstances = /* @__PURE__ */ new Map();
|
|
@@ -22,12 +52,17 @@ var Weaverse = class {
|
|
|
22
52
|
projectData && (this.projectData = projectData);
|
|
23
53
|
this.init();
|
|
24
54
|
}
|
|
25
|
-
registerElement(
|
|
26
|
-
|
|
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
|
+
}
|
|
27
62
|
}
|
|
28
63
|
init() {
|
|
29
64
|
this.stitchesInstance = stitches.createStitches({
|
|
30
|
-
prefix: "
|
|
65
|
+
prefix: "we",
|
|
31
66
|
media: {
|
|
32
67
|
bp1: "(min-width: 640px)",
|
|
33
68
|
bp2: "(max-width: 768px)",
|
|
@@ -36,39 +71,28 @@ var Weaverse = class {
|
|
|
36
71
|
});
|
|
37
72
|
this.loadStudio();
|
|
38
73
|
}
|
|
39
|
-
listen(callback) {
|
|
40
|
-
if (window.addEventListener) {
|
|
41
|
-
window.addEventListener("message", callback, false);
|
|
42
|
-
} else {
|
|
43
|
-
window.attachEvent("onmessage", callback);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
74
|
loadStudio() {
|
|
47
75
|
if (isIframe) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
document.body.appendChild(studioBridgeScript);
|
|
67
|
-
} else {
|
|
68
|
-
initStudio();
|
|
69
|
-
}
|
|
76
|
+
window.addEventListener("message", (e) => {
|
|
77
|
+
var _a;
|
|
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
|
+
};
|
|
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,10 +104,15 @@ var Weaverse = class {
|
|
|
80
104
|
}
|
|
81
105
|
triggerUpdate() {
|
|
82
106
|
this.listeners.forEach((fn) => fn());
|
|
83
|
-
this.
|
|
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
|
-
console.log("fetching project data...");
|
|
87
116
|
return fetch(this.appUrl + `/api/public/${this.projectKey}`).then((r) => r.json()).catch(console.error);
|
|
88
117
|
}
|
|
89
118
|
updateProjectData() {
|
|
@@ -99,59 +128,18 @@ var Weaverse = class {
|
|
|
99
128
|
});
|
|
100
129
|
}
|
|
101
130
|
}
|
|
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
131
|
initProjectItemData() {
|
|
112
132
|
let data = this.projectData;
|
|
113
133
|
if (data.items) {
|
|
114
134
|
data.items.forEach((item) => {
|
|
115
|
-
|
|
116
|
-
|
|
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);
|
|
135
|
+
if (!this.itemInstances.get(item.id)) {
|
|
136
|
+
new WeaverseItemStore(item, this);
|
|
137
|
+
}
|
|
146
138
|
});
|
|
147
|
-
};
|
|
148
|
-
this.data = itemData;
|
|
149
|
-
let { type, id } = itemData;
|
|
150
|
-
if (type && id) {
|
|
151
|
-
this.Component = weaverse.elementInstances.get(type);
|
|
152
139
|
}
|
|
153
140
|
}
|
|
154
141
|
};
|
|
142
|
+
Weaverse.WeaverseItemStore = WeaverseItemStore;
|
|
155
143
|
export {
|
|
156
144
|
Weaverse,
|
|
157
145
|
WeaverseItemStore,
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.3.
|
|
2
|
+
"version": "0.3.5",
|
|
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
|
}
|