@sudobility/music_player 0.1.64 → 0.1.65
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/react/usePlaybackReadiness.d.ts.map +1 -1
- package/dist/react/usePlaybackReadiness.js +6 -2
- package/dist/react/usePlaybackReadiness.js.map +1 -1
- package/dist/web/playback/soundfont-loader.d.ts.map +1 -1
- package/dist/web/playback/soundfont-loader.js +46 -6
- package/dist/web/playback/soundfont-loader.js.map +1 -1
- package/dist/web/playback/web-backend.d.ts +9 -1
- package/dist/web/playback/web-backend.d.ts.map +1 -1
- package/dist/web/playback/web-backend.js +46 -12
- package/dist/web/playback/web-backend.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePlaybackReadiness.d.ts","sourceRoot":"","sources":["../../src/react/usePlaybackReadiness.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"usePlaybackReadiness.d.ts","sourceRoot":"","sources":["../../src/react/usePlaybackReadiness.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,MAAM,2BAA2B,GAAG;IACxC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,GAAG,IAAI,EAC3B,EAAE,OAAc,EAAE,GAAE,2BAAgC,GACnD,OAAO,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAcxC"}
|
|
@@ -15,7 +15,9 @@
|
|
|
15
15
|
* sees `preparing` or `ready`.
|
|
16
16
|
*
|
|
17
17
|
* `useSyncExternalStore` over `onLoadState`, so a change is a re-render of
|
|
18
|
-
* the button and nothing else.
|
|
18
|
+
* the button and nothing else. A host that must wait for a user gesture can
|
|
19
|
+
* disable automatic preparation; while idle, its Play button stays available
|
|
20
|
+
* to provide that gesture.
|
|
19
21
|
*/
|
|
20
22
|
import { useEffect, useSyncExternalStore } from 'react';
|
|
21
23
|
/**
|
|
@@ -31,6 +33,8 @@ export function usePlaybackReadiness(player, { prepare = true } = {}) {
|
|
|
31
33
|
void player.prepare();
|
|
32
34
|
}
|
|
33
35
|
}, [player, prepare]);
|
|
34
|
-
return readiness === 'ready'
|
|
36
|
+
return readiness === 'ready' || (!prepare && readiness === 'notReady')
|
|
37
|
+
? 'ready'
|
|
38
|
+
: 'preparing';
|
|
35
39
|
}
|
|
36
40
|
//# sourceMappingURL=usePlaybackReadiness.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePlaybackReadiness.js","sourceRoot":"","sources":["../../src/react/usePlaybackReadiness.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"usePlaybackReadiness.js","sourceRoot":"","sources":["../../src/react/usePlaybackReadiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAYxD;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAA2B,EAC3B,EAAE,OAAO,GAAG,IAAI,KAAkC,EAAE;IAEpD,MAAM,SAAS,GAAG,oBAAoB,CACpC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EACrE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAC3C,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAC5C,CAAC;IACF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YACzD,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtB,OAAO,SAAS,KAAK,OAAO,IAAI,CAAC,CAAC,OAAO,IAAI,SAAS,KAAK,UAAU,CAAC;QACpE,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,WAAW,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"soundfont-loader.d.ts","sourceRoot":"","sources":["../../../src/web/playback/soundfont-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"soundfont-loader.d.ts","sourceRoot":"","sources":["../../../src/web/playback/soundfont-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAa7D;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAoBhE;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IACJ,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9C,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CACjB,GACL,OAAO,CAAC,WAAW,CAAC,CAwDtB"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
/** Bumped when the stored representation changes, so old entries are not reused. */
|
|
2
2
|
const CACHE_NAME = 'music-soundfont-v1';
|
|
3
|
+
/** Shared with the web backend's `[ScoreSmith audio]` logs so one filter shows the whole load. */
|
|
4
|
+
const SOUNDFONT_LOG = '[ScoreSmith audio]';
|
|
5
|
+
/** Monotonic clock for load timings, falling back where `performance` is absent. */
|
|
6
|
+
function soundfontNow() {
|
|
7
|
+
return typeof performance !== 'undefined' ? performance.now() : Date.now();
|
|
8
|
+
}
|
|
3
9
|
/**
|
|
4
10
|
* The cache the soundfont lives in, or `null` where the Cache API is missing.
|
|
5
11
|
*
|
|
@@ -9,19 +15,35 @@ const CACHE_NAME = 'music-soundfont-v1';
|
|
|
9
15
|
* visibly wrong.
|
|
10
16
|
*/
|
|
11
17
|
export async function openSoundfontCache() {
|
|
12
|
-
if (typeof caches === 'undefined')
|
|
18
|
+
if (typeof caches === 'undefined') {
|
|
19
|
+
// The Cache API only exists in a secure context (https or localhost). A LAN
|
|
20
|
+
// IP or plain http silently lands here, and every visit re-downloads.
|
|
21
|
+
console.info(SOUNDFONT_LOG, 'Cache API unavailable (insecure context?); soundfont will not be cached');
|
|
13
22
|
return null;
|
|
23
|
+
}
|
|
14
24
|
try {
|
|
15
25
|
return await caches.open(CACHE_NAME);
|
|
16
26
|
}
|
|
17
|
-
catch {
|
|
27
|
+
catch (error) {
|
|
28
|
+
console.warn(SOUNDFONT_LOG, 'opening soundfont cache failed; continuing without cache', error);
|
|
18
29
|
return null; // private browsing and similar; the font still loads
|
|
19
30
|
}
|
|
20
31
|
}
|
|
21
32
|
export async function loadSoundfont(url, opts = {}) {
|
|
22
33
|
const cached = await opts.cache?.match(url);
|
|
23
|
-
if (cached)
|
|
24
|
-
|
|
34
|
+
if (cached) {
|
|
35
|
+
const buffer = await cached.arrayBuffer();
|
|
36
|
+
console.info(SOUNDFONT_LOG, 'soundfont cache HIT', {
|
|
37
|
+
url,
|
|
38
|
+
bytes: buffer.byteLength,
|
|
39
|
+
});
|
|
40
|
+
return buffer;
|
|
41
|
+
}
|
|
42
|
+
console.info(SOUNDFONT_LOG, 'soundfont cache MISS; downloading', {
|
|
43
|
+
url,
|
|
44
|
+
cacheAvailable: Boolean(opts.cache),
|
|
45
|
+
});
|
|
46
|
+
const started = soundfontNow();
|
|
25
47
|
const response = await fetch(url);
|
|
26
48
|
if (!response.ok) {
|
|
27
49
|
throw new Error(`Soundfont fetch failed: ${response.status} ${response.statusText} (${url})`);
|
|
@@ -29,9 +51,27 @@ export async function loadSoundfont(url, opts = {}) {
|
|
|
29
51
|
const declared = Number(response.headers.get('content-length') ?? 0);
|
|
30
52
|
opts.onProgress?.({ loaded: 0, total: declared });
|
|
31
53
|
const buffer = await readWithProgress(response, declared, opts.onProgress);
|
|
54
|
+
console.info(SOUNDFONT_LOG, 'soundfont downloaded', {
|
|
55
|
+
url,
|
|
56
|
+
bytes: buffer.byteLength,
|
|
57
|
+
downloadMs: Math.round(soundfontNow() - started),
|
|
58
|
+
cacheControl: response.headers.get('cache-control'),
|
|
59
|
+
});
|
|
32
60
|
// Rebuilt rather than cloned: the body has already been consumed to report
|
|
33
|
-
// progress, and a body can only be read once.
|
|
34
|
-
|
|
61
|
+
// progress, and a body can only be read once. A cache write that fails (quota,
|
|
62
|
+
// private mode) must not fail the load — it just means no caching this time.
|
|
63
|
+
try {
|
|
64
|
+
await opts.cache?.put(url, new Response(buffer, { headers: response.headers }));
|
|
65
|
+
if (opts.cache) {
|
|
66
|
+
console.info(SOUNDFONT_LOG, 'soundfont stored in cache', {
|
|
67
|
+
url,
|
|
68
|
+
bytes: buffer.byteLength,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
console.warn(SOUNDFONT_LOG, 'storing soundfont in cache failed', error);
|
|
74
|
+
}
|
|
35
75
|
opts.onProgress?.({
|
|
36
76
|
loaded: buffer.byteLength,
|
|
37
77
|
total: declared || buffer.byteLength,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"soundfont-loader.js","sourceRoot":"","sources":["../../../src/web/playback/soundfont-loader.ts"],"names":[],"mappings":"AAcA,oFAAoF;AACpF,MAAM,UAAU,GAAG,oBAAoB,CAAC;AAExC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,IAAI,OAAO,MAAM,KAAK,WAAW;
|
|
1
|
+
{"version":3,"file":"soundfont-loader.js","sourceRoot":"","sources":["../../../src/web/playback/soundfont-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,7 +65,15 @@ export declare class WebSynthBackend implements SynthBackend {
|
|
|
65
65
|
instanceCount: number;
|
|
66
66
|
onProgress: (state: PlaybackLoadState) => void;
|
|
67
67
|
}): Promise<PrepareResult>;
|
|
68
|
-
/**
|
|
68
|
+
/**
|
|
69
|
+
* Best effort, and bounded. Without a user gesture Chrome leaves `resume()`
|
|
70
|
+
* pending rather than rejecting it, so awaiting it unbounded blocks the whole
|
|
71
|
+
* cold load — the font never starts fetching and the Play button spins until
|
|
72
|
+
* the reader happens to click. The resume is kicked off and left to settle on
|
|
73
|
+
* its own (logging either way, even after the timeout), while the caller waits
|
|
74
|
+
* at most `RESUME_WAIT_MS`; `contextCanRun` then sees a still-suspended
|
|
75
|
+
* context and defers the rest, preloading the graph for the eventual gesture.
|
|
76
|
+
*/
|
|
69
77
|
private resumeContext;
|
|
70
78
|
private contextSnapshot;
|
|
71
79
|
private installLifecycleListeners;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-backend.d.ts","sourceRoot":"","sources":["../../../src/web/playback/web-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,YAAY,EACb,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,8EAA8E;AAC9E,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CACF,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE;QACP,mBAAmB,EAAE,MAAM,CAAC;QAC5B,gBAAgB,EAAE,MAAM,CAAC;QACzB,SAAS,EAAE,WAAW,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;KACvB,GACA,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5E,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACxE,MAAM,CACJ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,IAAI,CAAC;IACR,MAAM,CACJ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,GACtB,IAAI,CAAC;IACR,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/D,aAAa,CACX,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,IAAI,CAAC;IACR,WAAW,IAAI,IAAI,CAAC;IACpB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,CACT,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,KAC1C,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,YAAY,CAAC;CACpC,CAAC;
|
|
1
|
+
{"version":3,"file":"web-backend.d.ts","sourceRoot":"","sources":["../../../src/web/playback/web-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,12 +7,25 @@ function debugAudio(message, details) {
|
|
|
7
7
|
else
|
|
8
8
|
console.info(WEB_AUDIO_DEBUG, message);
|
|
9
9
|
}
|
|
10
|
+
/** A monotonic clock for load timings, falling back where `performance` is absent. */
|
|
11
|
+
function debugNow() {
|
|
12
|
+
return typeof performance !== 'undefined' ? performance.now() : Date.now();
|
|
13
|
+
}
|
|
10
14
|
/**
|
|
11
15
|
* Fetching is the measurable half of the load; handing the bytes to fluidsynth
|
|
12
16
|
* takes seconds more and reports nothing. So the bar is held below halfway
|
|
13
17
|
* until the fetch is done, rather than sitting at "done" through the decode.
|
|
14
18
|
*/
|
|
15
19
|
const FETCH_SHARE = 0.5;
|
|
20
|
+
/**
|
|
21
|
+
* How long `prepare` waits on a context resume before moving on.
|
|
22
|
+
*
|
|
23
|
+
* Chrome neither resolves nor rejects `resume()` on a suspended context until
|
|
24
|
+
* the page sees a user gesture — the promise simply stays pending. So the wait
|
|
25
|
+
* is bounded: the resume still runs (and settles on the eventual gesture), but
|
|
26
|
+
* `prepare` stops blocking on it and goes on to preload the font and graph.
|
|
27
|
+
*/
|
|
28
|
+
const RESUME_WAIT_MS = 250;
|
|
16
29
|
export class WebSynthBackend {
|
|
17
30
|
deps;
|
|
18
31
|
context = null;
|
|
@@ -81,20 +94,34 @@ export class WebSynthBackend {
|
|
|
81
94
|
debugAudio('context suspended; preloading synth graph', this.contextSnapshot());
|
|
82
95
|
}
|
|
83
96
|
onProgress({ status: 'loading', fraction: 0 });
|
|
97
|
+
const fontStart = debugNow();
|
|
84
98
|
const soundfont = await this.deps.loadFont(this.deps.fontUrl, ({ loaded, total }) => {
|
|
85
99
|
onProgress({
|
|
86
100
|
status: 'loading',
|
|
87
101
|
fraction: total > 0 ? (loaded / total) * FETCH_SHARE : null,
|
|
88
102
|
});
|
|
89
103
|
});
|
|
104
|
+
// The headline number for the download-vs-decode question: a cache hit is a
|
|
105
|
+
// few milliseconds here, a real fetch is seconds.
|
|
106
|
+
debugAudio('soundfont bytes ready', {
|
|
107
|
+
url: this.deps.fontUrl,
|
|
108
|
+
bytes: soundfont.byteLength,
|
|
109
|
+
loadMs: Math.round(debugNow() - fontStart),
|
|
110
|
+
});
|
|
90
111
|
// Busy, no idea how long — which is the honest answer for the decode.
|
|
91
112
|
onProgress({ status: 'loading', fraction: null });
|
|
113
|
+
const decodeStart = debugNow();
|
|
92
114
|
await this.deps.host.init(this.context, {
|
|
93
115
|
fluidsynthModuleUrl: this.deps.moduleUrls.fluidsynth,
|
|
94
116
|
workletModuleUrl: this.deps.moduleUrls.worklet,
|
|
95
117
|
soundfont,
|
|
96
118
|
instanceCount,
|
|
97
119
|
});
|
|
120
|
+
// This is the cost no byte-cache can remove: the SF3 is decompressed into
|
|
121
|
+
// the worklet on every page load.
|
|
122
|
+
debugAudio('synth decode/init done', {
|
|
123
|
+
decodeMs: Math.round(debugNow() - decodeStart),
|
|
124
|
+
});
|
|
98
125
|
// Safari can report a running context before the AudioWorklet graph is
|
|
99
126
|
// connected. Resume once more after the destination exists; this is a
|
|
100
127
|
// no-op elsewhere and recovers contexts that remain output-suspended.
|
|
@@ -102,23 +129,30 @@ export class WebSynthBackend {
|
|
|
102
129
|
debugAudio('synth graph ready', this.contextSnapshot());
|
|
103
130
|
return 'ready';
|
|
104
131
|
}
|
|
105
|
-
/**
|
|
132
|
+
/**
|
|
133
|
+
* Best effort, and bounded. Without a user gesture Chrome leaves `resume()`
|
|
134
|
+
* pending rather than rejecting it, so awaiting it unbounded blocks the whole
|
|
135
|
+
* cold load — the font never starts fetching and the Play button spins until
|
|
136
|
+
* the reader happens to click. The resume is kicked off and left to settle on
|
|
137
|
+
* its own (logging either way, even after the timeout), while the caller waits
|
|
138
|
+
* at most `RESUME_WAIT_MS`; `contextCanRun` then sees a still-suspended
|
|
139
|
+
* context and defers the rest, preloading the graph for the eventual gesture.
|
|
140
|
+
*/
|
|
106
141
|
async resumeContext() {
|
|
107
142
|
const context = this.context;
|
|
108
143
|
if (!context?.resume || context.state === 'running')
|
|
109
144
|
return;
|
|
110
145
|
debugAudio('resuming context', this.contextSnapshot());
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
146
|
+
// Attached here, not awaited, so a rejection that arrives after the timeout
|
|
147
|
+
// has won the race is still handled rather than left unhandled.
|
|
148
|
+
const resumed = context.resume().then(() => debugAudio('context resume resolved', this.contextSnapshot()), (error) => debugAudio('context resume rejected', {
|
|
149
|
+
...this.contextSnapshot(),
|
|
150
|
+
error: error instanceof Error ? error.message : String(error),
|
|
151
|
+
}));
|
|
152
|
+
await Promise.race([
|
|
153
|
+
resumed,
|
|
154
|
+
new Promise((resolve) => setTimeout(resolve, RESUME_WAIT_MS)),
|
|
155
|
+
]);
|
|
122
156
|
}
|
|
123
157
|
contextSnapshot() {
|
|
124
158
|
const context = this.context;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-backend.js","sourceRoot":"","sources":["../../../src/web/playback/web-backend.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AA0D1E,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAE7C,SAAS,UAAU,CAAC,OAAe,EAAE,OAAiC;IACpE,IAAI,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;;QACxD,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,MAAM,WAAW,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"web-backend.js","sourceRoot":"","sources":["../../../src/web/playback/web-backend.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED