@wener/utils 1.1.33 → 1.1.36
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/lib/arrays/MaybeArray.js +41 -0
- package/lib/arrays/MaybeArray.js.map +1 -0
- package/lib/arrays/arrayFromAsync.js +7 -0
- package/lib/arrays/arrayFromAsync.js.map +1 -0
- package/lib/asyncs/AsyncInterval.js +14 -0
- package/lib/asyncs/AsyncInterval.js.map +1 -0
- package/lib/asyncs/MaybePromise.js +3 -0
- package/lib/asyncs/MaybePromise.js.map +1 -0
- package/lib/asyncs/createAsyncIterator.js +41 -0
- package/lib/asyncs/createAsyncIterator.js.map +1 -0
- package/lib/asyncs/createLazyPromise.js +74 -0
- package/lib/asyncs/createLazyPromise.js.map +1 -0
- package/lib/asyncs/firstOfAsyncIterator.js +11 -0
- package/lib/asyncs/firstOfAsyncIterator.js.map +1 -0
- package/lib/asyncs/generatorOfStream.js +16 -0
- package/lib/asyncs/generatorOfStream.js.map +1 -0
- package/lib/asyncs/isIterator.js +5 -0
- package/lib/asyncs/isIterator.js.map +1 -0
- package/lib/asyncs/isPromise.js +5 -0
- package/lib/asyncs/isPromise.js.map +1 -0
- package/lib/asyncs/isThenable.js +6 -0
- package/lib/asyncs/isThenable.js.map +1 -0
- package/lib/asyncs/nextOfAsyncIterator.js +33 -0
- package/lib/asyncs/nextOfAsyncIterator.js.map +1 -0
- package/lib/asyncs/promiseOfCallback.js +17 -0
- package/lib/asyncs/promiseOfCallback.js.map +1 -0
- package/lib/asyncs/sleep.js +3 -0
- package/lib/asyncs/sleep.js.map +1 -0
- package/lib/asyncs/timeout.js +29 -0
- package/lib/asyncs/timeout.js.map +1 -0
- package/lib/browsers/copy.js +53 -0
- package/lib/browsers/copy.js.map +1 -0
- package/lib/browsers/download.js +41 -0
- package/lib/browsers/download.js.map +1 -0
- package/lib/browsers/getFileFromDataTransfer.js +45 -0
- package/lib/browsers/getFileFromDataTransfer.js.map +1 -0
- package/lib/browsers/loaders.js +49 -0
- package/lib/browsers/loaders.js.map +1 -0
- package/lib/cn/index.js +3 -0
- package/lib/cn/index.js.map +1 -0
- package/lib/cn/parseChineseNumber.js +94 -0
- package/lib/cn/parseChineseNumber.js.map +1 -0
- package/lib/crypto/base.js +7 -0
- package/lib/crypto/base.js.map +1 -0
- package/lib/crypto/getNodeCrypto.js +18 -0
- package/lib/crypto/getNodeCrypto.js.map +1 -0
- package/lib/crypto/getRandomValues.js +32 -0
- package/lib/crypto/getRandomValues.js.map +1 -0
- package/lib/crypto/hashing.js +57 -0
- package/lib/crypto/hashing.js.map +1 -0
- package/lib/crypto/md5.bench.js +21 -0
- package/lib/crypto/md5.bench.js.map +1 -0
- package/lib/crypto/md5.d.js +3 -0
- package/lib/crypto/md5.d.js.map +1 -0
- package/lib/crypto/md5.js +121 -0
- package/lib/crypto/md5.js.map +1 -0
- package/lib/crypto/pem/pem.js +35 -0
- package/lib/crypto/pem/pem.js.map +1 -0
- package/lib/crypto/randomUUID.js +16 -0
- package/lib/crypto/randomUUID.js.map +1 -0
- package/lib/crypto/ulid.js +153 -0
- package/lib/crypto/ulid.js.map +1 -0
- package/lib/errors/Errors.js +181 -0
- package/lib/errors/Errors.js.map +1 -0
- package/lib/fetch/createFetchWith.js +23 -0
- package/lib/fetch/createFetchWith.js.map +1 -0
- package/lib/fetch/createFetchWithLogging.js +25 -0
- package/lib/fetch/createFetchWithLogging.js.map +1 -0
- package/lib/fetch/createFetchWithRetry.js +66 -0
- package/lib/fetch/createFetchWithRetry.js.map +1 -0
- package/lib/fetch/dumpRequest.js +45 -0
- package/lib/fetch/dumpRequest.js.map +1 -0
- package/lib/fetch/dumpResponse.js +16 -0
- package/lib/fetch/dumpResponse.js.map +1 -0
- package/lib/fetch/index.js +7 -0
- package/lib/fetch/index.js.map +1 -0
- package/lib/fetch/types.js +3 -0
- package/lib/fetch/types.js.map +1 -0
- package/lib/http/HttpStatus.js +94 -0
- package/lib/http/HttpStatus.js.map +1 -0
- package/lib/i18n/createTranslate.js +54 -0
- package/lib/i18n/createTranslate.js.map +1 -0
- package/lib/index.js +83 -0
- package/lib/index.js.map +1 -0
- package/lib/io/AbstractEncoding.js +7 -0
- package/lib/io/AbstractEncoding.js.map +1 -0
- package/lib/io/ArrayBuffer.test-d.js +7 -0
- package/lib/io/ArrayBuffer.test-d.js.map +1 -0
- package/lib/io/ArrayBuffers.js +210 -0
- package/lib/io/ArrayBuffers.js.map +1 -0
- package/lib/io/Buffer.js +25 -0
- package/lib/io/Buffer.js.map +1 -0
- package/lib/io/Bytes.js +51 -0
- package/lib/io/Bytes.js.map +1 -0
- package/lib/io/base64.js +54 -0
- package/lib/io/base64.js.map +1 -0
- package/lib/io/isBuffer.js +9 -0
- package/lib/io/isBuffer.js.map +1 -0
- package/lib/io/isTransferable.js +30 -0
- package/lib/io/isTransferable.js.map +1 -0
- package/lib/isomorphics/getGlobalThis.js +19 -0
- package/lib/isomorphics/getGlobalThis.js.map +1 -0
- package/lib/isomorphics/structuredClone.js +78 -0
- package/lib/isomorphics/structuredClone.js.map +1 -0
- package/lib/langs/AsyncCloser.js +40 -0
- package/lib/langs/AsyncCloser.js.map +1 -0
- package/lib/langs/Closer.js +34 -0
- package/lib/langs/Closer.js.map +1 -0
- package/lib/langs/MaybeFunction.js +9 -0
- package/lib/langs/MaybeFunction.js.map +1 -0
- package/lib/langs/classOf.js +5 -0
- package/lib/langs/classOf.js.map +1 -0
- package/lib/langs/deepEqual.js +87 -0
- package/lib/langs/deepEqual.js.map +1 -0
- package/lib/langs/deepFreeze.js +20 -0
- package/lib/langs/deepFreeze.js.map +1 -0
- package/lib/langs/hashCode.ignored.js +112 -0
- package/lib/langs/hashCode.ignored.js.map +1 -0
- package/lib/langs/isClass.js +5 -0
- package/lib/langs/isClass.js.map +1 -0
- package/lib/langs/isDefined.js +5 -0
- package/lib/langs/isDefined.js.map +1 -0
- package/lib/langs/isEmptyObject.js +6 -0
- package/lib/langs/isEmptyObject.js.map +1 -0
- package/lib/langs/isFunction.js +5 -0
- package/lib/langs/isFunction.js.map +1 -0
- package/lib/langs/isPlainObject.js +10 -0
- package/lib/langs/isPlainObject.js.map +1 -0
- package/lib/langs/memoize.js +22 -0
- package/lib/langs/memoize.js.map +1 -0
- package/lib/langs/parseBoolean.js +30 -0
- package/lib/langs/parseBoolean.js.map +1 -0
- package/lib/langs/shallowClone.js +15 -0
- package/lib/langs/shallowClone.js.map +1 -0
- package/lib/langs/shallowEqual.js +24 -0
- package/lib/langs/shallowEqual.js.map +1 -0
- package/lib/libs/ms.js +137 -0
- package/lib/libs/ms.js.map +1 -0
- package/lib/logging/Logger.js +5 -0
- package/lib/logging/Logger.js.map +1 -0
- package/lib/logging/createChildLogger.js +16 -0
- package/lib/logging/createChildLogger.js.map +1 -0
- package/lib/logging/createLogger.js +63 -0
- package/lib/logging/createLogger.js.map +1 -0
- package/lib/logging/createNoopLogger.js +13 -0
- package/lib/logging/createNoopLogger.js.map +1 -0
- package/lib/logging/slog.js +143 -0
- package/lib/logging/slog.js.map +1 -0
- package/lib/maths/clamp.js +21 -0
- package/lib/maths/clamp.js.map +1 -0
- package/lib/maths/random.js +17 -0
- package/lib/maths/random.js.map +1 -0
- package/lib/modules/isModule.js +7 -0
- package/lib/modules/isModule.js.map +1 -0
- package/lib/modules/parseModuleId.js +39 -0
- package/lib/modules/parseModuleId.js.map +1 -0
- package/lib/objects/get.js +16 -0
- package/lib/objects/get.js.map +1 -0
- package/lib/objects/get.test-d.js +33 -0
- package/lib/objects/get.test-d.js.map +1 -0
- package/lib/objects/merge/index.js +3 -0
- package/lib/objects/merge/index.js.map +1 -0
- package/lib/objects/merge/isMergeableObject.js +19 -0
- package/lib/objects/merge/isMergeableObject.js.map +1 -0
- package/lib/objects/merge/merge.js +90 -0
- package/lib/objects/merge/merge.js.map +1 -0
- package/lib/objects/parseObjectPath.js +39 -0
- package/lib/objects/parseObjectPath.js.map +1 -0
- package/lib/objects/set.js +38 -0
- package/lib/objects/set.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/common/encoder.js +94 -0
- package/lib/schema/typebox/gen/codegen/common/encoder.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/common/formatter.js +33 -0
- package/lib/schema/typebox/gen/codegen/common/formatter.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/common/index.js +29 -0
- package/lib/schema/typebox/gen/codegen/common/index.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/common/jsdoc.js +117 -0
- package/lib/schema/typebox/gen/codegen/common/jsdoc.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/expression/compiler.js +364 -0
- package/lib/schema/typebox/gen/codegen/expression/compiler.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/expression/errors.js +259 -0
- package/lib/schema/typebox/gen/codegen/expression/errors.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/expression/evaluator.js +254 -0
- package/lib/schema/typebox/gen/codegen/expression/evaluator.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/expression/expression.js +381 -0
- package/lib/schema/typebox/gen/codegen/expression/expression.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/expression/index.js +32 -0
- package/lib/schema/typebox/gen/codegen/expression/index.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/index.js +29 -0
- package/lib/schema/typebox/gen/codegen/index.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/model/index.js +40 -0
- package/lib/schema/typebox/gen/codegen/model/index.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-arktype.js +260 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-arktype.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-expression.js +383 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-expression.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-grpc.js +238 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-grpc.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-io-ts.js +274 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-io-ts.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-javascript.js +47 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-javascript.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-json-schema.js +192 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-json-schema.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-typebox.js +33 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-typebox.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-typescript.js +188 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-typescript.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-valibot.js +239 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-valibot.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-value.js +43 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-value.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-yrel.js +227 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-yrel.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-yup.js +225 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-yup.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-zod.js +248 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-zod.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/model/model.js +27 -0
- package/lib/schema/typebox/gen/codegen/model/model.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/typescript/index.js +28 -0
- package/lib/schema/typebox/gen/codegen/typescript/index.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/typescript/typescript-to-model.js +72 -0
- package/lib/schema/typebox/gen/codegen/typescript/typescript-to-model.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/typescript/typescript-to-typebox.js +620 -0
- package/lib/schema/typebox/gen/codegen/typescript/typescript-to-typebox.js.map +1 -0
- package/lib/schema/typebox/gen/index.js +3 -0
- package/lib/schema/typebox/gen/index.js.map +1 -0
- package/lib/schema/typebox/index.js +3 -0
- package/lib/schema/typebox/index.js.map +1 -0
- package/lib/schema/typebox/typebox.js +23 -0
- package/lib/schema/typebox/typebox.js.map +1 -0
- package/lib/server/crypto/md5.js +6 -0
- package/lib/server/crypto/md5.js.map +1 -0
- package/lib/server/fetch/createFetchWithProxy.js +4 -0
- package/lib/server/fetch/createFetchWithProxy.js.map +1 -0
- package/lib/server/fetch/createFetchWithProxyByNodeFetch.js +38 -0
- package/lib/server/fetch/createFetchWithProxyByNodeFetch.js.map +1 -0
- package/lib/server/fetch/createFetchWithProxyByUndici.js +64 -0
- package/lib/server/fetch/createFetchWithProxyByUndici.js.map +1 -0
- package/lib/server/getPackageDir.js +16 -0
- package/lib/server/getPackageDir.js.map +1 -0
- package/lib/server/index.js +7 -0
- package/lib/server/index.js.map +1 -0
- package/lib/server/jsdom.js +3 -0
- package/lib/server/jsdom.js.map +1 -0
- package/lib/server/node-fetch.js +4 -0
- package/lib/server/node-fetch.js.map +1 -0
- package/lib/server/polyfill/polyfillBrowser.js +17 -0
- package/lib/server/polyfill/polyfillBrowser.js.map +1 -0
- package/lib/server/polyfill/polyfillCrypto.js +11 -0
- package/lib/server/polyfill/polyfillCrypto.js.map +1 -0
- package/lib/server/polyfill/polyfillFetch.js +25 -0
- package/lib/server/polyfill/polyfillFetch.js.map +1 -0
- package/lib/server/polyfill/polyfillJsDom.js +64 -0
- package/lib/server/polyfill/polyfillJsDom.js.map +1 -0
- package/lib/server/polyfill/polyfillWebSocket.js +21 -0
- package/lib/server/polyfill/polyfillWebSocket.js.map +1 -0
- package/lib/server/ws.js +3 -0
- package/lib/server/ws.js.map +1 -0
- package/lib/strings/camelCase.js +58 -0
- package/lib/strings/camelCase.js.map +1 -0
- package/lib/strings/formatBytes.js +43 -0
- package/lib/strings/formatBytes.js.map +1 -0
- package/lib/strings/renderTemplate.js +32 -0
- package/lib/strings/renderTemplate.js.map +1 -0
- package/lib/typedoc.js +4 -0
- package/lib/typedoc.js.map +1 -0
- package/lib/types.d.js +6 -0
- package/lib/types.d.js.map +1 -0
- package/lib/validations/asserts.js +14 -0
- package/lib/validations/asserts.js.map +1 -0
- package/lib/validations/isUUID.js +5 -0
- package/lib/validations/isUUID.js.map +1 -0
- package/lib/validations/parseTimestamp.js +29 -0
- package/lib/validations/parseTimestamp.js.map +1 -0
- package/package.json +1 -3
- package/src/asyncs/createLazyPromise.ts +10 -0
- package/src/server/polyfill/polyfillWebSocket.ts +1 -1
- package/dist/LICENSE.txt +0 -1
- package/dist/cjs/index.cjs +0 -21
- package/dist/cjs/index.cjs.map +0 -1
- package/dist/esm/index.js +0 -21
- package/dist/esm/index.js.map +0 -1
- package/dist/system/index.js +0 -21
- package/dist/system/index.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cn/index.ts"],"sourcesContent":["export { parseChineseNumber } from './parseChineseNumber';\n"],"names":["parseChineseNumber"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,uBAAuB"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
const ToNumber = {
|
|
2
|
+
〇: 0,
|
|
3
|
+
一: 1,
|
|
4
|
+
二: 2,
|
|
5
|
+
三: 3,
|
|
6
|
+
四: 4,
|
|
7
|
+
五: 5,
|
|
8
|
+
六: 6,
|
|
9
|
+
七: 7,
|
|
10
|
+
八: 8,
|
|
11
|
+
九: 9,
|
|
12
|
+
十: 10,
|
|
13
|
+
百: 100,
|
|
14
|
+
千: 1000,
|
|
15
|
+
万: 10_000,
|
|
16
|
+
零: 0,
|
|
17
|
+
壹: 1,
|
|
18
|
+
贰: 2,
|
|
19
|
+
叁: 3,
|
|
20
|
+
肆: 4,
|
|
21
|
+
伍: 5,
|
|
22
|
+
陆: 6,
|
|
23
|
+
柒: 7,
|
|
24
|
+
捌: 8,
|
|
25
|
+
玖: 9,
|
|
26
|
+
拾: 10,
|
|
27
|
+
佰: 100,
|
|
28
|
+
仟: 1000,
|
|
29
|
+
0: 0,
|
|
30
|
+
1: 1,
|
|
31
|
+
2: 2,
|
|
32
|
+
3: 3,
|
|
33
|
+
4: 4,
|
|
34
|
+
5: 5,
|
|
35
|
+
6: 6,
|
|
36
|
+
7: 7,
|
|
37
|
+
8: 8,
|
|
38
|
+
9: 9
|
|
39
|
+
};
|
|
40
|
+
// 一万一 -> 10001
|
|
41
|
+
// 一万一百一 -> 10101
|
|
42
|
+
// 一万 -> 10000
|
|
43
|
+
// 10000 -> 10000
|
|
44
|
+
export function parseChineseNumber(s) {
|
|
45
|
+
if (typeof s === 'number') {
|
|
46
|
+
return s;
|
|
47
|
+
}
|
|
48
|
+
let n = 0;
|
|
49
|
+
let c = 0;
|
|
50
|
+
let base = 0;
|
|
51
|
+
let shouldAddLast = false;
|
|
52
|
+
for (const char of s.split('').reverse()){
|
|
53
|
+
c = ToNumber[char];
|
|
54
|
+
if (c === undefined) {
|
|
55
|
+
throw new Error(`无法解析的数字: ${char}`);
|
|
56
|
+
}
|
|
57
|
+
switch(c){
|
|
58
|
+
case 10:
|
|
59
|
+
{
|
|
60
|
+
base = 1;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
case 100:
|
|
64
|
+
{
|
|
65
|
+
base = 2;
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
case 1000:
|
|
69
|
+
{
|
|
70
|
+
base = 3;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case 10_000:
|
|
74
|
+
{
|
|
75
|
+
base = 4;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//
|
|
80
|
+
if (c < 10) {
|
|
81
|
+
n += c * 10 ** base;
|
|
82
|
+
base++;
|
|
83
|
+
shouldAddLast = false;
|
|
84
|
+
} else {
|
|
85
|
+
shouldAddLast = true;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (shouldAddLast) {
|
|
89
|
+
n += c;
|
|
90
|
+
}
|
|
91
|
+
return n;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
//# sourceMappingURL=parseChineseNumber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cn/parseChineseNumber.ts"],"sourcesContent":["const ToNumber: Record<string, number> = {\n 〇: 0,\n 一: 1,\n 二: 2,\n 三: 3,\n 四: 4,\n 五: 5,\n 六: 6,\n 七: 7,\n 八: 8,\n 九: 9,\n 十: 10,\n 百: 100,\n 千: 1000,\n 万: 10_000,\n 零: 0,\n 壹: 1,\n 贰: 2,\n 叁: 3,\n 肆: 4,\n 伍: 5,\n 陆: 6,\n 柒: 7,\n 捌: 8,\n 玖: 9,\n 拾: 10,\n 佰: 100,\n 仟: 1000,\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3,\n 4: 4,\n 5: 5,\n 6: 6,\n 7: 7,\n 8: 8,\n 9: 9,\n};\n\n// 一万一 -> 10001\n// 一万一百一 -> 10101\n// 一万 -> 10000\n// 10000 -> 10000\nexport function parseChineseNumber(s: string | number) {\n if (typeof s === 'number') {\n return s;\n }\n\n let n = 0;\n let c = 0;\n let base = 0;\n let shouldAddLast = false;\n for (const char of s.split('').reverse()) {\n c = ToNumber[char];\n if (c === undefined) {\n throw new Error(`无法解析的数字: ${char}`);\n }\n\n switch (c) {\n case 10: {\n base = 1;\n break;\n }\n\n case 100: {\n base = 2;\n break;\n }\n\n case 1000: {\n base = 3;\n break;\n }\n\n case 10_000: {\n base = 4;\n break;\n }\n }\n\n //\n if (c < 10) {\n n += c * 10 ** base;\n base++;\n shouldAddLast = false;\n } else {\n shouldAddLast = true;\n }\n }\n\n if (shouldAddLast) {\n n += c;\n }\n\n return n;\n}\n"],"names":["ToNumber","〇","一","二","三","四","五","六","七","八","九","十","百","千","万","零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾","佰","仟","parseChineseNumber","s","n","c","base","shouldAddLast","char","split","reverse","undefined","Error"],"mappings":"AAAA,MAAMA,WAAmC;IACvCC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;AACL;AAEA,eAAe;AACf,iBAAiB;AACjB,cAAc;AACd,iBAAiB;AACjB,OAAO,SAASC,mBAAmBC,CAAkB;IACnD,IAAI,OAAOA,MAAM,UAAU;QACzB,OAAOA;IACT;IAEA,IAAIC,IAAI;IACR,IAAIC,IAAI;IACR,IAAIC,OAAO;IACX,IAAIC,gBAAgB;IACpB,KAAK,MAAMC,QAAQL,EAAEM,KAAK,CAAC,IAAIC,OAAO,GAAI;QACxCL,IAAI/B,QAAQ,CAACkC,KAAK;QAClB,IAAIH,MAAMM,WAAW;YACnB,MAAM,IAAIC,MAAM,CAAC,SAAS,EAAEJ,KAAK,CAAC;QACpC;QAEA,OAAQH;YACN,KAAK;gBAAI;oBACPC,OAAO;oBACP;gBACF;YAEA,KAAK;gBAAK;oBACRA,OAAO;oBACP;gBACF;YAEA,KAAK;gBAAM;oBACTA,OAAO;oBACP;gBACF;YAEA,KAAK;gBAAQ;oBACXA,OAAO;oBACP;gBACF;QACF;QAEA,EAAE;QACF,IAAID,IAAI,IAAI;YACVD,KAAKC,IAAI,MAAMC;YACfA;YACAC,gBAAgB;QAClB,OAAO;YACLA,gBAAgB;QAClB;IACF;IAEA,IAAIA,eAAe;QACjBH,KAAKC;IACP;IAEA,OAAOD;AACT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/crypto/base.ts"],"sourcesContent":["/**\n * hex string\n */\nexport function hex(s: Uint8Array | ArrayBuffer) {\n return Array.from(new Uint8Array(s))\n .map((v) => v.toString(16).padStart(2, '0'))\n .join('');\n}\n"],"names":["hex","s","Array","from","Uint8Array","map","v","toString","padStart","join"],"mappings":"AAAA;;CAEC,GACD,OAAO,SAASA,IAAIC,CAA2B;IAC7C,OAAOC,MAAMC,IAAI,CAAC,IAAIC,WAAWH,IAC9BI,GAAG,CAAC,CAACC,IAAMA,EAAEC,QAAQ,CAAC,IAAIC,QAAQ,CAAC,GAAG,MACtCC,IAAI,CAAC;AACV"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
let nodeCrypto;
|
|
2
|
+
// globalThis.process?.release?.name
|
|
3
|
+
// avoid process.browser
|
|
4
|
+
if (typeof window === 'undefined') {
|
|
5
|
+
try {
|
|
6
|
+
// avoid `node:` UnhandledSchemeError https://github.com/vercel/next.js/issues/28774
|
|
7
|
+
if (typeof require === 'undefined') {
|
|
8
|
+
void import('crypto').then((v)=>nodeCrypto = v.default);
|
|
9
|
+
} else {
|
|
10
|
+
nodeCrypto = require('crypto');
|
|
11
|
+
}
|
|
12
|
+
} catch (e) {}
|
|
13
|
+
}
|
|
14
|
+
export function getNodeCrypto() {
|
|
15
|
+
return nodeCrypto;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=getNodeCrypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/crypto/getNodeCrypto.ts"],"sourcesContent":["let nodeCrypto: Awaited<typeof import('node:crypto')>;\n// globalThis.process?.release?.name\n\n// avoid process.browser\nif (typeof window === 'undefined') {\n try {\n // avoid `node:` UnhandledSchemeError https://github.com/vercel/next.js/issues/28774\n if (typeof require === 'undefined') {\n void import('crypto').then((v) => (nodeCrypto = v.default));\n } else {\n nodeCrypto = require('crypto');\n }\n } catch (e) {}\n}\nexport function getNodeCrypto() {\n return nodeCrypto;\n}\n"],"names":["nodeCrypto","window","require","then","v","default","e","getNodeCrypto"],"mappings":"AAAA,IAAIA;AACJ,oCAAoC;AAEpC,wBAAwB;AACxB,IAAI,OAAOC,WAAW,aAAa;IACjC,IAAI;QACF,oFAAoF;QACpF,IAAI,OAAOC,YAAY,aAAa;YAClC,KAAK,MAAM,CAAC,UAAUC,IAAI,CAAC,CAACC,IAAOJ,aAAaI,EAAEC,OAAO;QAC3D,OAAO;YACLL,aAAaE,QAAQ;QACvB;IACF,EAAE,OAAOI,GAAG,CAAC;AACf;AACA,OAAO,SAASC;IACd,OAAOP;AACT"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
|
|
2
|
+
import { getGlobalThis } from '../isomorphics/getGlobalThis.js';
|
|
3
|
+
import { getNodeCrypto } from './getNodeCrypto.js';
|
|
4
|
+
const globalThis = getGlobalThis();
|
|
5
|
+
export let getRandomValues = globalThis.crypto?.getRandomValues?.bind(globalThis.crypto) || globalThis.msCrypto?.getRandomValues?.bind(globalThis.msCrypto) || _getRandomValues;
|
|
6
|
+
function _getRandomValues(buf) {
|
|
7
|
+
const nodeCrypto = getNodeCrypto();
|
|
8
|
+
// avoid type error
|
|
9
|
+
let wc = nodeCrypto?.webcrypto;
|
|
10
|
+
if (wc?.getRandomValues) {
|
|
11
|
+
getRandomValues = wc.getRandomValues?.bind(nodeCrypto?.webcrypto);
|
|
12
|
+
return wc.getRandomValues(buf);
|
|
13
|
+
}
|
|
14
|
+
if (nodeCrypto?.randomBytes) {
|
|
15
|
+
if (!(buf instanceof Uint8Array)) {
|
|
16
|
+
throw new TypeError('expected Uint8Array');
|
|
17
|
+
}
|
|
18
|
+
if (buf.length > 65536) {
|
|
19
|
+
const e = new Error();
|
|
20
|
+
e.code = 22;
|
|
21
|
+
e.message = `Failed to execute 'getRandomValues' on 'Crypto': The ArrayBufferView's byte length (${buf.length}) exceeds the number of bytes of entropy available via this API (65536).`;
|
|
22
|
+
e.name = 'QuotaExceededError';
|
|
23
|
+
throw e;
|
|
24
|
+
}
|
|
25
|
+
const bytes = nodeCrypto.randomBytes(buf.length);
|
|
26
|
+
buf.set(bytes);
|
|
27
|
+
return buf;
|
|
28
|
+
}
|
|
29
|
+
throw new Error('[getRandomValues]: No secure random number generator available.');
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=getRandomValues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/crypto/getRandomValues.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport type { TypedArray } from '../io/ArrayBuffers';\nimport { getGlobalThis } from '../isomorphics/getGlobalThis';\nimport { getNodeCrypto } from './getNodeCrypto';\n\nconst globalThis = getGlobalThis();\nexport let getRandomValues: <T extends Exclude<TypedArray, Float32Array | Float64Array>>(typedArray: T) => T =\n globalThis.crypto?.getRandomValues?.bind(globalThis.crypto) ||\n (globalThis as any).msCrypto?.getRandomValues?.bind((globalThis as any).msCrypto) ||\n _getRandomValues;\n\nfunction _getRandomValues<T extends Exclude<TypedArray, Float32Array | Float64Array>>(buf: T) {\n const nodeCrypto = getNodeCrypto();\n // avoid type error\n let wc = nodeCrypto?.webcrypto as any;\n if (wc?.getRandomValues) {\n getRandomValues = wc.getRandomValues?.bind(nodeCrypto?.webcrypto);\n return wc.getRandomValues(buf);\n }\n if (nodeCrypto?.randomBytes) {\n if (!(buf instanceof Uint8Array)) {\n throw new TypeError('expected Uint8Array');\n }\n if (buf.length > 65536) {\n const e: any = new Error();\n e.code = 22;\n e.message = `Failed to execute 'getRandomValues' on 'Crypto': The ArrayBufferView's byte length (${buf.length}) exceeds the number of bytes of entropy available via this API (65536).`;\n e.name = 'QuotaExceededError';\n throw e;\n }\n const bytes = nodeCrypto.randomBytes(buf.length);\n buf.set(bytes);\n return buf;\n }\n throw new Error('[getRandomValues]: No secure random number generator available.');\n}\n"],"names":["getGlobalThis","getNodeCrypto","globalThis","getRandomValues","crypto","bind","msCrypto","_getRandomValues","buf","nodeCrypto","wc","webcrypto","randomBytes","Uint8Array","TypeError","length","e","Error","code","message","name","bytes","set"],"mappings":"AAAA,sEAAsE;AAEtE,SAASA,aAAa,QAAQ,+BAA+B;AAC7D,SAASC,aAAa,QAAQ,kBAAkB;AAEhD,MAAMC,aAAaF;AACnB,OAAO,IAAIG,kBACTD,WAAWE,MAAM,EAAED,iBAAiBE,KAAKH,WAAWE,MAAM,KAC1D,AAACF,WAAmBI,QAAQ,EAAEH,iBAAiBE,KAAK,AAACH,WAAmBI,QAAQ,KAChFC,iBAAiB;AAEnB,SAASA,iBAA6EC,GAAM;IAC1F,MAAMC,aAAaR;IACnB,mBAAmB;IACnB,IAAIS,KAAKD,YAAYE;IACrB,IAAID,IAAIP,iBAAiB;QACvBA,kBAAkBO,GAAGP,eAAe,EAAEE,KAAKI,YAAYE;QACvD,OAAOD,GAAGP,eAAe,CAACK;IAC5B;IACA,IAAIC,YAAYG,aAAa;QAC3B,IAAI,CAAEJ,CAAAA,eAAeK,UAAS,GAAI;YAChC,MAAM,IAAIC,UAAU;QACtB;QACA,IAAIN,IAAIO,MAAM,GAAG,OAAO;YACtB,MAAMC,IAAS,IAAIC;YACnBD,EAAEE,IAAI,GAAG;YACTF,EAAEG,OAAO,GAAG,CAAC,oFAAoF,EAAEX,IAAIO,MAAM,CAAC,wEAAwE,CAAC;YACvLC,EAAEI,IAAI,GAAG;YACT,MAAMJ;QACR;QACA,MAAMK,QAAQZ,WAAWG,WAAW,CAACJ,IAAIO,MAAM;QAC/CP,IAAIc,GAAG,CAACD;QACR,OAAOb;IACT;IACA,MAAM,IAAIS,MAAM;AAClB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { ArrayBuffers } from '../io/ArrayBuffers.js';
|
|
2
|
+
export function sha1(s, o) {
|
|
3
|
+
return digestOf('SHA-1', s, o);
|
|
4
|
+
}
|
|
5
|
+
export function sha256(s, o) {
|
|
6
|
+
return digestOf('SHA-256', s, o);
|
|
7
|
+
}
|
|
8
|
+
export function sha384(s, o) {
|
|
9
|
+
return digestOf('SHA-384', s, o);
|
|
10
|
+
}
|
|
11
|
+
export function sha512(s, o) {
|
|
12
|
+
return digestOf('SHA-512', s, o);
|
|
13
|
+
}
|
|
14
|
+
function digestOf(a, s, o) {
|
|
15
|
+
let buffer = crypto.subtle.digest(a, binaryOf(s));
|
|
16
|
+
return o ? buffer.then((v)=>encode(v, o)) : buffer;
|
|
17
|
+
}
|
|
18
|
+
function binaryOf(s) {
|
|
19
|
+
// ArrayBuffer, TypedArray, DataView
|
|
20
|
+
if (typeof s === 'string') {
|
|
21
|
+
return new TextEncoder().encode(s);
|
|
22
|
+
}
|
|
23
|
+
// ArrayBuffer, Buffer, TypedArray, DataView
|
|
24
|
+
return s;
|
|
25
|
+
}
|
|
26
|
+
function encode(buf, o) {
|
|
27
|
+
if (o) {
|
|
28
|
+
switch(o){
|
|
29
|
+
case 'hex':
|
|
30
|
+
case 'base64':
|
|
31
|
+
return ArrayBuffers.toString(buf, o);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return buf;
|
|
35
|
+
}
|
|
36
|
+
export async function hmac(hash, key, data, o) {
|
|
37
|
+
let ck = key instanceof CryptoKey ? key : await crypto.subtle.importKey('raw', binaryOf(key), {
|
|
38
|
+
name: 'HMAC',
|
|
39
|
+
hash: {
|
|
40
|
+
name: normalizeHash(hash)
|
|
41
|
+
}
|
|
42
|
+
}, false, [
|
|
43
|
+
'sign'
|
|
44
|
+
]);
|
|
45
|
+
let buffer = await crypto.subtle.sign({
|
|
46
|
+
name: 'HMAC',
|
|
47
|
+
hash: {
|
|
48
|
+
name: hash
|
|
49
|
+
}
|
|
50
|
+
}, ck, binaryOf(data));
|
|
51
|
+
return encode(buffer, o);
|
|
52
|
+
}
|
|
53
|
+
function normalizeHash(hash) {
|
|
54
|
+
return hash.replace(/^sha/i, 'SHA-');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
//# sourceMappingURL=hashing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/crypto/hashing.ts"],"sourcesContent":["import { ArrayBuffers } from '../io/ArrayBuffers';\n\nexport function sha1(s: BinaryLike, o?: undefined): Promise<Buffer>;\nexport function sha1(s: BinaryLike, o: 'hex' | 'base64'): Promise<string>;\n\nexport function sha1(s: BinaryLike, o?: DigestOptions) {\n return digestOf('SHA-1', s, o);\n}\n\nexport function sha256(s: BinaryLike, o?: undefined): Promise<Buffer>;\nexport function sha256(s: BinaryLike, o: 'hex' | 'base64'): Promise<string>;\n\nexport function sha256(s: BinaryLike, o?: DigestOptions) {\n return digestOf('SHA-256', s, o);\n}\n\nexport function sha384(s: BinaryLike, o?: undefined): Promise<Buffer>;\nexport function sha384(s: BinaryLike, o: 'hex' | 'base64'): Promise<string>;\n\nexport function sha384(s: BinaryLike, o?: DigestOptions) {\n return digestOf('SHA-384', s, o);\n}\n\nexport function sha512(s: BinaryLike, o?: undefined): Promise<Buffer>;\nexport function sha512(s: BinaryLike, o: 'hex' | 'base64'): Promise<string>;\n\nexport function sha512(s: BinaryLike, o?: DigestOptions) {\n return digestOf('SHA-512', s, o);\n}\n\nfunction digestOf(a: string, s: BinaryLike, o?: DigestOptions) {\n let buffer = crypto.subtle.digest(a, binaryOf(s));\n return o ? buffer.then((v) => encode(v, o)) : buffer;\n}\n\nexport type DigestOptions =\n | 'hex'\n | 'base64'\n | {\n encoding: 'hex' | 'base64';\n };\n\ntype BinaryLike = string | BufferSource;\n\nfunction binaryOf(s: BinaryLike) {\n // ArrayBuffer, TypedArray, DataView\n if (typeof s === 'string') {\n return new TextEncoder().encode(s);\n }\n // ArrayBuffer, Buffer, TypedArray, DataView\n return s;\n}\n\nfunction encode(buf: BufferSource, o?: DigestOptions) {\n if (o) {\n switch (o) {\n case 'hex':\n case 'base64':\n return ArrayBuffers.toString(buf, o);\n }\n }\n return buf;\n}\n\ntype StringEncoding = 'hex' | 'base64';\ntype IsStringCoding<T> = T extends StringEncoding ? true : T extends { encoding: StringEncoding } ? true : false;\n\nexport function hmac<O extends DigestOptions>(\n hash: 'SHA-1' | 'SHA-256' | 'SHA-384' | 'SHA-512' | 'sha1' | 'sha256' | 'sha384' | 'sha512',\n key: BinaryLike | CryptoKey,\n data: BinaryLike,\n o?: O,\n): Promise<IsStringCoding<O> extends true ? string : Buffer>;\n\nexport async function hmac(\n hash: 'SHA-1' | 'SHA-256' | 'SHA-384' | 'SHA-512' | 'sha1' | 'sha256' | 'sha384' | 'sha512',\n key: BinaryLike | CryptoKey,\n data: BinaryLike,\n o?: DigestOptions,\n) {\n let ck =\n key instanceof CryptoKey\n ? key\n : await crypto.subtle.importKey(\n 'raw',\n binaryOf(key),\n {\n name: 'HMAC',\n hash: {\n name: normalizeHash(hash),\n },\n },\n false,\n ['sign'],\n );\n let buffer = await crypto.subtle.sign(\n {\n name: 'HMAC',\n hash: {\n name: hash,\n },\n },\n ck,\n binaryOf(data),\n );\n\n return encode(buffer, o);\n}\n\nfunction normalizeHash(hash: string) {\n return hash.replace(/^sha/i, 'SHA-');\n}\n"],"names":["ArrayBuffers","sha1","s","o","digestOf","sha256","sha384","sha512","a","buffer","crypto","subtle","digest","binaryOf","then","v","encode","TextEncoder","buf","toString","hmac","hash","key","data","ck","CryptoKey","importKey","name","normalizeHash","sign","replace"],"mappings":"AAAA,SAASA,YAAY,QAAQ,qBAAqB;AAKlD,OAAO,SAASC,KAAKC,CAAa,EAAEC,CAAiB;IACnD,OAAOC,SAAS,SAASF,GAAGC;AAC9B;AAKA,OAAO,SAASE,OAAOH,CAAa,EAAEC,CAAiB;IACrD,OAAOC,SAAS,WAAWF,GAAGC;AAChC;AAKA,OAAO,SAASG,OAAOJ,CAAa,EAAEC,CAAiB;IACrD,OAAOC,SAAS,WAAWF,GAAGC;AAChC;AAKA,OAAO,SAASI,OAAOL,CAAa,EAAEC,CAAiB;IACrD,OAAOC,SAAS,WAAWF,GAAGC;AAChC;AAEA,SAASC,SAASI,CAAS,EAAEN,CAAa,EAAEC,CAAiB;IAC3D,IAAIM,SAASC,OAAOC,MAAM,CAACC,MAAM,CAACJ,GAAGK,SAASX;IAC9C,OAAOC,IAAIM,OAAOK,IAAI,CAAC,CAACC,IAAMC,OAAOD,GAAGZ,MAAMM;AAChD;AAWA,SAASI,SAASX,CAAa;IAC7B,oCAAoC;IACpC,IAAI,OAAOA,MAAM,UAAU;QACzB,OAAO,IAAIe,cAAcD,MAAM,CAACd;IAClC;IACA,6CAA6C;IAC7C,OAAOA;AACT;AAEA,SAASc,OAAOE,GAAiB,EAAEf,CAAiB;IAClD,IAAIA,GAAG;QACL,OAAQA;YACN,KAAK;YACL,KAAK;gBACH,OAAOH,aAAamB,QAAQ,CAACD,KAAKf;QACtC;IACF;IACA,OAAOe;AACT;AAYA,OAAO,eAAeE,KACpBC,IAA2F,EAC3FC,GAA2B,EAC3BC,IAAgB,EAChBpB,CAAiB;IAEjB,IAAIqB,KACFF,eAAeG,YACXH,MACA,MAAMZ,OAAOC,MAAM,CAACe,SAAS,CAC3B,OACAb,SAASS,MACT;QACEK,MAAM;QACNN,MAAM;YACJM,MAAMC,cAAcP;QACtB;IACF,GACA,OACA;QAAC;KAAO;IAEhB,IAAIZ,SAAS,MAAMC,OAAOC,MAAM,CAACkB,IAAI,CACnC;QACEF,MAAM;QACNN,MAAM;YACJM,MAAMN;QACR;IACF,GACAG,IACAX,SAASU;IAGX,OAAOP,OAAOP,QAAQN;AACxB;AAEA,SAASyB,cAAcP,IAAY;IACjC,OAAOA,KAAKS,OAAO,CAAC,SAAS;AAC/B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { bench, describe } from 'vitest';
|
|
3
|
+
import { md5 } from './md5.js';
|
|
4
|
+
describe('md5', ()=>{
|
|
5
|
+
const dataset = new Array(10000).fill(0).map((_, i)=>String(Math.random() * i));
|
|
6
|
+
let iterations = 0;
|
|
7
|
+
bench('js', function() {
|
|
8
|
+
iterations++;
|
|
9
|
+
md5(dataset[iterations % dataset.length]);
|
|
10
|
+
}, {
|
|
11
|
+
iterations: 10000
|
|
12
|
+
});
|
|
13
|
+
bench('native', function() {
|
|
14
|
+
iterations++;
|
|
15
|
+
createHash('md5').update(dataset[iterations % dataset.length]).digest('hex');
|
|
16
|
+
}, {
|
|
17
|
+
iterations: 10000
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=md5.bench.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/crypto/md5.bench.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\nimport { bench, describe } from 'vitest';\nimport { md5 } from './md5';\n\ndescribe('md5', () => {\n const dataset = new Array(10000).fill(0).map((_, i) => String(Math.random() * i));\n let iterations = 0;\n bench(\n 'js',\n function () {\n iterations++;\n md5(dataset[iterations % dataset.length]);\n },\n {\n iterations: 10000,\n },\n );\n\n bench(\n 'native',\n function () {\n iterations++;\n createHash('md5')\n .update(dataset[iterations % dataset.length])\n .digest('hex');\n },\n {\n iterations: 10000,\n },\n );\n});\n"],"names":["createHash","bench","describe","md5","dataset","Array","fill","map","_","i","String","Math","random","iterations","length","update","digest"],"mappings":"AAAA,SAASA,UAAU,QAAQ,cAAc;AACzC,SAASC,KAAK,EAAEC,QAAQ,QAAQ,SAAS;AACzC,SAASC,GAAG,QAAQ,QAAQ;AAE5BD,SAAS,OAAO;IACd,MAAME,UAAU,IAAIC,MAAM,OAAOC,IAAI,CAAC,GAAGC,GAAG,CAAC,CAACC,GAAGC,IAAMC,OAAOC,KAAKC,MAAM,KAAKH;IAC9E,IAAII,aAAa;IACjBZ,MACE,MACA;QACEY;QACAV,IAAIC,OAAO,CAACS,aAAaT,QAAQU,MAAM,CAAC;IAC1C,GACA;QACED,YAAY;IACd;IAGFZ,MACE,UACA;QACEY;QACAb,WAAW,OACRe,MAAM,CAACX,OAAO,CAACS,aAAaT,QAAQU,MAAM,CAAC,EAC3CE,MAAM,CAAC;IACZ,GACA;QACEH,YAAY;IACd;AAEJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/crypto/md5.d.ts"],"sourcesContent":["export function md5(s: string): string;\n"],"names":[],"mappings":"AAAA,WAAuC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// prettier-ignore
|
|
2
|
+
export function md5(inputString) {
|
|
3
|
+
// https://stackoverflow.com/a/60467595/1870054
|
|
4
|
+
var hc = "0123456789abcdef";
|
|
5
|
+
function rh(n) {
|
|
6
|
+
var j, s = "";
|
|
7
|
+
for(j = 0; j <= 3; j++)s += hc.charAt(n >> j * 8 + 4 & 0x0F) + hc.charAt(n >> j * 8 & 0x0F);
|
|
8
|
+
return s;
|
|
9
|
+
}
|
|
10
|
+
function ad(x, y) {
|
|
11
|
+
var l = (x & 0xFFFF) + (y & 0xFFFF);
|
|
12
|
+
var m = (x >> 16) + (y >> 16) + (l >> 16);
|
|
13
|
+
return m << 16 | l & 0xFFFF;
|
|
14
|
+
}
|
|
15
|
+
function rl(n, c) {
|
|
16
|
+
return n << c | n >>> 32 - c;
|
|
17
|
+
}
|
|
18
|
+
function cm(q, a, b, x, s, t) {
|
|
19
|
+
return ad(rl(ad(ad(a, q), ad(x, t)), s), b);
|
|
20
|
+
}
|
|
21
|
+
function ff(a, b, c, d, x, s, t) {
|
|
22
|
+
return cm(b & c | ~b & d, a, b, x, s, t);
|
|
23
|
+
}
|
|
24
|
+
function gg(a, b, c, d, x, s, t) {
|
|
25
|
+
return cm(b & d | c & ~d, a, b, x, s, t);
|
|
26
|
+
}
|
|
27
|
+
function hh(a, b, c, d, x, s, t) {
|
|
28
|
+
return cm(b ^ c ^ d, a, b, x, s, t);
|
|
29
|
+
}
|
|
30
|
+
function ii(a, b, c, d, x, s, t) {
|
|
31
|
+
return cm(c ^ (b | ~d), a, b, x, s, t);
|
|
32
|
+
}
|
|
33
|
+
function sb(x) {
|
|
34
|
+
var i;
|
|
35
|
+
var nblk = (x.length + 8 >> 6) + 1;
|
|
36
|
+
var blks = new Array(nblk * 16);
|
|
37
|
+
for(i = 0; i < nblk * 16; i++)blks[i] = 0;
|
|
38
|
+
for(i = 0; i < x.length; i++)blks[i >> 2] |= x.charCodeAt(i) << i % 4 * 8;
|
|
39
|
+
blks[i >> 2] |= 0x80 << i % 4 * 8;
|
|
40
|
+
blks[nblk * 16 - 2] = x.length * 8;
|
|
41
|
+
return blks;
|
|
42
|
+
}
|
|
43
|
+
var i, x = sb("" + inputString), a = 1732584193, b = -271733879, c = -1732584194, d = 271733878, olda, oldb, oldc, oldd;
|
|
44
|
+
for(i = 0; i < x.length; i += 16){
|
|
45
|
+
olda = a;
|
|
46
|
+
oldb = b;
|
|
47
|
+
oldc = c;
|
|
48
|
+
oldd = d;
|
|
49
|
+
a = ff(a, b, c, d, x[i + 0], 7, -680876936);
|
|
50
|
+
d = ff(d, a, b, c, x[i + 1], 12, -389564586);
|
|
51
|
+
c = ff(c, d, a, b, x[i + 2], 17, 606105819);
|
|
52
|
+
b = ff(b, c, d, a, x[i + 3], 22, -1044525330);
|
|
53
|
+
a = ff(a, b, c, d, x[i + 4], 7, -176418897);
|
|
54
|
+
d = ff(d, a, b, c, x[i + 5], 12, 1200080426);
|
|
55
|
+
c = ff(c, d, a, b, x[i + 6], 17, -1473231341);
|
|
56
|
+
b = ff(b, c, d, a, x[i + 7], 22, -45705983);
|
|
57
|
+
a = ff(a, b, c, d, x[i + 8], 7, 1770035416);
|
|
58
|
+
d = ff(d, a, b, c, x[i + 9], 12, -1958414417);
|
|
59
|
+
c = ff(c, d, a, b, x[i + 10], 17, -42063);
|
|
60
|
+
b = ff(b, c, d, a, x[i + 11], 22, -1990404162);
|
|
61
|
+
a = ff(a, b, c, d, x[i + 12], 7, 1804603682);
|
|
62
|
+
d = ff(d, a, b, c, x[i + 13], 12, -40341101);
|
|
63
|
+
c = ff(c, d, a, b, x[i + 14], 17, -1502002290);
|
|
64
|
+
b = ff(b, c, d, a, x[i + 15], 22, 1236535329);
|
|
65
|
+
a = gg(a, b, c, d, x[i + 1], 5, -165796510);
|
|
66
|
+
d = gg(d, a, b, c, x[i + 6], 9, -1069501632);
|
|
67
|
+
c = gg(c, d, a, b, x[i + 11], 14, 643717713);
|
|
68
|
+
b = gg(b, c, d, a, x[i + 0], 20, -373897302);
|
|
69
|
+
a = gg(a, b, c, d, x[i + 5], 5, -701558691);
|
|
70
|
+
d = gg(d, a, b, c, x[i + 10], 9, 38016083);
|
|
71
|
+
c = gg(c, d, a, b, x[i + 15], 14, -660478335);
|
|
72
|
+
b = gg(b, c, d, a, x[i + 4], 20, -405537848);
|
|
73
|
+
a = gg(a, b, c, d, x[i + 9], 5, 568446438);
|
|
74
|
+
d = gg(d, a, b, c, x[i + 14], 9, -1019803690);
|
|
75
|
+
c = gg(c, d, a, b, x[i + 3], 14, -187363961);
|
|
76
|
+
b = gg(b, c, d, a, x[i + 8], 20, 1163531501);
|
|
77
|
+
a = gg(a, b, c, d, x[i + 13], 5, -1444681467);
|
|
78
|
+
d = gg(d, a, b, c, x[i + 2], 9, -51403784);
|
|
79
|
+
c = gg(c, d, a, b, x[i + 7], 14, 1735328473);
|
|
80
|
+
b = gg(b, c, d, a, x[i + 12], 20, -1926607734);
|
|
81
|
+
a = hh(a, b, c, d, x[i + 5], 4, -378558);
|
|
82
|
+
d = hh(d, a, b, c, x[i + 8], 11, -2022574463);
|
|
83
|
+
c = hh(c, d, a, b, x[i + 11], 16, 1839030562);
|
|
84
|
+
b = hh(b, c, d, a, x[i + 14], 23, -35309556);
|
|
85
|
+
a = hh(a, b, c, d, x[i + 1], 4, -1530992060);
|
|
86
|
+
d = hh(d, a, b, c, x[i + 4], 11, 1272893353);
|
|
87
|
+
c = hh(c, d, a, b, x[i + 7], 16, -155497632);
|
|
88
|
+
b = hh(b, c, d, a, x[i + 10], 23, -1094730640);
|
|
89
|
+
a = hh(a, b, c, d, x[i + 13], 4, 681279174);
|
|
90
|
+
d = hh(d, a, b, c, x[i + 0], 11, -358537222);
|
|
91
|
+
c = hh(c, d, a, b, x[i + 3], 16, -722521979);
|
|
92
|
+
b = hh(b, c, d, a, x[i + 6], 23, 76029189);
|
|
93
|
+
a = hh(a, b, c, d, x[i + 9], 4, -640364487);
|
|
94
|
+
d = hh(d, a, b, c, x[i + 12], 11, -421815835);
|
|
95
|
+
c = hh(c, d, a, b, x[i + 15], 16, 530742520);
|
|
96
|
+
b = hh(b, c, d, a, x[i + 2], 23, -995338651);
|
|
97
|
+
a = ii(a, b, c, d, x[i + 0], 6, -198630844);
|
|
98
|
+
d = ii(d, a, b, c, x[i + 7], 10, 1126891415);
|
|
99
|
+
c = ii(c, d, a, b, x[i + 14], 15, -1416354905);
|
|
100
|
+
b = ii(b, c, d, a, x[i + 5], 21, -57434055);
|
|
101
|
+
a = ii(a, b, c, d, x[i + 12], 6, 1700485571);
|
|
102
|
+
d = ii(d, a, b, c, x[i + 3], 10, -1894986606);
|
|
103
|
+
c = ii(c, d, a, b, x[i + 10], 15, -1051523);
|
|
104
|
+
b = ii(b, c, d, a, x[i + 1], 21, -2054922799);
|
|
105
|
+
a = ii(a, b, c, d, x[i + 8], 6, 1873313359);
|
|
106
|
+
d = ii(d, a, b, c, x[i + 15], 10, -30611744);
|
|
107
|
+
c = ii(c, d, a, b, x[i + 6], 15, -1560198380);
|
|
108
|
+
b = ii(b, c, d, a, x[i + 13], 21, 1309151649);
|
|
109
|
+
a = ii(a, b, c, d, x[i + 4], 6, -145523070);
|
|
110
|
+
d = ii(d, a, b, c, x[i + 11], 10, -1120210379);
|
|
111
|
+
c = ii(c, d, a, b, x[i + 2], 15, 718787259);
|
|
112
|
+
b = ii(b, c, d, a, x[i + 9], 21, -343485551);
|
|
113
|
+
a = ad(a, olda);
|
|
114
|
+
b = ad(b, oldb);
|
|
115
|
+
c = ad(c, oldc);
|
|
116
|
+
d = ad(d, oldd);
|
|
117
|
+
}
|
|
118
|
+
return rh(a) + rh(b) + rh(c) + rh(d);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
//# sourceMappingURL=md5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/crypto/md5.js"],"sourcesContent":["// prettier-ignore\nexport function md5(inputString) {\n // https://stackoverflow.com/a/60467595/1870054\n var hc=\"0123456789abcdef\";\n function rh(n) {var j,s=\"\";for(j=0;j<=3;j++) s+=hc.charAt((n>>(j*8+4))&0x0F)+hc.charAt((n>>(j*8))&0x0F);return s;}\n function ad(x,y) {var l=(x&0xFFFF)+(y&0xFFFF);var m=(x>>16)+(y>>16)+(l>>16);return (m<<16)|(l&0xFFFF);}\n function rl(n,c) {return (n<<c)|(n>>>(32-c));}\n function cm(q,a,b,x,s,t) {return ad(rl(ad(ad(a,q),ad(x,t)),s),b);}\n function ff(a,b,c,d,x,s,t) {return cm((b&c)|((~b)&d),a,b,x,s,t);}\n function gg(a,b,c,d,x,s,t) {return cm((b&d)|(c&(~d)),a,b,x,s,t);}\n function hh(a,b,c,d,x,s,t) {return cm(b^c^d,a,b,x,s,t);}\n function ii(a,b,c,d,x,s,t) {return cm(c^(b|(~d)),a,b,x,s,t);}\n function sb(x) {\n var i;var nblk=((x.length+8)>>6)+1;var blks=new Array(nblk*16);for(i=0;i<nblk*16;i++) blks[i]=0;\n for(i=0;i<x.length;i++) blks[i>>2]|=x.charCodeAt(i)<<((i%4)*8);\n blks[i>>2]|=0x80<<((i%4)*8);blks[nblk*16-2]=x.length*8;return blks;\n }\n var i,x=sb(\"\"+inputString),a=1732584193,b=-271733879,c=-1732584194,d=271733878,olda,oldb,oldc,oldd;\n for(i=0;i<x.length;i+=16) {olda=a;oldb=b;oldc=c;oldd=d;\n a=ff(a,b,c,d,x[i+ 0], 7, -680876936);d=ff(d,a,b,c,x[i+ 1],12, -389564586);c=ff(c,d,a,b,x[i+ 2],17, 606105819);\n b=ff(b,c,d,a,x[i+ 3],22,-1044525330);a=ff(a,b,c,d,x[i+ 4], 7, -176418897);d=ff(d,a,b,c,x[i+ 5],12, 1200080426);\n c=ff(c,d,a,b,x[i+ 6],17,-1473231341);b=ff(b,c,d,a,x[i+ 7],22, -45705983);a=ff(a,b,c,d,x[i+ 8], 7, 1770035416);\n d=ff(d,a,b,c,x[i+ 9],12,-1958414417);c=ff(c,d,a,b,x[i+10],17, -42063);b=ff(b,c,d,a,x[i+11],22,-1990404162);\n a=ff(a,b,c,d,x[i+12], 7, 1804603682);d=ff(d,a,b,c,x[i+13],12, -40341101);c=ff(c,d,a,b,x[i+14],17,-1502002290);\n b=ff(b,c,d,a,x[i+15],22, 1236535329);a=gg(a,b,c,d,x[i+ 1], 5, -165796510);d=gg(d,a,b,c,x[i+ 6], 9,-1069501632);\n c=gg(c,d,a,b,x[i+11],14, 643717713);b=gg(b,c,d,a,x[i+ 0],20, -373897302);a=gg(a,b,c,d,x[i+ 5], 5, -701558691);\n d=gg(d,a,b,c,x[i+10], 9, 38016083);c=gg(c,d,a,b,x[i+15],14, -660478335);b=gg(b,c,d,a,x[i+ 4],20, -405537848);\n a=gg(a,b,c,d,x[i+ 9], 5, 568446438);d=gg(d,a,b,c,x[i+14], 9,-1019803690);c=gg(c,d,a,b,x[i+ 3],14, -187363961);\n b=gg(b,c,d,a,x[i+ 8],20, 1163531501);a=gg(a,b,c,d,x[i+13], 5,-1444681467);d=gg(d,a,b,c,x[i+ 2], 9, -51403784);\n c=gg(c,d,a,b,x[i+ 7],14, 1735328473);b=gg(b,c,d,a,x[i+12],20,-1926607734);a=hh(a,b,c,d,x[i+ 5], 4, -378558);\n d=hh(d,a,b,c,x[i+ 8],11,-2022574463);c=hh(c,d,a,b,x[i+11],16, 1839030562);b=hh(b,c,d,a,x[i+14],23, -35309556);\n a=hh(a,b,c,d,x[i+ 1], 4,-1530992060);d=hh(d,a,b,c,x[i+ 4],11, 1272893353);c=hh(c,d,a,b,x[i+ 7],16, -155497632);\n b=hh(b,c,d,a,x[i+10],23,-1094730640);a=hh(a,b,c,d,x[i+13], 4, 681279174);d=hh(d,a,b,c,x[i+ 0],11, -358537222);\n c=hh(c,d,a,b,x[i+ 3],16, -722521979);b=hh(b,c,d,a,x[i+ 6],23, 76029189);a=hh(a,b,c,d,x[i+ 9], 4, -640364487);\n d=hh(d,a,b,c,x[i+12],11, -421815835);c=hh(c,d,a,b,x[i+15],16, 530742520);b=hh(b,c,d,a,x[i+ 2],23, -995338651);\n a=ii(a,b,c,d,x[i+ 0], 6, -198630844);d=ii(d,a,b,c,x[i+ 7],10, 1126891415);c=ii(c,d,a,b,x[i+14],15,-1416354905);\n b=ii(b,c,d,a,x[i+ 5],21, -57434055);a=ii(a,b,c,d,x[i+12], 6, 1700485571);d=ii(d,a,b,c,x[i+ 3],10,-1894986606);\n c=ii(c,d,a,b,x[i+10],15, -1051523);b=ii(b,c,d,a,x[i+ 1],21,-2054922799);a=ii(a,b,c,d,x[i+ 8], 6, 1873313359);\n d=ii(d,a,b,c,x[i+15],10, -30611744);c=ii(c,d,a,b,x[i+ 6],15,-1560198380);b=ii(b,c,d,a,x[i+13],21, 1309151649);\n a=ii(a,b,c,d,x[i+ 4], 6, -145523070);d=ii(d,a,b,c,x[i+11],10,-1120210379);c=ii(c,d,a,b,x[i+ 2],15, 718787259);\n b=ii(b,c,d,a,x[i+ 9],21, -343485551);a=ad(a,olda);b=ad(b,oldb);c=ad(c,oldc);d=ad(d,oldd);\n }\n return rh(a)+rh(b)+rh(c)+rh(d);\n}\n"],"names":["md5","inputString","hc","rh","n","j","s","charAt","ad","x","y","l","m","rl","c","cm","q","a","b","t","ff","d","gg","hh","ii","sb","i","nblk","length","blks","Array","charCodeAt","olda","oldb","oldc","oldd"],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ArrayBuffers } from '../../io/ArrayBuffers.js';
|
|
2
|
+
export class PEM {
|
|
3
|
+
static decode(data) {
|
|
4
|
+
const match = data.match(/^-----BEGIN (?<type>[^\r\n-]+)-----$\r?\n(?<headers>(^[^:\r\n]+:[^\n\r]+\r?\n)+\r?\n)?(?<data>[a-zA-Z0-9/_=\n\r+]+?)^-----END \1-----$\r?\n?/ms);
|
|
5
|
+
if (!match?.groups) throw new Error('Invalid PEM data');
|
|
6
|
+
const { type, headers = '', data: b64 } = match.groups;
|
|
7
|
+
const header = headers.split('\n').filter((v)=>v.trim()).map((h)=>{
|
|
8
|
+
const [k, ...v] = h.split(':');
|
|
9
|
+
return [
|
|
10
|
+
k.trim(),
|
|
11
|
+
v.join(':').trim()
|
|
12
|
+
];
|
|
13
|
+
}).reduce((a, [k, v])=>({
|
|
14
|
+
...a,
|
|
15
|
+
[k]: v
|
|
16
|
+
}), {});
|
|
17
|
+
return {
|
|
18
|
+
block: {
|
|
19
|
+
type,
|
|
20
|
+
header,
|
|
21
|
+
// avoid replaceAll
|
|
22
|
+
bytes: ArrayBuffers.from(b64.replace(/[\r\n]/g, ''), 'base64')
|
|
23
|
+
},
|
|
24
|
+
head: data.slice(0, match.index || 0),
|
|
25
|
+
tail: data.slice((match.index || 0) + match[0].length)
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
static encode(block) {
|
|
29
|
+
const { type, header, bytes } = block;
|
|
30
|
+
const headers = Object.entries(header || {}).map(([k, v])=>`${k}: ${v}`).join('\n');
|
|
31
|
+
return `-----BEGIN ${type}-----\n${headers}${headers.length ? '\n\n' : ''}${ArrayBuffers.toString(bytes, 'base64').match(/.{1,64}/g)?.join('\n') || ''}\n-----END ${type}-----\n`;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=pem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/crypto/pem/pem.ts"],"sourcesContent":["import { ArrayBuffers } from '../../io/ArrayBuffers';\n\nexport interface Block {\n /**\n * @see https://github.com/openssl/openssl/blob/master/include/openssl/pem.h#L35-L60 openssl/pem.h\n */\n type:\n | string\n | `${'RSA' | 'DSA'} ${'PRIVATE' | 'PUBLIC'} KEY`\n | `${'X509' | 'TRUSTED'} CERTIFICATE`\n | 'CERTIFICATE'\n | 'X509 CRL'\n | 'CERTIFICATE REQUEST'\n | 'NEW CERTIFICATE REQUEST'\n | 'ANY PRIVATE KEY'\n | 'PUBLIC KEY'\n | 'PKCS7'\n | 'PKCS #7 SIGNED DATA'\n | 'ENCRYPTED PRIVATE KEY'\n | 'PRIVATE KEY'\n | 'DH PARAMETERS'\n | 'X9.42 DH PARAMETERS'\n | 'SSL SESSION PARAMETERS'\n | 'DSA PARAMETERS'\n | 'ECDSA PUBLIC KEY'\n | 'EC PARAMETERS'\n | 'EC PRIVATE KEY'\n | 'PARAMETERS'\n | 'CMS'\n | 'SM2 PARAMETERS';\n\n header: Record<string, string>;\n bytes: BufferSource;\n}\n\nexport class PEM {\n static decode(data: string): { block: Block; tail: string; head: string } {\n const match = data.match(\n /^-----BEGIN (?<type>[^\\r\\n-]+)-----$\\r?\\n(?<headers>(^[^:\\r\\n]+:[^\\n\\r]+\\r?\\n)+\\r?\\n)?(?<data>[a-zA-Z0-9/_=\\n\\r+]+?)^-----END \\1-----$\\r?\\n?/ms,\n );\n if (!match?.groups) throw new Error('Invalid PEM data');\n const { type, headers = '', data: b64 } = match.groups;\n const header = headers\n .split('\\n')\n .filter((v) => v.trim())\n .map((h) => {\n const [k, ...v] = h.split(':');\n return [k.trim(), v.join(':').trim()];\n })\n .reduce((a, [k, v]) => ({ ...a, [k]: v }), {});\n return {\n block: {\n type,\n header,\n // avoid replaceAll\n bytes: ArrayBuffers.from(b64.replace(/[\\r\\n]/g, ''), 'base64'),\n },\n head: data.slice(0, match.index || 0),\n tail: data.slice((match.index || 0) + match[0].length),\n };\n }\n\n static encode(block: { type: string; bytes: string | BufferSource; header?: Record<string, string> }): string {\n const { type, header, bytes } = block;\n const headers = Object.entries(header || {})\n .map(([k, v]) => `${k}: ${v}`)\n .join('\\n');\n return `-----BEGIN ${type}-----\\n${headers}${headers.length ? '\\n\\n' : ''}${\n ArrayBuffers.toString(bytes, 'base64')\n .match(/.{1,64}/g)\n ?.join('\\n') || ''\n }\\n-----END ${type}-----\\n`;\n }\n}\n"],"names":["ArrayBuffers","PEM","decode","data","match","groups","Error","type","headers","b64","header","split","filter","v","trim","map","h","k","join","reduce","a","block","bytes","from","replace","head","slice","index","tail","length","encode","Object","entries","toString"],"mappings":"AAAA,SAASA,YAAY,QAAQ,wBAAwB;AAmCrD,OAAO,MAAMC;IACX,OAAOC,OAAOC,IAAY,EAAgD;QACxE,MAAMC,QAAQD,KAAKC,KAAK,CACtB;QAEF,IAAI,CAACA,OAAOC,QAAQ,MAAM,IAAIC,MAAM;QACpC,MAAM,EAAEC,IAAI,EAAEC,UAAU,EAAE,EAAEL,MAAMM,GAAG,EAAE,GAAGL,MAAMC,MAAM;QACtD,MAAMK,SAASF,QACZG,KAAK,CAAC,MACNC,MAAM,CAAC,CAACC,IAAMA,EAAEC,IAAI,IACpBC,GAAG,CAAC,CAACC;YACJ,MAAM,CAACC,GAAG,GAAGJ,EAAE,GAAGG,EAAEL,KAAK,CAAC;YAC1B,OAAO;gBAACM,EAAEH,IAAI;gBAAID,EAAEK,IAAI,CAAC,KAAKJ,IAAI;aAAG;QACvC,GACCK,MAAM,CAAC,CAACC,GAAG,CAACH,GAAGJ,EAAE,GAAM,CAAA;gBAAE,GAAGO,CAAC;gBAAE,CAACH,EAAE,EAAEJ;YAAE,CAAA,GAAI,CAAC;QAC9C,OAAO;YACLQ,OAAO;gBACLd;gBACAG;gBACA,oBAAoB;gBACpBY,OAAOtB,aAAauB,IAAI,CAACd,IAAIe,OAAO,CAAC,WAAW,KAAK;YACvD;YACAC,MAAMtB,KAAKuB,KAAK,CAAC,GAAGtB,MAAMuB,KAAK,IAAI;YACnCC,MAAMzB,KAAKuB,KAAK,CAAC,AAACtB,CAAAA,MAAMuB,KAAK,IAAI,CAAA,IAAKvB,KAAK,CAAC,EAAE,CAACyB,MAAM;QACvD;IACF;IAEA,OAAOC,OAAOT,KAAsF,EAAU;QAC5G,MAAM,EAAEd,IAAI,EAAEG,MAAM,EAAEY,KAAK,EAAE,GAAGD;QAChC,MAAMb,UAAUuB,OAAOC,OAAO,CAACtB,UAAU,CAAC,GACvCK,GAAG,CAAC,CAAC,CAACE,GAAGJ,EAAE,GAAK,CAAC,EAAEI,EAAE,EAAE,EAAEJ,EAAE,CAAC,EAC5BK,IAAI,CAAC;QACR,OAAO,CAAC,WAAW,EAAEX,KAAK,OAAO,EAAEC,QAAQ,EAAEA,QAAQqB,MAAM,GAAG,SAAS,GAAG,EACxE7B,aAAaiC,QAAQ,CAACX,OAAO,UAC1BlB,KAAK,CAAC,aACLc,KAAK,SAAS,GACnB,WAAW,EAAEX,KAAK,OAAO,CAAC;IAC7B;AACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { getGlobalThis } from '../isomorphics/getGlobalThis.js';
|
|
2
|
+
const globalThis = getGlobalThis();
|
|
3
|
+
/**
|
|
4
|
+
* generate random UUIDv4
|
|
5
|
+
*/ export const randomUUID = globalThis.crypto?.randomUUID?.bind(globalThis.crypto) || _randomUUID;
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/ export function _randomUUID() {
|
|
9
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c)=>{
|
|
10
|
+
const r = Math.random() * 16 | 0;
|
|
11
|
+
const v = c === 'x' ? r : r & 0x3 | 0x8;
|
|
12
|
+
return v.toString(16);
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=randomUUID.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/crypto/randomUUID.ts"],"sourcesContent":["import { getGlobalThis } from '../isomorphics/getGlobalThis';\n\nconst globalThis = getGlobalThis();\n\n/**\n * generate random UUIDv4\n */\nexport const randomUUID: () => string = globalThis.crypto?.randomUUID?.bind(globalThis.crypto) || _randomUUID;\n\n/**\n * @internal\n */\nexport function _randomUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n"],"names":["getGlobalThis","globalThis","randomUUID","crypto","bind","_randomUUID","replace","c","r","Math","random","v","toString"],"mappings":"AAAA,SAASA,aAAa,QAAQ,+BAA+B;AAE7D,MAAMC,aAAaD;AAEnB;;CAEC,GACD,OAAO,MAAME,aAA2BD,WAAWE,MAAM,EAAED,YAAYE,KAAKH,WAAWE,MAAM,KAAKE,YAAY;AAE9G;;CAEC,GACD,OAAO,SAASA;IACd,OAAO,uCAAuCC,OAAO,CAAC,SAAS,CAACC;QAC9D,MAAMC,IAAI,AAACC,KAAKC,MAAM,KAAK,KAAM;QACjC,MAAMC,IAAIJ,MAAM,MAAMC,IAAI,AAACA,IAAI,MAAO;QACtC,OAAOG,EAAEC,QAAQ,CAAC;IACpB;AACF"}
|