@wener/utils 1.1.51 → 1.1.53
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 +58 -8
- package/lib/arrays/arrayFromAsync.js +254 -6
- package/lib/asyncs/AsyncInterval.js +145 -9
- package/lib/asyncs/MaybePromise.js +0 -2
- package/lib/asyncs/Promises.js +95 -48
- package/lib/asyncs/createAsyncIterator.js +313 -23
- package/lib/asyncs/createLazyPromise.js +72 -31
- package/lib/asyncs/createLazyPromise.test.js +367 -0
- package/lib/asyncs/firstOfAsyncIterator.js +6 -6
- package/lib/asyncs/generatorOfStream.js +125 -14
- package/lib/asyncs/isIterator.js +1 -3
- package/lib/asyncs/isPromise.js +2 -4
- package/lib/asyncs/isThenable.js +0 -2
- package/lib/asyncs/nextOfAsyncIterator.js +15 -9
- package/lib/asyncs/promiseOfCallback.js +2 -4
- package/lib/asyncs/timeout.js +122 -13
- package/lib/browsers/copy.js +7 -8
- package/lib/browsers/download.js +215 -40
- package/lib/browsers/getFileFromDataTransfer.js +17 -14
- package/lib/browsers/loaders.js +251 -18
- package/lib/crypto/base.js +3 -3
- package/lib/crypto/getNodeCrypto.js +3 -5
- package/lib/crypto/hashing.js +236 -30
- package/lib/crypto/hashing.test.js +323 -0
- package/lib/crypto/md5.bench.js +11 -11
- package/lib/crypto/md5.d.js +0 -2
- package/lib/crypto/md5.js +0 -2
- package/lib/crypto/md5.test.js +7 -0
- package/lib/crypto/pem/pem.js +197 -35
- package/lib/crypto/pem/pem.test.js +104 -0
- package/lib/crypto/randomUUIDv7.js +0 -2
- package/lib/crypto/ulid.js +84 -48
- package/lib/crypto/ulid.test.js +115 -0
- package/lib/emitter/types.js +0 -2
- package/lib/errors/DetailError.js +297 -0
- package/lib/errors/Errors.js +2 -202
- package/lib/errors/Errors.mod.js +206 -0
- package/lib/errors/Errors.test.js +24 -0
- package/lib/fetch/HttpStatus.js +1 -3
- package/lib/fetch/createFetchWith.js +188 -19
- package/lib/fetch/createFetchWithLogging.js +17 -16
- package/lib/fetch/createFetchWithRetry.js +40 -24
- package/lib/fetch/dumpRequest.js +467 -41
- package/lib/fetch/dumpRequest.test.js +384 -0
- package/lib/fetch/dumpResponse.js +271 -16
- package/lib/fetch/dumpResponse.test.js +393 -0
- package/lib/fetch/http.types.js +0 -2
- package/lib/fetch/index.js +5 -7
- package/lib/fetch/isTextContentType.js +5 -0
- package/lib/fetch/resolveRequest.js +7 -0
- package/lib/fetch/types.js +0 -2
- package/lib/i18n/createTranslate.js +40 -20
- package/lib/i18n/createTranslate.test.js +177 -0
- package/lib/index.js +74 -76
- package/lib/io/AbstractEncoding.js +0 -2
- package/lib/io/ArrayBuffer.test-d.js +4 -6
- package/lib/io/ArrayBuffers.base64.test.js +60 -0
- package/lib/io/ArrayBuffers.js +2 -334
- package/lib/io/ArrayBuffers.mod.js +531 -0
- package/lib/io/ArrayBuffers.test.js +77 -0
- package/lib/io/Buffer.js +190 -20
- package/lib/io/Buffer.test.js +22 -0
- package/lib/io/ByteBuffer.js +752 -441
- package/lib/io/ByteBuffer.test.js +184 -0
- package/lib/io/base64.js +17 -19
- package/lib/io/dump.js +16 -16
- package/lib/io/isBuffer.js +2 -3
- package/lib/io/isBuffer.test.js +8 -0
- package/lib/io/isTransferable.js +16 -8
- package/lib/io/isTransferable.test.js +17 -0
- package/lib/io/parseDataUri.js +288 -40
- package/lib/io/parseDataUri.test.js +286 -0
- package/lib/io/types.js +1 -0
- package/lib/langs/AsyncCloser.js +270 -34
- package/lib/langs/Closer.js +95 -29
- package/lib/langs/MaybeFunction.js +38 -5
- package/lib/langs/classOf.js +0 -2
- package/lib/langs/deepEqual.js +82 -22
- package/lib/langs/deepEqual.test.js +11 -0
- package/lib/langs/deepFreeze.js +28 -9
- package/lib/langs/getGlobalStates.js +14 -10
- package/lib/langs/getObjectId.js +4 -6
- package/lib/langs/ifPresent.js +0 -2
- package/lib/langs/isClass.js +0 -2
- package/lib/langs/isDefined.js +0 -2
- package/lib/langs/isEmptyObject.js +1 -3
- package/lib/langs/isFunction.js +0 -2
- package/lib/langs/isNil.js +3 -0
- package/lib/langs/isPlainObject.js +2 -4
- package/lib/langs/langs.test.js +126 -0
- package/lib/langs/memoize.js +11 -7
- package/lib/langs/mixin.js +7 -4
- package/lib/langs/mixin.test.js +135 -0
- package/lib/langs/parseBoolean.js +11 -8
- package/lib/langs/shallowClone.js +5 -3
- package/lib/langs/shallowEqual.js +8 -6
- package/lib/libs/ms.js +28 -26
- package/lib/libs/ms.test.js +301 -0
- package/lib/logger/const.js +15 -0
- package/lib/logger/index.js +1 -0
- package/lib/logger/types.js +1 -0
- package/lib/maths/clamp.js +81 -12
- package/lib/maths/clamp.test.js +186 -0
- package/lib/maths/createRandom.test.js +36 -0
- package/lib/maths/random.js +162 -13
- package/lib/modules/isModule.js +0 -2
- package/lib/modules/parseModuleId.js +14 -15
- package/lib/modules/parseModuleId.test.js +153 -0
- package/lib/objects/computeIfAbsent.js +8 -3
- package/lib/objects/get.js +26 -8
- package/lib/objects/get.test-d.js +23 -25
- package/lib/objects/merge/index.js +1 -3
- package/lib/objects/merge/isMergeableObject.js +5 -3
- package/lib/objects/merge/merge.js +82 -26
- package/lib/objects/merge/merge.test.js +1397 -0
- package/lib/objects/parseObjectPath.js +47 -15
- package/lib/objects/parseObjectPath.test.js +138 -0
- package/lib/objects/set.js +25 -19
- package/lib/objects/set.test.js +522 -0
- package/lib/schema/typebox/index.js +2 -3
- package/lib/schema/typebox/typebox.js +6 -6
- package/lib/scripts/getGenerateContext.js +386 -77
- package/lib/server/crypto/md5.js +0 -2
- package/lib/server/fetch/createFetchWithProxy.js +2 -4
- package/lib/server/fetch/createFetchWithProxyByNodeFetch.js +258 -31
- package/lib/server/fetch/createFetchWithProxyByUndici.js +307 -49
- package/lib/server/getPackageDir.js +2 -3
- package/lib/server/index.js +5 -7
- package/lib/server/jsdom.js +1 -3
- package/lib/server/node-fetch.js +2 -4
- package/lib/server/polyfill/polyfillBrowser.js +163 -9
- package/lib/server/polyfill/polyfillBrowser.test.js +164 -0
- package/lib/server/polyfill/polyfillCrypto.js +157 -9
- package/lib/server/polyfill/polyfillFetch.js +13 -13
- package/lib/server/polyfill/polyfillJsDom.js +264 -58
- package/lib/server/polyfill/polyfillWebSocket.js +11 -11
- package/lib/server/ws.js +1 -3
- package/lib/strings/bytes.test.js +327 -0
- package/lib/strings/camelCase.js +23 -14
- package/lib/strings/formatBytes.js +29 -20
- package/lib/strings/parseBytes.js +54 -0
- package/lib/strings/renderTemplate.js +17 -12
- package/lib/strings/renderTemplate.test.js +104 -0
- package/lib/typedoc.js +2 -4
- package/lib/types.d.js +0 -2
- package/lib/validations/asserts.js +0 -2
- package/lib/validations/isUUID.js +0 -2
- package/lib/validations/isUUID.test.js +87 -0
- package/lib/validations/parseTimestamp.js +12 -7
- package/lib/validations/parseTimestamp.test.js +6 -0
- package/lib/web/getGlobalThis.js +3 -4
- package/lib/web/getRandomValues.js +28 -20
- package/lib/web/randomUUID.js +7 -8
- package/lib/web/requestIdleCallback.js +13 -9
- package/lib/web/structuredClone.js +35 -28
- package/lib/web/structuredClone.test.js +81 -0
- package/package.json +9 -14
- package/src/arrays/MaybeArray.ts +22 -22
- package/src/arrays/arrayFromAsync.ts +3 -3
- package/src/asyncs/AsyncInterval.ts +8 -8
- package/src/asyncs/Promises.ts +51 -51
- package/src/asyncs/createAsyncIterator.ts +33 -33
- package/src/asyncs/createLazyPromise.test.ts +73 -73
- package/src/asyncs/createLazyPromise.ts +68 -73
- package/src/asyncs/firstOfAsyncIterator.ts +5 -5
- package/src/asyncs/generatorOfStream.ts +12 -12
- package/src/asyncs/isIterator.ts +1 -1
- package/src/asyncs/isThenable.ts +2 -2
- package/src/asyncs/nextOfAsyncIterator.ts +20 -20
- package/src/asyncs/promiseOfCallback.ts +13 -13
- package/src/asyncs/timeout.ts +23 -23
- package/src/browsers/copy.ts +48 -48
- package/src/browsers/download.ts +38 -36
- package/src/browsers/getFileFromDataTransfer.ts +35 -35
- package/src/browsers/loaders.ts +49 -49
- package/src/crypto/base.ts +3 -3
- package/src/crypto/getNodeCrypto.ts +2 -2
- package/src/crypto/hashing.test.ts +33 -47
- package/src/crypto/hashing.ts +67 -67
- package/src/crypto/md5.bench.ts +20 -24
- package/src/crypto/md5.test.ts +3 -3
- package/src/crypto/pem/pem.test.ts +26 -42
- package/src/crypto/pem/pem.ts +65 -65
- package/src/crypto/ulid.test.ts +31 -31
- package/src/crypto/ulid.ts +116 -116
- package/src/emitter/types.ts +6 -6
- package/src/errors/DetailError.ts +151 -0
- package/src/errors/Errors.mod.ts +104 -0
- package/src/errors/Errors.test.ts +15 -15
- package/src/errors/Errors.ts +1 -247
- package/src/fetch/HttpStatus.ts +77 -77
- package/src/fetch/createFetchWith.ts +25 -25
- package/src/fetch/createFetchWithLogging.ts +12 -15
- package/src/fetch/createFetchWithRetry.ts +79 -79
- package/src/fetch/dumpRequest.test.ts +176 -0
- package/src/fetch/dumpRequest.ts +149 -52
- package/src/fetch/dumpResponse.test.ts +160 -0
- package/src/fetch/dumpResponse.ts +48 -20
- package/src/fetch/http.types.ts +35 -35
- package/src/fetch/isTextContentType.ts +12 -0
- package/src/fetch/resolveRequest.ts +1 -0
- package/src/fetch/types.ts +2 -2
- package/src/i18n/createTranslate.test.ts +90 -113
- package/src/i18n/createTranslate.ts +55 -55
- package/src/index.ts +17 -19
- package/src/io/AbstractEncoding.ts +12 -12
- package/src/io/ArrayBuffer.test-d.ts +1 -1
- package/src/io/ArrayBuffers.base64.test.ts +52 -52
- package/src/io/ArrayBuffers.mod.ts +670 -0
- package/src/io/ArrayBuffers.test.ts +14 -14
- package/src/io/ArrayBuffers.ts +1 -446
- package/src/io/Buffer.test.ts +17 -17
- package/src/io/Buffer.ts +17 -17
- package/src/io/ByteBuffer.test.ts +37 -37
- package/src/io/ByteBuffer.ts +574 -566
- package/src/io/base64.ts +46 -44
- package/src/io/dump.ts +22 -22
- package/src/io/isBuffer.test.ts +2 -2
- package/src/io/isBuffer.ts +1 -1
- package/src/io/isTransferable.test.ts +4 -4
- package/src/io/isTransferable.ts +29 -29
- package/src/io/parseDataUri.test.ts +22 -27
- package/src/io/parseDataUri.ts +57 -57
- package/src/io/types.ts +13 -0
- package/src/langs/AsyncCloser.ts +34 -34
- package/src/langs/Closer.ts +28 -28
- package/src/langs/MaybeFunction.ts +5 -5
- package/src/langs/classOf.ts +1 -1
- package/src/langs/deepEqual.test.ts +1 -12
- package/src/langs/deepEqual.ts +82 -82
- package/src/langs/deepFreeze.ts +11 -11
- package/src/langs/getGlobalStates.ts +16 -16
- package/src/langs/getObjectId.ts +10 -13
- package/src/langs/ifPresent.ts +2 -2
- package/src/langs/isClass.ts +1 -1
- package/src/langs/isDefined.ts +1 -1
- package/src/langs/isEmptyObject.ts +1 -1
- package/src/langs/isFunction.ts +1 -1
- package/src/langs/isNil.ts +3 -0
- package/src/langs/isPlainObject.ts +4 -4
- package/src/langs/langs.test.ts +18 -18
- package/src/langs/memoize.ts +21 -21
- package/src/langs/mixin.test.ts +22 -26
- package/src/langs/mixin.ts +6 -9
- package/src/langs/parseBoolean.ts +30 -26
- package/src/langs/shallowClone.ts +11 -11
- package/src/langs/shallowEqual.ts +19 -19
- package/src/libs/ms.test.ts +274 -274
- package/src/libs/ms.ts +137 -137
- package/src/logger/const.ts +18 -0
- package/src/logger/index.ts +2 -0
- package/src/logger/types.ts +10 -0
- package/src/maths/clamp.test.ts +18 -18
- package/src/maths/clamp.ts +17 -17
- package/src/maths/createRandom.test.ts +12 -0
- package/src/maths/random.ts +50 -14
- package/src/modules/isModule.ts +4 -4
- package/src/modules/parseModuleId.test.ts +61 -68
- package/src/modules/parseModuleId.ts +29 -43
- package/src/objects/computeIfAbsent.ts +10 -10
- package/src/objects/get.test-d.ts +33 -51
- package/src/objects/get.ts +31 -31
- package/src/objects/merge/isMergeableObject.ts +5 -5
- package/src/objects/merge/merge.test.ts +658 -880
- package/src/objects/merge/merge.ts +84 -84
- package/src/objects/parseObjectPath.test.ts +13 -13
- package/src/objects/parseObjectPath.ts +25 -25
- package/src/objects/set.test.ts +271 -366
- package/src/objects/set.ts +36 -36
- package/src/schema/typebox/typebox.ts +20 -26
- package/src/scripts/getGenerateContext.ts +79 -79
- package/src/server/crypto/md5.ts +1 -1
- package/src/server/fetch/createFetchWithProxyByNodeFetch.ts +28 -31
- package/src/server/fetch/createFetchWithProxyByUndici.ts +63 -69
- package/src/server/getPackageDir.ts +7 -7
- package/src/server/polyfill/polyfillBrowser.test.ts +10 -10
- package/src/server/polyfill/polyfillBrowser.ts +3 -3
- package/src/server/polyfill/polyfillCrypto.ts +6 -6
- package/src/server/polyfill/polyfillFetch.ts +11 -21
- package/src/server/polyfill/polyfillJsDom.ts +59 -71
- package/src/server/polyfill/polyfillWebSocket.ts +14 -14
- package/src/strings/bytes.test.ts +69 -0
- package/src/strings/camelCase.ts +58 -63
- package/src/strings/formatBytes.ts +50 -29
- package/src/strings/parseBytes.ts +66 -0
- package/src/strings/renderTemplate.test.ts +10 -17
- package/src/strings/renderTemplate.ts +19 -22
- package/src/types.d.ts +9 -9
- package/src/validations/asserts.ts +8 -8
- package/src/validations/isUUID.test.ts +8 -8
- package/src/validations/isUUID.ts +1 -1
- package/src/validations/parseTimestamp.test.ts +2 -2
- package/src/validations/parseTimestamp.ts +21 -21
- package/src/web/getGlobalThis.ts +6 -6
- package/src/web/getRandomValues.ts +29 -29
- package/src/web/randomUUID.ts +5 -5
- package/src/web/requestIdleCallback.ts +7 -10
- package/src/web/structuredClone.test.ts +8 -8
- package/src/web/structuredClone.ts +62 -62
- package/tsconfig.json +35 -34
- package/lib/arrays/MaybeArray.js.map +0 -1
- package/lib/arrays/arrayFromAsync.js.map +0 -1
- package/lib/asyncs/AsyncInterval.js.map +0 -1
- package/lib/asyncs/MaybePromise.js.map +0 -1
- package/lib/asyncs/Promises.js.map +0 -1
- package/lib/asyncs/createAsyncIterator.js.map +0 -1
- package/lib/asyncs/createLazyPromise.js.map +0 -1
- package/lib/asyncs/firstOfAsyncIterator.js.map +0 -1
- package/lib/asyncs/generatorOfStream.js.map +0 -1
- package/lib/asyncs/isIterator.js.map +0 -1
- package/lib/asyncs/isPromise.js.map +0 -1
- package/lib/asyncs/isThenable.js.map +0 -1
- package/lib/asyncs/nextOfAsyncIterator.js.map +0 -1
- package/lib/asyncs/promiseOfCallback.js.map +0 -1
- package/lib/asyncs/timeout.js.map +0 -1
- package/lib/browsers/copy.js.map +0 -1
- package/lib/browsers/download.js.map +0 -1
- package/lib/browsers/getFileFromDataTransfer.js.map +0 -1
- package/lib/browsers/loaders.js.map +0 -1
- package/lib/cn/division/DivisionCode.js +0 -215
- package/lib/cn/division/DivisionCode.js.map +0 -1
- package/lib/cn/division/binarySearch.js +0 -27
- package/lib/cn/division/binarySearch.js.map +0 -1
- package/lib/cn/formatChineseAmount.js +0 -77
- package/lib/cn/formatChineseAmount.js.map +0 -1
- package/lib/cn/id/Mod11.js +0 -43
- package/lib/cn/id/Mod11.js.map +0 -1
- package/lib/cn/id/ResidentIdNumber.js +0 -98
- package/lib/cn/id/ResidentIdNumber.js.map +0 -1
- package/lib/cn/id/types.js +0 -8
- package/lib/cn/id/types.js.map +0 -1
- package/lib/cn/index.js +0 -14
- package/lib/cn/index.js.map +0 -1
- package/lib/cn/parseChineseNumber.js +0 -94
- package/lib/cn/parseChineseNumber.js.map +0 -1
- package/lib/cn/pinyin/cartesianProduct.js +0 -22
- package/lib/cn/pinyin/cartesianProduct.js.map +0 -1
- package/lib/cn/pinyin/data.json +0 -413
- package/lib/cn/pinyin/loader.js +0 -15
- package/lib/cn/pinyin/loader.js.map +0 -1
- package/lib/cn/pinyin/preload.js +0 -4
- package/lib/cn/pinyin/preload.js.map +0 -1
- package/lib/cn/pinyin/toPinyinPure.js +0 -32
- package/lib/cn/pinyin/toPinyinPure.js.map +0 -1
- package/lib/cn/pinyin/transform.js +0 -14
- package/lib/cn/pinyin/transform.js.map +0 -1
- package/lib/cn/types.js +0 -3
- package/lib/cn/types.js.map +0 -1
- package/lib/cn/uscc/Mod31.js +0 -49
- package/lib/cn/uscc/Mod31.js.map +0 -1
- package/lib/cn/uscc/USCC.js +0 -94
- package/lib/cn/uscc/USCC.js.map +0 -1
- package/lib/cn/uscc/isUSCC.js +0 -8
- package/lib/cn/uscc/isUSCC.js.map +0 -1
- package/lib/crypto/base.js.map +0 -1
- package/lib/crypto/getNodeCrypto.js.map +0 -1
- package/lib/crypto/hashing.js.map +0 -1
- package/lib/crypto/md5.bench.js.map +0 -1
- package/lib/crypto/md5.d.js.map +0 -1
- package/lib/crypto/md5.js.map +0 -1
- package/lib/crypto/pem/pem.js.map +0 -1
- package/lib/crypto/randomUUIDv7.js.map +0 -1
- package/lib/crypto/ulid.js.map +0 -1
- package/lib/emitter/types.js.map +0 -1
- package/lib/errors/Errors.js.map +0 -1
- package/lib/fetch/HttpStatus.js.map +0 -1
- package/lib/fetch/createFetchWith.js.map +0 -1
- package/lib/fetch/createFetchWithLogging.js.map +0 -1
- package/lib/fetch/createFetchWithRetry.js.map +0 -1
- package/lib/fetch/dumpRequest.js.map +0 -1
- package/lib/fetch/dumpResponse.js.map +0 -1
- package/lib/fetch/http.types.js.map +0 -1
- package/lib/fetch/index.js.map +0 -1
- package/lib/fetch/types.js.map +0 -1
- package/lib/i18n/createTranslate.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/io/AbstractEncoding.js.map +0 -1
- package/lib/io/ArrayBuffer.test-d.js.map +0 -1
- package/lib/io/ArrayBuffers.js.map +0 -1
- package/lib/io/Buffer.js.map +0 -1
- package/lib/io/ByteBuffer.js.map +0 -1
- package/lib/io/base64.js.map +0 -1
- package/lib/io/dump.js.map +0 -1
- package/lib/io/isBuffer.js.map +0 -1
- package/lib/io/isTransferable.js.map +0 -1
- package/lib/io/parseDataUri.js.map +0 -1
- package/lib/langs/AsyncCloser.js.map +0 -1
- package/lib/langs/Closer.js.map +0 -1
- package/lib/langs/MaybeFunction.js.map +0 -1
- package/lib/langs/classOf.js.map +0 -1
- package/lib/langs/deepEqual.js.map +0 -1
- package/lib/langs/deepFreeze.js.map +0 -1
- package/lib/langs/getGlobalStates.js.map +0 -1
- package/lib/langs/getObjectId.js.map +0 -1
- package/lib/langs/ifPresent.js.map +0 -1
- package/lib/langs/isClass.js.map +0 -1
- package/lib/langs/isDefined.js.map +0 -1
- package/lib/langs/isEmptyObject.js.map +0 -1
- package/lib/langs/isFunction.js.map +0 -1
- package/lib/langs/isNullish.js +0 -5
- package/lib/langs/isNullish.js.map +0 -1
- package/lib/langs/isPlainObject.js.map +0 -1
- package/lib/langs/memoize.js.map +0 -1
- package/lib/langs/mixin.js.map +0 -1
- package/lib/langs/parseBoolean.js.map +0 -1
- package/lib/langs/shallowClone.js.map +0 -1
- package/lib/langs/shallowEqual.js.map +0 -1
- package/lib/libs/ms.js.map +0 -1
- package/lib/logging/Logger.js +0 -5
- package/lib/logging/Logger.js.map +0 -1
- package/lib/logging/createChildLogger.js +0 -16
- package/lib/logging/createChildLogger.js.map +0 -1
- package/lib/logging/createLogger.js +0 -63
- package/lib/logging/createLogger.js.map +0 -1
- package/lib/logging/createNoopLogger.js +0 -13
- package/lib/logging/createNoopLogger.js.map +0 -1
- package/lib/logging/slog.js +0 -143
- package/lib/logging/slog.js.map +0 -1
- package/lib/maths/clamp.js.map +0 -1
- package/lib/maths/random.js.map +0 -1
- package/lib/mitt/index.js +0 -77
- package/lib/mitt/index.js.map +0 -1
- package/lib/modules/isModule.js.map +0 -1
- package/lib/modules/parseModuleId.js.map +0 -1
- package/lib/objects/computeIfAbsent.js.map +0 -1
- package/lib/objects/get.js.map +0 -1
- package/lib/objects/get.test-d.js.map +0 -1
- package/lib/objects/merge/index.js.map +0 -1
- package/lib/objects/merge/isMergeableObject.js.map +0 -1
- package/lib/objects/merge/merge.js.map +0 -1
- package/lib/objects/parseObjectPath.js.map +0 -1
- package/lib/objects/set.js.map +0 -1
- package/lib/schema/typebox/index.js.map +0 -1
- package/lib/schema/typebox/typebox.js.map +0 -1
- package/lib/scripts/getGenerateContext.js.map +0 -1
- package/lib/server/crypto/md5.js.map +0 -1
- package/lib/server/fetch/createFetchWithProxy.js.map +0 -1
- package/lib/server/fetch/createFetchWithProxyByNodeFetch.js.map +0 -1
- package/lib/server/fetch/createFetchWithProxyByUndici.js.map +0 -1
- package/lib/server/getPackageDir.js.map +0 -1
- package/lib/server/index.js.map +0 -1
- package/lib/server/jsdom.js.map +0 -1
- package/lib/server/node-fetch.js.map +0 -1
- package/lib/server/polyfill/polyfillBrowser.js.map +0 -1
- package/lib/server/polyfill/polyfillCrypto.js.map +0 -1
- package/lib/server/polyfill/polyfillFetch.js.map +0 -1
- package/lib/server/polyfill/polyfillJsDom.js.map +0 -1
- package/lib/server/polyfill/polyfillWebSocket.js.map +0 -1
- package/lib/server/ws.js.map +0 -1
- package/lib/strings/camelCase.js.map +0 -1
- package/lib/strings/formatBytes.js.map +0 -1
- package/lib/strings/renderTemplate.js.map +0 -1
- package/lib/typedoc.js.map +0 -1
- package/lib/types.d.js.map +0 -1
- package/lib/validations/asserts.js.map +0 -1
- package/lib/validations/isUUID.js.map +0 -1
- package/lib/validations/parseTimestamp.js.map +0 -1
- package/lib/web/getGlobalThis.js.map +0 -1
- package/lib/web/getRandomValues.js.map +0 -1
- package/lib/web/randomUUID.js.map +0 -1
- package/lib/web/requestIdleCallback.js.map +0 -1
- package/lib/web/structuredClone.js.map +0 -1
- package/src/cn/README.md +0 -3
- package/src/cn/division/DivisionCode.ts +0 -173
- package/src/cn/division/binarySearch.test.ts +0 -64
- package/src/cn/division/binarySearch.ts +0 -25
- package/src/cn/division/division.test.ts +0 -22
- package/src/cn/formatChineseAmount.ts +0 -61
- package/src/cn/id/Mod11.ts +0 -26
- package/src/cn/id/ResidentIdNumber.ts +0 -126
- package/src/cn/id/id.test.ts +0 -20
- package/src/cn/id/types.ts +0 -26
- package/src/cn/index.ts +0 -17
- package/src/cn/parseChineseNumber.test.ts +0 -159
- package/src/cn/parseChineseNumber.ts +0 -97
- package/src/cn/pinyin/cartesianProduct.test.ts +0 -64
- package/src/cn/pinyin/cartesianProduct.ts +0 -24
- package/src/cn/pinyin/data.json +0 -413
- package/src/cn/pinyin/loader.ts +0 -12
- package/src/cn/pinyin/preload.ts +0 -3
- package/src/cn/pinyin/toPinyin.test.ts +0 -12
- package/src/cn/pinyin/toPinyinPure.ts +0 -43
- package/src/cn/pinyin/transform.ts +0 -12
- package/src/cn/scripts/gen.test.ts +0 -131
- package/src/cn/types.ts +0 -11
- package/src/cn/uscc/Mod31.ts +0 -38
- package/src/cn/uscc/USCC.ts +0 -94
- package/src/cn/uscc/isUSCC.ts +0 -8
- package/src/cn/uscc/uscc.test.ts +0 -16
- package/src/langs/isNullish.ts +0 -3
- package/src/logging/Logger.ts +0 -25
- package/src/logging/createChildLogger.ts +0 -16
- package/src/logging/createLogger.ts +0 -50
- package/src/logging/createNoopLogger.ts +0 -13
- package/src/logging/logger.test.ts +0 -36
- package/src/logging/slog.test.ts +0 -8
- package/src/logging/slog.ts +0 -221
- package/src/mitt/README.md +0 -1
- package/src/mitt/index.ts +0 -114
package/src/cn/pinyin/loader.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { setCharToPinyinTable } from './toPinyinPure';
|
|
2
|
-
import { transformData } from './transform';
|
|
3
|
-
|
|
4
|
-
export function loadCharToPinyinTable(): Promise<Record<string, string[]>> {
|
|
5
|
-
return import('./data.json' as unknown as string, { with: { type: 'json' } })
|
|
6
|
-
.then((v) => v.default as Record<string, string[]>)
|
|
7
|
-
.then((data) => {
|
|
8
|
-
let out = transformData(data);
|
|
9
|
-
setCharToPinyinTable(out);
|
|
10
|
-
return out;
|
|
11
|
-
});
|
|
12
|
-
}
|
package/src/cn/pinyin/preload.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { assert, test } from 'vitest';
|
|
2
|
-
import { loadCharToPinyinTable } from './loader';
|
|
3
|
-
import { toPinyinPure } from './toPinyinPure';
|
|
4
|
-
|
|
5
|
-
test('toPinyin', async () => {
|
|
6
|
-
await loadCharToPinyinTable();
|
|
7
|
-
assert.deepEqual(toPinyinPure('真思'), ['zhen,sai', 'zhen,si']);
|
|
8
|
-
|
|
9
|
-
// char to py -> 350k
|
|
10
|
-
// py to char -> 145k
|
|
11
|
-
// csv -> 96k
|
|
12
|
-
});
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { cartesianProduct } from './cartesianProduct';
|
|
2
|
-
|
|
3
|
-
let CharToPinyinTable: Record<string, string[]> | undefined;
|
|
4
|
-
|
|
5
|
-
export function setCharToPinyinTable(table: Record<string, string[]>) {
|
|
6
|
-
CharToPinyinTable = table;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export function getCharToPinyinTable() {
|
|
10
|
-
if (!CharToPinyinTable) {
|
|
11
|
-
return {};
|
|
12
|
-
}
|
|
13
|
-
return CharToPinyinTable;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function toPinyinPureFirst(s: string, sep = ','): string {
|
|
17
|
-
let tab = getCharToPinyinTable();
|
|
18
|
-
return s
|
|
19
|
-
.split('')
|
|
20
|
-
.map((c) => tab[c]?.[0])
|
|
21
|
-
.filter(Boolean)
|
|
22
|
-
.join(sep);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export function toPinyinPure(s: string, sep = ','): string[] {
|
|
26
|
-
let tab = getCharToPinyinTable();
|
|
27
|
-
// ensure order
|
|
28
|
-
return cartesianProduct(s.split('').map((c) => tab[c] || ''))
|
|
29
|
-
.sort((a, b) => {
|
|
30
|
-
for (let i = 0; i < a.length; i++) {
|
|
31
|
-
let x = a[i];
|
|
32
|
-
let y = b[i];
|
|
33
|
-
if (x < y) return -1;
|
|
34
|
-
if (x > y) return 1;
|
|
35
|
-
}
|
|
36
|
-
return 0;
|
|
37
|
-
})
|
|
38
|
-
.map((v) => v.filter(Boolean).join(sep));
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// export function lookupPinyinPure(s: string): Array<Array<string>> {
|
|
42
|
-
// return cartesianProductOfArray(s.split('').map(c => Lookup[c]));
|
|
43
|
-
// }
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export function transformData(input: Record<string, string[]>) {
|
|
2
|
-
let out = {} as Record<string, string[]>;
|
|
3
|
-
for (let [py, chars] of Object.entries(input)) {
|
|
4
|
-
for (let c of chars) {
|
|
5
|
-
if (!out[c]) {
|
|
6
|
-
out[c] = [];
|
|
7
|
-
}
|
|
8
|
-
out[c].push(py);
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
return out;
|
|
12
|
-
}
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import { test } from 'vitest';
|
|
2
|
-
import { getGenerateContext } from '../../scripts/getGenerateContext';
|
|
3
|
-
|
|
4
|
-
function parseCsv(v: string) {
|
|
5
|
-
return v
|
|
6
|
-
.split('\n')
|
|
7
|
-
.filter(Boolean)
|
|
8
|
-
.map((v) => v.split(',').slice(0, 2))
|
|
9
|
-
.slice(1); // remove header
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
test(
|
|
13
|
-
'division-gen',
|
|
14
|
-
{
|
|
15
|
-
timeout: 1000 * 60 * 30,
|
|
16
|
-
},
|
|
17
|
-
async () => {
|
|
18
|
-
// missing parent 4419003 for 441900003001
|
|
19
|
-
// await generate();
|
|
20
|
-
},
|
|
21
|
-
);
|
|
22
|
-
|
|
23
|
-
async function generate() {
|
|
24
|
-
const { cache, writeData, writeSrc } = await getGenerateContext('cn/division');
|
|
25
|
-
|
|
26
|
-
const stats: Record<string, any> = {};
|
|
27
|
-
const entries: Record<string, [number, string][]> = {};
|
|
28
|
-
const set = new Map<number, [number, string, number[]?]>();
|
|
29
|
-
for (const fn of ['provinces', 'cities', 'areas', 'streets', 'villages']) {
|
|
30
|
-
const rows: string[][] = await cache(
|
|
31
|
-
`https://raw.githubusercontent.com/modood/Administrative-divisions-of-China/master/dist/${fn}.csv`,
|
|
32
|
-
).then(parseCsv);
|
|
33
|
-
entries[fn] = rows.map(([k, v]) => {
|
|
34
|
-
if (!v) {
|
|
35
|
-
throw new Error(`empty value for ${k}`);
|
|
36
|
-
}
|
|
37
|
-
// csv name has quote
|
|
38
|
-
return [parseInt(k), v.replace(/"/g, '')];
|
|
39
|
-
});
|
|
40
|
-
stats[
|
|
41
|
-
{
|
|
42
|
-
areas: 'counties',
|
|
43
|
-
streets: 'towns',
|
|
44
|
-
}[fn] || fn
|
|
45
|
-
] = rows.length;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const all = Object.values(entries).flat();
|
|
49
|
-
for (const [k, v] of all) {
|
|
50
|
-
const p = parent(k);
|
|
51
|
-
set.set(k, [k, v]);
|
|
52
|
-
if (p) {
|
|
53
|
-
const par = set.get(parseInt(p));
|
|
54
|
-
if (!par) {
|
|
55
|
-
throw new Error(`missing parent ${p} for ${k}`);
|
|
56
|
-
}
|
|
57
|
-
par[2] ||= [];
|
|
58
|
-
par[2].push(k);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const full = Array.from(set.values());
|
|
63
|
-
const dataset = {
|
|
64
|
-
'village.json': full,
|
|
65
|
-
'village.csv': full.map(([code, name]) => `${code},${name}`).join('\n'),
|
|
66
|
-
'county.json': full
|
|
67
|
-
.filter((v) => {
|
|
68
|
-
return v[0] < 1000000;
|
|
69
|
-
})
|
|
70
|
-
.map((e) => {
|
|
71
|
-
const [code, name] = e;
|
|
72
|
-
// remove leaf children
|
|
73
|
-
if (code > 10000) {
|
|
74
|
-
return [code, name];
|
|
75
|
-
}
|
|
76
|
-
return e;
|
|
77
|
-
}),
|
|
78
|
-
};
|
|
79
|
-
const srcs: Record<string, string> = {
|
|
80
|
-
// preload small dataset
|
|
81
|
-
// 'dataset.gen.ts': `// This if is generated by generate.ts, DO NOT EDIT
|
|
82
|
-
// export const ProvinceCodes = [${entries.provinces.map(([k]) => JSON.stringify(String(k))).join(',')}];
|
|
83
|
-
// `,
|
|
84
|
-
};
|
|
85
|
-
for (const [name, data] of Object.entries(dataset)) {
|
|
86
|
-
await writeData(name, typeof data === 'object' ? JSON.stringify(data) : data);
|
|
87
|
-
}
|
|
88
|
-
for (const [name, data] of Object.entries(srcs)) {
|
|
89
|
-
await writeSrc(name, typeof data === 'object' ? JSON.stringify(data) : data);
|
|
90
|
-
}
|
|
91
|
-
await writeData(`stats.json`, JSON.stringify(stats, null, 2));
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
type TreeNode = [number, TreeNode[]?];
|
|
95
|
-
|
|
96
|
-
export function search(arr: TreeNode[], val: number): [boolean, number] {
|
|
97
|
-
let start = 0;
|
|
98
|
-
let end = arr.length - 1;
|
|
99
|
-
let mid;
|
|
100
|
-
while (start <= end) {
|
|
101
|
-
mid = Math.floor((start + end) / 2);
|
|
102
|
-
if (arr[mid][0] === val) {
|
|
103
|
-
return [true, mid];
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
if (val < arr[mid][0]) {
|
|
107
|
-
end = mid - 1;
|
|
108
|
-
} else {
|
|
109
|
-
start = mid + 1;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
return [false, mid ?? 0];
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
function parent(code: string | number) {
|
|
117
|
-
return split(code).slice(0, -1).join('') || undefined;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
function split(code: string | number) {
|
|
121
|
-
if (!code) return [];
|
|
122
|
-
code = String(code);
|
|
123
|
-
return [
|
|
124
|
-
//
|
|
125
|
-
code.slice(0, 2),
|
|
126
|
-
code.slice(2, 4),
|
|
127
|
-
code.slice(4, 6),
|
|
128
|
-
code.slice(6, 9),
|
|
129
|
-
code.slice(9),
|
|
130
|
-
].filter((v) => parseInt(v));
|
|
131
|
-
}
|
package/src/cn/types.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export interface StringFormat<GenerateOptions, ParsedObject> {
|
|
2
|
-
regex?: RegExp;
|
|
3
|
-
validate: (s: string) => boolean;
|
|
4
|
-
generate: (opts?: GenerateOptions) => ParsedObject;
|
|
5
|
-
parse: (s: string) => ParsedObject | undefined;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export interface StringChecksum {
|
|
9
|
-
validate: (s: string) => boolean;
|
|
10
|
-
generate: (s: string) => string;
|
|
11
|
-
}
|
package/src/cn/uscc/Mod31.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GB/T 17710(采ISO 7064)的模31校验码
|
|
3
|
-
*
|
|
4
|
-
* Mod31-3
|
|
5
|
-
*/
|
|
6
|
-
export class Mod31Checksum {
|
|
7
|
-
weights = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28];
|
|
8
|
-
chars = '0123456789ABCDEFGHJKLMNPQRTUWXY';
|
|
9
|
-
numbers: Record<string, number> = this.chars.split('').reduce(
|
|
10
|
-
(acc, cur, i) => {
|
|
11
|
-
acc[cur] = i;
|
|
12
|
-
return acc;
|
|
13
|
-
},
|
|
14
|
-
{} as Record<string, number>,
|
|
15
|
-
);
|
|
16
|
-
|
|
17
|
-
toChar(n: number) {
|
|
18
|
-
return this.chars[n];
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
toNumber(c: string) {
|
|
22
|
-
return this.numbers[c];
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
validate(s: string) {
|
|
26
|
-
return s.at(-1) === this.generate(s.slice(0, s.length - 1));
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
generate(s: string) {
|
|
30
|
-
let sum = 0;
|
|
31
|
-
for (let i = 0; i < s.length; i++) {
|
|
32
|
-
sum += this.numbers[s[i]] * this.weights[i];
|
|
33
|
-
}
|
|
34
|
-
return this.toChar(31 - (sum % 31));
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export const Mod31 = new Mod31Checksum();
|
package/src/cn/uscc/USCC.ts
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { Mod31 } from './Mod31';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* - GB 32100-2015 法人和其他组织统一社会信用代码编码规则
|
|
5
|
-
* - USCI -> UnifiedSocialCreditIdentifier
|
|
6
|
-
* - USCC -> Unified Social Credit Code - 官方叫法
|
|
7
|
-
* - Business License
|
|
8
|
-
*
|
|
9
|
-
* @see https://en.wikipedia.org/wiki/Unified_Social_Credit_Identifier
|
|
10
|
-
*/
|
|
11
|
-
export class UnifiedSocialCreditCodeFormat {
|
|
12
|
-
registryCodeLabels: Record<string, Code> = {
|
|
13
|
-
1: {
|
|
14
|
-
label: '机构编制',
|
|
15
|
-
children: {
|
|
16
|
-
1: { label: '机关' },
|
|
17
|
-
2: { label: '事业单位' },
|
|
18
|
-
3: { label: '中央编办直接管理机构编制的群众团体' },
|
|
19
|
-
9: { label: '其他' },
|
|
20
|
-
},
|
|
21
|
-
},
|
|
22
|
-
5: {
|
|
23
|
-
label: '民政',
|
|
24
|
-
children: {
|
|
25
|
-
1: { label: '社会团体' },
|
|
26
|
-
2: { label: '民办非企业单位' },
|
|
27
|
-
3: { label: '基金会' },
|
|
28
|
-
9: { label: '其他' },
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
9: {
|
|
32
|
-
label: '工商',
|
|
33
|
-
children: {
|
|
34
|
-
1: { label: '企业' },
|
|
35
|
-
2: { label: '个体工商户' },
|
|
36
|
-
3: { label: '农民专业合作社' },
|
|
37
|
-
9: { label: '其他' },
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
Y: {
|
|
41
|
-
label: '其他',
|
|
42
|
-
children: {
|
|
43
|
-
1: { label: '其他' },
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
/* 16 位 */
|
|
49
|
-
regex = /^([159][1239]|Y1)[0-9]{6}[0-9A-HJ-NP-RTUWXY]{10}$/; // 无 I O Z S V
|
|
50
|
-
checksum = Mod31;
|
|
51
|
-
|
|
52
|
-
parse(s: string): ParsedUSCC {
|
|
53
|
-
let registryCode = s[0];
|
|
54
|
-
let l1 = this.registryCodeLabels[registryCode];
|
|
55
|
-
let organizationTypeCode = s[1];
|
|
56
|
-
return {
|
|
57
|
-
registryAuthorityCode: registryCode,
|
|
58
|
-
registryAuthorityCodeLabel: l1?.label,
|
|
59
|
-
organizationTypeCode,
|
|
60
|
-
organizationTypeLabel: l1?.children?.[organizationTypeCode]?.label,
|
|
61
|
-
registryDivisionCode: s.slice(3, 6),
|
|
62
|
-
// GB 11714-1997 全国组织机构代码编制规则
|
|
63
|
-
subject: s.slice(6, 15),
|
|
64
|
-
checksum: s.slice(17, 18),
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
validate(s: string) {
|
|
69
|
-
return this.regex.test(s) && this.checksum.validate(s);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
interface Code {
|
|
74
|
-
label: string;
|
|
75
|
-
children?: Record<string, Code>;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
interface ParsedUSCC {
|
|
79
|
-
// 登记管理部门码
|
|
80
|
-
registryAuthorityCode: string;
|
|
81
|
-
registryAuthorityCodeLabel?: string;
|
|
82
|
-
// 机构类别代码
|
|
83
|
-
organizationTypeCode: string;
|
|
84
|
-
organizationTypeLabel?: string;
|
|
85
|
-
// 登记管理机关行政区划代码
|
|
86
|
-
registryDivisionCode: string;
|
|
87
|
-
registryDivisionLabel?: string;
|
|
88
|
-
// 主体标识码
|
|
89
|
-
subject: string;
|
|
90
|
-
// 校验码
|
|
91
|
-
checksum: string;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export const USCC = new UnifiedSocialCreditCodeFormat();
|
package/src/cn/uscc/isUSCC.ts
DELETED
package/src/cn/uscc/uscc.test.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { expect, test } from 'vitest';
|
|
2
|
-
import { isUSCC } from './isUSCC';
|
|
3
|
-
import { Mod31 } from './Mod31';
|
|
4
|
-
import { USCC } from './USCC';
|
|
5
|
-
|
|
6
|
-
test('uscc', () => {
|
|
7
|
-
let cs = Mod31;
|
|
8
|
-
|
|
9
|
-
// 阿里云计算
|
|
10
|
-
expect(cs.validate('91330106673959654P')).toBeTruthy();
|
|
11
|
-
expect(cs.generate('91330106673959654')).toBe('P');
|
|
12
|
-
|
|
13
|
-
expect(isUSCC('91330106673959654P')).toBeTruthy();
|
|
14
|
-
|
|
15
|
-
console.log(USCC.parse('91330106673959654P'));
|
|
16
|
-
});
|
package/src/langs/isNullish.ts
DELETED
package/src/logging/Logger.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Logger interface satisfies the `console`, `pino` logger interface.
|
|
3
|
-
*/
|
|
4
|
-
export interface Logger {
|
|
5
|
-
trace(...args: any[]): void;
|
|
6
|
-
|
|
7
|
-
debug(...args: any[]): void;
|
|
8
|
-
|
|
9
|
-
info(...args: any[]): void;
|
|
10
|
-
|
|
11
|
-
warn(...args: any[]): void;
|
|
12
|
-
|
|
13
|
-
error(...args: any[]): void;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* create child logger with given context
|
|
17
|
-
*/
|
|
18
|
-
child?: (o: object) => Logger;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface LoggerWithChild extends Logger {
|
|
22
|
-
child: (o: Record<string, any>) => LoggerWithChild;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export type LogLevel = 'error' | 'warn' | 'info' | 'debug' | 'trace';
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { createLogger } from './createLogger';
|
|
2
|
-
import type { Logger, LoggerWithChild } from './Logger';
|
|
3
|
-
|
|
4
|
-
export function createChildLogger(l: Logger, ctx: object): LoggerWithChild {
|
|
5
|
-
if (l.child) {
|
|
6
|
-
return l.child(ctx) as LoggerWithChild;
|
|
7
|
-
}
|
|
8
|
-
return createLogger((o) => {
|
|
9
|
-
const { level, values, ...c } = o;
|
|
10
|
-
if (Object.keys(c).length) {
|
|
11
|
-
l[level](c, ...values);
|
|
12
|
-
} else {
|
|
13
|
-
l[level](...values);
|
|
14
|
-
}
|
|
15
|
-
}, ctx);
|
|
16
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import type { LoggerWithChild, LogLevel } from './Logger';
|
|
2
|
-
|
|
3
|
-
export interface CreateLoggerOptions {
|
|
4
|
-
name?: string;
|
|
5
|
-
handler?: (o: { level: LogLevel; values: any[] } & Record<string | symbol, any>) => void;
|
|
6
|
-
context?: Record<string, any>;
|
|
7
|
-
levels?: LogLevel[];
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export function createLogger(
|
|
11
|
-
write: (o: { level: LogLevel; values: any[] } & Record<string | symbol, any>) => void = ({
|
|
12
|
-
level,
|
|
13
|
-
values,
|
|
14
|
-
...ctx
|
|
15
|
-
}) => {
|
|
16
|
-
({ values, ...ctx } = merge(ctx, values));
|
|
17
|
-
console[level]?.(...values, ctx);
|
|
18
|
-
},
|
|
19
|
-
context: object = {},
|
|
20
|
-
): LoggerWithChild {
|
|
21
|
-
return {
|
|
22
|
-
trace: (...values) => {
|
|
23
|
-
write({ ...context, level: 'trace', values });
|
|
24
|
-
},
|
|
25
|
-
debug: (...values) => {
|
|
26
|
-
write({ ...context, level: 'debug', values });
|
|
27
|
-
},
|
|
28
|
-
info: (...values) => {
|
|
29
|
-
write({ ...context, level: 'info', values });
|
|
30
|
-
},
|
|
31
|
-
warn: (...values) => {
|
|
32
|
-
write({ ...context, level: 'warn', values });
|
|
33
|
-
},
|
|
34
|
-
error: (...values) => {
|
|
35
|
-
write({ ...context, level: 'error', values });
|
|
36
|
-
},
|
|
37
|
-
child: (ctx) => createLogger(write, { ...context, ...ctx }),
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// logger.info({name:'wener'},'message')
|
|
42
|
-
// merge initial context with message object
|
|
43
|
-
function merge(ctx: any, values: any[]) {
|
|
44
|
-
if (values[0] && typeof values[0] === 'object') {
|
|
45
|
-
return { ...ctx, ...values[0], values: values.slice(1) };
|
|
46
|
-
}
|
|
47
|
-
return { ...ctx, values };
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// https://github.com/nestjs/nest/blob/master/packages/common/services/console-logger.service.ts
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { LoggerWithChild } from './Logger';
|
|
2
|
-
|
|
3
|
-
export function createNoopLogger(): LoggerWithChild {
|
|
4
|
-
const noop = (..._: any[]) => undefined;
|
|
5
|
-
return {
|
|
6
|
-
trace: noop,
|
|
7
|
-
debug: noop,
|
|
8
|
-
info: noop,
|
|
9
|
-
warn: noop,
|
|
10
|
-
error: noop,
|
|
11
|
-
child: () => createNoopLogger(),
|
|
12
|
-
};
|
|
13
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { expect, test } from 'vitest';
|
|
2
|
-
import { createChildLogger } from './createChildLogger';
|
|
3
|
-
import { createLogger } from './createLogger';
|
|
4
|
-
|
|
5
|
-
test('logger', () => {
|
|
6
|
-
{
|
|
7
|
-
const logs: any[] = [];
|
|
8
|
-
const base = createLogger((o) => logs.push(o));
|
|
9
|
-
const l = createChildLogger(base, { c: 'test' });
|
|
10
|
-
l.info('hello');
|
|
11
|
-
expect(logs.shift()).toEqual({ level: 'info', values: ['hello'], c: 'test' });
|
|
12
|
-
l.child({ m: 1 }).trace('trace');
|
|
13
|
-
expect(logs.shift()).toEqual({ level: 'trace', values: ['trace'], c: 'test', m: 1 });
|
|
14
|
-
}
|
|
15
|
-
createChildLogger(console, { c: 'test' }).info('hello');
|
|
16
|
-
{
|
|
17
|
-
let pass = 0;
|
|
18
|
-
const l = createLogger(
|
|
19
|
-
(o) => {
|
|
20
|
-
pass++;
|
|
21
|
-
console.log(`${o.level}: [${[o.m, o.c].filter(Boolean).join('.') || 'default'}]`, ...o.values);
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
m: 'Root',
|
|
25
|
-
},
|
|
26
|
-
);
|
|
27
|
-
l.info('nice');
|
|
28
|
-
expect(pass).toBe(1);
|
|
29
|
-
l.child({}).info('nice 2');
|
|
30
|
-
expect(pass).toBe(2);
|
|
31
|
-
createChildLogger(l, { m: 'Child' }).info('nice 3');
|
|
32
|
-
expect(pass).toBe(3);
|
|
33
|
-
|
|
34
|
-
createLogger().child({ name: 'wener' }).info({ x: 1 }, 'Nice');
|
|
35
|
-
}
|
|
36
|
-
});
|