@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 +52 -34
- package/dist/index.js +72 -104
- package/dist/index.mjs +63 -116
- package/package.json +4 -8
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,
|
|
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(
|
|
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
|
-
|
|
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
|
|
19
|
-
if (
|
|
20
|
-
for (let key of __getOwnPropNames(
|
|
21
|
-
if (!__hasOwnProp.call(
|
|
22
|
-
__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 });
|
|
23
16
|
}
|
|
24
|
-
return
|
|
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
|
|
30
|
-
|
|
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
|
-
|
|
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(
|
|
94
|
-
|
|
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: "
|
|
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.
|
|
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.
|
|
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 (
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
172
|
-
|
|
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
|
-
|
|
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(
|
|
84
|
-
|
|
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: "
|
|
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.
|
|
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.
|
|
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 (
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
162
|
-
|
|
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.
|
|
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.
|
|
26
|
-
},
|
|
27
|
-
"peerDependencies": {
|
|
28
|
-
"node-fetch": "^3",
|
|
29
|
-
"unfetch": "^4"
|
|
25
|
+
"@stitches/core": "^1.2.7"
|
|
30
26
|
}
|
|
31
27
|
}
|