add some util methods
This commit is contained in:
parent
ab2c91df1a
commit
b982e43cd7
2
dist/common/SyncLocker.cjs.map
vendored
2
dist/common/SyncLocker.cjs.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/common/SyncLocker.ts","../../src/decorators/singleton.ts","../../src/common/ZError.ts"],"sourcesContent":["import { singleton } from 'decorators/singleton'\nimport { ZError } from './ZError'\n\ninterface IRequest {\n method: string\n url: string\n user?: {\n id: string\n }\n}\n\n@singleton\nexport class SyncLocker {\n map: Map<string, boolean> = new Map()\n\n public lock(req: IRequest) {\n const key = `${req.method}:${req.url}:${req.user?.id || ''}`\n if (this.map.has(key)) {\n return false\n }\n this.map.set(key, true)\n return true\n }\n\n public unlock(req: IRequest) {\n const key = `${req.method}:${req.url}:${req.user?.id || ''}`\n this.map.delete(key)\n }\n\n public checkLock(req: IRequest) {\n const key = `${req.method}:${req.url}:${req.user?.id || ''}`\n if (this.map.has(key)) {\n throw new ZError(100, 'request too fast')\n }\n this.lock(req)\n return true\n }\n\n public isLocked(req: IRequest) {\n const key = `${req.method}:${req.url}:${req.user?.id || ''}`\n return this.map.has(key)\n }\n}\n","/**\n * 单例化一个class\n * 使用方法:\n * @singleton\n * class Test {}\n * new Test() === new Test() // returns `true`\n * 也可以不使用 decorator\n * const TestSingleton = singleton(Test)\n * new TestSingleton() === new TestSingleton() //returns 'true'\n */\n\nexport const SINGLETON_KEY = Symbol()\n\nexport type Singleton<T extends new (...args: any[]) => any> = T & {\n [SINGLETON_KEY]: T extends new (...args: any[]) => infer I ? I : never\n}\nexport const singleton = <T extends new (...args: any[]) => any>(classTarget: T) =>\n new Proxy(classTarget, {\n construct(target: Singleton<T>, argumentsList, newTarget) {\n // Skip proxy for children\n if (target.prototype !== newTarget.prototype) {\n return Reflect.construct(target, argumentsList, newTarget)\n }\n if (!target[SINGLETON_KEY]) {\n target[SINGLETON_KEY] = Reflect.construct(target, argumentsList, newTarget)\n }\n return target[SINGLETON_KEY]\n },\n })\n","\nexport class ZError implements Error {\n code: string\n statusCode?: number\n message: string\n name: string\n\n constructor(statusCode: number, message: string) {\n this.statusCode = statusCode\n this.message = message\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACWO,IAAM,gBAAgB,OAAO;AAK7B,IAAM,YAAY,CAAwC,gBAC/D,IAAI,MAAM,aAAa;AAAA,EACrB,UAAU,QAAsB,eAAe,WAAW;AAExD,QAAI,OAAO,cAAc,UAAU,WAAW;AAC5C,aAAO,QAAQ,UAAU,QAAQ,eAAe,SAAS;AAAA,IAC3D;AACA,QAAI,CAAC,OAAO,aAAa,GAAG;AAC1B,aAAO,aAAa,IAAI,QAAQ,UAAU,QAAQ,eAAe,SAAS;AAAA,IAC5E;AACA,WAAO,OAAO,aAAa;AAAA,EAC7B;AACF,CAAC;;;AC3BI,IAAM,SAAN,MAA8B;AAAA,EAMnC,YAAY,YAAoB,SAAiB;AAC/C,SAAK,aAAa;AAClB,SAAK,UAAU;AAAA,EACjB;AACF;;;AFCO,IAAM,aAAN,MAAiB;AAAA,EAAjB;AACL,eAA4B,oBAAI,IAAI;AAAA;AAAA,EAE7B,KAAK,KAAe;AACzB,UAAM,MAAM,GAAG,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,MAAM,EAAE;AAC1D,QAAI,KAAK,IAAI,IAAI,GAAG,GAAG;AACrB,aAAO;AAAA,IACT;AACA,SAAK,IAAI,IAAI,KAAK,IAAI;AACtB,WAAO;AAAA,EACT;AAAA,EAEO,OAAO,KAAe;AAC3B,UAAM,MAAM,GAAG,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,MAAM,EAAE;AAC1D,SAAK,IAAI,OAAO,GAAG;AAAA,EACrB;AAAA,EAEO,UAAU,KAAe;AAC9B,UAAM,MAAM,GAAG,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,MAAM,EAAE;AAC1D,QAAI,KAAK,IAAI,IAAI,GAAG,GAAG;AACrB,YAAM,IAAI,OAAO,KAAK,kBAAkB;AAAA,IAC1C;AACA,SAAK,KAAK,GAAG;AACb,WAAO;AAAA,EACT;AAAA,EAEO,SAAS,KAAe;AAC7B,UAAM,MAAM,GAAG,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,MAAM,EAAE;AAC1D,WAAO,KAAK,IAAI,IAAI,GAAG;AAAA,EACzB;AACF;AA9Ba,aAAN;AAAA,EADN;AAAA,GACY;","names":[]}
|
||||
{"version":3,"sources":["../../src/common/SyncLocker.ts","../../src/decorators/singleton.ts","../../src/common/ZError.ts"],"sourcesContent":["import { singleton } from 'decorators/singleton'\nimport { ZError } from './ZError'\n\ninterface IRequest {\n method: string\n url: string\n user?: {\n id: string\n }\n}\n\n@singleton\nexport class SyncLocker {\n map: Map<string, boolean> = new Map()\n\n public lock(req: IRequest) {\n const key = `${req.method}:${req.url}:${req.user?.id || ''}`\n if (this.map.has(key)) {\n return false\n }\n this.map.set(key, true)\n return true\n }\n\n public unlock(req: IRequest) {\n const key = `${req.method}:${req.url}:${req.user?.id || ''}`\n this.map.delete(key)\n }\n\n public checkLock(req: IRequest) {\n const key = `${req.method}:${req.url}:${req.user?.id || ''}`\n if (this.map.has(key)) {\n throw new ZError(100, 'request too fast')\n }\n this.lock(req)\n return true\n }\n\n public isLocked(req: IRequest) {\n const key = `${req.method}:${req.url}:${req.user?.id || ''}`\n return this.map.has(key)\n }\n}\n","/**\n * 单例化一个class\n * 使用方法:\n * @singleton\n * class Test {}\n * new Test() === new Test() // returns `true`\n * 也可以不使用 decorator\n * const TestSingleton = singleton(Test)\n * new TestSingleton() === new TestSingleton() //returns 'true'\n */\n\nexport const SINGLETON_KEY = Symbol()\n\nexport type Singleton<T extends new (...args: any[]) => any> = T & {\n [SINGLETON_KEY]: T extends new (...args: any[]) => infer I ? I : never\n}\nexport const singleton = <T extends new (...args: any[]) => any>(classTarget: T) =>\n new Proxy(classTarget, {\n construct(target: Singleton<T>, argumentsList, newTarget) {\n // Skip proxy for children\n if (target.prototype !== newTarget.prototype) {\n return Reflect.construct(target, argumentsList, newTarget)\n }\n if (!target[SINGLETON_KEY]) {\n target[SINGLETON_KEY] = Reflect.construct(target, argumentsList, newTarget)\n }\n return target[SINGLETON_KEY]\n },\n })\n","export class ZError implements Error {\n code: string\n statusCode?: number\n message: string\n name: string\n\n constructor(statusCode: number, message: string) {\n this.statusCode = statusCode\n this.message = message\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACWO,IAAM,gBAAgB,OAAO;AAK7B,IAAM,YAAY,CAAwC,gBAC/D,IAAI,MAAM,aAAa;AAAA,EACrB,UAAU,QAAsB,eAAe,WAAW;AAExD,QAAI,OAAO,cAAc,UAAU,WAAW;AAC5C,aAAO,QAAQ,UAAU,QAAQ,eAAe,SAAS;AAAA,IAC3D;AACA,QAAI,CAAC,OAAO,aAAa,GAAG;AAC1B,aAAO,aAAa,IAAI,QAAQ,UAAU,QAAQ,eAAe,SAAS;AAAA,IAC5E;AACA,WAAO,OAAO,aAAa;AAAA,EAC7B;AACF,CAAC;;;AC5BI,IAAM,SAAN,MAA8B;AAAA,EAMnC,YAAY,YAAoB,SAAiB;AAC/C,SAAK,aAAa;AAClB,SAAK,UAAU;AAAA,EACjB;AACF;;;AFEO,IAAM,aAAN,MAAiB;AAAA,EAAjB;AACL,eAA4B,oBAAI,IAAI;AAAA;AAAA,EAE7B,KAAK,KAAe;AACzB,UAAM,MAAM,GAAG,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,MAAM,EAAE;AAC1D,QAAI,KAAK,IAAI,IAAI,GAAG,GAAG;AACrB,aAAO;AAAA,IACT;AACA,SAAK,IAAI,IAAI,KAAK,IAAI;AACtB,WAAO;AAAA,EACT;AAAA,EAEO,OAAO,KAAe;AAC3B,UAAM,MAAM,GAAG,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,MAAM,EAAE;AAC1D,SAAK,IAAI,OAAO,GAAG;AAAA,EACrB;AAAA,EAEO,UAAU,KAAe;AAC9B,UAAM,MAAM,GAAG,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,MAAM,EAAE;AAC1D,QAAI,KAAK,IAAI,IAAI,GAAG,GAAG;AACrB,YAAM,IAAI,OAAO,KAAK,kBAAkB;AAAA,IAC1C;AACA,SAAK,KAAK,GAAG;AACb,WAAO;AAAA,EACT;AAAA,EAEO,SAAS,KAAe;AAC7B,UAAM,MAAM,GAAG,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,MAAM,EAAE;AAC1D,WAAO,KAAK,IAAI,IAAI,GAAG;AAAA,EACzB;AACF;AA9Ba,aAAN;AAAA,EADN;AAAA,GACY;","names":[]}
|
2
dist/common/SyncLocker.js.map
vendored
2
dist/common/SyncLocker.js.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/decorators/singleton.ts","../../src/common/ZError.ts","../../src/common/SyncLocker.ts"],"sourcesContent":["/**\n * 单例化一个class\n * 使用方法:\n * @singleton\n * class Test {}\n * new Test() === new Test() // returns `true`\n * 也可以不使用 decorator\n * const TestSingleton = singleton(Test)\n * new TestSingleton() === new TestSingleton() //returns 'true'\n */\n\nexport const SINGLETON_KEY = Symbol()\n\nexport type Singleton<T extends new (...args: any[]) => any> = T & {\n [SINGLETON_KEY]: T extends new (...args: any[]) => infer I ? I : never\n}\nexport const singleton = <T extends new (...args: any[]) => any>(classTarget: T) =>\n new Proxy(classTarget, {\n construct(target: Singleton<T>, argumentsList, newTarget) {\n // Skip proxy for children\n if (target.prototype !== newTarget.prototype) {\n return Reflect.construct(target, argumentsList, newTarget)\n }\n if (!target[SINGLETON_KEY]) {\n target[SINGLETON_KEY] = Reflect.construct(target, argumentsList, newTarget)\n }\n return target[SINGLETON_KEY]\n },\n })\n","\nexport class ZError implements Error {\n code: string\n statusCode?: number\n message: string\n name: string\n\n constructor(statusCode: number, message: string) {\n this.statusCode = statusCode\n this.message = message\n }\n}\n","import { singleton } from 'decorators/singleton'\nimport { ZError } from './ZError'\n\ninterface IRequest {\n method: string\n url: string\n user?: {\n id: string\n }\n}\n\n@singleton\nexport class SyncLocker {\n map: Map<string, boolean> = new Map()\n\n public lock(req: IRequest) {\n const key = `${req.method}:${req.url}:${req.user?.id || ''}`\n if (this.map.has(key)) {\n return false\n }\n this.map.set(key, true)\n return true\n }\n\n public unlock(req: IRequest) {\n const key = `${req.method}:${req.url}:${req.user?.id || ''}`\n this.map.delete(key)\n }\n\n public checkLock(req: IRequest) {\n const key = `${req.method}:${req.url}:${req.user?.id || ''}`\n if (this.map.has(key)) {\n throw new ZError(100, 'request too fast')\n }\n this.lock(req)\n return true\n }\n\n public isLocked(req: IRequest) {\n const key = `${req.method}:${req.url}:${req.user?.id || ''}`\n return this.map.has(key)\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAWO,IAAM,gBAAgB,OAAO;AAK7B,IAAM,YAAY,CAAwC,gBAC/D,IAAI,MAAM,aAAa;AAAA,EACrB,UAAU,QAAsB,eAAe,WAAW;AAExD,QAAI,OAAO,cAAc,UAAU,WAAW;AAC5C,aAAO,QAAQ,UAAU,QAAQ,eAAe,SAAS;AAAA,IAC3D;AACA,QAAI,CAAC,OAAO,aAAa,GAAG;AAC1B,aAAO,aAAa,IAAI,QAAQ,UAAU,QAAQ,eAAe,SAAS;AAAA,IAC5E;AACA,WAAO,OAAO,aAAa;AAAA,EAC7B;AACF,CAAC;;;AC3BI,IAAM,SAAN,MAA8B;AAAA,EAMnC,YAAY,YAAoB,SAAiB;AAC/C,SAAK,aAAa;AAClB,SAAK,UAAU;AAAA,EACjB;AACF;;;ACCO,IAAM,aAAN,MAAiB;AAAA,EAAjB;AACL,eAA4B,oBAAI,IAAI;AAAA;AAAA,EAE7B,KAAK,KAAe;AACzB,UAAM,MAAM,GAAG,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,MAAM,EAAE;AAC1D,QAAI,KAAK,IAAI,IAAI,GAAG,GAAG;AACrB,aAAO;AAAA,IACT;AACA,SAAK,IAAI,IAAI,KAAK,IAAI;AACtB,WAAO;AAAA,EACT;AAAA,EAEO,OAAO,KAAe;AAC3B,UAAM,MAAM,GAAG,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,MAAM,EAAE;AAC1D,SAAK,IAAI,OAAO,GAAG;AAAA,EACrB;AAAA,EAEO,UAAU,KAAe;AAC9B,UAAM,MAAM,GAAG,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,MAAM,EAAE;AAC1D,QAAI,KAAK,IAAI,IAAI,GAAG,GAAG;AACrB,YAAM,IAAI,OAAO,KAAK,kBAAkB;AAAA,IAC1C;AACA,SAAK,KAAK,GAAG;AACb,WAAO;AAAA,EACT;AAAA,EAEO,SAAS,KAAe;AAC7B,UAAM,MAAM,GAAG,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,MAAM,EAAE;AAC1D,WAAO,KAAK,IAAI,IAAI,GAAG;AAAA,EACzB;AACF;AA9Ba,aAAN;AAAA,EADN;AAAA,GACY;","names":[]}
|
||||
{"version":3,"sources":["../../src/decorators/singleton.ts","../../src/common/ZError.ts","../../src/common/SyncLocker.ts"],"sourcesContent":["/**\n * 单例化一个class\n * 使用方法:\n * @singleton\n * class Test {}\n * new Test() === new Test() // returns `true`\n * 也可以不使用 decorator\n * const TestSingleton = singleton(Test)\n * new TestSingleton() === new TestSingleton() //returns 'true'\n */\n\nexport const SINGLETON_KEY = Symbol()\n\nexport type Singleton<T extends new (...args: any[]) => any> = T & {\n [SINGLETON_KEY]: T extends new (...args: any[]) => infer I ? I : never\n}\nexport const singleton = <T extends new (...args: any[]) => any>(classTarget: T) =>\n new Proxy(classTarget, {\n construct(target: Singleton<T>, argumentsList, newTarget) {\n // Skip proxy for children\n if (target.prototype !== newTarget.prototype) {\n return Reflect.construct(target, argumentsList, newTarget)\n }\n if (!target[SINGLETON_KEY]) {\n target[SINGLETON_KEY] = Reflect.construct(target, argumentsList, newTarget)\n }\n return target[SINGLETON_KEY]\n },\n })\n","export class ZError implements Error {\n code: string\n statusCode?: number\n message: string\n name: string\n\n constructor(statusCode: number, message: string) {\n this.statusCode = statusCode\n this.message = message\n }\n}\n","import { singleton } from 'decorators/singleton'\nimport { ZError } from './ZError'\n\ninterface IRequest {\n method: string\n url: string\n user?: {\n id: string\n }\n}\n\n@singleton\nexport class SyncLocker {\n map: Map<string, boolean> = new Map()\n\n public lock(req: IRequest) {\n const key = `${req.method}:${req.url}:${req.user?.id || ''}`\n if (this.map.has(key)) {\n return false\n }\n this.map.set(key, true)\n return true\n }\n\n public unlock(req: IRequest) {\n const key = `${req.method}:${req.url}:${req.user?.id || ''}`\n this.map.delete(key)\n }\n\n public checkLock(req: IRequest) {\n const key = `${req.method}:${req.url}:${req.user?.id || ''}`\n if (this.map.has(key)) {\n throw new ZError(100, 'request too fast')\n }\n this.lock(req)\n return true\n }\n\n public isLocked(req: IRequest) {\n const key = `${req.method}:${req.url}:${req.user?.id || ''}`\n return this.map.has(key)\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAWO,IAAM,gBAAgB,OAAO;AAK7B,IAAM,YAAY,CAAwC,gBAC/D,IAAI,MAAM,aAAa;AAAA,EACrB,UAAU,QAAsB,eAAe,WAAW;AAExD,QAAI,OAAO,cAAc,UAAU,WAAW;AAC5C,aAAO,QAAQ,UAAU,QAAQ,eAAe,SAAS;AAAA,IAC3D;AACA,QAAI,CAAC,OAAO,aAAa,GAAG;AAC1B,aAAO,aAAa,IAAI,QAAQ,UAAU,QAAQ,eAAe,SAAS;AAAA,IAC5E;AACA,WAAO,OAAO,aAAa;AAAA,EAC7B;AACF,CAAC;;;AC5BI,IAAM,SAAN,MAA8B;AAAA,EAMnC,YAAY,YAAoB,SAAiB;AAC/C,SAAK,aAAa;AAClB,SAAK,UAAU;AAAA,EACjB;AACF;;;ACEO,IAAM,aAAN,MAAiB;AAAA,EAAjB;AACL,eAA4B,oBAAI,IAAI;AAAA;AAAA,EAE7B,KAAK,KAAe;AACzB,UAAM,MAAM,GAAG,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,MAAM,EAAE;AAC1D,QAAI,KAAK,IAAI,IAAI,GAAG,GAAG;AACrB,aAAO;AAAA,IACT;AACA,SAAK,IAAI,IAAI,KAAK,IAAI;AACtB,WAAO;AAAA,EACT;AAAA,EAEO,OAAO,KAAe;AAC3B,UAAM,MAAM,GAAG,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,MAAM,EAAE;AAC1D,SAAK,IAAI,OAAO,GAAG;AAAA,EACrB;AAAA,EAEO,UAAU,KAAe;AAC9B,UAAM,MAAM,GAAG,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,MAAM,EAAE;AAC1D,QAAI,KAAK,IAAI,IAAI,GAAG,GAAG;AACrB,YAAM,IAAI,OAAO,KAAK,kBAAkB;AAAA,IAC1C;AACA,SAAK,KAAK,GAAG;AACb,WAAO;AAAA,EACT;AAAA,EAEO,SAAS,KAAe;AAC7B,UAAM,MAAM,GAAG,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,MAAM,EAAE;AAC1D,WAAO,KAAK,IAAI,IAAI,GAAG;AAAA,EACzB;AACF;AA9Ba,aAAN;AAAA,EADN;AAAA,GACY;","names":[]}
|
2
dist/common/ZError.cjs.map
vendored
2
dist/common/ZError.cjs.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/common/ZError.ts"],"sourcesContent":["\nexport class ZError implements Error {\n code: string\n statusCode?: number\n message: string\n name: string\n\n constructor(statusCode: number, message: string) {\n this.statusCode = statusCode\n this.message = message\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACO,IAAM,SAAN,MAA8B;AAAA,EAMnC,YAAY,YAAoB,SAAiB;AAC/C,SAAK,aAAa;AAClB,SAAK,UAAU;AAAA,EACjB;AACF;","names":[]}
|
||||
{"version":3,"sources":["../../src/common/ZError.ts"],"sourcesContent":["export class ZError implements Error {\n code: string\n statusCode?: number\n message: string\n name: string\n\n constructor(statusCode: number, message: string) {\n this.statusCode = statusCode\n this.message = message\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAM,SAAN,MAA8B;AAAA,EAMnC,YAAY,YAAoB,SAAiB;AAC/C,SAAK,aAAa;AAClB,SAAK,UAAU;AAAA,EACjB;AACF;","names":[]}
|
2
dist/common/ZError.js.map
vendored
2
dist/common/ZError.js.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/common/ZError.ts"],"sourcesContent":["\nexport class ZError implements Error {\n code: string\n statusCode?: number\n message: string\n name: string\n\n constructor(statusCode: number, message: string) {\n this.statusCode = statusCode\n this.message = message\n }\n}\n"],"mappings":";AACO,IAAM,SAAN,MAA8B;AAAA,EAMnC,YAAY,YAAoB,SAAiB;AAC/C,SAAK,aAAa;AAClB,SAAK,UAAU;AAAA,EACjB;AACF;","names":[]}
|
||||
{"version":3,"sources":["../../src/common/ZError.ts"],"sourcesContent":["export class ZError implements Error {\n code: string\n statusCode?: number\n message: string\n name: string\n\n constructor(statusCode: number, message: string) {\n this.statusCode = statusCode\n this.message = message\n }\n}\n"],"mappings":";AAAO,IAAM,SAAN,MAA8B;AAAA,EAMnC,YAAY,YAAoB,SAAiB;AAC/C,SAAK,aAAa;AAClB,SAAK,UAAU;AAAA,EACjB;AACF;","names":[]}
|
2
dist/common/base.controller.cjs.map
vendored
2
dist/common/base.controller.cjs.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/common/base.controller.ts"],"sourcesContent":["\nexport const ROLE_ANON = 'anon'\nexport class BaseController {\n\n}\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACO,IAAM,YAAY;AAClB,IAAM,iBAAN,MAAqB;AAE5B;","names":[]}
|
||||
{"version":3,"sources":["../../src/common/base.controller.ts"],"sourcesContent":["export const ROLE_ANON = 'anon'\nexport class BaseController {}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAM,YAAY;AAClB,IAAM,iBAAN,MAAqB;AAAC;","names":[]}
|
2
dist/common/base.controller.js.map
vendored
2
dist/common/base.controller.js.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/common/base.controller.ts"],"sourcesContent":["\nexport const ROLE_ANON = 'anon'\nexport class BaseController {\n\n}\n\n"],"mappings":";AACO,IAAM,YAAY;AAClB,IAAM,iBAAN,MAAqB;AAE5B;","names":[]}
|
||||
{"version":3,"sources":["../../src/common/base.controller.ts"],"sourcesContent":["export const ROLE_ANON = 'anon'\nexport class BaseController {}\n"],"mappings":";AAAO,IAAM,YAAY;AAClB,IAAM,iBAAN,MAAqB;AAAC;","names":[]}
|
2
dist/index.cjs.map
vendored
2
dist/index.cjs.map
vendored
File diff suppressed because one or more lines are too long
2
dist/index.js.map
vendored
2
dist/index.js.map
vendored
File diff suppressed because one or more lines are too long
2
dist/utils/date.util.cjs.map
vendored
2
dist/utils/date.util.cjs.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/utils/date.util.ts"],"sourcesContent":["export const ONE_DAY = 24 * 60 * 60 * 1000\n\n// format the date to the format we want\nexport const formatDate = (date: Date): string => {\n const year = date.getFullYear()\n const month = (date.getMonth() + 1 + '').padStart(2, '0')\n const day = (date.getDate() + '').padStart(2, '0')\n return `${year}${month}${day}`\n}\n\n// get formated datestring of yesterday\nexport const yesterday = (date?: Date) => {\n date = date || new Date()\n date.setDate(date.getDate() - 1)\n return date\n}\n\nexport const nextday = (date?: Date) => {\n date = date || new Date()\n date.setDate(date.getDate() + 1)\n return date\n}\n\n// calc days between two Date\nexport function daysBetween(date1: Date, date2: Date) {\n // hours*minutes*seconds*milliseconds\n const diffInMs = Math.abs(date1.getTime() - date2.getTime())\n const diffInDays = Math.round(diffInMs / ONE_DAY)\n return diffInDays\n}"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAM,UAAU,KAAK,KAAK,KAAK;AAG/B,IAAM,aAAa,CAAC,SAAuB;AAChD,QAAM,OAAO,KAAK,YAAY;AAC9B,QAAM,SAAS,KAAK,SAAS,IAAI,IAAI,IAAI,SAAS,GAAG,GAAG;AACxD,QAAM,OAAO,KAAK,QAAQ,IAAI,IAAI,SAAS,GAAG,GAAG;AACjD,SAAO,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG;AAC9B;AAGO,IAAM,YAAY,CAAC,SAAgB;AACxC,SAAO,QAAQ,oBAAI,KAAK;AACxB,OAAK,QAAQ,KAAK,QAAQ,IAAI,CAAC;AAC/B,SAAO;AACT;AAEO,IAAM,UAAU,CAAC,SAAgB;AACtC,SAAO,QAAQ,oBAAI,KAAK;AACxB,OAAK,QAAQ,KAAK,QAAQ,IAAI,CAAC;AAC/B,SAAO;AACT;AAGO,SAAS,YAAY,OAAa,OAAa;AAEpD,QAAM,WAAW,KAAK,IAAI,MAAM,QAAQ,IAAI,MAAM,QAAQ,CAAC;AAC3D,QAAM,aAAa,KAAK,MAAM,WAAW,OAAO;AAChD,SAAO;AACT;","names":[]}
|
||||
{"version":3,"sources":["../../src/utils/date.util.ts"],"sourcesContent":["export const ONE_DAY = 24 * 60 * 60 * 1000\n\n// format the date to the format we want\nexport const formatDate = (date: Date): string => {\n const year = date.getFullYear()\n const month = (date.getMonth() + 1 + '').padStart(2, '0')\n const day = (date.getDate() + '').padStart(2, '0')\n return `${year}${month}${day}`\n}\n\n// get formated datestring of yesterday\nexport const yesterday = (date?: Date) => {\n date = date || new Date()\n date.setDate(date.getDate() - 1)\n return date\n}\n\nexport const nextday = (date?: Date) => {\n date = date || new Date()\n date.setDate(date.getDate() + 1)\n return date\n}\n\n// calc days between two Date\nexport function daysBetween(date1: Date, date2: Date) {\n // hours*minutes*seconds*milliseconds\n const diffInMs = Math.abs(date1.getTime() - date2.getTime())\n const diffInDays = Math.round(diffInMs / ONE_DAY)\n return diffInDays\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAM,UAAU,KAAK,KAAK,KAAK;AAG/B,IAAM,aAAa,CAAC,SAAuB;AAChD,QAAM,OAAO,KAAK,YAAY;AAC9B,QAAM,SAAS,KAAK,SAAS,IAAI,IAAI,IAAI,SAAS,GAAG,GAAG;AACxD,QAAM,OAAO,KAAK,QAAQ,IAAI,IAAI,SAAS,GAAG,GAAG;AACjD,SAAO,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG;AAC9B;AAGO,IAAM,YAAY,CAAC,SAAgB;AACxC,SAAO,QAAQ,oBAAI,KAAK;AACxB,OAAK,QAAQ,KAAK,QAAQ,IAAI,CAAC;AAC/B,SAAO;AACT;AAEO,IAAM,UAAU,CAAC,SAAgB;AACtC,SAAO,QAAQ,oBAAI,KAAK;AACxB,OAAK,QAAQ,KAAK,QAAQ,IAAI,CAAC;AAC/B,SAAO;AACT;AAGO,SAAS,YAAY,OAAa,OAAa;AAEpD,QAAM,WAAW,KAAK,IAAI,MAAM,QAAQ,IAAI,MAAM,QAAQ,CAAC;AAC3D,QAAM,aAAa,KAAK,MAAM,WAAW,OAAO;AAChD,SAAO;AACT;","names":[]}
|
2
dist/utils/date.util.js.map
vendored
2
dist/utils/date.util.js.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/utils/date.util.ts"],"sourcesContent":["export const ONE_DAY = 24 * 60 * 60 * 1000\n\n// format the date to the format we want\nexport const formatDate = (date: Date): string => {\n const year = date.getFullYear()\n const month = (date.getMonth() + 1 + '').padStart(2, '0')\n const day = (date.getDate() + '').padStart(2, '0')\n return `${year}${month}${day}`\n}\n\n// get formated datestring of yesterday\nexport const yesterday = (date?: Date) => {\n date = date || new Date()\n date.setDate(date.getDate() - 1)\n return date\n}\n\nexport const nextday = (date?: Date) => {\n date = date || new Date()\n date.setDate(date.getDate() + 1)\n return date\n}\n\n// calc days between two Date\nexport function daysBetween(date1: Date, date2: Date) {\n // hours*minutes*seconds*milliseconds\n const diffInMs = Math.abs(date1.getTime() - date2.getTime())\n const diffInDays = Math.round(diffInMs / ONE_DAY)\n return diffInDays\n}"],"mappings":";AAAO,IAAM,UAAU,KAAK,KAAK,KAAK;AAG/B,IAAM,aAAa,CAAC,SAAuB;AAChD,QAAM,OAAO,KAAK,YAAY;AAC9B,QAAM,SAAS,KAAK,SAAS,IAAI,IAAI,IAAI,SAAS,GAAG,GAAG;AACxD,QAAM,OAAO,KAAK,QAAQ,IAAI,IAAI,SAAS,GAAG,GAAG;AACjD,SAAO,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG;AAC9B;AAGO,IAAM,YAAY,CAAC,SAAgB;AACxC,SAAO,QAAQ,oBAAI,KAAK;AACxB,OAAK,QAAQ,KAAK,QAAQ,IAAI,CAAC;AAC/B,SAAO;AACT;AAEO,IAAM,UAAU,CAAC,SAAgB;AACtC,SAAO,QAAQ,oBAAI,KAAK;AACxB,OAAK,QAAQ,KAAK,QAAQ,IAAI,CAAC;AAC/B,SAAO;AACT;AAGO,SAAS,YAAY,OAAa,OAAa;AAEpD,QAAM,WAAW,KAAK,IAAI,MAAM,QAAQ,IAAI,MAAM,QAAQ,CAAC;AAC3D,QAAM,aAAa,KAAK,MAAM,WAAW,OAAO;AAChD,SAAO;AACT;","names":[]}
|
||||
{"version":3,"sources":["../../src/utils/date.util.ts"],"sourcesContent":["export const ONE_DAY = 24 * 60 * 60 * 1000\n\n// format the date to the format we want\nexport const formatDate = (date: Date): string => {\n const year = date.getFullYear()\n const month = (date.getMonth() + 1 + '').padStart(2, '0')\n const day = (date.getDate() + '').padStart(2, '0')\n return `${year}${month}${day}`\n}\n\n// get formated datestring of yesterday\nexport const yesterday = (date?: Date) => {\n date = date || new Date()\n date.setDate(date.getDate() - 1)\n return date\n}\n\nexport const nextday = (date?: Date) => {\n date = date || new Date()\n date.setDate(date.getDate() + 1)\n return date\n}\n\n// calc days between two Date\nexport function daysBetween(date1: Date, date2: Date) {\n // hours*minutes*seconds*milliseconds\n const diffInMs = Math.abs(date1.getTime() - date2.getTime())\n const diffInDays = Math.round(diffInMs / ONE_DAY)\n return diffInDays\n}\n"],"mappings":";AAAO,IAAM,UAAU,KAAK,KAAK,KAAK;AAG/B,IAAM,aAAa,CAAC,SAAuB;AAChD,QAAM,OAAO,KAAK,YAAY;AAC9B,QAAM,SAAS,KAAK,SAAS,IAAI,IAAI,IAAI,SAAS,GAAG,GAAG;AACxD,QAAM,OAAO,KAAK,QAAQ,IAAI,IAAI,SAAS,GAAG,GAAG;AACjD,SAAO,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG;AAC9B;AAGO,IAAM,YAAY,CAAC,SAAgB;AACxC,SAAO,QAAQ,oBAAI,KAAK;AACxB,OAAK,QAAQ,KAAK,QAAQ,IAAI,CAAC;AAC/B,SAAO;AACT;AAEO,IAAM,UAAU,CAAC,SAAgB;AACtC,SAAO,QAAQ,oBAAI,KAAK;AACxB,OAAK,QAAQ,KAAK,QAAQ,IAAI,CAAC;AAC/B,SAAO;AACT;AAGO,SAAS,YAAY,OAAa,OAAa;AAEpD,QAAM,WAAW,KAAK,IAAI,MAAM,QAAQ,IAAI,MAAM,QAAQ,CAAC;AAC3D,QAAM,aAAa,KAAK,MAAM,WAAW,OAAO;AAChD,SAAO;AACT;","names":[]}
|
47
dist/utils/net.util.cjs
vendored
47
dist/utils/net.util.cjs
vendored
@ -22,7 +22,9 @@ __export(net_util_exports, {
|
||||
checkParamsNeeded: () => checkParamsNeeded,
|
||||
fetchWithErrorHandling: () => fetchWithErrorHandling,
|
||||
generateHeader: () => generateHeader,
|
||||
generateKVStr: () => generateKVStr,
|
||||
handleFetch: () => handleFetch,
|
||||
keyValToObject: () => keyValToObject,
|
||||
successfulFetch: () => successfulFetch,
|
||||
timeoutFetch: () => timeoutFetch
|
||||
});
|
||||
@ -124,12 +126,57 @@ var checkParamsNeeded = (...args) => {
|
||||
}
|
||||
});
|
||||
};
|
||||
function generateKVStr({
|
||||
data = {},
|
||||
sort = false,
|
||||
encode = false,
|
||||
ignoreNull = true,
|
||||
splitChar = "&",
|
||||
equalChar = "=",
|
||||
uri = ""
|
||||
}) {
|
||||
const keys = Object.keys(data);
|
||||
sort && keys.sort();
|
||||
let result = "";
|
||||
let i = 0;
|
||||
for (let key of keys) {
|
||||
if (ignoreNull && !data[key]) {
|
||||
continue;
|
||||
}
|
||||
if (i++ > 0)
|
||||
result += splitChar;
|
||||
if (encode) {
|
||||
result += `${key}${equalChar}${encodeURIComponent(data[key])}`;
|
||||
} else {
|
||||
result += `${key}${equalChar}${data[key]}`;
|
||||
}
|
||||
}
|
||||
if (uri) {
|
||||
const joinChar = uri.search(/\?/) === -1 ? "?" : "&";
|
||||
result = uri + joinChar + result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function keyValToObject(str, splitChar = "&", equalChar = "=") {
|
||||
let result = {};
|
||||
if (!str) {
|
||||
return result;
|
||||
}
|
||||
let arrs = str.split(splitChar);
|
||||
for (let sub of arrs) {
|
||||
let subArr = sub.split(equalChar);
|
||||
result[subArr[0]] = subArr[1];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
checkParamsNeeded,
|
||||
fetchWithErrorHandling,
|
||||
generateHeader,
|
||||
generateKVStr,
|
||||
handleFetch,
|
||||
keyValToObject,
|
||||
successfulFetch,
|
||||
timeoutFetch
|
||||
});
|
||||
|
2
dist/utils/net.util.cjs.map
vendored
2
dist/utils/net.util.cjs.map
vendored
File diff suppressed because one or more lines are too long
26
dist/utils/net.util.d.cts
vendored
26
dist/utils/net.util.d.cts
vendored
@ -48,5 +48,29 @@ declare function generateHeader(): {
|
||||
'Content-Type': string;
|
||||
};
|
||||
declare const checkParamsNeeded: (...args: any[]) => void;
|
||||
/**
|
||||
* 生成 key1=val1&key2=val2的字符串
|
||||
* @param {object} data 需要处理的对象
|
||||
* @param {boolean} sort 是否按key生序重排
|
||||
* @param {boolean} ignoreNull 是否过滤空值(空格或者null值不参与拼接)
|
||||
* @param splitChar 连接的字符, 默认是&
|
||||
* @param equalChar =
|
||||
*/
|
||||
declare function generateKVStr({ data, sort, encode, ignoreNull, splitChar, equalChar, uri, }: {
|
||||
data?: any;
|
||||
sort?: boolean;
|
||||
encode?: boolean;
|
||||
ignoreNull?: boolean;
|
||||
splitChar?: string;
|
||||
equalChar?: string;
|
||||
uri?: string;
|
||||
}): string;
|
||||
/**
|
||||
* 将key1=val&key2=val的字符串组装成对象
|
||||
* @param str key1=val&key2=val的字符串
|
||||
* @param splitChar 连接的字符, 默认是&
|
||||
* @param equalChar =
|
||||
*/
|
||||
declare function keyValToObject(str: string, splitChar?: string, equalChar?: string): {};
|
||||
|
||||
export { checkParamsNeeded, fetchWithErrorHandling, generateHeader, handleFetch, successfulFetch, timeoutFetch };
|
||||
export { checkParamsNeeded, fetchWithErrorHandling, generateHeader, generateKVStr, handleFetch, keyValToObject, successfulFetch, timeoutFetch };
|
||||
|
26
dist/utils/net.util.d.ts
vendored
26
dist/utils/net.util.d.ts
vendored
@ -48,5 +48,29 @@ declare function generateHeader(): {
|
||||
'Content-Type': string;
|
||||
};
|
||||
declare const checkParamsNeeded: (...args: any[]) => void;
|
||||
/**
|
||||
* 生成 key1=val1&key2=val2的字符串
|
||||
* @param {object} data 需要处理的对象
|
||||
* @param {boolean} sort 是否按key生序重排
|
||||
* @param {boolean} ignoreNull 是否过滤空值(空格或者null值不参与拼接)
|
||||
* @param splitChar 连接的字符, 默认是&
|
||||
* @param equalChar =
|
||||
*/
|
||||
declare function generateKVStr({ data, sort, encode, ignoreNull, splitChar, equalChar, uri, }: {
|
||||
data?: any;
|
||||
sort?: boolean;
|
||||
encode?: boolean;
|
||||
ignoreNull?: boolean;
|
||||
splitChar?: string;
|
||||
equalChar?: string;
|
||||
uri?: string;
|
||||
}): string;
|
||||
/**
|
||||
* 将key1=val&key2=val的字符串组装成对象
|
||||
* @param str key1=val&key2=val的字符串
|
||||
* @param splitChar 连接的字符, 默认是&
|
||||
* @param equalChar =
|
||||
*/
|
||||
declare function keyValToObject(str: string, splitChar?: string, equalChar?: string): {};
|
||||
|
||||
export { checkParamsNeeded, fetchWithErrorHandling, generateHeader, handleFetch, successfulFetch, timeoutFetch };
|
||||
export { checkParamsNeeded, fetchWithErrorHandling, generateHeader, generateKVStr, handleFetch, keyValToObject, successfulFetch, timeoutFetch };
|
||||
|
45
dist/utils/net.util.js
vendored
45
dist/utils/net.util.js
vendored
@ -94,11 +94,56 @@ var checkParamsNeeded = (...args) => {
|
||||
}
|
||||
});
|
||||
};
|
||||
function generateKVStr({
|
||||
data = {},
|
||||
sort = false,
|
||||
encode = false,
|
||||
ignoreNull = true,
|
||||
splitChar = "&",
|
||||
equalChar = "=",
|
||||
uri = ""
|
||||
}) {
|
||||
const keys = Object.keys(data);
|
||||
sort && keys.sort();
|
||||
let result = "";
|
||||
let i = 0;
|
||||
for (let key of keys) {
|
||||
if (ignoreNull && !data[key]) {
|
||||
continue;
|
||||
}
|
||||
if (i++ > 0)
|
||||
result += splitChar;
|
||||
if (encode) {
|
||||
result += `${key}${equalChar}${encodeURIComponent(data[key])}`;
|
||||
} else {
|
||||
result += `${key}${equalChar}${data[key]}`;
|
||||
}
|
||||
}
|
||||
if (uri) {
|
||||
const joinChar = uri.search(/\?/) === -1 ? "?" : "&";
|
||||
result = uri + joinChar + result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function keyValToObject(str, splitChar = "&", equalChar = "=") {
|
||||
let result = {};
|
||||
if (!str) {
|
||||
return result;
|
||||
}
|
||||
let arrs = str.split(splitChar);
|
||||
for (let sub of arrs) {
|
||||
let subArr = sub.split(equalChar);
|
||||
result[subArr[0]] = subArr[1];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
export {
|
||||
checkParamsNeeded,
|
||||
fetchWithErrorHandling,
|
||||
generateHeader,
|
||||
generateKVStr,
|
||||
handleFetch,
|
||||
keyValToObject,
|
||||
successfulFetch,
|
||||
timeoutFetch
|
||||
};
|
||||
|
2
dist/utils/net.util.js.map
vendored
2
dist/utils/net.util.js.map
vendored
File diff suppressed because one or more lines are too long
93
dist/utils/security.util.cjs
vendored
93
dist/utils/security.util.cjs
vendored
@ -31,21 +31,49 @@ var security_util_exports = {};
|
||||
__export(security_util_exports, {
|
||||
aesDecrypt: () => aesDecrypt,
|
||||
aesEncrypt: () => aesEncrypt,
|
||||
base58ToHex: () => base58ToHex,
|
||||
checkSign: () => checkSign,
|
||||
createSign: () => createSign,
|
||||
genRandomString: () => genRandomString,
|
||||
hexToBase32: () => hexToBase32,
|
||||
hexToBase58: () => hexToBase58,
|
||||
hmac: () => hmac,
|
||||
hmacSha256: () => hmacSha256,
|
||||
md5: () => md5,
|
||||
sha1: () => sha1,
|
||||
sha512: () => sha512
|
||||
sha3_256: () => sha3_256,
|
||||
sha512: () => sha512,
|
||||
shortUuid: () => shortUuid,
|
||||
uuid: () => uuid
|
||||
});
|
||||
module.exports = __toCommonJS(security_util_exports);
|
||||
var import_crypto = __toESM(require("crypto"), 1);
|
||||
var import_crypto_js = __toESM(require("crypto-js"), 1);
|
||||
|
||||
// src/utils/string.util.ts
|
||||
var reNormalUUID = /^[0-9a-fA-F-]{36}$/;
|
||||
var reLongUUID = /^[0-9a-fA-F]{32}$/;
|
||||
var n = /-/g;
|
||||
function compressUuid(e, t = false) {
|
||||
if (reNormalUUID.test(e)) {
|
||||
e = e.replace(n, "");
|
||||
} else if (!reLongUUID.test(e)) {
|
||||
return e;
|
||||
}
|
||||
var r = true === t ? 2 : 5;
|
||||
return compressHex(e, r);
|
||||
}
|
||||
var CHARS_BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
function compressHex(e, r) {
|
||||
var i, n2 = e.length;
|
||||
i = void 0 !== r ? r : n2 % 3;
|
||||
for (var s = e.slice(0, i), o = []; i < n2; ) {
|
||||
var u = parseInt(e[i], 16), a = parseInt(e[i + 1], 16), c = parseInt(e[i + 2], 16);
|
||||
o.push(CHARS_BASE64[u << 2 | a >> 2]);
|
||||
o.push(CHARS_BASE64[(3 & a) << 4 | c]);
|
||||
i += 3;
|
||||
}
|
||||
return s + o.join("");
|
||||
}
|
||||
|
||||
// src/utils/security.util.ts
|
||||
function hmac(input, key, out) {
|
||||
return out ? import_crypto.default.createHmac("sha1", key).update(input).digest(out) : import_crypto.default.createHmac("sha1", key).update(input).digest("hex");
|
||||
}
|
||||
@ -122,57 +150,32 @@ var aesDecrypt = (encryptedDataHexStr, key) => {
|
||||
});
|
||||
return decryptedData.toString(import_crypto_js.default.enc.Utf8);
|
||||
};
|
||||
var base58Alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
||||
var hexToBase58 = (hexString) => {
|
||||
const bytes = hexString.match(/.{1,2}/g).map((byte) => parseInt(byte, 16));
|
||||
let base58String = "";
|
||||
let num = BigInt("0x" + hexString);
|
||||
while (num > BigInt(0)) {
|
||||
const remainder = num % BigInt(58);
|
||||
num = num / BigInt(58);
|
||||
base58String = base58Alphabet[Number(remainder)] + base58String;
|
||||
}
|
||||
return base58String;
|
||||
};
|
||||
var base58ToHex = (base58String) => {
|
||||
const base58Length = base58String.length;
|
||||
let num = BigInt(0);
|
||||
let leadingZeros = 0;
|
||||
for (let i = 0; i < base58Length; i++) {
|
||||
const charIndex = base58Alphabet.indexOf(base58String[i]);
|
||||
if (charIndex === -1) {
|
||||
throw new Error("Invalid Base58 string");
|
||||
}
|
||||
num = num * BigInt(58) + BigInt(charIndex);
|
||||
}
|
||||
return num.toString(16);
|
||||
};
|
||||
var hexToBase32 = (hexString) => {
|
||||
const bytes = hexString.match(/.{1,2}/g).map((byte) => parseInt(byte, 16));
|
||||
const base32Alphabet = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
|
||||
let base32String = "";
|
||||
let num = BigInt("0x" + hexString);
|
||||
while (num > BigInt(0)) {
|
||||
const remainder = num % BigInt(32);
|
||||
num = num / BigInt(32);
|
||||
base32String = base32Alphabet[Number(remainder)] + base32String;
|
||||
}
|
||||
return base32String;
|
||||
};
|
||||
function sha3_256(str) {
|
||||
let hash = import_crypto.default.createHash("sha3-256");
|
||||
hash.update(str);
|
||||
return hash.digest("hex");
|
||||
}
|
||||
function uuid() {
|
||||
return import_crypto.default.randomUUID();
|
||||
}
|
||||
function shortUuid() {
|
||||
let uid = uuid();
|
||||
return compressUuid(uid);
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
aesDecrypt,
|
||||
aesEncrypt,
|
||||
base58ToHex,
|
||||
checkSign,
|
||||
createSign,
|
||||
genRandomString,
|
||||
hexToBase32,
|
||||
hexToBase58,
|
||||
hmac,
|
||||
hmacSha256,
|
||||
md5,
|
||||
sha1,
|
||||
sha512
|
||||
sha3_256,
|
||||
sha512,
|
||||
shortUuid,
|
||||
uuid
|
||||
});
|
||||
//# sourceMappingURL=security.util.cjs.map
|
2
dist/utils/security.util.cjs.map
vendored
2
dist/utils/security.util.cjs.map
vendored
File diff suppressed because one or more lines are too long
8
dist/utils/security.util.d.cts
vendored
8
dist/utils/security.util.d.cts
vendored
@ -16,8 +16,8 @@ declare function checkSign({ secretKey, data, sign, signKeys, }: {
|
||||
}): boolean;
|
||||
declare const aesEncrypt: (plaintText: any, key: any) => any;
|
||||
declare const aesDecrypt: (encryptedDataHexStr: any, key: any) => any;
|
||||
declare const hexToBase58: (hexString: string) => string;
|
||||
declare const base58ToHex: (base58String: string) => string;
|
||||
declare const hexToBase32: (hexString: string) => string;
|
||||
declare function sha3_256(str: string): string;
|
||||
declare function uuid(): `${string}-${string}-${string}-${string}-${string}`;
|
||||
declare function shortUuid(): string;
|
||||
|
||||
export { aesDecrypt, aesEncrypt, base58ToHex, checkSign, createSign, genRandomString, hexToBase32, hexToBase58, hmac, hmacSha256, md5, sha1, sha512 };
|
||||
export { aesDecrypt, aesEncrypt, checkSign, createSign, genRandomString, hmac, hmacSha256, md5, sha1, sha3_256, sha512, shortUuid, uuid };
|
||||
|
8
dist/utils/security.util.d.ts
vendored
8
dist/utils/security.util.d.ts
vendored
@ -16,8 +16,8 @@ declare function checkSign({ secretKey, data, sign, signKeys, }: {
|
||||
}): boolean;
|
||||
declare const aesEncrypt: (plaintText: any, key: any) => any;
|
||||
declare const aesDecrypt: (encryptedDataHexStr: any, key: any) => any;
|
||||
declare const hexToBase58: (hexString: string) => string;
|
||||
declare const base58ToHex: (base58String: string) => string;
|
||||
declare const hexToBase32: (hexString: string) => string;
|
||||
declare function sha3_256(str: string): string;
|
||||
declare function uuid(): `${string}-${string}-${string}-${string}-${string}`;
|
||||
declare function shortUuid(): string;
|
||||
|
||||
export { aesDecrypt, aesEncrypt, base58ToHex, checkSign, createSign, genRandomString, hexToBase32, hexToBase58, hmac, hmacSha256, md5, sha1, sha512 };
|
||||
export { aesDecrypt, aesEncrypt, checkSign, createSign, genRandomString, hmac, hmacSha256, md5, sha1, sha3_256, sha512, shortUuid, uuid };
|
||||
|
85
dist/utils/security.util.js
vendored
85
dist/utils/security.util.js
vendored
@ -1,6 +1,34 @@
|
||||
// src/utils/security.util.ts
|
||||
import crypto from "crypto";
|
||||
import CryptoJS from "crypto-js";
|
||||
|
||||
// src/utils/string.util.ts
|
||||
var reNormalUUID = /^[0-9a-fA-F-]{36}$/;
|
||||
var reLongUUID = /^[0-9a-fA-F]{32}$/;
|
||||
var n = /-/g;
|
||||
function compressUuid(e, t = false) {
|
||||
if (reNormalUUID.test(e)) {
|
||||
e = e.replace(n, "");
|
||||
} else if (!reLongUUID.test(e)) {
|
||||
return e;
|
||||
}
|
||||
var r = true === t ? 2 : 5;
|
||||
return compressHex(e, r);
|
||||
}
|
||||
var CHARS_BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
function compressHex(e, r) {
|
||||
var i, n2 = e.length;
|
||||
i = void 0 !== r ? r : n2 % 3;
|
||||
for (var s = e.slice(0, i), o = []; i < n2; ) {
|
||||
var u = parseInt(e[i], 16), a = parseInt(e[i + 1], 16), c = parseInt(e[i + 2], 16);
|
||||
o.push(CHARS_BASE64[u << 2 | a >> 2]);
|
||||
o.push(CHARS_BASE64[(3 & a) << 4 | c]);
|
||||
i += 3;
|
||||
}
|
||||
return s + o.join("");
|
||||
}
|
||||
|
||||
// src/utils/security.util.ts
|
||||
function hmac(input, key, out) {
|
||||
return out ? crypto.createHmac("sha1", key).update(input).digest(out) : crypto.createHmac("sha1", key).update(input).digest("hex");
|
||||
}
|
||||
@ -77,56 +105,31 @@ var aesDecrypt = (encryptedDataHexStr, key) => {
|
||||
});
|
||||
return decryptedData.toString(CryptoJS.enc.Utf8);
|
||||
};
|
||||
var base58Alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
||||
var hexToBase58 = (hexString) => {
|
||||
const bytes = hexString.match(/.{1,2}/g).map((byte) => parseInt(byte, 16));
|
||||
let base58String = "";
|
||||
let num = BigInt("0x" + hexString);
|
||||
while (num > BigInt(0)) {
|
||||
const remainder = num % BigInt(58);
|
||||
num = num / BigInt(58);
|
||||
base58String = base58Alphabet[Number(remainder)] + base58String;
|
||||
}
|
||||
return base58String;
|
||||
};
|
||||
var base58ToHex = (base58String) => {
|
||||
const base58Length = base58String.length;
|
||||
let num = BigInt(0);
|
||||
let leadingZeros = 0;
|
||||
for (let i = 0; i < base58Length; i++) {
|
||||
const charIndex = base58Alphabet.indexOf(base58String[i]);
|
||||
if (charIndex === -1) {
|
||||
throw new Error("Invalid Base58 string");
|
||||
}
|
||||
num = num * BigInt(58) + BigInt(charIndex);
|
||||
}
|
||||
return num.toString(16);
|
||||
};
|
||||
var hexToBase32 = (hexString) => {
|
||||
const bytes = hexString.match(/.{1,2}/g).map((byte) => parseInt(byte, 16));
|
||||
const base32Alphabet = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
|
||||
let base32String = "";
|
||||
let num = BigInt("0x" + hexString);
|
||||
while (num > BigInt(0)) {
|
||||
const remainder = num % BigInt(32);
|
||||
num = num / BigInt(32);
|
||||
base32String = base32Alphabet[Number(remainder)] + base32String;
|
||||
}
|
||||
return base32String;
|
||||
};
|
||||
function sha3_256(str) {
|
||||
let hash = crypto.createHash("sha3-256");
|
||||
hash.update(str);
|
||||
return hash.digest("hex");
|
||||
}
|
||||
function uuid() {
|
||||
return crypto.randomUUID();
|
||||
}
|
||||
function shortUuid() {
|
||||
let uid = uuid();
|
||||
return compressUuid(uid);
|
||||
}
|
||||
export {
|
||||
aesDecrypt,
|
||||
aesEncrypt,
|
||||
base58ToHex,
|
||||
checkSign,
|
||||
createSign,
|
||||
genRandomString,
|
||||
hexToBase32,
|
||||
hexToBase58,
|
||||
hmac,
|
||||
hmacSha256,
|
||||
md5,
|
||||
sha1,
|
||||
sha512
|
||||
sha3_256,
|
||||
sha512,
|
||||
shortUuid,
|
||||
uuid
|
||||
};
|
||||
//# sourceMappingURL=security.util.js.map
|
2
dist/utils/security.util.js.map
vendored
2
dist/utils/security.util.js.map
vendored
File diff suppressed because one or more lines are too long
102
dist/utils/string.util.cjs
vendored
102
dist/utils/string.util.cjs
vendored
@ -19,41 +19,17 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
||||
// src/utils/string.util.ts
|
||||
var string_util_exports = {};
|
||||
__export(string_util_exports, {
|
||||
generateKeyValStr: () => generateKeyValStr,
|
||||
base58ToHex: () => base58ToHex,
|
||||
compressHex: () => compressHex,
|
||||
compressUuid: () => compressUuid,
|
||||
hexToBase32: () => hexToBase32,
|
||||
hexToBase58: () => hexToBase58,
|
||||
isObjectId: () => isObjectId,
|
||||
isTrue: () => isTrue,
|
||||
keyValToObject: () => keyValToObject,
|
||||
string10to62: () => string10to62,
|
||||
string62to10: () => string62to10
|
||||
});
|
||||
module.exports = __toCommonJS(string_util_exports);
|
||||
function generateKeyValStr(data, ignoreNull = true, splitChar = "&", equalChar = "=") {
|
||||
const keys = Object.keys(data);
|
||||
keys.sort();
|
||||
let result = "";
|
||||
let i = 0;
|
||||
for (let key of keys) {
|
||||
if (ignoreNull && !data[key]) {
|
||||
return;
|
||||
}
|
||||
if (i++ > 0)
|
||||
result += splitChar;
|
||||
result += `${key}${equalChar}${data[key]}`;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function keyValToObject(str, splitChar = "&", equalChar = "=") {
|
||||
let result = {};
|
||||
if (!str) {
|
||||
return result;
|
||||
}
|
||||
let arrs = str.split(splitChar);
|
||||
for (let sub of arrs) {
|
||||
let subArr = sub.split(equalChar);
|
||||
result[subArr[0]] = subArr[1];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function isTrue(obj) {
|
||||
return obj === "true" || obj === "TRUE" || obj === "True" || obj === "on" || obj === "ON" || obj === true || obj === 1 || obj === "1" || obj === "YES" || obj === "yes";
|
||||
}
|
||||
@ -84,12 +60,76 @@ function string62to10(numberCode) {
|
||||
}
|
||||
return originNumber;
|
||||
}
|
||||
var base58Alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
||||
var hexToBase58 = (hexString) => {
|
||||
const bytes = hexString.match(/.{1,2}/g).map((byte) => parseInt(byte, 16));
|
||||
let base58String = "";
|
||||
let num = BigInt("0x" + hexString);
|
||||
while (num > BigInt(0)) {
|
||||
const remainder = num % BigInt(58);
|
||||
num = num / BigInt(58);
|
||||
base58String = base58Alphabet[Number(remainder)] + base58String;
|
||||
}
|
||||
return base58String;
|
||||
};
|
||||
var base58ToHex = (base58String) => {
|
||||
const base58Length = base58String.length;
|
||||
let num = BigInt(0);
|
||||
let leadingZeros = 0;
|
||||
for (let i = 0; i < base58Length; i++) {
|
||||
const charIndex = base58Alphabet.indexOf(base58String[i]);
|
||||
if (charIndex === -1) {
|
||||
throw new Error("Invalid Base58 string");
|
||||
}
|
||||
num = num * BigInt(58) + BigInt(charIndex);
|
||||
}
|
||||
return num.toString(16);
|
||||
};
|
||||
var hexToBase32 = (hexString) => {
|
||||
const bytes = hexString.match(/.{1,2}/g).map((byte) => parseInt(byte, 16));
|
||||
const base32Alphabet = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
|
||||
let base32String = "";
|
||||
let num = BigInt("0x" + hexString);
|
||||
while (num > BigInt(0)) {
|
||||
const remainder = num % BigInt(32);
|
||||
num = num / BigInt(32);
|
||||
base32String = base32Alphabet[Number(remainder)] + base32String;
|
||||
}
|
||||
return base32String;
|
||||
};
|
||||
var reNormalUUID = /^[0-9a-fA-F-]{36}$/;
|
||||
var reLongUUID = /^[0-9a-fA-F]{32}$/;
|
||||
var n = /-/g;
|
||||
function compressUuid(e, t = false) {
|
||||
if (reNormalUUID.test(e)) {
|
||||
e = e.replace(n, "");
|
||||
} else if (!reLongUUID.test(e)) {
|
||||
return e;
|
||||
}
|
||||
var r = true === t ? 2 : 5;
|
||||
return compressHex(e, r);
|
||||
}
|
||||
var CHARS_BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
function compressHex(e, r) {
|
||||
var i, n2 = e.length;
|
||||
i = void 0 !== r ? r : n2 % 3;
|
||||
for (var s = e.slice(0, i), o = []; i < n2; ) {
|
||||
var u = parseInt(e[i], 16), a = parseInt(e[i + 1], 16), c = parseInt(e[i + 2], 16);
|
||||
o.push(CHARS_BASE64[u << 2 | a >> 2]);
|
||||
o.push(CHARS_BASE64[(3 & a) << 4 | c]);
|
||||
i += 3;
|
||||
}
|
||||
return s + o.join("");
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
generateKeyValStr,
|
||||
base58ToHex,
|
||||
compressHex,
|
||||
compressUuid,
|
||||
hexToBase32,
|
||||
hexToBase58,
|
||||
isObjectId,
|
||||
isTrue,
|
||||
keyValToObject,
|
||||
string10to62,
|
||||
string62to10
|
||||
});
|
||||
|
2
dist/utils/string.util.cjs.map
vendored
2
dist/utils/string.util.cjs.map
vendored
File diff suppressed because one or more lines are too long
22
dist/utils/string.util.d.cts
vendored
22
dist/utils/string.util.d.cts
vendored
@ -1,18 +1,3 @@
|
||||
/**
|
||||
* 根据key升序生成 key1=val1&key2=val2的字符串
|
||||
* @param {object} data 需要处理的对象
|
||||
* @param {boolean} ignoreNull 是否过滤空值(空格或者null值不参与拼接)
|
||||
* @param splitChar 连接的字符, 默认是&
|
||||
* @param equalChar =
|
||||
*/
|
||||
declare function generateKeyValStr(data: {}, ignoreNull?: boolean, splitChar?: string, equalChar?: string): string;
|
||||
/**
|
||||
* 将key1=val&key2=val的字符串组装成对象
|
||||
* @param str key1=val&key2=val的字符串
|
||||
* @param splitChar 连接的字符, 默认是&
|
||||
* @param equalChar =
|
||||
*/
|
||||
declare function keyValToObject(str: string, splitChar?: string, equalChar?: string): {};
|
||||
/**
|
||||
* 判断传入的值是否为true
|
||||
* @param {Object} obj 传入值为'true','TRUE',1,'1','on','ON','YES','yes'时,返回true,其他值均返回false
|
||||
@ -37,5 +22,10 @@ declare function string10to62(number: string | number): string;
|
||||
* @return {number}
|
||||
*/
|
||||
declare function string62to10(numberCode: string): number;
|
||||
declare const hexToBase58: (hexString: string) => string;
|
||||
declare const base58ToHex: (base58String: string) => string;
|
||||
declare const hexToBase32: (hexString: string) => string;
|
||||
declare function compressUuid(e: string, t?: boolean): string;
|
||||
declare function compressHex(e: string, r: number): string;
|
||||
|
||||
export { generateKeyValStr, isObjectId, isTrue, keyValToObject, string10to62, string62to10 };
|
||||
export { base58ToHex, compressHex, compressUuid, hexToBase32, hexToBase58, isObjectId, isTrue, string10to62, string62to10 };
|
||||
|
22
dist/utils/string.util.d.ts
vendored
22
dist/utils/string.util.d.ts
vendored
@ -1,18 +1,3 @@
|
||||
/**
|
||||
* 根据key升序生成 key1=val1&key2=val2的字符串
|
||||
* @param {object} data 需要处理的对象
|
||||
* @param {boolean} ignoreNull 是否过滤空值(空格或者null值不参与拼接)
|
||||
* @param splitChar 连接的字符, 默认是&
|
||||
* @param equalChar =
|
||||
*/
|
||||
declare function generateKeyValStr(data: {}, ignoreNull?: boolean, splitChar?: string, equalChar?: string): string;
|
||||
/**
|
||||
* 将key1=val&key2=val的字符串组装成对象
|
||||
* @param str key1=val&key2=val的字符串
|
||||
* @param splitChar 连接的字符, 默认是&
|
||||
* @param equalChar =
|
||||
*/
|
||||
declare function keyValToObject(str: string, splitChar?: string, equalChar?: string): {};
|
||||
/**
|
||||
* 判断传入的值是否为true
|
||||
* @param {Object} obj 传入值为'true','TRUE',1,'1','on','ON','YES','yes'时,返回true,其他值均返回false
|
||||
@ -37,5 +22,10 @@ declare function string10to62(number: string | number): string;
|
||||
* @return {number}
|
||||
*/
|
||||
declare function string62to10(numberCode: string): number;
|
||||
declare const hexToBase58: (hexString: string) => string;
|
||||
declare const base58ToHex: (base58String: string) => string;
|
||||
declare const hexToBase32: (hexString: string) => string;
|
||||
declare function compressUuid(e: string, t?: boolean): string;
|
||||
declare function compressHex(e: string, r: number): string;
|
||||
|
||||
export { generateKeyValStr, isObjectId, isTrue, keyValToObject, string10to62, string62to10 };
|
||||
export { base58ToHex, compressHex, compressUuid, hexToBase32, hexToBase58, isObjectId, isTrue, string10to62, string62to10 };
|
||||
|
95
dist/utils/string.util.js
vendored
95
dist/utils/string.util.js
vendored
@ -1,31 +1,4 @@
|
||||
// src/utils/string.util.ts
|
||||
function generateKeyValStr(data, ignoreNull = true, splitChar = "&", equalChar = "=") {
|
||||
const keys = Object.keys(data);
|
||||
keys.sort();
|
||||
let result = "";
|
||||
let i = 0;
|
||||
for (let key of keys) {
|
||||
if (ignoreNull && !data[key]) {
|
||||
return;
|
||||
}
|
||||
if (i++ > 0)
|
||||
result += splitChar;
|
||||
result += `${key}${equalChar}${data[key]}`;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function keyValToObject(str, splitChar = "&", equalChar = "=") {
|
||||
let result = {};
|
||||
if (!str) {
|
||||
return result;
|
||||
}
|
||||
let arrs = str.split(splitChar);
|
||||
for (let sub of arrs) {
|
||||
let subArr = sub.split(equalChar);
|
||||
result[subArr[0]] = subArr[1];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function isTrue(obj) {
|
||||
return obj === "true" || obj === "TRUE" || obj === "True" || obj === "on" || obj === "ON" || obj === true || obj === 1 || obj === "1" || obj === "YES" || obj === "yes";
|
||||
}
|
||||
@ -56,11 +29,75 @@ function string62to10(numberCode) {
|
||||
}
|
||||
return originNumber;
|
||||
}
|
||||
var base58Alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
||||
var hexToBase58 = (hexString) => {
|
||||
const bytes = hexString.match(/.{1,2}/g).map((byte) => parseInt(byte, 16));
|
||||
let base58String = "";
|
||||
let num = BigInt("0x" + hexString);
|
||||
while (num > BigInt(0)) {
|
||||
const remainder = num % BigInt(58);
|
||||
num = num / BigInt(58);
|
||||
base58String = base58Alphabet[Number(remainder)] + base58String;
|
||||
}
|
||||
return base58String;
|
||||
};
|
||||
var base58ToHex = (base58String) => {
|
||||
const base58Length = base58String.length;
|
||||
let num = BigInt(0);
|
||||
let leadingZeros = 0;
|
||||
for (let i = 0; i < base58Length; i++) {
|
||||
const charIndex = base58Alphabet.indexOf(base58String[i]);
|
||||
if (charIndex === -1) {
|
||||
throw new Error("Invalid Base58 string");
|
||||
}
|
||||
num = num * BigInt(58) + BigInt(charIndex);
|
||||
}
|
||||
return num.toString(16);
|
||||
};
|
||||
var hexToBase32 = (hexString) => {
|
||||
const bytes = hexString.match(/.{1,2}/g).map((byte) => parseInt(byte, 16));
|
||||
const base32Alphabet = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
|
||||
let base32String = "";
|
||||
let num = BigInt("0x" + hexString);
|
||||
while (num > BigInt(0)) {
|
||||
const remainder = num % BigInt(32);
|
||||
num = num / BigInt(32);
|
||||
base32String = base32Alphabet[Number(remainder)] + base32String;
|
||||
}
|
||||
return base32String;
|
||||
};
|
||||
var reNormalUUID = /^[0-9a-fA-F-]{36}$/;
|
||||
var reLongUUID = /^[0-9a-fA-F]{32}$/;
|
||||
var n = /-/g;
|
||||
function compressUuid(e, t = false) {
|
||||
if (reNormalUUID.test(e)) {
|
||||
e = e.replace(n, "");
|
||||
} else if (!reLongUUID.test(e)) {
|
||||
return e;
|
||||
}
|
||||
var r = true === t ? 2 : 5;
|
||||
return compressHex(e, r);
|
||||
}
|
||||
var CHARS_BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
function compressHex(e, r) {
|
||||
var i, n2 = e.length;
|
||||
i = void 0 !== r ? r : n2 % 3;
|
||||
for (var s = e.slice(0, i), o = []; i < n2; ) {
|
||||
var u = parseInt(e[i], 16), a = parseInt(e[i + 1], 16), c = parseInt(e[i + 2], 16);
|
||||
o.push(CHARS_BASE64[u << 2 | a >> 2]);
|
||||
o.push(CHARS_BASE64[(3 & a) << 4 | c]);
|
||||
i += 3;
|
||||
}
|
||||
return s + o.join("");
|
||||
}
|
||||
export {
|
||||
generateKeyValStr,
|
||||
base58ToHex,
|
||||
compressHex,
|
||||
compressUuid,
|
||||
hexToBase32,
|
||||
hexToBase58,
|
||||
isObjectId,
|
||||
isTrue,
|
||||
keyValToObject,
|
||||
string10to62,
|
||||
string62to10
|
||||
};
|
||||
|
2
dist/utils/string.util.js.map
vendored
2
dist/utils/string.util.js.map
vendored
File diff suppressed because one or more lines are too long
@ -146,3 +146,69 @@ export const checkParamsNeeded = (...args) => {
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成 key1=val1&key2=val2的字符串
|
||||
* @param {object} data 需要处理的对象
|
||||
* @param {boolean} sort 是否按key生序重排
|
||||
* @param {boolean} ignoreNull 是否过滤空值(空格或者null值不参与拼接)
|
||||
* @param splitChar 连接的字符, 默认是&
|
||||
* @param equalChar =
|
||||
*/
|
||||
export function generateKVStr({
|
||||
data = {},
|
||||
sort = false,
|
||||
encode = false,
|
||||
ignoreNull = true,
|
||||
splitChar = '&',
|
||||
equalChar = '=',
|
||||
uri = '',
|
||||
}: {
|
||||
data?: any
|
||||
sort?: boolean
|
||||
encode?: boolean
|
||||
ignoreNull?: boolean
|
||||
splitChar?: string
|
||||
equalChar?: string
|
||||
uri?: string
|
||||
}) {
|
||||
const keys = Object.keys(data)
|
||||
sort && keys.sort()
|
||||
let result = ''
|
||||
let i = 0
|
||||
for (let key of keys) {
|
||||
if (ignoreNull && !data[key]) {
|
||||
continue
|
||||
}
|
||||
if (i++ > 0) result += splitChar
|
||||
if (encode) {
|
||||
result += `${key}${equalChar}${encodeURIComponent(data[key])}`
|
||||
} else {
|
||||
result += `${key}${equalChar}${data[key]}`
|
||||
}
|
||||
}
|
||||
if (uri) {
|
||||
const joinChar = uri.search(/\?/) === -1 ? '?' : '&'
|
||||
result = uri + joinChar + result
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* 将key1=val&key2=val的字符串组装成对象
|
||||
* @param str key1=val&key2=val的字符串
|
||||
* @param splitChar 连接的字符, 默认是&
|
||||
* @param equalChar =
|
||||
*/
|
||||
export function keyValToObject(str: string, splitChar: string = '&', equalChar = '='): {} {
|
||||
let result: any = {}
|
||||
if (!str) {
|
||||
return result
|
||||
}
|
||||
let arrs = str.split(splitChar)
|
||||
for (let sub of arrs) {
|
||||
let subArr = sub.split(equalChar)
|
||||
result[subArr[0]] = subArr[1]
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
import crypto from 'crypto'
|
||||
import CryptoJS from 'crypto-js'
|
||||
import { compressUuid } from './string.util'
|
||||
|
||||
export function hmac(input, key, out) {
|
||||
return out
|
||||
@ -106,48 +107,17 @@ export const aesDecrypt = (encryptedDataHexStr, key) => {
|
||||
return decryptedData.toString(CryptoJS.enc.Utf8)
|
||||
}
|
||||
|
||||
const base58Alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
|
||||
|
||||
export const hexToBase58 = (hexString: string) => {
|
||||
const bytes = hexString.match(/.{1,2}/g).map(byte => parseInt(byte, 16))
|
||||
let base58String = ''
|
||||
|
||||
let num = BigInt('0x' + hexString)
|
||||
while (num > BigInt(0)) {
|
||||
const remainder = num % BigInt(58)
|
||||
num = num / BigInt(58)
|
||||
base58String = base58Alphabet[Number(remainder)] + base58String
|
||||
}
|
||||
|
||||
return base58String
|
||||
export function sha3_256(str: string) {
|
||||
let hash = crypto.createHash('sha3-256')
|
||||
hash.update(str)
|
||||
return hash.digest('hex')
|
||||
}
|
||||
|
||||
export const base58ToHex = (base58String: string) => {
|
||||
const base58Length = base58String.length
|
||||
let num = BigInt(0)
|
||||
let leadingZeros = 0
|
||||
for (let i = 0; i < base58Length; i++) {
|
||||
const charIndex = base58Alphabet.indexOf(base58String[i])
|
||||
if (charIndex === -1) {
|
||||
throw new Error('Invalid Base58 string')
|
||||
}
|
||||
|
||||
num = num * BigInt(58) + BigInt(charIndex)
|
||||
}
|
||||
return num.toString(16)
|
||||
export function uuid() {
|
||||
return crypto.randomUUID()
|
||||
}
|
||||
|
||||
export const hexToBase32 = (hexString: string) => {
|
||||
const bytes = hexString.match(/.{1,2}/g).map(byte => parseInt(byte, 16))
|
||||
const base32Alphabet = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'
|
||||
let base32String = ''
|
||||
|
||||
let num = BigInt('0x' + hexString)
|
||||
while (num > BigInt(0)) {
|
||||
const remainder = num % BigInt(32)
|
||||
num = num / BigInt(32)
|
||||
base32String = base32Alphabet[Number(remainder)] + base32String
|
||||
}
|
||||
|
||||
return base32String
|
||||
export function shortUuid() {
|
||||
let uid = uuid()
|
||||
return compressUuid(uid)
|
||||
}
|
||||
|
@ -1,44 +1,3 @@
|
||||
/**
|
||||
* 根据key升序生成 key1=val1&key2=val2的字符串
|
||||
* @param {object} data 需要处理的对象
|
||||
* @param {boolean} ignoreNull 是否过滤空值(空格或者null值不参与拼接)
|
||||
* @param splitChar 连接的字符, 默认是&
|
||||
* @param equalChar =
|
||||
*/
|
||||
export function generateKeyValStr(data: {}, ignoreNull = true, splitChar: string = '&', equalChar = '=') {
|
||||
const keys = Object.keys(data)
|
||||
keys.sort()
|
||||
let result = ''
|
||||
let i = 0
|
||||
for (let key of keys) {
|
||||
if (ignoreNull && !data[key]) {
|
||||
return
|
||||
}
|
||||
if (i++ > 0) result += splitChar
|
||||
result += `${key}${equalChar}${data[key]}`
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* 将key1=val&key2=val的字符串组装成对象
|
||||
* @param str key1=val&key2=val的字符串
|
||||
* @param splitChar 连接的字符, 默认是&
|
||||
* @param equalChar =
|
||||
*/
|
||||
export function keyValToObject(str: string, splitChar: string = '&', equalChar = '='): {} {
|
||||
let result = {}
|
||||
if (!str) {
|
||||
return result
|
||||
}
|
||||
let arrs = str.split(splitChar)
|
||||
for (let sub of arrs) {
|
||||
let subArr = sub.split(equalChar)
|
||||
result[subArr[0]] = subArr[1]
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断传入的值是否为true
|
||||
* @param {Object} obj 传入值为'true','TRUE',1,'1','on','ON','YES','yes'时,返回true,其他值均返回false
|
||||
@ -104,3 +63,80 @@ export function string62to10(numberCode: string) {
|
||||
}
|
||||
return originNumber
|
||||
}
|
||||
|
||||
const base58Alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
|
||||
|
||||
export const hexToBase58 = (hexString: string) => {
|
||||
const bytes = hexString.match(/.{1,2}/g).map(byte => parseInt(byte, 16))
|
||||
let base58String = ''
|
||||
|
||||
let num = BigInt('0x' + hexString)
|
||||
while (num > BigInt(0)) {
|
||||
const remainder = num % BigInt(58)
|
||||
num = num / BigInt(58)
|
||||
base58String = base58Alphabet[Number(remainder)] + base58String
|
||||
}
|
||||
|
||||
return base58String
|
||||
}
|
||||
|
||||
export const base58ToHex = (base58String: string) => {
|
||||
const base58Length = base58String.length
|
||||
let num = BigInt(0)
|
||||
let leadingZeros = 0
|
||||
for (let i = 0; i < base58Length; i++) {
|
||||
const charIndex = base58Alphabet.indexOf(base58String[i])
|
||||
if (charIndex === -1) {
|
||||
throw new Error('Invalid Base58 string')
|
||||
}
|
||||
|
||||
num = num * BigInt(58) + BigInt(charIndex)
|
||||
}
|
||||
return num.toString(16)
|
||||
}
|
||||
|
||||
export const hexToBase32 = (hexString: string) => {
|
||||
const bytes = hexString.match(/.{1,2}/g).map(byte => parseInt(byte, 16))
|
||||
const base32Alphabet = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'
|
||||
let base32String = ''
|
||||
|
||||
let num = BigInt('0x' + hexString)
|
||||
while (num > BigInt(0)) {
|
||||
const remainder = num % BigInt(32)
|
||||
num = num / BigInt(32)
|
||||
base32String = base32Alphabet[Number(remainder)] + base32String
|
||||
}
|
||||
|
||||
return base32String
|
||||
}
|
||||
|
||||
const reNormalUUID = /^[0-9a-fA-F-]{36}$/
|
||||
const reLongUUID = /^[0-9a-fA-F]{32}$/
|
||||
const reShortUUID = /^[0-9a-zA-Z+/]{22,23}$/
|
||||
const n = /-/g
|
||||
|
||||
export function compressUuid(e: string, t: boolean = false) {
|
||||
if (reNormalUUID.test(e)) {
|
||||
e = e.replace(n, '')
|
||||
} else if (!reLongUUID.test(e)) {
|
||||
return e
|
||||
}
|
||||
var r = !0 === t ? 2 : 5
|
||||
return compressHex(e, r)
|
||||
}
|
||||
|
||||
const CHARS_BASE64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
|
||||
export function compressHex(e: string, r: number) {
|
||||
var i,
|
||||
n = e.length
|
||||
i = void 0 !== r ? r : n % 3
|
||||
for (var s = e.slice(0, i), o = []; i < n; ) {
|
||||
var u = parseInt(e[i], 16),
|
||||
a = parseInt(e[i + 1], 16),
|
||||
c = parseInt(e[i + 2], 16)
|
||||
o.push(CHARS_BASE64[(u << 2) | (a >> 2)])
|
||||
o.push(CHARS_BASE64[((3 & a) << 4) | c])
|
||||
i += 3
|
||||
}
|
||||
return s + o.join('')
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user