@hkdigital/lib-sveltekit 0.2.6 → 0.2.8
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 +135 -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 +158 -158
- package/dist/classes/logging/constants.js +18 -18
- package/dist/classes/logging/index.js +4 -4
- package/dist/classes/promise/HkPromise.js +377 -377
- package/dist/classes/promise/index.js +1 -1
- package/dist/classes/services/ServiceBase.js +409 -409
- package/dist/classes/services/ServiceManager.js +1114 -1114
- package/dist/classes/services/constants.js +12 -12
- package/dist/classes/services/index.js +5 -5
- 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.d.ts +0 -20
- package/dist/components/drag-drop/DragController.js +44 -113
- package/dist/components/drag-drop/DragDropContext.svelte +110 -103
- package/dist/components/drag-drop/Draggable.svelte +512 -492
- package/dist/components/drag-drop/Draggable.svelte.d.ts +8 -2
- package/dist/components/drag-drop/DropZoneArea.svelte +119 -119
- package/dist/components/drag-drop/DropZoneList.svelte +125 -125
- package/dist/components/drag-drop/{DropZone.svelte → Dropzone.svelte} +258 -258
- package/dist/components/drag-drop/drag-state.svelte.js +319 -323
- 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/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 +2 -2
- 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/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 +41 -41
- package/dist/themes/hkdev/components/boxes/game-box.css +12 -12
- 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 +6 -6
- package/dist/themes/hkdev/components/drag-drop/draggable.css +73 -73
- package/dist/themes/hkdev/components/drag-drop/drop-zone.css +48 -48
- package/dist/themes/hkdev/components/icons/icon-steeze.css +22 -22
- package/dist/themes/hkdev/components/inputs/text-input.css +104 -104
- package/dist/themes/hkdev/components/panels/panel.css +27 -27
- package/dist/themes/hkdev/components/rows/panel-grid-row.css +6 -6
- package/dist/themes/hkdev/components/rows/panel-row-2.css +7 -7
- package/dist/themes/hkdev/components.css +53 -53
- package/dist/themes/hkdev/debug.css +1 -1
- package/dist/themes/hkdev/global/layout.css +39 -39
- package/dist/themes/hkdev/global/on-colors.css +53 -53
- package/dist/themes/hkdev/globals.css +11 -11
- package/dist/themes/hkdev/responsive.css +12 -12
- package/dist/themes/hkdev/theme-ext.js +15 -15
- package/dist/themes/hkdev/theme.js +235 -235
- 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/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 +379 -379
- 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/typedef.js +93 -93
- package/dist/util/http/url.js +52 -52
- package/dist/util/image/index.js +86 -86
- package/dist/util/index.js +2 -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 +112 -112
- package/dist/components/layout/grid-layers/GridLayers.svelte__heightFrom__ +0 -372
- package/dist/util/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
@@ -1,12 +1,12 @@
|
|
1
|
-
|
2
|
-
export const CREATED = 'created';
|
3
|
-
export const INITIALIZING = 'initializing';
|
4
|
-
export const INITIALIZED = 'initialized';
|
5
|
-
export const STARTING = 'starting';
|
6
|
-
export const RUNNING = 'running';
|
7
|
-
export const STOPPING = 'stopping';
|
8
|
-
export const STOPPED = 'stopped';
|
9
|
-
export const DESTROYING = 'destroying';
|
10
|
-
export const DESTROYED = 'destroyed';
|
11
|
-
export const ERROR = 'error';
|
12
|
-
export const RECOVERING = 'recovering';
|
1
|
+
|
2
|
+
export const CREATED = 'created';
|
3
|
+
export const INITIALIZING = 'initializing';
|
4
|
+
export const INITIALIZED = 'initialized';
|
5
|
+
export const STARTING = 'starting';
|
6
|
+
export const RUNNING = 'running';
|
7
|
+
export const STOPPING = 'stopping';
|
8
|
+
export const STOPPED = 'stopped';
|
9
|
+
export const DESTROYING = 'destroying';
|
10
|
+
export const DESTROYED = 'destroyed';
|
11
|
+
export const ERROR = 'error';
|
12
|
+
export const RECOVERING = 'recovering';
|
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
export { default as ServiceBase } from './ServiceBase.js';
|
3
|
-
export { default as ServiceManager } from './ServiceManager.js';
|
4
|
-
|
5
|
-
export * from './constants.js';
|
1
|
+
|
2
|
+
export { default as ServiceBase } from './ServiceBase.js';
|
3
|
+
export { default as ServiceManager } from './ServiceManager.js';
|
4
|
+
|
5
|
+
export * from './constants.js';
|
@@ -1,107 +1,107 @@
|
|
1
|
-
import { writable, get } from 'svelte/store';
|
2
|
-
|
3
|
-
/**
|
4
|
-
* Class that can be used to add a `SubscribersCount` store to classes
|
5
|
-
* or other objects
|
6
|
-
*/
|
7
|
-
export default class SubscribersCount {
|
8
|
-
#count;
|
9
|
-
|
10
|
-
constructor() {
|
11
|
-
this.#count = writable(0);
|
12
|
-
}
|
13
|
-
|
14
|
-
increment() {
|
15
|
-
this.#count.update((value) => value + 1);
|
16
|
-
}
|
17
|
-
|
18
|
-
decrement() {
|
19
|
-
this.#count.update((value) => value - 1);
|
20
|
-
}
|
21
|
-
|
22
|
-
/**
|
23
|
-
* Subscribe to `SubscribersCount` store
|
24
|
-
*
|
25
|
-
* @param {(value:number)=>void} fn
|
26
|
-
*
|
27
|
-
* @returns {()=>void} unsubscribe
|
28
|
-
*/
|
29
|
-
subscribe(fn) {
|
30
|
-
return this.#count.subscribe(fn);
|
31
|
-
}
|
32
|
-
|
33
|
-
/**
|
34
|
-
* Subscribe to `SubscribersCount` store and receive an update once if the
|
35
|
-
* count is zero.
|
36
|
-
*
|
37
|
-
* @param {(value:number)=>void} fn
|
38
|
-
*
|
39
|
-
* @returns {()=>void} unsubscribe
|
40
|
-
*/
|
41
|
-
onceEmpty(fn) {
|
42
|
-
let unsubscribe = this.#count.subscribe((value) => {
|
43
|
-
if (value === 0) {
|
44
|
-
unsubscribe();
|
45
|
-
fn(value);
|
46
|
-
}
|
47
|
-
});
|
48
|
-
|
49
|
-
return unsubscribe;
|
50
|
-
}
|
51
|
-
|
52
|
-
/**
|
53
|
-
* Create a writable store with added 'subscribeCount' functionality
|
54
|
-
*/
|
55
|
-
static writable() {
|
56
|
-
const store = writable(...arguments);
|
57
|
-
|
58
|
-
return SubscribersCount.wrap(store);
|
59
|
-
}
|
60
|
-
|
61
|
-
/**
|
62
|
-
* Add subscriber count functionality to an existing store by wrapping
|
63
|
-
* the store with a Proxy
|
64
|
-
*
|
65
|
-
* @template T;
|
66
|
-
*
|
67
|
-
* @param {import('svelte/store').Writable<T>} store
|
68
|
-
*/
|
69
|
-
static wrap(store) {
|
70
|
-
// expect.store( store );
|
71
|
-
|
72
|
-
const counter = new SubscribersCount();
|
73
|
-
|
74
|
-
const handler = {
|
75
|
-
/**
|
76
|
-
* @param {any} target
|
77
|
-
* @param {string} prop
|
78
|
-
*/
|
79
|
-
get(target, prop) {
|
80
|
-
switch (prop) {
|
81
|
-
case 'subscribe': {
|
82
|
-
return /* subscribe */ function () {
|
83
|
-
counter.increment();
|
84
|
-
const unsubscribe = target[prop](...arguments);
|
85
|
-
|
86
|
-
return /* unsubscribe */ () => {
|
87
|
-
counter.decrement();
|
88
|
-
unsubscribe();
|
89
|
-
};
|
90
|
-
};
|
91
|
-
}
|
92
|
-
|
93
|
-
case 'value':
|
94
|
-
return get(store);
|
95
|
-
|
96
|
-
case 'subscribersCount':
|
97
|
-
return counter;
|
98
|
-
}
|
99
|
-
|
100
|
-
return Reflect.get(target, prop);
|
101
|
-
// return target[prop];
|
102
|
-
}
|
103
|
-
};
|
104
|
-
|
105
|
-
return new Proxy(store, handler);
|
106
|
-
}
|
107
|
-
}
|
1
|
+
import { writable, get } from 'svelte/store';
|
2
|
+
|
3
|
+
/**
|
4
|
+
* Class that can be used to add a `SubscribersCount` store to classes
|
5
|
+
* or other objects
|
6
|
+
*/
|
7
|
+
export default class SubscribersCount {
|
8
|
+
#count;
|
9
|
+
|
10
|
+
constructor() {
|
11
|
+
this.#count = writable(0);
|
12
|
+
}
|
13
|
+
|
14
|
+
increment() {
|
15
|
+
this.#count.update((value) => value + 1);
|
16
|
+
}
|
17
|
+
|
18
|
+
decrement() {
|
19
|
+
this.#count.update((value) => value - 1);
|
20
|
+
}
|
21
|
+
|
22
|
+
/**
|
23
|
+
* Subscribe to `SubscribersCount` store
|
24
|
+
*
|
25
|
+
* @param {(value:number)=>void} fn
|
26
|
+
*
|
27
|
+
* @returns {()=>void} unsubscribe
|
28
|
+
*/
|
29
|
+
subscribe(fn) {
|
30
|
+
return this.#count.subscribe(fn);
|
31
|
+
}
|
32
|
+
|
33
|
+
/**
|
34
|
+
* Subscribe to `SubscribersCount` store and receive an update once if the
|
35
|
+
* count is zero.
|
36
|
+
*
|
37
|
+
* @param {(value:number)=>void} fn
|
38
|
+
*
|
39
|
+
* @returns {()=>void} unsubscribe
|
40
|
+
*/
|
41
|
+
onceEmpty(fn) {
|
42
|
+
let unsubscribe = this.#count.subscribe((value) => {
|
43
|
+
if (value === 0) {
|
44
|
+
unsubscribe();
|
45
|
+
fn(value);
|
46
|
+
}
|
47
|
+
});
|
48
|
+
|
49
|
+
return unsubscribe;
|
50
|
+
}
|
51
|
+
|
52
|
+
/**
|
53
|
+
* Create a writable store with added 'subscribeCount' functionality
|
54
|
+
*/
|
55
|
+
static writable() {
|
56
|
+
const store = writable(...arguments);
|
57
|
+
|
58
|
+
return SubscribersCount.wrap(store);
|
59
|
+
}
|
60
|
+
|
61
|
+
/**
|
62
|
+
* Add subscriber count functionality to an existing store by wrapping
|
63
|
+
* the store with a Proxy
|
64
|
+
*
|
65
|
+
* @template T;
|
66
|
+
*
|
67
|
+
* @param {import('svelte/store').Writable<T>} store
|
68
|
+
*/
|
69
|
+
static wrap(store) {
|
70
|
+
// expect.store( store );
|
71
|
+
|
72
|
+
const counter = new SubscribersCount();
|
73
|
+
|
74
|
+
const handler = {
|
75
|
+
/**
|
76
|
+
* @param {any} target
|
77
|
+
* @param {string} prop
|
78
|
+
*/
|
79
|
+
get(target, prop) {
|
80
|
+
switch (prop) {
|
81
|
+
case 'subscribe': {
|
82
|
+
return /* subscribe */ function () {
|
83
|
+
counter.increment();
|
84
|
+
const unsubscribe = target[prop](...arguments);
|
85
|
+
|
86
|
+
return /* unsubscribe */ () => {
|
87
|
+
counter.decrement();
|
88
|
+
unsubscribe();
|
89
|
+
};
|
90
|
+
};
|
91
|
+
}
|
92
|
+
|
93
|
+
case 'value':
|
94
|
+
return get(store);
|
95
|
+
|
96
|
+
case 'subscribersCount':
|
97
|
+
return counter;
|
98
|
+
}
|
99
|
+
|
100
|
+
return Reflect.get(target, prop);
|
101
|
+
// return target[prop];
|
102
|
+
}
|
103
|
+
};
|
104
|
+
|
105
|
+
return new Proxy(store, handler);
|
106
|
+
}
|
107
|
+
}
|
@@ -1 +1 @@
|
|
1
|
-
export { default as SubscribersCount } from './SubscribersCount.js';
|
1
|
+
export { default as SubscribersCount } from './SubscribersCount.js';
|
@@ -1,19 +1,19 @@
|
|
1
|
-
export default class LogTransformStream extends TransformStream {
|
2
|
-
constructor() {
|
3
|
-
const transformer = {
|
4
|
-
/**
|
5
|
-
* Log the chunk and enqueue the unchanged chunk
|
6
|
-
*
|
7
|
-
* @param {any} chunk
|
8
|
-
* @param {any} controller
|
9
|
-
*/
|
10
|
-
transform: (chunk, controller) => {
|
11
|
-
console.log('log', chunk);
|
12
|
-
controller.enqueue(chunk);
|
13
|
-
}
|
14
|
-
};
|
15
|
-
|
16
|
-
super(transformer);
|
17
|
-
}
|
18
|
-
start() {}
|
19
|
-
}
|
1
|
+
export default class LogTransformStream extends TransformStream {
|
2
|
+
constructor() {
|
3
|
+
const transformer = {
|
4
|
+
/**
|
5
|
+
* Log the chunk and enqueue the unchanged chunk
|
6
|
+
*
|
7
|
+
* @param {any} chunk
|
8
|
+
* @param {any} controller
|
9
|
+
*/
|
10
|
+
transform: (chunk, controller) => {
|
11
|
+
console.log('log', chunk);
|
12
|
+
controller.enqueue(chunk);
|
13
|
+
}
|
14
|
+
};
|
15
|
+
|
16
|
+
super(transformer);
|
17
|
+
}
|
18
|
+
start() {}
|
19
|
+
}
|
@@ -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';
|