@omnimedia/omnitool 1.1.0-53 → 1.1.0-56
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/package.json +1 -1
- package/s/demo/demo.bundle.ts +5 -3
- package/s/demo/routines/transcode-test.ts +2 -2
- package/s/demo/routines/transitions-test.ts +2 -2
- package/s/demo/routines/waveform-test.ts +30 -5
- package/s/driver/driver.ts +26 -5
- package/s/driver/fns/schematic.ts +2 -0
- package/s/driver/fns/work.ts +41 -20
- package/s/index.html.ts +1 -2
- package/s/timeline/parts/waveform/parts/collect.ts +72 -0
- package/s/timeline/parts/waveform/parts/render.ts +45 -0
- package/s/timeline/parts/waveform/parts/types.ts +24 -0
- package/s/timeline/parts/waveform/waveform.ts +152 -0
- package/s/timeline/parts/waveform.ts +0 -61
- package/s/timeline/renderers/export/parts/cursor.ts +75 -56
- package/s/timeline/renderers/export/parts/produce-video.ts +2 -3
- package/s/timeline/renderers/player/parts/playback.ts +33 -6
- package/s/timeline/renderers/player/player.ts +2 -14
- package/s/timeline/renderers/renderers.test.ts +1 -3
- package/x/demo/demo.bundle.js +2 -0
- package/x/demo/demo.bundle.js.map +1 -1
- package/x/demo/demo.bundle.min.js +11 -84
- package/x/demo/demo.bundle.min.js.map +4 -4
- package/x/demo/routines/transcode-test.js +2 -2
- package/x/demo/routines/transcode-test.js.map +1 -1
- package/x/demo/routines/transitions-test.js +2 -2
- package/x/demo/routines/transitions-test.js.map +1 -1
- package/x/demo/routines/waveform-test.js +24 -4
- package/x/demo/routines/waveform-test.js.map +1 -1
- package/x/driver/driver.d.ts +14 -2
- package/x/driver/driver.js +26 -5
- package/x/driver/driver.js.map +1 -1
- package/x/driver/driver.worker.bundle.min.js +1 -1
- package/x/driver/driver.worker.bundle.min.js.map +3 -3
- package/x/driver/fns/host.d.ts +2 -0
- package/x/driver/fns/schematic.d.ts +2 -0
- package/x/driver/fns/work.d.ts +2 -0
- package/x/driver/fns/work.js +33 -20
- package/x/driver/fns/work.js.map +1 -1
- package/x/index.html +3 -3
- package/x/index.html.js +1 -1
- package/x/tests.bundle.min.js +16 -16
- package/x/tests.bundle.min.js.map +4 -4
- package/x/tests.html +1 -1
- package/x/timeline/parts/waveform/parts/collect.d.ts +11 -0
- package/x/timeline/parts/waveform/parts/collect.js +56 -0
- package/x/timeline/parts/waveform/parts/collect.js.map +1 -0
- package/x/timeline/parts/waveform/parts/render.d.ts +5 -0
- package/x/timeline/parts/waveform/parts/render.js +29 -0
- package/x/timeline/parts/waveform/parts/render.js.map +1 -0
- package/x/timeline/parts/waveform/parts/types.d.ts +21 -0
- package/x/timeline/parts/waveform/parts/types.js +2 -0
- package/x/timeline/parts/waveform/parts/types.js.map +1 -0
- package/x/timeline/parts/waveform/waveform.d.ts +17 -0
- package/x/timeline/parts/waveform/waveform.js +125 -0
- package/x/timeline/parts/waveform/waveform.js.map +1 -0
- package/x/timeline/parts/waveform.d.ts +1 -9
- package/x/timeline/parts/waveform.js +1 -48
- package/x/timeline/parts/waveform.js.map +1 -1
- package/x/timeline/renderers/export/parts/cursor.d.ts +4 -5
- package/x/timeline/renderers/export/parts/cursor.js +68 -50
- package/x/timeline/renderers/export/parts/cursor.js.map +1 -1
- package/x/timeline/renderers/export/parts/produce-video.js +2 -3
- package/x/timeline/renderers/export/parts/produce-video.js.map +1 -1
- package/x/timeline/renderers/player/parts/playback.d.ts +9 -5
- package/x/timeline/renderers/player/parts/playback.js +25 -6
- package/x/timeline/renderers/player/parts/playback.js.map +1 -1
- package/x/timeline/renderers/player/player.js +2 -9
- package/x/timeline/renderers/player/player.js.map +1 -1
- package/x/timeline/renderers/renderers.test.js +1 -2
- package/x/timeline/renderers/renderers.test.js.map +1 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
|
|
2
2
|
import {ms, Ms} from "../../../../units/ms.js"
|
|
3
|
-
import {Item} from "../../../parts/item.js"
|
|
4
3
|
import {Driver} from "../../../../driver/driver.js"
|
|
5
4
|
import {TimelineFile} from "../../../parts/basics.js"
|
|
6
5
|
import {DecoderSource} from "../../../../driver/fns/schematic.js"
|
|
@@ -13,87 +12,107 @@ import {createVisualSampler} from "../../parts/samplers/visual/sampler.js"
|
|
|
13
12
|
*/
|
|
14
13
|
|
|
15
14
|
export class CursorVisualSampler {
|
|
16
|
-
#
|
|
15
|
+
#lastTimecode = -Infinity
|
|
17
16
|
#videoCursors = new Map<number, VideoFrameCursor>()
|
|
17
|
+
#sampler
|
|
18
18
|
|
|
19
19
|
constructor(
|
|
20
20
|
private driver: Driver,
|
|
21
|
-
private resolveMedia: (hash: string) => DecoderSource
|
|
21
|
+
private resolveMedia: (hash: string) => DecoderSource,
|
|
22
|
+
private timeline: TimelineFile
|
|
22
23
|
) {
|
|
23
|
-
this.#sampler = createVisualSampler(resolveMedia, (item, time) => {
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
this.#sampler = createVisualSampler(this.resolveMedia, (item, time) => {
|
|
25
|
+
const targetUs = toUs(time)
|
|
26
|
+
let cursor = this.#videoCursors.get(item.id)
|
|
27
|
+
|
|
28
|
+
if (!cursor) {
|
|
29
|
+
const source = this.resolveMedia(item.mediaHash)
|
|
30
|
+
const endUs = toUs(ms(item.start + item.duration))
|
|
31
|
+
cursor = this.#createVideoCursor(source, targetUs, endUs)
|
|
32
|
+
this.#videoCursors.set(item.id, cursor)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return cursor.next(targetUs)
|
|
27
36
|
})
|
|
28
37
|
}
|
|
29
38
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
next: (timecode: Ms) => {
|
|
34
|
-
if (timecode < lastTimecode)
|
|
35
|
-
throw new Error(`CursorVisualSampler is forward-only: requested ${timecode}ms after ${lastTimecode}ms`)
|
|
36
|
-
lastTimecode = timecode
|
|
37
|
-
return this.#sampler.sample(timeline, timecode)
|
|
38
|
-
},
|
|
39
|
-
cancel: () => this.#cancel(),
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
#getCursorForVideo(videoItem: Item.Video) {
|
|
44
|
-
const existing = this.#videoCursors.get(videoItem.id)
|
|
45
|
-
if (existing)
|
|
46
|
-
return existing
|
|
47
|
-
|
|
48
|
-
const source = this.resolveMedia(videoItem.mediaHash)
|
|
49
|
-
const video = this.driver.decodeVideo({ source })
|
|
50
|
-
const cursor = this.#cursor(video.getReader())
|
|
39
|
+
next(timecode: Ms) {
|
|
40
|
+
if (timecode < this.#lastTimecode)
|
|
41
|
+
throw new Error(`Forward-only cursor regression: ${timecode}ms < ${this.#lastTimecode}ms`)
|
|
51
42
|
|
|
52
|
-
this.#
|
|
53
|
-
return
|
|
43
|
+
this.#lastTimecode = timecode
|
|
44
|
+
return this.#sampler.sample(this.timeline, timecode)
|
|
54
45
|
}
|
|
55
46
|
|
|
56
|
-
async
|
|
57
|
-
await Promise.all(
|
|
58
|
-
[...this.#videoCursors.values()].map(cursor => cursor.cancel())
|
|
59
|
-
)
|
|
47
|
+
async cancel() {
|
|
48
|
+
await Promise.all([...this.#videoCursors.values()].map(c => c.cancel()))
|
|
60
49
|
this.#videoCursors.clear()
|
|
61
50
|
}
|
|
62
51
|
|
|
63
|
-
|
|
64
|
-
|
|
52
|
+
#createVideoCursor(source: DecoderSource, startUs: number, endUs: number): VideoFrameCursor {
|
|
53
|
+
const video = this.driver.decodeVideo({source, start: startUs / 1_000_000, end: endUs / 1_000_000})
|
|
54
|
+
const reader = video.readable.getReader()
|
|
55
|
+
|
|
56
|
+
let current: VideoFrame | null = null
|
|
57
|
+
let nextPromise: Promise<VideoFrame | null> | null = null
|
|
58
|
+
let ended = false
|
|
59
|
+
|
|
60
|
+
const readNext = async () => {
|
|
61
|
+
if (ended) return null
|
|
62
|
+
const {done, value} = await reader.read()
|
|
63
|
+
if (done) return (ended = true, null)
|
|
64
|
+
|
|
65
|
+
const frame = new VideoFrame(value)
|
|
66
|
+
value.close()
|
|
67
|
+
return frame
|
|
68
|
+
}
|
|
69
|
+
|
|
65
70
|
return {
|
|
66
71
|
async next(targetUs: number): Promise<VideoFrame | undefined> {
|
|
67
|
-
|
|
72
|
+
current ??= await readNext()
|
|
73
|
+
if (!current) return undefined
|
|
74
|
+
|
|
68
75
|
while (true) {
|
|
69
|
-
|
|
76
|
+
nextPromise ??= readNext()
|
|
77
|
+
const nextFrame = await nextPromise
|
|
70
78
|
|
|
71
|
-
if (
|
|
72
|
-
const out = prev ? new VideoFrame(prev) : undefined
|
|
73
|
-
prev?.close()
|
|
74
|
-
return out
|
|
75
|
-
}
|
|
79
|
+
if (!nextFrame) return new VideoFrame(current)
|
|
76
80
|
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
const prevUs = prev?.timestamp ?? Number.NEGATIVE_INFINITY
|
|
80
|
-
const usePrev = !!prev && Math.abs(prevUs - targetUs) < Math.abs(hitUs - targetUs)
|
|
81
|
+
const currentUs = current.timestamp ?? -Infinity
|
|
82
|
+
const nextUs = nextFrame.timestamp ?? currentUs
|
|
81
83
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
+
if (nextUs < targetUs) {
|
|
85
|
+
current.close()
|
|
86
|
+
current = nextFrame
|
|
87
|
+
nextPromise = null
|
|
88
|
+
continue
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const useNext = Math.abs(nextUs - targetUs) < Math.abs(currentUs - targetUs)
|
|
84
92
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
93
|
+
if (useNext) {
|
|
94
|
+
current.close()
|
|
95
|
+
current = nextFrame
|
|
96
|
+
nextPromise = null
|
|
97
|
+
continue
|
|
89
98
|
}
|
|
90
99
|
|
|
91
|
-
|
|
92
|
-
prev = hit
|
|
100
|
+
return new VideoFrame(current)
|
|
93
101
|
}
|
|
94
102
|
},
|
|
95
103
|
|
|
96
|
-
|
|
104
|
+
async cancel() {
|
|
105
|
+
const pending = nextPromise
|
|
106
|
+
nextPromise = null
|
|
107
|
+
|
|
108
|
+
current?.close()
|
|
109
|
+
current = null
|
|
110
|
+
|
|
111
|
+
video.cancel()
|
|
112
|
+
|
|
113
|
+
const buffered = await pending?.catch(() => null)
|
|
114
|
+
buffered?.close()
|
|
115
|
+
}
|
|
97
116
|
}
|
|
98
117
|
}
|
|
99
118
|
}
|
|
@@ -21,14 +21,13 @@ export function produceVideo({
|
|
|
21
21
|
|
|
22
22
|
const stream = new TransformStream<VideoFrame, VideoFrame>()
|
|
23
23
|
const writer = stream.writable.getWriter()
|
|
24
|
-
const sampler = new CursorVisualSampler(driver, resolveMedia)
|
|
25
|
-
const cursor = sampler.cursor(timeline)
|
|
24
|
+
const sampler = new CursorVisualSampler(driver, resolveMedia, timeline)
|
|
26
25
|
const dt = 1 / fps
|
|
27
26
|
const duration = computeItemDuration(timeline.rootId, timeline)
|
|
28
27
|
|
|
29
28
|
async function produce() {
|
|
30
29
|
await fixedStep({fps, duration}, async (timecode, i) => {
|
|
31
|
-
const layers = await
|
|
30
|
+
const layers = await sampler.next(timecode)
|
|
32
31
|
const composed = await driver.composite(layers)
|
|
33
32
|
|
|
34
33
|
const frame = new VideoFrame(composed, {
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
|
|
2
|
-
import {pub} from '@e280/stz'
|
|
3
2
|
import {Fps} from '../../../../units/fps.js'
|
|
4
3
|
import {ms, Ms} from '../../../../units/ms.js'
|
|
4
|
+
import {Driver} from '../../../../driver/driver.js'
|
|
5
5
|
import {realtime} from '../../parts/schedulers.js'
|
|
6
6
|
import {TimelineFile} from '../../../parts/basics.js'
|
|
7
|
+
import {computeItemDuration} from '../../parts/handy.js'
|
|
7
8
|
import {seconds, Seconds} from '../../../../units/seconds.js'
|
|
9
|
+
import {CursorVisualSampler} from '../../export/parts/cursor.js'
|
|
8
10
|
import {DecoderSource} from '../../../../driver/fns/schematic.js'
|
|
9
11
|
import {createAudioSampler} from '../../parts/samplers/audio/sampler.js'
|
|
10
12
|
import {createVisualSampler} from '../../parts/samplers/visual/sampler.js'
|
|
11
13
|
|
|
12
14
|
export class Playback {
|
|
13
|
-
visualSampler
|
|
14
15
|
audioSampler
|
|
16
|
+
seekVisualSampler
|
|
17
|
+
playVisualSampler: CursorVisualSampler | null = null
|
|
15
18
|
|
|
16
19
|
#playbackStart = ms(0)
|
|
17
20
|
#audioStartSec: number | null = null
|
|
@@ -25,28 +28,39 @@ export class Playback {
|
|
|
25
28
|
#audioAbort: AbortController | null = null
|
|
26
29
|
|
|
27
30
|
constructor(
|
|
31
|
+
private driver: Driver,
|
|
28
32
|
private timeline: TimelineFile,
|
|
29
33
|
private resolveMedia: (hash: string) => DecoderSource
|
|
30
34
|
) {
|
|
31
35
|
this.audioGain.connect(this.audioContext.destination)
|
|
32
36
|
this.audioGain.gain.value = 0.7 ** 2
|
|
33
|
-
this.
|
|
37
|
+
this.seekVisualSampler = createVisualSampler(this.resolveMedia)
|
|
34
38
|
this.audioSampler = createAudioSampler(this.resolveMedia)
|
|
39
|
+
this.#samples()
|
|
35
40
|
}
|
|
36
41
|
|
|
37
|
-
async
|
|
42
|
+
async #samples() {
|
|
38
43
|
for await (const _ of this.#controller.ticks()) {
|
|
39
|
-
|
|
44
|
+
const layers = await this.playVisualSampler?.next(this.currentTime) ?? []
|
|
45
|
+
|
|
46
|
+
const frame = await this.driver.composite(layers)
|
|
47
|
+
frame.close()
|
|
48
|
+
|
|
49
|
+
if (this.currentTime >= this.duration)
|
|
50
|
+
this.pause()
|
|
40
51
|
}
|
|
41
52
|
}
|
|
42
53
|
|
|
43
54
|
async seek(time: Ms) {
|
|
44
55
|
this.pause()
|
|
45
56
|
this.#playbackStart = time
|
|
46
|
-
return await this.
|
|
57
|
+
return await this.seekVisualSampler.sample(this.timeline, time)
|
|
47
58
|
}
|
|
48
59
|
|
|
49
60
|
async start(timeline: TimelineFile) {
|
|
61
|
+
if(this.#controller.isPlaying())
|
|
62
|
+
return
|
|
63
|
+
|
|
50
64
|
this.timeline = timeline
|
|
51
65
|
await this.audioContext.resume()
|
|
52
66
|
|
|
@@ -61,6 +75,9 @@ export class Playback {
|
|
|
61
75
|
|
|
62
76
|
this.audioNodes.clear()
|
|
63
77
|
|
|
78
|
+
this.playVisualSampler?.cancel()
|
|
79
|
+
this.playVisualSampler = new CursorVisualSampler(this.driver, this.resolveMedia, this.timeline)
|
|
80
|
+
|
|
64
81
|
this.#controller.play()
|
|
65
82
|
this.#startAudio(this.#audioAbort.signal, seconds(this.#playbackStart / 1000))
|
|
66
83
|
}
|
|
@@ -74,6 +91,16 @@ export class Playback {
|
|
|
74
91
|
node.stop()
|
|
75
92
|
|
|
76
93
|
this.audioNodes.clear()
|
|
94
|
+
|
|
95
|
+
this.playVisualSampler?.cancel()
|
|
96
|
+
this.playVisualSampler = null
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
get duration() {
|
|
100
|
+
return computeItemDuration(
|
|
101
|
+
this.timeline.rootId,
|
|
102
|
+
this.timeline
|
|
103
|
+
)
|
|
77
104
|
}
|
|
78
105
|
|
|
79
106
|
get currentTime() {
|
|
@@ -4,7 +4,6 @@ import {fps} from "../../../units/fps.js"
|
|
|
4
4
|
import {Playback} from "./parts/playback.js"
|
|
5
5
|
import {Driver} from "../../../driver/driver.js"
|
|
6
6
|
import {TimelineFile} from "../../parts/basics.js"
|
|
7
|
-
import {computeItemDuration} from "../parts/handy.js"
|
|
8
7
|
import {DecoderSource} from "../../../driver/fns/schematic.js"
|
|
9
8
|
|
|
10
9
|
type ResolveMedia = (hash: string) => DecoderSource
|
|
@@ -18,20 +17,12 @@ export class VideoPlayer {
|
|
|
18
17
|
resolveMedia: ResolveMedia,
|
|
19
18
|
private timeline: TimelineFile,
|
|
20
19
|
) {
|
|
21
|
-
this.playback = new Playback(timeline, resolveMedia)
|
|
20
|
+
this.playback = new Playback(driver, timeline, resolveMedia)
|
|
22
21
|
this.canvas = driver.compositor.pixi.renderer.canvas
|
|
23
22
|
}
|
|
24
23
|
|
|
25
24
|
async play() {
|
|
26
25
|
await this.playback.start(this.timeline)
|
|
27
|
-
|
|
28
|
-
for await (const layers of this.playback.samples()) {
|
|
29
|
-
const frame = await this.driver.composite(layers)
|
|
30
|
-
frame.close()
|
|
31
|
-
|
|
32
|
-
if (this.currentTime >= this.duration)
|
|
33
|
-
this.pause()
|
|
34
|
-
}
|
|
35
26
|
}
|
|
36
27
|
|
|
37
28
|
pause() {
|
|
@@ -49,10 +40,7 @@ export class VideoPlayer {
|
|
|
49
40
|
}
|
|
50
41
|
|
|
51
42
|
get duration() {
|
|
52
|
-
return
|
|
53
|
-
this.timeline.rootId,
|
|
54
|
-
this.timeline
|
|
55
|
-
)
|
|
43
|
+
return this.playback.duration
|
|
56
44
|
}
|
|
57
45
|
|
|
58
46
|
get currentTime() {
|
|
@@ -49,8 +49,7 @@ export default Science.suite({
|
|
|
49
49
|
o.video(videoA, {duration: 2000}),
|
|
50
50
|
o.audio(videoA, {duration: 500}),
|
|
51
51
|
))})
|
|
52
|
-
const
|
|
53
|
-
const cursor = sampler.cursor(timeline)
|
|
52
|
+
const cursor = new CursorVisualSampler(driver, resolveMedia, timeline)
|
|
54
53
|
await cursor.next(ms(1000))
|
|
55
54
|
await expect(async () => await cursor.next(ms(100))).throwsAsync()
|
|
56
55
|
}),
|
|
@@ -384,4 +383,3 @@ export default Science.suite({
|
|
|
384
383
|
expect(totalFrames).is(240000)
|
|
385
384
|
})
|
|
386
385
|
})
|
|
387
|
-
|
package/x/demo/demo.bundle.js
CHANGED
|
@@ -23,6 +23,8 @@ let exportState = null;
|
|
|
23
23
|
const setProgress = (card, state) => {
|
|
24
24
|
const progress = card.querySelector(".progress");
|
|
25
25
|
const status = card.querySelector(".status");
|
|
26
|
+
if (!progress || !status)
|
|
27
|
+
return;
|
|
26
28
|
if (state === "running") {
|
|
27
29
|
progress.removeAttribute("value");
|
|
28
30
|
status.textContent = "running";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"demo.bundle.js","sourceRoot":"","sources":["../../s/demo/demo.bundle.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,qBAAqB,CAAA;AAE1C,OAAO,EAAC,YAAY,EAAC,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAC,YAAY,EAAC,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAC,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAC,kBAAkB,EAAC,MAAM,8BAA8B,CAAA;AAE/D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,EAAC,SAAS,EAAE,IAAI,GAAG,CAAC,uCAAuC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAC,CAAC,CAAA;AAEjH,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,yBAAyB,CAAgB,CAAA;AACtF,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,yBAAyB,CAAgB,CAAA;AACtF,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAgB,CAAA;AACpF,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAgB,CAAA;AACpF,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,sBAAsB,CAAgB,CAAA;AAChF,MAAM,YAAY,GAAG,UAAU,CAAC,aAAa,CAAC,wBAAwB,CAAsB,CAAA;AAE5F,IAAI,WAAW,GAAgD,IAAI,CAAA;AAEnE,mBAAmB;AACnB,CAAC;IACA,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;IAChC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;;QACxD,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAA;AACrD,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,IAAiB,EAAE,KAAkC,EAAE,EAAE;IAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"demo.bundle.js","sourceRoot":"","sources":["../../s/demo/demo.bundle.ts"],"names":[],"mappings":"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"}
|