@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.
Files changed (224) hide show
  1. package/README.md +127 -127
  2. package/dist/classes/data/IterableTree.js +243 -243
  3. package/dist/classes/data/Selector.js +190 -190
  4. package/dist/classes/data/index.js +2 -2
  5. package/dist/classes/index.js +3 -3
  6. package/dist/classes/promise/HkPromise.js +377 -377
  7. package/dist/classes/promise/index.js +1 -1
  8. package/dist/classes/stores/SubscribersCount.js +107 -107
  9. package/dist/classes/stores/index.js +1 -1
  10. package/dist/classes/streams/LogTransformStream.js +19 -19
  11. package/dist/classes/streams/ServerEventsStore.js +110 -110
  12. package/dist/classes/streams/TimeStampSource.js +26 -26
  13. package/dist/classes/streams/index.js +3 -3
  14. package/dist/classes/{svkit → svelte}/audio/AudioLoader.svelte.js +58 -58
  15. package/dist/classes/{svkit → svelte}/audio/AudioScene.svelte.js +282 -282
  16. package/dist/classes/{svkit → svelte}/audio/mocks.js +35 -35
  17. package/dist/classes/{svkit → svelte}/final-state-machine/FiniteStateMachine.svelte.js +133 -133
  18. package/dist/classes/{svkit → svelte}/final-state-machine/index.js +1 -1
  19. package/dist/classes/{svkit → svelte}/image/ImageLoader.svelte.js +47 -47
  20. package/dist/classes/{svkit → svelte}/image/ImageScene.svelte.js +253 -253
  21. package/dist/classes/{svkit → svelte}/image/ImageVariantsLoader.svelte.js +152 -152
  22. package/dist/classes/{svkit → svelte}/image/index.js +4 -4
  23. package/dist/classes/{svkit → svelte}/image/mocks.js +35 -35
  24. package/dist/classes/{svkit → svelte}/image/typedef.js +8 -8
  25. package/dist/classes/{svkit → svelte}/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
  26. package/dist/classes/{svkit → svelte}/loading-state-machine/constants.js +16 -16
  27. package/dist/classes/{svkit → svelte}/loading-state-machine/index.js +3 -3
  28. package/dist/classes/{svkit → svelte}/network-loader/NetworkLoader.svelte.js +331 -331
  29. package/dist/classes/{svkit → svelte}/network-loader/constants.js +3 -3
  30. package/dist/classes/{svkit → svelte}/network-loader/index.js +3 -3
  31. package/dist/classes/{svkit → svelte}/network-loader/mocks.js +30 -30
  32. package/dist/classes/{svkit → svelte}/network-loader/typedef.js +8 -8
  33. package/dist/components/area/HkArea.svelte +49 -49
  34. package/dist/components/area/HkArea.svelte.d.ts +0 -14
  35. package/dist/components/area/HkGridArea.svelte +77 -77
  36. package/dist/components/area/HkGridArea.svelte.d.ts +0 -22
  37. package/dist/components/area/index.js +2 -2
  38. package/dist/components/boxes/game-box/GameBox.svelte +112 -112
  39. package/dist/components/boxes/game-box/GameBox.svelte.d.ts +0 -15
  40. package/dist/components/boxes/game-box/gamebox.util.js +83 -83
  41. package/dist/components/boxes/index.js +2 -2
  42. package/dist/components/boxes/virtual-viewport/VirtualViewport.svelte +199 -199
  43. package/dist/components/boxes/virtual-viewport/VirtualViewport.svelte.d.ts +0 -22
  44. package/dist/components/buttons/button/Button.svelte +75 -75
  45. package/dist/components/buttons/button/Button.svelte.d.ts +0 -21
  46. package/dist/components/buttons/button-text/TextButton.svelte +21 -21
  47. package/dist/components/buttons/button-text/TextButton.svelte.d.ts +0 -7
  48. package/dist/components/buttons/index.js +2 -2
  49. package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
  50. package/dist/components/hkdev/blocks/TextBlock.svelte.d.ts +0 -13
  51. package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
  52. package/dist/components/hkdev/buttons/CheckButton.svelte.d.ts +0 -18
  53. package/dist/components/icon/HkIcon.svelte +86 -86
  54. package/dist/components/icon/HkIcon.svelte.d.ts +0 -12
  55. package/dist/components/icon/HkTabIcon.svelte +116 -116
  56. package/dist/components/icon/HkTabIcon.svelte.d.ts +0 -21
  57. package/dist/components/icon/index.js +4 -4
  58. package/dist/components/icon/typedef.js +16 -16
  59. package/dist/components/image/ImageBox.svelte +208 -208
  60. package/dist/components/image/ImageBox.svelte.d.ts +2 -21
  61. package/dist/components/image/index.js +5 -5
  62. package/dist/components/image/typedef.js +32 -32
  63. package/dist/components/index.js +2 -2
  64. package/dist/components/inputs/index.js +1 -1
  65. package/dist/components/inputs/text-input/TestTextInput.svelte__ +102 -102
  66. package/dist/components/inputs/text-input/TextInput.svelte +226 -226
  67. package/dist/components/inputs/text-input/TextInput.svelte.d.ts +0 -28
  68. package/dist/components/inputs/text-input/TextInput.svelte___ +83 -83
  69. package/dist/components/inputs/text-input/assets/IconInvalid.svelte +14 -14
  70. package/dist/components/inputs/text-input/assets/IconValid.svelte +12 -12
  71. package/dist/components/layout/HkAppLayout.state.svelte.js +25 -25
  72. package/dist/components/layout/HkAppLayout.svelte +251 -251
  73. package/dist/components/layout/HkAppLayout.svelte.d.ts +0 -11
  74. package/dist/components/layout/HkGridLayers.svelte +82 -82
  75. package/dist/components/layout/HkGridLayers.svelte.d.ts +0 -23
  76. package/dist/components/layout/index.js +9 -9
  77. package/dist/components/panels/index.js +1 -1
  78. package/dist/components/panels/plain-panel/PlainPanel.svelte +33 -33
  79. package/dist/components/panels/plain-panel/PlainPanel.svelte.d.ts +0 -12
  80. package/dist/components/rows/index.js +3 -3
  81. package/dist/components/rows/panel-grid-row/PanelGridRow.svelte +104 -104
  82. package/dist/components/rows/panel-grid-row/PanelGridRow.svelte.d.ts +0 -14
  83. package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
  84. package/dist/components/rows/panel-row-2/PanelRow2.svelte.d.ts +0 -14
  85. package/dist/components/tab-bar/HkTabBar.state.svelte.js +149 -149
  86. package/dist/components/tab-bar/HkTabBar.svelte +74 -74
  87. package/dist/components/tab-bar/HkTabBar.svelte.d.ts +0 -18
  88. package/dist/components/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
  89. package/dist/components/tab-bar/HkTabBarSelector.svelte +49 -49
  90. package/dist/components/tab-bar/HkTabBarSelector.svelte.d.ts +0 -19
  91. package/dist/components/tab-bar/index.js +17 -17
  92. package/dist/components/tab-bar/typedef.js +8 -8
  93. package/dist/components/widgets/compare-left-right/CompareLeftRight.svelte +179 -179
  94. package/dist/components/widgets/compare-left-right/CompareLeftRight.svelte.d.ts +0 -10
  95. package/dist/components/widgets/compare-left-right/index.js +1 -1
  96. package/dist/components/widgets/scale-control/index.js +1 -1
  97. package/dist/config/imagetools-config.js +189 -189
  98. package/dist/config/imagetools.d.ts +71 -71
  99. package/dist/config/typedef.js +8 -8
  100. package/dist/constants/errors/api.js +9 -9
  101. package/dist/constants/errors/generic.js +5 -5
  102. package/dist/constants/errors/index.js +3 -3
  103. package/dist/constants/errors/jwt.js +5 -5
  104. package/dist/constants/http/headers.js +6 -6
  105. package/dist/constants/http/index.js +2 -2
  106. package/dist/constants/http/methods.js +2 -2
  107. package/dist/constants/index.js +3 -3
  108. package/dist/constants/mime/application.js +5 -5
  109. package/dist/constants/mime/audio.js +13 -13
  110. package/dist/constants/mime/image.js +3 -3
  111. package/dist/constants/mime/index.js +4 -4
  112. package/dist/constants/mime/text.js +2 -2
  113. package/dist/constants/regexp/index.js +31 -31
  114. package/dist/constants/regexp/inspiratie.js__ +95 -95
  115. package/dist/constants/regexp/text.js +49 -49
  116. package/dist/constants/regexp/user.js +32 -32
  117. package/dist/constants/regexp/web.js +3 -3
  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/tw-prose.postcss__ +259 -259
  122. package/dist/css/utilities.postcss +43 -43
  123. package/dist/{design-system → design}/design-config.js +73 -73
  124. package/dist/{design-system → design}/tailwind-theme-extend.d.ts +4 -4
  125. package/dist/{design-system → design}/tailwind-theme-extend.js +151 -151
  126. package/dist/schemas/index.js +1 -1
  127. package/dist/schemas/validate-url.js +180 -180
  128. package/dist/server/index.js +1 -1
  129. package/dist/server/logger.js +94 -94
  130. package/dist/states/index.js +1 -1
  131. package/dist/states/navigation.svelte.js +55 -55
  132. package/dist/stores/index.js +1 -1
  133. package/dist/stores/theme.js +80 -80
  134. package/dist/themes/hkdev/components/blocks/text-block.postcss +40 -40
  135. package/dist/themes/hkdev/components/boxes/game-box.postcss +13 -13
  136. package/dist/themes/hkdev/components/buttons/button-text.postcss +34 -34
  137. package/dist/themes/hkdev/components/buttons/button.postcss +138 -138
  138. package/dist/themes/hkdev/components/buttons/skip-button.postcss +8 -8
  139. package/dist/themes/hkdev/components/inputs/text-input.postcss +108 -108
  140. package/dist/themes/hkdev/components/panels/plain-panel.postcss +46 -46
  141. package/dist/themes/hkdev/components/panels/speech-bubble.postcss +52 -52
  142. package/dist/themes/hkdev/components/rows/panel-grid-row.postcss +7 -7
  143. package/dist/themes/hkdev/components/rows/panel-row-2.postcss +9 -9
  144. package/dist/themes/hkdev/components.postcss +55 -55
  145. package/dist/themes/hkdev/debug.postcss +1 -1
  146. package/dist/themes/hkdev/global/layout.postcss +39 -39
  147. package/dist/themes/hkdev/global/on-colors.postcss +53 -53
  148. package/dist/themes/hkdev/global/text.postcss__ +34 -34
  149. package/dist/themes/hkdev/global/vars.postcss__ +7 -7
  150. package/dist/themes/hkdev/globals.postcss +11 -11
  151. package/dist/themes/hkdev/responsive.postcss +12 -12
  152. package/dist/themes/hkdev/theme-ext.js +15 -15
  153. package/dist/themes/hkdev/theme.js +227 -227
  154. package/dist/themes/index.js +1 -1
  155. package/dist/util/array/index.js +455 -455
  156. package/dist/util/compare/index.js +247 -247
  157. package/dist/util/css/css-vars.js +83 -83
  158. package/dist/util/css/index.js +1 -1
  159. package/dist/util/design-system/components/states.js +22 -22
  160. package/dist/util/design-system/css/clamp.d.ts +2 -2
  161. package/dist/util/design-system/css/clamp.js +66 -66
  162. package/dist/util/design-system/css/root-design-vars.js +100 -100
  163. package/dist/util/design-system/index.js +5 -5
  164. package/dist/util/design-system/layout/scaling.js +97 -97
  165. package/dist/util/design-system/tailwind.js +289 -289
  166. package/dist/util/expect/arrays.js +47 -47
  167. package/dist/util/expect/index.js +259 -259
  168. package/dist/util/expect/primitives.js +55 -55
  169. package/dist/util/expect/url.js +60 -60
  170. package/dist/util/function/index.js +218 -218
  171. package/dist/util/http/errors.js +97 -97
  172. package/dist/util/http/headers.js +45 -45
  173. package/dist/util/http/http-request.js +273 -273
  174. package/dist/util/http/index.js +22 -22
  175. package/dist/util/http/json-request.js +143 -143
  176. package/dist/util/http/mocks.js +65 -65
  177. package/dist/util/http/response.js +228 -228
  178. package/dist/util/http/url.js +52 -52
  179. package/dist/util/image/index.js +86 -86
  180. package/dist/util/index.js +2 -2
  181. package/dist/util/is/index.js +140 -140
  182. package/dist/util/iterate/index.js +234 -234
  183. package/dist/util/object/index.js +1361 -1361
  184. package/dist/util/singleton/index.js +97 -97
  185. package/dist/util/string/index.js +184 -184
  186. package/dist/util/svelte/index.js +2 -2
  187. package/dist/util/svelte/observe/index.js +49 -49
  188. package/dist/util/svelte/state-context/index.js +83 -83
  189. package/dist/util/svelte/wait/index.js +38 -38
  190. package/dist/util/sveltekit/index.js +1 -1
  191. package/dist/util/sveltekit/route-folders/index.js +82 -82
  192. package/dist/util/time/index.js +339 -339
  193. package/dist/valibot/date.js__ +10 -10
  194. package/dist/valibot/index.js +9 -9
  195. package/dist/valibot/url.js +95 -95
  196. package/dist/valibot/user.js +23 -23
  197. package/dist/zod/all.js +33 -33
  198. package/dist/zod/generic.js +11 -11
  199. package/dist/zod/javascript.js +32 -32
  200. package/dist/zod/user.js +16 -16
  201. package/dist/zod/web.js +52 -52
  202. package/package.json +99 -99
  203. package/dist/themes/hkdev/components/buttons/button.postcss__ +0 -40
  204. package/dist/themes/hkdev/components/buttons/button.postcss___ +0 -91
  205. /package/dist/classes/{svkit → svelte}/audio/AudioLoader.svelte.d.ts +0 -0
  206. /package/dist/classes/{svkit → svelte}/audio/AudioScene.svelte.d.ts +0 -0
  207. /package/dist/classes/{svkit → svelte}/audio/mocks.d.ts +0 -0
  208. /package/dist/classes/{svkit → svelte}/final-state-machine/FiniteStateMachine.svelte.d.ts +0 -0
  209. /package/dist/classes/{svkit → svelte}/final-state-machine/index.d.ts +0 -0
  210. /package/dist/classes/{svkit → svelte}/image/ImageLoader.svelte.d.ts +0 -0
  211. /package/dist/classes/{svkit → svelte}/image/ImageScene.svelte.d.ts +0 -0
  212. /package/dist/classes/{svkit → svelte}/image/ImageVariantsLoader.svelte.d.ts +0 -0
  213. /package/dist/classes/{svkit → svelte}/image/index.d.ts +0 -0
  214. /package/dist/classes/{svkit → svelte}/image/mocks.d.ts +0 -0
  215. /package/dist/classes/{svkit → svelte}/image/typedef.d.ts +0 -0
  216. /package/dist/classes/{svkit → svelte}/loading-state-machine/LoadingStateMachine.svelte.d.ts +0 -0
  217. /package/dist/classes/{svkit → svelte}/loading-state-machine/constants.d.ts +0 -0
  218. /package/dist/classes/{svkit → svelte}/loading-state-machine/index.d.ts +0 -0
  219. /package/dist/classes/{svkit → svelte}/network-loader/NetworkLoader.svelte.d.ts +0 -0
  220. /package/dist/classes/{svkit → svelte}/network-loader/constants.d.ts +0 -0
  221. /package/dist/classes/{svkit → svelte}/network-loader/index.d.ts +0 -0
  222. /package/dist/classes/{svkit → svelte}/network-loader/mocks.d.ts +0 -0
  223. /package/dist/classes/{svkit → svelte}/network-loader/typedef.d.ts +0 -0
  224. /package/dist/{design-system → design}/design-config.d.ts +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';