@wener/utils 1.1.26 → 1.1.29
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 +4 -0
- package/lib/arrays/MaybeArray.js +36 -25
- package/lib/arrays/MaybeArray.js.map +1 -1
- package/lib/arrays/arrayFromAsync.js +5 -7
- package/lib/arrays/arrayFromAsync.js.map +1 -1
- package/lib/asyncs/AsyncInterval.js +11 -12
- package/lib/asyncs/AsyncInterval.js.map +1 -1
- package/lib/asyncs/MaybePromise.js +3 -0
- package/lib/asyncs/MaybePromise.js.map +1 -0
- package/lib/asyncs/createAsyncIterator.js +37 -35
- package/lib/asyncs/createAsyncIterator.js.map +1 -1
- package/lib/asyncs/createLazyPromise.js +59 -60
- package/lib/asyncs/createLazyPromise.js.map +1 -1
- package/lib/asyncs/firstOfAsyncIterator.js +7 -9
- package/lib/asyncs/firstOfAsyncIterator.js.map +1 -1
- package/lib/asyncs/generatorOfStream.js +16 -0
- package/lib/asyncs/generatorOfStream.js.map +1 -0
- package/lib/asyncs/isIterator.js +3 -4
- package/lib/asyncs/isIterator.js.map +1 -1
- package/lib/asyncs/isPromise.js +3 -4
- package/lib/asyncs/isPromise.js.map +1 -1
- package/lib/asyncs/isThenable.js +6 -0
- package/lib/asyncs/isThenable.js.map +1 -0
- package/lib/asyncs/nextOfAsyncIterator.js +20 -14
- package/lib/asyncs/nextOfAsyncIterator.js.map +1 -1
- package/lib/asyncs/promiseOfCallback.js +17 -0
- package/lib/asyncs/promiseOfCallback.js.map +1 -0
- package/lib/asyncs/sleep.js +2 -3
- package/lib/asyncs/sleep.js.map +1 -1
- package/lib/asyncs/timeout.js +22 -26
- package/lib/asyncs/timeout.js.map +1 -1
- package/lib/browsers/copy.js +47 -45
- package/lib/browsers/copy.js.map +1 -1
- package/lib/browsers/download.js +38 -27
- package/lib/browsers/download.js.map +1 -1
- package/lib/browsers/getFileFromDataTransfer.js +41 -28
- package/lib/browsers/getFileFromDataTransfer.js.map +1 -1
- package/lib/browsers/loaders.js +43 -43
- package/lib/browsers/loaders.js.map +1 -1
- package/lib/crypto/base.js +5 -4
- package/lib/crypto/base.js.map +1 -1
- package/lib/crypto/getNodeCrypto.js +14 -13
- package/lib/crypto/getNodeCrypto.js.map +1 -1
- package/lib/crypto/getRandomValues.js +22 -26
- package/lib/crypto/getRandomValues.js.map +1 -1
- package/lib/crypto/hashing.js +42 -50
- package/lib/crypto/hashing.js.map +1 -1
- 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 +119 -121
- package/lib/crypto/md5.js.map +1 -1
- package/lib/crypto/pem/pem.js +32 -35
- package/lib/crypto/pem/pem.js.map +1 -1
- package/lib/crypto/randomUUID.js +12 -11
- package/lib/crypto/randomUUID.js.map +1 -1
- package/lib/crypto/ulid.js +123 -112
- package/lib/crypto/ulid.js.map +1 -1
- package/lib/errors/Errors.js +167 -149
- package/lib/errors/Errors.js.map +1 -1
- package/lib/fetch/createFetchWith.js +20 -23
- package/lib/fetch/createFetchWith.js.map +1 -1
- package/lib/fetch/createFetchWithLogging.js +20 -16
- package/lib/fetch/createFetchWithLogging.js.map +1 -1
- package/lib/fetch/createFetchWithRetry.js +61 -65
- package/lib/fetch/createFetchWithRetry.js.map +1 -1
- package/lib/fetch/dumpRequest.js +39 -42
- package/lib/fetch/dumpRequest.js.map +1 -1
- package/lib/fetch/dumpResponse.js +13 -20
- package/lib/fetch/dumpResponse.js.map +1 -1
- 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 +89 -80
- package/lib/http/HttpStatus.js.map +1 -1
- package/lib/i18n/createTranslate.js +48 -48
- package/lib/i18n/createTranslate.js.map +1 -1
- package/lib/index.js +30 -14
- package/lib/index.js.map +1 -1
- 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 +198 -172
- package/lib/io/ArrayBuffers.js.map +1 -1
- package/lib/io/Buffer.js +21 -20
- package/lib/io/Buffer.js.map +1 -1
- package/lib/io/base64.js +49 -48
- package/lib/io/base64.js.map +1 -1
- package/lib/io/isBuffer.js +7 -5
- package/lib/io/isBuffer.js.map +1 -1
- package/lib/io/isTransferable.js +23 -19
- package/lib/io/isTransferable.js.map +1 -1
- package/lib/isomorphics/getGlobalThis.js +17 -12
- package/lib/isomorphics/getGlobalThis.js.map +1 -1
- package/lib/isomorphics/structuredClone.js +71 -63
- package/lib/isomorphics/structuredClone.js.map +1 -1
- package/lib/langs/MaybeFunction.js +7 -7
- package/lib/langs/MaybeFunction.js.map +1 -1
- package/lib/langs/classOf.js +3 -4
- package/lib/langs/classOf.js.map +1 -1
- package/lib/langs/deepEqual.js +77 -85
- package/lib/langs/deepEqual.js.map +1 -1
- 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 +3 -4
- package/lib/langs/isClass.js.map +1 -1
- package/lib/langs/isDefined.js +3 -4
- package/lib/langs/isDefined.js.map +1 -1
- package/lib/langs/isEmptyObject.js +3 -5
- package/lib/langs/isEmptyObject.js.map +1 -1
- package/lib/langs/isFunction.js +5 -0
- package/lib/langs/isFunction.js.map +1 -0
- package/lib/langs/isPlainObject.js +7 -8
- package/lib/langs/isPlainObject.js.map +1 -1
- package/lib/langs/memoize.js +19 -21
- package/lib/langs/memoize.js.map +1 -1
- package/lib/langs/parseBoolean.js +26 -27
- package/lib/langs/parseBoolean.js.map +1 -1
- package/lib/langs/shallowClone.js +12 -12
- package/lib/langs/shallowClone.js.map +1 -1
- package/lib/langs/shallowEqual.js +21 -18
- package/lib/langs/shallowEqual.js.map +1 -1
- package/lib/libs/ms.js +123 -103
- package/lib/libs/ms.js.map +1 -1
- package/lib/logging/Logger.js +5 -0
- package/lib/logging/Logger.js.map +1 -0
- package/lib/logging/createChildLogger.js +12 -14
- package/lib/logging/createChildLogger.js.map +1 -1
- package/lib/logging/createLogger.js +59 -33
- package/lib/logging/createLogger.js.map +1 -1
- package/lib/logging/createNoopLogger.js +11 -12
- package/lib/logging/createNoopLogger.js.map +1 -1
- 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 +14 -15
- package/lib/maths/random.js.map +1 -1
- package/lib/modules/isModule.js +5 -4
- package/lib/modules/isModule.js.map +1 -1
- package/lib/modules/parseModuleId.js +36 -31
- package/lib/modules/parseModuleId.js.map +1 -1
- package/lib/objects/get.js +13 -11
- package/lib/objects/get.js.map +1 -1
- 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 +11 -10
- package/lib/objects/merge/isMergeableObject.js.map +1 -1
- package/lib/objects/merge/merge.js +65 -66
- package/lib/objects/merge/merge.js.map +1 -1
- package/lib/objects/parseObjectPath.js +35 -23
- package/lib/objects/parseObjectPath.js.map +1 -1
- package/lib/objects/set.js +33 -34
- package/lib/objects/set.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/common/encoder.js +100 -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 +5 -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 +367 -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 +384 -0
- package/lib/schema/typebox/gen/codegen/expression/expression.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/expression/index.js +6 -0
- package/lib/schema/typebox/gen/codegen/expression/index.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/index.js +5 -0
- package/lib/schema/typebox/gen/codegen/index.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/model/index.js +16 -0
- package/lib/schema/typebox/gen/codegen/model/index.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/model/model-to-arktype.js +239 -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 +359 -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 +217 -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 +253 -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 +171 -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 +164 -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 +218 -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 +206 -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 +204 -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 +227 -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 +4 -0
- package/lib/schema/typebox/gen/codegen/typescript/index.js.map +1 -0
- package/lib/schema/typebox/gen/codegen/typescript/typescript-to-model.js +48 -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 +596 -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.js +2 -1
- package/lib/server.js.map +1 -1
- package/lib/servers/crypto/md5.js +3 -5
- package/lib/servers/crypto/md5.js.map +1 -1
- package/lib/servers/fetch/createFetchWithProxy.js +2 -4
- package/lib/servers/fetch/createFetchWithProxy.js.map +1 -1
- package/lib/servers/fetch/createFetchWithProxyByNodeFetch.js +34 -34
- package/lib/servers/fetch/createFetchWithProxyByNodeFetch.js.map +1 -1
- package/lib/servers/fetch/createFetchWithProxyByUndici.js +59 -45
- package/lib/servers/fetch/createFetchWithProxyByUndici.js.map +1 -1
- package/lib/servers/getPackageDir.js +8 -10
- package/lib/servers/getPackageDir.js.map +1 -1
- package/lib/servers/jsdom.js +3 -2
- package/lib/servers/jsdom.js.map +1 -1
- package/lib/servers/node-fetch.js +4 -3
- package/lib/servers/node-fetch.js.map +1 -1
- package/lib/servers/polyfill/polyfillBrowser.js +17 -0
- package/lib/servers/polyfill/polyfillBrowser.js.map +1 -0
- package/lib/servers/polyfill/polyfillCrypto.js +8 -10
- package/lib/servers/polyfill/polyfillCrypto.js.map +1 -1
- package/lib/servers/polyfill/polyfillFetch.js +23 -22
- package/lib/servers/polyfill/polyfillFetch.js.map +1 -1
- package/lib/servers/polyfill/polyfillJsDom.js +59 -52
- package/lib/servers/polyfill/polyfillJsDom.js.map +1 -1
- package/lib/servers/polyfill/polyfillWebSocket.js +13 -13
- package/lib/servers/polyfill/polyfillWebSocket.js.map +1 -1
- package/lib/servers/ws.js +3 -2
- package/lib/servers/ws.js.map +1 -1
- package/lib/strings/camelCase.js +51 -49
- package/lib/strings/camelCase.js.map +1 -1
- package/lib/strings/formatBytes.js +41 -15
- package/lib/strings/formatBytes.js.map +1 -1
- package/lib/strings/renderTemplate.js +27 -20
- package/lib/strings/renderTemplate.js.map +1 -1
- package/lib/typedoc.js +4 -0
- package/lib/typedoc.js.map +1 -0
- package/lib/types/global.d.js +2 -0
- package/lib/types/global.d.js.map +1 -0
- package/lib/types/index.d.js +6 -0
- package/lib/types/index.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 +3 -4
- package/lib/validations/isUUID.js.map +1 -1
- package/lib/validations/parseTimestamp.js +25 -21
- package/lib/validations/parseTimestamp.js.map +1 -1
- package/package.json +59 -44
- package/src/index.ts +3 -3
- package/src/langs/deepFreeze.ts +19 -0
- package/src/langs/hashCode.ignored.ts +125 -0
- package/src/libs/README.md +2 -0
- package/src/logging/slog.ts +121 -0
- package/src/maths/clamp.test.ts +19 -0
- package/src/maths/clamp.ts +23 -1
- package/src/objects/get.ts +14 -14
- package/src/objects/set.ts +5 -5
- package/src/schema/typebox/gen/codegen/common/encoder.ts +99 -0
- package/src/schema/typebox/gen/codegen/common/formatter.ts +31 -0
- package/src/schema/typebox/gen/codegen/common/index.ts +29 -0
- package/src/schema/typebox/gen/codegen/common/jsdoc.ts +93 -0
- package/src/schema/typebox/gen/codegen/expression/compiler.ts +377 -0
- package/src/schema/typebox/gen/codegen/expression/errors.ts +302 -0
- package/src/schema/typebox/gen/codegen/expression/evaluator.ts +268 -0
- package/src/schema/typebox/gen/codegen/expression/expression.ts +538 -0
- package/src/schema/typebox/gen/codegen/expression/index.ts +32 -0
- package/src/schema/typebox/gen/codegen/index.ts +29 -0
- package/src/schema/typebox/gen/codegen/model/index.ts +40 -0
- package/src/schema/typebox/gen/codegen/model/model-to-arktype.ts +266 -0
- package/src/schema/typebox/gen/codegen/model/model-to-expression.ts +378 -0
- package/src/schema/typebox/gen/codegen/model/model-to-grpc.ts +244 -0
- package/src/schema/typebox/gen/codegen/model/model-to-io-ts.ts +294 -0
- package/src/schema/typebox/gen/codegen/model/model-to-javascript.ts +42 -0
- package/src/schema/typebox/gen/codegen/model/model-to-json-schema.ts +166 -0
- package/src/schema/typebox/gen/codegen/model/model-to-typebox.ts +32 -0
- package/src/schema/typebox/gen/codegen/model/model-to-typescript.ts +189 -0
- package/src/schema/typebox/gen/codegen/model/model-to-valibot.ts +236 -0
- package/src/schema/typebox/gen/codegen/model/model-to-value.ts +42 -0
- package/src/schema/typebox/gen/codegen/model/model-to-yrel.ts +232 -0
- package/src/schema/typebox/gen/codegen/model/model-to-yup.ts +226 -0
- package/src/schema/typebox/gen/codegen/model/model-to-zod.ts +251 -0
- package/src/schema/typebox/gen/codegen/model/model.ts +33 -0
- package/src/schema/typebox/gen/codegen/typescript/index.ts +28 -0
- package/src/schema/typebox/gen/codegen/typescript/typescript-to-model.ts +61 -0
- package/src/schema/typebox/gen/codegen/typescript/typescript-to-typebox.ts +647 -0
- package/src/schema/typebox/gen/gen.test.ts +12 -0
- package/src/schema/typebox/gen/index.ts +1 -0
- package/src/schema/typebox/index.ts +1 -0
- package/src/schema/typebox/typebox.ts +34 -0
- package/src/servers/fetch/createFetchWithProxyByUndici.ts +16 -1
- package/src/types/index.d.ts +1 -0
- package/dist/LICENSE.txt +0 -1
- package/dist/cjs/getGlobalThis-304f74e0.js +0 -2
- package/dist/cjs/getGlobalThis-304f74e0.js.map +0 -1
- package/dist/cjs/index.cjs +0 -21
- package/dist/cjs/index.cjs.map +0 -1
- package/dist/cjs/server.cjs +0 -2
- package/dist/cjs/server.cjs.map +0 -1
- package/dist/cjs/servers/jsdom.cjs +0 -2
- package/dist/cjs/servers/jsdom.cjs.map +0 -1
- package/dist/cjs/servers/node-fetch.cjs +0 -2
- package/dist/cjs/servers/node-fetch.cjs.map +0 -1
- package/dist/cjs/servers/ws.cjs +0 -2
- package/dist/cjs/servers/ws.cjs.map +0 -1
- package/dist/esm/getGlobalThis-b7ad0cf9.js +0 -2
- package/dist/esm/getGlobalThis-b7ad0cf9.js.map +0 -1
- package/dist/esm/index.js +0 -21
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/server.js +0 -2
- package/dist/esm/server.js.map +0 -1
- package/dist/esm/servers/jsdom.js +0 -2
- package/dist/esm/servers/jsdom.js.map +0 -1
- package/dist/esm/servers/node-fetch.js +0 -2
- package/dist/esm/servers/node-fetch.js.map +0 -1
- package/dist/esm/servers/ws.js +0 -2
- package/dist/esm/servers/ws.js.map +0 -1
- package/dist/system/getGlobalThis-8951eb0e.js +0 -2
- package/dist/system/getGlobalThis-8951eb0e.js.map +0 -1
- package/dist/system/index.js +0 -21
- package/dist/system/index.js.map +0 -1
- package/dist/system/server.js +0 -2
- package/dist/system/server.js.map +0 -1
- package/dist/system/servers/jsdom.js +0 -2
- package/dist/system/servers/jsdom.js.map +0 -1
- package/dist/system/servers/node-fetch.js +0 -2
- package/dist/system/servers/node-fetch.js.map +0 -1
- package/dist/system/servers/ws.js +0 -2
- package/dist/system/servers/ws.js.map +0 -1
- package/src/langs/hashCode.ts +0 -37
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function assert(condition, msg) {
|
|
2
|
+
// if (!condition) {
|
|
3
|
+
// throw new AssertionError(msg);
|
|
4
|
+
// }
|
|
5
|
+
console.assert(!condition, msg);
|
|
6
|
+
}
|
|
7
|
+
export function assertIsDefined(val) {
|
|
8
|
+
// if (val === undefined || val === null) {
|
|
9
|
+
// throw new AssertionError(`Expected 'val' to be defined, but received ${val}`);
|
|
10
|
+
// }
|
|
11
|
+
console.assert(val === undefined || val === null, 'Expected defined');
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=asserts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/validations/asserts.ts"],"sourcesContent":["export function assert(condition: any, msg?: string): asserts condition {\n // if (!condition) {\n // throw new AssertionError(msg);\n // }\n console.assert(!condition, msg);\n}\n\nexport function assertIsDefined<T>(val: T): asserts val is NonNullable<T> {\n // if (val === undefined || val === null) {\n // throw new AssertionError(`Expected 'val' to be defined, but received ${val}`);\n // }\n console.assert(val === undefined || val === null, 'Expected defined');\n}\n"],"names":["assert","condition","msg","console","assertIsDefined","val","undefined"],"mappings":"AAAA,OAAO,SAASA,OAAOC,SAAc,EAAEC,GAAY;IACjD,oBAAoB;IACpB,mCAAmC;IACnC,IAAI;IACJC,QAAQH,MAAM,CAAC,CAACC,WAAWC;AAC7B;AAEA,OAAO,SAASE,gBAAmBC,GAAM;IACvC,2CAA2C;IAC3C,mFAAmF;IACnF,IAAI;IACJF,QAAQH,MAAM,CAACK,QAAQC,aAAaD,QAAQ,MAAM;AACpD"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
function isUUID(str) {
|
|
2
|
-
|
|
1
|
+
export function isUUID(str) {
|
|
2
|
+
return Boolean(str) && /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(String(str));
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
//# sourceMappingURL=isUUID.js.map
|
|
5
|
+
//# sourceMappingURL=isUUID.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/validations/isUUID.ts"],"sourcesContent":["export function isUUID(str: string | undefined | null) {\n return Boolean(str) && /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(String(str));\n}\n"],"names":["isUUID","str","Boolean","test","String"],"mappings":"AAAA,OAAO,SAASA,OAAOC,GAA8B;IACnD,OAAOC,QAAQD,QAAQ,yEAAyEE,IAAI,CAACC,OAAOH;AAC9G"}
|
|
@@ -1,25 +1,29 @@
|
|
|
1
|
-
function parseTimestamp(raw) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
if (raw instanceof Date) {
|
|
6
|
-
return raw;
|
|
7
|
-
}
|
|
8
|
-
if (typeof raw === "string" && /^[0-9.]+$/.test(raw)) {
|
|
9
|
-
let n = parseFloat(raw);
|
|
10
|
-
const len = Math.floor(n).toString().length;
|
|
11
|
-
if (len <= 11) {
|
|
12
|
-
n *= 1e3;
|
|
1
|
+
export function parseTimestamp(raw) {
|
|
2
|
+
if (!raw) {
|
|
3
|
+
return undefined;
|
|
13
4
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const date = new Date(raw);
|
|
17
|
-
if (!isNaN(+date)) {
|
|
18
|
-
return date;
|
|
5
|
+
if (raw instanceof Date) {
|
|
6
|
+
return raw;
|
|
19
7
|
}
|
|
20
|
-
|
|
21
|
-
|
|
8
|
+
if (typeof raw === 'string' && /^[0-9.]+$/.test(raw)) {
|
|
9
|
+
let n = parseFloat(raw);
|
|
10
|
+
const len = Math.floor(n).toString().length;
|
|
11
|
+
/*
|
|
12
|
+
最常见的是 10 位和 13 位
|
|
13
|
+
9999999999 - 10*9 - 1970-04-26
|
|
14
|
+
99999999999 - 11*9 - 1973
|
|
15
|
+
999999999999 - 12*9 - 2001
|
|
16
|
+
*/ if (len <= 11) {
|
|
17
|
+
n *= 1000;
|
|
18
|
+
}
|
|
19
|
+
return new Date(n);
|
|
20
|
+
} else if (typeof raw === 'string') {
|
|
21
|
+
const date = new Date(raw);
|
|
22
|
+
if (!isNaN(+date)) {
|
|
23
|
+
return date;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
throw new Error(`parseTimestamp: invalid "${raw}"`);
|
|
22
27
|
}
|
|
23
28
|
|
|
24
|
-
|
|
25
|
-
//# sourceMappingURL=parseTimestamp.js.map
|
|
29
|
+
//# sourceMappingURL=parseTimestamp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/validations/parseTimestamp.ts"],"sourcesContent":["export function parseTimestamp(raw?: string | number | Date): Date | undefined {\n if (!raw) {\n return undefined;\n }\n if (raw instanceof Date) {\n return raw;\n }\n\n if (typeof raw === 'string' && /^[0-9.]+$/.test(raw)) {\n let n = parseFloat(raw);\n const len = Math.floor(n).toString().length;\n /*\n 最常见的是 10 位和 13 位\n 9999999999 - 10*9 - 1970-04-26\n 99999999999 - 11*9 - 1973\n 999999999999 - 12*9 - 2001\n */\n if (len <= 11) {\n n *= 1000;\n }\n return new Date(n);\n } else if (typeof raw === 'string') {\n const date = new Date(raw);\n if (!isNaN(+date)) {\n return date;\n }\n }\n throw new Error(`parseTimestamp: invalid \"${raw}\"`);\n}\n"],"names":["parseTimestamp","raw","undefined","Date","test","n","parseFloat","len","Math","floor","toString","length","date","isNaN","Error"],"mappings":"AAAA,OAAO,SAASA,eAAeC,GAA4B;IACzD,IAAI,CAACA,KAAK;QACR,OAAOC;IACT;IACA,IAAID,eAAeE,MAAM;QACvB,OAAOF;IACT;IAEA,IAAI,OAAOA,QAAQ,YAAY,YAAYG,IAAI,CAACH,MAAM;QACpD,IAAII,IAAIC,WAAWL;QACnB,MAAMM,MAAMC,KAAKC,KAAK,CAACJ,GAAGK,QAAQ,GAAGC,MAAM;QAC3C;;;;;KAKC,GACD,IAAIJ,OAAO,IAAI;YACbF,KAAK;QACP;QACA,OAAO,IAAIF,KAAKE;IAClB,OAAO,IAAI,OAAOJ,QAAQ,UAAU;QAClC,MAAMW,OAAO,IAAIT,KAAKF;QACtB,IAAI,CAACY,MAAM,CAACD,OAAO;YACjB,OAAOA;QACT;IACF;IACA,MAAM,IAAIE,MAAM,CAAC,yBAAyB,EAAEb,IAAI,CAAC,CAAC;AACpD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wener/utils",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.29",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Utils for daily use",
|
|
6
6
|
"repository": {
|
|
@@ -30,6 +30,12 @@
|
|
|
30
30
|
"template",
|
|
31
31
|
"lodash"
|
|
32
32
|
],
|
|
33
|
+
"scripts": {
|
|
34
|
+
"build": "make prepublish",
|
|
35
|
+
"clean": "make clean",
|
|
36
|
+
"dev": "make dev",
|
|
37
|
+
"test": "make test"
|
|
38
|
+
},
|
|
33
39
|
"peerDependencies": {
|
|
34
40
|
"undici": "*"
|
|
35
41
|
},
|
|
@@ -39,16 +45,56 @@
|
|
|
39
45
|
}
|
|
40
46
|
},
|
|
41
47
|
"devDependencies": {
|
|
42
|
-
"@
|
|
43
|
-
"@types/
|
|
48
|
+
"@sinclair/typebox": "^0.32.8",
|
|
49
|
+
"@types/lodash": "^4.14.202",
|
|
50
|
+
"@types/ws": "^8.5.10",
|
|
44
51
|
"https-proxy-agent": "^7.0.2",
|
|
45
52
|
"lodash": "^4.17.21",
|
|
46
53
|
"node-fetch": "^3.3.2",
|
|
47
|
-
"undici": "^
|
|
54
|
+
"undici": "^6.3.0",
|
|
55
|
+
"zod": "^3.22.4"
|
|
48
56
|
},
|
|
49
57
|
"publishConfig": {
|
|
50
58
|
"registry": "https://registry.npmjs.org",
|
|
51
|
-
"access": "public"
|
|
59
|
+
"access": "public",
|
|
60
|
+
"exports": {
|
|
61
|
+
".": {
|
|
62
|
+
"types": "./src/index.ts",
|
|
63
|
+
"typescript": "./src/index.ts",
|
|
64
|
+
"system": "./dist/system/index.js",
|
|
65
|
+
"import": "./lib/index.js"
|
|
66
|
+
},
|
|
67
|
+
"./types": {
|
|
68
|
+
"types": "./types.d.ts"
|
|
69
|
+
},
|
|
70
|
+
"./server": {
|
|
71
|
+
"types": "./src/server.ts",
|
|
72
|
+
"typescript": "./src/server.ts",
|
|
73
|
+
"system": "./dist/system/server.js",
|
|
74
|
+
"import": "./lib/server.js"
|
|
75
|
+
},
|
|
76
|
+
"./server/node-fetch": {
|
|
77
|
+
"types": "./server/node-fetch.ts",
|
|
78
|
+
"default": "./lib/servers/node-fetch.js"
|
|
79
|
+
},
|
|
80
|
+
"./server/jsdom": {
|
|
81
|
+
"types": "./server/jsdom.ts",
|
|
82
|
+
"default": "./lib/servers/jsdom.js"
|
|
83
|
+
},
|
|
84
|
+
"./server/ws": {
|
|
85
|
+
"types": "./server/ws.ts",
|
|
86
|
+
"default": "./lib/servers/ws.js"
|
|
87
|
+
},
|
|
88
|
+
"./schema/typebox": {
|
|
89
|
+
"types": "./schema/typebox/index.ts",
|
|
90
|
+
"default": "./lib/schema/typebox/index.js"
|
|
91
|
+
},
|
|
92
|
+
"./schema/typebox/gen": {
|
|
93
|
+
"types": "./schema/typebox/gen/index.ts",
|
|
94
|
+
"default": "./lib/schema/typebox/gen/index.js"
|
|
95
|
+
},
|
|
96
|
+
"./package.json": "./package.json"
|
|
97
|
+
}
|
|
52
98
|
},
|
|
53
99
|
"sideEffects": false,
|
|
54
100
|
"rollup": {
|
|
@@ -57,7 +103,9 @@
|
|
|
57
103
|
"./src/server.ts",
|
|
58
104
|
"./src/servers/ws.ts",
|
|
59
105
|
"./src/servers/jsdom.ts",
|
|
60
|
-
"./src/servers/node-fetch.ts"
|
|
106
|
+
"./src/servers/node-fetch.ts",
|
|
107
|
+
"./src/schema/typebox/index.ts",
|
|
108
|
+
"./src/schema/typebox/gen/index.ts"
|
|
61
109
|
],
|
|
62
110
|
"external": [
|
|
63
111
|
"crypto",
|
|
@@ -65,43 +113,10 @@
|
|
|
65
113
|
"node-fetch",
|
|
66
114
|
"ws",
|
|
67
115
|
"https-proxy-agent",
|
|
68
|
-
"undici"
|
|
116
|
+
"undici",
|
|
117
|
+
"zod",
|
|
118
|
+
"typescript",
|
|
119
|
+
"@sinclair/typebox"
|
|
69
120
|
]
|
|
70
|
-
},
|
|
71
|
-
"scripts": {
|
|
72
|
-
"build": "make prepublish",
|
|
73
|
-
"clean": "make clean",
|
|
74
|
-
"dev": "make dev",
|
|
75
|
-
"test": "make test"
|
|
76
|
-
},
|
|
77
|
-
"exports": {
|
|
78
|
-
".": {
|
|
79
|
-
"types": "./src/index.ts",
|
|
80
|
-
"typescript": "./src/index.ts",
|
|
81
|
-
"system": "./dist/system/index.js",
|
|
82
|
-
"import": "./lib/index.js"
|
|
83
|
-
},
|
|
84
|
-
"./types": {
|
|
85
|
-
"types": "./types.d.ts"
|
|
86
|
-
},
|
|
87
|
-
"./server": {
|
|
88
|
-
"types": "./src/server.ts",
|
|
89
|
-
"typescript": "./src/server.ts",
|
|
90
|
-
"system": "./dist/system/server.js",
|
|
91
|
-
"import": "./lib/server.js"
|
|
92
|
-
},
|
|
93
|
-
"./server/node-fetch": {
|
|
94
|
-
"types": "./server/node-fetch.ts",
|
|
95
|
-
"default": "./lib/servers/node-fetch.js"
|
|
96
|
-
},
|
|
97
|
-
"./server/jsdom": {
|
|
98
|
-
"types": "./server/jsdom.ts",
|
|
99
|
-
"default": "./lib/servers/jsdom.js"
|
|
100
|
-
},
|
|
101
|
-
"./server/ws": {
|
|
102
|
-
"types": "./server/ws.ts",
|
|
103
|
-
"default": "./lib/servers/ws.js"
|
|
104
|
-
},
|
|
105
|
-
"./package.json": "./package.json"
|
|
106
121
|
}
|
|
107
|
-
}
|
|
122
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -32,6 +32,7 @@ export { isPromise } from './asyncs/isPromise';
|
|
|
32
32
|
// langs
|
|
33
33
|
export { shallowEqual } from './langs/shallowEqual';
|
|
34
34
|
export { deepEqual } from './langs/deepEqual';
|
|
35
|
+
export { deepFreeze } from './langs/deepFreeze';
|
|
35
36
|
export { classOf } from './langs/classOf';
|
|
36
37
|
export { shallowClone } from './langs/shallowClone';
|
|
37
38
|
export { isClass } from './langs/isClass';
|
|
@@ -79,8 +80,6 @@ export { getFileFromDataTransfer } from './browsers/getFileFromDataTransfer';
|
|
|
79
80
|
// polyfills
|
|
80
81
|
export { getGlobalThis } from './isomorphics/getGlobalThis';
|
|
81
82
|
export { structuredClone } from './isomorphics/structuredClone';
|
|
82
|
-
// should not export as sideEffect
|
|
83
|
-
// export { globalThis } from './isomorphics/globalThis';
|
|
84
83
|
|
|
85
84
|
// crypto
|
|
86
85
|
export { randomUUID } from './crypto/randomUUID';
|
|
@@ -91,8 +90,9 @@ export { hex } from './crypto/base';
|
|
|
91
90
|
export { isULID, createULID, ulid, parseULID } from './crypto/ulid';
|
|
92
91
|
export { PEM } from './crypto/pem/pem';
|
|
93
92
|
|
|
94
|
-
//
|
|
93
|
+
// math
|
|
95
94
|
export { createRandom } from './maths/random';
|
|
95
|
+
export { clamp } from './maths/clamp';
|
|
96
96
|
|
|
97
97
|
// network
|
|
98
98
|
export {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Freezes the given object and all its nested objects recursively.
|
|
3
|
+
*
|
|
4
|
+
* @param {T} obj - The object to freeze.
|
|
5
|
+
* @returns {T} - The frozen object.
|
|
6
|
+
*/
|
|
7
|
+
export function deepFreeze<T>(obj: T): T {
|
|
8
|
+
if (obj === null || typeof obj !== 'object') {
|
|
9
|
+
return obj;
|
|
10
|
+
}
|
|
11
|
+
const props = Object.getOwnPropertyNames(obj);
|
|
12
|
+
for (const prop of props) {
|
|
13
|
+
const value = (obj as any)[prop];
|
|
14
|
+
if (value && typeof value === 'object') {
|
|
15
|
+
deepFreeze(value);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return Object.freeze(obj);
|
|
19
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
function sortObjectKeys(obj?: Record<string, any>) {
|
|
2
|
+
if (obj === null || obj === undefined) {
|
|
3
|
+
return obj;
|
|
4
|
+
}
|
|
5
|
+
if (typeof obj !== 'object') {
|
|
6
|
+
// it is a primitive: number/string (in an array)
|
|
7
|
+
return obj;
|
|
8
|
+
}
|
|
9
|
+
return Object.keys(obj)
|
|
10
|
+
.sort()
|
|
11
|
+
.reduce(
|
|
12
|
+
(acc, key) => {
|
|
13
|
+
if (Array.isArray(obj[key])) {
|
|
14
|
+
acc[key] = obj[key].map(sortObjectKeys);
|
|
15
|
+
} else if (typeof obj[key] === 'object') {
|
|
16
|
+
acc[key] = sortObjectKeys(obj[key]);
|
|
17
|
+
} else {
|
|
18
|
+
acc[key] = obj[key];
|
|
19
|
+
}
|
|
20
|
+
return acc;
|
|
21
|
+
},
|
|
22
|
+
{} as Record<string, any>,
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function toDeterministicJson(o: any) {
|
|
27
|
+
// https://github.com/kikobeats/json-stringify-deterministic
|
|
28
|
+
// https://stackoverflow.com/a/54902696/1870054
|
|
29
|
+
// https://github.com/sinclairzx81/typebox#hash
|
|
30
|
+
// https://github.com/sinclairzx81/typebox/blob/master/src/value/hash.ts
|
|
31
|
+
// LCS longest common subsequence
|
|
32
|
+
// https://github.com/sinclairzx81/typebox/issues/272
|
|
33
|
+
let sorted: any = sortObjectKeys(o);
|
|
34
|
+
let out = JSON.stringify(sorted, function (_, v) {
|
|
35
|
+
return v === undefined ? 'undef' : v;
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// Remove all whitespace
|
|
39
|
+
return out.replace(/\s+/g, '');
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
interface Visitor<C> {
|
|
43
|
+
array: (o: any[], ctx: C) => any;
|
|
44
|
+
object: (o: Record<string, any>, ctx: C) => any;
|
|
45
|
+
boolean: (o: boolean, ctx: C) => any;
|
|
46
|
+
number: (o: number, ctx: C) => any;
|
|
47
|
+
string: (o: string, ctx: C) => any;
|
|
48
|
+
symbol: (o: symbol, ctx: C) => any;
|
|
49
|
+
bigint: (o: bigint, ctx: C) => any;
|
|
50
|
+
date: (o: Date, ctx: C) => any;
|
|
51
|
+
buffer: (o: ArrayBuffer, ctx: C) => any;
|
|
52
|
+
null: (o: null, ctx: C) => any;
|
|
53
|
+
undefined: (o: undefined, ctx: C) => any;
|
|
54
|
+
unknown: (o: unknown, ctx: C) => any;
|
|
55
|
+
visit: (o: any, ctx: C) => any;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function visit<C>(o: any, _v: Partial<Visitor<C>>, ctx: C) {
|
|
59
|
+
const v = {
|
|
60
|
+
array: (o: any[], ctx: C): any => o.map((x) => v.visit(x, ctx)),
|
|
61
|
+
object: (o: Record<string, any>, ctx: C) => {
|
|
62
|
+
return Object.fromEntries(Object.entries(o).map(([k, v]) => [k, v.visit(v, ctx)]));
|
|
63
|
+
},
|
|
64
|
+
buffer: (o: ArrayBuffer) => {
|
|
65
|
+
return o;
|
|
66
|
+
},
|
|
67
|
+
boolean: (o: boolean) => o,
|
|
68
|
+
number: (o: number) => o,
|
|
69
|
+
string: (o: string) => o,
|
|
70
|
+
symbol: (o: symbol) => o,
|
|
71
|
+
bigint: (o: bigint) => o,
|
|
72
|
+
date: (o: Date) => o,
|
|
73
|
+
null: (o: null) => o,
|
|
74
|
+
undefined: (o: undefined) => o,
|
|
75
|
+
unknown: (o: unknown, ctx: C): any => {
|
|
76
|
+
if (o instanceof Map) {
|
|
77
|
+
return new Map([...o.entries()].map(([k, v]) => [k, v.visit(v, ctx)]));
|
|
78
|
+
}
|
|
79
|
+
if (o instanceof Set) {
|
|
80
|
+
return new Set([...o.values()].map((v) => v.visit(v, ctx)));
|
|
81
|
+
}
|
|
82
|
+
return o;
|
|
83
|
+
},
|
|
84
|
+
visit: (o: any, ctx: C): any => {
|
|
85
|
+
if (o === null) {
|
|
86
|
+
return v.null(o, ctx);
|
|
87
|
+
}
|
|
88
|
+
switch (typeof o) {
|
|
89
|
+
case 'object':
|
|
90
|
+
if (o instanceof ArrayBuffer) {
|
|
91
|
+
return v.buffer(o, ctx);
|
|
92
|
+
}
|
|
93
|
+
if (Array.isArray(o)) {
|
|
94
|
+
return v.array(o, ctx);
|
|
95
|
+
}
|
|
96
|
+
if (o instanceof Date) {
|
|
97
|
+
return v.date(o, ctx);
|
|
98
|
+
}
|
|
99
|
+
// plain object
|
|
100
|
+
if (o.constructor === Object) {
|
|
101
|
+
return v.object(o, ctx);
|
|
102
|
+
}
|
|
103
|
+
//
|
|
104
|
+
return v.unknown(o, ctx);
|
|
105
|
+
case 'boolean':
|
|
106
|
+
return v.boolean(o, ctx);
|
|
107
|
+
case 'number':
|
|
108
|
+
return v.number(o, ctx);
|
|
109
|
+
case 'string':
|
|
110
|
+
return v.string(o, ctx);
|
|
111
|
+
case 'symbol':
|
|
112
|
+
return v.symbol(o, ctx);
|
|
113
|
+
case 'bigint':
|
|
114
|
+
return v.bigint(o, ctx);
|
|
115
|
+
case 'undefined':
|
|
116
|
+
return v.undefined(o, ctx);
|
|
117
|
+
default:
|
|
118
|
+
return v.unknown(o, ctx);
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
..._v,
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
return v.visit(o, ctx);
|
|
125
|
+
}
|
package/src/libs/README.md
CHANGED
package/src/logging/slog.ts
CHANGED
|
@@ -98,3 +98,124 @@ createLogger.writer = (record: LogRecord) => {
|
|
|
98
98
|
const { level } = record;
|
|
99
99
|
console[level || 'info'](stringify(record));
|
|
100
100
|
};
|
|
101
|
+
|
|
102
|
+
// https://github.com/alexeyraspopov/picocolors/blob/main/picocolors.js
|
|
103
|
+
/*
|
|
104
|
+
MDN: Styling console output
|
|
105
|
+
https://developer.mozilla.org/en-US/docs/Web/API/console#Usage
|
|
106
|
+
|
|
107
|
+
Chrome: Console API Reference
|
|
108
|
+
https://developers.google.com/web/tools/chrome-devtools/console/console-write#styling_console_output_with_css
|
|
109
|
+
|
|
110
|
+
WebKit: Console Object API
|
|
111
|
+
https://webkit.org/web-inspector/console-object-api/
|
|
112
|
+
|
|
113
|
+
https://stackoverflow.com/questions/7505623
|
|
114
|
+
|
|
115
|
+
console.log('\x1b[36m Hello \x1b[34m Colored \x1b[35m World!');
|
|
116
|
+
console.log('\x1B[31mHello\x1B[34m World');
|
|
117
|
+
console.log('\x1b[43mHighlighted');
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
NestJS Formatter
|
|
121
|
+
https://github.com/nestjs/nest/blob/d4bda940fc10238eb18f14ebf66d66b7ef8bff41/packages/common/services/console-logger.service.ts#L201-L227
|
|
122
|
+
|
|
123
|
+
*/
|
|
124
|
+
|
|
125
|
+
export type Formatter = (input: string | number | null | undefined) => string;
|
|
126
|
+
|
|
127
|
+
export interface Colors {
|
|
128
|
+
isColorSupported: boolean;
|
|
129
|
+
reset: Formatter;
|
|
130
|
+
bold: Formatter;
|
|
131
|
+
dim: Formatter;
|
|
132
|
+
italic: Formatter;
|
|
133
|
+
underline: Formatter;
|
|
134
|
+
inverse: Formatter;
|
|
135
|
+
hidden: Formatter;
|
|
136
|
+
strikethrough: Formatter;
|
|
137
|
+
black: Formatter;
|
|
138
|
+
red: Formatter;
|
|
139
|
+
green: Formatter;
|
|
140
|
+
yellow: Formatter;
|
|
141
|
+
blue: Formatter;
|
|
142
|
+
magenta: Formatter;
|
|
143
|
+
cyan: Formatter;
|
|
144
|
+
white: Formatter;
|
|
145
|
+
gray: Formatter;
|
|
146
|
+
bgBlack: Formatter;
|
|
147
|
+
bgRed: Formatter;
|
|
148
|
+
bgGreen: Formatter;
|
|
149
|
+
bgYellow: Formatter;
|
|
150
|
+
bgBlue: Formatter;
|
|
151
|
+
bgMagenta: Formatter;
|
|
152
|
+
bgCyan: Formatter;
|
|
153
|
+
bgWhite: Formatter;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
let formatter =
|
|
157
|
+
(open: string, close: string, replace: string = open) =>
|
|
158
|
+
(input: string) => {
|
|
159
|
+
let string = '' + input;
|
|
160
|
+
let index = string.indexOf(close, open.length);
|
|
161
|
+
return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
let replaceClose = (string: string, close: string, replace: string, index: number): string => {
|
|
165
|
+
let start = string.substring(0, index) + replace;
|
|
166
|
+
let end = string.substring(index + close.length);
|
|
167
|
+
let nextIndex = end.indexOf(close);
|
|
168
|
+
return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end;
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
function getEnv(): Record<string, string | undefined> {
|
|
172
|
+
if (typeof process === 'object') {
|
|
173
|
+
return process.env;
|
|
174
|
+
}
|
|
175
|
+
return {};
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function isColorSupported() {
|
|
179
|
+
if (typeof window === 'object') {
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
const env = getEnv();
|
|
183
|
+
if ('NO_COLOR' in env) {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
if ('FORCE_COLOR' in env || 'CI' in env) {
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
export function createConsoleColors(enabled = isColorSupported()) {
|
|
193
|
+
return {
|
|
194
|
+
isColorSupported: enabled,
|
|
195
|
+
reset: enabled ? (s: string) => `\x1b[0m${s}\x1b[0m` : String,
|
|
196
|
+
bold: enabled ? formatter('\x1b[1m', '\x1b[22m', '\x1b[22m\x1b[1m') : String,
|
|
197
|
+
dim: enabled ? formatter('\x1b[2m', '\x1b[22m', '\x1b[22m\x1b[2m') : String,
|
|
198
|
+
italic: enabled ? formatter('\x1b[3m', '\x1b[23m') : String,
|
|
199
|
+
underline: enabled ? formatter('\x1b[4m', '\x1b[24m') : String,
|
|
200
|
+
inverse: enabled ? formatter('\x1b[7m', '\x1b[27m') : String,
|
|
201
|
+
hidden: enabled ? formatter('\x1b[8m', '\x1b[28m') : String,
|
|
202
|
+
strikethrough: enabled ? formatter('\x1b[9m', '\x1b[29m') : String,
|
|
203
|
+
black: enabled ? formatter('\x1b[30m', '\x1b[39m') : String,
|
|
204
|
+
red: enabled ? formatter('\x1b[31m', '\x1b[39m') : String,
|
|
205
|
+
green: enabled ? formatter('\x1b[32m', '\x1b[39m') : String,
|
|
206
|
+
yellow: enabled ? formatter('\x1b[33m', '\x1b[39m') : String,
|
|
207
|
+
blue: enabled ? formatter('\x1b[34m', '\x1b[39m') : String,
|
|
208
|
+
magenta: enabled ? formatter('\x1b[35m', '\x1b[39m') : String,
|
|
209
|
+
cyan: enabled ? formatter('\x1b[36m', '\x1b[39m') : String,
|
|
210
|
+
white: enabled ? formatter('\x1b[37m', '\x1b[39m') : String,
|
|
211
|
+
gray: enabled ? formatter('\x1b[90m', '\x1b[39m') : String,
|
|
212
|
+
bgBlack: enabled ? formatter('\x1b[40m', '\x1b[49m') : String,
|
|
213
|
+
bgRed: enabled ? formatter('\x1b[41m', '\x1b[49m') : String,
|
|
214
|
+
bgGreen: enabled ? formatter('\x1b[42m', '\x1b[49m') : String,
|
|
215
|
+
bgYellow: enabled ? formatter('\x1b[43m', '\x1b[49m') : String,
|
|
216
|
+
bgBlue: enabled ? formatter('\x1b[44m', '\x1b[49m') : String,
|
|
217
|
+
bgMagenta: enabled ? formatter('\x1b[45m', '\x1b[49m') : String,
|
|
218
|
+
bgCyan: enabled ? formatter('\x1b[46m', '\x1b[49m') : String,
|
|
219
|
+
bgWhite: enabled ? formatter('\x1b[47m', '\x1b[49m') : String,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { expect, test } from 'vitest';
|
|
2
|
+
import { clamp } from './clamp';
|
|
3
|
+
|
|
4
|
+
test('clamp', () => {
|
|
5
|
+
for (const [a, b] of [
|
|
6
|
+
[[null, 0, 0], 0],
|
|
7
|
+
[[null, 1, 10], 1],
|
|
8
|
+
[[undefined, 1, 10], 1],
|
|
9
|
+
[[undefined, 1, 10, 5], 5],
|
|
10
|
+
[[2, 1, 10, 5], 2],
|
|
11
|
+
[[11, 1, 10, 5], 10],
|
|
12
|
+
[[11, { min: 1, max: 10 }], 10],
|
|
13
|
+
[[null, { min: 1, max: 10 }], 1],
|
|
14
|
+
[[null, { min: 1, max: 10, default: 5 }], 5],
|
|
15
|
+
[[2n, 1, 10, 5], 2n],
|
|
16
|
+
]) {
|
|
17
|
+
expect(clamp.apply(null, a as any)).toBe(b);
|
|
18
|
+
}
|
|
19
|
+
});
|
package/src/maths/clamp.ts
CHANGED
|
@@ -1 +1,23 @@
|
|
|
1
|
-
export function clamp(
|
|
1
|
+
// export function clamp<T>(value: T | null | undefined, o: { min: T; max: T; default?: T }): T;
|
|
2
|
+
|
|
3
|
+
export function clamp<T>(value: T | null | undefined, min: T, max: T, def?: T): T;
|
|
4
|
+
export function clamp<T>(value: T | null | undefined, ...o: any[]): T {
|
|
5
|
+
let min: T, max: T, def: T;
|
|
6
|
+
if (o.length === 1) {
|
|
7
|
+
({ min, max, default: def = min! } = o[0]);
|
|
8
|
+
} else {
|
|
9
|
+
[min, max, def = min!] = o;
|
|
10
|
+
}
|
|
11
|
+
if (value === null || value === undefined) {
|
|
12
|
+
return def;
|
|
13
|
+
}
|
|
14
|
+
if (value < min) {
|
|
15
|
+
return min;
|
|
16
|
+
}
|
|
17
|
+
if (value > max) {
|
|
18
|
+
return max;
|
|
19
|
+
}
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// type Comparable = number | string | Date | BigInt;
|
package/src/objects/get.ts
CHANGED
|
@@ -32,19 +32,19 @@ export type ResolveObjectPathType<
|
|
|
32
32
|
> = Path extends keyof ObjectType
|
|
33
33
|
? ObjectType[Path]
|
|
34
34
|
: Path extends `${infer LeftSide}.${infer RightSide}`
|
|
35
|
-
? LeftSide extends keyof ObjectType
|
|
36
|
-
? ResolveObjectPathType<ObjectType[LeftSide], RightSide, OrElse>
|
|
37
|
-
: Path extends `${infer LeftSide}[${number}].${infer RightSide}`
|
|
38
35
|
? LeftSide extends keyof ObjectType
|
|
39
|
-
? ObjectType[LeftSide]
|
|
40
|
-
|
|
36
|
+
? ResolveObjectPathType<ObjectType[LeftSide], RightSide, OrElse>
|
|
37
|
+
: Path extends `${infer LeftSide}[${number}].${infer RightSide}`
|
|
38
|
+
? LeftSide extends keyof ObjectType
|
|
39
|
+
? ObjectType[LeftSide] extends Array<infer U>
|
|
40
|
+
? ResolveObjectPathType<U, RightSide, OrElse>
|
|
41
|
+
: OrElse
|
|
42
|
+
: OrElse
|
|
41
43
|
: OrElse
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
: OrElse
|
|
49
|
-
: OrElse
|
|
50
|
-
: OrElse;
|
|
44
|
+
: Path extends `${infer LeftSide}[${number}]`
|
|
45
|
+
? LeftSide extends keyof ObjectType
|
|
46
|
+
? ObjectType[LeftSide] extends Array<infer U>
|
|
47
|
+
? U
|
|
48
|
+
: OrElse
|
|
49
|
+
: OrElse
|
|
50
|
+
: OrElse;
|
package/src/objects/set.ts
CHANGED
|
@@ -22,11 +22,11 @@ export function set<T extends object, V>(obj: T, key: ObjectKey | ObjectPath, va
|
|
|
22
22
|
? merge(current[k], val)
|
|
23
23
|
: val
|
|
24
24
|
: typeof (x = current[k]) === typeof path
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
? x
|
|
26
|
+
: // @ts-expect-error hacky type check
|
|
27
|
+
path[i] * 0 !== 0 || !!~('' + path[i]).indexOf('.') // eslint-disable-line
|
|
28
|
+
? {}
|
|
29
|
+
: [];
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
|