@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/langs/isEmptyObject.ts"],"sourcesContent":["import { isPlainObject } from './isPlainObject';\n\nexport function isEmptyObject(o: any) {\n return isPlainObject(o) && Object.keys(o).length === 0;\n}\n"],"names":["isPlainObject","isEmptyObject","o","Object","keys","length"],"mappings":"AAAA,SAASA,aAAa,QAAQ,kBAAkB;AAEhD,OAAO,SAASC,cAAcC,CAAM;IAClC,OAAOF,cAAcE,MAAMC,OAAOC,IAAI,CAACF,GAAGG,MAAM,KAAK;AACvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/langs/isFunction.ts"],"sourcesContent":["export function isFunction(value: any): value is Function {\n return typeof value === 'function';\n}\n"],"names":["isFunction","value"],"mappings":"AAAA,OAAO,SAASA,WAAWC,KAAU;IACnC,OAAO,OAAOA,UAAU;AAC1B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { classOf } from './classOf.js';
|
|
2
|
+
// see: https://github.com/mesqueeb/is-what/blob/88d6e4ca92fb2baab6003c54e02eedf4e729e5ab/src/index.ts
|
|
3
|
+
export function isPlainObject(value) {
|
|
4
|
+
if (classOf(value) !== 'Object') {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
return value.constructor === Object && Object.getPrototypeOf(value) === Object.prototype;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=isPlainObject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/langs/isPlainObject.ts"],"sourcesContent":["import { classOf } from './classOf';\n\n// see: https://github.com/mesqueeb/is-what/blob/88d6e4ca92fb2baab6003c54e02eedf4e729e5ab/src/index.ts\n\nexport function isPlainObject(value: any): value is Record<string, any> {\n if (classOf(value) !== 'Object') {\n return false;\n }\n return value.constructor === Object && Object.getPrototypeOf(value) === Object.prototype;\n}\n"],"names":["classOf","isPlainObject","value","constructor","Object","getPrototypeOf","prototype"],"mappings":"AAAA,SAASA,OAAO,QAAQ,YAAY;AAEpC,sGAAsG;AAEtG,OAAO,SAASC,cAAcC,KAAU;IACtC,IAAIF,QAAQE,WAAW,UAAU;QAC/B,OAAO;IACT;IACA,OAAOA,MAAMC,WAAW,KAAKC,UAAUA,OAAOC,cAAc,CAACH,WAAWE,OAAOE,SAAS;AAC1F"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// https://github.com/angus-c/just/blob/master/packages/function-memoize/index.mjs
|
|
2
|
+
export function memoize(callback, { resolver = (...args)=>JSON.stringify(args) } = {}) {
|
|
3
|
+
if (typeof callback !== 'function') {
|
|
4
|
+
throw new Error('`callback` should be a function');
|
|
5
|
+
}
|
|
6
|
+
if (resolver !== undefined && typeof resolver !== 'function') {
|
|
7
|
+
throw new Error('`resolver` should be a function');
|
|
8
|
+
}
|
|
9
|
+
const cache = {};
|
|
10
|
+
const memoized = function() {
|
|
11
|
+
const args = Array.prototype.slice.call(arguments); // to simplify JSON.stringify
|
|
12
|
+
const key = resolver.apply(this, args);
|
|
13
|
+
if (!(key in cache)) {
|
|
14
|
+
cache[key] = callback.apply(this, args);
|
|
15
|
+
}
|
|
16
|
+
return cache[key];
|
|
17
|
+
};
|
|
18
|
+
memoized.cache = cache;
|
|
19
|
+
return memoized;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=memoize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/langs/memoize.ts"],"sourcesContent":["// https://github.com/angus-c/just/blob/master/packages/function-memoize/index.mjs\ntype func = (...args: any) => any;\n\nexport function memoize<T extends func>(\n callback: T,\n {\n resolver = (...args: Parameters<T>) => JSON.stringify(args),\n }: { resolver?: (...args: Parameters<T>) => string } = {},\n): T {\n if (typeof callback !== 'function') {\n throw new Error('`callback` should be a function');\n }\n\n if (resolver !== undefined && typeof resolver !== 'function') {\n throw new Error('`resolver` should be a function');\n }\n\n const cache: Record<string, any> = {};\n\n const memoized = function (this: any) {\n const args = Array.prototype.slice.call(arguments); // to simplify JSON.stringify\n const key = resolver.apply(this, args as Parameters<T>);\n\n if (!(key in cache)) {\n cache[key] = callback.apply(this, args);\n }\n\n return cache[key];\n };\n memoized.cache = cache;\n return memoized as func as T;\n}\n"],"names":["memoize","callback","resolver","args","JSON","stringify","Error","undefined","cache","memoized","Array","prototype","slice","call","arguments","key","apply"],"mappings":"AAAA,kFAAkF;AAGlF,OAAO,SAASA,QACdC,QAAW,EACX,EACEC,WAAW,CAAC,GAAGC,OAAwBC,KAAKC,SAAS,CAACF,KAAK,EACT,GAAG,CAAC,CAAC;IAEzD,IAAI,OAAOF,aAAa,YAAY;QAClC,MAAM,IAAIK,MAAM;IAClB;IAEA,IAAIJ,aAAaK,aAAa,OAAOL,aAAa,YAAY;QAC5D,MAAM,IAAII,MAAM;IAClB;IAEA,MAAME,QAA6B,CAAC;IAEpC,MAAMC,WAAW;QACf,MAAMN,OAAOO,MAAMC,SAAS,CAACC,KAAK,CAACC,IAAI,CAACC,YAAY,6BAA6B;QACjF,MAAMC,MAAMb,SAASc,KAAK,CAAC,IAAI,EAAEb;QAEjC,IAAI,CAAEY,CAAAA,OAAOP,KAAI,GAAI;YACnBA,KAAK,CAACO,IAAI,GAAGd,SAASe,KAAK,CAAC,IAAI,EAAEb;QACpC;QAEA,OAAOK,KAAK,CAACO,IAAI;IACnB;IACAN,SAASD,KAAK,GAAGA;IACjB,OAAOC;AACT"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export function parseBoolean(s, strict = false) {
|
|
2
|
+
if (typeof s === 'boolean') {
|
|
3
|
+
return s;
|
|
4
|
+
}
|
|
5
|
+
if (typeof s === 'string') {
|
|
6
|
+
switch(s.toLowerCase()){
|
|
7
|
+
case 'f':
|
|
8
|
+
case 'false':
|
|
9
|
+
case '0':
|
|
10
|
+
return false;
|
|
11
|
+
case '1':
|
|
12
|
+
case 't':
|
|
13
|
+
case 'true':
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
} else if (typeof s === 'number') {
|
|
17
|
+
switch(s){
|
|
18
|
+
case 0:
|
|
19
|
+
return false;
|
|
20
|
+
case 1:
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (strict) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
return Boolean(s);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=parseBoolean.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/langs/parseBoolean.ts"],"sourcesContent":["export function parseBoolean(s: string | boolean | number | null | undefined, strict: true): boolean | undefined;\nexport function parseBoolean(s: string | boolean | number | null | undefined | any): boolean;\nexport function parseBoolean(s?: string | boolean | number | null, strict = false): boolean | undefined {\n if (typeof s === 'boolean') {\n return s;\n }\n if (typeof s === 'string') {\n switch (s.toLowerCase()) {\n case 'f':\n case 'false':\n case '0':\n return false;\n case '1':\n case 't':\n case 'true':\n return true;\n }\n } else if (typeof s === 'number') {\n switch (s) {\n case 0:\n return false;\n case 1:\n return true;\n }\n }\n if (strict) {\n return undefined;\n }\n return Boolean(s);\n}\n"],"names":["parseBoolean","s","strict","toLowerCase","undefined","Boolean"],"mappings":"AAEA,OAAO,SAASA,aAAaC,CAAoC,EAAEC,SAAS,KAAK;IAC/E,IAAI,OAAOD,MAAM,WAAW;QAC1B,OAAOA;IACT;IACA,IAAI,OAAOA,MAAM,UAAU;QACzB,OAAQA,EAAEE,WAAW;YACnB,KAAK;YACL,KAAK;YACL,KAAK;gBACH,OAAO;YACT,KAAK;YACL,KAAK;YACL,KAAK;gBACH,OAAO;QACX;IACF,OAAO,IAAI,OAAOF,MAAM,UAAU;QAChC,OAAQA;YACN,KAAK;gBACH,OAAO;YACT,KAAK;gBACH,OAAO;QACX;IACF;IACA,IAAIC,QAAQ;QACV,OAAOE;IACT;IACA,OAAOC,QAAQJ;AACjB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function shallowClone(obj) {
|
|
2
|
+
if (!obj) {
|
|
3
|
+
return obj;
|
|
4
|
+
}
|
|
5
|
+
if (Array.isArray(obj)) {
|
|
6
|
+
return obj.slice();
|
|
7
|
+
}
|
|
8
|
+
if (typeof obj === 'object') {
|
|
9
|
+
return Object.assign({}, obj);
|
|
10
|
+
}
|
|
11
|
+
// skip Map, Set, WeakMap, WeakSet, Date, RegExp, etc.
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=shallowClone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/langs/shallowClone.ts"],"sourcesContent":["export function shallowClone<T>(obj: T): T {\n if (!obj) {\n return obj;\n }\n if (Array.isArray(obj)) {\n return obj.slice() as T;\n }\n if (typeof obj === 'object') {\n return Object.assign({}, obj);\n }\n // skip Map, Set, WeakMap, WeakSet, Date, RegExp, etc.\n return obj;\n}\n"],"names":["shallowClone","obj","Array","isArray","slice","Object","assign"],"mappings":"AAAA,OAAO,SAASA,aAAgBC,GAAM;IACpC,IAAI,CAACA,KAAK;QACR,OAAOA;IACT;IACA,IAAIC,MAAMC,OAAO,CAACF,MAAM;QACtB,OAAOA,IAAIG,KAAK;IAClB;IACA,IAAI,OAAOH,QAAQ,UAAU;QAC3B,OAAOI,OAAOC,MAAM,CAAC,CAAC,GAAGL;IAC3B;IACA,sDAAsD;IACtD,OAAOA;AACT"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* shallow compare - support object, array
|
|
3
|
+
*
|
|
4
|
+
* @see {@link https://github.com/pmndrs/zustand/blob/main/src/shallow.ts zustand/src/shallow.ts}
|
|
5
|
+
*/ export function shallowEqual(objA, objB) {
|
|
6
|
+
if (Object.is(objA, objB)) {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
const keysA = Object.keys(objA);
|
|
13
|
+
if (keysA.length !== Object.keys(objB).length) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
for(let i = 0; i < keysA.length; i++){
|
|
17
|
+
if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=shallowEqual.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/langs/shallowEqual.ts"],"sourcesContent":["/**\n * shallow compare - support object, array\n *\n * @see {@link https://github.com/pmndrs/zustand/blob/main/src/shallow.ts zustand/src/shallow.ts}\n */\nexport function shallowEqual<T, U>(objA: T, objB: U) {\n if (Object.is(objA, objB)) {\n return true;\n }\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n const keysA = Object.keys(objA);\n if (keysA.length !== Object.keys(objB).length) {\n return false;\n }\n for (let i = 0; i < keysA.length; i++) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keysA[i]) ||\n !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof U])\n ) {\n return false;\n }\n }\n return true;\n}\n"],"names":["shallowEqual","objA","objB","Object","is","keysA","keys","length","i","prototype","hasOwnProperty","call"],"mappings":"AAAA;;;;CAIC,GACD,OAAO,SAASA,aAAmBC,IAAO,EAAEC,IAAO;IACjD,IAAIC,OAAOC,EAAE,CAACH,MAAMC,OAAO;QACzB,OAAO;IACT;IACA,IAAI,OAAOD,SAAS,YAAYA,SAAS,QAAQ,OAAOC,SAAS,YAAYA,SAAS,MAAM;QAC1F,OAAO;IACT;IACA,MAAMG,QAAQF,OAAOG,IAAI,CAACL;IAC1B,IAAII,MAAME,MAAM,KAAKJ,OAAOG,IAAI,CAACJ,MAAMK,MAAM,EAAE;QAC7C,OAAO;IACT;IACA,IAAK,IAAIC,IAAI,GAAGA,IAAIH,MAAME,MAAM,EAAEC,IAAK;QACrC,IACE,CAACL,OAAOM,SAAS,CAACC,cAAc,CAACC,IAAI,CAACT,MAAMG,KAAK,CAACG,EAAE,KACpD,CAACL,OAAOC,EAAE,CAACH,IAAI,CAACI,KAAK,CAACG,EAAE,CAAY,EAAEN,IAAI,CAACG,KAAK,CAACG,EAAE,CAAY,GAC/D;YACA,OAAO;QACT;IACF;IACA,OAAO;AACT"}
|
package/lib/libs/ms.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
// Helpers.
|
|
2
|
+
const s = 1000;
|
|
3
|
+
const m = s * 60;
|
|
4
|
+
const h = m * 60;
|
|
5
|
+
const d = h * 24;
|
|
6
|
+
const w = d * 7;
|
|
7
|
+
const y = d * 365.25;
|
|
8
|
+
function msFn(value, options) {
|
|
9
|
+
try {
|
|
10
|
+
if (typeof value === 'string' && value.length > 0) {
|
|
11
|
+
return parse(value);
|
|
12
|
+
} else if (typeof value === 'number' && isFinite(value)) {
|
|
13
|
+
return options?.long ? fmtLong(value) : fmtShort(value);
|
|
14
|
+
}
|
|
15
|
+
throw new Error('Value is not a string or number.');
|
|
16
|
+
} catch (error) {
|
|
17
|
+
const message = isError(error) ? `${error.message}. value=${JSON.stringify(value)}` : 'An unknown error has occurred.';
|
|
18
|
+
throw new Error(message);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Parse the given string and return milliseconds.
|
|
23
|
+
*
|
|
24
|
+
* @param str - A string to parse to milliseconds
|
|
25
|
+
* @returns The parsed value in milliseconds, or `NaN` if the string can't be
|
|
26
|
+
* parsed
|
|
27
|
+
*/ function parse(str) {
|
|
28
|
+
if (str.length > 100) {
|
|
29
|
+
throw new Error('Value exceeds the maximum length of 100 characters.');
|
|
30
|
+
}
|
|
31
|
+
const match = /^(?<value>-?(?:\d+)?\.?\d+) *(?<type>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);
|
|
32
|
+
// Named capture groups need to be manually typed today.
|
|
33
|
+
// https://github.com/microsoft/TypeScript/issues/32098
|
|
34
|
+
const groups = match?.groups;
|
|
35
|
+
if (!groups) {
|
|
36
|
+
return NaN;
|
|
37
|
+
}
|
|
38
|
+
const n = parseFloat(groups.value);
|
|
39
|
+
const type = (groups.type || 'ms').toLowerCase();
|
|
40
|
+
switch(type){
|
|
41
|
+
case 'years':
|
|
42
|
+
case 'year':
|
|
43
|
+
case 'yrs':
|
|
44
|
+
case 'yr':
|
|
45
|
+
case 'y':
|
|
46
|
+
return n * y;
|
|
47
|
+
case 'weeks':
|
|
48
|
+
case 'week':
|
|
49
|
+
case 'w':
|
|
50
|
+
return n * w;
|
|
51
|
+
case 'days':
|
|
52
|
+
case 'day':
|
|
53
|
+
case 'd':
|
|
54
|
+
return n * d;
|
|
55
|
+
case 'hours':
|
|
56
|
+
case 'hour':
|
|
57
|
+
case 'hrs':
|
|
58
|
+
case 'hr':
|
|
59
|
+
case 'h':
|
|
60
|
+
return n * h;
|
|
61
|
+
case 'minutes':
|
|
62
|
+
case 'minute':
|
|
63
|
+
case 'mins':
|
|
64
|
+
case 'min':
|
|
65
|
+
case 'm':
|
|
66
|
+
return n * m;
|
|
67
|
+
case 'seconds':
|
|
68
|
+
case 'second':
|
|
69
|
+
case 'secs':
|
|
70
|
+
case 'sec':
|
|
71
|
+
case 's':
|
|
72
|
+
return n * s;
|
|
73
|
+
case 'milliseconds':
|
|
74
|
+
case 'millisecond':
|
|
75
|
+
case 'msecs':
|
|
76
|
+
case 'msec':
|
|
77
|
+
case 'ms':
|
|
78
|
+
return n;
|
|
79
|
+
default:
|
|
80
|
+
// This should never occur.
|
|
81
|
+
throw new Error(`The unit ${type} was matched, but no matching case exists.`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// eslint-disable-next-line import/no-default-export
|
|
85
|
+
export default msFn;
|
|
86
|
+
/**
|
|
87
|
+
* Short format for `ms`.
|
|
88
|
+
*/ function fmtShort(ms) {
|
|
89
|
+
const msAbs = Math.abs(ms);
|
|
90
|
+
if (msAbs >= d) {
|
|
91
|
+
return `${Math.round(ms / d)}d`;
|
|
92
|
+
}
|
|
93
|
+
if (msAbs >= h) {
|
|
94
|
+
return `${Math.round(ms / h)}h`;
|
|
95
|
+
}
|
|
96
|
+
if (msAbs >= m) {
|
|
97
|
+
return `${Math.round(ms / m)}m`;
|
|
98
|
+
}
|
|
99
|
+
if (msAbs >= s) {
|
|
100
|
+
return `${Math.round(ms / s)}s`;
|
|
101
|
+
}
|
|
102
|
+
return `${ms}ms`;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Long format for `ms`.
|
|
106
|
+
*/ function fmtLong(ms) {
|
|
107
|
+
const msAbs = Math.abs(ms);
|
|
108
|
+
if (msAbs >= d) {
|
|
109
|
+
return plural(ms, msAbs, d, 'day');
|
|
110
|
+
}
|
|
111
|
+
if (msAbs >= h) {
|
|
112
|
+
return plural(ms, msAbs, h, 'hour');
|
|
113
|
+
}
|
|
114
|
+
if (msAbs >= m) {
|
|
115
|
+
return plural(ms, msAbs, m, 'minute');
|
|
116
|
+
}
|
|
117
|
+
if (msAbs >= s) {
|
|
118
|
+
return plural(ms, msAbs, s, 'second');
|
|
119
|
+
}
|
|
120
|
+
return `${ms} ms`;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Pluralization helper.
|
|
124
|
+
*/ function plural(ms, msAbs, n, name) {
|
|
125
|
+
const isPlural = msAbs >= n * 1.5;
|
|
126
|
+
return `${Math.round(ms / n)} ${name}${isPlural ? 's' : ''}`;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* A type guard for errors.
|
|
130
|
+
*
|
|
131
|
+
* @param value - The value to test
|
|
132
|
+
* @returns A boolean `true` if the provided value is an Error-like object
|
|
133
|
+
*/ function isError(value) {
|
|
134
|
+
return typeof value === 'object' && value !== null && 'message' in value;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
//# sourceMappingURL=ms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/libs/ms.ts"],"sourcesContent":["// Helpers.\nconst s = 1000;\nconst m = s * 60;\nconst h = m * 60;\nconst d = h * 24;\nconst w = d * 7;\nconst y = d * 365.25;\n\ntype Unit =\n | 'Years'\n | 'Year'\n | 'Yrs'\n | 'Yr'\n | 'Y'\n | 'Weeks'\n | 'Week'\n | 'W'\n | 'Days'\n | 'Day'\n | 'D'\n | 'Hours'\n | 'Hour'\n | 'Hrs'\n | 'Hr'\n | 'H'\n | 'Minutes'\n | 'Minute'\n | 'Mins'\n | 'Min'\n | 'M'\n | 'Seconds'\n | 'Second'\n | 'Secs'\n | 'Sec'\n | 's'\n | 'Milliseconds'\n | 'Millisecond'\n | 'Msecs'\n | 'Msec'\n | 'Ms';\n\ntype UnitAnyCase = Unit | Uppercase<Unit> | Lowercase<Unit>;\n\nexport type StringValue = `${number}` | `${number}${UnitAnyCase}` | `${number} ${UnitAnyCase}`;\n\ninterface Options {\n /**\n * Set to `true` to use verbose formatting. Defaults to `false`.\n */\n long?: boolean;\n}\n\n/**\n * Parse or format the given value.\n *\n * @param value - The string or number to convert\n * @param options - Options for the conversion\n * @throws Error if `value` is not a non-empty string or a number\n */\nfunction msFn(value: StringValue, options?: Options): number;\nfunction msFn(value: number, options?: Options): string;\nfunction msFn(value: StringValue | number, options?: Options): number | string {\n try {\n if (typeof value === 'string' && value.length > 0) {\n return parse(value);\n } else if (typeof value === 'number' && isFinite(value)) {\n return options?.long ? fmtLong(value) : fmtShort(value);\n }\n throw new Error('Value is not a string or number.');\n } catch (error) {\n const message = isError(error)\n ? `${error.message}. value=${JSON.stringify(value)}`\n : 'An unknown error has occurred.';\n throw new Error(message);\n }\n}\n\n/**\n * Parse the given string and return milliseconds.\n *\n * @param str - A string to parse to milliseconds\n * @returns The parsed value in milliseconds, or `NaN` if the string can't be\n * parsed\n */\nfunction parse(str: string): number {\n if (str.length > 100) {\n throw new Error('Value exceeds the maximum length of 100 characters.');\n }\n const match =\n /^(?<value>-?(?:\\d+)?\\.?\\d+) *(?<type>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str,\n );\n // Named capture groups need to be manually typed today.\n // https://github.com/microsoft/TypeScript/issues/32098\n const groups = match?.groups as { value: string; type?: string } | undefined;\n if (!groups) {\n return NaN;\n }\n const n = parseFloat(groups.value);\n const type = (groups.type || 'ms').toLowerCase() as Lowercase<Unit>;\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n // This should never occur.\n throw new Error(`The unit ${type as string} was matched, but no matching case exists.`);\n }\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default msFn;\n\n/**\n * Short format for `ms`.\n */\nfunction fmtShort(ms: number): StringValue {\n const msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return `${Math.round(ms / d)}d`;\n }\n if (msAbs >= h) {\n return `${Math.round(ms / h)}h`;\n }\n if (msAbs >= m) {\n return `${Math.round(ms / m)}m`;\n }\n if (msAbs >= s) {\n return `${Math.round(ms / s)}s`;\n }\n return `${ms}ms`;\n}\n\n/**\n * Long format for `ms`.\n */\nfunction fmtLong(ms: number): StringValue {\n const msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return `${ms} ms`;\n}\n\n/**\n * Pluralization helper.\n */\nfunction plural(ms: number, msAbs: number, n: number, name: string): StringValue {\n const isPlural = msAbs >= n * 1.5;\n return `${Math.round(ms / n)} ${name}${isPlural ? 's' : ''}` as StringValue;\n}\n\n/**\n * A type guard for errors.\n *\n * @param value - The value to test\n * @returns A boolean `true` if the provided value is an Error-like object\n */\nfunction isError(value: unknown): value is Error {\n return typeof value === 'object' && value !== null && 'message' in value;\n}\n"],"names":["s","m","h","d","w","y","msFn","value","options","length","parse","isFinite","long","fmtLong","fmtShort","Error","error","message","isError","JSON","stringify","str","match","exec","groups","NaN","n","parseFloat","type","toLowerCase","ms","msAbs","Math","abs","round","plural","name","isPlural"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/logging/Logger.ts"],"sourcesContent":["/**\n * Logger interface satisfies the `console`, `pino` logger interface.\n */\nexport interface Logger {\n trace(...args: any[]): void;\n\n debug(...args: any[]): void;\n\n info(...args: any[]): void;\n\n warn(...args: any[]): void;\n\n error(...args: any[]): void;\n\n /**\n * create child logger with given context\n */\n child?: (o: object) => Logger;\n}\n\nexport interface LoggerWithChild extends Logger {\n child: (o: Record<string, any>) => LoggerWithChild;\n}\n\nexport type LogLevel = 'error' | 'warn' | 'info' | 'debug' | 'trace';\n"],"names":[],"mappings":"AAAA;;CAEC,GAsBD,WAAqE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createLogger } from './createLogger.js';
|
|
2
|
+
export function createChildLogger(l, ctx) {
|
|
3
|
+
if (l.child) {
|
|
4
|
+
return l.child(ctx);
|
|
5
|
+
}
|
|
6
|
+
return createLogger((o)=>{
|
|
7
|
+
const { level, values, ...c } = o;
|
|
8
|
+
if (Object.keys(c).length) {
|
|
9
|
+
l[level](c, ...values);
|
|
10
|
+
} else {
|
|
11
|
+
l[level](...values);
|
|
12
|
+
}
|
|
13
|
+
}, ctx);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=createChildLogger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/logging/createChildLogger.ts"],"sourcesContent":["import type { Logger, LoggerWithChild } from './Logger';\nimport { createLogger } from './createLogger';\n\nexport function createChildLogger(l: Logger, ctx: object): LoggerWithChild {\n if (l.child) {\n return l.child(ctx) as LoggerWithChild;\n }\n return createLogger((o) => {\n const { level, values, ...c } = o;\n if (Object.keys(c).length) {\n l[level](c, ...values);\n } else {\n l[level](...values);\n }\n }, ctx);\n}\n"],"names":["createLogger","createChildLogger","l","ctx","child","o","level","values","c","Object","keys","length"],"mappings":"AACA,SAASA,YAAY,QAAQ,iBAAiB;AAE9C,OAAO,SAASC,kBAAkBC,CAAS,EAAEC,GAAW;IACtD,IAAID,EAAEE,KAAK,EAAE;QACX,OAAOF,EAAEE,KAAK,CAACD;IACjB;IACA,OAAOH,aAAa,CAACK;QACnB,MAAM,EAAEC,KAAK,EAAEC,MAAM,EAAE,GAAGC,GAAG,GAAGH;QAChC,IAAII,OAAOC,IAAI,CAACF,GAAGG,MAAM,EAAE;YACzBT,CAAC,CAACI,MAAM,CAACE,MAAMD;QACjB,OAAO;YACLL,CAAC,CAACI,MAAM,IAAIC;QACd;IACF,GAAGJ;AACL"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export function createLogger(write = ({ level, values, ...ctx })=>{
|
|
2
|
+
({ values, ...ctx } = merge(ctx, values));
|
|
3
|
+
console[level]?.(...values, ctx);
|
|
4
|
+
}, context = {}) {
|
|
5
|
+
return {
|
|
6
|
+
trace: (...values)=>{
|
|
7
|
+
write({
|
|
8
|
+
...context,
|
|
9
|
+
level: 'trace',
|
|
10
|
+
values
|
|
11
|
+
});
|
|
12
|
+
},
|
|
13
|
+
debug: (...values)=>{
|
|
14
|
+
write({
|
|
15
|
+
...context,
|
|
16
|
+
level: 'debug',
|
|
17
|
+
values
|
|
18
|
+
});
|
|
19
|
+
},
|
|
20
|
+
info: (...values)=>{
|
|
21
|
+
write({
|
|
22
|
+
...context,
|
|
23
|
+
level: 'info',
|
|
24
|
+
values
|
|
25
|
+
});
|
|
26
|
+
},
|
|
27
|
+
warn: (...values)=>{
|
|
28
|
+
write({
|
|
29
|
+
...context,
|
|
30
|
+
level: 'warn',
|
|
31
|
+
values
|
|
32
|
+
});
|
|
33
|
+
},
|
|
34
|
+
error: (...values)=>{
|
|
35
|
+
write({
|
|
36
|
+
...context,
|
|
37
|
+
level: 'error',
|
|
38
|
+
values
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
child: (ctx)=>createLogger(write, {
|
|
42
|
+
...context,
|
|
43
|
+
...ctx
|
|
44
|
+
})
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// logger.info({name:'wener'},'message')
|
|
48
|
+
// merge initial context with message object
|
|
49
|
+
function merge(ctx, values) {
|
|
50
|
+
if (values[0] && typeof values[0] === 'object') {
|
|
51
|
+
return {
|
|
52
|
+
...ctx,
|
|
53
|
+
...values[0],
|
|
54
|
+
values: values.slice(1)
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
...ctx,
|
|
59
|
+
values
|
|
60
|
+
};
|
|
61
|
+
} // https://github.com/nestjs/nest/blob/master/packages/common/services/console-logger.service.ts
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=createLogger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/logging/createLogger.ts"],"sourcesContent":["import type { LoggerWithChild, LogLevel } from './Logger';\n\nexport interface CreateLoggerOptions {\n name?: string;\n handler?: (o: { level: LogLevel; values: any[] } & Record<string | symbol, any>) => void;\n context?: Record<string, any>;\n levels?: LogLevel[];\n}\n\nexport function createLogger(\n write: (o: { level: LogLevel; values: any[] } & Record<string | symbol, any>) => void = ({\n level,\n values,\n ...ctx\n }) => {\n ({ values, ...ctx } = merge(ctx, values));\n console[level]?.(...values, ctx);\n },\n context: object = {},\n): LoggerWithChild {\n return {\n trace: (...values) => {\n write({ ...context, level: 'trace', values });\n },\n debug: (...values) => {\n write({ ...context, level: 'debug', values });\n },\n info: (...values) => {\n write({ ...context, level: 'info', values });\n },\n warn: (...values) => {\n write({ ...context, level: 'warn', values });\n },\n error: (...values) => {\n write({ ...context, level: 'error', values });\n },\n child: (ctx) => createLogger(write, { ...context, ...ctx }),\n };\n}\n\n// logger.info({name:'wener'},'message')\n// merge initial context with message object\nfunction merge(ctx: any, values: any[]) {\n if (values[0] && typeof values[0] === 'object') {\n return { ...ctx, ...values[0], values: values.slice(1) };\n }\n return { ...ctx, values };\n}\n\n// https://github.com/nestjs/nest/blob/master/packages/common/services/console-logger.service.ts\n"],"names":["createLogger","write","level","values","ctx","merge","console","context","trace","debug","info","warn","error","child","slice"],"mappings":"AASA,OAAO,SAASA,aACdC,QAAwF,CAAC,EACvFC,KAAK,EACLC,MAAM,EACN,GAAGC,KACJ;IACE,CAAA,EAAED,MAAM,EAAE,GAAGC,KAAK,GAAGC,MAAMD,KAAKD,OAAM;IACvCG,OAAO,CAACJ,MAAM,MAAMC,QAAQC;AAC9B,CAAC,EACDG,UAAkB,CAAC,CAAC;IAEpB,OAAO;QACLC,OAAO,CAAC,GAAGL;YACTF,MAAM;gBAAE,GAAGM,OAAO;gBAAEL,OAAO;gBAASC;YAAO;QAC7C;QACAM,OAAO,CAAC,GAAGN;YACTF,MAAM;gBAAE,GAAGM,OAAO;gBAAEL,OAAO;gBAASC;YAAO;QAC7C;QACAO,MAAM,CAAC,GAAGP;YACRF,MAAM;gBAAE,GAAGM,OAAO;gBAAEL,OAAO;gBAAQC;YAAO;QAC5C;QACAQ,MAAM,CAAC,GAAGR;YACRF,MAAM;gBAAE,GAAGM,OAAO;gBAAEL,OAAO;gBAAQC;YAAO;QAC5C;QACAS,OAAO,CAAC,GAAGT;YACTF,MAAM;gBAAE,GAAGM,OAAO;gBAAEL,OAAO;gBAASC;YAAO;QAC7C;QACAU,OAAO,CAACT,MAAQJ,aAAaC,OAAO;gBAAE,GAAGM,OAAO;gBAAE,GAAGH,GAAG;YAAC;IAC3D;AACF;AAEA,wCAAwC;AACxC,4CAA4C;AAC5C,SAASC,MAAMD,GAAQ,EAAED,MAAa;IACpC,IAAIA,MAAM,CAAC,EAAE,IAAI,OAAOA,MAAM,CAAC,EAAE,KAAK,UAAU;QAC9C,OAAO;YAAE,GAAGC,GAAG;YAAE,GAAGD,MAAM,CAAC,EAAE;YAAEA,QAAQA,OAAOW,KAAK,CAAC;QAAG;IACzD;IACA,OAAO;QAAE,GAAGV,GAAG;QAAED;IAAO;AAC1B,EAEA,gGAAgG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/logging/createNoopLogger.ts"],"sourcesContent":["import type { LoggerWithChild } from './Logger';\n\nexport function createNoopLogger(): LoggerWithChild {\n const noop = (..._: any[]) => undefined;\n return {\n trace: noop,\n debug: noop,\n info: noop,\n warn: noop,\n error: noop,\n child: () => createNoopLogger(),\n };\n}\n"],"names":["createNoopLogger","noop","_","undefined","trace","debug","info","warn","error","child"],"mappings":"AAEA,OAAO,SAASA;IACd,MAAMC,OAAO,CAAC,GAAGC,IAAaC;IAC9B,OAAO;QACLC,OAAOH;QACPI,OAAOJ;QACPK,MAAML;QACNM,MAAMN;QACNO,OAAOP;QACPQ,OAAO,IAAMT;IACf;AACF"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
var Level;
|
|
2
|
+
(function(Level) {
|
|
3
|
+
Level[Level["trace"] = -8] = "trace";
|
|
4
|
+
Level[Level["debug"] = -4] = "debug";
|
|
5
|
+
Level[Level["info"] = 0] = "info";
|
|
6
|
+
Level[Level["warn"] = 4] = "warn";
|
|
7
|
+
Level[Level["error"] = 8] = "error";
|
|
8
|
+
})(Level || (Level = {}));
|
|
9
|
+
function createLogFunc(opts) {
|
|
10
|
+
return (msg, ...args)=>{
|
|
11
|
+
const rec = {
|
|
12
|
+
message: String(msg),
|
|
13
|
+
level: opts.level,
|
|
14
|
+
attrs: Object.assign({}, opts.attrs)
|
|
15
|
+
};
|
|
16
|
+
if (args[0] && typeof args[0] === 'object') {
|
|
17
|
+
rec.attrs = Object.assign(rec.attrs, args[0]);
|
|
18
|
+
} else {
|
|
19
|
+
for(let i = 0; i < args.length; i += 2){
|
|
20
|
+
rec.attrs[String(args[i])] = args[i + 1];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
opts.onRecord(rec);
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function stringify(rec, opts = {}) {
|
|
27
|
+
const sb = [];
|
|
28
|
+
if (rec.time) {
|
|
29
|
+
sb.push(rec.time.toJSON());
|
|
30
|
+
}
|
|
31
|
+
rec.level && opts.level !== false && sb.push(rec.level.toUpperCase().padStart(5, ' '));
|
|
32
|
+
sb.push(rec.message);
|
|
33
|
+
if (rec.attrs) {
|
|
34
|
+
for (let [key, value] of Object.entries(rec.attrs)){
|
|
35
|
+
sb.push(`${key}=${JSON.stringify(value)}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return sb.join(' ');
|
|
39
|
+
}
|
|
40
|
+
export function createLogger(opts = {}) {
|
|
41
|
+
opts.time ??= typeof window === 'undefined';
|
|
42
|
+
const onRecord = (record)=>{
|
|
43
|
+
// can change options after create
|
|
44
|
+
const { writer = createLogger.writer, level, time } = opts;
|
|
45
|
+
if (level) {
|
|
46
|
+
if (Level[level] < Level[record.level]) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (time) {
|
|
51
|
+
record.time = new Date();
|
|
52
|
+
}
|
|
53
|
+
writer(record);
|
|
54
|
+
};
|
|
55
|
+
return {
|
|
56
|
+
trace: createLogFunc({
|
|
57
|
+
onRecord,
|
|
58
|
+
level: 'trace'
|
|
59
|
+
}),
|
|
60
|
+
debug: createLogFunc({
|
|
61
|
+
onRecord,
|
|
62
|
+
level: 'debug'
|
|
63
|
+
}),
|
|
64
|
+
info: createLogFunc({
|
|
65
|
+
onRecord,
|
|
66
|
+
level: 'info'
|
|
67
|
+
}),
|
|
68
|
+
warn: createLogFunc({
|
|
69
|
+
onRecord,
|
|
70
|
+
level: 'warn'
|
|
71
|
+
}),
|
|
72
|
+
error: createLogFunc({
|
|
73
|
+
onRecord,
|
|
74
|
+
level: 'error'
|
|
75
|
+
})
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
createLogger.writer = (record)=>{
|
|
79
|
+
const { level } = record;
|
|
80
|
+
console[level || 'info'](stringify(record));
|
|
81
|
+
};
|
|
82
|
+
let formatter = (open, close, replace = open)=>(input)=>{
|
|
83
|
+
let string = '' + input;
|
|
84
|
+
let index = string.indexOf(close, open.length);
|
|
85
|
+
return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;
|
|
86
|
+
};
|
|
87
|
+
let replaceClose = (string, close, replace, index)=>{
|
|
88
|
+
let start = string.substring(0, index) + replace;
|
|
89
|
+
let end = string.substring(index + close.length);
|
|
90
|
+
let nextIndex = end.indexOf(close);
|
|
91
|
+
return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end;
|
|
92
|
+
};
|
|
93
|
+
function getEnv() {
|
|
94
|
+
if (typeof process === 'object') {
|
|
95
|
+
return process.env;
|
|
96
|
+
}
|
|
97
|
+
return {};
|
|
98
|
+
}
|
|
99
|
+
function isColorSupported() {
|
|
100
|
+
if (typeof window === 'object') {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
const env = getEnv();
|
|
104
|
+
if ('NO_COLOR' in env) {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
if ('FORCE_COLOR' in env || 'CI' in env) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
export function createConsoleColors(enabled = isColorSupported()) {
|
|
113
|
+
return {
|
|
114
|
+
isColorSupported: enabled,
|
|
115
|
+
reset: enabled ? (s)=>`\x1b[0m${s}\x1b[0m` : String,
|
|
116
|
+
bold: enabled ? formatter('\x1b[1m', '\x1b[22m', '\x1b[22m\x1b[1m') : String,
|
|
117
|
+
dim: enabled ? formatter('\x1b[2m', '\x1b[22m', '\x1b[22m\x1b[2m') : String,
|
|
118
|
+
italic: enabled ? formatter('\x1b[3m', '\x1b[23m') : String,
|
|
119
|
+
underline: enabled ? formatter('\x1b[4m', '\x1b[24m') : String,
|
|
120
|
+
inverse: enabled ? formatter('\x1b[7m', '\x1b[27m') : String,
|
|
121
|
+
hidden: enabled ? formatter('\x1b[8m', '\x1b[28m') : String,
|
|
122
|
+
strikethrough: enabled ? formatter('\x1b[9m', '\x1b[29m') : String,
|
|
123
|
+
black: enabled ? formatter('\x1b[30m', '\x1b[39m') : String,
|
|
124
|
+
red: enabled ? formatter('\x1b[31m', '\x1b[39m') : String,
|
|
125
|
+
green: enabled ? formatter('\x1b[32m', '\x1b[39m') : String,
|
|
126
|
+
yellow: enabled ? formatter('\x1b[33m', '\x1b[39m') : String,
|
|
127
|
+
blue: enabled ? formatter('\x1b[34m', '\x1b[39m') : String,
|
|
128
|
+
magenta: enabled ? formatter('\x1b[35m', '\x1b[39m') : String,
|
|
129
|
+
cyan: enabled ? formatter('\x1b[36m', '\x1b[39m') : String,
|
|
130
|
+
white: enabled ? formatter('\x1b[37m', '\x1b[39m') : String,
|
|
131
|
+
gray: enabled ? formatter('\x1b[90m', '\x1b[39m') : String,
|
|
132
|
+
bgBlack: enabled ? formatter('\x1b[40m', '\x1b[49m') : String,
|
|
133
|
+
bgRed: enabled ? formatter('\x1b[41m', '\x1b[49m') : String,
|
|
134
|
+
bgGreen: enabled ? formatter('\x1b[42m', '\x1b[49m') : String,
|
|
135
|
+
bgYellow: enabled ? formatter('\x1b[43m', '\x1b[49m') : String,
|
|
136
|
+
bgBlue: enabled ? formatter('\x1b[44m', '\x1b[49m') : String,
|
|
137
|
+
bgMagenta: enabled ? formatter('\x1b[45m', '\x1b[49m') : String,
|
|
138
|
+
bgCyan: enabled ? formatter('\x1b[46m', '\x1b[49m') : String,
|
|
139
|
+
bgWhite: enabled ? formatter('\x1b[47m', '\x1b[49m') : String
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
//# sourceMappingURL=slog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/logging/slog.ts"],"sourcesContent":["import { Logger, LogLevel } from './Logger';\n\nenum Level {\n trace = -8,\n debug = -4,\n info = 0,\n warn = 4,\n error = 8,\n}\n\ninterface LogRecord {\n time?: Date;\n message: string;\n level?: 'info' | 'debug' | 'warn' | 'error' | 'trace';\n attrs?: Record<string, any>;\n\n source?: {\n func?: string;\n file?: string;\n line?: number;\n };\n\n // https://cs.opensource.google/go/x/exp/+/d63ba01a:slog/record.go\n}\n\ntype LogFunc =\n | ((message: string) => void)\n | ((message: string, attrs: Record<string, any>) => void)\n | ((message: string, key: string, value: any, ...attrs: any[]) => void);\n\nfunction createLogFunc(opts: {\n onRecord: (rec: LogRecord) => void;\n attrs?: Record<string, any>;\n level?: LogLevel;\n}): LogFunc {\n return (msg: string, ...args: any[]) => {\n const rec = {\n message: String(msg),\n level: opts.level,\n attrs: Object.assign({}, opts.attrs),\n };\n\n if (args[0] && typeof args[0] === 'object') {\n rec.attrs = Object.assign(rec.attrs, args[0]);\n } else {\n for (let i = 0; i < args.length; i += 2) {\n rec.attrs[String(args[i])] = args[i + 1];\n }\n }\n\n opts.onRecord(rec);\n };\n}\n\nfunction stringify(rec: LogRecord, opts: { level?: boolean } = {}) {\n const sb = [];\n if (rec.time) {\n sb.push(rec.time.toJSON());\n }\n rec.level && opts.level !== false && sb.push(rec.level.toUpperCase().padStart(5, ' '));\n sb.push(rec.message);\n\n if (rec.attrs) {\n for (let [key, value] of Object.entries(rec.attrs)) {\n sb.push(`${key}=${JSON.stringify(value)}`);\n }\n }\n return sb.join(' ');\n}\n\nexport function createLogger(\n opts: { writer?: (record: LogRecord) => void; level?: LogLevel; time?: boolean } = {},\n): Logger {\n opts.time ??= typeof window === 'undefined';\n const onRecord = (record: LogRecord) => {\n // can change options after create\n const { writer = createLogger.writer, level, time } = opts;\n if (level) {\n if (Level[level] < Level[record.level!]) {\n return;\n }\n }\n if (time) {\n record.time = new Date();\n }\n writer(record);\n };\n return {\n trace: createLogFunc({ onRecord, level: 'trace' }),\n debug: createLogFunc({ onRecord, level: 'debug' }),\n info: createLogFunc({ onRecord, level: 'info' }),\n warn: createLogFunc({ onRecord, level: 'warn' }),\n error: createLogFunc({ onRecord, level: 'error' }),\n };\n}\n\ncreateLogger.writer = (record: LogRecord) => {\n const { level } = record;\n console[level || 'info'](stringify(record));\n};\n\n// https://github.com/alexeyraspopov/picocolors/blob/main/picocolors.js\n/*\nMDN: Styling console output\nhttps://developer.mozilla.org/en-US/docs/Web/API/console#Usage\n\nChrome: Console API Reference\nhttps://developers.google.com/web/tools/chrome-devtools/console/console-write#styling_console_output_with_css\n\nWebKit: Console Object API\nhttps://webkit.org/web-inspector/console-object-api/\n\nhttps://stackoverflow.com/questions/7505623\n\nconsole.log('\\x1b[36m Hello \\x1b[34m Colored \\x1b[35m World!');\nconsole.log('\\x1B[31mHello\\x1B[34m World');\nconsole.log('\\x1b[43mHighlighted');\n\n\nNestJS Formatter\nhttps://github.com/nestjs/nest/blob/d4bda940fc10238eb18f14ebf66d66b7ef8bff41/packages/common/services/console-logger.service.ts#L201-L227\n\n */\n\nexport type Formatter = (input: string | number | null | undefined) => string;\n\nexport interface Colors {\n isColorSupported: boolean;\n reset: Formatter;\n bold: Formatter;\n dim: Formatter;\n italic: Formatter;\n underline: Formatter;\n inverse: Formatter;\n hidden: Formatter;\n strikethrough: Formatter;\n black: Formatter;\n red: Formatter;\n green: Formatter;\n yellow: Formatter;\n blue: Formatter;\n magenta: Formatter;\n cyan: Formatter;\n white: Formatter;\n gray: Formatter;\n bgBlack: Formatter;\n bgRed: Formatter;\n bgGreen: Formatter;\n bgYellow: Formatter;\n bgBlue: Formatter;\n bgMagenta: Formatter;\n bgCyan: Formatter;\n bgWhite: Formatter;\n}\n\nlet formatter =\n (open: string, close: string, replace: string = open) =>\n (input: string) => {\n let string = '' + input;\n let index = string.indexOf(close, open.length);\n return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;\n };\n\nlet replaceClose = (string: string, close: string, replace: string, index: number): string => {\n let start = string.substring(0, index) + replace;\n let end = string.substring(index + close.length);\n let nextIndex = end.indexOf(close);\n return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end;\n};\n\nfunction getEnv(): Record<string, string | undefined> {\n if (typeof process === 'object') {\n return process.env;\n }\n return {};\n}\n\nfunction isColorSupported() {\n if (typeof window === 'object') {\n return true;\n }\n const env = getEnv();\n if ('NO_COLOR' in env) {\n return false;\n }\n if ('FORCE_COLOR' in env || 'CI' in env) {\n return true;\n }\n return false;\n}\n\nexport function createConsoleColors(enabled = isColorSupported()) {\n return {\n isColorSupported: enabled,\n reset: enabled ? (s: string) => `\\x1b[0m${s}\\x1b[0m` : String,\n bold: enabled ? formatter('\\x1b[1m', '\\x1b[22m', '\\x1b[22m\\x1b[1m') : String,\n dim: enabled ? formatter('\\x1b[2m', '\\x1b[22m', '\\x1b[22m\\x1b[2m') : String,\n italic: enabled ? formatter('\\x1b[3m', '\\x1b[23m') : String,\n underline: enabled ? formatter('\\x1b[4m', '\\x1b[24m') : String,\n inverse: enabled ? formatter('\\x1b[7m', '\\x1b[27m') : String,\n hidden: enabled ? formatter('\\x1b[8m', '\\x1b[28m') : String,\n strikethrough: enabled ? formatter('\\x1b[9m', '\\x1b[29m') : String,\n black: enabled ? formatter('\\x1b[30m', '\\x1b[39m') : String,\n red: enabled ? formatter('\\x1b[31m', '\\x1b[39m') : String,\n green: enabled ? formatter('\\x1b[32m', '\\x1b[39m') : String,\n yellow: enabled ? formatter('\\x1b[33m', '\\x1b[39m') : String,\n blue: enabled ? formatter('\\x1b[34m', '\\x1b[39m') : String,\n magenta: enabled ? formatter('\\x1b[35m', '\\x1b[39m') : String,\n cyan: enabled ? formatter('\\x1b[36m', '\\x1b[39m') : String,\n white: enabled ? formatter('\\x1b[37m', '\\x1b[39m') : String,\n gray: enabled ? formatter('\\x1b[90m', '\\x1b[39m') : String,\n bgBlack: enabled ? formatter('\\x1b[40m', '\\x1b[49m') : String,\n bgRed: enabled ? formatter('\\x1b[41m', '\\x1b[49m') : String,\n bgGreen: enabled ? formatter('\\x1b[42m', '\\x1b[49m') : String,\n bgYellow: enabled ? formatter('\\x1b[43m', '\\x1b[49m') : String,\n bgBlue: enabled ? formatter('\\x1b[44m', '\\x1b[49m') : String,\n bgMagenta: enabled ? formatter('\\x1b[45m', '\\x1b[49m') : String,\n bgCyan: enabled ? formatter('\\x1b[46m', '\\x1b[49m') : String,\n bgWhite: enabled ? formatter('\\x1b[47m', '\\x1b[49m') : String,\n };\n}\n"],"names":["Level","createLogFunc","opts","msg","args","rec","message","String","level","attrs","Object","assign","i","length","onRecord","stringify","sb","time","push","toJSON","toUpperCase","padStart","key","value","entries","JSON","join","createLogger","window","record","writer","Date","trace","debug","info","warn","error","console","formatter","open","close","replace","input","string","index","indexOf","replaceClose","start","substring","end","nextIndex","getEnv","process","env","isColorSupported","createConsoleColors","enabled","reset","s","bold","dim","italic","underline","inverse","hidden","strikethrough","black","red","green","yellow","blue","magenta","cyan","white","gray","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite"],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// export function clamp<T>(value: T | null | undefined, o: { min: T; max: T; default?: T }): T;
|
|
2
|
+
export function clamp(value, ...o) {
|
|
3
|
+
let min, max, def;
|
|
4
|
+
if (o.length === 1) {
|
|
5
|
+
({ min, max, default: def = min } = o[0]);
|
|
6
|
+
} else {
|
|
7
|
+
[min, max, def = min] = o;
|
|
8
|
+
}
|
|
9
|
+
if (value === null || value === undefined) {
|
|
10
|
+
return def;
|
|
11
|
+
}
|
|
12
|
+
if (value < min) {
|
|
13
|
+
return min;
|
|
14
|
+
}
|
|
15
|
+
if (value > max) {
|
|
16
|
+
return max;
|
|
17
|
+
}
|
|
18
|
+
return value;
|
|
19
|
+
} // type Comparable = number | string | Date | BigInt;
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=clamp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/maths/clamp.ts"],"sourcesContent":["// export function clamp<T>(value: T | null | undefined, o: { min: T; max: T; default?: T }): T;\n\nexport function clamp<T>(value: T | null | undefined, min: T, max: T, def?: T): T;\nexport function clamp<T>(value: T | null | undefined, ...o: any[]): T {\n let min: T, max: T, def: T;\n if (o.length === 1) {\n ({ min, max, default: def = min! } = o[0]);\n } else {\n [min, max, def = min!] = o;\n }\n if (value === null || value === undefined) {\n return def;\n }\n if (value < min) {\n return min;\n }\n if (value > max) {\n return max;\n }\n return value;\n}\n\n// type Comparable = number | string | Date | BigInt;\n"],"names":["clamp","value","o","min","max","def","length","default","undefined"],"mappings":"AAAA,gGAAgG;AAGhG,OAAO,SAASA,MAASC,KAA2B,EAAE,GAAGC,CAAQ;IAC/D,IAAIC,KAAQC,KAAQC;IACpB,IAAIH,EAAEI,MAAM,KAAK,GAAG;QACjB,CAAA,EAAEH,GAAG,EAAEC,GAAG,EAAEG,SAASF,MAAMF,GAAI,EAAE,GAAGD,CAAC,CAAC,EAAE,AAAD;IAC1C,OAAO;QACL,CAACC,KAAKC,KAAKC,MAAMF,GAAI,CAAC,GAAGD;IAC3B;IACA,IAAID,UAAU,QAAQA,UAAUO,WAAW;QACzC,OAAOH;IACT;IACA,IAAIJ,QAAQE,KAAK;QACf,OAAOA;IACT;IACA,IAAIF,QAAQG,KAAK;QACf,OAAOA;IACT;IACA,OAAOH;AACT,EAEA,qDAAqD"}
|