@hkdigital/lib-sveltekit 0.2.7 → 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.
Files changed (242) hide show
  1. package/README.md +135 -135
  2. package/dist/assets/autospuiten/car-paint-picker.js +41 -41
  3. package/dist/assets/autospuiten/labels.js +7 -7
  4. package/dist/classes/cache/IndexedDbCache.js +1407 -1407
  5. package/dist/classes/cache/MemoryResponseCache.js +138 -138
  6. package/dist/classes/cache/index.js +5 -5
  7. package/dist/classes/cache/typedef.js +41 -41
  8. package/dist/classes/data/IterableTree.js +243 -243
  9. package/dist/classes/data/Selector.js +190 -190
  10. package/dist/classes/data/index.js +2 -2
  11. package/dist/classes/events/EventEmitter.js +275 -275
  12. package/dist/classes/events/index.js +2 -2
  13. package/dist/classes/index.js +4 -4
  14. package/dist/classes/logging/Logger.js +158 -158
  15. package/dist/classes/logging/constants.js +18 -18
  16. package/dist/classes/logging/index.js +4 -4
  17. package/dist/classes/promise/HkPromise.js +377 -377
  18. package/dist/classes/promise/index.js +1 -1
  19. package/dist/classes/services/ServiceBase.js +409 -409
  20. package/dist/classes/services/ServiceManager.js +1114 -1114
  21. package/dist/classes/services/constants.js +12 -12
  22. package/dist/classes/services/index.js +5 -5
  23. package/dist/classes/stores/SubscribersCount.js +107 -107
  24. package/dist/classes/stores/index.js +1 -1
  25. package/dist/classes/streams/LogTransformStream.js +19 -19
  26. package/dist/classes/streams/ServerEventsStore.js +110 -110
  27. package/dist/classes/streams/TimeStampSource.js +26 -26
  28. package/dist/classes/streams/index.js +3 -3
  29. package/dist/classes/svelte/audio/AudioLoader.svelte.js +58 -58
  30. package/dist/classes/svelte/audio/AudioScene.svelte.js +324 -324
  31. package/dist/classes/svelte/audio/mocks.js +35 -35
  32. package/dist/classes/svelte/finite-state-machine/FiniteStateMachine.svelte.js +133 -133
  33. package/dist/classes/svelte/finite-state-machine/index.js +1 -1
  34. package/dist/classes/svelte/image/ImageLoader.svelte.js +45 -45
  35. package/dist/classes/svelte/image/ImageScene.svelte.js +249 -249
  36. package/dist/classes/svelte/image/ImageVariantsLoader.svelte.js +152 -152
  37. package/dist/classes/svelte/image/index.js +4 -4
  38. package/dist/classes/svelte/image/mocks.js +35 -35
  39. package/dist/classes/svelte/image/typedef.js +8 -8
  40. package/dist/classes/svelte/index.js +14 -14
  41. package/dist/classes/svelte/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
  42. package/dist/classes/svelte/loading-state-machine/constants.js +16 -16
  43. package/dist/classes/svelte/loading-state-machine/index.js +3 -3
  44. package/dist/classes/svelte/network-loader/NetworkLoader.svelte.js +338 -338
  45. package/dist/classes/svelte/network-loader/constants.js +3 -3
  46. package/dist/classes/svelte/network-loader/index.js +3 -3
  47. package/dist/classes/svelte/network-loader/mocks.js +30 -30
  48. package/dist/classes/svelte/network-loader/typedef.js +8 -8
  49. package/dist/components/area/HkArea.svelte +49 -49
  50. package/dist/components/area/HkGridArea.svelte +77 -77
  51. package/dist/components/area/index.js +2 -2
  52. package/dist/components/buttons/button/Button.svelte +82 -82
  53. package/dist/components/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
  54. package/dist/components/buttons/button-text/TextButton.svelte +21 -21
  55. package/dist/components/buttons/index.js +3 -3
  56. package/dist/components/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
  57. package/dist/components/debug/index.js +1 -1
  58. package/dist/components/drag-drop/DragController.js +44 -44
  59. package/dist/components/drag-drop/DragDropContext.svelte +110 -110
  60. package/dist/components/drag-drop/Draggable.svelte +512 -512
  61. package/dist/components/drag-drop/DropZoneArea.svelte +119 -119
  62. package/dist/components/drag-drop/DropZoneList.svelte +125 -125
  63. package/dist/components/drag-drop/{DropZone.svelte → Dropzone.svelte} +258 -258
  64. package/dist/components/drag-drop/drag-state.svelte.js +319 -319
  65. package/dist/components/drag-drop/index.js +7 -7
  66. package/dist/components/drag-drop/util.js +85 -85
  67. package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
  68. package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
  69. package/dist/components/icons/HkIcon.svelte +86 -86
  70. package/dist/components/icons/HkTabIcon.svelte +116 -116
  71. package/dist/components/icons/SteezeIcon.svelte +97 -97
  72. package/dist/components/icons/index.js +6 -6
  73. package/dist/components/icons/typedef.js +16 -16
  74. package/dist/components/index.js +2 -2
  75. package/dist/components/inputs/index.js +1 -1
  76. package/dist/components/inputs/text-input/TestTextInput.svelte__ +102 -102
  77. package/dist/components/inputs/text-input/TextInput.svelte +223 -223
  78. package/dist/components/inputs/text-input/TextInput.svelte___ +83 -83
  79. package/dist/components/inputs/text-input/assets/IconInvalid.svelte +14 -14
  80. package/dist/components/inputs/text-input/assets/IconValid.svelte +12 -12
  81. package/dist/components/layout/grid-layers/GridLayers.svelte +63 -63
  82. package/dist/components/layout/grid-layers/util.js +74 -74
  83. package/dist/components/layout/index.js +1 -1
  84. package/dist/components/panels/index.js +1 -1
  85. package/dist/components/panels/panel/Panel.svelte +43 -43
  86. package/dist/components/rows/index.js +3 -3
  87. package/dist/components/rows/panel-grid-row/PanelGridRow.svelte +104 -104
  88. package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
  89. package/dist/components/tab-bar/HkTabBar.state.svelte.js +149 -149
  90. package/dist/components/tab-bar/HkTabBar.svelte +74 -74
  91. package/dist/components/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
  92. package/dist/components/tab-bar/HkTabBarSelector.svelte +49 -49
  93. package/dist/components/tab-bar/index.js +17 -17
  94. package/dist/components/tab-bar/typedef.js +11 -11
  95. package/dist/config/imagetools-config.js +189 -189
  96. package/dist/config/imagetools.d.ts +72 -72
  97. package/dist/constants/bases.js +13 -13
  98. package/dist/constants/errors/api.js +9 -9
  99. package/dist/constants/errors/generic.js +5 -5
  100. package/dist/constants/errors/index.js +3 -3
  101. package/dist/constants/errors/jwt.js +5 -5
  102. package/dist/constants/http/headers.js +6 -6
  103. package/dist/constants/http/index.js +2 -2
  104. package/dist/constants/http/methods.js +2 -2
  105. package/dist/constants/index.js +3 -3
  106. package/dist/constants/mime/application.js +5 -5
  107. package/dist/constants/mime/audio.js +13 -13
  108. package/dist/constants/mime/image.js +3 -3
  109. package/dist/constants/mime/index.js +4 -4
  110. package/dist/constants/mime/text.js +2 -2
  111. package/dist/constants/regexp/index.js +31 -31
  112. package/dist/constants/regexp/inspiratie.js__ +95 -95
  113. package/dist/constants/regexp/text.js +49 -49
  114. package/dist/constants/regexp/user.js +32 -32
  115. package/dist/constants/regexp/web.js +3 -3
  116. package/dist/constants/state-labels/drag-states.js +6 -6
  117. package/dist/constants/state-labels/drop-states.js +6 -6
  118. package/dist/constants/state-labels/input-states.js +11 -11
  119. package/dist/constants/state-labels/submit-states.js +4 -4
  120. package/dist/constants/time.js +28 -28
  121. package/dist/css/utilities.css +43 -43
  122. package/dist/design/design-config.js +73 -73
  123. package/dist/design/tailwind-theme-extend.js +158 -158
  124. package/dist/features/button-group/ButtonGroup.svelte +82 -82
  125. package/dist/features/button-group/typedef.js +10 -10
  126. package/dist/features/compare-left-right/CompareLeftRight.svelte +179 -179
  127. package/dist/features/compare-left-right/index.js +1 -1
  128. package/dist/features/game-box/GameBox.svelte +577 -577
  129. package/dist/features/game-box/gamebox.util.js +83 -83
  130. package/dist/features/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
  131. package/dist/features/hk-app-layout/HkAppLayout.svelte +251 -251
  132. package/dist/features/image-box/ImageBox.svelte +210 -210
  133. package/dist/features/image-box/index.js +5 -5
  134. package/dist/features/image-box/typedef.js +32 -32
  135. package/dist/features/index.js +23 -23
  136. package/dist/features/presenter/ImageSlide.svelte +64 -64
  137. package/dist/features/presenter/Presenter.state.svelte.js +638 -638
  138. package/dist/features/presenter/Presenter.svelte +142 -142
  139. package/dist/features/presenter/constants.js +7 -7
  140. package/dist/features/presenter/index.js +10 -10
  141. package/dist/features/presenter/typedef.js +106 -106
  142. package/dist/features/presenter/util.js +210 -210
  143. package/dist/features/virtual-viewport/VirtualViewport.svelte +196 -196
  144. package/dist/schemas/index.js +1 -1
  145. package/dist/schemas/validate-url.js +180 -180
  146. package/dist/server/index.js +1 -1
  147. package/dist/server/logger.js +94 -94
  148. package/dist/states/index.js +1 -1
  149. package/dist/states/navigation.svelte.js +55 -55
  150. package/dist/stores/index.js +1 -1
  151. package/dist/stores/theme.js +80 -80
  152. package/dist/themes/hkdev/components/blocks/text-block.css +41 -41
  153. package/dist/themes/hkdev/components/boxes/game-box.css +12 -12
  154. package/dist/themes/hkdev/components/buttons/button-icon-steeze.css +22 -22
  155. package/dist/themes/hkdev/components/buttons/button-text.css +32 -32
  156. package/dist/themes/hkdev/components/buttons/button.css +146 -146
  157. package/dist/themes/hkdev/components/buttons/skip-button.css +6 -6
  158. package/dist/themes/hkdev/components/drag-drop/draggable.css +73 -73
  159. package/dist/themes/hkdev/components/drag-drop/drop-zone.css +48 -48
  160. package/dist/themes/hkdev/components/icons/icon-steeze.css +22 -22
  161. package/dist/themes/hkdev/components/inputs/text-input.css +104 -104
  162. package/dist/themes/hkdev/components/panels/panel.css +27 -27
  163. package/dist/themes/hkdev/components/rows/panel-grid-row.css +6 -6
  164. package/dist/themes/hkdev/components/rows/panel-row-2.css +7 -7
  165. package/dist/themes/hkdev/components.css +53 -53
  166. package/dist/themes/hkdev/debug.css +1 -1
  167. package/dist/themes/hkdev/global/layout.css +39 -39
  168. package/dist/themes/hkdev/global/on-colors.css +53 -53
  169. package/dist/themes/hkdev/globals.css +11 -11
  170. package/dist/themes/hkdev/responsive.css +12 -12
  171. package/dist/themes/hkdev/theme-ext.js +15 -15
  172. package/dist/themes/hkdev/theme.js +235 -235
  173. package/dist/themes/index.js +1 -1
  174. package/dist/typedef/context.js +6 -6
  175. package/dist/typedef/drag.js +25 -25
  176. package/dist/typedef/drop.js +12 -12
  177. package/dist/typedef/image.js +38 -38
  178. package/dist/typedef/index.js +4 -4
  179. package/dist/util/array/index.js +436 -436
  180. package/dist/util/bases/base58.js +262 -262
  181. package/dist/util/bases/index.js +1 -1
  182. package/dist/util/compare/index.js +247 -247
  183. package/dist/util/css/css-vars.js +83 -83
  184. package/dist/util/css/index.js +1 -1
  185. package/dist/util/design-system/components/states.js +22 -22
  186. package/dist/util/design-system/css/clamp.js +66 -66
  187. package/dist/util/design-system/css/root-design-vars.js +102 -102
  188. package/dist/util/design-system/index.js +5 -5
  189. package/dist/util/design-system/layout/scaling.js +228 -228
  190. package/dist/util/design-system/skeleton.js +208 -208
  191. package/dist/util/design-system/tailwind.js +288 -288
  192. package/dist/util/env/index.js +9 -9
  193. package/dist/util/expect/arrays.js +47 -47
  194. package/dist/util/expect/index.js +259 -259
  195. package/dist/util/expect/primitives.js +55 -55
  196. package/dist/util/expect/url.js +60 -60
  197. package/dist/util/function/index.js +218 -218
  198. package/dist/util/geo/index.js +26 -26
  199. package/dist/util/http/caching.js +263 -263
  200. package/dist/util/http/errors.js +97 -97
  201. package/dist/util/http/headers.js +75 -75
  202. package/dist/util/http/http-request.js +379 -379
  203. package/dist/util/http/index.js +22 -22
  204. package/dist/util/http/json-request.js +224 -224
  205. package/dist/util/http/mocks.js +65 -65
  206. package/dist/util/http/response.js +294 -294
  207. package/dist/util/http/typedef.js +93 -93
  208. package/dist/util/http/url.js +52 -52
  209. package/dist/util/image/index.js +86 -86
  210. package/dist/util/index.js +2 -2
  211. package/dist/util/is/index.js +140 -140
  212. package/dist/util/iterate/index.js +234 -234
  213. package/dist/util/object/index.js +1361 -1361
  214. package/dist/util/singleton/index.js +97 -97
  215. package/dist/util/string/array-path.js +75 -75
  216. package/dist/util/string/convert.js +54 -54
  217. package/dist/util/string/fs.js +226 -226
  218. package/dist/util/string/index.js +5 -5
  219. package/dist/util/string/interpolate.js +61 -61
  220. package/dist/util/string/pad.js +10 -10
  221. package/dist/util/svelte/index.js +4 -4
  222. package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
  223. package/dist/util/svelte/observe/index.js +49 -49
  224. package/dist/util/svelte/state-context/index.js +117 -117
  225. package/dist/util/svelte/wait/index.js +38 -38
  226. package/dist/util/sveltekit/index.js +1 -1
  227. package/dist/util/sveltekit/route-folders/index.js +101 -101
  228. package/dist/util/time/index.js +323 -323
  229. package/dist/util/unique/index.js +249 -249
  230. package/dist/valibot/date.js__ +10 -10
  231. package/dist/valibot/index.js +9 -9
  232. package/dist/valibot/url.js +95 -95
  233. package/dist/valibot/user.js +23 -23
  234. package/dist/zod/all.js +33 -33
  235. package/dist/zod/generic.js +11 -11
  236. package/dist/zod/javascript.js +32 -32
  237. package/dist/zod/user.js +16 -16
  238. package/dist/zod/web.js +52 -52
  239. package/package.json +112 -112
  240. package/dist/components/drag-drop/drag-state.svelte.js__ +0 -323
  241. package/dist/components/layout/grid-layers/GridLayers.svelte__heightFrom__ +0 -372
  242. package/dist/util/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
