@hkdigital/lib-sveltekit 0.2.21 → 0.2.22
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/README.md +149 -135
- package/dist/assets/autospuiten/car-paint-picker.js +41 -41
- package/dist/assets/autospuiten/labels.js +7 -7
- package/dist/classes/cache/IndexedDbCache.js +1407 -1407
- package/dist/classes/cache/MemoryResponseCache.js +138 -138
- package/dist/classes/cache/index.js +5 -5
- package/dist/classes/cache/typedef.js +41 -41
- package/dist/classes/data/IterableTree.js +243 -243
- package/dist/classes/data/Selector.js +190 -190
- package/dist/classes/data/index.js +2 -2
- package/dist/classes/events/EventEmitter.js +275 -275
- package/dist/classes/events/index.js +2 -2
- package/dist/classes/index.js +4 -4
- package/dist/classes/logging/Logger.js +210 -210
- package/dist/classes/logging/constants.js +16 -16
- package/dist/classes/logging/index.js +4 -4
- package/dist/classes/logging/typedef.js +17 -17
- package/dist/classes/promise/HkPromise.js +377 -377
- package/dist/classes/promise/index.js +1 -1
- package/dist/classes/services/ServiceBase.js +463 -463
- package/dist/classes/services/ServiceManager.js +614 -614
- package/dist/classes/services/index.js +5 -5
- package/dist/classes/services/service-states.js +205 -205
- package/dist/classes/services/typedef.js +179 -179
- package/dist/classes/stores/SubscribersCount.js +107 -107
- package/dist/classes/stores/index.js +1 -1
- package/dist/classes/streams/LogTransformStream.js +19 -19
- package/dist/classes/streams/ServerEventsStore.js +110 -110
- package/dist/classes/streams/TimeStampSource.js +26 -26
- package/dist/classes/streams/index.js +3 -3
- package/dist/classes/svelte/audio/AudioLoader.svelte.js +58 -58
- package/dist/classes/svelte/audio/AudioScene.svelte.js +324 -324
- package/dist/classes/svelte/audio/mocks.js +35 -35
- package/dist/classes/svelte/finite-state-machine/FiniteStateMachine.svelte.js +133 -133
- package/dist/classes/svelte/finite-state-machine/index.js +1 -1
- package/dist/classes/svelte/image/ImageLoader.svelte.js +45 -45
- package/dist/classes/svelte/image/ImageScene.svelte.js +249 -249
- package/dist/classes/svelte/image/ImageVariantsLoader.svelte.js +152 -152
- package/dist/classes/svelte/image/index.js +4 -4
- package/dist/classes/svelte/image/mocks.js +35 -35
- package/dist/classes/svelte/image/typedef.js +8 -8
- package/dist/classes/svelte/index.js +14 -14
- package/dist/classes/svelte/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
- package/dist/classes/svelte/loading-state-machine/constants.js +16 -16
- package/dist/classes/svelte/loading-state-machine/index.js +3 -3
- package/dist/classes/svelte/network-loader/NetworkLoader.svelte.js +338 -338
- package/dist/classes/svelte/network-loader/constants.js +3 -3
- package/dist/classes/svelte/network-loader/index.js +3 -3
- package/dist/classes/svelte/network-loader/mocks.js +30 -30
- package/dist/classes/svelte/network-loader/typedef.js +8 -8
- package/dist/components/area/HkArea.svelte +49 -49
- package/dist/components/area/HkGridArea.svelte +77 -77
- package/dist/components/area/index.js +2 -2
- package/dist/components/buttons/button/Button.svelte +82 -82
- package/dist/components/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
- package/dist/components/buttons/button-text/TextButton.svelte +21 -21
- package/dist/components/buttons/index.js +3 -3
- package/dist/components/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
- package/dist/components/debug/index.js +1 -1
- package/dist/components/drag-drop/DragController.js +44 -44
- package/dist/components/drag-drop/DragDropContext.svelte +111 -111
- package/dist/components/drag-drop/Draggable.svelte +519 -519
- package/dist/components/drag-drop/{Dropzone.svelte → DropZone.svelte} +258 -258
- package/dist/components/drag-drop/DropZoneArea.svelte +119 -119
- package/dist/components/drag-drop/DropZoneList.svelte +125 -125
- package/dist/components/drag-drop/actions.js +26 -26
- package/dist/components/drag-drop/drag-state.svelte.js +322 -322
- package/dist/components/drag-drop/index.js +7 -7
- package/dist/components/drag-drop/util.js +85 -85
- package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
- package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
- package/dist/components/icons/HkIcon.svelte +86 -86
- package/dist/components/icons/HkTabIcon.svelte +116 -116
- package/dist/components/icons/SteezeIcon.svelte +97 -97
- package/dist/components/icons/index.js +6 -6
- package/dist/components/icons/typedef.js +16 -16
- package/dist/components/index.js +2 -2
- package/dist/components/inputs/index.js +1 -1
- package/dist/components/inputs/text-input/TestTextInput.svelte__ +102 -102
- package/dist/components/inputs/text-input/TextInput.svelte +223 -223
- package/dist/components/inputs/text-input/TextInput.svelte___ +83 -83
- package/dist/components/inputs/text-input/assets/IconInvalid.svelte +14 -14
- package/dist/components/inputs/text-input/assets/IconValid.svelte +12 -12
- package/dist/components/layout/grid-layers/GridLayers.svelte +63 -63
- package/dist/components/layout/grid-layers/GridLayers.svelte__heightFrom__ +372 -0
- package/dist/components/layout/grid-layers/util.js +74 -74
- package/dist/components/layout/index.js +1 -1
- package/dist/components/panels/index.js +1 -1
- package/dist/components/panels/panel/Panel.svelte +43 -43
- package/dist/components/rows/index.js +3 -3
- package/dist/components/rows/panel-grid-row/PanelGridRow.svelte +104 -104
- package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
- package/dist/components/tab-bar/HkTabBar.state.svelte.js +149 -149
- package/dist/components/tab-bar/HkTabBar.svelte +74 -74
- package/dist/components/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
- package/dist/components/tab-bar/HkTabBarSelector.svelte +49 -49
- package/dist/components/tab-bar/index.js +17 -17
- package/dist/components/tab-bar/typedef.js +11 -11
- package/dist/config/imagetools-config.js +189 -189
- package/dist/config/imagetools.d.ts +72 -72
- package/dist/constants/bases.js +13 -13
- package/dist/constants/errors/api.js +9 -9
- package/dist/constants/errors/generic.js +5 -5
- package/dist/constants/errors/index.js +3 -3
- package/dist/constants/errors/jwt.js +5 -5
- package/dist/constants/http/headers.js +6 -6
- package/dist/constants/http/index.js +2 -2
- package/dist/constants/http/methods.js +14 -14
- package/dist/constants/index.js +3 -3
- package/dist/constants/mime/application.js +5 -5
- package/dist/constants/mime/audio.js +13 -13
- package/dist/constants/mime/image.js +3 -3
- package/dist/constants/mime/index.js +4 -4
- package/dist/constants/mime/text.js +2 -2
- package/dist/constants/regexp/index.js +31 -31
- package/dist/constants/regexp/inspiratie.js__ +95 -95
- package/dist/constants/regexp/text.js +49 -49
- package/dist/constants/regexp/user.js +32 -32
- package/dist/constants/regexp/web.js +3 -3
- package/dist/constants/state-labels/drag-states.js +6 -6
- package/dist/constants/state-labels/drop-states.js +6 -6
- package/dist/constants/state-labels/input-states.js +11 -11
- package/dist/constants/state-labels/submit-states.js +4 -4
- package/dist/constants/time.js +28 -28
- package/dist/css/utilities.css +43 -43
- package/dist/design/design-config.js +73 -73
- package/dist/design/tailwind-theme-extend.js +158 -158
- package/dist/features/button-group/ButtonGroup.svelte +82 -82
- package/dist/features/button-group/typedef.js +10 -10
- package/dist/features/compare-left-right/CompareLeftRight.svelte +179 -179
- package/dist/features/compare-left-right/index.js +1 -1
- package/dist/features/game-box/GameBox.svelte +577 -577
- package/dist/features/game-box/gamebox.util.js +83 -83
- package/dist/features/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
- package/dist/features/hk-app-layout/HkAppLayout.svelte +251 -251
- package/dist/features/image-box/ImageBox.svelte +210 -210
- package/dist/features/image-box/index.js +5 -5
- package/dist/features/image-box/typedef.js +32 -32
- package/dist/features/index.js +23 -23
- package/dist/features/presenter/ImageSlide.svelte +64 -64
- package/dist/features/presenter/Presenter.state.svelte.js +638 -638
- package/dist/features/presenter/Presenter.svelte +142 -142
- package/dist/features/presenter/constants.js +7 -7
- package/dist/features/presenter/index.js +10 -10
- package/dist/features/presenter/typedef.js +106 -106
- package/dist/features/presenter/util.js +210 -210
- package/dist/features/virtual-viewport/VirtualViewport.svelte +196 -196
- package/dist/logging/adapters/console.js +114 -114
- package/dist/logging/adapters/pino.js +60 -60
- package/dist/logging/constants.js +1 -1
- package/dist/logging/factories/client.js +21 -21
- package/dist/logging/factories/server.js +22 -22
- package/dist/logging/factories/universal.js +23 -23
- package/dist/logging/index.js +8 -8
- package/dist/schemas/index.js +1 -1
- package/dist/schemas/validate-url.js +180 -180
- package/dist/server/index.js +1 -1
- package/dist/server/logger.js +94 -94
- package/dist/states/index.js +1 -1
- package/dist/states/navigation.svelte.js +55 -55
- package/dist/stores/index.js +1 -1
- package/dist/stores/theme.js +80 -80
- package/dist/themes/hkdev/components/blocks/text-block.css +34 -34
- package/dist/themes/hkdev/components/boxes/game-box.css +11 -11
- package/dist/themes/hkdev/components/buttons/button-icon-steeze.css +22 -22
- package/dist/themes/hkdev/components/buttons/button-text.css +32 -32
- package/dist/themes/hkdev/components/buttons/button.css +146 -146
- package/dist/themes/hkdev/components/buttons/skip-button.css +5 -5
- package/dist/themes/hkdev/components/drag-drop/draggable.css +73 -73
- package/dist/themes/hkdev/components/drag-drop/drop-zone.css +58 -58
- package/dist/themes/hkdev/components/icons/icon-steeze.css +15 -15
- package/dist/themes/hkdev/components/inputs/text-input.css +102 -102
- package/dist/themes/hkdev/components/panels/panel.css +25 -25
- package/dist/themes/hkdev/components/rows/panel-grid-row.css +4 -4
- package/dist/themes/hkdev/components/rows/panel-row-2.css +5 -5
- package/dist/themes/hkdev/components.css +29 -29
- package/dist/themes/hkdev/debug.css +1 -1
- package/dist/themes/hkdev/global/layout.css +32 -32
- package/dist/themes/hkdev/global/on-colors.css +32 -32
- package/dist/themes/hkdev/globals.css +3 -3
- package/dist/themes/hkdev/responsive.css +12 -12
- package/dist/themes/hkdev/theme-ext.js +12 -12
- package/dist/themes/hkdev/theme.css +218 -218
- package/dist/themes/index.js +1 -1
- package/dist/typedef/context.js +6 -6
- package/dist/typedef/drag.js +25 -25
- package/dist/typedef/drop.js +12 -12
- package/dist/typedef/image.js +38 -38
- package/dist/typedef/index.js +4 -4
- package/dist/util/array/index.js +436 -436
- package/dist/util/bases/base58.js +262 -262
- package/dist/util/bases/index.js +1 -1
- package/dist/util/compare/index.js +247 -247
- package/dist/util/css/css-vars.js +83 -83
- package/dist/util/css/index.js +1 -1
- package/dist/util/design-system/components/states.js +22 -22
- package/dist/util/design-system/css/clamp.js +66 -66
- package/dist/util/design-system/css/root-design-vars.js +102 -102
- package/dist/util/design-system/index.js +5 -5
- package/dist/util/design-system/layout/scaling.js +228 -228
- package/dist/util/design-system/skeleton.js +208 -208
- package/dist/util/design-system/tailwind.js +288 -288
- package/dist/util/env/index.js +9 -9
- package/dist/util/exceptions/index.d.ts +11 -0
- package/dist/util/exceptions/index.js +17 -0
- package/dist/util/expect/arrays.js +47 -47
- package/dist/util/expect/index.js +259 -259
- package/dist/util/expect/primitives.js +55 -55
- package/dist/util/expect/url.js +60 -60
- package/dist/util/function/index.js +218 -218
- package/dist/util/geo/index.js +26 -26
- package/dist/util/http/caching.js +263 -263
- package/dist/util/http/errors.js +97 -97
- package/dist/util/http/headers.js +75 -75
- package/dist/util/http/http-request.js +578 -578
- package/dist/util/http/index.js +22 -22
- package/dist/util/http/json-request.js +224 -224
- package/dist/util/http/mocks.js +65 -65
- package/dist/util/http/response.js +294 -294
- package/dist/util/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
- package/dist/util/http/typedef.js +93 -93
- package/dist/util/http/url.js +52 -52
- package/dist/util/image/index.js +86 -86
- package/dist/util/index.d.ts +1 -0
- package/dist/util/index.js +3 -2
- package/dist/util/is/index.js +140 -140
- package/dist/util/iterate/index.js +234 -234
- package/dist/util/object/index.js +1361 -1361
- package/dist/util/singleton/index.js +97 -97
- package/dist/util/string/array-path.js +75 -75
- package/dist/util/string/convert.js +54 -54
- package/dist/util/string/fs.js +226 -226
- package/dist/util/string/index.js +5 -5
- package/dist/util/string/interpolate.js +61 -61
- package/dist/util/string/pad.js +10 -10
- package/dist/util/svelte/index.js +4 -4
- package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
- package/dist/util/svelte/observe/index.js +49 -49
- package/dist/util/svelte/state-context/index.js +117 -117
- package/dist/util/svelte/wait/index.js +38 -38
- package/dist/util/sveltekit/index.js +1 -1
- package/dist/util/sveltekit/route-folders/index.js +101 -101
- package/dist/util/time/index.js +323 -323
- package/dist/util/unique/index.js +249 -249
- package/dist/valibot/date.js__ +10 -10
- package/dist/valibot/index.js +9 -9
- package/dist/valibot/url.js +95 -95
- package/dist/valibot/user.js +23 -23
- package/dist/zod/all.js +33 -33
- package/dist/zod/generic.js +11 -11
- package/dist/zod/javascript.js +32 -32
- package/dist/zod/user.js +16 -16
- package/dist/zod/web.js +52 -52
- package/package.json +133 -132
@@ -1,110 +1,110 @@
|
|
1
|
-
import { writable } from 'svelte/store';
|
2
|
-
|
3
|
-
// eslint-disable-next-line no-unused-vars
|
4
|
-
import * as Zods from '../../zod/all.js';
|
5
|
-
|
6
|
-
import SubscribersCount from '../stores/SubscribersCount.js';
|
7
|
-
|
8
|
-
// > Class
|
9
|
-
|
10
|
-
export default class ServerEventsStore {
|
11
|
-
/** @type {Zods.AbsOrRelUrl} */
|
12
|
-
#url;
|
13
|
-
|
14
|
-
/** @type {import("svelte/store").Writable<object|null>} */
|
15
|
-
#store;
|
16
|
-
|
17
|
-
/** @type {boolean} */
|
18
|
-
#starting = false;
|
19
|
-
|
20
|
-
/** @type {ReadableStream<Uint8Array>|null} */
|
21
|
-
#stream = null;
|
22
|
-
|
23
|
-
/** @type {SubscribersCount} */
|
24
|
-
subscribersCount;
|
25
|
-
|
26
|
-
/**
|
27
|
-
* @param {object} _
|
28
|
-
* @param {Zods.AbsOrRelUrl} _.url
|
29
|
-
*/
|
30
|
-
constructor({ url }) {
|
31
|
-
this.#url = Zods.AbsOrRelUrl.parse(url);
|
32
|
-
|
33
|
-
this.#store = writable(null);
|
34
|
-
|
35
|
-
this.subscribersCount = new SubscribersCount();
|
36
|
-
}
|
37
|
-
|
38
|
-
/**
|
39
|
-
* Subscribe to Server Send Events
|
40
|
-
*
|
41
|
-
* @param {import("svelte/store").Subscriber<object|null>} fn
|
42
|
-
*
|
43
|
-
* @returns {()=>void} unsubscribe
|
44
|
-
*/
|
45
|
-
subscribe(fn) {
|
46
|
-
this.subscribersCount.increment();
|
47
|
-
|
48
|
-
const unsubscribe = this.#store?.subscribe(fn);
|
49
|
-
|
50
|
-
this.#tryStartStream();
|
51
|
-
|
52
|
-
return () => {
|
53
|
-
this.subscribersCount.decrement();
|
54
|
-
unsubscribe?.();
|
55
|
-
};
|
56
|
-
}
|
57
|
-
|
58
|
-
async #tryStartStream() {
|
59
|
-
if (this.#stream || this.#starting) {
|
60
|
-
return;
|
61
|
-
}
|
62
|
-
|
63
|
-
try {
|
64
|
-
this.#starting = true;
|
65
|
-
|
66
|
-
const aborter = new AbortController();
|
67
|
-
const signal = aborter.signal;
|
68
|
-
|
69
|
-
const response = await fetch(this.#url, { signal });
|
70
|
-
|
71
|
-
const stream = (this.#stream = response.body);
|
72
|
-
|
73
|
-
this.#starting = false;
|
74
|
-
|
75
|
-
const reader =
|
76
|
-
// @ts-ignore
|
77
|
-
stream.pipeThrough(new TextDecoderStream()).getReader();
|
78
|
-
|
79
|
-
// const textDecoder = new TextDecoder('utf-8');
|
80
|
-
|
81
|
-
while (!signal.aborted) {
|
82
|
-
const { value, done } = await reader.read();
|
83
|
-
|
84
|
-
if (undefined === value) {
|
85
|
-
break;
|
86
|
-
}
|
87
|
-
|
88
|
-
const obj = JSON.parse(value);
|
89
|
-
// const obj = JSON.parse(textDecoder.decode(value));
|
90
|
-
|
91
|
-
if (!done) {
|
92
|
-
this.#store.set(obj);
|
93
|
-
}
|
94
|
-
|
95
|
-
// console.log({ ...obj, done });
|
96
|
-
|
97
|
-
if (done) {
|
98
|
-
break;
|
99
|
-
}
|
100
|
-
} // end for
|
101
|
-
} catch (e) {
|
102
|
-
this.#starting = false;
|
103
|
-
this.#stream = null;
|
104
|
-
|
105
|
-
if (e instanceof Error && e.name !== 'AbortError') {
|
106
|
-
throw e;
|
107
|
-
}
|
108
|
-
}
|
109
|
-
}
|
110
|
-
}
|
1
|
+
import { writable } from 'svelte/store';
|
2
|
+
|
3
|
+
// eslint-disable-next-line no-unused-vars
|
4
|
+
import * as Zods from '../../zod/all.js';
|
5
|
+
|
6
|
+
import SubscribersCount from '../stores/SubscribersCount.js';
|
7
|
+
|
8
|
+
// > Class
|
9
|
+
|
10
|
+
export default class ServerEventsStore {
|
11
|
+
/** @type {Zods.AbsOrRelUrl} */
|
12
|
+
#url;
|
13
|
+
|
14
|
+
/** @type {import("svelte/store").Writable<object|null>} */
|
15
|
+
#store;
|
16
|
+
|
17
|
+
/** @type {boolean} */
|
18
|
+
#starting = false;
|
19
|
+
|
20
|
+
/** @type {ReadableStream<Uint8Array>|null} */
|
21
|
+
#stream = null;
|
22
|
+
|
23
|
+
/** @type {SubscribersCount} */
|
24
|
+
subscribersCount;
|
25
|
+
|
26
|
+
/**
|
27
|
+
* @param {object} _
|
28
|
+
* @param {Zods.AbsOrRelUrl} _.url
|
29
|
+
*/
|
30
|
+
constructor({ url }) {
|
31
|
+
this.#url = Zods.AbsOrRelUrl.parse(url);
|
32
|
+
|
33
|
+
this.#store = writable(null);
|
34
|
+
|
35
|
+
this.subscribersCount = new SubscribersCount();
|
36
|
+
}
|
37
|
+
|
38
|
+
/**
|
39
|
+
* Subscribe to Server Send Events
|
40
|
+
*
|
41
|
+
* @param {import("svelte/store").Subscriber<object|null>} fn
|
42
|
+
*
|
43
|
+
* @returns {()=>void} unsubscribe
|
44
|
+
*/
|
45
|
+
subscribe(fn) {
|
46
|
+
this.subscribersCount.increment();
|
47
|
+
|
48
|
+
const unsubscribe = this.#store?.subscribe(fn);
|
49
|
+
|
50
|
+
this.#tryStartStream();
|
51
|
+
|
52
|
+
return () => {
|
53
|
+
this.subscribersCount.decrement();
|
54
|
+
unsubscribe?.();
|
55
|
+
};
|
56
|
+
}
|
57
|
+
|
58
|
+
async #tryStartStream() {
|
59
|
+
if (this.#stream || this.#starting) {
|
60
|
+
return;
|
61
|
+
}
|
62
|
+
|
63
|
+
try {
|
64
|
+
this.#starting = true;
|
65
|
+
|
66
|
+
const aborter = new AbortController();
|
67
|
+
const signal = aborter.signal;
|
68
|
+
|
69
|
+
const response = await fetch(this.#url, { signal });
|
70
|
+
|
71
|
+
const stream = (this.#stream = response.body);
|
72
|
+
|
73
|
+
this.#starting = false;
|
74
|
+
|
75
|
+
const reader =
|
76
|
+
// @ts-ignore
|
77
|
+
stream.pipeThrough(new TextDecoderStream()).getReader();
|
78
|
+
|
79
|
+
// const textDecoder = new TextDecoder('utf-8');
|
80
|
+
|
81
|
+
while (!signal.aborted) {
|
82
|
+
const { value, done } = await reader.read();
|
83
|
+
|
84
|
+
if (undefined === value) {
|
85
|
+
break;
|
86
|
+
}
|
87
|
+
|
88
|
+
const obj = JSON.parse(value);
|
89
|
+
// const obj = JSON.parse(textDecoder.decode(value));
|
90
|
+
|
91
|
+
if (!done) {
|
92
|
+
this.#store.set(obj);
|
93
|
+
}
|
94
|
+
|
95
|
+
// console.log({ ...obj, done });
|
96
|
+
|
97
|
+
if (done) {
|
98
|
+
break;
|
99
|
+
}
|
100
|
+
} // end for
|
101
|
+
} catch (e) {
|
102
|
+
this.#starting = false;
|
103
|
+
this.#stream = null;
|
104
|
+
|
105
|
+
if (e instanceof Error && e.name !== 'AbortError') {
|
106
|
+
throw e;
|
107
|
+
}
|
108
|
+
}
|
109
|
+
}
|
110
|
+
}
|
@@ -1,26 +1,26 @@
|
|
1
|
-
export default class TimestampSource {
|
2
|
-
/** @type {number|NodeJS.Timeout|undefined} */
|
3
|
-
#interval;
|
4
|
-
|
5
|
-
constructor() {}
|
6
|
-
|
7
|
-
/**
|
8
|
-
* Stream start function
|
9
|
-
*
|
10
|
-
* @param {ReadableStreamDefaultController} ctr
|
11
|
-
*/
|
12
|
-
start(ctr) {
|
13
|
-
ctr.enqueue(JSON.stringify({ now: Date.now() }));
|
14
|
-
|
15
|
-
this.#interval = setInterval(() => {
|
16
|
-
return ctr.enqueue(JSON.stringify({ now: Date.now() }));
|
17
|
-
}, 1000);
|
18
|
-
}
|
19
|
-
|
20
|
-
/**
|
21
|
-
* Stop generation of new stream output
|
22
|
-
*/
|
23
|
-
cancel() {
|
24
|
-
clearInterval(this.#interval);
|
25
|
-
}
|
26
|
-
}
|
1
|
+
export default class TimestampSource {
|
2
|
+
/** @type {number|NodeJS.Timeout|undefined} */
|
3
|
+
#interval;
|
4
|
+
|
5
|
+
constructor() {}
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Stream start function
|
9
|
+
*
|
10
|
+
* @param {ReadableStreamDefaultController} ctr
|
11
|
+
*/
|
12
|
+
start(ctr) {
|
13
|
+
ctr.enqueue(JSON.stringify({ now: Date.now() }));
|
14
|
+
|
15
|
+
this.#interval = setInterval(() => {
|
16
|
+
return ctr.enqueue(JSON.stringify({ now: Date.now() }));
|
17
|
+
}, 1000);
|
18
|
+
}
|
19
|
+
|
20
|
+
/**
|
21
|
+
* Stop generation of new stream output
|
22
|
+
*/
|
23
|
+
cancel() {
|
24
|
+
clearInterval(this.#interval);
|
25
|
+
}
|
26
|
+
}
|
@@ -1,3 +1,3 @@
|
|
1
|
-
export { default as LogTransformStream } from './LogTransformStream.js';
|
2
|
-
export { default as ServerEventsStore } from './ServerEventsStore.js';
|
3
|
-
export { default as TimeStampSource } from './TimeStampSource.js';
|
1
|
+
export { default as LogTransformStream } from './LogTransformStream.js';
|
2
|
+
export { default as ServerEventsStore } from './ServerEventsStore.js';
|
3
|
+
export { default as TimeStampSource } from './TimeStampSource.js';
|
@@ -1,58 +1,58 @@
|
|
1
|
-
import {
|
2
|
-
NetworkLoader,
|
3
|
-
ERROR_NOT_LOADED,
|
4
|
-
ERROR_TRANSFERRED
|
5
|
-
} from '../network-loader/index.js';
|
6
|
-
|
7
|
-
/**
|
8
|
-
* AudioLoader instance
|
9
|
-
* - Loads audio data from network into an ArrayBuffer
|
10
|
-
* - Loaded data can be transferred to an AudioBufferSourceNode
|
11
|
-
*/
|
12
|
-
export default class AudioLoader extends NetworkLoader {
|
13
|
-
/** @type {AudioBuffer|null} */
|
14
|
-
#audioBuffer = null;
|
15
|
-
|
16
|
-
/**
|
17
|
-
* Get an AudioBufferSourceNode instance
|
18
|
-
*
|
19
|
-
* @note AudioBufferSourceNodes can play only once, a new source node
|
20
|
-
* must be created otherwise
|
21
|
-
*
|
22
|
-
* @param {AudioContext} audioContext
|
23
|
-
*
|
24
|
-
* @returns {Promise<AudioBufferSourceNode>}
|
25
|
-
*/
|
26
|
-
async getAudioBufferSourceNode(audioContext) {
|
27
|
-
if (!this.#audioBuffer) {
|
28
|
-
this.#audioBuffer = await this.getAudioBuffer(audioContext);
|
29
|
-
}
|
30
|
-
|
31
|
-
return new AudioBufferSourceNode(audioContext, {
|
32
|
-
buffer: this.#audioBuffer
|
33
|
-
});
|
34
|
-
}
|
35
|
-
|
36
|
-
/**
|
37
|
-
* Gets data as AudioBuffer
|
38
|
-
* - Stores created AudioBuffer instance internally
|
39
|
-
* - Transfers data from internal ArrayBuffer, which will be detached
|
40
|
-
*
|
41
|
-
* @param {AudioContext} audioContext
|
42
|
-
*
|
43
|
-
* @returns {Promise<AudioBuffer>}
|
44
|
-
*/
|
45
|
-
async getAudioBuffer(audioContext) {
|
46
|
-
if (!this._buffer) {
|
47
|
-
throw new Error(ERROR_NOT_LOADED);
|
48
|
-
}
|
49
|
-
|
50
|
-
if (this._buffer.detached) {
|
51
|
-
throw new Error(ERROR_TRANSFERRED);
|
52
|
-
}
|
53
|
-
|
54
|
-
this.#audioBuffer = await audioContext.decodeAudioData(this._buffer);
|
55
|
-
|
56
|
-
return this.#audioBuffer;
|
57
|
-
}
|
58
|
-
} // end class
|
1
|
+
import {
|
2
|
+
NetworkLoader,
|
3
|
+
ERROR_NOT_LOADED,
|
4
|
+
ERROR_TRANSFERRED
|
5
|
+
} from '../network-loader/index.js';
|
6
|
+
|
7
|
+
/**
|
8
|
+
* AudioLoader instance
|
9
|
+
* - Loads audio data from network into an ArrayBuffer
|
10
|
+
* - Loaded data can be transferred to an AudioBufferSourceNode
|
11
|
+
*/
|
12
|
+
export default class AudioLoader extends NetworkLoader {
|
13
|
+
/** @type {AudioBuffer|null} */
|
14
|
+
#audioBuffer = null;
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Get an AudioBufferSourceNode instance
|
18
|
+
*
|
19
|
+
* @note AudioBufferSourceNodes can play only once, a new source node
|
20
|
+
* must be created otherwise
|
21
|
+
*
|
22
|
+
* @param {AudioContext} audioContext
|
23
|
+
*
|
24
|
+
* @returns {Promise<AudioBufferSourceNode>}
|
25
|
+
*/
|
26
|
+
async getAudioBufferSourceNode(audioContext) {
|
27
|
+
if (!this.#audioBuffer) {
|
28
|
+
this.#audioBuffer = await this.getAudioBuffer(audioContext);
|
29
|
+
}
|
30
|
+
|
31
|
+
return new AudioBufferSourceNode(audioContext, {
|
32
|
+
buffer: this.#audioBuffer
|
33
|
+
});
|
34
|
+
}
|
35
|
+
|
36
|
+
/**
|
37
|
+
* Gets data as AudioBuffer
|
38
|
+
* - Stores created AudioBuffer instance internally
|
39
|
+
* - Transfers data from internal ArrayBuffer, which will be detached
|
40
|
+
*
|
41
|
+
* @param {AudioContext} audioContext
|
42
|
+
*
|
43
|
+
* @returns {Promise<AudioBuffer>}
|
44
|
+
*/
|
45
|
+
async getAudioBuffer(audioContext) {
|
46
|
+
if (!this._buffer) {
|
47
|
+
throw new Error(ERROR_NOT_LOADED);
|
48
|
+
}
|
49
|
+
|
50
|
+
if (this._buffer.detached) {
|
51
|
+
throw new Error(ERROR_TRANSFERRED);
|
52
|
+
}
|
53
|
+
|
54
|
+
this.#audioBuffer = await audioContext.decodeAudioData(this._buffer);
|
55
|
+
|
56
|
+
return this.#audioBuffer;
|
57
|
+
}
|
58
|
+
} // end class
|