@hkdigital/lib-sveltekit 0.1.62 → 0.1.65
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 +135 -135
- package/dist/assets/autospuiten/car-paint-picker.js +41 -41
- package/dist/assets/autospuiten/labels.js +7 -7
- 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 +4 -4
- 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 +295 -295
- package/dist/classes/svelte/audio/mocks.js +35 -35
- package/dist/classes/svelte/finite-state-machine/FiniteStateMachine.svelte.js +133 -133
- package/dist/classes/svelte/finite-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/index.js +14 -14
- 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/HkGridArea.svelte +77 -77
- package/dist/components/area/index.js +2 -2
- package/dist/components/buttons/button/Button.svelte +82 -82
- package/dist/components/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
- package/dist/components/buttons/button-text/TextButton.svelte +21 -21
- package/dist/components/buttons/index.js +3 -3
- package/dist/components/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
- package/dist/components/debug/index.js +1 -1
- package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
- package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
- package/dist/components/icons/HkIcon.svelte +86 -86
- package/dist/components/icons/HkTabIcon.svelte +116 -116
- package/dist/components/icons/SteezeIcon.svelte +97 -97
- package/dist/components/icons/index.js +6 -6
- package/dist/components/icons/typedef.js +16 -16
- 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 +223 -223
- 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/grid-layers/GridLayers.svelte +167 -167
- package/dist/components/layout/index.js +1 -1
- package/dist/components/panels/index.js +1 -1
- package/dist/components/panels/panel/Panel.svelte +43 -43
- package/dist/components/rows/index.js +3 -3
- package/dist/components/rows/panel-grid-row/PanelGridRow.svelte +104 -104
- package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
- 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/HkTabBarSelector.state.svelte.js +93 -93
- package/dist/components/tab-bar/HkTabBarSelector.svelte +49 -49
- package/dist/components/tab-bar/index.js +17 -17
- package/dist/components/tab-bar/typedef.js +8 -8
- 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/bases.js +13 -13
- 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/utilities.css +43 -43
- package/dist/design/design-config.js +73 -73
- package/dist/design/tailwind-theme-extend.js +158 -158
- 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.css +41 -41
- package/dist/themes/hkdev/components/boxes/game-box.css +12 -12
- package/dist/themes/hkdev/components/buttons/button-icon-steeze.css +22 -22
- package/dist/themes/hkdev/components/buttons/button-text.css +32 -32
- package/dist/themes/hkdev/components/buttons/button.css +142 -142
- package/dist/themes/hkdev/components/buttons/skip-button.css +6 -6
- package/dist/themes/hkdev/components/icons/icon-steeze.css +22 -22
- package/dist/themes/hkdev/components/inputs/text-input.css +104 -104
- package/dist/themes/hkdev/components/panels/panel.css +27 -27
- package/dist/themes/hkdev/components/rows/panel-grid-row.css +6 -6
- package/dist/themes/hkdev/components/rows/panel-row-2.css +7 -7
- package/dist/themes/hkdev/components.css +47 -47
- package/dist/themes/hkdev/debug.css +1 -1
- package/dist/themes/hkdev/global/layout.css +39 -39
- package/dist/themes/hkdev/global/on-colors.css +53 -53
- package/dist/themes/hkdev/globals.css +11 -11
- package/dist/themes/hkdev/responsive.css +12 -12
- package/dist/themes/hkdev/theme-ext.js +15 -15
- package/dist/themes/hkdev/theme.js +235 -235
- package/dist/themes/index.js +1 -1
- package/dist/util/array/index.js +455 -455
- package/dist/util/bases/base58.js +262 -262
- package/dist/util/bases/index.js +1 -1
- 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.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 +228 -228
- package/dist/util/design-system/skeleton.js +208 -208
- package/dist/util/design-system/tailwind.js +288 -288
- 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 +294 -294
- 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 +241 -241
- package/dist/util/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
- 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/array-path.js +75 -75
- package/dist/util/string/convert.js +54 -54
- package/dist/util/string/fs.js +226 -226
- package/dist/util/string/index.js +5 -5
- package/dist/util/string/interpolate.js +61 -61
- package/dist/util/string/pad.js +10 -10
- package/dist/util/svelte/index.js +4 -4
- package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
- 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 +101 -101
- package/dist/util/time/index.js +323 -323
- package/dist/util/unique/index.js +249 -249
- 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/widgets/button-group/ButtonGroup.svelte +82 -94
- package/dist/widgets/button-group/ButtonGroup.svelte.d.ts +0 -2
- package/dist/widgets/button-group/typedef.js +10 -10
- package/dist/widgets/compare-left-right/CompareLeftRight.svelte +179 -179
- package/dist/widgets/compare-left-right/index.js +1 -1
- package/dist/widgets/game-box/GameBox.svelte +579 -186
- package/dist/widgets/game-box/GameBox.svelte.d.ts +64 -4
- package/dist/widgets/game-box/gamebox.util.js +83 -83
- package/dist/widgets/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
- package/dist/widgets/hk-app-layout/HkAppLayout.svelte +251 -251
- package/dist/widgets/image-box/ImageBox.svelte +212 -212
- package/dist/widgets/image-box/index.js +5 -5
- package/dist/widgets/image-box/typedef.js +32 -32
- package/dist/widgets/index.js +23 -23
- package/dist/widgets/presenter/(broken) Presenter.state.svelte.js__ +613 -0
- package/dist/widgets/presenter/ImageSlide.svelte +64 -64
- package/dist/widgets/presenter/Presenter.state.svelte.js +636 -636
- package/dist/widgets/presenter/Presenter.svelte +140 -140
- package/dist/widgets/presenter/Presenter.svelte__ +125 -0
- package/dist/widgets/presenter/constants.js +7 -7
- package/dist/widgets/presenter/index.js +10 -10
- package/dist/widgets/presenter/typedef.js +106 -106
- package/dist/widgets/presenter/util.js +210 -210
- package/dist/widgets/virtual-viewport/VirtualViewport.svelte +196 -196
- 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 +102 -102
@@ -1,262 +1,262 @@
|
|
1
|
-
/**
|
2
|
-
* base-58.js
|
3
|
-
*
|
4
|
-
* @description
|
5
|
-
* This file contains code for working with base 58 encoding
|
6
|
-
*
|
7
|
-
* @example
|
8
|
-
*
|
9
|
-
* import { base58fromNumber } from "./base-58.js";
|
10
|
-
*
|
11
|
-
* console.log( base58fromNumber( 1234513245 ) ) // base 58 encoded string
|
12
|
-
*/
|
13
|
-
|
14
|
-
/* ------------------------------------------------------------------ Imports */
|
15
|
-
|
16
|
-
import * as expect from '../expect';
|
17
|
-
|
18
|
-
/* ------------------------------------------------------------------ Exports */
|
19
|
-
|
20
|
-
// Base 58 helper functions
|
21
|
-
//
|
22
|
-
// Inspired by
|
23
|
-
// https://github.com/jimeh/node-base58/blob/master/src/base58.js
|
24
|
-
//
|
25
|
-
// @note
|
26
|
-
// Two different commonly used alphabets exist
|
27
|
-
//
|
28
|
-
// Bitcoin, IPFS (respects default sort order):
|
29
|
-
// 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
|
30
|
-
//
|
31
|
-
// Short URLs for Flickr
|
32
|
-
// 123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ
|
33
|
-
//
|
34
|
-
// @see https://en.wikipedia.org/wiki/StdBase58Helper
|
35
|
-
//
|
36
|
-
|
37
|
-
export const ALPHABET_BASE_58 =
|
38
|
-
'123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
39
|
-
|
40
|
-
//export
|
41
|
-
const BASE_SIZE = BigInt(ALPHABET_BASE_58.length);
|
42
|
-
|
43
|
-
// Create a lookup table to fetch character index
|
44
|
-
|
45
|
-
export const ALPHABET_BASE_58_MAP =
|
46
|
-
new Map( [...ALPHABET_BASE_58].map( ( char, index ) => [ char, index ] ) );
|
47
|
-
|
48
|
-
/**
|
49
|
-
* Convert a number to a base 58 encoded string
|
50
|
-
*
|
51
|
-
* @param {number|BigInt} num - Number to encode
|
52
|
-
*
|
53
|
-
* @returns {string} string encoded using base 58
|
54
|
-
*/
|
55
|
-
export function base58fromNumber( num )
|
56
|
-
{
|
57
|
-
let str = '';
|
58
|
-
|
59
|
-
if( typeof num !== 'bigint' )
|
60
|
-
{
|
61
|
-
if( Number.isNaN( num ) ||
|
62
|
-
num < 0 ||
|
63
|
-
num > Number.MAX_SAFE_INTEGER ||
|
64
|
-
Math.floor( num ) !== num )
|
65
|
-
{
|
66
|
-
throw new Error(
|
67
|
-
'Invalid parameter [num], expected not negative safe integer');
|
68
|
-
}
|
69
|
-
|
70
|
-
num = BigInt(num);
|
71
|
-
}
|
72
|
-
|
73
|
-
while( num >= BASE_SIZE )
|
74
|
-
{
|
75
|
-
const mod = Number(num % BASE_SIZE);
|
76
|
-
|
77
|
-
str = ALPHABET_BASE_58[ mod ] + str;
|
78
|
-
|
79
|
-
// num = Math.floor( num / BASE_SIZE );
|
80
|
-
//
|
81
|
-
num = num / BASE_SIZE; // BigInts are integers, automatically rounded down
|
82
|
-
}
|
83
|
-
|
84
|
-
return ALPHABET_BASE_58[ Number(num) ] + str;
|
85
|
-
}
|
86
|
-
|
87
|
-
/**
|
88
|
-
* Returns true if the specified string only contains base 58 characters
|
89
|
-
*
|
90
|
-
* @param {string} str [description]
|
91
|
-
*
|
92
|
-
* @returns {boolean} true if the string only contains base 58 characters
|
93
|
-
*/
|
94
|
-
export function isBase58( str )
|
95
|
-
{
|
96
|
-
expect.string( str );
|
97
|
-
|
98
|
-
for( let j = 0, n = str.length; j < n; j = j + 1 )
|
99
|
-
{
|
100
|
-
const char = str.charAt(j);
|
101
|
-
if( !ALPHABET_BASE_58_MAP.has( char ) )
|
102
|
-
{
|
103
|
-
return false;
|
104
|
-
}
|
105
|
-
} // end for
|
106
|
-
|
107
|
-
return true;
|
108
|
-
}
|
109
|
-
|
110
|
-
// -----------------------------------------------------------------------------
|
111
|
-
|
112
|
-
/**
|
113
|
-
* Convert a string encoded as base 58 to a number (BigInt)
|
114
|
-
*
|
115
|
-
* @param {string} str - String to decode
|
116
|
-
*
|
117
|
-
* @param {number} [exceptionValue]
|
118
|
-
* If specified, the exceptionValue will be returned instead of
|
119
|
-
* throwing an exception
|
120
|
-
*
|
121
|
-
* @returns {number} decoded decimal numerical representation
|
122
|
-
*/
|
123
|
-
export function base58toNumber( str, exceptionValue )
|
124
|
-
{
|
125
|
-
expect.string( str, 'Missing or invalid parameter [str]' );
|
126
|
-
|
127
|
-
let num = BigInt(0);
|
128
|
-
|
129
|
-
const n = str.length;
|
130
|
-
const n_1 = n - 1;
|
131
|
-
|
132
|
-
for( let j = 0; j < n; j = j + 1 )
|
133
|
-
{
|
134
|
-
const char = str.charAt(j);
|
135
|
-
const value = ALPHABET_BASE_58_MAP.get( char );
|
136
|
-
|
137
|
-
if( value === undefined )
|
138
|
-
{
|
139
|
-
if( 1 === arguments.length )
|
140
|
-
{
|
141
|
-
throw new Error(
|
142
|
-
`Invalid character [${char}] found in string (expected base58`);
|
143
|
-
}
|
144
|
-
else {
|
145
|
-
return exceptionValue;
|
146
|
-
}
|
147
|
-
}
|
148
|
-
|
149
|
-
num = num + BigInt(value) * BigInt(58) ** BigInt( n_1 - j );
|
150
|
-
|
151
|
-
// console.log("num", num );
|
152
|
-
|
153
|
-
} // end for
|
154
|
-
|
155
|
-
return num;
|
156
|
-
}
|
157
|
-
|
158
|
-
// -----------------------------------------------------------------------------
|
159
|
-
|
160
|
-
/**
|
161
|
-
* Convert a base58 encoded string to an Uint8Array (bytes)
|
162
|
-
* - A base58 encoded string actually represents a (potentially very big)
|
163
|
-
* number. This method converts that number into a bytes representation
|
164
|
-
* - A byte can hold 256 values, a base58 character only 58, so there will be
|
165
|
-
* less bytes needed to encode the value of the base58 encoded string
|
166
|
-
*
|
167
|
-
* @param {string} str - String to convert
|
168
|
-
*
|
169
|
-
* @returns {Uint8Array} bytes that represent the base58 encoded string value
|
170
|
-
*/
|
171
|
-
export function base58toBytes( str )
|
172
|
-
{
|
173
|
-
const num = base58toNumber( str );
|
174
|
-
|
175
|
-
let numBase16 = num.toString(16);
|
176
|
-
|
177
|
-
if( 1 === numBase16.length % 2 )
|
178
|
-
{
|
179
|
-
//
|
180
|
-
// String contains inpair number of characters -> prefix a "0"
|
181
|
-
//
|
182
|
-
numBase16 = '0' + numBase16;
|
183
|
-
}
|
184
|
-
|
185
|
-
const n = numBase16.length;
|
186
|
-
|
187
|
-
const out = new Uint8Array( numBase16.length >> 1 );
|
188
|
-
|
189
|
-
for( let j = n - 1; j > 0; j = j - 2 )
|
190
|
-
{
|
191
|
-
const low16 = parseInt( numBase16[ j ], 16 );
|
192
|
-
const high16 = parseInt( numBase16[ j - 1 ], 16 );
|
193
|
-
|
194
|
-
// // const low16 = (j < n_1) ? parseInt(numBase16[ j + 1 ], 10) : 0;
|
195
|
-
|
196
|
-
// const low16 = (j < n_1) ? parseInt( numBase16[ j + 1 ], 16 ) : 0;
|
197
|
-
|
198
|
-
const value256 = (high16 << 4) + low16;
|
199
|
-
|
200
|
-
out[ j >> 1 ] = value256;
|
201
|
-
|
202
|
-
// console.log(
|
203
|
-
// {
|
204
|
-
// numBase16,
|
205
|
-
// n,
|
206
|
-
// j,
|
207
|
-
// high16,
|
208
|
-
// low16,
|
209
|
-
// value256,
|
210
|
-
// out
|
211
|
-
// } );
|
212
|
-
|
213
|
-
} // end for
|
214
|
-
|
215
|
-
return out;
|
216
|
-
}
|
217
|
-
|
218
|
-
// -----------------------------------------------------------------------------
|
219
|
-
|
220
|
-
/**
|
221
|
-
* Convert a base58 encoded string to a (base256) byte string
|
222
|
-
*
|
223
|
-
* @param {string} str
|
224
|
-
*
|
225
|
-
* @returns {string} byte string
|
226
|
-
*/
|
227
|
-
export function base58toByteString( str )
|
228
|
-
{
|
229
|
-
return new TextDecoder().decode( base58toBytes( str ) );
|
230
|
-
}
|
231
|
-
|
232
|
-
// -----------------------------------------------------------------------------
|
233
|
-
|
234
|
-
/**
|
235
|
-
* Convert bytes to number
|
236
|
-
*
|
237
|
-
* @param {Uint8Array} bytes
|
238
|
-
*
|
239
|
-
* @returns {BigInt} numeric value
|
240
|
-
*/
|
241
|
-
export function bytesToNumber( bytes )
|
242
|
-
{
|
243
|
-
let sum = BigInt(0);
|
244
|
-
|
245
|
-
// console.log( "check", bytes.length );
|
246
|
-
|
247
|
-
for( let j = 0, n = bytes.length; j < n; j = j + 1 )
|
248
|
-
{
|
249
|
-
const base = BigInt(256) ** BigInt( n - 1 - j );
|
250
|
-
const value = bytes[ j ];
|
251
|
-
|
252
|
-
// console.log(
|
253
|
-
// {
|
254
|
-
// base,
|
255
|
-
// value
|
256
|
-
// } );
|
257
|
-
|
258
|
-
sum = sum + base * BigInt( value );
|
259
|
-
}
|
260
|
-
|
261
|
-
return sum;
|
262
|
-
}
|
1
|
+
/**
|
2
|
+
* base-58.js
|
3
|
+
*
|
4
|
+
* @description
|
5
|
+
* This file contains code for working with base 58 encoding
|
6
|
+
*
|
7
|
+
* @example
|
8
|
+
*
|
9
|
+
* import { base58fromNumber } from "./base-58.js";
|
10
|
+
*
|
11
|
+
* console.log( base58fromNumber( 1234513245 ) ) // base 58 encoded string
|
12
|
+
*/
|
13
|
+
|
14
|
+
/* ------------------------------------------------------------------ Imports */
|
15
|
+
|
16
|
+
import * as expect from '../expect';
|
17
|
+
|
18
|
+
/* ------------------------------------------------------------------ Exports */
|
19
|
+
|
20
|
+
// Base 58 helper functions
|
21
|
+
//
|
22
|
+
// Inspired by
|
23
|
+
// https://github.com/jimeh/node-base58/blob/master/src/base58.js
|
24
|
+
//
|
25
|
+
// @note
|
26
|
+
// Two different commonly used alphabets exist
|
27
|
+
//
|
28
|
+
// Bitcoin, IPFS (respects default sort order):
|
29
|
+
// 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
|
30
|
+
//
|
31
|
+
// Short URLs for Flickr
|
32
|
+
// 123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ
|
33
|
+
//
|
34
|
+
// @see https://en.wikipedia.org/wiki/StdBase58Helper
|
35
|
+
//
|
36
|
+
|
37
|
+
export const ALPHABET_BASE_58 =
|
38
|
+
'123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
39
|
+
|
40
|
+
//export
|
41
|
+
const BASE_SIZE = BigInt(ALPHABET_BASE_58.length);
|
42
|
+
|
43
|
+
// Create a lookup table to fetch character index
|
44
|
+
|
45
|
+
export const ALPHABET_BASE_58_MAP =
|
46
|
+
new Map( [...ALPHABET_BASE_58].map( ( char, index ) => [ char, index ] ) );
|
47
|
+
|
48
|
+
/**
|
49
|
+
* Convert a number to a base 58 encoded string
|
50
|
+
*
|
51
|
+
* @param {number|BigInt} num - Number to encode
|
52
|
+
*
|
53
|
+
* @returns {string} string encoded using base 58
|
54
|
+
*/
|
55
|
+
export function base58fromNumber( num )
|
56
|
+
{
|
57
|
+
let str = '';
|
58
|
+
|
59
|
+
if( typeof num !== 'bigint' )
|
60
|
+
{
|
61
|
+
if( Number.isNaN( num ) ||
|
62
|
+
num < 0 ||
|
63
|
+
num > Number.MAX_SAFE_INTEGER ||
|
64
|
+
Math.floor( num ) !== num )
|
65
|
+
{
|
66
|
+
throw new Error(
|
67
|
+
'Invalid parameter [num], expected not negative safe integer');
|
68
|
+
}
|
69
|
+
|
70
|
+
num = BigInt(num);
|
71
|
+
}
|
72
|
+
|
73
|
+
while( num >= BASE_SIZE )
|
74
|
+
{
|
75
|
+
const mod = Number(num % BASE_SIZE);
|
76
|
+
|
77
|
+
str = ALPHABET_BASE_58[ mod ] + str;
|
78
|
+
|
79
|
+
// num = Math.floor( num / BASE_SIZE );
|
80
|
+
//
|
81
|
+
num = num / BASE_SIZE; // BigInts are integers, automatically rounded down
|
82
|
+
}
|
83
|
+
|
84
|
+
return ALPHABET_BASE_58[ Number(num) ] + str;
|
85
|
+
}
|
86
|
+
|
87
|
+
/**
|
88
|
+
* Returns true if the specified string only contains base 58 characters
|
89
|
+
*
|
90
|
+
* @param {string} str [description]
|
91
|
+
*
|
92
|
+
* @returns {boolean} true if the string only contains base 58 characters
|
93
|
+
*/
|
94
|
+
export function isBase58( str )
|
95
|
+
{
|
96
|
+
expect.string( str );
|
97
|
+
|
98
|
+
for( let j = 0, n = str.length; j < n; j = j + 1 )
|
99
|
+
{
|
100
|
+
const char = str.charAt(j);
|
101
|
+
if( !ALPHABET_BASE_58_MAP.has( char ) )
|
102
|
+
{
|
103
|
+
return false;
|
104
|
+
}
|
105
|
+
} // end for
|
106
|
+
|
107
|
+
return true;
|
108
|
+
}
|
109
|
+
|
110
|
+
// -----------------------------------------------------------------------------
|
111
|
+
|
112
|
+
/**
|
113
|
+
* Convert a string encoded as base 58 to a number (BigInt)
|
114
|
+
*
|
115
|
+
* @param {string} str - String to decode
|
116
|
+
*
|
117
|
+
* @param {number} [exceptionValue]
|
118
|
+
* If specified, the exceptionValue will be returned instead of
|
119
|
+
* throwing an exception
|
120
|
+
*
|
121
|
+
* @returns {number} decoded decimal numerical representation
|
122
|
+
*/
|
123
|
+
export function base58toNumber( str, exceptionValue )
|
124
|
+
{
|
125
|
+
expect.string( str, 'Missing or invalid parameter [str]' );
|
126
|
+
|
127
|
+
let num = BigInt(0);
|
128
|
+
|
129
|
+
const n = str.length;
|
130
|
+
const n_1 = n - 1;
|
131
|
+
|
132
|
+
for( let j = 0; j < n; j = j + 1 )
|
133
|
+
{
|
134
|
+
const char = str.charAt(j);
|
135
|
+
const value = ALPHABET_BASE_58_MAP.get( char );
|
136
|
+
|
137
|
+
if( value === undefined )
|
138
|
+
{
|
139
|
+
if( 1 === arguments.length )
|
140
|
+
{
|
141
|
+
throw new Error(
|
142
|
+
`Invalid character [${char}] found in string (expected base58`);
|
143
|
+
}
|
144
|
+
else {
|
145
|
+
return exceptionValue;
|
146
|
+
}
|
147
|
+
}
|
148
|
+
|
149
|
+
num = num + BigInt(value) * BigInt(58) ** BigInt( n_1 - j );
|
150
|
+
|
151
|
+
// console.log("num", num );
|
152
|
+
|
153
|
+
} // end for
|
154
|
+
|
155
|
+
return num;
|
156
|
+
}
|
157
|
+
|
158
|
+
// -----------------------------------------------------------------------------
|
159
|
+
|
160
|
+
/**
|
161
|
+
* Convert a base58 encoded string to an Uint8Array (bytes)
|
162
|
+
* - A base58 encoded string actually represents a (potentially very big)
|
163
|
+
* number. This method converts that number into a bytes representation
|
164
|
+
* - A byte can hold 256 values, a base58 character only 58, so there will be
|
165
|
+
* less bytes needed to encode the value of the base58 encoded string
|
166
|
+
*
|
167
|
+
* @param {string} str - String to convert
|
168
|
+
*
|
169
|
+
* @returns {Uint8Array} bytes that represent the base58 encoded string value
|
170
|
+
*/
|
171
|
+
export function base58toBytes( str )
|
172
|
+
{
|
173
|
+
const num = base58toNumber( str );
|
174
|
+
|
175
|
+
let numBase16 = num.toString(16);
|
176
|
+
|
177
|
+
if( 1 === numBase16.length % 2 )
|
178
|
+
{
|
179
|
+
//
|
180
|
+
// String contains inpair number of characters -> prefix a "0"
|
181
|
+
//
|
182
|
+
numBase16 = '0' + numBase16;
|
183
|
+
}
|
184
|
+
|
185
|
+
const n = numBase16.length;
|
186
|
+
|
187
|
+
const out = new Uint8Array( numBase16.length >> 1 );
|
188
|
+
|
189
|
+
for( let j = n - 1; j > 0; j = j - 2 )
|
190
|
+
{
|
191
|
+
const low16 = parseInt( numBase16[ j ], 16 );
|
192
|
+
const high16 = parseInt( numBase16[ j - 1 ], 16 );
|
193
|
+
|
194
|
+
// // const low16 = (j < n_1) ? parseInt(numBase16[ j + 1 ], 10) : 0;
|
195
|
+
|
196
|
+
// const low16 = (j < n_1) ? parseInt( numBase16[ j + 1 ], 16 ) : 0;
|
197
|
+
|
198
|
+
const value256 = (high16 << 4) + low16;
|
199
|
+
|
200
|
+
out[ j >> 1 ] = value256;
|
201
|
+
|
202
|
+
// console.log(
|
203
|
+
// {
|
204
|
+
// numBase16,
|
205
|
+
// n,
|
206
|
+
// j,
|
207
|
+
// high16,
|
208
|
+
// low16,
|
209
|
+
// value256,
|
210
|
+
// out
|
211
|
+
// } );
|
212
|
+
|
213
|
+
} // end for
|
214
|
+
|
215
|
+
return out;
|
216
|
+
}
|
217
|
+
|
218
|
+
// -----------------------------------------------------------------------------
|
219
|
+
|
220
|
+
/**
|
221
|
+
* Convert a base58 encoded string to a (base256) byte string
|
222
|
+
*
|
223
|
+
* @param {string} str
|
224
|
+
*
|
225
|
+
* @returns {string} byte string
|
226
|
+
*/
|
227
|
+
export function base58toByteString( str )
|
228
|
+
{
|
229
|
+
return new TextDecoder().decode( base58toBytes( str ) );
|
230
|
+
}
|
231
|
+
|
232
|
+
// -----------------------------------------------------------------------------
|
233
|
+
|
234
|
+
/**
|
235
|
+
* Convert bytes to number
|
236
|
+
*
|
237
|
+
* @param {Uint8Array} bytes
|
238
|
+
*
|
239
|
+
* @returns {BigInt} numeric value
|
240
|
+
*/
|
241
|
+
export function bytesToNumber( bytes )
|
242
|
+
{
|
243
|
+
let sum = BigInt(0);
|
244
|
+
|
245
|
+
// console.log( "check", bytes.length );
|
246
|
+
|
247
|
+
for( let j = 0, n = bytes.length; j < n; j = j + 1 )
|
248
|
+
{
|
249
|
+
const base = BigInt(256) ** BigInt( n - 1 - j );
|
250
|
+
const value = bytes[ j ];
|
251
|
+
|
252
|
+
// console.log(
|
253
|
+
// {
|
254
|
+
// base,
|
255
|
+
// value
|
256
|
+
// } );
|
257
|
+
|
258
|
+
sum = sum + base * BigInt( value );
|
259
|
+
}
|
260
|
+
|
261
|
+
return sum;
|
262
|
+
}
|
package/dist/util/bases/index.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export * from './base58.js';
|
1
|
+
export * from './base58.js';
|