@hkdigital/lib-sveltekit 0.1.5 → 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/svelte/audio/AudioLoader.svelte.js +58 -58
- package/dist/classes/svelte/audio/AudioScene.svelte.js +282 -282
- package/dist/classes/svelte/audio/mocks.js +35 -35
- package/dist/classes/svelte/final-state-machine/FiniteStateMachine.svelte.js +133 -133
- package/dist/classes/svelte/final-state-machine/index.js +1 -1
- package/dist/classes/svelte/image/ImageLoader.svelte.js +47 -47
- package/dist/classes/svelte/image/ImageScene.svelte.js +253 -253
- 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/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 +331 -331
- 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/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 +0 -19
- 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/design-config.js +73 -73
- package/dist/design/tailwind-theme-extend.d.ts +4 -4
- package/dist/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/util/image/index.js
CHANGED
@@ -1,86 +1,86 @@
|
|
1
|
-
/**
|
2
|
-
* Returns the unchanged image meta object or the last item of
|
3
|
-
* an array of ImageMeta objects. This is assumed to be a list
|
4
|
-
* of sorted responsive image formats, so it should be the
|
5
|
-
* largest image.
|
6
|
-
*
|
7
|
-
* @param {ImageMeta|ImageMeta[]} imageMeta
|
8
|
-
*/
|
9
|
-
export function toSingleImageMeta(imageMeta) {
|
10
|
-
if (Array.isArray(imageMeta)) {
|
11
|
-
if (!imageMeta.length) {
|
12
|
-
throw new Error('List of ImageMeta objects is empty');
|
13
|
-
}
|
14
|
-
imageMeta = imageMeta[imageMeta.length - 1];
|
15
|
-
}
|
16
|
-
|
17
|
-
if (typeof imageMeta === 'object') {
|
18
|
-
return imageMeta;
|
19
|
-
} else if (!imageMeta) {
|
20
|
-
throw new Error('Missing [imageMeta]');
|
21
|
-
}
|
22
|
-
|
23
|
-
throw new Error('Invalid value for parameter [imageMeta]');
|
24
|
-
}
|
25
|
-
|
26
|
-
/**
|
27
|
-
* Calculate effective width based on container dimensions and fit mode
|
28
|
-
*
|
29
|
-
* @param {object} params
|
30
|
-
* @param {number} [params.containerWidth] Container width in pixels
|
31
|
-
* @param {number} [params.containerHeight] Container height in pixels
|
32
|
-
* @param {number} params.imageAspectRatio Original image aspect ratio (width/height)
|
33
|
-
* @param {'cover'|'contain'|'fill'} [params.fit='contain'] Fit mode
|
34
|
-
* @returns {number} Effective width needed
|
35
|
-
*/
|
36
|
-
export function calculateEffectiveWidth({
|
37
|
-
containerWidth,
|
38
|
-
containerHeight,
|
39
|
-
imageAspectRatio,
|
40
|
-
fit = 'contain'
|
41
|
-
}) {
|
42
|
-
if (containerWidth && !containerHeight) {
|
43
|
-
// If only width is provided, use it
|
44
|
-
|
45
|
-
return containerWidth;
|
46
|
-
}
|
47
|
-
|
48
|
-
if (!containerWidth && containerHeight) {
|
49
|
-
// If only height is provided, calculate width based on aspect ratio
|
50
|
-
|
51
|
-
return containerHeight * imageAspectRatio;
|
52
|
-
}
|
53
|
-
|
54
|
-
if (containerWidth && containerHeight) {
|
55
|
-
// If both dimensions are provided, calculate based on fit mode
|
56
|
-
|
57
|
-
const containerAspectRatio = containerWidth / containerHeight;
|
58
|
-
|
59
|
-
switch (fit) {
|
60
|
-
case 'fill':
|
61
|
-
return containerWidth;
|
62
|
-
|
63
|
-
case 'contain':
|
64
|
-
if (containerAspectRatio > imageAspectRatio) {
|
65
|
-
// Height constrained, scale width accordingly
|
66
|
-
|
67
|
-
return containerHeight * imageAspectRatio;
|
68
|
-
}
|
69
|
-
return containerWidth;
|
70
|
-
|
71
|
-
case 'cover':
|
72
|
-
if (containerAspectRatio < imageAspectRatio) {
|
73
|
-
// Height constrained, scale width accordingly
|
74
|
-
|
75
|
-
return containerHeight * imageAspectRatio;
|
76
|
-
}
|
77
|
-
return containerWidth;
|
78
|
-
|
79
|
-
default:
|
80
|
-
return containerWidth;
|
81
|
-
}
|
82
|
-
}
|
83
|
-
|
84
|
-
// Fallback if neither dimension is provided
|
85
|
-
throw new Error('Either containerWidth or containerHeight must be provided');
|
86
|
-
}
|
1
|
+
/**
|
2
|
+
* Returns the unchanged image meta object or the last item of
|
3
|
+
* an array of ImageMeta objects. This is assumed to be a list
|
4
|
+
* of sorted responsive image formats, so it should be the
|
5
|
+
* largest image.
|
6
|
+
*
|
7
|
+
* @param {ImageMeta|ImageMeta[]} imageMeta
|
8
|
+
*/
|
9
|
+
export function toSingleImageMeta(imageMeta) {
|
10
|
+
if (Array.isArray(imageMeta)) {
|
11
|
+
if (!imageMeta.length) {
|
12
|
+
throw new Error('List of ImageMeta objects is empty');
|
13
|
+
}
|
14
|
+
imageMeta = imageMeta[imageMeta.length - 1];
|
15
|
+
}
|
16
|
+
|
17
|
+
if (typeof imageMeta === 'object') {
|
18
|
+
return imageMeta;
|
19
|
+
} else if (!imageMeta) {
|
20
|
+
throw new Error('Missing [imageMeta]');
|
21
|
+
}
|
22
|
+
|
23
|
+
throw new Error('Invalid value for parameter [imageMeta]');
|
24
|
+
}
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Calculate effective width based on container dimensions and fit mode
|
28
|
+
*
|
29
|
+
* @param {object} params
|
30
|
+
* @param {number} [params.containerWidth] Container width in pixels
|
31
|
+
* @param {number} [params.containerHeight] Container height in pixels
|
32
|
+
* @param {number} params.imageAspectRatio Original image aspect ratio (width/height)
|
33
|
+
* @param {'cover'|'contain'|'fill'} [params.fit='contain'] Fit mode
|
34
|
+
* @returns {number} Effective width needed
|
35
|
+
*/
|
36
|
+
export function calculateEffectiveWidth({
|
37
|
+
containerWidth,
|
38
|
+
containerHeight,
|
39
|
+
imageAspectRatio,
|
40
|
+
fit = 'contain'
|
41
|
+
}) {
|
42
|
+
if (containerWidth && !containerHeight) {
|
43
|
+
// If only width is provided, use it
|
44
|
+
|
45
|
+
return containerWidth;
|
46
|
+
}
|
47
|
+
|
48
|
+
if (!containerWidth && containerHeight) {
|
49
|
+
// If only height is provided, calculate width based on aspect ratio
|
50
|
+
|
51
|
+
return containerHeight * imageAspectRatio;
|
52
|
+
}
|
53
|
+
|
54
|
+
if (containerWidth && containerHeight) {
|
55
|
+
// If both dimensions are provided, calculate based on fit mode
|
56
|
+
|
57
|
+
const containerAspectRatio = containerWidth / containerHeight;
|
58
|
+
|
59
|
+
switch (fit) {
|
60
|
+
case 'fill':
|
61
|
+
return containerWidth;
|
62
|
+
|
63
|
+
case 'contain':
|
64
|
+
if (containerAspectRatio > imageAspectRatio) {
|
65
|
+
// Height constrained, scale width accordingly
|
66
|
+
|
67
|
+
return containerHeight * imageAspectRatio;
|
68
|
+
}
|
69
|
+
return containerWidth;
|
70
|
+
|
71
|
+
case 'cover':
|
72
|
+
if (containerAspectRatio < imageAspectRatio) {
|
73
|
+
// Height constrained, scale width accordingly
|
74
|
+
|
75
|
+
return containerHeight * imageAspectRatio;
|
76
|
+
}
|
77
|
+
return containerWidth;
|
78
|
+
|
79
|
+
default:
|
80
|
+
return containerWidth;
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
84
|
+
// Fallback if neither dimension is provided
|
85
|
+
throw new Error('Either containerWidth or containerHeight must be provided');
|
86
|
+
}
|
package/dist/util/index.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export * as expect from './expect/index.js';
|
2
|
-
export * as singleton from './singleton/index.js';
|
1
|
+
export * as expect from './expect/index.js';
|
2
|
+
export * as singleton from './singleton/index.js';
|
package/dist/util/is/index.js
CHANGED
@@ -1,140 +1,140 @@
|
|
1
|
-
/** Internals */
|
2
|
-
|
3
|
-
//
|
4
|
-
// @see https://developer.mozilla.org/
|
5
|
-
// en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncFunction
|
6
|
-
//
|
7
|
-
const AsyncFunction = Object.getPrototypeOf(async () => {}).constructor;
|
8
|
-
const objectToString = Object.prototype.toString;
|
9
|
-
|
10
|
-
/** Exports */
|
11
|
-
|
12
|
-
/**
|
13
|
-
* Check if a value looks like an array
|
14
|
-
*
|
15
|
-
* @param {any} item - Item to check
|
16
|
-
*
|
17
|
-
* @return {boolean} true if the value looks like an array
|
18
|
-
*/
|
19
|
-
export function isArrayLike(item) {
|
20
|
-
if (!(item instanceof Object)) {
|
21
|
-
return false;
|
22
|
-
}
|
23
|
-
|
24
|
-
if ('length' in item) {
|
25
|
-
return true;
|
26
|
-
}
|
27
|
-
|
28
|
-
return false;
|
29
|
-
}
|
30
|
-
|
31
|
-
/**
|
32
|
-
* Check if a value is an Arguments object
|
33
|
-
*
|
34
|
-
* @param {any} value
|
35
|
-
*
|
36
|
-
* @returns {boolean} true if the value is an Arguments object
|
37
|
-
*/
|
38
|
-
export function isArguments(value) {
|
39
|
-
return objectToString.call(value) === '[object Arguments]';
|
40
|
-
}
|
41
|
-
|
42
|
-
/**
|
43
|
-
* Check if a value is an array that only contains primitives
|
44
|
-
* - A primitive is a not-object value
|
45
|
-
*
|
46
|
-
* @param {any} value - value to check
|
47
|
-
*
|
48
|
-
* @return {boolean} true if the value is an array of primitives
|
49
|
-
*/
|
50
|
-
export function isArrayOfPrimitives(arr) {
|
51
|
-
if (!Array.isArray(arr)) {
|
52
|
-
return false;
|
53
|
-
}
|
54
|
-
|
55
|
-
for (let j = 0, n = arr.length; j < n; j = j + 1) {
|
56
|
-
if (arr[j] instanceof Object) {
|
57
|
-
// current value is not a primitive
|
58
|
-
return false;
|
59
|
-
}
|
60
|
-
}
|
61
|
-
|
62
|
-
return true;
|
63
|
-
}
|
64
|
-
|
65
|
-
/**
|
66
|
-
* Check if the supplied value is async iterable
|
67
|
-
* - Aync iterable objects must implement the "@@asyncIterator" method
|
68
|
-
*
|
69
|
-
* @param {any} value
|
70
|
-
*
|
71
|
-
* @returns {boolean} true if the value is async iterable
|
72
|
-
*/
|
73
|
-
export function isAsyncIterator(value) {
|
74
|
-
if (!(value instanceof Object) || typeof value[Symbol.asyncIterator] !== 'function') {
|
75
|
-
return false;
|
76
|
-
}
|
77
|
-
|
78
|
-
return true;
|
79
|
-
}
|
80
|
-
|
81
|
-
/**
|
82
|
-
* Check if the supplied value is an async function
|
83
|
-
* - Returns true for functions declared as "async function" or
|
84
|
-
* async () => {}
|
85
|
-
*
|
86
|
-
* @warning this function does not return [true] for (sync) functions that
|
87
|
-
* return a promise.
|
88
|
-
*
|
89
|
-
* @param {any} value
|
90
|
-
*
|
91
|
-
* @returns {boolean} true if the value is an async function
|
92
|
-
*/
|
93
|
-
export function isAsyncFunction(value) {
|
94
|
-
if (value instanceof AsyncFunction) {
|
95
|
-
return true;
|
96
|
-
}
|
97
|
-
|
98
|
-
return false;
|
99
|
-
}
|
100
|
-
|
101
|
-
/**
|
102
|
-
* Check if the supplied value is iterable
|
103
|
-
* - Iterable objects must implement the "@@iterator" method
|
104
|
-
* - Generators are also iterable
|
105
|
-
*
|
106
|
-
* @param {any} value
|
107
|
-
*
|
108
|
-
* @returns {boolean} true if the value is (not async) iterable
|
109
|
-
*/
|
110
|
-
export function isIterable(value) {
|
111
|
-
if (!(value instanceof Object) || typeof value[Symbol.iterator] !== 'function') {
|
112
|
-
return false;
|
113
|
-
}
|
114
|
-
|
115
|
-
return true;
|
116
|
-
}
|
117
|
-
|
118
|
-
/**
|
119
|
-
* Check if the supplied value is an object bu not a promise
|
120
|
-
* - Promises return false
|
121
|
-
* - Arrays return true
|
122
|
-
*
|
123
|
-
* @param {any} value
|
124
|
-
*
|
125
|
-
* @returns {boolean} true if the value is an Object, but not a Promise
|
126
|
-
*/
|
127
|
-
export function isObject(value) {
|
128
|
-
if (!(value instanceof Object)) {
|
129
|
-
if (value && typeof value === 'object') {
|
130
|
-
// e.g. obj = Object.create(null);
|
131
|
-
return true;
|
132
|
-
}
|
133
|
-
|
134
|
-
return false;
|
135
|
-
} else if (value instanceof Promise) {
|
136
|
-
return false;
|
137
|
-
}
|
138
|
-
|
139
|
-
return true;
|
140
|
-
}
|
1
|
+
/** Internals */
|
2
|
+
|
3
|
+
//
|
4
|
+
// @see https://developer.mozilla.org/
|
5
|
+
// en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncFunction
|
6
|
+
//
|
7
|
+
const AsyncFunction = Object.getPrototypeOf(async () => {}).constructor;
|
8
|
+
const objectToString = Object.prototype.toString;
|
9
|
+
|
10
|
+
/** Exports */
|
11
|
+
|
12
|
+
/**
|
13
|
+
* Check if a value looks like an array
|
14
|
+
*
|
15
|
+
* @param {any} item - Item to check
|
16
|
+
*
|
17
|
+
* @return {boolean} true if the value looks like an array
|
18
|
+
*/
|
19
|
+
export function isArrayLike(item) {
|
20
|
+
if (!(item instanceof Object)) {
|
21
|
+
return false;
|
22
|
+
}
|
23
|
+
|
24
|
+
if ('length' in item) {
|
25
|
+
return true;
|
26
|
+
}
|
27
|
+
|
28
|
+
return false;
|
29
|
+
}
|
30
|
+
|
31
|
+
/**
|
32
|
+
* Check if a value is an Arguments object
|
33
|
+
*
|
34
|
+
* @param {any} value
|
35
|
+
*
|
36
|
+
* @returns {boolean} true if the value is an Arguments object
|
37
|
+
*/
|
38
|
+
export function isArguments(value) {
|
39
|
+
return objectToString.call(value) === '[object Arguments]';
|
40
|
+
}
|
41
|
+
|
42
|
+
/**
|
43
|
+
* Check if a value is an array that only contains primitives
|
44
|
+
* - A primitive is a not-object value
|
45
|
+
*
|
46
|
+
* @param {any} value - value to check
|
47
|
+
*
|
48
|
+
* @return {boolean} true if the value is an array of primitives
|
49
|
+
*/
|
50
|
+
export function isArrayOfPrimitives(arr) {
|
51
|
+
if (!Array.isArray(arr)) {
|
52
|
+
return false;
|
53
|
+
}
|
54
|
+
|
55
|
+
for (let j = 0, n = arr.length; j < n; j = j + 1) {
|
56
|
+
if (arr[j] instanceof Object) {
|
57
|
+
// current value is not a primitive
|
58
|
+
return false;
|
59
|
+
}
|
60
|
+
}
|
61
|
+
|
62
|
+
return true;
|
63
|
+
}
|
64
|
+
|
65
|
+
/**
|
66
|
+
* Check if the supplied value is async iterable
|
67
|
+
* - Aync iterable objects must implement the "@@asyncIterator" method
|
68
|
+
*
|
69
|
+
* @param {any} value
|
70
|
+
*
|
71
|
+
* @returns {boolean} true if the value is async iterable
|
72
|
+
*/
|
73
|
+
export function isAsyncIterator(value) {
|
74
|
+
if (!(value instanceof Object) || typeof value[Symbol.asyncIterator] !== 'function') {
|
75
|
+
return false;
|
76
|
+
}
|
77
|
+
|
78
|
+
return true;
|
79
|
+
}
|
80
|
+
|
81
|
+
/**
|
82
|
+
* Check if the supplied value is an async function
|
83
|
+
* - Returns true for functions declared as "async function" or
|
84
|
+
* async () => {}
|
85
|
+
*
|
86
|
+
* @warning this function does not return [true] for (sync) functions that
|
87
|
+
* return a promise.
|
88
|
+
*
|
89
|
+
* @param {any} value
|
90
|
+
*
|
91
|
+
* @returns {boolean} true if the value is an async function
|
92
|
+
*/
|
93
|
+
export function isAsyncFunction(value) {
|
94
|
+
if (value instanceof AsyncFunction) {
|
95
|
+
return true;
|
96
|
+
}
|
97
|
+
|
98
|
+
return false;
|
99
|
+
}
|
100
|
+
|
101
|
+
/**
|
102
|
+
* Check if the supplied value is iterable
|
103
|
+
* - Iterable objects must implement the "@@iterator" method
|
104
|
+
* - Generators are also iterable
|
105
|
+
*
|
106
|
+
* @param {any} value
|
107
|
+
*
|
108
|
+
* @returns {boolean} true if the value is (not async) iterable
|
109
|
+
*/
|
110
|
+
export function isIterable(value) {
|
111
|
+
if (!(value instanceof Object) || typeof value[Symbol.iterator] !== 'function') {
|
112
|
+
return false;
|
113
|
+
}
|
114
|
+
|
115
|
+
return true;
|
116
|
+
}
|
117
|
+
|
118
|
+
/**
|
119
|
+
* Check if the supplied value is an object bu not a promise
|
120
|
+
* - Promises return false
|
121
|
+
* - Arrays return true
|
122
|
+
*
|
123
|
+
* @param {any} value
|
124
|
+
*
|
125
|
+
* @returns {boolean} true if the value is an Object, but not a Promise
|
126
|
+
*/
|
127
|
+
export function isObject(value) {
|
128
|
+
if (!(value instanceof Object)) {
|
129
|
+
if (value && typeof value === 'object') {
|
130
|
+
// e.g. obj = Object.create(null);
|
131
|
+
return true;
|
132
|
+
}
|
133
|
+
|
134
|
+
return false;
|
135
|
+
} else if (value instanceof Promise) {
|
136
|
+
return false;
|
137
|
+
}
|
138
|
+
|
139
|
+
return true;
|
140
|
+
}
|