@hkdigital/lib-sveltekit 0.1.6 → 0.1.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 +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 +14 -0
- package/dist/components/area/HkGridArea.svelte +77 -77
- package/dist/components/area/HkGridArea.svelte.d.ts +22 -0
- 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 +15 -0
- 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 +196 -199
- package/dist/components/boxes/virtual-viewport/VirtualViewport.svelte.d.ts +24 -2
- package/dist/components/buttons/button/Button.svelte +76 -75
- package/dist/components/buttons/button/Button.svelte.d.ts +21 -0
- package/dist/components/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -0
- package/dist/components/buttons/button-icon-steeze/SteezeIconButton.svelte.d.ts +16 -0
- package/dist/components/buttons/button-text/TextButton.svelte +21 -21
- package/dist/components/buttons/button-text/TextButton.svelte.d.ts +7 -0
- package/dist/components/buttons/index.d.ts +1 -0
- package/dist/components/buttons/index.js +3 -2
- package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
- package/dist/components/hkdev/blocks/TextBlock.svelte.d.ts +13 -0
- package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
- package/dist/components/hkdev/buttons/CheckButton.svelte.d.ts +18 -0
- package/dist/components/{icon → icons}/HkIcon.svelte +86 -86
- package/dist/components/icons/HkIcon.svelte.d.ts +22 -0
- package/dist/components/{icon → icons}/HkTabIcon.svelte +116 -116
- package/dist/components/icons/HkTabIcon.svelte.d.ts +40 -0
- package/dist/components/icons/SteezeIcon.svelte +96 -0
- package/dist/components/icons/SteezeIcon.svelte.d.ts +22 -0
- package/dist/components/{icon → icons}/index.d.ts +1 -0
- package/dist/components/{icon → icons}/index.js +6 -4
- package/dist/components/{icon → icons}/typedef.js +16 -16
- package/dist/components/image/ImageBox.svelte +208 -208
- package/dist/components/image/ImageBox.svelte.d.ts +19 -0
- 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 +28 -0
- 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 +11 -0
- package/dist/components/layout/HkGridLayers.svelte +82 -82
- package/dist/components/layout/HkGridLayers.svelte.d.ts +23 -0
- 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 +12 -0
- 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 +14 -0
- package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
- package/dist/components/rows/panel-row-2/PanelRow2.svelte.d.ts +14 -0
- 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 +18 -0
- 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 +19 -0
- package/dist/components/tab-bar/index.js +17 -17
- package/dist/components/tab-bar/typedef.d.ts +1 -1
- 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 +10 -0
- 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.d.ts +7 -6
- 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 +158 -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 +41 -41
- package/dist/themes/hkdev/components/boxes/game-box.postcss +13 -13
- package/dist/themes/hkdev/components/buttons/button-icon-steeze.postcss +22 -0
- 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/button.postcss__ +40 -0
- package/dist/themes/hkdev/components/buttons/button.postcss___ +91 -0
- package/dist/themes/hkdev/components/buttons/skip-button.postcss +8 -8
- package/dist/themes/hkdev/components/icons/icon-steeze.postcss +22 -0
- 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 +61 -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.d.ts +4 -4
- 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.d.ts +4 -4
- package/dist/util/design-system/layout/scaling.js +97 -97
- package/dist/util/design-system/tailwind.d.ts +20 -20
- 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/components/icon/HkIcon.svelte.d.ts +0 -10
- package/dist/components/icon/HkTabIcon.svelte.d.ts +0 -19
- /package/dist/components/{icon → icons}/typedef.d.ts +0 -0
@@ -1,143 +1,143 @@
|
|
1
|
-
import { METHOD_GET, METHOD_POST } from '../../constants/http/methods.js';
|
2
|
-
|
3
|
-
import { APPLICATION_JSON } from '../../constants/mime/application.js';
|
4
|
-
import { CONTENT_TYPE } from '../../constants/http/headers.js';
|
5
|
-
import { ResponseError } from '../../constants/errors/index.js';
|
6
|
-
|
7
|
-
import * as expect from '../expect/index.js';
|
8
|
-
|
9
|
-
import { toURL } from './url.js';
|
10
|
-
import { httpRequest } from './http-request.js';
|
11
|
-
import { waitForAndCheckResponse } from './response.js';
|
12
|
-
|
13
|
-
const ACCEPT = 'accept';
|
14
|
-
|
15
|
-
/**
|
16
|
-
* Make a GET request to fetch JSON encoded data
|
17
|
-
* - Expect JSON response from server
|
18
|
-
*
|
19
|
-
* @param {object} _
|
20
|
-
* @param {string|URL} _.url - Url string or URL object
|
21
|
-
*
|
22
|
-
* @param {object} [_.urlSearchParams]
|
23
|
-
* Parameters that should be added to the request url
|
24
|
-
*
|
25
|
-
* @param {[string, string][]} [_.headers]
|
26
|
-
* List of custom headers. Each header is an array that contains
|
27
|
-
* the header name and the header value.
|
28
|
-
* E.g. [ "content-type", "application/json" ]
|
29
|
-
*
|
30
|
-
* @throws ResponseError
|
31
|
-
* If a network error occurred or the response was not ok
|
32
|
-
*
|
33
|
-
* @returns {Promise<any>} parsed JSON data
|
34
|
-
*/
|
35
|
-
export async function jsonGet({ url, urlSearchParams, headers }) {
|
36
|
-
url = toURL(url);
|
37
|
-
|
38
|
-
if (!headers) {
|
39
|
-
headers = [];
|
40
|
-
}
|
41
|
-
|
42
|
-
headers[ACCEPT] = APPLICATION_JSON;
|
43
|
-
|
44
|
-
const responsePromise = httpRequest({
|
45
|
-
method: METHOD_GET,
|
46
|
-
url,
|
47
|
-
urlSearchParams,
|
48
|
-
headers
|
49
|
-
});
|
50
|
-
|
51
|
-
const response = await waitForAndCheckResponse(responsePromise, url);
|
52
|
-
|
53
|
-
let parsedResponse;
|
54
|
-
|
55
|
-
try {
|
56
|
-
//
|
57
|
-
// @note when security on the client side fails, an `opaque` response
|
58
|
-
// is returned by the browser (empty body) -> parsing fails
|
59
|
-
// (use CORS to fix this)
|
60
|
-
//
|
61
|
-
parsedResponse = await response.json();
|
62
|
-
} catch (e) {
|
63
|
-
throw new ResponseError(`Failed to JSON decode server response from [${decodeURI(url.href)}]`, {
|
64
|
-
cause: e
|
65
|
-
});
|
66
|
-
}
|
67
|
-
|
68
|
-
if (parsedResponse.error) {
|
69
|
-
throw new ResponseError(`Server returned response error message [${parsedResponse.error}]`);
|
70
|
-
}
|
71
|
-
|
72
|
-
return parsedResponse;
|
73
|
-
}
|
74
|
-
|
75
|
-
/**
|
76
|
-
* Make a POST request to fetch JSON encoded data
|
77
|
-
* - Expect JSON response from server
|
78
|
-
*
|
79
|
-
* @param {object} _
|
80
|
-
* @param {string|URL} _.url - Url string or URL object
|
81
|
-
*
|
82
|
-
* @param {any} _.body
|
83
|
-
* Data that will be converted to a JSON encoded string and send to the server
|
84
|
-
*
|
85
|
-
* @param {object} [_.urlSearchParams]
|
86
|
-
* Parameters that should be added to the request url.
|
87
|
-
*
|
88
|
-
* - Be careful when using urlSearchParams in POST requests, it can be
|
89
|
-
* confusing since the parameters usually go in the body part of
|
90
|
-
* the request.
|
91
|
-
*
|
92
|
-
* @param {[string, string][]} [_.headers]
|
93
|
-
* List of custom headers. Each header is an array that contains
|
94
|
-
* the header name and the header value.
|
95
|
-
* E.g. [ "content-type", "application/json" ]
|
96
|
-
*
|
97
|
-
* @throws ResponseError
|
98
|
-
* If a network error occurred or the response was not ok
|
99
|
-
*
|
100
|
-
* @returns {Promise<any>} parsed JSON data
|
101
|
-
*/
|
102
|
-
export async function jsonPost({ url, body, urlSearchParams, headers }) {
|
103
|
-
url = toURL(url);
|
104
|
-
|
105
|
-
if (!headers) {
|
106
|
-
headers = [];
|
107
|
-
} else {
|
108
|
-
expect.object(headers);
|
109
|
-
}
|
110
|
-
|
111
|
-
expect.defined(body);
|
112
|
-
|
113
|
-
headers[ACCEPT] = APPLICATION_JSON;
|
114
|
-
headers[CONTENT_TYPE] = APPLICATION_JSON;
|
115
|
-
|
116
|
-
const responsePromise = httpRequest({ method: METHOD_POST, url, body, urlSearchParams, headers });
|
117
|
-
|
118
|
-
const response = await waitForAndCheckResponse(responsePromise, url);
|
119
|
-
|
120
|
-
let parsedResponse;
|
121
|
-
|
122
|
-
try {
|
123
|
-
//
|
124
|
-
// @note when security on the client side fails, an `opaque` response
|
125
|
-
// is returned by the browser (empty body) -> parsing fails
|
126
|
-
// (use CORS to fix this)
|
127
|
-
//
|
128
|
-
parsedResponse = await response.json();
|
129
|
-
} catch (e) {
|
130
|
-
// console.log( response );
|
131
|
-
throw new ResponseError(`Failed to JSON decode server response from [${decodeURI(url.href)}]`);
|
132
|
-
}
|
133
|
-
|
134
|
-
if (parsedResponse.error) {
|
135
|
-
//
|
136
|
-
// @note this is API specific, but it's quite logical
|
137
|
-
//
|
138
|
-
//
|
139
|
-
throw new ResponseError(`Server returned response error message [${parsedResponse.error}]`);
|
140
|
-
}
|
141
|
-
|
142
|
-
return parsedResponse;
|
143
|
-
}
|
1
|
+
import { METHOD_GET, METHOD_POST } from '../../constants/http/methods.js';
|
2
|
+
|
3
|
+
import { APPLICATION_JSON } from '../../constants/mime/application.js';
|
4
|
+
import { CONTENT_TYPE } from '../../constants/http/headers.js';
|
5
|
+
import { ResponseError } from '../../constants/errors/index.js';
|
6
|
+
|
7
|
+
import * as expect from '../expect/index.js';
|
8
|
+
|
9
|
+
import { toURL } from './url.js';
|
10
|
+
import { httpRequest } from './http-request.js';
|
11
|
+
import { waitForAndCheckResponse } from './response.js';
|
12
|
+
|
13
|
+
const ACCEPT = 'accept';
|
14
|
+
|
15
|
+
/**
|
16
|
+
* Make a GET request to fetch JSON encoded data
|
17
|
+
* - Expect JSON response from server
|
18
|
+
*
|
19
|
+
* @param {object} _
|
20
|
+
* @param {string|URL} _.url - Url string or URL object
|
21
|
+
*
|
22
|
+
* @param {object} [_.urlSearchParams]
|
23
|
+
* Parameters that should be added to the request url
|
24
|
+
*
|
25
|
+
* @param {[string, string][]} [_.headers]
|
26
|
+
* List of custom headers. Each header is an array that contains
|
27
|
+
* the header name and the header value.
|
28
|
+
* E.g. [ "content-type", "application/json" ]
|
29
|
+
*
|
30
|
+
* @throws ResponseError
|
31
|
+
* If a network error occurred or the response was not ok
|
32
|
+
*
|
33
|
+
* @returns {Promise<any>} parsed JSON data
|
34
|
+
*/
|
35
|
+
export async function jsonGet({ url, urlSearchParams, headers }) {
|
36
|
+
url = toURL(url);
|
37
|
+
|
38
|
+
if (!headers) {
|
39
|
+
headers = [];
|
40
|
+
}
|
41
|
+
|
42
|
+
headers[ACCEPT] = APPLICATION_JSON;
|
43
|
+
|
44
|
+
const responsePromise = httpRequest({
|
45
|
+
method: METHOD_GET,
|
46
|
+
url,
|
47
|
+
urlSearchParams,
|
48
|
+
headers
|
49
|
+
});
|
50
|
+
|
51
|
+
const response = await waitForAndCheckResponse(responsePromise, url);
|
52
|
+
|
53
|
+
let parsedResponse;
|
54
|
+
|
55
|
+
try {
|
56
|
+
//
|
57
|
+
// @note when security on the client side fails, an `opaque` response
|
58
|
+
// is returned by the browser (empty body) -> parsing fails
|
59
|
+
// (use CORS to fix this)
|
60
|
+
//
|
61
|
+
parsedResponse = await response.json();
|
62
|
+
} catch (e) {
|
63
|
+
throw new ResponseError(`Failed to JSON decode server response from [${decodeURI(url.href)}]`, {
|
64
|
+
cause: e
|
65
|
+
});
|
66
|
+
}
|
67
|
+
|
68
|
+
if (parsedResponse.error) {
|
69
|
+
throw new ResponseError(`Server returned response error message [${parsedResponse.error}]`);
|
70
|
+
}
|
71
|
+
|
72
|
+
return parsedResponse;
|
73
|
+
}
|
74
|
+
|
75
|
+
/**
|
76
|
+
* Make a POST request to fetch JSON encoded data
|
77
|
+
* - Expect JSON response from server
|
78
|
+
*
|
79
|
+
* @param {object} _
|
80
|
+
* @param {string|URL} _.url - Url string or URL object
|
81
|
+
*
|
82
|
+
* @param {any} _.body
|
83
|
+
* Data that will be converted to a JSON encoded string and send to the server
|
84
|
+
*
|
85
|
+
* @param {object} [_.urlSearchParams]
|
86
|
+
* Parameters that should be added to the request url.
|
87
|
+
*
|
88
|
+
* - Be careful when using urlSearchParams in POST requests, it can be
|
89
|
+
* confusing since the parameters usually go in the body part of
|
90
|
+
* the request.
|
91
|
+
*
|
92
|
+
* @param {[string, string][]} [_.headers]
|
93
|
+
* List of custom headers. Each header is an array that contains
|
94
|
+
* the header name and the header value.
|
95
|
+
* E.g. [ "content-type", "application/json" ]
|
96
|
+
*
|
97
|
+
* @throws ResponseError
|
98
|
+
* If a network error occurred or the response was not ok
|
99
|
+
*
|
100
|
+
* @returns {Promise<any>} parsed JSON data
|
101
|
+
*/
|
102
|
+
export async function jsonPost({ url, body, urlSearchParams, headers }) {
|
103
|
+
url = toURL(url);
|
104
|
+
|
105
|
+
if (!headers) {
|
106
|
+
headers = [];
|
107
|
+
} else {
|
108
|
+
expect.object(headers);
|
109
|
+
}
|
110
|
+
|
111
|
+
expect.defined(body);
|
112
|
+
|
113
|
+
headers[ACCEPT] = APPLICATION_JSON;
|
114
|
+
headers[CONTENT_TYPE] = APPLICATION_JSON;
|
115
|
+
|
116
|
+
const responsePromise = httpRequest({ method: METHOD_POST, url, body, urlSearchParams, headers });
|
117
|
+
|
118
|
+
const response = await waitForAndCheckResponse(responsePromise, url);
|
119
|
+
|
120
|
+
let parsedResponse;
|
121
|
+
|
122
|
+
try {
|
123
|
+
//
|
124
|
+
// @note when security on the client side fails, an `opaque` response
|
125
|
+
// is returned by the browser (empty body) -> parsing fails
|
126
|
+
// (use CORS to fix this)
|
127
|
+
//
|
128
|
+
parsedResponse = await response.json();
|
129
|
+
} catch (e) {
|
130
|
+
// console.log( response );
|
131
|
+
throw new ResponseError(`Failed to JSON decode server response from [${decodeURI(url.href)}]`);
|
132
|
+
}
|
133
|
+
|
134
|
+
if (parsedResponse.error) {
|
135
|
+
//
|
136
|
+
// @note this is API specific, but it's quite logical
|
137
|
+
//
|
138
|
+
//
|
139
|
+
throw new ResponseError(`Server returned response error message [${parsedResponse.error}]`);
|
140
|
+
}
|
141
|
+
|
142
|
+
return parsedResponse;
|
143
|
+
}
|
package/dist/util/http/mocks.js
CHANGED
@@ -1,65 +1,65 @@
|
|
1
|
-
import { CONTENT_TYPE, CONTENT_LENGTH } from '../../constants/http/index.js';
|
2
|
-
|
3
|
-
import { OCTET_STREAM } from '../../constants/mime/index.js';
|
4
|
-
|
5
|
-
/**
|
6
|
-
* Create a response value that can be used by a mocked fetch function
|
7
|
-
*
|
8
|
-
* @template T
|
9
|
-
*
|
10
|
-
* @param {T} data
|
11
|
-
*
|
12
|
-
* @returns {{ json: () => Promise<T>}}
|
13
|
-
*/
|
14
|
-
export function createJsonFetchResponse(data /* , options */) {
|
15
|
-
return { json: () => new Promise((resolve) => resolve(data)) };
|
16
|
-
}
|
17
|
-
|
18
|
-
/**
|
19
|
-
* Create a response value that can be used by a mocked fetch function
|
20
|
-
*
|
21
|
-
* @param {ArrayBuffer} arrayBuffer
|
22
|
-
*
|
23
|
-
* @returns {Response}
|
24
|
-
*/
|
25
|
-
export function createStreamedResponse(arrayBuffer /*, options */) {
|
26
|
-
const byteLength = arrayBuffer.byteLength;
|
27
|
-
const chunkSize = Math.ceil(byteLength / 10);
|
28
|
-
|
29
|
-
const body = new ReadableStream({
|
30
|
-
start(controller) {
|
31
|
-
let offset = 0;
|
32
|
-
|
33
|
-
function pushChunk() {
|
34
|
-
if (offset >= byteLength) {
|
35
|
-
controller.close();
|
36
|
-
return;
|
37
|
-
}
|
38
|
-
|
39
|
-
// Calculate the size of the current chunk
|
40
|
-
const currentChunkSize = Math.min(chunkSize, byteLength - offset);
|
41
|
-
|
42
|
-
// Create a new ArrayBuffer for this chunk
|
43
|
-
const chunk = arrayBuffer.slice(offset, offset + currentChunkSize);
|
44
|
-
|
45
|
-
controller.enqueue(chunk);
|
46
|
-
offset += currentChunkSize;
|
47
|
-
|
48
|
-
// Schedule next chunk
|
49
|
-
setTimeout(pushChunk, 0);
|
50
|
-
}
|
51
|
-
|
52
|
-
// Start pushing chunks
|
53
|
-
pushChunk();
|
54
|
-
}
|
55
|
-
});
|
56
|
-
|
57
|
-
const response = new Response(body, {
|
58
|
-
headers: new Headers({
|
59
|
-
[CONTENT_TYPE]: OCTET_STREAM,
|
60
|
-
[CONTENT_LENGTH]: String(byteLength)
|
61
|
-
})
|
62
|
-
});
|
63
|
-
|
64
|
-
return response;
|
65
|
-
}
|
1
|
+
import { CONTENT_TYPE, CONTENT_LENGTH } from '../../constants/http/index.js';
|
2
|
+
|
3
|
+
import { OCTET_STREAM } from '../../constants/mime/index.js';
|
4
|
+
|
5
|
+
/**
|
6
|
+
* Create a response value that can be used by a mocked fetch function
|
7
|
+
*
|
8
|
+
* @template T
|
9
|
+
*
|
10
|
+
* @param {T} data
|
11
|
+
*
|
12
|
+
* @returns {{ json: () => Promise<T>}}
|
13
|
+
*/
|
14
|
+
export function createJsonFetchResponse(data /* , options */) {
|
15
|
+
return { json: () => new Promise((resolve) => resolve(data)) };
|
16
|
+
}
|
17
|
+
|
18
|
+
/**
|
19
|
+
* Create a response value that can be used by a mocked fetch function
|
20
|
+
*
|
21
|
+
* @param {ArrayBuffer} arrayBuffer
|
22
|
+
*
|
23
|
+
* @returns {Response}
|
24
|
+
*/
|
25
|
+
export function createStreamedResponse(arrayBuffer /*, options */) {
|
26
|
+
const byteLength = arrayBuffer.byteLength;
|
27
|
+
const chunkSize = Math.ceil(byteLength / 10);
|
28
|
+
|
29
|
+
const body = new ReadableStream({
|
30
|
+
start(controller) {
|
31
|
+
let offset = 0;
|
32
|
+
|
33
|
+
function pushChunk() {
|
34
|
+
if (offset >= byteLength) {
|
35
|
+
controller.close();
|
36
|
+
return;
|
37
|
+
}
|
38
|
+
|
39
|
+
// Calculate the size of the current chunk
|
40
|
+
const currentChunkSize = Math.min(chunkSize, byteLength - offset);
|
41
|
+
|
42
|
+
// Create a new ArrayBuffer for this chunk
|
43
|
+
const chunk = arrayBuffer.slice(offset, offset + currentChunkSize);
|
44
|
+
|
45
|
+
controller.enqueue(chunk);
|
46
|
+
offset += currentChunkSize;
|
47
|
+
|
48
|
+
// Schedule next chunk
|
49
|
+
setTimeout(pushChunk, 0);
|
50
|
+
}
|
51
|
+
|
52
|
+
// Start pushing chunks
|
53
|
+
pushChunk();
|
54
|
+
}
|
55
|
+
});
|
56
|
+
|
57
|
+
const response = new Response(body, {
|
58
|
+
headers: new Headers({
|
59
|
+
[CONTENT_TYPE]: OCTET_STREAM,
|
60
|
+
[CONTENT_LENGTH]: String(byteLength)
|
61
|
+
})
|
62
|
+
});
|
63
|
+
|
64
|
+
return response;
|
65
|
+
}
|