@wener/utils 1.1.46 → 1.1.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -1
- package/lib/asyncs/Promises.js +46 -0
- package/lib/asyncs/Promises.js.map +1 -0
- package/lib/asyncs/isPromise.js +2 -3
- package/lib/asyncs/isPromise.js.map +1 -1
- package/lib/cn/division/DivisionCode.js +30 -17
- package/lib/cn/division/DivisionCode.js.map +1 -1
- package/lib/cn/id/{Mod11Checksum.js → Mod11.js} +3 -6
- package/lib/cn/id/Mod11.js.map +1 -0
- package/lib/cn/id/ResidentIdNumber.js +10 -12
- package/lib/cn/id/ResidentIdNumber.js.map +1 -1
- package/lib/cn/uscc/{Mod31Checksum.js → Mod31.js} +3 -6
- package/lib/cn/uscc/Mod31.js.map +1 -0
- package/lib/cn/uscc/USCC.js +6 -9
- package/lib/cn/uscc/USCC.js.map +1 -1
- package/lib/cn/uscc/isUSCC.js +1 -1
- package/lib/cn/uscc/isUSCC.js.map +1 -1
- package/lib/crypto/getNodeCrypto.js +13 -10
- package/lib/crypto/getNodeCrypto.js.map +1 -1
- package/lib/crypto/getRandomValues.js +5 -1
- package/lib/crypto/getRandomValues.js.map +1 -1
- package/lib/emitter/types.js +3 -0
- package/lib/emitter/types.js.map +1 -0
- package/lib/fetch/http.types.js +4 -0
- package/lib/fetch/http.types.js.map +1 -0
- package/lib/index.js +4 -3
- package/lib/index.js.map +1 -1
- package/lib/io/ArrayBuffers.js +12 -5
- package/lib/io/ArrayBuffers.js.map +1 -1
- package/lib/io/ByteBuffer.js +4 -13
- package/lib/io/ByteBuffer.js.map +1 -1
- package/lib/maths/random.js.map +1 -1
- package/lib/mitt/index.js +77 -0
- package/lib/mitt/index.js.map +1 -0
- package/lib/objects/computeIfAbsent.js +1 -1
- package/lib/objects/computeIfAbsent.js.map +1 -1
- package/package.json +6 -14
- package/src/asyncs/Promises.ts +52 -0
- package/src/asyncs/isPromise.ts +3 -3
- package/src/cn/division/DivisionCode.ts +61 -8
- package/src/cn/division/division.test.ts +6 -0
- package/src/cn/id/{Mod11Checksum.ts → Mod11.ts} +3 -6
- package/src/cn/id/ResidentIdNumber.ts +11 -13
- package/src/cn/id/id.test.ts +5 -5
- package/src/cn/scripts/gen.test.ts +2 -1
- package/src/cn/uscc/{Mod31Checksum.ts → Mod31.ts} +3 -7
- package/src/cn/uscc/USCC.ts +7 -11
- package/src/cn/uscc/isUSCC.ts +1 -1
- package/src/cn/uscc/uscc.test.ts +4 -4
- package/src/crypto/getNodeCrypto.ts +15 -11
- package/src/crypto/getRandomValues.ts +6 -1
- package/src/emitter/types.ts +18 -0
- package/src/fetch/http.types.ts +46 -0
- package/src/index.ts +5 -3
- package/src/io/ArrayBuffers.ts +10 -5
- package/src/io/ByteBuffer.test.ts +30 -9
- package/src/io/ByteBuffer.ts +4 -13
- package/src/langs/mixin.test.ts +39 -0
- package/src/maths/random.ts +1 -1
- package/src/mitt/README.md +1 -0
- package/src/mitt/index.ts +114 -0
- package/src/objects/computeIfAbsent.ts +3 -2
- package/lib/asyncs/sleep.js +0 -3
- package/lib/asyncs/sleep.js.map +0 -1
- package/lib/cn/id/Mod11Checksum.js.map +0 -1
- package/lib/cn/uscc/Mod31Checksum.js.map +0 -1
- package/src/asyncs/sleep.ts +0 -1
package/lib/io/ArrayBuffers.js
CHANGED
|
@@ -57,16 +57,23 @@ export class ArrayBuffers {
|
|
|
57
57
|
}
|
|
58
58
|
return this.toUint8Array(ArrayBuffers.from(v, 'hex'));
|
|
59
59
|
};
|
|
60
|
-
static resize = (v, newByteLength)=>{
|
|
60
|
+
static resize = (v, newByteLength, maxByteLength)=>{
|
|
61
61
|
if (newByteLength === undefined || newByteLength === null) {
|
|
62
62
|
return v;
|
|
63
63
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
// Chrome 111, Nodejs 20
|
|
65
|
+
if ('resize' in v && typeof v.resize === 'function') {
|
|
66
|
+
if ('resizable' in v && v.resizable) {
|
|
67
|
+
if ('maxByteLength' in v && typeof v.maxByteLength === 'number' && v.maxByteLength >= newByteLength) {
|
|
68
|
+
v.resize(newByteLength);
|
|
69
|
+
return v;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
67
72
|
}
|
|
68
73
|
const old = v;
|
|
69
|
-
const newBuf = new ArrayBuffer(newByteLength
|
|
74
|
+
const newBuf = new ArrayBuffer(newByteLength, {
|
|
75
|
+
maxByteLength: maxByteLength
|
|
76
|
+
});
|
|
70
77
|
const oldView = new Uint8Array(old);
|
|
71
78
|
const newView = new Uint8Array(newBuf);
|
|
72
79
|
newView.set(oldView);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/io/ArrayBuffers.ts"],"sourcesContent":["import { classOf } from '../langs/classOf';\nimport { getGlobalThis } from '../runtime/getGlobalThis';\nimport { decodeBase64ToArrayBuffer, encodeArrayBufferToBase64 } from './base64';\nimport { isBuffer } from './isBuffer';\n\n/**\n * Various utils to work with {@link ArrayBuffer}\n *\n * @see https://github.com/tc39/proposal-arraybuffer-base64\n * @see https://github.com/tc39/proposal-resizablearraybuffer\n */\nexport interface ArrayBuffers {\n /**\n * isArrayBuffer check if the given value is an {@link ArrayBuffer}\n */\n isArrayBuffer(v: any): v is ArrayBuffer;\n\n /**\n * slice the given view with the given offset and length, will handle the {@link Buffer} as well\n *\n * @see {@link https://nodejs.org/api/buffer.html#bufslicestart-end Buffer.slice}\n */\n slice<T extends ArrayBufferView>(o: T, start?: number, end?: number): T;\n\n /**\n * asView convert the given value to given {@link TypedArray} view\n *\n * TypedArray can be {@link Buffer}, will avoid copy\n */\n asView<C extends ArrayBufferViewConstructor<unknown>>(\n TypedArray: C,\n v: BufferSource,\n byteOffset?: number,\n byteLength?: number,\n ): InstanceType<C>;\n\n /**\n * toString convert the given {@link BufferSource} to string\n */\n toString(v: BufferSource | string, encoding?: ToStringEncoding): string;\n\n /**\n * Returns true if encoding is the name of a supported character encoding, or false otherwise.\n */\n isEncoding(v?: string): v is ToStringEncoding;\n\n toJSON<T = any>(v: BufferSource | string, reviver?: (this: any, key: string, value: any) => any): T;\n\n /**\n * from convert the given value to {@link ArrayBuffer}\n */\n from(v: string | BufferSource, encoding?: ToStringEncoding): ArrayBuffer;\n\n from<C extends ArrayBufferViewConstructor<unknown>>(\n v: string | BufferSource,\n encoding: ToStringEncoding,\n TypedArray: C,\n ): C;\n\n /**\n * concat the given {@link BufferSource} to a new {@link ArrayBuffer}\n */\n concat(buffers: Array<BufferSource>, result?: ArrayBuffer, offset?: number): ArrayBuffer;\n\n fromBase64(v: string): Uint8Array;\n\n fromHex(v: string): Uint8Array;\n\n toBase64(v: BufferSource): string;\n\n toHex(v: BufferSource): string;\n\n resize(v: ArrayBuffer, newByteLength: number): ArrayBuffer;\n\n // truncate(v: ArrayBufferLike, len?: number): ArrayBufferLike;\n}\n\ntype ToStringEncoding =\n | 'ascii'\n | 'utf16le'\n // | 'utf-16le'\n | 'ucs2'\n | 'ucs-2'\n | 'base64'\n | 'base64url'\n | 'latin1'\n | 'binary'\n | 'utf8'\n | 'utf-8'\n | 'hex';\n\nexport class ArrayBuffers {\n static #nativeBufferAllowed: boolean = true;\n static #isBufferAvailable: undefined | boolean;\n\n static isNativeBufferAvailable() {\n // eslint-disable-next-line no-return-assign\n return (this.#isBufferAvailable ??= !(getGlobalThis().Buffer as any)?.isPollyfill?.());\n }\n\n static isNativeBufferAllowed() {\n return this.#nativeBufferAllowed && this.#isBufferAvailable;\n }\n\n static setNativeBufferAllowed(v: boolean) {\n this.#nativeBufferAllowed = v;\n }\n\n static isArrayBuffer = (v: any): v is ArrayBuffer => {\n return v instanceof ArrayBuffer;\n };\n\n static toArrayBuffer(v: BufferSource): ArrayBuffer {\n return v instanceof ArrayBuffer ? v : (v.buffer as ArrayBuffer);\n }\n\n static toUint8Array(v: BufferSource) {\n return ArrayBuffers.asView(Uint8Array, v);\n }\n\n static toBase64 = (v: BufferSource) => {\n if ('toBase64' in Uint8Array.prototype) {\n return this.toUint8Array(v).toBase64();\n }\n\n if (ArrayBuffers.isNativeBufferAllowed()) {\n return Buffer.from(ArrayBuffers.asView(Uint8Array, v)).toString('base64');\n }\n\n return encodeArrayBufferToBase64(this.toArrayBuffer(v));\n };\n\n static toHex = (v: BufferSource) => {\n if ('toHex' in Uint8Array.prototype) {\n return this.toUint8Array(v).toHex();\n }\n if (ArrayBuffers.isNativeBufferAllowed()) {\n return Buffer.from(ArrayBuffers.asView(Uint8Array, v)).toString('hex');\n }\n return ArrayBuffers.toString(v, 'hex');\n };\n\n static fromBase64 = (v: string) => {\n if ('fromBase64' in Uint8Array) {\n return Uint8Array.fromBase64(v);\n }\n if (ArrayBuffers.isNativeBufferAllowed()) {\n return Buffer.from(v, 'base64');\n }\n return this.toUint8Array(decodeBase64ToArrayBuffer(v));\n };\n\n static fromHex = (v: string) => {\n if ('fromHex' in Uint8Array) {\n return Uint8Array.fromHex(v);\n }\n return this.toUint8Array(ArrayBuffers.from(v, 'hex'));\n };\n\n static resize = (v: ArrayBufferLike, newByteLength?: number) => {\n if (newByteLength === undefined || newByteLength === null) {\n return v;\n }\n\n if ('resize' in v && (v as any).resizable) {\n (v as any).resize(newByteLength);\n return v;\n }\n\n const old = v;\n const newBuf = new ArrayBuffer(newByteLength);\n const oldView = new Uint8Array(old);\n const newView = new Uint8Array(newBuf);\n newView.set(oldView);\n return newBuf;\n };\n\n static slice = (o: TypedArray, start?: number, end?: number) => {\n // NodeJS Buffer slice is not the same as UInt8Array slice\n // https://nodejs.org/api/buffer.html#bufslicestart-end\n if (isBuffer(o)) {\n return Uint8Array.prototype.slice.call(o, start, end);\n }\n return o.slice(start, end);\n };\n\n static asView = <C extends ArrayBufferViewConstructor<unknown>, I extends InstanceType<C>>(\n TypedArray: C,\n v: BufferSource,\n byteOffset?: number,\n byteLength?: number,\n ): I => {\n if (v instanceof TypedArray && (byteOffset ?? 0) === 0 && byteLength === undefined) {\n return v as I;\n }\n if (ArrayBuffer.isView(v) || isBuffer(v)) {\n if (ArrayBuffers.isNativeBufferAllowed() && (TypedArray as any) === Buffer) {\n // new Buffer() is deprecated\n return Buffer.from(v.buffer, byteOffset, byteLength) as I;\n }\n return new TypedArray(v.buffer, v.byteOffset + (byteOffset ?? 0), byteLength ?? v.byteLength) as I;\n }\n return new TypedArray(v, byteOffset, byteLength) as I;\n };\n\n static toString = (buf: BufferSource | string, encoding: ToStringEncoding = 'utf8') => {\n // 'ascii' 'utf16le' | 'ucs2' | 'ucs-2' | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex'\n if (typeof buf === 'string') {\n switch (encoding) {\n case 'base64':\n return btoa(buf);\n case 'utf-8':\n case 'utf8':\n return buf;\n default:\n throw new Error(`[ArrayBuffers.toString] Unsupported encoding for string: ${encoding}`);\n }\n }\n if (ArrayBuffers.isNativeBufferAllowed()) {\n return Buffer.from(ArrayBuffers.asView(Uint8Array, buf)).toString(encoding);\n }\n // reference\n // https://github.com/feross/buffer/blob/master/index.js\n switch (encoding) {\n case 'hex': {\n const view: Uint8Array = ArrayBuffers.asView(Uint8Array, buf);\n return [...view].map((b) => hexLookupTable[b]).join('');\n }\n case 'base64': {\n return encodeArrayBufferToBase64(ArrayBuffers.asView(Uint8Array, buf));\n }\n case 'utf8':\n // falls through\n case 'utf-8':\n return new TextDecoder().decode(buf as any);\n case 'ascii': {\n const view: Uint8Array = ArrayBuffers.asView(Uint8Array, buf);\n return String.fromCharCode(...view.map((v) => v & 0x7f));\n }\n case 'latin1':\n // falls through\n case 'binary': {\n const view: Uint8Array = ArrayBuffers.asView(Uint8Array, buf);\n return String.fromCharCode(...view);\n }\n case 'ucs2':\n // falls through\n case 'ucs-2':\n // case 'utf-16le':\n // falls through\n case 'utf16le': {\n const view: Uint8Array = ArrayBuffers.asView(Uint8Array, buf);\n let res = '';\n // If length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < view.length - 1; i += 2) {\n res += String.fromCharCode(view[i] + view[i + 1] * 256);\n }\n return res;\n }\n default:\n throw new Error(`[ArrayBuffers.toString] Unknown encoding: ${encoding}`);\n }\n };\n\n static toJSON = (v: BufferSource | string, reviver?: (this: any, key: string, value: any) => any) => {\n return JSON.parse(ArrayBuffers.toString(v), reviver);\n };\n\n static alloc = (size: number, fill?: string | number, encoding?: ToStringEncoding) => {\n if (fill !== undefined) {\n if (typeof fill === 'number') {\n return new Uint8Array(size).fill(fill);\n }\n // as cast\n // https://stackoverflow.com/questions/73994091\n return ArrayBuffers.asView(Uint8Array, ArrayBuffers.from(fill, encoding)).slice(0, size);\n }\n return new ArrayBuffer(size);\n };\n\n static from = (\n v: string | BufferSource | ArrayLike<number> | Iterable<number>,\n encoding: ToStringEncoding = 'utf8',\n view?: any,\n ): any => {\n if (view) {\n return this.asView(view, this.from(v, encoding));\n }\n if (!v) {\n return new ArrayBuffer(0);\n }\n if (typeof v === 'string') {\n if (ArrayBuffers.isNativeBufferAllowed()) {\n return Buffer.from(v, encoding);\n }\n\n switch (encoding) {\n case 'utf-8':\n // falls through\n case 'utf8':\n return new TextEncoder().encode(v).buffer;\n case 'base64':\n // replaceAll need higher version of nodejs\n return decodeBase64ToArrayBuffer(v.replace(/[^0-9a-zA-Z=+/_]/g, ''));\n case 'hex':\n return new Uint8Array(v.match(/.{1,2}/g)!.map((byte) => parseInt(byte, 16))).buffer;\n default:\n throw new Error(`[ArrayBuffers.from] Unknown encoding: ${encoding}`);\n }\n }\n if (v instanceof ArrayBuffer) {\n return v;\n }\n // lost length\n if (ArrayBuffer.isView(v) || isBuffer(v)) {\n if (v.byteOffset !== 0) {\n // return v.buffer.slice(v.byteOffset, v.byteOffset + v.byteLength)\n throw new Error('ArrayBuffers.from do not support view with offset');\n }\n return v.buffer;\n }\n if (Array.isArray(v)) {\n return new Uint8Array(v);\n }\n const type = classOf(v);\n throw new TypeError(`ArrayBuffers.from unsupported type ${type}`);\n };\n\n static isEncoding = (encoding?: string) => {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n // case 'utf-16le':\n return true;\n default:\n return false;\n }\n };\n\n // static truncate = (a: ArrayBufferLike, len?: number) => {\n // if (len === 0) {\n // return new ArrayBuffer(0);\n // }\n // if (!len) {\n // return a;\n // }\n // if (a.byteLength > len) {\n // return a.slice(0, len);\n // } else if (a.byteLength < len) {\n // let b = new Uint8Array(len);\n // b.set(new Uint8Array(a));\n // return b;\n // }\n // return a;\n // };\n\n static concat = (buffers: Array<BufferSource>, result?: ArrayBuffer, offset = 0) => {\n // https://stackoverflow.com/questions/10786128/appending-arraybuffers\n\n const length = buffers.reduce((a, b) => a + b.byteLength, 0);\n const r = result ? new Uint8Array(result) : new Uint8Array(length);\n for (const buffer of buffers) {\n if (!buffer?.byteLength) continue;\n let n: Uint8Array;\n if (buffer instanceof ArrayBuffer) {\n n = new Uint8Array(buffer);\n } else if (ArrayBuffer.isView(buffer)) {\n n = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n } else {\n throw new Error(`ArrayBuffers.concat unsupported type ${classOf(buffer)}`);\n }\n r.set(n, offset);\n offset += buffer.byteLength;\n }\n return r.buffer;\n };\n}\n\nexport type TypedArray =\n | Uint8Array\n | Uint8ClampedArray\n | Uint16Array\n | Uint32Array\n | Int8Array\n | Int16Array\n | Int32Array\n | BigUint64Array\n | BigInt64Array\n | Float32Array\n | Float64Array;\n\ntype ArrayBufferViewConstructor<T> = new (buffer: ArrayBufferLike, byteOffset?: number, byteLength?: number) => T;\n\nconst hexLookupTable = (function () {\n const alphabet = '0123456789abcdef';\n const table = new Array(256);\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16;\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j];\n }\n }\n return table;\n})();\n\ndeclare global {\n interface ArrayBuffer {\n resize?: (newByteLength: number) => void;\n resizable?: boolean;\n }\n\n interface SharedArrayBuffer {\n resize?: (newByteLength: number) => void;\n resizable?: boolean;\n }\n\n interface Uint8Array {\n toBase64(): string;\n\n toHex(): string;\n }\n\n interface Uint8ArrayConstructor {\n fromBase64(v: string): Uint8Array;\n\n fromHex(v: string): Uint8Array;\n }\n}\n"],"names":["classOf","getGlobalThis","decodeBase64ToArrayBuffer","encodeArrayBufferToBase64","isBuffer","ArrayBuffers","nativeBufferAllowed","isBufferAvailable","isNativeBufferAvailable","Buffer","isPollyfill","isNativeBufferAllowed","setNativeBufferAllowed","v","isArrayBuffer","ArrayBuffer","toArrayBuffer","buffer","toUint8Array","asView","Uint8Array","toBase64","prototype","from","toString","toHex","fromBase64","fromHex","resize","newByteLength","undefined","resizable","old","newBuf","oldView","newView","set","slice","o","start","end","call","TypedArray","byteOffset","byteLength","isView","buf","encoding","btoa","Error","view","map","b","hexLookupTable","join","TextDecoder","decode","String","fromCharCode","res","i","length","toJSON","reviver","JSON","parse","alloc","size","fill","TextEncoder","encode","replace","match","byte","parseInt","Array","isArray","type","TypeError","isEncoding","toLowerCase","concat","buffers","result","offset","reduce","a","r","n","alphabet","table","i16","j"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/io/ArrayBuffers.ts"],"sourcesContent":["import { classOf } from '../langs/classOf';\nimport { getGlobalThis } from '../runtime/getGlobalThis';\nimport { decodeBase64ToArrayBuffer, encodeArrayBufferToBase64 } from './base64';\nimport { isBuffer } from './isBuffer';\n\n/**\n * Various utils to work with {@link ArrayBuffer}\n *\n * @see https://github.com/tc39/proposal-arraybuffer-base64\n * @see https://github.com/tc39/proposal-resizablearraybuffer\n */\nexport interface ArrayBuffers {\n /**\n * isArrayBuffer check if the given value is an {@link ArrayBuffer}\n */\n isArrayBuffer(v: any): v is ArrayBuffer;\n\n /**\n * slice the given view with the given offset and length, will handle the {@link Buffer} as well\n *\n * @see {@link https://nodejs.org/api/buffer.html#bufslicestart-end Buffer.slice}\n */\n slice<T extends ArrayBufferView>(o: T, start?: number, end?: number): T;\n\n /**\n * asView convert the given value to given {@link TypedArray} view\n *\n * TypedArray can be {@link Buffer}, will avoid copy\n */\n asView<C extends ArrayBufferViewConstructor<unknown>>(\n TypedArray: C,\n v: BufferSource,\n byteOffset?: number,\n byteLength?: number,\n ): InstanceType<C>;\n\n /**\n * toString convert the given {@link BufferSource} to string\n */\n toString(v: BufferSource | string, encoding?: ToStringEncoding): string;\n\n /**\n * Returns true if encoding is the name of a supported character encoding, or false otherwise.\n */\n isEncoding(v?: string): v is ToStringEncoding;\n\n toJSON<T = any>(v: BufferSource | string, reviver?: (this: any, key: string, value: any) => any): T;\n\n /**\n * from convert the given value to {@link ArrayBuffer}\n */\n from(v: string | BufferSource, encoding?: ToStringEncoding): ArrayBuffer;\n\n from<C extends ArrayBufferViewConstructor<unknown>>(\n v: string | BufferSource,\n encoding: ToStringEncoding,\n TypedArray: C,\n ): C;\n\n /**\n * concat the given {@link BufferSource} to a new {@link ArrayBuffer}\n */\n concat(buffers: Array<BufferSource>, result?: ArrayBuffer, offset?: number): ArrayBuffer;\n\n fromBase64(v: string): Uint8Array;\n\n fromHex(v: string): Uint8Array;\n\n toBase64(v: BufferSource): string;\n\n toHex(v: BufferSource): string;\n\n resize(v: ArrayBuffer, newByteLength: number): ArrayBuffer;\n\n // truncate(v: ArrayBufferLike, len?: number): ArrayBufferLike;\n}\n\ntype ToStringEncoding =\n | 'ascii'\n | 'utf16le'\n // | 'utf-16le'\n | 'ucs2'\n | 'ucs-2'\n | 'base64'\n | 'base64url'\n | 'latin1'\n | 'binary'\n | 'utf8'\n | 'utf-8'\n | 'hex';\n\nexport class ArrayBuffers {\n static #nativeBufferAllowed: boolean = true;\n static #isBufferAvailable: undefined | boolean;\n\n static isNativeBufferAvailable() {\n // eslint-disable-next-line no-return-assign\n return (this.#isBufferAvailable ??= !(getGlobalThis().Buffer as any)?.isPollyfill?.());\n }\n\n static isNativeBufferAllowed() {\n return this.#nativeBufferAllowed && this.#isBufferAvailable;\n }\n\n static setNativeBufferAllowed(v: boolean) {\n this.#nativeBufferAllowed = v;\n }\n\n static isArrayBuffer = (v: any): v is ArrayBuffer => {\n return v instanceof ArrayBuffer;\n };\n\n static toArrayBuffer(v: BufferSource): ArrayBuffer {\n return v instanceof ArrayBuffer ? v : (v.buffer as ArrayBuffer);\n }\n\n static toUint8Array(v: BufferSource) {\n return ArrayBuffers.asView(Uint8Array, v);\n }\n\n static toBase64 = (v: BufferSource) => {\n if ('toBase64' in Uint8Array.prototype) {\n return this.toUint8Array(v).toBase64();\n }\n\n if (ArrayBuffers.isNativeBufferAllowed()) {\n return Buffer.from(ArrayBuffers.asView(Uint8Array, v)).toString('base64');\n }\n\n return encodeArrayBufferToBase64(this.toArrayBuffer(v));\n };\n\n static toHex = (v: BufferSource) => {\n if ('toHex' in Uint8Array.prototype) {\n return this.toUint8Array(v).toHex();\n }\n if (ArrayBuffers.isNativeBufferAllowed()) {\n return Buffer.from(ArrayBuffers.asView(Uint8Array, v)).toString('hex');\n }\n return ArrayBuffers.toString(v, 'hex');\n };\n\n static fromBase64 = (v: string) => {\n if ('fromBase64' in Uint8Array) {\n return Uint8Array.fromBase64(v);\n }\n if (ArrayBuffers.isNativeBufferAllowed()) {\n return Buffer.from(v, 'base64');\n }\n return this.toUint8Array(decodeBase64ToArrayBuffer(v));\n };\n\n static fromHex = (v: string) => {\n if ('fromHex' in Uint8Array) {\n return Uint8Array.fromHex(v);\n }\n return this.toUint8Array(ArrayBuffers.from(v, 'hex'));\n };\n\n static resize = (v: ArrayBufferLike, newByteLength?: number, maxByteLength?: number): ArrayBuffer => {\n if (newByteLength === undefined || newByteLength === null) {\n return v;\n }\n\n // Chrome 111, Nodejs 20\n if ('resize' in v && typeof v.resize === 'function') {\n if ('resizable' in v && v.resizable) {\n if ('maxByteLength' in v && typeof v.maxByteLength === 'number' && v.maxByteLength >= newByteLength) {\n v.resize(newByteLength);\n return v;\n }\n }\n }\n\n const old = v;\n const newBuf = new ArrayBuffer(newByteLength, { maxByteLength: maxByteLength });\n const oldView = new Uint8Array(old);\n const newView = new Uint8Array(newBuf);\n newView.set(oldView);\n return newBuf;\n };\n\n static slice = (o: TypedArray, start?: number, end?: number) => {\n // NodeJS Buffer slice is not the same as UInt8Array slice\n // https://nodejs.org/api/buffer.html#bufslicestart-end\n if (isBuffer(o)) {\n return Uint8Array.prototype.slice.call(o, start, end);\n }\n return o.slice(start, end);\n };\n\n static asView = <C extends ArrayBufferViewConstructor<unknown>, I extends InstanceType<C>>(\n TypedArray: C,\n v: BufferSource,\n byteOffset?: number,\n byteLength?: number,\n ): I => {\n if (v instanceof TypedArray && (byteOffset ?? 0) === 0 && byteLength === undefined) {\n return v as I;\n }\n if (ArrayBuffer.isView(v) || isBuffer(v)) {\n if (ArrayBuffers.isNativeBufferAllowed() && (TypedArray as any) === Buffer) {\n // new Buffer() is deprecated\n return Buffer.from(v.buffer, byteOffset, byteLength) as I;\n }\n return new TypedArray(v.buffer, v.byteOffset + (byteOffset ?? 0), byteLength ?? v.byteLength) as I;\n }\n return new TypedArray(v, byteOffset, byteLength) as I;\n };\n\n static toString = (buf: BufferSource | string, encoding: ToStringEncoding = 'utf8') => {\n // 'ascii' 'utf16le' | 'ucs2' | 'ucs-2' | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex'\n if (typeof buf === 'string') {\n switch (encoding) {\n case 'base64':\n return btoa(buf);\n case 'utf-8':\n case 'utf8':\n return buf;\n default:\n throw new Error(`[ArrayBuffers.toString] Unsupported encoding for string: ${encoding}`);\n }\n }\n if (ArrayBuffers.isNativeBufferAllowed()) {\n return Buffer.from(ArrayBuffers.asView(Uint8Array, buf)).toString(encoding);\n }\n // reference\n // https://github.com/feross/buffer/blob/master/index.js\n switch (encoding) {\n case 'hex': {\n const view: Uint8Array = ArrayBuffers.asView(Uint8Array, buf);\n return [...view].map((b) => hexLookupTable[b]).join('');\n }\n case 'base64': {\n return encodeArrayBufferToBase64(ArrayBuffers.asView(Uint8Array, buf));\n }\n case 'utf8':\n // falls through\n case 'utf-8':\n return new TextDecoder().decode(buf as any);\n case 'ascii': {\n const view: Uint8Array = ArrayBuffers.asView(Uint8Array, buf);\n return String.fromCharCode(...view.map((v) => v & 0x7f));\n }\n case 'latin1':\n // falls through\n case 'binary': {\n const view: Uint8Array = ArrayBuffers.asView(Uint8Array, buf);\n return String.fromCharCode(...view);\n }\n case 'ucs2':\n // falls through\n case 'ucs-2':\n // case 'utf-16le':\n // falls through\n case 'utf16le': {\n const view: Uint8Array = ArrayBuffers.asView(Uint8Array, buf);\n let res = '';\n // If length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < view.length - 1; i += 2) {\n res += String.fromCharCode(view[i] + view[i + 1] * 256);\n }\n return res;\n }\n default:\n throw new Error(`[ArrayBuffers.toString] Unknown encoding: ${encoding}`);\n }\n };\n\n static toJSON = (v: BufferSource | string, reviver?: (this: any, key: string, value: any) => any) => {\n return JSON.parse(ArrayBuffers.toString(v), reviver);\n };\n\n static alloc = (size: number, fill?: string | number, encoding?: ToStringEncoding) => {\n if (fill !== undefined) {\n if (typeof fill === 'number') {\n return new Uint8Array(size).fill(fill);\n }\n // as cast\n // https://stackoverflow.com/questions/73994091\n return ArrayBuffers.asView(Uint8Array, ArrayBuffers.from(fill, encoding)).slice(0, size);\n }\n return new ArrayBuffer(size);\n };\n\n static from = (\n v: string | BufferSource | ArrayLike<number> | Iterable<number>,\n encoding: ToStringEncoding = 'utf8',\n view?: any,\n ): any => {\n if (view) {\n return this.asView(view, this.from(v, encoding));\n }\n if (!v) {\n return new ArrayBuffer(0);\n }\n if (typeof v === 'string') {\n if (ArrayBuffers.isNativeBufferAllowed()) {\n return Buffer.from(v, encoding);\n }\n\n switch (encoding) {\n case 'utf-8':\n // falls through\n case 'utf8':\n return new TextEncoder().encode(v).buffer;\n case 'base64':\n // replaceAll need higher version of nodejs\n return decodeBase64ToArrayBuffer(v.replace(/[^0-9a-zA-Z=+/_]/g, ''));\n case 'hex':\n return new Uint8Array(v.match(/.{1,2}/g)!.map((byte) => parseInt(byte, 16))).buffer;\n default:\n throw new Error(`[ArrayBuffers.from] Unknown encoding: ${encoding}`);\n }\n }\n if (v instanceof ArrayBuffer) {\n return v;\n }\n // lost length\n if (ArrayBuffer.isView(v) || isBuffer(v)) {\n if (v.byteOffset !== 0) {\n // return v.buffer.slice(v.byteOffset, v.byteOffset + v.byteLength)\n throw new Error('ArrayBuffers.from do not support view with offset');\n }\n return v.buffer;\n }\n if (Array.isArray(v)) {\n return new Uint8Array(v);\n }\n const type = classOf(v);\n throw new TypeError(`ArrayBuffers.from unsupported type ${type}`);\n };\n\n static isEncoding = (encoding?: string) => {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n // case 'utf-16le':\n return true;\n default:\n return false;\n }\n };\n\n // static truncate = (a: ArrayBufferLike, len?: number) => {\n // if (len === 0) {\n // return new ArrayBuffer(0);\n // }\n // if (!len) {\n // return a;\n // }\n // if (a.byteLength > len) {\n // return a.slice(0, len);\n // } else if (a.byteLength < len) {\n // let b = new Uint8Array(len);\n // b.set(new Uint8Array(a));\n // return b;\n // }\n // return a;\n // };\n\n static concat = (buffers: Array<BufferSource>, result?: ArrayBuffer, offset = 0) => {\n // https://stackoverflow.com/questions/10786128/appending-arraybuffers\n\n const length = buffers.reduce((a, b) => a + b.byteLength, 0);\n const r = result ? new Uint8Array(result) : new Uint8Array(length);\n for (const buffer of buffers) {\n if (!buffer?.byteLength) continue;\n let n: Uint8Array;\n if (buffer instanceof ArrayBuffer) {\n n = new Uint8Array(buffer);\n } else if (ArrayBuffer.isView(buffer)) {\n n = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n } else {\n throw new Error(`ArrayBuffers.concat unsupported type ${classOf(buffer)}`);\n }\n r.set(n, offset);\n offset += buffer.byteLength;\n }\n return r.buffer;\n };\n}\n\nexport type TypedArray =\n | Uint8Array\n | Uint8ClampedArray\n | Uint16Array\n | Uint32Array\n | Int8Array\n | Int16Array\n | Int32Array\n | BigUint64Array\n | BigInt64Array\n | Float32Array\n | Float64Array;\n\ntype ArrayBufferViewConstructor<T> = new (buffer: ArrayBufferLike, byteOffset?: number, byteLength?: number) => T;\n\nconst hexLookupTable = (function () {\n const alphabet = '0123456789abcdef';\n const table = new Array(256);\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16;\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j];\n }\n }\n return table;\n})();\n\ndeclare global {\n interface ArrayBuffer {\n resize?: (newByteLength: number) => void;\n resizable?: boolean;\n }\n\n interface SharedArrayBuffer {\n resize?: (newByteLength: number) => void;\n resizable?: boolean;\n }\n\n interface Uint8Array {\n toBase64(): string;\n\n toHex(): string;\n }\n\n interface Uint8ArrayConstructor {\n fromBase64(v: string): Uint8Array;\n\n fromHex(v: string): Uint8Array;\n }\n}\n"],"names":["classOf","getGlobalThis","decodeBase64ToArrayBuffer","encodeArrayBufferToBase64","isBuffer","ArrayBuffers","nativeBufferAllowed","isBufferAvailable","isNativeBufferAvailable","Buffer","isPollyfill","isNativeBufferAllowed","setNativeBufferAllowed","v","isArrayBuffer","ArrayBuffer","toArrayBuffer","buffer","toUint8Array","asView","Uint8Array","toBase64","prototype","from","toString","toHex","fromBase64","fromHex","resize","newByteLength","maxByteLength","undefined","resizable","old","newBuf","oldView","newView","set","slice","o","start","end","call","TypedArray","byteOffset","byteLength","isView","buf","encoding","btoa","Error","view","map","b","hexLookupTable","join","TextDecoder","decode","String","fromCharCode","res","i","length","toJSON","reviver","JSON","parse","alloc","size","fill","TextEncoder","encode","replace","match","byte","parseInt","Array","isArray","type","TypeError","isEncoding","toLowerCase","concat","buffers","result","offset","reduce","a","r","n","alphabet","table","i16","j"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
package/lib/io/ByteBuffer.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { isDefined } from '../langs/isDefined.js';
|
|
2
1
|
import { ArrayBuffers } from './ArrayBuffers.js';
|
|
3
2
|
function asBuffer(o) {
|
|
4
3
|
if (o instanceof ArrayBuffer) {
|
|
@@ -60,19 +59,11 @@ function asBuffer(o) {
|
|
|
60
59
|
}
|
|
61
60
|
willWrite(length) {
|
|
62
61
|
if (this.remaining() < length) {
|
|
63
|
-
this.resize(this.
|
|
62
|
+
this.resize(this.position + length);
|
|
64
63
|
}
|
|
65
64
|
}
|
|
66
65
|
resize(newLength) {
|
|
67
|
-
|
|
68
|
-
let buf = this.buffer;
|
|
69
|
-
if (buf.resize && (!isDefined(buf.resizable) || buf.resizable)) {
|
|
70
|
-
buf.resize(newLength);
|
|
71
|
-
} else {
|
|
72
|
-
let newBuffer = new ArrayBuffer(newLength);
|
|
73
|
-
new Uint8Array(newBuffer).set(new Uint8Array(buf));
|
|
74
|
-
this.buffer = newBuffer;
|
|
75
|
-
}
|
|
66
|
+
this.buffer = ArrayBuffers.resize(this.buffer, newLength, Math.ceil(newLength * 1.2));
|
|
76
67
|
}
|
|
77
68
|
writeByte(value) {
|
|
78
69
|
this.willWrite(1);
|
|
@@ -82,7 +73,7 @@ function asBuffer(o) {
|
|
|
82
73
|
this.willWrite(len);
|
|
83
74
|
if (len !== bytes.byteLength) bytes = bytes.slice(0, len);
|
|
84
75
|
new Uint8Array(this.buffer).set(new Uint8Array(bytes), this.position);
|
|
85
|
-
this.position +=
|
|
76
|
+
this.position += len;
|
|
86
77
|
}
|
|
87
78
|
writeInt8(value) {
|
|
88
79
|
this.willWrite(1);
|
|
@@ -282,7 +273,7 @@ function asBuffer(o) {
|
|
|
282
273
|
return this.readFloat64();
|
|
283
274
|
}
|
|
284
275
|
remaining() {
|
|
285
|
-
return this.
|
|
276
|
+
return this.length - this.position;
|
|
286
277
|
}
|
|
287
278
|
toUint8Array() {
|
|
288
279
|
return new Uint8Array(this.buffer);
|
package/lib/io/ByteBuffer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/io/ByteBuffer.ts"],"sourcesContent":["import { isDefined } from '../langs/isDefined';\nimport { ArrayBuffers } from './ArrayBuffers';\n\ntype AnyBuffer = BufferSource | ArrayBufferLike;\n\nfunction asBuffer(o: AnyBuffer) {\n if (o instanceof ArrayBuffer) {\n return o;\n }\n if (ArrayBuffer.isView(o)) {\n // 保留 offset&length\n if (o.byteLength !== o.buffer.byteLength) {\n // ArrayBuffer 没有 subarray\n // if ('subarray' in o.buffer) {\n // return (o.buffer as any).subarray(o.byteOffset, o.byteOffset + o.byteLength);\n // }\n return o.buffer.slice(o.byteOffset, o.byteOffset + o.byteLength);\n }\n return o.buffer;\n }\n return o;\n}\n\n// function asView(o: AnyBuffer) {\n// if (o instanceof DataView) {\n// return o;\n// }\n// if (ArrayBuffer.isView(o)) {\n// // 不 clone 也能保留 offset&length\n// return new DataView(o.buffer, o.byteOffset, o.byteLength);\n// }\n// return new DataView(o);\n// }\n\n/**\n * @see {@link https://www.egret.uk/docs/egretengine/engine/egret.ByteArray egret.ByteArray}\n * @see {@link https://github.com/protobufjs/bytebuffer.js protobufjs/bytebuffer.js}\n * @see {@link https://netty.io/4.1/api/io/netty/buffer/ByteBuf.html ByteBuf}\n */\nexport class ByteBuffer {\n position = 0;\n\n #buffer: ArrayBufferLike;\n #view: DataView;\n\n constructor(buffer: AnyBuffer = new ArrayBuffer(0, { maxByteLength: 1024 })) {\n this.#buffer = asBuffer(buffer);\n // NOTE prefer view over buffer, avoid the slice overhead ?\n this.#view = new DataView(this.#buffer);\n }\n\n get view() {\n return this.#view;\n }\n\n get buffer(): ArrayBufferLike {\n return this.#buffer;\n }\n\n set buffer(buffer: AnyBuffer) {\n this.#buffer = asBuffer(buffer);\n this.#view = new DataView(this.#buffer);\n }\n\n get length() {\n return this.view.byteLength;\n }\n\n set length(length: number) {\n this.resize(length);\n }\n\n private willWrite(length: number) {\n if (this.remaining() < length) {\n this.resize(this.length + length);\n }\n }\n\n resize(newLength: number) {\n // Chrome 111, Nodejs 20\n let buf = this.buffer;\n if (buf.resize && (!isDefined(buf.resizable) || buf.resizable)) {\n buf.resize(newLength);\n } else {\n let newBuffer = new ArrayBuffer(newLength);\n new Uint8Array(newBuffer).set(new Uint8Array(buf));\n this.buffer = newBuffer;\n }\n }\n\n writeByte(value: number) {\n this.willWrite(1);\n this.view.setUint8(this.position++, value);\n }\n\n writeBytes(bytes: ArrayBufferLike, len: number = bytes.byteLength) {\n this.willWrite(len);\n if (len !== bytes.byteLength) bytes = bytes.slice(0, len);\n new Uint8Array(this.buffer).set(new Uint8Array(bytes), this.position);\n this.position += bytes.byteLength;\n }\n\n writeInt8(value: number) {\n this.willWrite(1);\n this.view.setInt8(this.position, value);\n this.position += 1;\n }\n\n writeUint8(value: number) {\n this.willWrite(1);\n this.view.setUint8(this.position, value);\n this.position += 1;\n }\n\n writeInt16(value: number) {\n this.willWrite(2);\n this.view.setInt16(this.position, value);\n this.position += 2;\n }\n\n writeUint16(value: number) {\n this.willWrite(2);\n this.view.setUint16(this.position, value);\n this.position += 2;\n }\n\n writeInt32(value: number) {\n this.willWrite(4);\n this.view.setInt32(this.position, value);\n this.position += 4;\n }\n\n writeUint32(value: number) {\n this.willWrite(4);\n this.view.setUint32(this.position, value);\n this.position += 4;\n }\n\n writeInt64(value: bigint) {\n this.willWrite(8);\n this.view.setBigInt64(this.position, value);\n this.position += 8;\n }\n\n writeUint64(value: bigint) {\n this.willWrite(8);\n this.view.setBigUint64(this.position, value);\n this.position += 8;\n }\n\n writeFloat32(value: number) {\n this.willWrite(4);\n this.view.setFloat32(this.position, value);\n this.position += 4;\n }\n\n writeFloat64(value: number) {\n this.willWrite(8);\n this.view.setFloat64(this.position, value);\n this.position += 8;\n }\n\n writeBoolean(value: boolean) {\n this.writeByte(value ? 1 : 0);\n }\n\n writeString(value: string): void;\n writeString(value: string, len?: number): void;\n writeString(value: string, len?: number) {\n let encoder = new TextEncoder();\n let bytes = encoder.encode(value);\n this.writeBytes(bytes, len);\n }\n\n readByte() {\n return this.view.getUint8(this.position++);\n }\n\n readBytes(length: number) {\n let bytes = this.buffer.slice(this.position, this.position + length);\n this.position += length;\n return bytes;\n }\n\n readInt8() {\n let value = this.view.getInt8(this.position);\n this.position += 1;\n return value;\n }\n\n readUint8() {\n let value = this.view.getUint8(this.position);\n this.position += 1;\n return value;\n }\n\n readInt16() {\n let value = this.view.getInt16(this.position);\n this.position += 2;\n return value;\n }\n\n readUint16() {\n let value = this.view.getUint16(this.position);\n this.position += 2;\n return value;\n }\n\n readInt32() {\n let value = this.view.getInt32(this.position);\n this.position += 4;\n return value;\n }\n\n readUint32() {\n let value = this.view.getUint32(this.position);\n this.position += 4;\n return value;\n }\n\n readInt64() {\n let value = this.view.getBigInt64(this.position);\n this.position += 8;\n return safeNumber(value);\n }\n\n readUint64() {\n let value = this.view.getBigUint64(this.position);\n this.position += 8;\n return safeNumber(value);\n }\n\n readFloat32() {\n let value = this.view.getFloat32(this.position);\n this.position += 4;\n return value;\n }\n\n readFloat64() {\n let value = this.view.getFloat64(this.position);\n this.position += 8;\n return value;\n }\n\n readBoolean() {\n return this.readByte() === 1;\n }\n\n readString(length: number) {\n let bytes = this.readBytes(length);\n let decoder = new TextDecoder();\n let a = new Uint8Array(bytes);\n let idx = a.indexOf(0);\n if (idx !== -1) {\n bytes = bytes.slice(0, idx);\n }\n return decoder.decode(bytes);\n }\n\n readHexString(length: number) {\n let bytes = this.readBytes(length);\n return ArrayBuffers.toHex(bytes);\n }\n\n writeInt24(value: number) {\n this.writeUint8(value & 0xff);\n this.writeUint16(value >> 8);\n }\n\n readInt24() {\n return this.readUint8() | (this.readUint16() << 8);\n }\n\n writeZero(length: number) {\n this.writeBytes(new Uint8Array(length).buffer);\n }\n\n writeValue(typ: TypedValue['type'], val: TypedValue['value']): void;\n writeValue(tv: TypedValue): void;\n writeValue(a: any, b?: any) {\n const tv: TypedValue = typeof a === 'string' ? { type: a, value: b } : a;\n const { type, value, length } = tv;\n switch (type) {\n case 'uint8':\n this.writeUint8(value);\n break;\n case 'byte':\n case 'int8':\n this.writeInt8(value);\n break;\n case 'uint16':\n this.writeUint16(value);\n break;\n case 'int16':\n this.writeInt16(value);\n break;\n case 'uint32':\n this.writeUint32(value);\n break;\n case 'int32':\n this.writeInt32(value);\n break;\n case 'float32':\n this.writeFloat32(value);\n break;\n case 'float64':\n this.writeFloat64(value);\n break;\n case 'string':\n this.writeString(value, length);\n break;\n case 'boolean':\n this.writeBoolean(value);\n break;\n case 'bytes':\n this.writeBytes(value);\n break;\n default:\n throw new Error(`Unknown type ${type}`);\n }\n }\n\n readInt() {\n return this.readInt32();\n }\n\n readFloat() {\n return this.readFloat32();\n }\n\n readDouble() {\n return this.readFloat64();\n }\n\n remaining() {\n return this.view.byteLength - this.position;\n }\n\n toUint8Array() {\n return new Uint8Array(this.buffer);\n }\n\n toHex() {\n return ArrayBuffers.toHex(this.buffer);\n }\n\n toBase64() {\n return ArrayBuffers.toBase64(this.buffer);\n }\n}\n\nexport interface TypedValue {\n type:\n | 'byte'\n | 'bytes'\n | 'uint8'\n | 'int8'\n | 'uint16'\n | 'int16'\n | 'uint32'\n | 'int32'\n | 'float32'\n | 'float64'\n | 'string'\n | 'boolean';\n value: any;\n length?: number;\n}\n\nfunction safeNumber(n: bigint) {\n if (n > Number.MAX_SAFE_INTEGER) {\n return n;\n }\n return Number(n);\n}\n"],"names":["isDefined","ArrayBuffers","asBuffer","o","ArrayBuffer","isView","byteLength","buffer","slice","byteOffset","ByteBuffer","position","view","constructor","maxByteLength","DataView","length","resize","willWrite","remaining","newLength","buf","resizable","newBuffer","Uint8Array","set","writeByte","value","setUint8","writeBytes","bytes","len","writeInt8","setInt8","writeUint8","writeInt16","setInt16","writeUint16","setUint16","writeInt32","setInt32","writeUint32","setUint32","writeInt64","setBigInt64","writeUint64","setBigUint64","writeFloat32","setFloat32","writeFloat64","setFloat64","writeBoolean","writeString","encoder","TextEncoder","encode","readByte","getUint8","readBytes","readInt8","getInt8","readUint8","readInt16","getInt16","readUint16","getUint16","readInt32","getInt32","readUint32","getUint32","readInt64","getBigInt64","safeNumber","readUint64","getBigUint64","readFloat32","getFloat32","readFloat64","getFloat64","readBoolean","readString","decoder","TextDecoder","a","idx","indexOf","decode","readHexString","toHex","writeInt24","readInt24","writeZero","writeValue","b","tv","type","Error","readInt","readFloat","readDouble","toUint8Array","toBase64","n","Number","MAX_SAFE_INTEGER"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/io/ByteBuffer.ts"],"sourcesContent":["import { ArrayBuffers } from './ArrayBuffers';\n\ntype AnyBuffer = BufferSource | ArrayBufferLike;\n\nfunction asBuffer(o: AnyBuffer) {\n if (o instanceof ArrayBuffer) {\n return o;\n }\n if (ArrayBuffer.isView(o)) {\n // 保留 offset&length\n if (o.byteLength !== o.buffer.byteLength) {\n // ArrayBuffer 没有 subarray\n // if ('subarray' in o.buffer) {\n // return (o.buffer as any).subarray(o.byteOffset, o.byteOffset + o.byteLength);\n // }\n return o.buffer.slice(o.byteOffset, o.byteOffset + o.byteLength);\n }\n return o.buffer;\n }\n return o;\n}\n\n// function asView(o: AnyBuffer) {\n// if (o instanceof DataView) {\n// return o;\n// }\n// if (ArrayBuffer.isView(o)) {\n// // 不 clone 也能保留 offset&length\n// return new DataView(o.buffer, o.byteOffset, o.byteLength);\n// }\n// return new DataView(o);\n// }\n\n/**\n * @see {@link https://www.egret.uk/docs/egretengine/engine/egret.ByteArray egret.ByteArray}\n * @see {@link https://github.com/protobufjs/bytebuffer.js protobufjs/bytebuffer.js}\n * @see {@link https://netty.io/4.1/api/io/netty/buffer/ByteBuf.html ByteBuf}\n */\nexport class ByteBuffer {\n position = 0;\n\n #buffer: ArrayBufferLike;\n #view: DataView;\n\n constructor(buffer: AnyBuffer = new ArrayBuffer(0, { maxByteLength: 1024 })) {\n this.#buffer = asBuffer(buffer);\n // NOTE prefer view over buffer, avoid the slice overhead ?\n this.#view = new DataView(this.#buffer);\n }\n\n get view() {\n return this.#view;\n }\n\n get buffer(): ArrayBufferLike {\n return this.#buffer;\n }\n\n set buffer(buffer: AnyBuffer) {\n this.#buffer = asBuffer(buffer);\n this.#view = new DataView(this.#buffer);\n }\n\n get length() {\n return this.view.byteLength;\n }\n\n set length(length: number) {\n this.resize(length);\n }\n\n private willWrite(length: number) {\n if (this.remaining() < length) {\n this.resize(this.position + length);\n }\n }\n\n resize(newLength: number) {\n this.buffer = ArrayBuffers.resize(this.buffer, newLength, Math.ceil(newLength * 1.2));\n }\n\n writeByte(value: number) {\n this.willWrite(1);\n this.view.setUint8(this.position++, value);\n }\n\n writeBytes(bytes: ArrayBufferLike, len: number = bytes.byteLength) {\n this.willWrite(len);\n if (len !== bytes.byteLength) bytes = bytes.slice(0, len);\n new Uint8Array(this.buffer).set(new Uint8Array(bytes), this.position);\n this.position += len;\n }\n\n writeInt8(value: number) {\n this.willWrite(1);\n this.view.setInt8(this.position, value);\n this.position += 1;\n }\n\n writeUint8(value: number) {\n this.willWrite(1);\n this.view.setUint8(this.position, value);\n this.position += 1;\n }\n\n writeInt16(value: number) {\n this.willWrite(2);\n this.view.setInt16(this.position, value);\n this.position += 2;\n }\n\n writeUint16(value: number) {\n this.willWrite(2);\n this.view.setUint16(this.position, value);\n this.position += 2;\n }\n\n writeInt32(value: number) {\n this.willWrite(4);\n this.view.setInt32(this.position, value);\n this.position += 4;\n }\n\n writeUint32(value: number) {\n this.willWrite(4);\n this.view.setUint32(this.position, value);\n this.position += 4;\n }\n\n writeInt64(value: bigint) {\n this.willWrite(8);\n this.view.setBigInt64(this.position, value);\n this.position += 8;\n }\n\n writeUint64(value: bigint) {\n this.willWrite(8);\n this.view.setBigUint64(this.position, value);\n this.position += 8;\n }\n\n writeFloat32(value: number) {\n this.willWrite(4);\n this.view.setFloat32(this.position, value);\n this.position += 4;\n }\n\n writeFloat64(value: number) {\n this.willWrite(8);\n this.view.setFloat64(this.position, value);\n this.position += 8;\n }\n\n writeBoolean(value: boolean) {\n this.writeByte(value ? 1 : 0);\n }\n\n writeString(value: string): void;\n writeString(value: string, len?: number): void;\n writeString(value: string, len?: number) {\n let encoder = new TextEncoder();\n let bytes = encoder.encode(value);\n this.writeBytes(bytes, len);\n }\n\n readByte() {\n return this.view.getUint8(this.position++);\n }\n\n readBytes(length: number) {\n let bytes = this.buffer.slice(this.position, this.position + length);\n this.position += length;\n return bytes;\n }\n\n readInt8() {\n let value = this.view.getInt8(this.position);\n this.position += 1;\n return value;\n }\n\n readUint8() {\n let value = this.view.getUint8(this.position);\n this.position += 1;\n return value;\n }\n\n readInt16() {\n let value = this.view.getInt16(this.position);\n this.position += 2;\n return value;\n }\n\n readUint16() {\n let value = this.view.getUint16(this.position);\n this.position += 2;\n return value;\n }\n\n readInt32() {\n let value = this.view.getInt32(this.position);\n this.position += 4;\n return value;\n }\n\n readUint32() {\n let value = this.view.getUint32(this.position);\n this.position += 4;\n return value;\n }\n\n readInt64() {\n let value = this.view.getBigInt64(this.position);\n this.position += 8;\n return safeNumber(value);\n }\n\n readUint64() {\n let value = this.view.getBigUint64(this.position);\n this.position += 8;\n return safeNumber(value);\n }\n\n readFloat32() {\n let value = this.view.getFloat32(this.position);\n this.position += 4;\n return value;\n }\n\n readFloat64() {\n let value = this.view.getFloat64(this.position);\n this.position += 8;\n return value;\n }\n\n readBoolean() {\n return this.readByte() === 1;\n }\n\n readString(length: number) {\n let bytes = this.readBytes(length);\n let decoder = new TextDecoder();\n let a = new Uint8Array(bytes);\n let idx = a.indexOf(0);\n if (idx !== -1) {\n bytes = bytes.slice(0, idx);\n }\n return decoder.decode(bytes);\n }\n\n readHexString(length: number) {\n let bytes = this.readBytes(length);\n return ArrayBuffers.toHex(bytes);\n }\n\n writeInt24(value: number) {\n this.writeUint8(value & 0xff);\n this.writeUint16(value >> 8);\n }\n\n readInt24() {\n return this.readUint8() | (this.readUint16() << 8);\n }\n\n writeZero(length: number) {\n this.writeBytes(new Uint8Array(length).buffer);\n }\n\n writeValue(typ: TypedValue['type'], val: TypedValue['value']): void;\n writeValue(tv: TypedValue): void;\n writeValue(a: any, b?: any) {\n const tv: TypedValue = typeof a === 'string' ? { type: a, value: b } : a;\n const { type, value, length } = tv;\n switch (type) {\n case 'uint8':\n this.writeUint8(value);\n break;\n case 'byte':\n case 'int8':\n this.writeInt8(value);\n break;\n case 'uint16':\n this.writeUint16(value);\n break;\n case 'int16':\n this.writeInt16(value);\n break;\n case 'uint32':\n this.writeUint32(value);\n break;\n case 'int32':\n this.writeInt32(value);\n break;\n case 'float32':\n this.writeFloat32(value);\n break;\n case 'float64':\n this.writeFloat64(value);\n break;\n case 'string':\n this.writeString(value, length);\n break;\n case 'boolean':\n this.writeBoolean(value);\n break;\n case 'bytes':\n this.writeBytes(value);\n break;\n default:\n throw new Error(`Unknown type ${type}`);\n }\n }\n\n readInt() {\n return this.readInt32();\n }\n\n readFloat() {\n return this.readFloat32();\n }\n\n readDouble() {\n return this.readFloat64();\n }\n\n remaining() {\n return this.length - this.position;\n }\n\n toUint8Array() {\n return new Uint8Array(this.buffer);\n }\n\n toHex() {\n return ArrayBuffers.toHex(this.buffer);\n }\n\n toBase64() {\n return ArrayBuffers.toBase64(this.buffer);\n }\n}\n\nexport interface TypedValue {\n type:\n | 'byte'\n | 'bytes'\n | 'uint8'\n | 'int8'\n | 'uint16'\n | 'int16'\n | 'uint32'\n | 'int32'\n | 'float32'\n | 'float64'\n | 'string'\n | 'boolean';\n value: any;\n length?: number;\n}\n\nfunction safeNumber(n: bigint) {\n if (n > Number.MAX_SAFE_INTEGER) {\n return n;\n }\n return Number(n);\n}\n"],"names":["ArrayBuffers","asBuffer","o","ArrayBuffer","isView","byteLength","buffer","slice","byteOffset","ByteBuffer","position","view","constructor","maxByteLength","DataView","length","resize","willWrite","remaining","newLength","Math","ceil","writeByte","value","setUint8","writeBytes","bytes","len","Uint8Array","set","writeInt8","setInt8","writeUint8","writeInt16","setInt16","writeUint16","setUint16","writeInt32","setInt32","writeUint32","setUint32","writeInt64","setBigInt64","writeUint64","setBigUint64","writeFloat32","setFloat32","writeFloat64","setFloat64","writeBoolean","writeString","encoder","TextEncoder","encode","readByte","getUint8","readBytes","readInt8","getInt8","readUint8","readInt16","getInt16","readUint16","getUint16","readInt32","getInt32","readUint32","getUint32","readInt64","getBigInt64","safeNumber","readUint64","getBigUint64","readFloat32","getFloat32","readFloat64","getFloat64","readBoolean","readString","decoder","TextDecoder","a","idx","indexOf","decode","readHexString","toHex","writeInt24","readInt24","writeZero","writeValue","b","tv","type","Error","readInt","readFloat","readDouble","toUint8Array","toBase64","n","Number","MAX_SAFE_INTEGER"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
package/lib/maths/random.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/maths/random.ts"],"sourcesContent":["/// javascript pseudo random\nexport function createRandom(o: { seed?: string | number } = {}) {\n let seed = typeof o.seed === 'string' ? 0 : o.seed ?? 0;\n if (typeof o.seed === 'string') {\n let sum = 0;\n for (let i = 0; i < o.seed.length; i++) {\n sum += o.seed.charCodeAt(i);\n }\n seed = sum;\n }\n\n return () => {\n const x = Math.sin(seed++) * 10000;\n return x - Math.floor(x);\n };\n}\n"],"names":["createRandom","o","seed","sum","i","length","charCodeAt","x","Math","sin","floor"],"rangeMappings":";;;;;;;;;;;;;;","mappings":"AAAA,4BAA4B;AAC5B,OAAO,SAASA,aAAaC,IAAgC,CAAC,CAAC;IAC7D,IAAIC,OAAO,OAAOD,EAAEC,IAAI,KAAK,WAAW,
|
|
1
|
+
{"version":3,"sources":["../../src/maths/random.ts"],"sourcesContent":["/// javascript pseudo random\nexport function createRandom(o: { seed?: string | number } = {}) {\n let seed = typeof o.seed === 'string' ? 0 : (o.seed ?? 0);\n if (typeof o.seed === 'string') {\n let sum = 0;\n for (let i = 0; i < o.seed.length; i++) {\n sum += o.seed.charCodeAt(i);\n }\n seed = sum;\n }\n\n return () => {\n const x = Math.sin(seed++) * 10000;\n return x - Math.floor(x);\n };\n}\n"],"names":["createRandom","o","seed","sum","i","length","charCodeAt","x","Math","sin","floor"],"rangeMappings":";;;;;;;;;;;;;;","mappings":"AAAA,4BAA4B;AAC5B,OAAO,SAASA,aAAaC,IAAgC,CAAC,CAAC;IAC7D,IAAIC,OAAO,OAAOD,EAAEC,IAAI,KAAK,WAAW,IAAKD,EAAEC,IAAI,IAAI;IACvD,IAAI,OAAOD,EAAEC,IAAI,KAAK,UAAU;QAC9B,IAAIC,MAAM;QACV,IAAK,IAAIC,IAAI,GAAGA,IAAIH,EAAEC,IAAI,CAACG,MAAM,EAAED,IAAK;YACtCD,OAAOF,EAAEC,IAAI,CAACI,UAAU,CAACF;QAC3B;QACAF,OAAOC;IACT;IAEA,OAAO;QACL,MAAMI,IAAIC,KAAKC,GAAG,CAACP,UAAU;QAC7B,OAAOK,IAAIC,KAAKE,KAAK,CAACH;IACxB;AACF"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mitt: Tiny (~200b) functional event emitter / pubsub.
|
|
3
|
+
* @name createEmitter
|
|
4
|
+
* @returns {Emitter}
|
|
5
|
+
*/ export default function createEmitter(all) {
|
|
6
|
+
all = all || new Map();
|
|
7
|
+
let evt;
|
|
8
|
+
return evt = {
|
|
9
|
+
/**
|
|
10
|
+
* A Map of event names to registered handler functions.
|
|
11
|
+
*/ all,
|
|
12
|
+
on (type, handler) {
|
|
13
|
+
const handlers = all.get(type);
|
|
14
|
+
if (handlers) {
|
|
15
|
+
handlers.push(handler);
|
|
16
|
+
} else {
|
|
17
|
+
all.set(type, [
|
|
18
|
+
handler
|
|
19
|
+
]);
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
once (type, handler) {
|
|
23
|
+
let fn = handler;
|
|
24
|
+
handler = (...args)=>{
|
|
25
|
+
evt.off(type, fn);
|
|
26
|
+
fn(...args);
|
|
27
|
+
};
|
|
28
|
+
const handlers = all.get(type);
|
|
29
|
+
if (handlers) {
|
|
30
|
+
handlers.push(handler);
|
|
31
|
+
} else {
|
|
32
|
+
all.set(type, [
|
|
33
|
+
handler
|
|
34
|
+
]);
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
off (type, handler) {
|
|
38
|
+
const handlers = all.get(type);
|
|
39
|
+
if (handlers) {
|
|
40
|
+
if (handler) {
|
|
41
|
+
handlers.splice(handlers.indexOf(handler) >>> 0, 1);
|
|
42
|
+
} else {
|
|
43
|
+
all.set(type, []);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
/**
|
|
48
|
+
* Invoke all handlers for the given type.
|
|
49
|
+
* If present, `'*'` handlers are invoked after type-matched handlers.
|
|
50
|
+
*
|
|
51
|
+
* Note: Manually firing '*' handlers is not supported.
|
|
52
|
+
*
|
|
53
|
+
* @param {string|symbol} type The event type to invoke
|
|
54
|
+
* @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler
|
|
55
|
+
* @memberOf createEmitter
|
|
56
|
+
*/ emit (type, evt) {
|
|
57
|
+
let handlers = all.get(type);
|
|
58
|
+
let ctx = {
|
|
59
|
+
type,
|
|
60
|
+
event: evt
|
|
61
|
+
};
|
|
62
|
+
if (handlers) {
|
|
63
|
+
handlers.slice().map((handler)=>{
|
|
64
|
+
handler(ctx);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
handlers = all.get('*');
|
|
68
|
+
if (handlers) {
|
|
69
|
+
handlers.slice().map((handler)=>{
|
|
70
|
+
handler(ctx);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/mitt/index.ts"],"sourcesContent":["export type EventType = string | symbol;\n\ntype EventPayload<T = EventType, E = unknown> = { type: T; event: E };\n\nexport type Handler<T = EventType, E = unknown> = (evt: { type: T; event: E }) => void;\n\n// An array of all currently registered event handlers for a type\nexport type EventHandlerList<T = unknown> = Array<Handler<EventType, T>>;\n\n// A map of event types and their corresponding event handlers.\nexport type EventHandlerMap<Events extends Record<EventType, unknown>> = Map<\n keyof Events | '*',\n EventHandlerList<Events[keyof Events]>\n>;\n\nexport interface Emitter<Events extends Record<EventType, unknown>> {\n all: EventHandlerMap<Events>;\n\n on<Key extends keyof Events>(type: Key, handler: Handler<Key, Events[Key]>): void;\n\n on(type: '*', handler: Handler<Events>): void;\n\n once<Key extends keyof Events>(type: Key, handler: Handler<Key, Events[Key]>): void;\n\n once(type: '*', handler: Handler<Events>): void;\n\n off<Key extends keyof Events>(type: Key, handler?: Handler<Key, Events[Key]>): void;\n\n off(type: '*', handler: Handler<Events>): void;\n\n emit<Key extends keyof Events>(type: Key, event: Events[Key]): void;\n\n emit<Key extends keyof Events>(type: undefined extends Events[Key] ? Key : never): void;\n}\n\n/**\n * Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name createEmitter\n * @returns {Emitter}\n */\nexport default function createEmitter<Events extends Record<EventType, unknown>>(\n all?: EventHandlerMap<Events>,\n): Emitter<Events> {\n type GenericEventHandler = Handler<EventType, Events[keyof Events]>;\n all = all || new Map();\n let evt: Emitter<Events>;\n return (evt = {\n /**\n * A Map of event names to registered handler functions.\n */\n all,\n\n on(type: EventType, handler: GenericEventHandler) {\n const handlers: Array<GenericEventHandler> | undefined = all!.get(type);\n if (handlers) {\n handlers.push(handler);\n } else {\n all!.set(type, [handler]);\n }\n },\n\n once(type: EventType, handler: GenericEventHandler) {\n let fn = handler;\n handler = (...args) => {\n evt.off(type, fn);\n fn(...args);\n };\n const handlers: Array<GenericEventHandler> | undefined = all!.get(type);\n if (handlers) {\n handlers.push(handler);\n } else {\n all!.set(type, [handler]);\n }\n },\n\n off(type: EventType, handler?: GenericEventHandler) {\n const handlers: Array<GenericEventHandler> | undefined = all!.get(type);\n if (handlers) {\n if (handler) {\n handlers.splice(handlers.indexOf(handler) >>> 0, 1);\n } else {\n all!.set(type, []);\n }\n }\n },\n\n /**\n * Invoke all handlers for the given type.\n * If present, `'*'` handlers are invoked after type-matched handlers.\n *\n * Note: Manually firing '*' handlers is not supported.\n *\n * @param {string|symbol} type The event type to invoke\n * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n * @memberOf createEmitter\n */\n emit(type: EventType, evt?: any) {\n let handlers = all!.get(type);\n let ctx: EventPayload = { type, event: evt };\n if (handlers) {\n (handlers as EventHandlerList).slice().map((handler) => {\n handler(ctx);\n });\n }\n\n handlers = all!.get('*');\n if (handlers) {\n (handlers as EventHandlerList).slice().map((handler) => {\n handler(ctx);\n });\n }\n },\n } as Emitter<Events>);\n}\n"],"names":["createEmitter","all","Map","evt","on","type","handler","handlers","get","push","set","once","fn","args","off","splice","indexOf","emit","ctx","event","slice","map"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAmCA;;;;CAIC,GACD,eAAe,SAASA,cACtBC,GAA6B;IAG7BA,MAAMA,OAAO,IAAIC;IACjB,IAAIC;IACJ,OAAQA,MAAM;QACZ;;KAEC,GACDF;QAEAG,IAAGC,IAAe,EAAEC,OAA4B;YAC9C,MAAMC,WAAmDN,IAAKO,GAAG,CAACH;YAClE,IAAIE,UAAU;gBACZA,SAASE,IAAI,CAACH;YAChB,OAAO;gBACLL,IAAKS,GAAG,CAACL,MAAM;oBAACC;iBAAQ;YAC1B;QACF;QAEAK,MAAKN,IAAe,EAAEC,OAA4B;YAChD,IAAIM,KAAKN;YACTA,UAAU,CAAC,GAAGO;gBACZV,IAAIW,GAAG,CAACT,MAAMO;gBACdA,MAAMC;YACR;YACA,MAAMN,WAAmDN,IAAKO,GAAG,CAACH;YAClE,IAAIE,UAAU;gBACZA,SAASE,IAAI,CAACH;YAChB,OAAO;gBACLL,IAAKS,GAAG,CAACL,MAAM;oBAACC;iBAAQ;YAC1B;QACF;QAEAQ,KAAIT,IAAe,EAAEC,OAA6B;YAChD,MAAMC,WAAmDN,IAAKO,GAAG,CAACH;YAClE,IAAIE,UAAU;gBACZ,IAAID,SAAS;oBACXC,SAASQ,MAAM,CAACR,SAASS,OAAO,CAACV,aAAa,GAAG;gBACnD,OAAO;oBACLL,IAAKS,GAAG,CAACL,MAAM,EAAE;gBACnB;YACF;QACF;QAEA;;;;;;;;;KASC,GACDY,MAAKZ,IAAe,EAAEF,GAAS;YAC7B,IAAII,WAAWN,IAAKO,GAAG,CAACH;YACxB,IAAIa,MAAoB;gBAAEb;gBAAMc,OAAOhB;YAAI;YAC3C,IAAII,UAAU;gBACXA,SAA8Ba,KAAK,GAAGC,GAAG,CAAC,CAACf;oBAC1CA,QAAQY;gBACV;YACF;YAEAX,WAAWN,IAAKO,GAAG,CAAC;YACpB,IAAID,UAAU;gBACXA,SAA8Ba,KAAK,GAAGC,GAAG,CAAC,CAACf;oBAC1CA,QAAQY;gBACV;YACF;QACF;IACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/objects/computeIfAbsent.ts"],"sourcesContent":["export function computeIfAbsent<K, V>(map: Map<K, V>, key: K, fn: () => V): V;\nexport function computeIfAbsent<K extends string | symbol | number, V>(map: Record<K, V>, key: K, fn: () => V): V;\nexport function computeIfAbsent
|
|
1
|
+
{"version":3,"sources":["../../src/objects/computeIfAbsent.ts"],"sourcesContent":["export function computeIfAbsent<K extends WeakKey, V>(map: WeakMap<K, V>, key: K, fn: () => V): V;\nexport function computeIfAbsent<K, V>(map: Map<K, V>, key: K, fn: () => V): V;\nexport function computeIfAbsent<K extends string | symbol | number, V>(map: Record<K, V>, key: K, fn: () => V): V;\nexport function computeIfAbsent(map: any, key: any, fn: () => any): any {\n if (map instanceof Map || map instanceof WeakMap) {\n if (!map.has(key)) {\n map.set(key, fn());\n }\n return map.get(key)!;\n }\n\n if (!map[key]) {\n map[key] = fn();\n }\n return map[key];\n}\n"],"names":["computeIfAbsent","map","key","fn","Map","WeakMap","has","set","get"],"rangeMappings":";;;;;;;;;;;","mappings":"AAGA,OAAO,SAASA,gBAAgBC,GAAQ,EAAEC,GAAQ,EAAEC,EAAa;IAC/D,IAAIF,eAAeG,OAAOH,eAAeI,SAAS;QAChD,IAAI,CAACJ,IAAIK,GAAG,CAACJ,MAAM;YACjBD,IAAIM,GAAG,CAACL,KAAKC;QACf;QACA,OAAOF,IAAIO,GAAG,CAACN;IACjB;IAEA,IAAI,CAACD,GAAG,CAACC,IAAI,EAAE;QACbD,GAAG,CAACC,IAAI,GAAGC;IACb;IACA,OAAOF,GAAG,CAACC,IAAI;AACjB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wener/utils",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.48",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Utils for daily use",
|
|
6
6
|
"repository": {
|
|
@@ -69,23 +69,15 @@
|
|
|
69
69
|
"template",
|
|
70
70
|
"lodash"
|
|
71
71
|
],
|
|
72
|
-
"peerDependencies": {
|
|
73
|
-
"undici": "*"
|
|
74
|
-
},
|
|
75
|
-
"peerDependenciesMeta": {
|
|
76
|
-
"undici": {
|
|
77
|
-
"optional": true
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
72
|
"devDependencies": {
|
|
81
|
-
"@sinclair/typebox": "^0.32.
|
|
82
|
-
"@types/lodash": "^4.17.
|
|
83
|
-
"@types/ws": "^8.5.
|
|
73
|
+
"@sinclair/typebox": "^0.32.35",
|
|
74
|
+
"@types/lodash": "^4.17.7",
|
|
75
|
+
"@types/ws": "^8.5.12",
|
|
84
76
|
"@wener/utils": "link:",
|
|
85
|
-
"https-proxy-agent": "^7.0.
|
|
77
|
+
"https-proxy-agent": "^7.0.5",
|
|
86
78
|
"lodash": "^4.17.21",
|
|
87
79
|
"node-fetch": "^3.3.2",
|
|
88
|
-
"undici": "^6.
|
|
80
|
+
"undici": "^6.19.5",
|
|
89
81
|
"zod": "^3.23.8"
|
|
90
82
|
},
|
|
91
83
|
"publishConfig": {
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A collection of utility functions for working with Promises.
|
|
3
|
+
*/
|
|
4
|
+
export class Promises {
|
|
5
|
+
/**
|
|
6
|
+
* Creates a new Promise and returns it in an object, along with its resolve and reject functions.
|
|
7
|
+
* @returns An object with the properties `promise`, `resolve`, and `reject`.
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* const { promise, resolve, reject } = Promise.withResolvers<T>();
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* - Chrome 119, Safari 17.4
|
|
14
|
+
*
|
|
15
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers
|
|
16
|
+
*/
|
|
17
|
+
static withResolvers<T>(): PromiseWithResolvers<T> {
|
|
18
|
+
if ('withResolvers' in Promise) {
|
|
19
|
+
return Promise['withResolvers']() as any;
|
|
20
|
+
}
|
|
21
|
+
let resolve: (value: T | PromiseLike<T>) => void;
|
|
22
|
+
let reject: (reason?: any) => void;
|
|
23
|
+
// @ts-ignore
|
|
24
|
+
const promise = new Promise<T>((res, rej) => {
|
|
25
|
+
resolve = res;
|
|
26
|
+
reject = rej;
|
|
27
|
+
});
|
|
28
|
+
return { promise, resolve: resolve!, reject: reject! };
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Creates a new Promise and returns it in an object, along with its resolve and reject functions.
|
|
33
|
+
* @param ms The number of milliseconds to wait before rejecting the promise.
|
|
34
|
+
*/
|
|
35
|
+
static sleep(ms: number): Promise<void> {
|
|
36
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Returns `true` if the given value is a Promise.
|
|
41
|
+
* @param v The value to check.
|
|
42
|
+
*/
|
|
43
|
+
static isPromise<T>(v: any): v is Promise<T> {
|
|
44
|
+
return v && (v instanceof Promise || (v.then && v.catch));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
interface PromiseWithResolvers<T> {
|
|
49
|
+
promise: Promise<T>;
|
|
50
|
+
resolve: (value: T | PromiseLike<T>) => void;
|
|
51
|
+
reject: (reason?: any) => void;
|
|
52
|
+
}
|
package/src/asyncs/isPromise.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { Promises } from './Promises';
|
|
2
|
+
|
|
3
|
+
export const isPromise = Promises.isPromise;
|
|
@@ -39,14 +39,8 @@ const DivisionCodeLevels = [
|
|
|
39
39
|
*
|
|
40
40
|
* @see https://zh.wikipedia.org/wiki/GB/T_2260 中华人民共和国行政区划代码
|
|
41
41
|
*/
|
|
42
|
-
export class
|
|
43
|
-
static
|
|
44
|
-
|
|
45
|
-
private static instance: DivisionCode;
|
|
46
|
-
|
|
47
|
-
static get() {
|
|
48
|
-
return this.instance || (this.instance = new DivisionCode());
|
|
49
|
-
}
|
|
42
|
+
export class DivisionCodeFormat {
|
|
43
|
+
static levels = DivisionCodeLevels;
|
|
50
44
|
|
|
51
45
|
regex = /^(?<province>\d{2})(?<city>\d{2})?(?<county>\d{2})?(?<town>\d{3})?(?<village>\d{3})?$/;
|
|
52
46
|
|
|
@@ -87,6 +81,63 @@ export class DivisionCode {
|
|
|
87
81
|
[82, '澳门特别行政区'],
|
|
88
82
|
// 9 国外
|
|
89
83
|
];
|
|
84
|
+
|
|
85
|
+
parse(code: string) {
|
|
86
|
+
if (!code) return;
|
|
87
|
+
const { regex } = this;
|
|
88
|
+
const match = regex.exec(code);
|
|
89
|
+
if (!match) return;
|
|
90
|
+
const { province, city, county, town, village } = match.groups ?? {};
|
|
91
|
+
if (!province) return;
|
|
92
|
+
|
|
93
|
+
return {
|
|
94
|
+
province,
|
|
95
|
+
city,
|
|
96
|
+
county,
|
|
97
|
+
town,
|
|
98
|
+
village,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
interface DivisionTreeNode {
|
|
104
|
+
sub: string; // sub code
|
|
105
|
+
children?: Record<string, DivisionTreeNode>;
|
|
106
|
+
|
|
107
|
+
code: string; // full code
|
|
108
|
+
name?: string; // name of division
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export type DivisionCodeLevel = 'Village' | 'Town' | 'County' | 'City' | 'Province';
|
|
112
|
+
|
|
113
|
+
export interface ParsedDivisionCode {
|
|
114
|
+
level: DivisionCodeLevel;
|
|
115
|
+
code: string;
|
|
116
|
+
name?: string;
|
|
117
|
+
fullName?: string;
|
|
118
|
+
names: string[];
|
|
119
|
+
// 村级(村委会、居委会)
|
|
120
|
+
// 12 位
|
|
121
|
+
village?: CodeName;
|
|
122
|
+
// 乡级(乡镇、街道)
|
|
123
|
+
// 9 位
|
|
124
|
+
town?: CodeName;
|
|
125
|
+
// 县级(区县)
|
|
126
|
+
// 6 位 - 常用 - 2985 个
|
|
127
|
+
county?: CodeName;
|
|
128
|
+
// 地级(城市)
|
|
129
|
+
// 4 位 - 343 个
|
|
130
|
+
city?: CodeName;
|
|
131
|
+
// 省级(省份、直辖市、自治区)
|
|
132
|
+
// 2 位 - 32 个
|
|
133
|
+
province: CodeName;
|
|
134
|
+
|
|
135
|
+
children?: Array<{ code: string; name?: string }>;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export interface CodeName {
|
|
139
|
+
code: string;
|
|
140
|
+
name: string;
|
|
90
141
|
}
|
|
91
142
|
|
|
92
143
|
// export function getSimpleProvinceLabel(value: string) {
|
|
@@ -100,3 +151,5 @@ export class DivisionCode {
|
|
|
100
151
|
// }
|
|
101
152
|
// return label.replace(/省|市|(回族|维吾尔|壮族)?自治区|特别行政区$/, '');
|
|
102
153
|
// }
|
|
154
|
+
|
|
155
|
+
export const DivisionCode = new DivisionCodeFormat();
|
|
@@ -3,13 +3,8 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export class Mod11Checksum {
|
|
5
5
|
weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1];
|
|
6
|
-
private static instance: Mod11Checksum;
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
return this.instance || (this.instance = new Mod11Checksum());
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
verify(s: string) {
|
|
7
|
+
validate(s: string) {
|
|
13
8
|
return s.at(-1) === this.generate(s.slice(0, s.length - 1));
|
|
14
9
|
}
|
|
15
10
|
|
|
@@ -27,3 +22,5 @@ export class Mod11Checksum {
|
|
|
27
22
|
}
|
|
28
23
|
}
|
|
29
24
|
}
|
|
25
|
+
|
|
26
|
+
export const Mod11 = new Mod11Checksum();
|