@netless/app-slide 0.1.4 → 0.2.0
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 +3 -0
- package/dist/main.cjs.js +146 -158
- package/dist/main.cjs.js.map +1 -1
- package/dist/main.es.js +1178 -1017
- package/dist/main.es.js.map +1 -1
- package/dist/main.iife.js +147 -159
- package/dist/main.iife.js.map +1 -1
- package/dist/utils/logger.d.ts +20 -7
- package/package.json +3 -4
- package/src/SlideController/index.ts +21 -13
- package/src/SlideDocsViewer/index.ts +2 -1
- package/src/SlidePreviewer/index.ts +0 -2
- package/src/index.ts +21 -6
- package/src/utils/freezer.ts +9 -5
- package/src/utils/logger.ts +62 -13
package/dist/utils/logger.d.ts
CHANGED
|
@@ -1,18 +1,30 @@
|
|
|
1
|
+
import type { AppContext, Displayer } from "@netless/window-manager";
|
|
1
2
|
import type { SlideController } from "../SlideController";
|
|
2
3
|
declare type DebugMessage = {
|
|
3
4
|
slide: boolean | "__instance" | "__debug";
|
|
4
5
|
};
|
|
6
|
+
declare type RoomLogger = {
|
|
7
|
+
debug: (...args: any) => void;
|
|
8
|
+
info: (...args: any) => void;
|
|
9
|
+
warn: (...args: any) => void;
|
|
10
|
+
};
|
|
5
11
|
declare class Logger {
|
|
6
12
|
enable: boolean;
|
|
7
13
|
apps: Record<string, {
|
|
8
|
-
context?:
|
|
9
|
-
controller?: SlideController;
|
|
14
|
+
context?: AppContext | null;
|
|
15
|
+
controller?: SlideController | null;
|
|
10
16
|
}>;
|
|
17
|
+
setAppContext(appId: string, context: AppContext | null): void;
|
|
18
|
+
setAppController(appId: string, controller: SlideController | null): void;
|
|
19
|
+
deleteApp(appId: string): void;
|
|
11
20
|
level: "debug" | "verbose";
|
|
21
|
+
roomLogger: RoomLogger | null;
|
|
12
22
|
constructor(enable: boolean);
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
23
|
+
initialize(): void;
|
|
24
|
+
dispose(): void;
|
|
25
|
+
log(...args: any[]): void;
|
|
26
|
+
verbose(...args: any[]): void;
|
|
27
|
+
warn(...args: any[]): void;
|
|
16
28
|
/**
|
|
17
29
|
* @example
|
|
18
30
|
* window.postMessage({ slide: '__debug' })
|
|
@@ -21,6 +33,7 @@ declare class Logger {
|
|
|
21
33
|
_onMessage: (ev: MessageEvent<DebugMessage> | CustomEvent<DebugMessage>) => void;
|
|
22
34
|
}
|
|
23
35
|
export declare const logger: Logger;
|
|
24
|
-
export declare const log: (...args:
|
|
25
|
-
export declare const verbose: (...args:
|
|
36
|
+
export declare const log: (...args: any[]) => void;
|
|
37
|
+
export declare const verbose: (...args: any[]) => void;
|
|
38
|
+
export declare const setRoomLogger: (displayer: Displayer) => void;
|
|
26
39
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@netless/app-slide",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"main": "dist/main.cjs.js",
|
|
5
5
|
"module": "dist/main.es.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
],
|
|
12
12
|
"devDependencies": {
|
|
13
13
|
"@netless/app-shared": "^0.1.1",
|
|
14
|
-
"@netless/slide": "^0.
|
|
14
|
+
"@netless/slide": "^0.3.3",
|
|
15
15
|
"@types/color-string": "^1.5.2",
|
|
16
16
|
"color-string": "^1.9.0",
|
|
17
17
|
"side-effect-manager": "^0.1.5",
|
|
@@ -22,6 +22,5 @@
|
|
|
22
22
|
"build": "vite build && npm run types",
|
|
23
23
|
"build:dev": "vite build --mode development && npm run types",
|
|
24
24
|
"cleanup": "rimraf ./dist"
|
|
25
|
-
}
|
|
26
|
-
"readme": "## @netless/app-slide\n\nNetless App for viewing animated slides, in our new engine.\n\n[中文](./README-zh.md)\n\n### Usage\n\n```ts\nimport type { Attributes as SlideAttributes } from \"@netless/app-slide\";\n\n// 1. register before joining room\nWindowManager.register({\n kind: \"Slide\",\n appOptions: {\n // turn on to show debug controller\n debug: false,\n },\n src: async () => {\n const app = await import(\"@netless/app-slide\");\n return app.default ?? app;\n },\n});\n\n// 2. when joined room, add ppt to whiteboard\nmanager.addApp({\n kind: \"Slide\",\n options: {\n scenePath: `/ppt/${uuid}`, // [1]\n title: \"a.pptx\",\n },\n attributes: {\n taskId: \"1234567...\", // [2]\n url: \"https://convertcdn.netless.link/dynamicConvert\", // [3]\n } as SlideAttributes,\n});\n```\n\nParameters:\n\n1. (**required**) `scenePath`\n\n Which scene to be put on top of slides.\n\n2. (**required**) `taskId`\n\n The [PPT conversion](https://developer.netless.link/server-en/home/server-conversion) task id.\n\n3. (optional) `url`\n\n The base url of ppt resources, `https://convertcdn.netless.link/dynamicConvert` by default.\n\n### Preview\n\n```ts\nimport { previewSlide } from \"@netless/app-slide\";\n\nconst previewer = previewSlide({\n container: document.getElementById(\"preview\"),\n taskId: \"1234567...\",\n});\n\npreviewer.destroy();\n```\n\n### License\n\nMIT @ [netless](https://github.com/netless-io)\n"
|
|
25
|
+
}
|
|
27
26
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// 4. automatically re-create scenes to sync strokes, a view must be existing
|
|
9
9
|
// 5. pages information are loaded dynamically by the slide package
|
|
10
10
|
|
|
11
|
-
import type { AppContext, Player, Room } from "@netless/window-manager";
|
|
11
|
+
import type { AppContext, Player, Room, Displayer } from "@netless/window-manager";
|
|
12
12
|
import type { SyncEvent } from "@netless/slide";
|
|
13
13
|
import type { Attributes, MagixEvents, MagixPayload, SlideState } from "../typings";
|
|
14
14
|
import type { AppOptions } from "..";
|
|
@@ -17,7 +17,7 @@ import { SideEffectManager } from "side-effect-manager";
|
|
|
17
17
|
import { Slide, SLIDE_EVENTS } from "@netless/slide";
|
|
18
18
|
import { clamp } from "../utils/helpers";
|
|
19
19
|
import { cachedGetBgColor } from "../utils/bgcolor";
|
|
20
|
-
import { logger, log, verbose } from "../utils/logger";
|
|
20
|
+
import { logger, log, verbose, setRoomLogger } from "../utils/logger";
|
|
21
21
|
export { syncSceneWithSlide, createDocsViewerPages } from "./helpers";
|
|
22
22
|
|
|
23
23
|
export const DefaultUrl = "https://convertcdn.netless.link/dynamicConvert";
|
|
@@ -71,10 +71,13 @@ export class SlideController {
|
|
|
71
71
|
this.onTransitionStart = onTransitionStart;
|
|
72
72
|
this.onTransitionEnd = onTransitionEnd;
|
|
73
73
|
this.onError = onError;
|
|
74
|
+
|
|
74
75
|
this.context = context;
|
|
75
76
|
this.room = context.getRoom();
|
|
76
77
|
this.player = this.room ? undefined : (context.getDisplayer() as Player);
|
|
78
|
+
setRoomLogger((this.room || this.player) as Displayer);
|
|
77
79
|
this.slide = this.createSlide(anchor);
|
|
80
|
+
|
|
78
81
|
// the adder does not need to sync state
|
|
79
82
|
this.syncStateOnceFlag = !this.context.isAddApp;
|
|
80
83
|
this.visible = document.visibilityState === "visible";
|
|
@@ -85,11 +88,16 @@ export class SlideController {
|
|
|
85
88
|
public ready = false;
|
|
86
89
|
private resolveReady!: () => void;
|
|
87
90
|
public readonly readyPromise = new Promise<void>(resolve => {
|
|
88
|
-
this.resolveReady = () =>
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
this.resolveReady = () => {
|
|
92
|
+
if (this.ready) {
|
|
93
|
+
log("[Slide] render end");
|
|
94
|
+
} else {
|
|
95
|
+
setTimeout(() => {
|
|
96
|
+
this.ready = true;
|
|
97
|
+
resolve();
|
|
98
|
+
}, 1000);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
93
101
|
});
|
|
94
102
|
|
|
95
103
|
public jumpToPage(page: number) {
|
|
@@ -113,7 +121,7 @@ export class SlideController {
|
|
|
113
121
|
slide.setResource(taskId, url || DefaultUrl);
|
|
114
122
|
if (state) {
|
|
115
123
|
// if we already have state, try restore from it
|
|
116
|
-
log("[Slide] init with state", state);
|
|
124
|
+
log("[Slide] init with state", JSON.stringify(state));
|
|
117
125
|
this.syncStateOnceFlag = false;
|
|
118
126
|
slide.setSlideState(state);
|
|
119
127
|
} else if (context.isAddApp) {
|
|
@@ -171,7 +179,7 @@ export class SlideController {
|
|
|
171
179
|
type: SLIDE_EVENTS.syncDispatch,
|
|
172
180
|
payload: event,
|
|
173
181
|
};
|
|
174
|
-
|
|
182
|
+
verbose("[Slide] dispatch", JSON.stringify(event));
|
|
175
183
|
this.context.dispatchMagixEvent(SLIDE_EVENTS.syncDispatch, payload);
|
|
176
184
|
}
|
|
177
185
|
};
|
|
@@ -180,7 +188,7 @@ export class SlideController {
|
|
|
180
188
|
const { type, payload } = ev.payload;
|
|
181
189
|
if (type === SLIDE_EVENTS.syncDispatch) {
|
|
182
190
|
this.syncStateOnce();
|
|
183
|
-
|
|
191
|
+
verbose("[Slide] receive", JSON.stringify(payload));
|
|
184
192
|
this.slide.emit(SLIDE_EVENTS.syncReceive, payload);
|
|
185
193
|
}
|
|
186
194
|
};
|
|
@@ -193,7 +201,7 @@ export class SlideController {
|
|
|
193
201
|
}
|
|
194
202
|
const { state } = this.context.storage.state;
|
|
195
203
|
if (state) {
|
|
196
|
-
log("[Slide] sync with state (once)", state);
|
|
204
|
+
log("[Slide] sync with state (once)", JSON.stringify(state));
|
|
197
205
|
this.slide.setSlideState(state);
|
|
198
206
|
this.syncStateOnceFlag = false;
|
|
199
207
|
}
|
|
@@ -220,7 +228,7 @@ export class SlideController {
|
|
|
220
228
|
setTimeout(this.pollReadyState, 500);
|
|
221
229
|
} else {
|
|
222
230
|
this.pollCount = 0;
|
|
223
|
-
log("[Slide] renderSlide (retry after timeout)"
|
|
231
|
+
log("[Slide] renderSlide 1 (retry after timeout)");
|
|
224
232
|
this.slide.renderSlide(1);
|
|
225
233
|
}
|
|
226
234
|
};
|
|
@@ -249,7 +257,7 @@ export class SlideController {
|
|
|
249
257
|
renderOptions: {
|
|
250
258
|
minFPS: this.context.getAppOptions()?.minFPS || 25,
|
|
251
259
|
maxFPS: this.context.getAppOptions()?.maxFPS || 30,
|
|
252
|
-
autoFPS: true,
|
|
260
|
+
autoFPS: this.context.getAppOptions()?.autoFPS ?? true,
|
|
253
261
|
autoResolution: this.context.getAppOptions()?.autoResolution ?? true,
|
|
254
262
|
resolution: this.context.getAppOptions()?.resolution,
|
|
255
263
|
transactionBgColor: this.context.getAppOptions()?.bgColor || cachedGetBgColor(anchor),
|
|
@@ -4,6 +4,7 @@ import type { SlideController, SlideControllerOptions } from "../SlideController
|
|
|
4
4
|
import { SideEffectManager } from "side-effect-manager";
|
|
5
5
|
import { createDocsViewerPages } from "../SlideController";
|
|
6
6
|
import { DocsViewer } from "../DocsViewer";
|
|
7
|
+
import { logger } from "../utils/logger";
|
|
7
8
|
|
|
8
9
|
export const ClickThroughAppliances = new Set(["clicker"]);
|
|
9
10
|
|
|
@@ -119,7 +120,7 @@ export class SlideDocsViewer {
|
|
|
119
120
|
|
|
120
121
|
protected onError = ({ error }: { error: Error }) => {
|
|
121
122
|
this.viewer.setPaused();
|
|
122
|
-
|
|
123
|
+
logger.warn("[Slide] render error", error);
|
|
123
124
|
};
|
|
124
125
|
|
|
125
126
|
protected refreshPages = () => {
|
|
@@ -4,7 +4,6 @@ import { DocsViewer } from "../DocsViewer";
|
|
|
4
4
|
import { createDocsViewerPages, DefaultUrl } from "../SlideController";
|
|
5
5
|
import { cachedGetBgColor } from "../utils/bgcolor";
|
|
6
6
|
import { clamp } from "../utils/helpers";
|
|
7
|
-
import { log } from "../utils/logger";
|
|
8
7
|
import style from "../style.scss?inline";
|
|
9
8
|
|
|
10
9
|
export interface PreviewParams {
|
|
@@ -180,7 +179,6 @@ export class SlidePreviewer {
|
|
|
180
179
|
public destroy() {
|
|
181
180
|
this.sideEffect.flushAll();
|
|
182
181
|
if (this.slide && !this.destroyed) {
|
|
183
|
-
log("[Slide] destroy slide (once)");
|
|
184
182
|
this.slide.destroy();
|
|
185
183
|
this.destroyed = true;
|
|
186
184
|
}
|
package/src/index.ts
CHANGED
|
@@ -37,6 +37,8 @@ export interface AppOptions {
|
|
|
37
37
|
minFPS?: number;
|
|
38
38
|
/** maximal fps @default 30 */
|
|
39
39
|
maxFPS?: number;
|
|
40
|
+
/** automatically decrease fps @default true */
|
|
41
|
+
autoFPS?: boolean;
|
|
40
42
|
/** whether to re-scale automatically @default true */
|
|
41
43
|
autoResolution?: boolean;
|
|
42
44
|
}
|
|
@@ -48,6 +50,7 @@ export interface Controller {
|
|
|
48
50
|
prevStep: () => boolean;
|
|
49
51
|
nextPage: () => boolean;
|
|
50
52
|
prevPage: () => boolean;
|
|
53
|
+
jumpToPage: (page: number) => boolean;
|
|
51
54
|
}
|
|
52
55
|
|
|
53
56
|
const SlideApp: NetlessApp<Attributes, MagixEvents, AppOptions, Controller> = {
|
|
@@ -90,7 +93,7 @@ const SlideApp: NetlessApp<Attributes, MagixEvents, AppOptions, Controller> = {
|
|
|
90
93
|
syncSceneWithSlide(room, context, docsViewer.slideController.slide, baseScenePath);
|
|
91
94
|
synced = true;
|
|
92
95
|
}
|
|
93
|
-
log("[Slide] page to", page, synced);
|
|
96
|
+
log("[Slide] page to", page, synced ? "(synced)" : "");
|
|
94
97
|
docsViewer.viewer.setPageIndex(page - 1);
|
|
95
98
|
}
|
|
96
99
|
};
|
|
@@ -102,7 +105,7 @@ const SlideApp: NetlessApp<Attributes, MagixEvents, AppOptions, Controller> = {
|
|
|
102
105
|
onPageChanged,
|
|
103
106
|
});
|
|
104
107
|
if (useFreezer) apps.set(context.appId, slideController);
|
|
105
|
-
|
|
108
|
+
logger.setAppController(context.appId, slideController);
|
|
106
109
|
if (import.meta.env.DEV) {
|
|
107
110
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
108
111
|
(window as any).slideController = slideController;
|
|
@@ -114,7 +117,8 @@ const SlideApp: NetlessApp<Attributes, MagixEvents, AppOptions, Controller> = {
|
|
|
114
117
|
syncSceneWithSlide(room, context, slideController.slide, baseScenePath);
|
|
115
118
|
synced = true;
|
|
116
119
|
}
|
|
117
|
-
|
|
120
|
+
const page = slideController.slide.slideState.currentSlideIndex;
|
|
121
|
+
log("[Slide] page to", page, synced ? "(synced)" : "", "(on ready)");
|
|
118
122
|
});
|
|
119
123
|
return slideController;
|
|
120
124
|
};
|
|
@@ -135,10 +139,10 @@ const SlideApp: NetlessApp<Attributes, MagixEvents, AppOptions, Controller> = {
|
|
|
135
139
|
const sideEffect = new SideEffectManager();
|
|
136
140
|
|
|
137
141
|
sideEffect.add(() => {
|
|
138
|
-
|
|
142
|
+
logger.setAppContext(context.appId, context);
|
|
139
143
|
logger.enable = context.getAppOptions()?.debug || import.meta.env.DEV;
|
|
140
144
|
logger.level = import.meta.env.DEV ? "verbose" : "debug";
|
|
141
|
-
return () => logger.
|
|
145
|
+
return () => logger.deleteApp(context.appId);
|
|
142
146
|
});
|
|
143
147
|
|
|
144
148
|
if (room) {
|
|
@@ -155,7 +159,7 @@ const SlideApp: NetlessApp<Attributes, MagixEvents, AppOptions, Controller> = {
|
|
|
155
159
|
}
|
|
156
160
|
|
|
157
161
|
context.emitter.on("destroy", () => {
|
|
158
|
-
log("[Slide]
|
|
162
|
+
log("[Slide] destroy", context.appId);
|
|
159
163
|
if (useFreezer) apps.delete(context.appId);
|
|
160
164
|
sideEffect.flushAll();
|
|
161
165
|
if (docsViewer) {
|
|
@@ -212,6 +216,17 @@ const SlideApp: NetlessApp<Attributes, MagixEvents, AppOptions, Controller> = {
|
|
|
212
216
|
}
|
|
213
217
|
return false;
|
|
214
218
|
},
|
|
219
|
+
jumpToPage: (newPage: number) => {
|
|
220
|
+
const controller = docsViewer?.slideController;
|
|
221
|
+
if (controller) {
|
|
222
|
+
const { page, pageCount } = controller;
|
|
223
|
+
if (pageCount > 0 && page > 0 && page <= pageCount) {
|
|
224
|
+
controller.jumpToPage(newPage);
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return false;
|
|
229
|
+
},
|
|
215
230
|
};
|
|
216
231
|
},
|
|
217
232
|
};
|
package/src/utils/freezer.ts
CHANGED
|
@@ -9,22 +9,26 @@ export interface FreezableSlide {
|
|
|
9
9
|
export let useFreezer = false;
|
|
10
10
|
export const FreezerLength = 2;
|
|
11
11
|
|
|
12
|
+
const inspect = (arr: string[]) => {
|
|
13
|
+
return "[" + arr + "]";
|
|
14
|
+
};
|
|
15
|
+
|
|
12
16
|
export const apps = {
|
|
13
17
|
map: new Map<string, FreezableSlide>(),
|
|
14
18
|
queue: [] as string[],
|
|
15
19
|
validateQueue() {
|
|
16
|
-
log("[Slide] freezer: validate", this.queue);
|
|
20
|
+
log("[Slide] freezer: validate", inspect(this.queue));
|
|
17
21
|
while (this.queue.length > FreezerLength) {
|
|
18
22
|
const appId = this.queue.pop() as string;
|
|
19
23
|
const slide = this.map.get(appId);
|
|
20
24
|
if (slide) {
|
|
21
|
-
log("[Slide] freezer: validate-freeze", appId, this.queue);
|
|
25
|
+
log("[Slide] freezer: validate-freeze", appId, inspect(this.queue));
|
|
22
26
|
slide.freeze();
|
|
23
27
|
}
|
|
24
28
|
}
|
|
25
29
|
},
|
|
26
30
|
set(appId: string, slide: FreezableSlide) {
|
|
27
|
-
log("[Slide] freezer: add", appId, this.queue);
|
|
31
|
+
log("[Slide] freezer: add", appId, inspect(this.queue));
|
|
28
32
|
this.map.set(appId, slide);
|
|
29
33
|
if (!this.queue.includes(appId)) {
|
|
30
34
|
this.queue.unshift(appId);
|
|
@@ -32,9 +36,9 @@ export const apps = {
|
|
|
32
36
|
this.validateQueue();
|
|
33
37
|
},
|
|
34
38
|
delete(appId: string) {
|
|
35
|
-
log("[Slide] freezer: delete", appId, this.queue);
|
|
36
39
|
this.map.delete(appId);
|
|
37
40
|
this.queue = this.queue.filter(id => id !== appId);
|
|
41
|
+
log("[Slide] freezer: delete", appId, inspect(this.queue));
|
|
38
42
|
},
|
|
39
43
|
focus(appId: string) {
|
|
40
44
|
const slide = this.map.get(appId);
|
|
@@ -44,7 +48,7 @@ export const apps = {
|
|
|
44
48
|
}
|
|
45
49
|
this.queue.unshift(appId);
|
|
46
50
|
this.validateQueue();
|
|
47
|
-
log("[Slide] freezer: focus", appId, this.queue);
|
|
51
|
+
log("[Slide] freezer: focus", appId, inspect(this.queue));
|
|
48
52
|
if (slide) {
|
|
49
53
|
slide.unfreeze();
|
|
50
54
|
}
|
package/src/utils/logger.ts
CHANGED
|
@@ -1,30 +1,76 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import type { AppContext, Displayer } from "@netless/window-manager";
|
|
1
3
|
import type { SlideController } from "../SlideController";
|
|
2
4
|
import { isObj } from "./helpers";
|
|
3
5
|
|
|
4
6
|
type DebugMessage = { slide: boolean | "__instance" | "__debug" };
|
|
5
7
|
|
|
8
|
+
type RoomLogger = {
|
|
9
|
+
debug: (...args: any) => void;
|
|
10
|
+
info: (...args: any) => void;
|
|
11
|
+
warn: (...args: any) => void;
|
|
12
|
+
};
|
|
13
|
+
|
|
6
14
|
class Logger {
|
|
7
|
-
|
|
8
|
-
|
|
15
|
+
public apps: Record<
|
|
16
|
+
string,
|
|
17
|
+
{ context?: AppContext | null; controller?: SlideController | null }
|
|
18
|
+
> = {};
|
|
19
|
+
|
|
20
|
+
setAppContext(appId: string, context: AppContext | null) {
|
|
21
|
+
(this.apps[appId] ||= {}).context = context;
|
|
22
|
+
this.log(`[Slide] new ${appId}`);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
setAppController(appId: string, controller: SlideController | null) {
|
|
26
|
+
(this.apps[appId] ||= {}).controller = controller;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
deleteApp(appId: string) {
|
|
30
|
+
delete this.apps[appId];
|
|
31
|
+
this.log(`[Slide] delete ${appId}`);
|
|
32
|
+
}
|
|
33
|
+
|
|
9
34
|
public level: "debug" | "verbose" = import.meta.env.DEV ? "verbose" : "debug";
|
|
35
|
+
|
|
36
|
+
public roomLogger: RoomLogger | null = null;
|
|
37
|
+
|
|
10
38
|
constructor(public enable: boolean) {
|
|
39
|
+
this.initialize();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
initialize() {
|
|
11
43
|
window.addEventListener("message", this._onMessage);
|
|
12
44
|
}
|
|
13
|
-
|
|
14
|
-
|
|
45
|
+
|
|
46
|
+
dispose() {
|
|
47
|
+
window.removeEventListener("message", this._onMessage);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
log(...args: any[]) {
|
|
51
|
+
if (this.roomLogger) {
|
|
52
|
+
this.roomLogger.info(...args);
|
|
53
|
+
} else if (this.enable) {
|
|
15
54
|
console.log(...args);
|
|
16
55
|
}
|
|
17
56
|
}
|
|
18
|
-
|
|
19
|
-
|
|
57
|
+
|
|
58
|
+
verbose(...args: any[]) {
|
|
59
|
+
if (this.roomLogger) {
|
|
60
|
+
this.roomLogger.debug(...args);
|
|
61
|
+
} else if (this.enable && this.level === "verbose") {
|
|
20
62
|
console.log(...args);
|
|
21
63
|
}
|
|
22
64
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
65
|
+
|
|
66
|
+
warn(...args: any[]) {
|
|
67
|
+
if (this.roomLogger) {
|
|
68
|
+
this.roomLogger.warn(...args);
|
|
69
|
+
} else {
|
|
70
|
+
console.warn(...args);
|
|
71
|
+
}
|
|
27
72
|
}
|
|
73
|
+
|
|
28
74
|
/**
|
|
29
75
|
* @example
|
|
30
76
|
* window.postMessage({ slide: '__debug' })
|
|
@@ -52,6 +98,9 @@ class Logger {
|
|
|
52
98
|
};
|
|
53
99
|
}
|
|
54
100
|
|
|
55
|
-
export const logger = new Logger(import.meta.env.DEV);
|
|
56
|
-
export const log = logger.log.bind(logger);
|
|
57
|
-
export const verbose = logger.verbose.bind(logger);
|
|
101
|
+
export const logger = /** @__PURE__ */ new Logger(import.meta.env.DEV);
|
|
102
|
+
export const log = /** @__PURE__ */ logger.log.bind(logger);
|
|
103
|
+
export const verbose = /** @__PURE__ */ logger.verbose.bind(logger);
|
|
104
|
+
export const setRoomLogger = (displayer: Displayer) => {
|
|
105
|
+
logger.roomLogger = (displayer as any).logger;
|
|
106
|
+
};
|