add some util methods

This commit is contained in:
CounterFire2023 2024-01-17 17:25:10 +08:00
parent ab2c91df1a
commit b982e43cd7
31 changed files with 560 additions and 285 deletions

View File

@ -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":[]}

View File

@ -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":[]}

View File

@ -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":[]}

View File

@ -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":[]}

View File

@ -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":[]}

View File

@ -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

File diff suppressed because one or more lines are too long

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -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":[]}

View File

@ -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":[]}

View File

@ -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
});

File diff suppressed because one or more lines are too long

View File

@ -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 };

View File

@ -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 };

View File

@ -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
};

File diff suppressed because one or more lines are too long

View File

@ -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

File diff suppressed because one or more lines are too long

View File

@ -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 };

View File

@ -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 };

View File

@ -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

File diff suppressed because one or more lines are too long

View File

@ -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
});

File diff suppressed because one or more lines are too long

View File

@ -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 };

View File

@ -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 };

View File

@ -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
};

File diff suppressed because one or more lines are too long

View File

@ -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
}

View File

@ -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)
}

View File

@ -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('')
}