@hkdigital/lib-sveltekit 0.1.4 → 0.1.6
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 +127 -127
- 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/index.js +3 -3
- package/dist/classes/promise/HkPromise.js +377 -377
- package/dist/classes/promise/index.js +1 -1
- 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/{svkit → svelte}/audio/AudioLoader.svelte.js +58 -58
- package/dist/classes/{svkit → svelte}/audio/AudioScene.svelte.js +282 -282
- package/dist/classes/{svkit → svelte}/audio/mocks.js +35 -35
- package/dist/classes/{svkit → svelte}/final-state-machine/FiniteStateMachine.svelte.js +133 -133
- package/dist/classes/{svkit → svelte}/final-state-machine/index.js +1 -1
- package/dist/classes/{svkit → svelte}/image/ImageLoader.svelte.js +47 -47
- package/dist/classes/{svkit → svelte}/image/ImageScene.svelte.js +253 -253
- package/dist/classes/{svkit → svelte}/image/ImageVariantsLoader.svelte.js +152 -152
- package/dist/classes/{svkit → svelte}/image/index.js +4 -4
- package/dist/classes/{svkit → svelte}/image/mocks.js +35 -35
- package/dist/classes/{svkit → svelte}/image/typedef.js +8 -8
- package/dist/classes/{svkit → svelte}/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
- package/dist/classes/{svkit → svelte}/loading-state-machine/constants.js +16 -16
- package/dist/classes/{svkit → svelte}/loading-state-machine/index.js +3 -3
- package/dist/classes/{svkit → svelte}/network-loader/NetworkLoader.svelte.js +331 -331
- package/dist/classes/{svkit → svelte}/network-loader/constants.js +3 -3
- package/dist/classes/{svkit → svelte}/network-loader/index.js +3 -3
- package/dist/classes/{svkit → svelte}/network-loader/mocks.js +30 -30
- package/dist/classes/{svkit → svelte}/network-loader/typedef.js +8 -8
- package/dist/components/area/HkArea.svelte +49 -49
- package/dist/components/area/HkArea.svelte.d.ts +0 -14
- package/dist/components/area/HkGridArea.svelte +77 -77
- package/dist/components/area/HkGridArea.svelte.d.ts +0 -22
- package/dist/components/area/index.js +2 -2
- package/dist/components/boxes/game-box/GameBox.svelte +112 -112
- package/dist/components/boxes/game-box/GameBox.svelte.d.ts +0 -15
- package/dist/components/boxes/game-box/gamebox.util.js +83 -83
- package/dist/components/boxes/index.js +2 -2
- package/dist/components/boxes/virtual-viewport/VirtualViewport.svelte +199 -199
- package/dist/components/boxes/virtual-viewport/VirtualViewport.svelte.d.ts +0 -22
- package/dist/components/buttons/button/Button.svelte +75 -75
- package/dist/components/buttons/button/Button.svelte.d.ts +0 -21
- package/dist/components/buttons/button-text/TextButton.svelte +21 -21
- package/dist/components/buttons/button-text/TextButton.svelte.d.ts +0 -7
- package/dist/components/buttons/index.js +2 -2
- package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
- package/dist/components/hkdev/blocks/TextBlock.svelte.d.ts +0 -13
- package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
- package/dist/components/hkdev/buttons/CheckButton.svelte.d.ts +0 -18
- package/dist/components/icon/HkIcon.svelte +86 -86
- package/dist/components/icon/HkIcon.svelte.d.ts +0 -12
- package/dist/components/icon/HkTabIcon.svelte +116 -116
- package/dist/components/icon/HkTabIcon.svelte.d.ts +0 -21
- package/dist/components/icon/index.js +4 -4
- package/dist/components/icon/typedef.js +16 -16
- package/dist/components/image/ImageBox.svelte +208 -208
- package/dist/components/image/ImageBox.svelte.d.ts +2 -21
- package/dist/components/image/index.js +5 -5
- package/dist/components/image/typedef.js +32 -32
- 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 +226 -226
- package/dist/components/inputs/text-input/TextInput.svelte.d.ts +0 -28
- 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/HkAppLayout.state.svelte.js +25 -25
- package/dist/components/layout/HkAppLayout.svelte +251 -251
- package/dist/components/layout/HkAppLayout.svelte.d.ts +0 -11
- package/dist/components/layout/HkGridLayers.svelte +82 -82
- package/dist/components/layout/HkGridLayers.svelte.d.ts +0 -23
- package/dist/components/layout/index.js +9 -9
- package/dist/components/panels/index.js +1 -1
- package/dist/components/panels/plain-panel/PlainPanel.svelte +33 -33
- package/dist/components/panels/plain-panel/PlainPanel.svelte.d.ts +0 -12
- package/dist/components/rows/index.js +3 -3
- package/dist/components/rows/panel-grid-row/PanelGridRow.svelte +104 -104
- package/dist/components/rows/panel-grid-row/PanelGridRow.svelte.d.ts +0 -14
- package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
- package/dist/components/rows/panel-row-2/PanelRow2.svelte.d.ts +0 -14
- 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/HkTabBar.svelte.d.ts +0 -18
- 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/HkTabBarSelector.svelte.d.ts +0 -19
- package/dist/components/tab-bar/index.js +17 -17
- package/dist/components/tab-bar/typedef.js +8 -8
- package/dist/components/widgets/compare-left-right/CompareLeftRight.svelte +179 -179
- package/dist/components/widgets/compare-left-right/CompareLeftRight.svelte.d.ts +0 -10
- package/dist/components/widgets/compare-left-right/index.js +1 -1
- package/dist/components/widgets/scale-control/index.js +1 -1
- package/dist/config/imagetools-config.js +189 -189
- package/dist/config/imagetools.d.ts +71 -71
- package/dist/config/typedef.js +8 -8
- 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/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/tw-prose.postcss__ +259 -259
- package/dist/css/utilities.postcss +43 -43
- package/dist/{design-system → design}/design-config.js +73 -73
- package/dist/{design-system → design}/tailwind-theme-extend.d.ts +4 -4
- package/dist/{design-system → design}/tailwind-theme-extend.js +151 -151
- 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.postcss +40 -40
- package/dist/themes/hkdev/components/boxes/game-box.postcss +13 -13
- package/dist/themes/hkdev/components/buttons/button-text.postcss +34 -34
- package/dist/themes/hkdev/components/buttons/button.postcss +138 -138
- package/dist/themes/hkdev/components/buttons/skip-button.postcss +8 -8
- package/dist/themes/hkdev/components/inputs/text-input.postcss +108 -108
- package/dist/themes/hkdev/components/panels/plain-panel.postcss +46 -46
- package/dist/themes/hkdev/components/panels/speech-bubble.postcss +52 -52
- package/dist/themes/hkdev/components/rows/panel-grid-row.postcss +7 -7
- package/dist/themes/hkdev/components/rows/panel-row-2.postcss +9 -9
- package/dist/themes/hkdev/components.postcss +55 -55
- package/dist/themes/hkdev/debug.postcss +1 -1
- package/dist/themes/hkdev/global/layout.postcss +39 -39
- package/dist/themes/hkdev/global/on-colors.postcss +53 -53
- package/dist/themes/hkdev/global/text.postcss__ +34 -34
- package/dist/themes/hkdev/global/vars.postcss__ +7 -7
- package/dist/themes/hkdev/globals.postcss +11 -11
- package/dist/themes/hkdev/responsive.postcss +12 -12
- package/dist/themes/hkdev/theme-ext.js +15 -15
- package/dist/themes/hkdev/theme.js +227 -227
- package/dist/themes/index.js +1 -1
- package/dist/util/array/index.js +455 -455
- 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.d.ts +2 -2
- package/dist/util/design-system/css/clamp.js +66 -66
- package/dist/util/design-system/css/root-design-vars.js +100 -100
- package/dist/util/design-system/index.js +5 -5
- package/dist/util/design-system/layout/scaling.js +97 -97
- package/dist/util/design-system/tailwind.js +289 -289
- 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/http/errors.js +97 -97
- package/dist/util/http/headers.js +45 -45
- package/dist/util/http/http-request.js +273 -273
- package/dist/util/http/index.js +22 -22
- package/dist/util/http/json-request.js +143 -143
- package/dist/util/http/mocks.js +65 -65
- package/dist/util/http/response.js +228 -228
- 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/index.js +184 -184
- package/dist/util/svelte/index.js +2 -2
- package/dist/util/svelte/observe/index.js +49 -49
- package/dist/util/svelte/state-context/index.js +83 -83
- 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 +82 -82
- package/dist/util/time/index.js +339 -339
- 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 +99 -99
- package/dist/themes/hkdev/components/buttons/button.postcss__ +0 -40
- package/dist/themes/hkdev/components/buttons/button.postcss___ +0 -91
- /package/dist/classes/{svkit → svelte}/audio/AudioLoader.svelte.d.ts +0 -0
- /package/dist/classes/{svkit → svelte}/audio/AudioScene.svelte.d.ts +0 -0
- /package/dist/classes/{svkit → svelte}/audio/mocks.d.ts +0 -0
- /package/dist/classes/{svkit → svelte}/final-state-machine/FiniteStateMachine.svelte.d.ts +0 -0
- /package/dist/classes/{svkit → svelte}/final-state-machine/index.d.ts +0 -0
- /package/dist/classes/{svkit → svelte}/image/ImageLoader.svelte.d.ts +0 -0
- /package/dist/classes/{svkit → svelte}/image/ImageScene.svelte.d.ts +0 -0
- /package/dist/classes/{svkit → svelte}/image/ImageVariantsLoader.svelte.d.ts +0 -0
- /package/dist/classes/{svkit → svelte}/image/index.d.ts +0 -0
- /package/dist/classes/{svkit → svelte}/image/mocks.d.ts +0 -0
- /package/dist/classes/{svkit → svelte}/image/typedef.d.ts +0 -0
- /package/dist/classes/{svkit → svelte}/loading-state-machine/LoadingStateMachine.svelte.d.ts +0 -0
- /package/dist/classes/{svkit → svelte}/loading-state-machine/constants.d.ts +0 -0
- /package/dist/classes/{svkit → svelte}/loading-state-machine/index.d.ts +0 -0
- /package/dist/classes/{svkit → svelte}/network-loader/NetworkLoader.svelte.d.ts +0 -0
- /package/dist/classes/{svkit → svelte}/network-loader/constants.d.ts +0 -0
- /package/dist/classes/{svkit → svelte}/network-loader/index.d.ts +0 -0
- /package/dist/classes/{svkit → svelte}/network-loader/mocks.d.ts +0 -0
- /package/dist/classes/{svkit → svelte}/network-loader/typedef.d.ts +0 -0
- /package/dist/{design-system → design}/design-config.d.ts +0 -0
@@ -1,234 +1,234 @@
|
|
1
|
-
/* ------------------------------------------------------------------ Imports */
|
2
|
-
|
3
|
-
import * as expect from '../expect/index.js';
|
4
|
-
import { smallestFirst, largestFirst } from '../compare/index.js';
|
5
|
-
|
6
|
-
import IterableTree from '../../classes/data/IterableTree.js';
|
7
|
-
|
8
|
-
/* ------------------------------------------------------------------ Exports */
|
9
|
-
|
10
|
-
/**
|
11
|
-
* Filter all iterated elements
|
12
|
-
*
|
13
|
-
* @param {Iterable} iterable
|
14
|
-
* @param {function} filterFn
|
15
|
-
*
|
16
|
-
* @returns {Generator} generator that produces items that pass the filter
|
17
|
-
*/
|
18
|
-
export function* filter(iterable, filterFn) {
|
19
|
-
expect.iterable(iterable);
|
20
|
-
expect.function(filterFn);
|
21
|
-
|
22
|
-
for (const value of iterable) {
|
23
|
-
if (filterFn(value)) {
|
24
|
-
yield value;
|
25
|
-
}
|
26
|
-
}
|
27
|
-
}
|
28
|
-
|
29
|
-
// ---------------------------------------------------------------------- Method
|
30
|
-
|
31
|
-
/**
|
32
|
-
* Map all iterated items
|
33
|
-
* - Outputs transformed items
|
34
|
-
*
|
35
|
-
* @param {Iterable} iterable
|
36
|
-
* @param {function} transformFn
|
37
|
-
*
|
38
|
-
* @returns {Generator} generator that produces transformed items
|
39
|
-
*/
|
40
|
-
export function* map(iterable, transformFn) {
|
41
|
-
expect.iterable(iterable);
|
42
|
-
expect.function(transformFn);
|
43
|
-
|
44
|
-
for (const value of iterable) {
|
45
|
-
yield transformFn(value);
|
46
|
-
}
|
47
|
-
}
|
48
|
-
|
49
|
-
// ---------------------------------------------------------------------- Method
|
50
|
-
|
51
|
-
/**
|
52
|
-
* Get an Iterator object that can be used to iterate over all
|
53
|
-
* [ path, value ] entries in the object
|
54
|
-
*
|
55
|
-
* @param {Object} obj - Object to iterate
|
56
|
-
*
|
57
|
-
* @param {Object} [options] - Iteration options
|
58
|
-
*
|
59
|
-
* @param {boolean} [options.walkArrays=false]
|
60
|
-
* If set to true, the iterator will also iterate through Array objects
|
61
|
-
*
|
62
|
-
* @param {object} [options.expandPathKeys=false]
|
63
|
-
* If true, keys in the root object like "some.path.to" will be interpreted
|
64
|
-
* as paths in the object
|
65
|
-
*
|
66
|
-
* @param {object} [options.outputIntermediateNodes=false]
|
67
|
-
* If true, intermediate object nodes (not leaves) will be outputted too
|
68
|
-
*
|
69
|
-
* @param {object} [options.ignoreEmptyObjectLeaves=false]
|
70
|
-
* If true, no output will be generated for empty objects at the leaves of
|
71
|
-
* the object tree
|
72
|
-
*
|
73
|
-
* @return {Iterator} iterator object
|
74
|
-
*/
|
75
|
-
export function iterateObjectEntries(obj, options = {}) {
|
76
|
-
let objectIterator;
|
77
|
-
|
78
|
-
const depthFirst = undefined === options.depthFirst ? true : options.depthFirst;
|
79
|
-
|
80
|
-
options = Object.assign({}, options);
|
81
|
-
|
82
|
-
delete options.depthFirst;
|
83
|
-
|
84
|
-
if (depthFirst) {
|
85
|
-
objectIterator = new IterableTree(obj, options);
|
86
|
-
} else {
|
87
|
-
throw new Error('NOT IMPLEMENTED YET');
|
88
|
-
|
89
|
-
// objectIterator
|
90
|
-
// = new hk.iterate._BreadthFirstIterableTree( obj, options );
|
91
|
-
}
|
92
|
-
|
93
|
-
return objectIterator.entries(); /* entry = [ arrPath, value ] */
|
94
|
-
}
|
95
|
-
|
96
|
-
// ---------------------------------------------------------------------- Method
|
97
|
-
|
98
|
-
/**
|
99
|
-
* Get an Iterator object that can be used to iterate over all paths in
|
100
|
-
* the object
|
101
|
-
*
|
102
|
-
* @param {Object} obj - Object to iterate
|
103
|
-
*
|
104
|
-
* @param {Object} [options] - Iteration options
|
105
|
-
*
|
106
|
-
* @param {boolean} [options.walkArrays=false]
|
107
|
-
* If set to true, the iterator will also iterate through Array objects
|
108
|
-
*
|
109
|
-
* @param {object} [options.expandPathKeys=false]
|
110
|
-
* If true, keys in the root object like "some.path.to" will be interpreted
|
111
|
-
* as paths in the object
|
112
|
-
*
|
113
|
-
* @param {object} [options.outputIntermediateNodes=false]
|
114
|
-
* If true, intermediate object nodes (not leaves) will be outputted too
|
115
|
-
*
|
116
|
-
* @param {object} [options.ignoreEmptyObjectLeaves=false]
|
117
|
-
* If true, no output will be generated for empty objects at the leaves of
|
118
|
-
* the object tree
|
119
|
-
*
|
120
|
-
* @return {Iterator} iterator object
|
121
|
-
*/
|
122
|
-
export function iterateObjectPaths(obj, options = {}) {
|
123
|
-
let objectIterator;
|
124
|
-
|
125
|
-
const depthFirst = undefined === options.depthFirst ? true : options.depthFirst;
|
126
|
-
|
127
|
-
options = Object.assign({}, options);
|
128
|
-
|
129
|
-
delete options.depthFirst;
|
130
|
-
|
131
|
-
if (depthFirst) {
|
132
|
-
objectIterator = new IterableTree(obj, options);
|
133
|
-
} else {
|
134
|
-
throw new Error('NOT IMPLEMENTED YET');
|
135
|
-
|
136
|
-
// objectIterator
|
137
|
-
// = new hk.iterate._BreadthFirstIterableTree( obj, options );
|
138
|
-
}
|
139
|
-
|
140
|
-
return objectIterator.paths();
|
141
|
-
}
|
142
|
-
|
143
|
-
// ---------------------------------------------------------------------- Method
|
144
|
-
|
145
|
-
/**
|
146
|
-
* Get an Iterator object that can be used to iterate over all values in
|
147
|
-
* the object (at the leaves of the object tree)
|
148
|
-
*
|
149
|
-
* @param {Object} obj - Object to iterate
|
150
|
-
*
|
151
|
-
* @param {Object} [options] - Iteration options
|
152
|
-
*
|
153
|
-
* @param {boolean} [options.walkArrays=false]
|
154
|
-
* If set to true, the iterator will also iterate through Array objects
|
155
|
-
*
|
156
|
-
* @param {object} [options.expandPathKeys=false]
|
157
|
-
* If true, keys in the root object like "some.path.to" will be interpreted
|
158
|
-
* as paths in the object
|
159
|
-
*
|
160
|
-
* @param {object} [options.outputIntermediateNodes=false]
|
161
|
-
* If true, intermediate object nodes (not leaves) will be outputted too
|
162
|
-
*
|
163
|
-
* @param {object} [options.ignoreEmptyObjectLeaves=false]
|
164
|
-
* If true, no output will be generated for empty objects at the leaves of
|
165
|
-
* the object tree
|
166
|
-
*
|
167
|
-
* @return {Iterator} iterator object
|
168
|
-
*/
|
169
|
-
export function iterateObjectValues(obj, options) {
|
170
|
-
const objectIterator = new IterableTree(obj, options);
|
171
|
-
|
172
|
-
return objectIterator.values();
|
173
|
-
}
|
174
|
-
|
175
|
-
// ---------------------------------------------------------------------- Method
|
176
|
-
|
177
|
-
/**
|
178
|
-
* Get a list of objects returned by an iterator in sorted order
|
179
|
-
*
|
180
|
-
* --
|
181
|
-
*
|
182
|
-
* @note Sorting requires that all values are evaluated, so all items must be
|
183
|
-
* iterated
|
184
|
-
*
|
185
|
-
* --
|
186
|
-
*
|
187
|
-
* @param {Iterable} it - Iterable items
|
188
|
-
*
|
189
|
-
* @param {function} getValueFn
|
190
|
-
* Function that gets the value from the iterated objects
|
191
|
-
*
|
192
|
-
* @param {boolean} [reversed=false]
|
193
|
-
* Sort in reversed order
|
194
|
-
*
|
195
|
-
*
|
196
|
-
* @returns {array} objects outputted in sorted order
|
197
|
-
*/
|
198
|
-
export async function sortObjects({ it, getValueFn, reversed = false }) {
|
199
|
-
expect.iterable(it);
|
200
|
-
expect.function(getValueFn);
|
201
|
-
|
202
|
-
const allItems = [];
|
203
|
-
const valuesByItem = new WeakMap();
|
204
|
-
|
205
|
-
// -- Gather all items and sort values in arrays
|
206
|
-
|
207
|
-
for (const item of it) {
|
208
|
-
allItems.push(item);
|
209
|
-
valuesByItem.set(item, getValueFn(item));
|
210
|
-
}
|
211
|
-
|
212
|
-
// console.log( { sortValues } );
|
213
|
-
|
214
|
-
// -- Sort all items using sortValues
|
215
|
-
|
216
|
-
let compareFn;
|
217
|
-
|
218
|
-
if (!reversed) {
|
219
|
-
compareFn = smallestFirst;
|
220
|
-
} else {
|
221
|
-
compareFn = largestFirst;
|
222
|
-
}
|
223
|
-
|
224
|
-
allItems.sort((itemA, itemB) => {
|
225
|
-
const valueA = valuesByItem.get(itemA);
|
226
|
-
const valueB = valuesByItem.get(itemB);
|
227
|
-
|
228
|
-
return compareFn(valueA, valueB);
|
229
|
-
});
|
230
|
-
|
231
|
-
// -- Return result
|
232
|
-
|
233
|
-
return allItems;
|
234
|
-
}
|
1
|
+
/* ------------------------------------------------------------------ Imports */
|
2
|
+
|
3
|
+
import * as expect from '../expect/index.js';
|
4
|
+
import { smallestFirst, largestFirst } from '../compare/index.js';
|
5
|
+
|
6
|
+
import IterableTree from '../../classes/data/IterableTree.js';
|
7
|
+
|
8
|
+
/* ------------------------------------------------------------------ Exports */
|
9
|
+
|
10
|
+
/**
|
11
|
+
* Filter all iterated elements
|
12
|
+
*
|
13
|
+
* @param {Iterable} iterable
|
14
|
+
* @param {function} filterFn
|
15
|
+
*
|
16
|
+
* @returns {Generator} generator that produces items that pass the filter
|
17
|
+
*/
|
18
|
+
export function* filter(iterable, filterFn) {
|
19
|
+
expect.iterable(iterable);
|
20
|
+
expect.function(filterFn);
|
21
|
+
|
22
|
+
for (const value of iterable) {
|
23
|
+
if (filterFn(value)) {
|
24
|
+
yield value;
|
25
|
+
}
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
// ---------------------------------------------------------------------- Method
|
30
|
+
|
31
|
+
/**
|
32
|
+
* Map all iterated items
|
33
|
+
* - Outputs transformed items
|
34
|
+
*
|
35
|
+
* @param {Iterable} iterable
|
36
|
+
* @param {function} transformFn
|
37
|
+
*
|
38
|
+
* @returns {Generator} generator that produces transformed items
|
39
|
+
*/
|
40
|
+
export function* map(iterable, transformFn) {
|
41
|
+
expect.iterable(iterable);
|
42
|
+
expect.function(transformFn);
|
43
|
+
|
44
|
+
for (const value of iterable) {
|
45
|
+
yield transformFn(value);
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
// ---------------------------------------------------------------------- Method
|
50
|
+
|
51
|
+
/**
|
52
|
+
* Get an Iterator object that can be used to iterate over all
|
53
|
+
* [ path, value ] entries in the object
|
54
|
+
*
|
55
|
+
* @param {Object} obj - Object to iterate
|
56
|
+
*
|
57
|
+
* @param {Object} [options] - Iteration options
|
58
|
+
*
|
59
|
+
* @param {boolean} [options.walkArrays=false]
|
60
|
+
* If set to true, the iterator will also iterate through Array objects
|
61
|
+
*
|
62
|
+
* @param {object} [options.expandPathKeys=false]
|
63
|
+
* If true, keys in the root object like "some.path.to" will be interpreted
|
64
|
+
* as paths in the object
|
65
|
+
*
|
66
|
+
* @param {object} [options.outputIntermediateNodes=false]
|
67
|
+
* If true, intermediate object nodes (not leaves) will be outputted too
|
68
|
+
*
|
69
|
+
* @param {object} [options.ignoreEmptyObjectLeaves=false]
|
70
|
+
* If true, no output will be generated for empty objects at the leaves of
|
71
|
+
* the object tree
|
72
|
+
*
|
73
|
+
* @return {Iterator} iterator object
|
74
|
+
*/
|
75
|
+
export function iterateObjectEntries(obj, options = {}) {
|
76
|
+
let objectIterator;
|
77
|
+
|
78
|
+
const depthFirst = undefined === options.depthFirst ? true : options.depthFirst;
|
79
|
+
|
80
|
+
options = Object.assign({}, options);
|
81
|
+
|
82
|
+
delete options.depthFirst;
|
83
|
+
|
84
|
+
if (depthFirst) {
|
85
|
+
objectIterator = new IterableTree(obj, options);
|
86
|
+
} else {
|
87
|
+
throw new Error('NOT IMPLEMENTED YET');
|
88
|
+
|
89
|
+
// objectIterator
|
90
|
+
// = new hk.iterate._BreadthFirstIterableTree( obj, options );
|
91
|
+
}
|
92
|
+
|
93
|
+
return objectIterator.entries(); /* entry = [ arrPath, value ] */
|
94
|
+
}
|
95
|
+
|
96
|
+
// ---------------------------------------------------------------------- Method
|
97
|
+
|
98
|
+
/**
|
99
|
+
* Get an Iterator object that can be used to iterate over all paths in
|
100
|
+
* the object
|
101
|
+
*
|
102
|
+
* @param {Object} obj - Object to iterate
|
103
|
+
*
|
104
|
+
* @param {Object} [options] - Iteration options
|
105
|
+
*
|
106
|
+
* @param {boolean} [options.walkArrays=false]
|
107
|
+
* If set to true, the iterator will also iterate through Array objects
|
108
|
+
*
|
109
|
+
* @param {object} [options.expandPathKeys=false]
|
110
|
+
* If true, keys in the root object like "some.path.to" will be interpreted
|
111
|
+
* as paths in the object
|
112
|
+
*
|
113
|
+
* @param {object} [options.outputIntermediateNodes=false]
|
114
|
+
* If true, intermediate object nodes (not leaves) will be outputted too
|
115
|
+
*
|
116
|
+
* @param {object} [options.ignoreEmptyObjectLeaves=false]
|
117
|
+
* If true, no output will be generated for empty objects at the leaves of
|
118
|
+
* the object tree
|
119
|
+
*
|
120
|
+
* @return {Iterator} iterator object
|
121
|
+
*/
|
122
|
+
export function iterateObjectPaths(obj, options = {}) {
|
123
|
+
let objectIterator;
|
124
|
+
|
125
|
+
const depthFirst = undefined === options.depthFirst ? true : options.depthFirst;
|
126
|
+
|
127
|
+
options = Object.assign({}, options);
|
128
|
+
|
129
|
+
delete options.depthFirst;
|
130
|
+
|
131
|
+
if (depthFirst) {
|
132
|
+
objectIterator = new IterableTree(obj, options);
|
133
|
+
} else {
|
134
|
+
throw new Error('NOT IMPLEMENTED YET');
|
135
|
+
|
136
|
+
// objectIterator
|
137
|
+
// = new hk.iterate._BreadthFirstIterableTree( obj, options );
|
138
|
+
}
|
139
|
+
|
140
|
+
return objectIterator.paths();
|
141
|
+
}
|
142
|
+
|
143
|
+
// ---------------------------------------------------------------------- Method
|
144
|
+
|
145
|
+
/**
|
146
|
+
* Get an Iterator object that can be used to iterate over all values in
|
147
|
+
* the object (at the leaves of the object tree)
|
148
|
+
*
|
149
|
+
* @param {Object} obj - Object to iterate
|
150
|
+
*
|
151
|
+
* @param {Object} [options] - Iteration options
|
152
|
+
*
|
153
|
+
* @param {boolean} [options.walkArrays=false]
|
154
|
+
* If set to true, the iterator will also iterate through Array objects
|
155
|
+
*
|
156
|
+
* @param {object} [options.expandPathKeys=false]
|
157
|
+
* If true, keys in the root object like "some.path.to" will be interpreted
|
158
|
+
* as paths in the object
|
159
|
+
*
|
160
|
+
* @param {object} [options.outputIntermediateNodes=false]
|
161
|
+
* If true, intermediate object nodes (not leaves) will be outputted too
|
162
|
+
*
|
163
|
+
* @param {object} [options.ignoreEmptyObjectLeaves=false]
|
164
|
+
* If true, no output will be generated for empty objects at the leaves of
|
165
|
+
* the object tree
|
166
|
+
*
|
167
|
+
* @return {Iterator} iterator object
|
168
|
+
*/
|
169
|
+
export function iterateObjectValues(obj, options) {
|
170
|
+
const objectIterator = new IterableTree(obj, options);
|
171
|
+
|
172
|
+
return objectIterator.values();
|
173
|
+
}
|
174
|
+
|
175
|
+
// ---------------------------------------------------------------------- Method
|
176
|
+
|
177
|
+
/**
|
178
|
+
* Get a list of objects returned by an iterator in sorted order
|
179
|
+
*
|
180
|
+
* --
|
181
|
+
*
|
182
|
+
* @note Sorting requires that all values are evaluated, so all items must be
|
183
|
+
* iterated
|
184
|
+
*
|
185
|
+
* --
|
186
|
+
*
|
187
|
+
* @param {Iterable} it - Iterable items
|
188
|
+
*
|
189
|
+
* @param {function} getValueFn
|
190
|
+
* Function that gets the value from the iterated objects
|
191
|
+
*
|
192
|
+
* @param {boolean} [reversed=false]
|
193
|
+
* Sort in reversed order
|
194
|
+
*
|
195
|
+
*
|
196
|
+
* @returns {array} objects outputted in sorted order
|
197
|
+
*/
|
198
|
+
export async function sortObjects({ it, getValueFn, reversed = false }) {
|
199
|
+
expect.iterable(it);
|
200
|
+
expect.function(getValueFn);
|
201
|
+
|
202
|
+
const allItems = [];
|
203
|
+
const valuesByItem = new WeakMap();
|
204
|
+
|
205
|
+
// -- Gather all items and sort values in arrays
|
206
|
+
|
207
|
+
for (const item of it) {
|
208
|
+
allItems.push(item);
|
209
|
+
valuesByItem.set(item, getValueFn(item));
|
210
|
+
}
|
211
|
+
|
212
|
+
// console.log( { sortValues } );
|
213
|
+
|
214
|
+
// -- Sort all items using sortValues
|
215
|
+
|
216
|
+
let compareFn;
|
217
|
+
|
218
|
+
if (!reversed) {
|
219
|
+
compareFn = smallestFirst;
|
220
|
+
} else {
|
221
|
+
compareFn = largestFirst;
|
222
|
+
}
|
223
|
+
|
224
|
+
allItems.sort((itemA, itemB) => {
|
225
|
+
const valueA = valuesByItem.get(itemA);
|
226
|
+
const valueB = valuesByItem.get(itemB);
|
227
|
+
|
228
|
+
return compareFn(valueA, valueB);
|
229
|
+
});
|
230
|
+
|
231
|
+
// -- Return result
|
232
|
+
|
233
|
+
return allItems;
|
234
|
+
}
|