@wener/utils 1.1.7 → 1.1.9
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/dist/LICENSE.txt +1 -0
- package/dist/cjs/index.cjs +2 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/server.cjs +2 -0
- package/dist/cjs/server.cjs.map +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/server.js +1 -1
- package/dist/esm/server.js.map +1 -1
- package/dist/system/index.js +1 -1
- package/dist/system/index.js.map +1 -1
- package/dist/system/server.js +1 -1
- package/dist/system/server.js.map +1 -1
- package/lib/asyncs/createLazyPromise.js +12 -1
- package/lib/asyncs/createLazyPromise.js.map +1 -1
- package/lib/browsers/copy.js.map +1 -1
- package/lib/crypto/getRandomValues.js +27 -0
- package/lib/crypto/getRandomValues.js.map +1 -0
- package/lib/crypto/randomUUID.js +1 -1
- package/lib/crypto/randomUUID.js.map +1 -1
- package/lib/crypto/ulid.js +139 -0
- package/lib/crypto/ulid.js.map +1 -0
- package/lib/i18n/createTranslate.js +17 -1
- package/lib/i18n/createTranslate.js.map +1 -1
- package/lib/index.js +11 -4
- package/lib/index.js.map +1 -1
- package/lib/io/ArrayBuffers.js +30 -24
- package/lib/io/ArrayBuffers.js.map +1 -1
- package/lib/io/Buffer.js +21 -0
- package/lib/io/Buffer.js.map +1 -0
- package/lib/isomorphics/structuredClone.js.map +1 -1
- package/lib/langs/shallowClone.js +15 -0
- package/lib/langs/shallowClone.js.map +1 -0
- package/lib/logging/createChildLogger.js +2 -2
- package/lib/logging/createChildLogger.js.map +1 -1
- package/lib/logging/createLogger.js +26 -0
- package/lib/logging/createLogger.js.map +1 -0
- package/lib/logging/createNoopLogger.js.map +1 -1
- package/lib/objects/get.js.map +1 -1
- package/lib/objects/set.js.map +1 -1
- package/lib/server/polyfillFetch.js +17 -24
- package/lib/server/polyfillFetch.js.map +1 -1
- package/lib/validations/isEmptyObject.js +3 -4
- package/lib/validations/isEmptyObject.js.map +1 -1
- package/lib/validations/isPlainObject.js +11 -0
- package/lib/validations/isPlainObject.js.map +1 -0
- package/lib/validations/parseBoolean.js +31 -0
- package/lib/validations/parseBoolean.js.map +1 -0
- package/lib/validations/parseTimestamp.js +25 -0
- package/lib/validations/parseTimestamp.js.map +1 -0
- package/package.json +8 -11
- package/src/asyncs/createLazyPromise.test.ts +16 -1
- package/src/asyncs/createLazyPromise.ts +18 -2
- package/src/asyncs/isThenable.ts +4 -0
- package/src/browsers/copy.ts +1 -1
- package/src/crypto/getRandomValues.ts +42 -0
- package/src/crypto/randomUUID.ts +1 -1
- package/src/crypto/ulid.test.ts +30 -0
- package/src/crypto/ulid.ts +183 -0
- package/src/i18n/createTranslate.test.ts +15 -0
- package/src/i18n/createTranslate.ts +19 -3
- package/src/index.ts +16 -6
- package/src/io/ArrayBuffers.base64.test.ts +1 -1
- package/src/io/ArrayBuffers.ts +41 -25
- package/src/io/Buffer.test.ts +23 -0
- package/src/io/Buffer.ts +14 -0
- package/src/isomorphics/structuredClone.ts +1 -1
- package/src/langs/shallowClone.ts +13 -0
- package/src/logging/createChildLogger.ts +3 -3
- package/src/logging/createLogger.ts +31 -0
- package/src/logging/createNoopLogger.ts +1 -1
- package/src/logging/logger.test.ts +5 -3
- package/src/objects/get.ts +2 -1
- package/src/objects/set.ts +2 -1
- package/src/server/polyfillBrowser.test.ts +5 -1
- package/src/server/polyfillFetch.ts +22 -24
- package/src/validations/isEmptyObject.ts +3 -4
- package/src/validations/isFunction.ts +3 -0
- package/src/validations/isPlainObject.ts +10 -0
- package/src/validations/parseBoolean.ts +30 -0
- package/src/validations/parseTimestamp.test.ts +7 -0
- package/src/validations/parseTimestamp.ts +29 -0
- package/dist/cjs/index.js +0 -2
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/server.js +0 -2
- package/dist/cjs/server.js.map +0 -1
- package/lib/logging/createWriteLogger.js +0 -13
- package/lib/logging/createWriteLogger.js.map +0 -1
- package/src/logging/createWriteLogger.ts +0 -15
package/lib/io/Buffer.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ArrayBuffers } from './ArrayBuffers.js';
|
|
2
|
+
import { isBuffer } from './isBuffer.js';
|
|
3
|
+
|
|
4
|
+
class Buffer extends Uint8Array {
|
|
5
|
+
static get isPolyfill() {
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
static isBuffer(v) {
|
|
9
|
+
return v instanceof Buffer || isBuffer(v);
|
|
10
|
+
}
|
|
11
|
+
static from(array, arg2) {
|
|
12
|
+
return new Buffer(ArrayBuffers.from(array, arg2));
|
|
13
|
+
}
|
|
14
|
+
static isEncoding = ArrayBuffers.isEncoding;
|
|
15
|
+
toString(encoding) {
|
|
16
|
+
return ArrayBuffers.toString(this, encoding);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export { Buffer };
|
|
21
|
+
//# sourceMappingURL=Buffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Buffer.js","sources":["../../src/io/Buffer.ts"],"sourcesContent":["import { ArrayBuffers } from './ArrayBuffers';\nimport { isBuffer } from './isBuffer';\n\n/**\n * Buffer is a polyfill version of NodeJS Buffer\n */\nexport class Buffer extends Uint8Array {\n // constructor(buffer: ArrayBufferLike, byteOffset?: number, length?: number) {\n // super(buffer, byteOffset, length);\n // }\n\n static get isPolyfill() {\n return true;\n }\n\n static isBuffer(v: any): v is Buffer {\n return v instanceof Buffer || isBuffer(v);\n }\n\n static from(array: string | BufferSource | ArrayLike<number> | Iterable<number>, arg2?: any): Buffer {\n // todo mapfn\n return new Buffer(ArrayBuffers.from(array, arg2) as ArrayBuffer);\n }\n\n static isEncoding = ArrayBuffers.isEncoding;\n\n toString(encoding?: string): string {\n return ArrayBuffers.toString(this, encoding as any);\n }\n}\n"],"names":[],"mappings":";;;AAMO,MAAM,eAAe,UAAW,CAAA;AAAA,EAKrC,WAAW,UAAa,GAAA;AACtB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEA,OAAO,SAAS,CAAqB,EAAA;AACnC,IAAO,OAAA,CAAA,YAAa,MAAU,IAAA,QAAA,CAAS,CAAC,CAAA,CAAA;AAAA,GAC1C;AAAA,EAEA,OAAO,IAAK,CAAA,KAAA,EAAqE,IAAoB,EAAA;AAEnG,IAAA,OAAO,IAAI,MAAO,CAAA,YAAA,CAAa,IAAK,CAAA,KAAA,EAAO,IAAI,CAAgB,CAAA,CAAA;AAAA,GACjE;AAAA,EAEA,OAAO,aAAa,YAAa,CAAA,UAAA,CAAA;AAAA,EAEjC,SAAS,QAA2B,EAAA;AAClC,IAAO,OAAA,YAAA,CAAa,QAAS,CAAA,IAAA,EAAM,QAAe,CAAA,CAAA;AAAA,GACpD;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structuredClone.js","sources":["../../src/isomorphics/structuredClone.ts"],"sourcesContent":["/* eslint no-proto:0 */\nimport { classOf } from '../langs/classOf';\n\n/**\n * Clone an object using structured cloning algorithm\n *\n * - Chrome 98, Safari 15.4\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/structuredClone structuredClone}\n * @see {@link https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/web.structured-clone.js core-js}\n */\nexport const structuredClone: <T>(value: T, options?: StructuredSerializeOptions) => T =\n globalThis.structuredClone || _clone;\n\nfunction set(obj: any, key: any, val: any) {\n if (typeof val.value === 'object') val.value = _clone(val.value);\n if (!val.enumerable || val.get || val.set || !val.configurable || !val.writable || key === '__proto__') {\n Object.defineProperty(obj, key, val);\n } else obj[key] = val.value;\n}\n\n/**\n * @see {@link https://github.com/lukeed/klona/blob/master/src/full.js klona}\n */\nexport function _clone(x: any): any {\n // too complex\n // https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/web.structured-clone.js\n\n if (typeof x !== 'object') return x;\n\n let i = 0;\n let k;\n let list;\n let tmp: any;\n const str = classOf(x);\n switch (str) {\n case 'Array':\n tmp = Array(x.length);\n break;\n case 'Object':\n tmp = Object.create(x.__proto__ || null);\n break;\n case 'Set':\n tmp = new Set();\n x.forEach(function (val: any) {\n tmp.add(_clone(val));\n });\n break;\n case 'Map':\n tmp = new Map();\n x.forEach(function (val: any, key: any) {\n tmp.set(_clone(key), _clone(val));\n });\n break;\n case 'Date':\n tmp = new Date(+x);\n break;\n case 'RegExp':\n tmp = new RegExp(x.source, x.flags);\n break;\n case 'DataView':\n tmp = new x.constructor(_clone(x.buffer));\n break;\n case 'ArrayBuffer':\n tmp = x.slice(0);\n break;\n default:\n // typed arrays\n if (str.endsWith('Array')) {\n // ArrayBuffer.isView(x)\n // ~> `new` bcuz `Buffer.slice` => ref\n tmp = new x.constructor(x);\n }\n }\n\n if (tmp) {\n for (list = Object.getOwnPropertySymbols(x); i < list.length; i++) {\n set(tmp, list[i], Object.getOwnPropertyDescriptor(x, list[i]));\n }\n\n for (i = 0, list = Object.getOwnPropertyNames(x); i < list.length; i++) {\n if (Object.hasOwnProperty.call(tmp, (k = list[i])) && tmp[k] === x[k]) continue;\n set(tmp, k, Object.getOwnPropertyDescriptor(x, k));\n }\n }\n\n return tmp || x;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"structuredClone.js","sources":["../../src/isomorphics/structuredClone.ts"],"sourcesContent":["/* eslint no-proto:0 */\nimport { classOf } from '../langs/classOf';\n\n/**\n * Clone an object using structured cloning algorithm\n *\n * - Chrome 98, Safari 15.4, NodeJS 17\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/structuredClone structuredClone}\n * @see {@link https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/web.structured-clone.js core-js}\n */\nexport const structuredClone: <T>(value: T, options?: StructuredSerializeOptions) => T =\n globalThis.structuredClone || _clone;\n\nfunction set(obj: any, key: any, val: any) {\n if (typeof val.value === 'object') val.value = _clone(val.value);\n if (!val.enumerable || val.get || val.set || !val.configurable || !val.writable || key === '__proto__') {\n Object.defineProperty(obj, key, val);\n } else obj[key] = val.value;\n}\n\n/**\n * @see {@link https://github.com/lukeed/klona/blob/master/src/full.js klona}\n */\nexport function _clone(x: any): any {\n // too complex\n // https://github.com/zloirock/core-js/blob/master/packages/core-js/modules/web.structured-clone.js\n\n if (typeof x !== 'object') return x;\n\n let i = 0;\n let k;\n let list;\n let tmp: any;\n const str = classOf(x);\n switch (str) {\n case 'Array':\n tmp = Array(x.length);\n break;\n case 'Object':\n tmp = Object.create(x.__proto__ || null);\n break;\n case 'Set':\n tmp = new Set();\n x.forEach(function (val: any) {\n tmp.add(_clone(val));\n });\n break;\n case 'Map':\n tmp = new Map();\n x.forEach(function (val: any, key: any) {\n tmp.set(_clone(key), _clone(val));\n });\n break;\n case 'Date':\n tmp = new Date(+x);\n break;\n case 'RegExp':\n tmp = new RegExp(x.source, x.flags);\n break;\n case 'DataView':\n tmp = new x.constructor(_clone(x.buffer));\n break;\n case 'ArrayBuffer':\n tmp = x.slice(0);\n break;\n default:\n // typed arrays\n if (str.endsWith('Array')) {\n // ArrayBuffer.isView(x)\n // ~> `new` bcuz `Buffer.slice` => ref\n tmp = new x.constructor(x);\n }\n }\n\n if (tmp) {\n for (list = Object.getOwnPropertySymbols(x); i < list.length; i++) {\n set(tmp, list[i], Object.getOwnPropertyDescriptor(x, list[i]));\n }\n\n for (i = 0, list = Object.getOwnPropertyNames(x); i < list.length; i++) {\n if (Object.hasOwnProperty.call(tmp, (k = list[i])) && tmp[k] === x[k]) continue;\n set(tmp, k, Object.getOwnPropertyDescriptor(x, k));\n }\n }\n\n return tmp || x;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
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
|
+
return obj;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export { shallowClone };
|
|
15
|
+
//# sourceMappingURL=shallowClone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shallowClone.js","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":[],"mappings":"AAAO,SAAS,aAAgB,GAAW,EAAA;AACzC,EAAA,IAAI,CAAC,GAAK,EAAA;AACR,IAAO,OAAA,GAAA,CAAA;AAAA,GACT;AACA,EAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,GAAG,CAAG,EAAA;AACtB,IAAA,OAAO,IAAI,KAAM,EAAA,CAAA;AAAA,GACnB;AACA,EAAI,IAAA,OAAO,QAAQ,QAAU,EAAA;AAC3B,IAAA,OAAO,MAAO,CAAA,MAAA,CAAO,EAAC,EAAG,GAAG,CAAA,CAAA;AAAA,GAC9B;AAEA,EAAO,OAAA,GAAA,CAAA;AACT;;;;"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createLogger } from './createLogger.js';
|
|
2
2
|
|
|
3
3
|
function createChildLogger(l, ctx) {
|
|
4
4
|
if (l.child) {
|
|
5
5
|
return l.child(ctx);
|
|
6
6
|
}
|
|
7
|
-
return
|
|
7
|
+
return createLogger((o) => {
|
|
8
8
|
const { level, values, ...c } = o;
|
|
9
9
|
if (Object.keys(c).length) {
|
|
10
10
|
l[level](c, ...values);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createChildLogger.js","sources":["../../src/logging/createChildLogger.ts"],"sourcesContent":["import { Logger, LoggerWithChild } from './Logger';\nimport {
|
|
1
|
+
{"version":3,"file":"createChildLogger.js","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":[],"mappings":";;AAGgB,SAAA,iBAAA,CAAkB,GAAW,GAA8B,EAAA;AACzE,EAAA,IAAI,EAAE,KAAO,EAAA;AACX,IAAO,OAAA,CAAA,CAAE,MAAM,GAAG,CAAA,CAAA;AAAA,GACpB;AACA,EAAO,OAAA,YAAA,CAAa,CAAC,CAAM,KAAA;AACzB,IAAA,MAAM,EAAE,KAAA,EAAO,MAAW,EAAA,GAAA,CAAA,EAAM,GAAA,CAAA,CAAA;AAChC,IAAA,IAAI,MAAO,CAAA,IAAA,CAAK,CAAC,CAAA,CAAE,MAAQ,EAAA;AACzB,MAAE,CAAA,CAAA,KAAA,CAAA,CAAO,CAAG,EAAA,GAAG,MAAM,CAAA,CAAA;AAAA,KAChB,MAAA;AACL,MAAE,CAAA,CAAA,KAAA,CAAA,CAAO,GAAG,MAAM,CAAA,CAAA;AAAA,KACpB;AAAA,KACC,GAAG,CAAA,CAAA;AACR;;;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
function createLogger(write = ({
|
|
2
|
+
level,
|
|
3
|
+
values,
|
|
4
|
+
...ctx
|
|
5
|
+
}) => {
|
|
6
|
+
({ values, ...ctx } = merge(ctx, values));
|
|
7
|
+
console[level]?.(...values, ctx);
|
|
8
|
+
}, context = {}) {
|
|
9
|
+
return {
|
|
10
|
+
trace: (...values) => write({ ...context, level: "trace", values }),
|
|
11
|
+
debug: (...values) => write({ ...context, level: "debug", values }),
|
|
12
|
+
info: (...values) => write({ ...context, level: "info", values }),
|
|
13
|
+
warn: (...values) => write({ ...context, level: "warn", values }),
|
|
14
|
+
error: (...values) => write({ ...context, level: "error", values }),
|
|
15
|
+
child: (ctx) => createLogger(write, { ...context, ...ctx })
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function merge(ctx, values) {
|
|
19
|
+
if (values[0] && typeof values[0] === "object") {
|
|
20
|
+
return { ...ctx, ...values[0], values: values.slice(1) };
|
|
21
|
+
}
|
|
22
|
+
return { ...ctx, values };
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { createLogger };
|
|
26
|
+
//# sourceMappingURL=createLogger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createLogger.js","sources":["../../src/logging/createLogger.ts"],"sourcesContent":["import type { LoggerWithChild, LogLevel } from './Logger';\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) => write({ ...context, level: 'trace', values }),\n debug: (...values) => write({ ...context, level: 'debug', values }),\n info: (...values) => write({ ...context, level: 'info', values }),\n warn: (...values) => write({ ...context, level: 'warn', values }),\n error: (...values) => write({ ...context, level: 'error', values }),\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"],"names":[],"mappings":"AAEgB,SAAA,YAAA,CACd,QAAwF,CAAC;AAAA,EACvF,KAAA;AAAA,EACA,MAAA;AAAA,EACG,GAAA,GAAA;AACL,CAAM,KAAA;AACJ,EAAA,CAAC,EAAE,MAAQ,EAAA,GAAG,KAAQ,GAAA,KAAA,CAAM,KAAK,MAAM,CAAA,EAAA;AACvC,EAAQ,OAAA,CAAA,KAAA,CAAA,GAAS,GAAG,MAAA,EAAQ,GAAG,CAAA,CAAA;AACjC,CACA,EAAA,OAAA,GAAkB,EACD,EAAA;AACjB,EAAO,OAAA;AAAA,IACL,KAAA,EAAO,CAAI,GAAA,MAAA,KAAW,KAAM,CAAA,EAAE,GAAG,OAAS,EAAA,KAAA,EAAO,OAAS,EAAA,MAAA,EAAQ,CAAA;AAAA,IAClE,KAAA,EAAO,CAAI,GAAA,MAAA,KAAW,KAAM,CAAA,EAAE,GAAG,OAAS,EAAA,KAAA,EAAO,OAAS,EAAA,MAAA,EAAQ,CAAA;AAAA,IAClE,IAAA,EAAM,CAAI,GAAA,MAAA,KAAW,KAAM,CAAA,EAAE,GAAG,OAAS,EAAA,KAAA,EAAO,MAAQ,EAAA,MAAA,EAAQ,CAAA;AAAA,IAChE,IAAA,EAAM,CAAI,GAAA,MAAA,KAAW,KAAM,CAAA,EAAE,GAAG,OAAS,EAAA,KAAA,EAAO,MAAQ,EAAA,MAAA,EAAQ,CAAA;AAAA,IAChE,KAAA,EAAO,CAAI,GAAA,MAAA,KAAW,KAAM,CAAA,EAAE,GAAG,OAAS,EAAA,KAAA,EAAO,OAAS,EAAA,MAAA,EAAQ,CAAA;AAAA,IAClE,KAAA,EAAO,CAAC,GAAA,KAAQ,YAAa,CAAA,KAAA,EAAO,EAAE,GAAG,OAAA,EAAS,GAAG,GAAA,EAAK,CAAA;AAAA,GAC5D,CAAA;AACF,CAAA;AAIA,SAAS,KAAA,CAAM,KAAU,MAAe,EAAA;AACtC,EAAA,IAAI,MAAO,CAAA,CAAA,CAAA,IAAM,OAAO,MAAA,CAAO,OAAO,QAAU,EAAA;AAC9C,IAAO,OAAA,EAAE,GAAG,GAAA,EAAK,GAAG,MAAA,CAAO,IAAI,MAAQ,EAAA,MAAA,CAAO,KAAM,CAAA,CAAC,CAAE,EAAA,CAAA;AAAA,GACzD;AACA,EAAO,OAAA,EAAE,GAAG,GAAA,EAAK,MAAO,EAAA,CAAA;AAC1B;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createNoopLogger.js","sources":["../../src/logging/createNoopLogger.ts"],"sourcesContent":["import { 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":[],"mappings":"AAEO,SAAS,gBAAoC,GAAA;AAClD,EAAM,MAAA,IAAA,GAAO,IAAI,CAAa,KAAA,KAAA,CAAA,CAAA;AAC9B,EAAO,OAAA;AAAA,IACL,KAAO,EAAA,IAAA;AAAA,IACP,KAAO,EAAA,IAAA;AAAA,IACP,IAAM,EAAA,IAAA;AAAA,IACN,IAAM,EAAA,IAAA;AAAA,IACN,KAAO,EAAA,IAAA;AAAA,IACP,KAAA,EAAO,MAAM,gBAAiB,EAAA;AAAA,GAChC,CAAA;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"createNoopLogger.js","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":[],"mappings":"AAEO,SAAS,gBAAoC,GAAA;AAClD,EAAM,MAAA,IAAA,GAAO,IAAI,CAAa,KAAA,KAAA,CAAA,CAAA;AAC9B,EAAO,OAAA;AAAA,IACL,KAAO,EAAA,IAAA;AAAA,IACP,KAAO,EAAA,IAAA;AAAA,IACP,IAAM,EAAA,IAAA;AAAA,IACN,IAAM,EAAA,IAAA;AAAA,IACN,KAAO,EAAA,IAAA;AAAA,IACP,KAAA,EAAO,MAAM,gBAAiB,EAAA;AAAA,GAChC,CAAA;AACF;;;;"}
|
package/lib/objects/get.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.js","sources":["../../src/objects/get.ts"],"sourcesContent":["import { ObjectKey
|
|
1
|
+
{"version":3,"file":"get.js","sources":["../../src/objects/get.ts"],"sourcesContent":["import type { ObjectKey} from './parseObjectPath';\nimport { parseObjectPath } from './parseObjectPath';\n\n/**\n * get by path\n *\n * {@link https://github.com/developit/dlv dlv}\n */\nexport function get<O extends object, P extends ObjectKey, OrElse extends unknown>(\n obj: O,\n key: P | P[],\n def?: OrElse,\n): ResolveObjectPathType<O, P, OrElse> {\n const undef = undefined;\n const path = parseObjectPath(key);\n let out: any = obj;\n for (const i of path) {\n out = out ? out[i] : undef;\n }\n return out === undef ? def : out;\n}\n\n/**\n * It tries to resolve the path of the given object, otherwise it will return OrElse\n *\n * {@link https://github.com/Pouja/typescript-deep-path-safe typescript-deep-path-safe}\n */\nexport type ResolveObjectPathType<\n ObjectType,\n Path extends string | symbol | number,\n OrElse,\n> = Path extends keyof ObjectType\n ? ObjectType[Path]\n : Path extends `${infer LeftSide}.${infer RightSide}`\n ? LeftSide extends keyof ObjectType\n ? ResolveObjectPathType<ObjectType[LeftSide], RightSide, OrElse>\n : Path extends `${infer LeftSide}[${number}].${infer RightSide}`\n ? LeftSide extends keyof ObjectType\n ? ObjectType[LeftSide] extends Array<infer U>\n ? ResolveObjectPathType<U, RightSide, OrElse>\n : OrElse\n : OrElse\n : OrElse\n : Path extends `${infer LeftSide}[${number}]`\n ? LeftSide extends keyof ObjectType\n ? ObjectType[LeftSide] extends Array<infer U>\n ? U\n : OrElse\n : OrElse\n : OrElse;\n"],"names":[],"mappings":";;AAQgB,SAAA,GAAA,CACd,GACA,EAAA,GAAA,EACA,GACqC,EAAA;AACrC,EAAA,MAAM,KAAQ,GAAA,KAAA,CAAA,CAAA;AACd,EAAM,MAAA,IAAA,GAAO,gBAAgB,GAAG,CAAA,CAAA;AAChC,EAAA,IAAI,GAAW,GAAA,GAAA,CAAA;AACf,EAAA,KAAA,MAAW,KAAK,IAAM,EAAA;AACpB,IAAM,GAAA,GAAA,GAAA,GAAM,IAAI,CAAK,CAAA,GAAA,KAAA,CAAA;AAAA,GACvB;AACA,EAAO,OAAA,GAAA,KAAQ,QAAQ,GAAM,GAAA,GAAA,CAAA;AAC/B;;;;"}
|
package/lib/objects/set.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set.js","sources":["../../src/objects/set.ts"],"sourcesContent":["import { ObjectKey, ObjectPath
|
|
1
|
+
{"version":3,"file":"set.js","sources":["../../src/objects/set.ts"],"sourcesContent":["import type { ObjectKey, ObjectPath} from './parseObjectPath';\nimport { parseObjectPath } from './parseObjectPath';\n\n/**\n * Deep set\n *\n * {@link https://github.com/lukeed/dset dset}\n */\nexport function set<T extends object, V>(obj: T, key: ObjectKey | ObjectPath, val: V, merging = true) {\n const path = parseObjectPath(key);\n let i = 0;\n const len = path.length;\n let current: any = obj;\n let x, k;\n while (i < len) {\n k = path[i++];\n if (k === '__proto__' || k === 'constructor' || k === 'prototype') break;\n // noinspection PointlessArithmeticExpressionJS\n current = current[k] =\n i === len\n ? merging\n ? merge(current[k], val)\n : val\n : typeof (x = current[k]) === typeof path\n ? x\n : // @ts-expect-error hacky type check\n path[i] * 0 !== 0 || !!~('' + path[i]).indexOf('.') // eslint-disable-line\n ? {}\n : [];\n }\n}\n\nexport function merge(a: any, b: any) {\n let k;\n if (typeof a === 'object' && typeof b === 'object') {\n if (Array.isArray(a) && Array.isArray(b)) {\n for (k = 0; k < b.length; k++) {\n a[k] = merge(a[k], b[k]);\n }\n } else {\n for (k in b) {\n if (k === '__proto__' || k === 'constructor' || k === 'prototype') break;\n a[k] = merge(a[k], b[k]);\n }\n }\n return a;\n }\n return b;\n}\n"],"names":[],"mappings":";;AAQO,SAAS,GAAyB,CAAA,GAAA,EAAQ,GAA6B,EAAA,GAAA,EAAQ,UAAU,IAAM,EAAA;AACpG,EAAM,MAAA,IAAA,GAAO,gBAAgB,GAAG,CAAA,CAAA;AAChC,EAAA,IAAI,CAAI,GAAA,CAAA,CAAA;AACR,EAAA,MAAM,MAAM,IAAK,CAAA,MAAA,CAAA;AACjB,EAAA,IAAI,OAAe,GAAA,GAAA,CAAA;AACnB,EAAA,IAAI,CAAG,EAAA,CAAA,CAAA;AACP,EAAA,OAAO,IAAI,GAAK,EAAA;AACd,IAAA,CAAA,GAAI,IAAK,CAAA,CAAA,EAAA,CAAA,CAAA;AACT,IAAA,IAAI,CAAM,KAAA,WAAA,IAAe,CAAM,KAAA,aAAA,IAAiB,CAAM,KAAA,WAAA;AAAa,MAAA,MAAA;AAEnE,IAAA,OAAA,GAAU,OAAQ,CAAA,CAAA,CAAA,GAChB,CAAM,KAAA,GAAA,GACF,UACE,KAAM,CAAA,OAAA,CAAQ,CAAI,CAAA,EAAA,GAAG,CACrB,GAAA,GAAA,GACF,QAAQ,CAAA,GAAI,QAAQ,CAAQ,CAAA,CAAA,KAAA,OAAO,IACnC,GAAA,CAAA,GAEF,IAAK,CAAA,CAAA,CAAA,GAAK,CAAM,KAAA,CAAA,IAAK,CAAC,CAAC,CAAA,CAAE,EAAK,GAAA,IAAA,CAAK,IAAI,OAAQ,CAAA,GAAG,CAChD,GAAA,KACA,EAAC,CAAA;AAAA,GACT;AACF,CAAA;AAEgB,SAAA,KAAA,CAAM,GAAQ,CAAQ,EAAA;AACpC,EAAI,IAAA,CAAA,CAAA;AACJ,EAAA,IAAI,OAAO,CAAA,KAAM,QAAY,IAAA,OAAO,MAAM,QAAU,EAAA;AAClD,IAAA,IAAI,MAAM,OAAQ,CAAA,CAAC,KAAK,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAG,EAAA;AACxC,MAAA,KAAK,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,CAAE,QAAQ,CAAK,EAAA,EAAA;AAC7B,QAAA,CAAA,CAAE,CAAK,CAAA,GAAA,KAAA,CAAM,CAAE,CAAA,CAAA,CAAA,EAAI,EAAE,CAAE,CAAA,CAAA,CAAA;AAAA,OACzB;AAAA,KACK,MAAA;AACL,MAAA,KAAK,KAAK,CAAG,EAAA;AACX,QAAA,IAAI,CAAM,KAAA,WAAA,IAAe,CAAM,KAAA,aAAA,IAAiB,CAAM,KAAA,WAAA;AAAa,UAAA,MAAA;AACnE,QAAA,CAAA,CAAE,CAAK,CAAA,GAAA,KAAA,CAAM,CAAE,CAAA,CAAA,CAAA,EAAI,EAAE,CAAE,CAAA,CAAA,CAAA;AAAA,OACzB;AAAA,KACF;AACA,IAAO,OAAA,CAAA,CAAA;AAAA,GACT;AACA,EAAO,OAAA,CAAA,CAAA;AACT;;;;"}
|
|
@@ -1,30 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
function polyfillFetch(nodeFetch) {
|
|
2
2
|
if ("fetch" in globalThis) {
|
|
3
3
|
return false;
|
|
4
4
|
}
|
|
5
|
-
|
|
6
|
-
default: fetch,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
AbortError,
|
|
22
|
-
FetchError,
|
|
23
|
-
FormData,
|
|
24
|
-
Blob,
|
|
25
|
-
File
|
|
26
|
-
});
|
|
27
|
-
return true;
|
|
5
|
+
if (nodeFetch) {
|
|
6
|
+
const { default: fetch, Response, Headers, Request, AbortError, FetchError, FormData, Blob, File } = nodeFetch;
|
|
7
|
+
Object.assign(globalThis, {
|
|
8
|
+
fetch,
|
|
9
|
+
Response,
|
|
10
|
+
Headers,
|
|
11
|
+
Request,
|
|
12
|
+
AbortError,
|
|
13
|
+
FetchError,
|
|
14
|
+
FormData,
|
|
15
|
+
Blob,
|
|
16
|
+
File
|
|
17
|
+
});
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
return import('node-fetch').then((v) => polyfillFetch(v));
|
|
28
21
|
}
|
|
29
22
|
|
|
30
23
|
export { polyfillFetch };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polyfillFetch.js","sources":["../../src/server/polyfillFetch.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"polyfillFetch.js","sources":["../../src/server/polyfillFetch.ts"],"sourcesContent":["import type { MaybePromise } from '../asyncs/MaybePromise';\n\nexport function polyfillFetch(nodeFetch: typeof import('node-fetch')): boolean;\nexport function polyfillFetch(nodeFetch?: undefined): Promise<boolean>;\nexport function polyfillFetch(nodeFetch?: typeof import('node-fetch')): MaybePromise<boolean> {\n if ('fetch' in globalThis) {\n return false;\n }\n // sync mode\n if (nodeFetch) {\n const { default: fetch, Response, Headers, Request, AbortError, FetchError, FormData, Blob, File } = nodeFetch;\n Object.assign(globalThis, {\n fetch,\n Response,\n Headers,\n Request,\n AbortError,\n FetchError,\n FormData,\n Blob,\n File,\n });\n return true;\n }\n return import('node-fetch').then((v) => polyfillFetch(v));\n}\n"],"names":[],"mappings":"AAIO,SAAS,cAAc,SAAgE,EAAA;AAC5F,EAAA,IAAI,WAAW,UAAY,EAAA;AACzB,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,SAAW,EAAA;AACb,IAAM,MAAA,EAAE,OAAS,EAAA,KAAA,EAAO,QAAU,EAAA,OAAA,EAAS,OAAS,EAAA,UAAA,EAAY,UAAY,EAAA,QAAA,EAAU,IAAM,EAAA,IAAA,EAAS,GAAA,SAAA,CAAA;AACrG,IAAA,MAAA,CAAO,OAAO,UAAY,EAAA;AAAA,MACxB,KAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,KACD,CAAA,CAAA;AACD,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACA,EAAA,OAAO,OAAO,YAAc,CAAA,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA;AAC1D;;;;"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
+
import { isPlainObject } from './isPlainObject.js';
|
|
2
|
+
|
|
1
3
|
function isEmptyObject(o) {
|
|
2
|
-
|
|
3
|
-
return true;
|
|
4
|
-
}
|
|
5
|
-
return o.constructor === Object && Object.keys(o).length === 0;
|
|
4
|
+
return isPlainObject(o) && Object.keys(o).length === 0;
|
|
6
5
|
}
|
|
7
6
|
|
|
8
7
|
export { isEmptyObject };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isEmptyObject.js","sources":["../../src/validations/isEmptyObject.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"isEmptyObject.js","sources":["../../src/validations/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":[],"mappings":";;AAEO,SAAS,cAAc,CAAQ,EAAA;AACpC,EAAA,OAAO,cAAc,CAAC,CAAA,IAAK,OAAO,IAAK,CAAA,CAAC,EAAE,MAAW,KAAA,CAAA,CAAA;AACvD;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { classOf } from '../langs/classOf.js';
|
|
2
|
+
|
|
3
|
+
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
|
+
export { isPlainObject };
|
|
11
|
+
//# sourceMappingURL=isPlainObject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isPlainObject.js","sources":["../../src/validations/isPlainObject.ts"],"sourcesContent":["import { classOf } from '../langs/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":[],"mappings":";;AAIO,SAAS,cAAc,KAA0C,EAAA;AACtE,EAAI,IAAA,OAAA,CAAQ,KAAK,CAAA,KAAM,QAAU,EAAA;AAC/B,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAA,OAAO,MAAM,WAAgB,KAAA,MAAA,IAAU,OAAO,cAAe,CAAA,KAAK,MAAM,MAAO,CAAA,SAAA,CAAA;AACjF;;;;"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
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 void 0;
|
|
26
|
+
}
|
|
27
|
+
return Boolean(s);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { parseBoolean };
|
|
31
|
+
//# sourceMappingURL=parseBoolean.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseBoolean.js","sources":["../../src/validations/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): 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":[],"mappings":"AAEgB,SAAA,YAAA,CAAa,CAAsC,EAAA,MAAA,GAAS,KAA4B,EAAA;AACtG,EAAI,IAAA,OAAO,MAAM,SAAW,EAAA;AAC1B,IAAO,OAAA,CAAA,CAAA;AAAA,GACT;AACA,EAAI,IAAA,OAAO,MAAM,QAAU,EAAA;AACzB,IAAQ,QAAA,CAAA,CAAE,aAAe;AAAA,MACvB,KAAK,GAAA,CAAA;AAAA,MACL,KAAK,OAAA,CAAA;AAAA,MACL,KAAK,GAAA;AACH,QAAO,OAAA,KAAA,CAAA;AAAA,MACT,KAAK,GAAA,CAAA;AAAA,MACL,KAAK,GAAA,CAAA;AAAA,MACL,KAAK,MAAA;AACH,QAAO,OAAA,IAAA,CAAA;AAAA,KACX;AAAA,GACF,MAAA,IAAW,OAAO,CAAA,KAAM,QAAU,EAAA;AAChC,IAAA,QAAQ,CAAG;AAAA,MACT,KAAK,CAAA;AACH,QAAO,OAAA,KAAA,CAAA;AAAA,MACT,KAAK,CAAA;AACH,QAAO,OAAA,IAAA,CAAA;AAAA,KACX;AAAA,GACF;AACA,EAAA,IAAI,MAAQ,EAAA;AACV,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACT;AACA,EAAA,OAAO,QAAQ,CAAC,CAAA,CAAA;AAClB;;;;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
function parseTimestamp(raw) {
|
|
2
|
+
if (!raw) {
|
|
3
|
+
return void 0;
|
|
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;
|
|
13
|
+
}
|
|
14
|
+
return new Date(n);
|
|
15
|
+
} else if (typeof raw === "string") {
|
|
16
|
+
const date = new Date(raw);
|
|
17
|
+
if (!isNaN(+date)) {
|
|
18
|
+
return date;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
throw new Error(`parseTimestamp: invalid "${raw}"`);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { parseTimestamp };
|
|
25
|
+
//# sourceMappingURL=parseTimestamp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseTimestamp.js","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":[],"mappings":"AAAO,SAAS,eAAe,GAAgD,EAAA;AAC7E,EAAA,IAAI,CAAC,GAAK,EAAA;AACR,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACT;AACA,EAAA,IAAI,eAAe,IAAM,EAAA;AACvB,IAAO,OAAA,GAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,OAAO,GAAQ,KAAA,QAAA,IAAY,WAAY,CAAA,IAAA,CAAK,GAAG,CAAG,EAAA;AACpD,IAAI,IAAA,CAAA,GAAI,WAAW,GAAG,CAAA,CAAA;AACtB,IAAA,MAAM,MAAM,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA,CAAE,UAAW,CAAA,MAAA,CAAA;AAOrC,IAAA,IAAI,OAAO,EAAI,EAAA;AACb,MAAK,CAAA,IAAA,GAAA,CAAA;AAAA,KACP;AACA,IAAO,OAAA,IAAI,KAAK,CAAC,CAAA,CAAA;AAAA,GACnB,MAAA,IAAW,OAAO,GAAA,KAAQ,QAAU,EAAA;AAClC,IAAM,MAAA,IAAA,GAAO,IAAI,IAAA,CAAK,GAAG,CAAA,CAAA;AACzB,IAAA,IAAI,CAAC,KAAA,CAAM,CAAC,IAAI,CAAG,EAAA;AACjB,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,GACF;AACA,EAAM,MAAA,IAAI,KAAM,CAAA,CAAA,yBAAA,EAA4B,GAAM,CAAA,CAAA,CAAA,CAAA,CAAA;AACpD;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wener/utils",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.9",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Utils for daily use",
|
|
6
6
|
"repository": {
|
|
@@ -10,11 +10,7 @@
|
|
|
10
10
|
"homepage": "https://github.com/wenerme/wode#readme",
|
|
11
11
|
"author": "wener",
|
|
12
12
|
"license": "MIT",
|
|
13
|
-
"
|
|
14
|
-
"node": "16",
|
|
15
|
-
"npm": "8"
|
|
16
|
-
},
|
|
17
|
-
"main": "dist/cjs/index.js",
|
|
13
|
+
"main": "dist/cjs/index.cjs",
|
|
18
14
|
"module": "lib/index.js",
|
|
19
15
|
"exports": {
|
|
20
16
|
".": {
|
|
@@ -24,7 +20,7 @@
|
|
|
24
20
|
"system": {
|
|
25
21
|
"default": "./dist/system/index.js"
|
|
26
22
|
},
|
|
27
|
-
"require": "./dist/cjs/index.
|
|
23
|
+
"require": "./dist/cjs/index.cjs"
|
|
28
24
|
},
|
|
29
25
|
"./types": {
|
|
30
26
|
"types": "./types.d.ts"
|
|
@@ -36,7 +32,7 @@
|
|
|
36
32
|
"system": {
|
|
37
33
|
"default": "./dist/system/server.js"
|
|
38
34
|
},
|
|
39
|
-
"require": "./dist/cjs/server.
|
|
35
|
+
"require": "./dist/cjs/server.cjs"
|
|
40
36
|
},
|
|
41
37
|
"./src/*": "./src/*",
|
|
42
38
|
"./package.json": "./package.json"
|
|
@@ -61,9 +57,9 @@
|
|
|
61
57
|
"lodash"
|
|
62
58
|
],
|
|
63
59
|
"devDependencies": {
|
|
64
|
-
"@types/lodash": "^4.14.
|
|
65
|
-
"ava": "^
|
|
66
|
-
"lodash": "^4",
|
|
60
|
+
"@types/lodash": "^4.14.189",
|
|
61
|
+
"ava": "^5.1.0",
|
|
62
|
+
"lodash": "^4.17.21",
|
|
67
63
|
"tsd": "^0.24.1"
|
|
68
64
|
},
|
|
69
65
|
"publishConfig": {
|
|
@@ -77,6 +73,7 @@
|
|
|
77
73
|
},
|
|
78
74
|
"nodeArguments": [
|
|
79
75
|
"--conditions=typescript",
|
|
76
|
+
"--experimental-import-meta-resolve",
|
|
80
77
|
"--require=@wener/wode/suppress-experimental.cjs",
|
|
81
78
|
"--loader=tsx"
|
|
82
79
|
]
|
|
@@ -17,7 +17,7 @@ test('basic', async (t) => {
|
|
|
17
17
|
});
|
|
18
18
|
|
|
19
19
|
test('manual resolve skip exec', async (t) => {
|
|
20
|
-
const promise = createLazyPromise(() => {
|
|
20
|
+
const promise = createLazyPromise<number>(() => {
|
|
21
21
|
t.fail();
|
|
22
22
|
});
|
|
23
23
|
promise.resolve(-1);
|
|
@@ -37,3 +37,18 @@ test('exec', async (t) => {
|
|
|
37
37
|
promise.resolve(20);
|
|
38
38
|
t.is(await promise, 10);
|
|
39
39
|
});
|
|
40
|
+
|
|
41
|
+
test('exec auto', async (t) => {
|
|
42
|
+
let r = 0;
|
|
43
|
+
const promise = createLazyPromise(() => {
|
|
44
|
+
r++;
|
|
45
|
+
return 10;
|
|
46
|
+
});
|
|
47
|
+
await sleep(10);
|
|
48
|
+
t.is(r, 0);
|
|
49
|
+
void promise.then(() => undefined);
|
|
50
|
+
t.is(await promise, 10);
|
|
51
|
+
t.is(r, 1);
|
|
52
|
+
t.is(await promise, 10);
|
|
53
|
+
t.is(r, 1);
|
|
54
|
+
});
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import type { MaybePromise } from './MaybePromise';
|
|
2
|
+
import { isPromise } from './isPromise';
|
|
3
|
+
|
|
1
4
|
export type LazyPromise<T> = Promise<T> & {
|
|
2
5
|
reject(reason?: any): void;
|
|
3
6
|
resolve(v?: T | PromiseLike<T>): void;
|
|
@@ -8,7 +11,9 @@ export type LazyPromise<T> = Promise<T> & {
|
|
|
8
11
|
* if you pass a function to it, it will be executed when the promise try to resolve.
|
|
9
12
|
*/
|
|
10
13
|
export function createLazyPromise<T = any>(
|
|
11
|
-
executor?:
|
|
14
|
+
executor?:
|
|
15
|
+
| ((resolve: LazyPromise<T>['resolve'], reject: LazyPromise<T>['reject']) => void)
|
|
16
|
+
| ((resolve: LazyPromise<T>['resolve'], reject: LazyPromise<T>['reject']) => MaybePromise<T>),
|
|
12
17
|
): LazyPromise<T> {
|
|
13
18
|
const holder = {
|
|
14
19
|
resolve(_: any): void {
|
|
@@ -43,7 +48,18 @@ export function createLazyPromise<T = any>(
|
|
|
43
48
|
future.then = (...args) => {
|
|
44
49
|
if (shouldExec) {
|
|
45
50
|
shouldExec = false;
|
|
46
|
-
|
|
51
|
+
try {
|
|
52
|
+
// kind of bad
|
|
53
|
+
const result = executor(holder.resolve, holder.reject);
|
|
54
|
+
// ensure resolve/reject is called
|
|
55
|
+
if (isPromise(result)) {
|
|
56
|
+
result.then(holder.resolve, holder.reject);
|
|
57
|
+
} else if (result !== undefined) {
|
|
58
|
+
holder.resolve(result);
|
|
59
|
+
}
|
|
60
|
+
} catch (e) {
|
|
61
|
+
holder.reject(e);
|
|
62
|
+
}
|
|
47
63
|
}
|
|
48
64
|
return then(...args);
|
|
49
65
|
};
|
package/src/browsers/copy.ts
CHANGED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
|
|
2
|
+
let nodeCrypto: Awaited<typeof import('node:crypto')>;
|
|
3
|
+
// globalThis.process?.release?.name
|
|
4
|
+
|
|
5
|
+
// typedoc error
|
|
6
|
+
// if (!(process as any).browser) {
|
|
7
|
+
// try {
|
|
8
|
+
// if (typeof require === 'undefined') {
|
|
9
|
+
// void import('node:crypto').then((v) => (nodeCrypto = v.default));
|
|
10
|
+
// } else {
|
|
11
|
+
// nodeCrypto = require('node:crypto');
|
|
12
|
+
// }
|
|
13
|
+
// } catch (e) {}
|
|
14
|
+
// }
|
|
15
|
+
|
|
16
|
+
export let getRandomValues: <T extends Exclude<NodeJS.TypedArray, Float32Array | Float64Array>>(typedArray: T) => T =
|
|
17
|
+
globalThis.crypto?.getRandomValues?.bind(globalThis.crypto) ||
|
|
18
|
+
(globalThis as any).msCrypto?.getRandomValues?.bind((globalThis as any).msCrypto) ||
|
|
19
|
+
_getRandomValues;
|
|
20
|
+
|
|
21
|
+
function _getRandomValues<T extends Exclude<NodeJS.TypedArray, Float32Array | Float64Array>>(buf: T) {
|
|
22
|
+
if (nodeCrypto?.webcrypto?.getRandomValues) {
|
|
23
|
+
getRandomValues = nodeCrypto?.webcrypto?.getRandomValues?.bind(nodeCrypto?.webcrypto);
|
|
24
|
+
return nodeCrypto.webcrypto.getRandomValues(buf);
|
|
25
|
+
}
|
|
26
|
+
if (nodeCrypto?.randomBytes) {
|
|
27
|
+
if (!(buf instanceof Uint8Array)) {
|
|
28
|
+
throw new TypeError('expected Uint8Array');
|
|
29
|
+
}
|
|
30
|
+
if (buf.length > 65536) {
|
|
31
|
+
const e: any = new Error();
|
|
32
|
+
e.code = 22;
|
|
33
|
+
e.message = `Failed to execute 'getRandomValues' on 'Crypto': The ArrayBufferView's byte length (${buf.length}) exceeds the number of bytes of entropy available via this API (65536).`;
|
|
34
|
+
e.name = 'QuotaExceededError';
|
|
35
|
+
throw e;
|
|
36
|
+
}
|
|
37
|
+
const bytes = nodeCrypto.randomBytes(buf.length);
|
|
38
|
+
buf.set(bytes);
|
|
39
|
+
return buf;
|
|
40
|
+
}
|
|
41
|
+
throw new Error('No secure random number generator available.');
|
|
42
|
+
}
|
package/src/crypto/randomUUID.ts
CHANGED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import { createULID, isULID, parseULID } from './ulid';
|
|
3
|
+
|
|
4
|
+
test('ulid', (t) => {
|
|
5
|
+
// monotonic
|
|
6
|
+
{
|
|
7
|
+
let lastTime = 0;
|
|
8
|
+
const ulid = createULID({
|
|
9
|
+
now: () => {
|
|
10
|
+
lastTime ||= Date.now();
|
|
11
|
+
return lastTime;
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
const ulid1 = ulid();
|
|
16
|
+
t.is(parseULID(ulid1).timestamp, lastTime);
|
|
17
|
+
t.true(isULID(ulid1), ulid1);
|
|
18
|
+
|
|
19
|
+
const ulid2 = ulid();
|
|
20
|
+
t.true(ulid1 < ulid2);
|
|
21
|
+
t.true(isULID(ulid2), ulid2);
|
|
22
|
+
t.is(parseULID(ulid2).timestamp, lastTime);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
{
|
|
26
|
+
const next = createULID();
|
|
27
|
+
t.true(isULID(next().toLowerCase()));
|
|
28
|
+
t.true(isULID('ttttttttttrrrrrrrrrrrrrrrr'));
|
|
29
|
+
}
|
|
30
|
+
});
|