@wener/utils 1.1.42 → 1.1.44
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.map +1 -1
- package/lib/arrays/arrayFromAsync.js.map +1 -1
- package/lib/asyncs/AsyncInterval.js.map +1 -1
- package/lib/asyncs/MaybePromise.js.map +1 -1
- package/lib/asyncs/createAsyncIterator.js.map +1 -1
- package/lib/asyncs/createLazyPromise.js.map +1 -1
- package/lib/asyncs/firstOfAsyncIterator.js.map +1 -1
- package/lib/asyncs/generatorOfStream.js.map +1 -1
- package/lib/asyncs/isIterator.js.map +1 -1
- package/lib/asyncs/isPromise.js.map +1 -1
- package/lib/asyncs/isThenable.js.map +1 -1
- package/lib/asyncs/nextOfAsyncIterator.js.map +1 -1
- package/lib/asyncs/promiseOfCallback.js.map +1 -1
- package/lib/asyncs/sleep.js.map +1 -1
- package/lib/asyncs/timeout.js.map +1 -1
- package/lib/browsers/copy.js.map +1 -1
- package/lib/browsers/download.js.map +1 -1
- package/lib/browsers/getFileFromDataTransfer.js.map +1 -1
- package/lib/browsers/loaders.js.map +1 -1
- package/lib/cn/division/DivisionCode.js.map +1 -1
- package/lib/cn/division/binarySearch.js.map +1 -1
- package/lib/cn/id/Mod11Checksum.js.map +1 -1
- package/lib/cn/id/ResidentIdNumber.js.map +1 -1
- package/lib/cn/id/types.js.map +1 -1
- package/lib/cn/index.js.map +1 -1
- package/lib/cn/parseChineseNumber.js.map +1 -1
- package/lib/cn/pinyin/cartesianProduct.js.map +1 -1
- package/lib/cn/pinyin/loader.js.map +1 -1
- package/lib/cn/pinyin/preload.js.map +1 -1
- package/lib/cn/pinyin/toPinyinPure.js.map +1 -1
- package/lib/cn/pinyin/transform.js.map +1 -1
- package/lib/cn/uscc/Mod31Checksum.js.map +1 -1
- package/lib/cn/uscc/USCC.js.map +1 -1
- package/lib/cn/uscc/isUSCC.js.map +1 -1
- package/lib/crypto/base.js.map +1 -1
- package/lib/crypto/getNodeCrypto.js.map +1 -1
- package/lib/crypto/getRandomValues.js.map +1 -1
- package/lib/crypto/hashing.js.map +1 -1
- package/lib/crypto/md5.bench.js.map +1 -1
- package/lib/crypto/md5.d.js.map +1 -1
- package/lib/crypto/md5.js.map +1 -1
- package/lib/crypto/pem/pem.js.map +1 -1
- package/lib/crypto/randomUUID.js.map +1 -1
- package/lib/crypto/randomUUIDv7.js.map +1 -1
- package/lib/crypto/ulid.js.map +1 -1
- package/lib/errors/Errors.js.map +1 -1
- package/lib/fetch/HttpStatus.js.map +1 -1
- package/lib/fetch/createFetchWith.js.map +1 -1
- package/lib/fetch/createFetchWithLogging.js.map +1 -1
- package/lib/fetch/createFetchWithRetry.js.map +1 -1
- package/lib/fetch/dumpRequest.js.map +1 -1
- package/lib/fetch/dumpResponse.js.map +1 -1
- package/lib/fetch/index.js.map +1 -1
- package/lib/fetch/types.js.map +1 -1
- package/lib/i18n/createTranslate.js.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/io/AbstractEncoding.js.map +1 -1
- package/lib/io/ArrayBuffer.test-d.js.map +1 -1
- package/lib/io/ArrayBuffers.js +20 -1
- package/lib/io/ArrayBuffers.js.map +1 -1
- package/lib/io/Buffer.js.map +1 -1
- package/lib/io/ByteArray.js +327 -0
- package/lib/io/ByteArray.js.map +1 -0
- package/lib/io/base64.js.map +1 -1
- package/lib/io/isBuffer.js.map +1 -1
- package/lib/io/isTransferable.js.map +1 -1
- package/lib/io/parseDataUri.js.map +1 -1
- package/lib/langs/MaybeFunction.js.map +1 -1
- package/lib/langs/classOf.js.map +1 -1
- package/lib/langs/deepEqual.js.map +1 -1
- package/lib/langs/deepFreeze.js.map +1 -1
- package/lib/langs/isClass.js.map +1 -1
- package/lib/langs/isDefined.js.map +1 -1
- package/lib/langs/isEmptyObject.js.map +1 -1
- package/lib/langs/isFunction.js.map +1 -1
- package/lib/langs/isPlainObject.js.map +1 -1
- package/lib/langs/memoize.js.map +1 -1
- package/lib/langs/mixin.js.map +1 -1
- package/lib/langs/parseBoolean.js.map +1 -1
- package/lib/langs/shallowClone.js.map +1 -1
- package/lib/langs/shallowEqual.js.map +1 -1
- package/lib/libs/ms.js.map +1 -1
- package/lib/logging/Logger.js.map +1 -1
- package/lib/logging/createChildLogger.js.map +1 -1
- package/lib/logging/createLogger.js.map +1 -1
- package/lib/logging/createNoopLogger.js.map +1 -1
- package/lib/logging/slog.js.map +1 -1
- package/lib/maths/clamp.js.map +1 -1
- package/lib/maths/random.js.map +1 -1
- package/lib/modules/isModule.js.map +1 -1
- package/lib/modules/parseModuleId.js.map +1 -1
- package/lib/objects/computeIfAbsent.js.map +1 -1
- package/lib/objects/get.js.map +1 -1
- package/lib/objects/get.test-d.js.map +1 -1
- package/lib/objects/merge/index.js.map +1 -1
- package/lib/objects/merge/isMergeableObject.js.map +1 -1
- package/lib/objects/merge/merge.js.map +1 -1
- package/lib/objects/parseObjectPath.js.map +1 -1
- package/lib/objects/set.js.map +1 -1
- package/lib/runtime/AsyncCloser.js.map +1 -1
- package/lib/runtime/Closer.js.map +1 -1
- package/lib/runtime/getGlobalThis.js.map +1 -1
- package/lib/runtime/structuredClone.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/common/encoder.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/common/formatter.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/common/index.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/common/jsdoc.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/expression/compiler.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/expression/errors.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/expression/evaluator.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/expression/expression.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/expression/index.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/index.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/model/index.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-arktype.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-expression.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-grpc.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-io-ts.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-javascript.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-json-schema.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-typebox.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-typescript.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-valibot.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-value.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-yrel.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-yup.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/model/model-to-zod.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/model/model.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/typescript/index.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/typescript/typescript-to-model.js.map +1 -1
- package/lib/schema/typebox/gen/codegen/typescript/typescript-to-typebox.js.map +1 -1
- package/lib/schema/typebox/gen/index.js.map +1 -1
- package/lib/schema/typebox/index.js.map +1 -1
- package/lib/schema/typebox/typebox.js.map +1 -1
- package/lib/scripts/getGenerateContext.js.map +1 -1
- package/lib/server/crypto/md5.js.map +1 -1
- package/lib/server/fetch/createFetchWithProxy.js.map +1 -1
- package/lib/server/fetch/createFetchWithProxyByNodeFetch.js.map +1 -1
- package/lib/server/fetch/createFetchWithProxyByUndici.js.map +1 -1
- package/lib/server/getPackageDir.js.map +1 -1
- package/lib/server/index.js.map +1 -1
- package/lib/server/jsdom.js.map +1 -1
- package/lib/server/node-fetch.js.map +1 -1
- package/lib/server/polyfill/polyfillBrowser.js.map +1 -1
- package/lib/server/polyfill/polyfillCrypto.js.map +1 -1
- package/lib/server/polyfill/polyfillFetch.js.map +1 -1
- package/lib/server/polyfill/polyfillJsDom.js.map +1 -1
- package/lib/server/polyfill/polyfillWebSocket.js.map +1 -1
- package/lib/server/ws.js.map +1 -1
- package/lib/strings/camelCase.js.map +1 -1
- package/lib/strings/formatBytes.js.map +1 -1
- package/lib/strings/renderTemplate.js.map +1 -1
- package/lib/typedoc.js.map +1 -1
- package/lib/types.d.js.map +1 -1
- package/lib/validations/asserts.js.map +1 -1
- package/lib/validations/isUUID.js.map +1 -1
- package/lib/validations/parseTimestamp.js.map +1 -1
- package/package.json +5 -5
- package/src/index.ts +1 -0
- package/src/io/ArrayBuffers.ts +32 -3
- package/src/io/ByteArray.ts +403 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/strings/renderTemplate.ts"],"sourcesContent":["import { get } from '../objects/get';\n\n/**\n * render template like js template string\n *\n * @example\n * renderTemplate('My name is ${name}',{name:'wener'})\n * // 'My name is wener'\n *\n * @param match `js` for `${name}`, common for `{{name}}`\n */\nexport function renderTemplate(\n template: string,\n data: ((v: string) => any) | object | undefined,\n match: 'js' | 'common' | RegExp = 'js',\n) {\n let getter: Function;\n if (!data) {\n // todo warning in dev\n getter = () => '';\n } else if (typeof data === 'function') {\n getter = data;\n } else {\n getter = (v: string) => get(data, v);\n }\n if (typeof match === 'string') {\n match = Matches[match] || Matches.js;\n }\n return template.replace(match, (_, g) => {\n return getter(g.trim());\n });\n}\n\nconst Matches: Record<string, RegExp> = {\n js: /\\${(.*?)}/g,\n common: /{{(.*?)}}/g,\n};\n"],"names":["get","renderTemplate","template","data","match","getter","v","Matches","js","replace","_","g","trim","common"],"mappings":"AAAA,SAASA,GAAG,QAAQ,iBAAiB;AAErC;;;;;;;;CAQC,GACD,OAAO,SAASC,eACdC,QAAgB,EAChBC,IAA+C,EAC/CC,QAAkC,IAAI;IAEtC,IAAIC;IACJ,IAAI,CAACF,MAAM;QACT,sBAAsB;QACtBE,SAAS,IAAM;IACjB,OAAO,IAAI,OAAOF,SAAS,YAAY;QACrCE,SAASF;IACX,OAAO;QACLE,SAAS,CAACC,IAAcN,IAAIG,MAAMG;IACpC;IACA,IAAI,OAAOF,UAAU,UAAU;QAC7BA,QAAQG,OAAO,CAACH,MAAM,IAAIG,QAAQC,EAAE;IACtC;IACA,OAAON,SAASO,OAAO,CAACL,OAAO,CAACM,GAAGC;QACjC,OAAON,OAAOM,EAAEC,IAAI;IACtB;AACF;AAEA,MAAML,UAAkC;IACtCC,IAAI;IACJK,QAAQ;AACV"}
|
|
1
|
+
{"version":3,"sources":["../../src/strings/renderTemplate.ts"],"sourcesContent":["import { get } from '../objects/get';\n\n/**\n * render template like js template string\n *\n * @example\n * renderTemplate('My name is ${name}',{name:'wener'})\n * // 'My name is wener'\n *\n * @param match `js` for `${name}`, common for `{{name}}`\n */\nexport function renderTemplate(\n template: string,\n data: ((v: string) => any) | object | undefined,\n match: 'js' | 'common' | RegExp = 'js',\n) {\n let getter: Function;\n if (!data) {\n // todo warning in dev\n getter = () => '';\n } else if (typeof data === 'function') {\n getter = data;\n } else {\n getter = (v: string) => get(data, v);\n }\n if (typeof match === 'string') {\n match = Matches[match] || Matches.js;\n }\n return template.replace(match, (_, g) => {\n return getter(g.trim());\n });\n}\n\nconst Matches: Record<string, RegExp> = {\n js: /\\${(.*?)}/g,\n common: /{{(.*?)}}/g,\n};\n"],"names":["get","renderTemplate","template","data","match","getter","v","Matches","js","replace","_","g","trim","common"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,GAAG,QAAQ,iBAAiB;AAErC;;;;;;;;CAQC,GACD,OAAO,SAASC,eACdC,QAAgB,EAChBC,IAA+C,EAC/CC,QAAkC,IAAI;IAEtC,IAAIC;IACJ,IAAI,CAACF,MAAM;QACT,sBAAsB;QACtBE,SAAS,IAAM;IACjB,OAAO,IAAI,OAAOF,SAAS,YAAY;QACrCE,SAASF;IACX,OAAO;QACLE,SAAS,CAACC,IAAcN,IAAIG,MAAMG;IACpC;IACA,IAAI,OAAOF,UAAU,UAAU;QAC7BA,QAAQG,OAAO,CAACH,MAAM,IAAIG,QAAQC,EAAE;IACtC;IACA,OAAON,SAASO,OAAO,CAACL,OAAO,CAACM,GAAGC;QACjC,OAAON,OAAOM,EAAEC,IAAI;IACtB;AACF;AAEA,MAAML,UAAkC;IACtCC,IAAI;IACJK,QAAQ;AACV"}
|
package/lib/typedoc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/typedoc.ts"],"sourcesContent":["export * from './index';\n// fixme md5 conflict\n// export * from './server';\n"],"names":[],"mappings":"AAAA,cAAc,UAAU,CACxB,qBAAqB;CACrB,4BAA4B"}
|
|
1
|
+
{"version":3,"sources":["../src/typedoc.ts"],"sourcesContent":["export * from './index';\n// fixme md5 conflict\n// export * from './server';\n"],"names":[],"rangeMappings":";","mappings":"AAAA,cAAc,UAAU,CACxB,qBAAqB;CACrB,4BAA4B"}
|
package/lib/types.d.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.d.ts"],"sourcesContent":["declare var __DEV__: boolean;\n\nnamespace NodeJS {\n interface Process {\n // webpack check\n readonly browser?: boolean;\n }\n interface ProcessEnv {\n readonly NODE_ENV: 'development' | 'production' | 'test';\n }\n}\n\nexport type AbstractConstructor<T = {}> = abstract new (...args: any[]) => T;\nexport type Constructor<T = {}> = new (...args: any[]) => T;\nexport type Optional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nexport type PartialRequired<T, K extends keyof T> = Partial<Omit<T, K>> & Required<Pick<T, K>>;\n\n/*\nhttps://github.com/total-typescript/ts-reset/blob/main/src/entrypoints/filter-boolean.d.ts\nhttps://github.com/sindresorhus/type-fest\n */\n"],"names":[],"mappings":"AAeA,WAA+F,CAE/F;;;CAGC"}
|
|
1
|
+
{"version":3,"sources":["../src/types.d.ts"],"sourcesContent":["declare var __DEV__: boolean;\n\nnamespace NodeJS {\n interface Process {\n // webpack check\n readonly browser?: boolean;\n }\n interface ProcessEnv {\n readonly NODE_ENV: 'development' | 'production' | 'test';\n }\n}\n\nexport type AbstractConstructor<T = {}> = abstract new (...args: any[]) => T;\nexport type Constructor<T = {}> = new (...args: any[]) => T;\nexport type Optional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nexport type PartialRequired<T, K extends keyof T> = Partial<Omit<T, K>> & Required<Pick<T, K>>;\n\n/*\nhttps://github.com/total-typescript/ts-reset/blob/main/src/entrypoints/filter-boolean.d.ts\nhttps://github.com/sindresorhus/type-fest\n */\n"],"names":[],"rangeMappings":";;;","mappings":"AAeA,WAA+F,CAE/F;;;CAGC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/validations/asserts.ts"],"sourcesContent":["export function assert(condition: any, msg?: string): asserts condition {\n // if (!condition) {\n // throw new AssertionError(msg);\n // }\n console.assert(!condition, msg);\n}\n\nexport function assertIsDefined<T>(val: T): asserts val is NonNullable<T> {\n // if (val === undefined || val === null) {\n // throw new AssertionError(`Expected 'val' to be defined, but received ${val}`);\n // }\n console.assert(val === undefined || val === null, 'Expected defined');\n}\n"],"names":["assert","condition","msg","console","assertIsDefined","val","undefined"],"mappings":"AAAA,OAAO,SAASA,OAAOC,SAAc,EAAEC,GAAY;IACjD,oBAAoB;IACpB,mCAAmC;IACnC,IAAI;IACJC,QAAQH,MAAM,CAAC,CAACC,WAAWC;AAC7B;AAEA,OAAO,SAASE,gBAAmBC,GAAM;IACvC,2CAA2C;IAC3C,mFAAmF;IACnF,IAAI;IACJF,QAAQH,MAAM,CAACK,QAAQC,aAAaD,QAAQ,MAAM;AACpD"}
|
|
1
|
+
{"version":3,"sources":["../../src/validations/asserts.ts"],"sourcesContent":["export function assert(condition: any, msg?: string): asserts condition {\n // if (!condition) {\n // throw new AssertionError(msg);\n // }\n console.assert(!condition, msg);\n}\n\nexport function assertIsDefined<T>(val: T): asserts val is NonNullable<T> {\n // if (val === undefined || val === null) {\n // throw new AssertionError(`Expected 'val' to be defined, but received ${val}`);\n // }\n console.assert(val === undefined || val === null, 'Expected defined');\n}\n"],"names":["assert","condition","msg","console","assertIsDefined","val","undefined"],"rangeMappings":";;;;;;;;;;;","mappings":"AAAA,OAAO,SAASA,OAAOC,SAAc,EAAEC,GAAY;IACjD,oBAAoB;IACpB,mCAAmC;IACnC,IAAI;IACJC,QAAQH,MAAM,CAAC,CAACC,WAAWC;AAC7B;AAEA,OAAO,SAASE,gBAAmBC,GAAM;IACvC,2CAA2C;IAC3C,mFAAmF;IACnF,IAAI;IACJF,QAAQH,MAAM,CAACK,QAAQC,aAAaD,QAAQ,MAAM;AACpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/validations/isUUID.ts"],"sourcesContent":["export function isUUID(str: string | undefined | null) {\n return Boolean(str) && /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(String(str));\n}\n"],"names":["isUUID","str","Boolean","test","String"],"mappings":"AAAA,OAAO,SAASA,OAAOC,GAA8B;IACnD,OAAOC,QAAQD,QAAQ,yEAAyEE,IAAI,CAACC,OAAOH;AAC9G"}
|
|
1
|
+
{"version":3,"sources":["../../src/validations/isUUID.ts"],"sourcesContent":["export function isUUID(str: string | undefined | null) {\n return Boolean(str) && /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(String(str));\n}\n"],"names":["isUUID","str","Boolean","test","String"],"rangeMappings":";;","mappings":"AAAA,OAAO,SAASA,OAAOC,GAA8B;IACnD,OAAOC,QAAQD,QAAQ,yEAAyEE,IAAI,CAACC,OAAOH;AAC9G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/validations/parseTimestamp.ts"],"sourcesContent":["export function parseTimestamp(raw?: string | number | Date): Date | undefined {\n if (!raw) {\n return undefined;\n }\n if (raw instanceof Date) {\n return raw;\n }\n\n if (typeof raw === 'string' && /^[0-9.]+$/.test(raw)) {\n let n = parseFloat(raw);\n const len = Math.floor(n).toString().length;\n /*\n 最常见的是 10 位和 13 位\n 9999999999 - 10*9 - 1970-04-26\n 99999999999 - 11*9 - 1973\n 999999999999 - 12*9 - 2001\n */\n if (len <= 11) {\n n *= 1000;\n }\n return new Date(n);\n } else if (typeof raw === 'string') {\n const date = new Date(raw);\n if (!isNaN(+date)) {\n return date;\n }\n }\n throw new Error(`parseTimestamp: invalid \"${raw}\"`);\n}\n"],"names":["parseTimestamp","raw","undefined","Date","test","n","parseFloat","len","Math","floor","toString","length","date","isNaN","Error"],"mappings":"AAAA,OAAO,SAASA,eAAeC,GAA4B;IACzD,IAAI,CAACA,KAAK;QACR,OAAOC;IACT;IACA,IAAID,eAAeE,MAAM;QACvB,OAAOF;IACT;IAEA,IAAI,OAAOA,QAAQ,YAAY,YAAYG,IAAI,CAACH,MAAM;QACpD,IAAII,IAAIC,WAAWL;QACnB,MAAMM,MAAMC,KAAKC,KAAK,CAACJ,GAAGK,QAAQ,GAAGC,MAAM;QAC3C;;;;;KAKC,GACD,IAAIJ,OAAO,IAAI;YACbF,KAAK;QACP;QACA,OAAO,IAAIF,KAAKE;IAClB,OAAO,IAAI,OAAOJ,QAAQ,UAAU;QAClC,MAAMW,OAAO,IAAIT,KAAKF;QACtB,IAAI,CAACY,MAAM,CAACD,OAAO;YACjB,OAAOA;QACT;IACF;IACA,MAAM,IAAIE,MAAM,CAAC,yBAAyB,EAAEb,IAAI,CAAC,CAAC;AACpD"}
|
|
1
|
+
{"version":3,"sources":["../../src/validations/parseTimestamp.ts"],"sourcesContent":["export function parseTimestamp(raw?: string | number | Date): Date | undefined {\n if (!raw) {\n return undefined;\n }\n if (raw instanceof Date) {\n return raw;\n }\n\n if (typeof raw === 'string' && /^[0-9.]+$/.test(raw)) {\n let n = parseFloat(raw);\n const len = Math.floor(n).toString().length;\n /*\n 最常见的是 10 位和 13 位\n 9999999999 - 10*9 - 1970-04-26\n 99999999999 - 11*9 - 1973\n 999999999999 - 12*9 - 2001\n */\n if (len <= 11) {\n n *= 1000;\n }\n return new Date(n);\n } else if (typeof raw === 'string') {\n const date = new Date(raw);\n if (!isNaN(+date)) {\n return date;\n }\n }\n throw new Error(`parseTimestamp: invalid \"${raw}\"`);\n}\n"],"names":["parseTimestamp","raw","undefined","Date","test","n","parseFloat","len","Math","floor","toString","length","date","isNaN","Error"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,OAAO,SAASA,eAAeC,GAA4B;IACzD,IAAI,CAACA,KAAK;QACR,OAAOC;IACT;IACA,IAAID,eAAeE,MAAM;QACvB,OAAOF;IACT;IAEA,IAAI,OAAOA,QAAQ,YAAY,YAAYG,IAAI,CAACH,MAAM;QACpD,IAAII,IAAIC,WAAWL;QACnB,MAAMM,MAAMC,KAAKC,KAAK,CAACJ,GAAGK,QAAQ,GAAGC,MAAM;QAC3C;;;;;KAKC,GACD,IAAIJ,OAAO,IAAI;YACbF,KAAK;QACP;QACA,OAAO,IAAIF,KAAKE;IAClB,OAAO,IAAI,OAAOJ,QAAQ,UAAU;QAClC,MAAMW,OAAO,IAAIT,KAAKF;QACtB,IAAI,CAACY,MAAM,CAACD,OAAO;YACjB,OAAOA;QACT;IACF;IACA,MAAM,IAAIE,MAAM,CAAC,yBAAyB,EAAEb,IAAI,CAAC,CAAC;AACpD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wener/utils",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.44",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Utils for daily use",
|
|
6
6
|
"repository": {
|
|
@@ -78,15 +78,15 @@
|
|
|
78
78
|
}
|
|
79
79
|
},
|
|
80
80
|
"devDependencies": {
|
|
81
|
-
"@sinclair/typebox": "^0.32.
|
|
81
|
+
"@sinclair/typebox": "^0.32.24",
|
|
82
82
|
"@types/lodash": "^4.17.0",
|
|
83
83
|
"@types/ws": "^8.5.10",
|
|
84
|
-
"@wener/utils": "link
|
|
84
|
+
"@wener/utils": "link:",
|
|
85
85
|
"https-proxy-agent": "^7.0.4",
|
|
86
86
|
"lodash": "^4.17.21",
|
|
87
87
|
"node-fetch": "^3.3.2",
|
|
88
|
-
"undici": "^6.
|
|
89
|
-
"zod": "^3.
|
|
88
|
+
"undici": "^6.14.1",
|
|
89
|
+
"zod": "^3.23.4"
|
|
90
90
|
},
|
|
91
91
|
"publishConfig": {
|
|
92
92
|
"registry": "https://registry.npmjs.org",
|
package/src/index.ts
CHANGED
|
@@ -74,6 +74,7 @@ export { createTranslate } from './i18n/createTranslate';
|
|
|
74
74
|
export { isBuffer } from './io/isBuffer';
|
|
75
75
|
export { isTransferable } from './io/isTransferable';
|
|
76
76
|
export { ArrayBuffers } from './io/ArrayBuffers';
|
|
77
|
+
export { ByteArray } from './io/ByteArray';
|
|
77
78
|
export { Buffer } from './io/Buffer';
|
|
78
79
|
export { parseDataUri, type ParsedDataUri } from './io/parseDataUri';
|
|
79
80
|
export type { AbstractEncoding } from './io/AbstractEncoding';
|
package/src/io/ArrayBuffers.ts
CHANGED
|
@@ -71,6 +71,8 @@ export interface ArrayBuffers {
|
|
|
71
71
|
toHex(v: BufferSource): string;
|
|
72
72
|
|
|
73
73
|
resize(v: ArrayBuffer, newByteLength: number): ArrayBuffer;
|
|
74
|
+
|
|
75
|
+
// truncate(v: ArrayBufferLike, len?: number): ArrayBufferLike;
|
|
74
76
|
}
|
|
75
77
|
|
|
76
78
|
type ToStringEncoding =
|
|
@@ -155,8 +157,12 @@ export class ArrayBuffers {
|
|
|
155
157
|
return this.toUint8Array(ArrayBuffers.from(v, 'hex'));
|
|
156
158
|
};
|
|
157
159
|
|
|
158
|
-
static resize = (v:
|
|
159
|
-
if (
|
|
160
|
+
static resize = (v: ArrayBufferLike, newByteLength?: number) => {
|
|
161
|
+
if (newByteLength === undefined || newByteLength === null) {
|
|
162
|
+
return v;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if ('resize' in v && (v as any).resizable) {
|
|
160
166
|
(v as any).resize(newByteLength);
|
|
161
167
|
return v;
|
|
162
168
|
}
|
|
@@ -339,6 +345,23 @@ export class ArrayBuffers {
|
|
|
339
345
|
}
|
|
340
346
|
};
|
|
341
347
|
|
|
348
|
+
// static truncate = (a: ArrayBufferLike, len?: number) => {
|
|
349
|
+
// if (len === 0) {
|
|
350
|
+
// return new ArrayBuffer(0);
|
|
351
|
+
// }
|
|
352
|
+
// if (!len) {
|
|
353
|
+
// return a;
|
|
354
|
+
// }
|
|
355
|
+
// if (a.byteLength > len) {
|
|
356
|
+
// return a.slice(0, len);
|
|
357
|
+
// } else if (a.byteLength < len) {
|
|
358
|
+
// let b = new Uint8Array(len);
|
|
359
|
+
// b.set(new Uint8Array(a));
|
|
360
|
+
// return b;
|
|
361
|
+
// }
|
|
362
|
+
// return a;
|
|
363
|
+
// };
|
|
364
|
+
|
|
342
365
|
static concat = (buffers: Array<BufferSource>, result?: ArrayBuffer, offset = 0) => {
|
|
343
366
|
// https://stackoverflow.com/questions/10786128/appending-arraybuffers
|
|
344
367
|
|
|
@@ -390,7 +413,13 @@ const hexLookupTable = (function () {
|
|
|
390
413
|
|
|
391
414
|
declare global {
|
|
392
415
|
interface ArrayBuffer {
|
|
393
|
-
|
|
416
|
+
resize?: (newByteLength: number) => void;
|
|
417
|
+
resizable?: boolean;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
interface SharedArrayBuffer {
|
|
421
|
+
resize?: (newByteLength: number) => void;
|
|
422
|
+
resizable?: boolean;
|
|
394
423
|
}
|
|
395
424
|
|
|
396
425
|
interface Uint8Array {
|
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
import { isDefined } from '../langs/isDefined';
|
|
2
|
+
import { ArrayBuffers } from './ArrayBuffers';
|
|
3
|
+
|
|
4
|
+
type AnyBuffer = BufferSource | ArrayBufferLike;
|
|
5
|
+
|
|
6
|
+
function asBuffer(o: AnyBuffer) {
|
|
7
|
+
if (o instanceof ArrayBuffer) {
|
|
8
|
+
return o;
|
|
9
|
+
}
|
|
10
|
+
if (ArrayBuffer.isView(o)) {
|
|
11
|
+
// 保留 offset&length
|
|
12
|
+
if (o.byteLength !== o.buffer.byteLength) {
|
|
13
|
+
// ArrayBuffer 没有 subarray
|
|
14
|
+
// if ('subarray' in o.buffer) {
|
|
15
|
+
// return (o.buffer as any).subarray(o.byteOffset, o.byteOffset + o.byteLength);
|
|
16
|
+
// }
|
|
17
|
+
return o.buffer.slice(o.byteOffset, o.byteOffset + o.byteLength);
|
|
18
|
+
}
|
|
19
|
+
return o.buffer;
|
|
20
|
+
}
|
|
21
|
+
return o;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// function asView(o: AnyBuffer) {
|
|
25
|
+
// if (o instanceof DataView) {
|
|
26
|
+
// return o;
|
|
27
|
+
// }
|
|
28
|
+
// if (ArrayBuffer.isView(o)) {
|
|
29
|
+
// // 不 clone 也能保留 offset&length
|
|
30
|
+
// return new DataView(o.buffer, o.byteOffset, o.byteLength);
|
|
31
|
+
// }
|
|
32
|
+
// return new DataView(o);
|
|
33
|
+
// }
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @see https://www.egret.uk/docs/egretengine/engine/egret.ByteArray
|
|
37
|
+
* @see https://netty.io/4.1/api/io/netty/buffer/ByteBuf.html
|
|
38
|
+
*/
|
|
39
|
+
export class ByteArray {
|
|
40
|
+
position = 0;
|
|
41
|
+
|
|
42
|
+
#buffer: ArrayBufferLike;
|
|
43
|
+
#view: DataView;
|
|
44
|
+
|
|
45
|
+
constructor(buffer: AnyBuffer = new ArrayBuffer(0, { maxByteLength: 1024 })) {
|
|
46
|
+
this.#buffer = asBuffer(buffer);
|
|
47
|
+
// note prefer view over buffer, avoid the slice overhead ?
|
|
48
|
+
this.#view = new DataView(this.#buffer);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
get view() {
|
|
52
|
+
return this.#view;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
get buffer(): ArrayBufferLike {
|
|
56
|
+
return this.#buffer;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
set buffer(buffer: AnyBuffer) {
|
|
60
|
+
this.#buffer = asBuffer(buffer);
|
|
61
|
+
this.#view = new DataView(this.#buffer);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
get length() {
|
|
65
|
+
return this.view.byteLength;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
set length(length: number) {
|
|
69
|
+
this.resize(length);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
private ensureSpace(length: number) {
|
|
73
|
+
if (this.remaining() < length) {
|
|
74
|
+
this.resize(this.length + length);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
resize(newLength: number) {
|
|
79
|
+
// Chrome 111, Nodejs 20
|
|
80
|
+
let buf = this.buffer;
|
|
81
|
+
if (buf.resize && (!isDefined(buf.resizable) || buf.resizable)) {
|
|
82
|
+
buf.resize(newLength);
|
|
83
|
+
} else {
|
|
84
|
+
let newBuffer = new ArrayBuffer(newLength);
|
|
85
|
+
new Uint8Array(newBuffer).set(new Uint8Array(buf));
|
|
86
|
+
this.buffer = newBuffer;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
writeByte(value: number) {
|
|
91
|
+
this.ensureSpace(1);
|
|
92
|
+
this.view.setUint8(this.position++, value);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
writeBytes(bytes: ArrayBufferLike) {
|
|
96
|
+
this.ensureSpace(bytes.byteLength);
|
|
97
|
+
new Uint8Array(this.buffer).set(new Uint8Array(bytes), this.position);
|
|
98
|
+
this.position += bytes.byteLength;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
writeInt8(value: number) {
|
|
102
|
+
this.ensureSpace(1);
|
|
103
|
+
this.view.setInt8(this.position, value);
|
|
104
|
+
this.position += 1;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
writeUint8(value: number) {
|
|
108
|
+
this.ensureSpace(1);
|
|
109
|
+
this.view.setUint8(this.position, value);
|
|
110
|
+
this.position += 1;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
writeInt16(value: number) {
|
|
114
|
+
this.ensureSpace(2);
|
|
115
|
+
this.view.setInt16(this.position, value);
|
|
116
|
+
this.position += 2;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
writeUint16(value: number) {
|
|
120
|
+
this.ensureSpace(2);
|
|
121
|
+
this.view.setUint16(this.position, value);
|
|
122
|
+
this.position += 2;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
writeInt32(value: number) {
|
|
126
|
+
this.ensureSpace(4);
|
|
127
|
+
this.view.setInt32(this.position, value);
|
|
128
|
+
this.position += 4;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
writeUint32(value: number) {
|
|
132
|
+
this.ensureSpace(4);
|
|
133
|
+
this.view.setUint32(this.position, value);
|
|
134
|
+
this.position += 4;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
writeInt64(value: bigint) {
|
|
138
|
+
this.ensureSpace(8);
|
|
139
|
+
this.view.setBigInt64(this.position, value);
|
|
140
|
+
this.position += 8;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
writeUint64(value: bigint) {
|
|
144
|
+
this.ensureSpace(8);
|
|
145
|
+
this.view.setBigUint64(this.position, value);
|
|
146
|
+
this.position += 8;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
writeFloat32(value: number) {
|
|
150
|
+
this.ensureSpace(4);
|
|
151
|
+
this.view.setFloat32(this.position, value);
|
|
152
|
+
this.position += 4;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
writeFloat64(value: number) {
|
|
156
|
+
this.ensureSpace(8);
|
|
157
|
+
this.view.setFloat64(this.position, value);
|
|
158
|
+
this.position += 8;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
writeBoolean(value: boolean) {
|
|
162
|
+
this.writeByte(value ? 1 : 0);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
writeString(value: string): void;
|
|
166
|
+
writeString(value: string, len?: number): void;
|
|
167
|
+
writeString(value: string, len?: number) {
|
|
168
|
+
let encoder = new TextEncoder();
|
|
169
|
+
let bytes = encoder.encode(value);
|
|
170
|
+
this.writeBytes(ArrayBuffers.resize(bytes.buffer, len));
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
readByte() {
|
|
174
|
+
return this.view.getUint8(this.position++);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
readBytes(length: number) {
|
|
178
|
+
let bytes = this.buffer.slice(this.position, this.position + length);
|
|
179
|
+
this.position += length;
|
|
180
|
+
return bytes;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
readInt8() {
|
|
184
|
+
let value = this.view.getInt8(this.position);
|
|
185
|
+
this.position += 1;
|
|
186
|
+
return value;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
readUint8() {
|
|
190
|
+
let value = this.view.getUint8(this.position);
|
|
191
|
+
this.position += 1;
|
|
192
|
+
return value;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
readInt16() {
|
|
196
|
+
let value = this.view.getInt16(this.position);
|
|
197
|
+
this.position += 2;
|
|
198
|
+
return value;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
readUint16() {
|
|
202
|
+
let value = this.view.getUint16(this.position);
|
|
203
|
+
this.position += 2;
|
|
204
|
+
return value;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
readInt32() {
|
|
208
|
+
let value = this.view.getInt32(this.position);
|
|
209
|
+
this.position += 4;
|
|
210
|
+
return value;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
readUint32() {
|
|
214
|
+
let value = this.view.getUint32(this.position);
|
|
215
|
+
this.position += 4;
|
|
216
|
+
return value;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
readInt64() {
|
|
220
|
+
let value = this.view.getBigInt64(this.position);
|
|
221
|
+
this.position += 8;
|
|
222
|
+
return safeNumber(value);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
readUint64() {
|
|
226
|
+
let value = this.view.getBigUint64(this.position);
|
|
227
|
+
this.position += 8;
|
|
228
|
+
return safeNumber(value);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
readFloat32() {
|
|
232
|
+
let value = this.view.getFloat32(this.position);
|
|
233
|
+
this.position += 4;
|
|
234
|
+
return value;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
readFloat64() {
|
|
238
|
+
let value = this.view.getFloat64(this.position);
|
|
239
|
+
this.position += 8;
|
|
240
|
+
return value;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
readBoolean() {
|
|
244
|
+
return this.readByte() === 1;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
readString(length: number) {
|
|
248
|
+
let bytes = this.readBytes(length);
|
|
249
|
+
let decoder = new TextDecoder();
|
|
250
|
+
let a = new Uint8Array(bytes);
|
|
251
|
+
let idx = a.indexOf(0);
|
|
252
|
+
if (idx !== -1) {
|
|
253
|
+
bytes = bytes.slice(0, idx);
|
|
254
|
+
}
|
|
255
|
+
return decoder.decode(bytes);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
readHexString(length: number) {
|
|
259
|
+
let bytes = this.readBytes(length);
|
|
260
|
+
return ArrayBuffers.toHex(bytes);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
writeInt24(value: number) {
|
|
264
|
+
this.writeUint8(value & 0xff);
|
|
265
|
+
this.writeUint16(value >> 8);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
readInt24() {
|
|
269
|
+
return this.readUint8() | (this.readUint16() << 8);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
writeZero(length: number) {
|
|
273
|
+
this.writeBytes(new Uint8Array(length).buffer);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
writeValue(typ: TypedValue['type'], val: TypedValue['value']): void;
|
|
277
|
+
writeValue(tv: TypedValue): void;
|
|
278
|
+
writeValue(a: any, b?: any) {
|
|
279
|
+
const tv: TypedValue = typeof a === 'string' ? { type: a, value: b } : a;
|
|
280
|
+
const { type, value, length } = tv;
|
|
281
|
+
switch (type) {
|
|
282
|
+
case 'uint8':
|
|
283
|
+
this.writeUint8(value);
|
|
284
|
+
break;
|
|
285
|
+
case 'byte':
|
|
286
|
+
case 'int8':
|
|
287
|
+
this.writeInt8(value);
|
|
288
|
+
break;
|
|
289
|
+
case 'uint16':
|
|
290
|
+
this.writeUint16(value);
|
|
291
|
+
break;
|
|
292
|
+
case 'int16':
|
|
293
|
+
this.writeInt16(value);
|
|
294
|
+
break;
|
|
295
|
+
case 'uint32':
|
|
296
|
+
this.writeUint32(value);
|
|
297
|
+
break;
|
|
298
|
+
case 'int32':
|
|
299
|
+
this.writeInt32(value);
|
|
300
|
+
break;
|
|
301
|
+
case 'float32':
|
|
302
|
+
this.writeFloat32(value);
|
|
303
|
+
break;
|
|
304
|
+
case 'float64':
|
|
305
|
+
this.writeFloat64(value);
|
|
306
|
+
break;
|
|
307
|
+
case 'string':
|
|
308
|
+
this.writeString(value, length);
|
|
309
|
+
break;
|
|
310
|
+
case 'boolean':
|
|
311
|
+
this.writeBoolean(value);
|
|
312
|
+
break;
|
|
313
|
+
case 'bytes':
|
|
314
|
+
this.writeBytes(value);
|
|
315
|
+
break;
|
|
316
|
+
default:
|
|
317
|
+
throw new Error(`Unknown type ${type}`);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
readInt() {
|
|
322
|
+
return this.readInt32();
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
readFloat() {
|
|
326
|
+
return this.readFloat32();
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
readDouble() {
|
|
330
|
+
return this.readFloat64();
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
remaining() {
|
|
334
|
+
return this.view.byteLength - this.position;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
toUint8Array() {
|
|
338
|
+
return new Uint8Array(this.buffer);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
toHex() {
|
|
342
|
+
return ArrayBuffers.toHex(this.buffer);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
export interface TypedValue {
|
|
347
|
+
type:
|
|
348
|
+
| 'byte'
|
|
349
|
+
| 'bytes'
|
|
350
|
+
| 'uint8'
|
|
351
|
+
| 'int8'
|
|
352
|
+
| 'uint16'
|
|
353
|
+
| 'int16'
|
|
354
|
+
| 'uint32'
|
|
355
|
+
| 'int32'
|
|
356
|
+
| 'float32'
|
|
357
|
+
| 'float64'
|
|
358
|
+
| 'string'
|
|
359
|
+
| 'boolean';
|
|
360
|
+
value: any;
|
|
361
|
+
length?: number;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
export function toDump(data: BufferSource) {
|
|
365
|
+
return Array.from(ArrayBuffers.toHex(data).match(/.{1,32}/g) ?? [])
|
|
366
|
+
.map((v, i) => {
|
|
367
|
+
let idxPrefix = `${i.toString(16).padStart(8, '0')}:`;
|
|
368
|
+
let content = Array.from(v.match(/.{4}/g) ?? []).join(' ');
|
|
369
|
+
let chars = Array.from(new Uint8Array(ArrayBuffers.fromHex(v).buffer)).map((v) => {
|
|
370
|
+
let c = String.fromCharCode(v);
|
|
371
|
+
if (v < 32 || v > 126) {
|
|
372
|
+
c = '.';
|
|
373
|
+
}
|
|
374
|
+
return c;
|
|
375
|
+
});
|
|
376
|
+
return [idxPrefix, content.padEnd(40, ' '), chars.join('')].join(' ');
|
|
377
|
+
})
|
|
378
|
+
.join('\n');
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Chrome Websocket Binary format
|
|
383
|
+
* ```
|
|
384
|
+
* 00000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................
|
|
385
|
+
* ```
|
|
386
|
+
*/
|
|
387
|
+
export function fromDump(dump: string) {
|
|
388
|
+
return ArrayBuffers.fromHex(
|
|
389
|
+
dump
|
|
390
|
+
.split('\n')
|
|
391
|
+
.map((v) => {
|
|
392
|
+
return v.substring(10, 10 + 41).replaceAll(' ', '');
|
|
393
|
+
})
|
|
394
|
+
.join(''),
|
|
395
|
+
);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
function safeNumber(n: bigint) {
|
|
399
|
+
if (n > Number.MAX_SAFE_INTEGER) {
|
|
400
|
+
return n;
|
|
401
|
+
}
|
|
402
|
+
return Number(n);
|
|
403
|
+
}
|