@@ -1,180 +1,180 @@
1
- // > Imports
2
-
3
- import * as v from 'valibot';
4
- // import { UrlOrEmptyString } from '../valibot/url.js';
5
-
6
- const ValidateTrim = v.custom((value) => {
7
- if (/^\s|\s$/.test(value)) {
8
- throw new Error('Should not start or end with whitespace');
9
- }
10
- return true;
11
- });
12
-
13
- // > Exports
14
-
15
- /**
16
- * Schema to validate an URL
17
- */
18
- export const ValidateUrl = v.pipe(v.string(), v.url(), ValidateTrim);
19
-
20
- /**
21
- * Schema to validate an URL or empty string.
22
- */
23
- export const ValidateUrlOrEmptyString = v.union([v.literal(''), v.pipe(v.string(), v.url())]);
24
-
25
- // export const ValidateHumanUrl
26
-
27
- /**
28
- * Schema to validate an URL path
29
- */
30
- export const ValidateUrlPath = v.pipe(
31
- v.string(),
32
- ValidateTrim,
33
- v.transform((value) => {
34
- return {
35
- url: new URL(value, 'http://localhost'),
36
- value
37
- };
38
- }),
39
- v.custom(({ url }) => {
40
- if (url.search) {
41
- return false;
42
- }
43
- return true;
44
- }, 'Value should not contain search path'),
45
- v.custom(({ url }) => {
46
- if (url.hash) {
47
- return false;
48
- }
49
- return true;
50
- }, 'Value should not contain hash path'),
51
- v.transform(({ url }) => {
52
- return url.pathname;
53
- })
54
- );
55
-
56
- /**
57
- * Schema to validate a relative URL
58
- */
59
- export const ValidateRelativeUrl = v.pipe(
60
- v.string(),
61
- ValidateTrim,
62
- v.custom((value) => {
63
- try {
64
- return new URL(value, 'http://localhost');
65
-
66
- // eslint-disable-next-line no-unused-vars
67
- } catch (e) {
68
- throw new Error('Invalid relative URL');
69
- }
70
- })
71
- );
72
-
73
- export const ValidateAbsOrRelUrl = v.pipe(
74
- v.string(),
75
- ValidateTrim,
76
- v.custom((value) => {
77
- try {
78
- if (/^https?:\/\//.test(value)) {
79
- // Absolute url using protocol http(s)
80
- return new URL(value);
81
- } else {
82
- // Relative URL
83
- return new URL(value, 'http://localhost');
84
- }
85
-
86
- // eslint-disable-next-line no-unused-vars
87
- } catch (e) {
88
- throw new Error('Invalid relative URL');
89
- }
90
- })
91
- );
92
-
93
- /**
94
- * Schema to validate an url that may miss the protocol part
95
- *
96
- * @note an empty string is not allowed!
97
- */
98
- // export const HumanUrl = v.pipe(
99
- // v.custom( ( value ) => {
100
- // if( value.includes('://') )
101
- // {
102
- // v.parse( Url, value );
103
- // return true;
104
- // }
105
- // } )
106
- // );
107
-
108
- // // v.transform((value) => {
109
- // // if (!value.length || value.includes('://')) {
110
- // // return value;
111
- // // } else {
112
- // // // Prefix 'url' with 'https://'
113
- // // return `https://${value}`;
114
- // // }
115
- // // }),
116
- // // v.url()
117
- // );
118
-
119
- /**
120
- * Schema to validate url path, without a search and hash part
121
- */
122
- // export const UrlPath = v.pipe(
123
- // v.string(),
124
- // v.transform((value) => {
125
- // // Convert relative url to URL object
126
- // // @note removes ../../ parts
127
- // try {
128
- // return new URL(value, 'http://localhost');
129
-
130
- // // eslint-disable-next-line no-unused-vars
131
- // } catch (e) {
132
- // return null;
133
- // }
134
- // }),
135
- // v.custom((urlOrNull) => {
136
- // return urlOrNull ? true : false;
137
- // }, 'Invalid URL pathname'),
138
- // v.transform((url) => {
139
- // return url.pathname;
140
- // })
141
- // );
142
-
143
- /**
144
- * Schema to validate a url path, which consists of
145
- * a path and optionally search and hash parts
146
- */
147
- // export const RelativeUrl = v.pipe(
148
- // v.string(),
149
- // v.transform((value) => {
150
- // // Convert relative url to URL object
151
- // // @note removes ../../ parts
152
- // try {
153
- // return new URL(value, 'http://localhost');
154
-
155
- // // eslint-disable-next-line no-unused-vars
156
- // } catch (e) {
157
- // return null;
158
- // }
159
- // }),
160
- // v.custom((urlOrNull) => {
161
- // return urlOrNull ? true : false;
162
- // }, 'Invalid URL pathname or search part'),
163
- // v.transform((url) => {
164
- // return (
165
- // `${url.pathname}` +
166
- // `${url.search.length <= 1 ? '' : url.search}` +
167
- // `${url.hash.length <= 1 ? '' : url.hash}`
168
- // );
169
- // })
170
- // );
171
-
172
- /**
173
- * Schema to validate an absolute or relative url
174
- *
175
- * @note an empty string is not allowed!
176
- */
177
- // export const AbsOrRelUrl = v.union([
178
- // v.pipe(v.string(), v.trim(), v.url()),
179
- // v.pipe(v.string(), v.nonEmpty(), RelativeUrl)
180
- // ]);
1
+ // > Imports
2
+
3
+ import * as v from 'valibot';
4
+ // import { UrlOrEmptyString } from '../valibot/url.js';
5
+
6
+ const ValidateTrim = v.custom((value) => {
7
+ if (/^\s|\s$/.test(value)) {
8
+ throw new Error('Should not start or end with whitespace');
9
+ }
10
+ return true;
11
+ });
12
+
13
+ // > Exports
14
+
15
+ /**
16
+ * Schema to validate an URL
17
+ */
18
+ export const ValidateUrl = v.pipe(v.string(), v.url(), ValidateTrim);
19
+
20
+ /**
21
+ * Schema to validate an URL or empty string.
22
+ */
23
+ export const ValidateUrlOrEmptyString = v.union([v.literal(''), v.pipe(v.string(), v.url())]);
24
+
25
+ // export const ValidateHumanUrl
26
+
27
+ /**
28
+ * Schema to validate an URL path
29
+ */
30
+ export const ValidateUrlPath = v.pipe(
31
+ v.string(),
32
+ ValidateTrim,
33
+ v.transform((value) => {
34
+ return {
35
+ url: new URL(value, 'http://localhost'),
36
+ value
37
+ };
38
+ }),
39
+ v.custom(({ url }) => {
40
+ if (url.search) {
41
+ return false;
42
+ }
43
+ return true;
44
+ }, 'Value should not contain search path'),
45
+ v.custom(({ url }) => {
46
+ if (url.hash) {
47
+ return false;
48
+ }
49
+ return true;
50
+ }, 'Value should not contain hash path'),
51
+ v.transform(({ url }) => {
52
+ return url.pathname;
53
+ })
54
+ );
55
+
56
+ /**
57
+ * Schema to validate a relative URL
58
+ */
59
+ export const ValidateRelativeUrl = v.pipe(
60
+ v.string(),
61
+ ValidateTrim,
62
+ v.custom((value) => {
63
+ try {
64
+ return new URL(value, 'http://localhost');
65
+
66
+ // eslint-disable-next-line no-unused-vars
67
+ } catch (e) {
68
+ throw new Error('Invalid relative URL');
69
+ }
70
+ })
71
+ );
72
+
73
+ export const ValidateAbsOrRelUrl = v.pipe(
74
+ v.string(),
75
+ ValidateTrim,
76
+ v.custom((value) => {
77
+ try {
78
+ if (/^https?:\/\//.test(value)) {
79
+ // Absolute url using protocol http(s)
80
+ return new URL(value);
81
+ } else {
82
+ // Relative URL
83
+ return new URL(value, 'http://localhost');
84
+ }
85
+
86
+ // eslint-disable-next-line no-unused-vars
87
+ } catch (e) {
88
+ throw new Error('Invalid relative URL');
89
+ }
90
+ })
91
+ );
92
+
93
+ /**
94
+ * Schema to validate an url that may miss the protocol part
95
+ *
96
+ * @note an empty string is not allowed!
97
+ */
98
+ // export const HumanUrl = v.pipe(
99
+ // v.custom( ( value ) => {
100
+ // if( value.includes('://') )
101
+ // {
102
+ // v.parse( Url, value );
103
+ // return true;
104
+ // }
105
+ // } )
106
+ // );
107
+
108
+ // // v.transform((value) => {
109
+ // // if (!value.length || value.includes('://')) {
110
+ // // return value;
111
+ // // } else {
112
+ // // // Prefix 'url' with 'https://'
113
+ // // return `https://${value}`;
114
+ // // }
115
+ // // }),
116
+ // // v.url()
117
+ // );
118
+
119
+ /**
120
+ * Schema to validate url path, without a search and hash part
121
+ */
122
+ // export const UrlPath = v.pipe(
123
+ // v.string(),
124
+ // v.transform((value) => {
125
+ // // Convert relative url to URL object
126
+ // // @note removes ../../ parts
127
+ // try {
128
+ // return new URL(value, 'http://localhost');
129
+
130
+ // // eslint-disable-next-line no-unused-vars
131
+ // } catch (e) {
132
+ // return null;
133
+ // }
134
+ // }),
135
+ // v.custom((urlOrNull) => {
136
+ // return urlOrNull ? true : false;
137
+ // }, 'Invalid URL pathname'),
138
+ // v.transform((url) => {
139
+ // return url.pathname;
140
+ // })
141
+ // );
142
+
143
+ /**
144
+ * Schema to validate a url path, which consists of
145
+ * a path and optionally search and hash parts
146
+ */
147
+ // export const RelativeUrl = v.pipe(
148
+ // v.string(),
149
+ // v.transform((value) => {
150
+ // // Convert relative url to URL object
151
+ // // @note removes ../../ parts
152
+ // try {
153
+ // return new URL(value, 'http://localhost');
154
+
155
+ // // eslint-disable-next-line no-unused-vars
156
+ // } catch (e) {
157
+ // return null;
158
+ // }
159
+ // }),
160
+ // v.custom((urlOrNull) => {
161
+ // return urlOrNull ? true : false;
162
+ // }, 'Invalid URL pathname or search part'),
163
+ // v.transform((url) => {
164
+ // return (
165
+ // `${url.pathname}` +
166
+ // `${url.search.length <= 1 ? '' : url.search}` +
167
+ // `${url.hash.length <= 1 ? '' : url.hash}`
168
+ // );
169
+ // })
170
+ // );
171
+
172
+ /**
173
+ * Schema to validate an absolute or relative url
174
+ *
175
+ * @note an empty string is not allowed!
176
+ */
177
+ // export const AbsOrRelUrl = v.union([
178
+ // v.pipe(v.string(), v.trim(), v.url()),
179
+ // v.pipe(v.string(), v.nonEmpty(), RelativeUrl)
180
+ // ]);
@@ -1 +1 @@
1
- export * from './logger.js';
1
+ export * from './logger.js';
@@ -1,94 +1,94 @@
1
- /**
2
- * @example
3
- *
4
- * import { logger } from './logger.js';
5
- *
6
- * logger.info('Hello there!');
7
- * logger.info( { a: 1, b: 2 }, 'Test vars');
8
- *
9
- * export function load({ route }) {
10
- * logger.context({route}).info('Log');
11
- * }
12
- *
13
- * @note
14
- * Set a 'handleError' hook to log errors captured by svelte
15
- *
16
- * // hooks.server.js
17
- * export const handleError = ({ status, error, message }) => {
18
- * if (status !== 404) {
19
- * logger.error(error);
20
- * }
21
- *
22
- * // do not return sensitive data here as it will be sent to the client
23
- * return { message };
24
- * };
25
- *
26
- * @see https://kit.svelte.dev/docs/hooks#shared-hooks-handleerror
27
- * @see https://stolthq.com/blog/structured-logging-sveltekit
28
- */
29
-
30
- import pino from 'pino';
31
- import { dev } from '$app/environment';
32
-
33
- // import { browser, building, dev, version } from '$app/environment';
34
-
35
- // > Setup
36
-
37
- /** @type {pino.LoggerOptions} */
38
- let options = {};
39
-
40
- if (dev) {
41
- options = {
42
- level: 'debug',
43
- transport: {
44
- target: 'pino-pretty',
45
- options: {
46
- colorize: true
47
- }
48
- }
49
- };
50
- }
51
-
52
- // > Exports
53
-
54
- // ?? function routeLogger( ... )
55
-
56
- /**
57
- * @typedef {object} LoggerContext
58
- * @property {{ id: string }} [route]
59
- * @property {string} [componentName]
60
- */
61
-
62
- /**
63
- * @typedef {pino.Logger & LoggerExtension} ExtendedLogger
64
- */
65
-
66
- /**
67
- * @typedef {Object} LoggerExtension
68
- * @property {( context: LoggerContext )=> ExtendedLogger} context
69
- */
70
-
71
- /** @type {pino.Logger & LoggerExtension} */
72
- // @ts-ignore
73
- const logger = pino(options);
74
-
75
- Object.assign(logger, {
76
- /**
77
- * @param {LoggerContext} _
78
- *
79
- * @returns {pino.Logger}
80
- */
81
- context({ route, componentName }) {
82
- if (route) {
83
- // @ts-ignore
84
- return this.child({ route: route.id });
85
- } else if (componentName) {
86
- // @ts-ignore
87
- return this.child({ componentName });
88
- } else {
89
- throw new Error(`Missing input parameter`);
90
- }
91
- }
92
- });
93
-
94
- export { logger };
1
+ /**
2
+ * @example
3
+ *
4
+ * import { logger } from './logger.js';
5
+ *
6
+ * logger.info('Hello there!');
7
+ * logger.info( { a: 1, b: 2 }, 'Test vars');
8
+ *
9
+ * export function load({ route }) {
10
+ * logger.context({route}).info('Log');
11
+ * }
12
+ *
13
+ * @note
14
+ * Set a 'handleError' hook to log errors captured by svelte
15
+ *
16
+ * // hooks.server.js
17
+ * export const handleError = ({ status, error, message }) => {
18
+ * if (status !== 404) {
19
+ * logger.error(error);
20
+ * }
21
+ *
22
+ * // do not return sensitive data here as it will be sent to the client
23
+ * return { message };
24
+ * };
25
+ *
26
+ * @see https://kit.svelte.dev/docs/hooks#shared-hooks-handleerror
27
+ * @see https://stolthq.com/blog/structured-logging-sveltekit
28
+ */
29
+
30
+ import pino from 'pino';
31
+ import { dev } from '$app/environment';
32
+
33
+ // import { browser, building, dev, version } from '$app/environment';
34
+
35
+ // > Setup
36
+
37
+ /** @type {pino.LoggerOptions} */
38
+ let options = {};
39
+
40
+ if (dev) {
41
+ options = {
42
+ level: 'debug',
43
+ transport: {
44
+ target: 'pino-pretty',
45
+ options: {
46
+ colorize: true
47
+ }
48
+ }
49
+ };
50
+ }
51
+
52
+ // > Exports
53
+
54
+ // ?? function routeLogger( ... )
55
+
56
+ /**
57
+ * @typedef {object} LoggerContext
58
+ * @property {{ id: string }} [route]
59
+ * @property {string} [componentName]
60
+ */
61
+
62
+ /**
63
+ * @typedef {pino.Logger & LoggerExtension} ExtendedLogger
64
+ */
65
+
66
+ /**
67
+ * @typedef {Object} LoggerExtension
68
+ * @property {( context: LoggerContext )=> ExtendedLogger} context
69
+ */
70
+
71
+ /** @type {pino.Logger & LoggerExtension} */
72
+ // @ts-ignore
73
+ const logger = pino(options);
74
+
75
+ Object.assign(logger, {
76
+ /**
77
+ * @param {LoggerContext} _
78
+ *
79
+ * @returns {pino.Logger}
80
+ */
81
+ context({ route, componentName }) {
82
+ if (route) {
83
+ // @ts-ignore
84
+ return this.child({ route: route.id });
85
+ } else if (componentName) {
86
+ // @ts-ignore
87
+ return this.child({ componentName });
88
+ } else {
89
+ throw new Error(`Missing input parameter`);
90
+ }
91
+ }
92
+ });
93
+
94
+ export { logger };
@@ -1 +1 @@
1
- export * from './navigation.svelte.js';
1
+ export * from './navigation.svelte.js';
@@ -1,55 +1,55 @@
1
- import { onMount } from 'svelte';
2
-
3
- import { lazySingleton } from '../util/singleton/index.js';
4
-
5
- import { beforeNavigate, onNavigate, afterNavigate } from '$app/navigation';
6
-
7
- import { page } from '$app/stores';
8
- import { get } from 'svelte/store';
9
-
10
- class Navigation {
11
- // TODO: complete page type
12
-
13
- /** @type {{ url: { pathname: string } }} */
14
- page = $state(get(page));
15
-
16
- /** @type {string} */
17
- pathname = $derived(this.page.url.pathname);
18
-
19
- stage = $state.raw({ before: false, navigating: true, after: false });
20
-
21
- constructor() {
22
- beforeNavigate(() => {
23
- this.stage = { before: true, navigating: false, after: false };
24
- });
25
-
26
- onNavigate(() => {
27
- this.stage = { before: false, navigating: true, after: false };
28
- });
29
-
30
- // onNavigate(async () => {
31
- // console.log('onNavigate can be used to perform async page transitions');
32
- // return new Promise((resolve) => {
33
- // setTimeout(resolve, 1000);
34
- // });
35
- // });
36
-
37
- afterNavigate(() => {
38
- this.stage = { before: false, navigating: false, after: true };
39
- });
40
-
41
- onMount(() => {
42
- return page.subscribe((value) => {
43
- // console.log('***update page url');
44
- this.page = value;
45
- });
46
- });
47
- } // end constructor
48
-
49
- init() {}
50
- } // end class
51
-
52
- /**
53
- * @note call nav.init() during component initialization phase
54
- */
55
- export const nav = lazySingleton({ class: Navigation });
1
+ import { onMount } from 'svelte';
2
+
3
+ import { lazySingleton } from '../util/singleton/index.js';
4
+
5
+ import { beforeNavigate, onNavigate, afterNavigate } from '$app/navigation';
6
+
7
+ import { page } from '$app/stores';
8
+ import { get } from 'svelte/store';
9
+
10
+ class Navigation {
11
+ // TODO: complete page type
12
+
13
+ /** @type {{ url: { pathname: string } }} */
14
+ page = $state(get(page));
15
+
16
+ /** @type {string} */
17
+ pathname = $derived(this.page.url.pathname);
18
+
19
+ stage = $state.raw({ before: false, navigating: true, after: false });
20
+
21
+ constructor() {
22
+ beforeNavigate(() => {
23
+ this.stage = { before: true, navigating: false, after: false };
24
+ });
25
+
26
+ onNavigate(() => {
27
+ this.stage = { before: false, navigating: true, after: false };
28
+ });
29
+
30
+ // onNavigate(async () => {
31
+ // console.log('onNavigate can be used to perform async page transitions');
32
+ // return new Promise((resolve) => {
33
+ // setTimeout(resolve, 1000);
34
+ // });
35
+ // });
36
+
37
+ afterNavigate(() => {
38
+ this.stage = { before: false, navigating: false, after: true };
39
+ });
40
+
41
+ onMount(() => {
42
+ return page.subscribe((value) => {
43
+ // console.log('***update page url');
44
+ this.page = value;
45
+ });
46
+ });
47
+ } // end constructor
48
+
49
+ init() {}
50
+ } // end class
51
+
52
+ /**
53
+ * @note call nav.init() during component initialization phase
54
+ */
55
+ export const nav = lazySingleton({ class: Navigation });
@@ -1 +1 @@
1
- export * as theme from './theme.js';
1
+ export * as theme from './theme.js';