升级一些第三方包
This commit is contained in:
parent
cf4af92b81
commit
86bad22ee2
12
dist/common/AsyncQueue.cjs
vendored
12
dist/common/AsyncQueue.cjs
vendored
@ -32,8 +32,7 @@ function createAsyncQueue(opts = { dedupeConcurrent: false }) {
|
||||
let taskPromise = new DeferredPromise();
|
||||
if (dedupeConcurrent) {
|
||||
queue = [];
|
||||
if (nextPromise.started)
|
||||
nextPromise = new DeferredPromise();
|
||||
if (nextPromise.started) nextPromise = new DeferredPromise();
|
||||
taskPromise = nextPromise;
|
||||
}
|
||||
queue.push(() => {
|
||||
@ -41,8 +40,7 @@ function createAsyncQueue(opts = { dedupeConcurrent: false }) {
|
||||
task().then(taskPromise.resolve).catch(taskPromise.reject);
|
||||
return taskPromise.promise;
|
||||
});
|
||||
if (!running)
|
||||
running = start();
|
||||
if (!running) running = start();
|
||||
return taskPromise.promise;
|
||||
};
|
||||
const start = async () => {
|
||||
@ -64,13 +62,11 @@ function createAsyncQueue(opts = { dedupeConcurrent: false }) {
|
||||
var createAsyncQueues = (opts = { dedupeConcurrent: false }) => {
|
||||
const queues = {};
|
||||
const push = (queueId, task) => {
|
||||
if (!queues[queueId])
|
||||
queues[queueId] = createAsyncQueue(opts);
|
||||
if (!queues[queueId]) queues[queueId] = createAsyncQueue(opts);
|
||||
return queues[queueId].push(task);
|
||||
};
|
||||
const flush = (queueId) => {
|
||||
if (!queues[queueId])
|
||||
queues[queueId] = createAsyncQueue(opts);
|
||||
if (!queues[queueId]) queues[queueId] = createAsyncQueue(opts);
|
||||
return queues[queueId].flush();
|
||||
};
|
||||
return { push, flush };
|
||||
|
2
dist/common/AsyncQueue.cjs.map
vendored
2
dist/common/AsyncQueue.cjs.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/common/AsyncQueue.ts"],"sourcesContent":["type Callback<T> = () => Promise<T>\n\nexport type AsyncQueue<T = void> = {\n push: (task: Callback<T>) => Promise<T>\n flush: () => Promise<void>\n size: number\n}\n\n/**\n * Ensures that each callback pushed onto the queue is executed in series.\n * Such a quetie 😻\n * @param opts.dedupeConcurrent If dedupeConcurrent is `true` it ensures that if multiple\n * tasks are pushed onto the queue while there is an active task, only the\n * last one will be executed, once the active task has completed.\n * e.g. in the below example, only 0 and 3 will be executed.\n * ```\n * const queue = createAsyncQueue({ dedupeConcurrent: true })\n * queue.push(async () => console.log(0)) // returns 0\n * queue.push(async () => console.log(1)) // returns 3\n * queue.push(async () => console.log(2)) // returns 3\n * queue.push(async () => console.log(3)) // returns 3\n * ```\n * */\nexport function createAsyncQueue<T = void>(opts = { dedupeConcurrent: false }): AsyncQueue<T> {\n const { dedupeConcurrent } = opts\n let queue: Callback<T>[] = []\n let running: Promise<void> | undefined\n let nextPromise = new DeferredPromise<T>()\n const push = (task: Callback<T>) => {\n let taskPromise = new DeferredPromise<T>()\n if (dedupeConcurrent) {\n queue = []\n if (nextPromise.started) nextPromise = new DeferredPromise<T>()\n taskPromise = nextPromise\n }\n queue.push(() => {\n taskPromise.started = true\n task().then(taskPromise.resolve).catch(taskPromise.reject)\n return taskPromise.promise\n })\n if (!running) running = start()\n return taskPromise.promise\n }\n const start = async () => {\n while (queue.length) {\n const task = queue.shift()!\n await task().catch(() => {})\n }\n running = undefined\n }\n return {\n push,\n flush: () => running || Promise.resolve(),\n get size() {\n return queue.length\n },\n }\n}\n\nexport const createAsyncQueues = <T = void>(opts = { dedupeConcurrent: false }) => {\n const queues: { [queueId: string]: AsyncQueue<T> } = {}\n const push = (queueId: string, task: Callback<T>) => {\n if (!queues[queueId]) queues[queueId] = createAsyncQueue<T>(opts)\n return queues[queueId].push(task)\n }\n const flush = (queueId: string) => {\n if (!queues[queueId]) queues[queueId] = createAsyncQueue<T>(opts)\n return queues[queueId].flush()\n }\n return { push, flush }\n}\n\nclass DeferredPromise<T = void, E = any> {\n started = false\n resolve: (x: T | PromiseLike<T>) => void = () => {}\n reject: (x: E) => void = () => {}\n promise: Promise<T>\n\n constructor() {\n this.promise = new Promise<T>((res, rej) => {\n this.resolve = res\n this.reject = rej\n })\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBO,SAAS,iBAA2B,OAAO,EAAE,kBAAkB,MAAM,GAAkB;AAC5F,QAAM,EAAE,iBAAiB,IAAI;AAC7B,MAAI,QAAuB,CAAC;AAC5B,MAAI;AACJ,MAAI,cAAc,IAAI,gBAAmB;AACzC,QAAM,OAAO,CAAC,SAAsB;AAClC,QAAI,cAAc,IAAI,gBAAmB;AACzC,QAAI,kBAAkB;AACpB,cAAQ,CAAC;AACT,UAAI,YAAY;AAAS,sBAAc,IAAI,gBAAmB;AAC9D,oBAAc;AAAA,IAChB;AACA,UAAM,KAAK,MAAM;AACf,kBAAY,UAAU;AACtB,WAAK,EAAE,KAAK,YAAY,OAAO,EAAE,MAAM,YAAY,MAAM;AACzD,aAAO,YAAY;AAAA,IACrB,CAAC;AACD,QAAI,CAAC;AAAS,gBAAU,MAAM;AAC9B,WAAO,YAAY;AAAA,EACrB;AACA,QAAM,QAAQ,YAAY;AACxB,WAAO,MAAM,QAAQ;AACnB,YAAM,OAAO,MAAM,MAAM;AACzB,YAAM,KAAK,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAC7B;AACA,cAAU;AAAA,EACZ;AACA,SAAO;AAAA,IACL;AAAA,IACA,OAAO,MAAM,WAAW,QAAQ,QAAQ;AAAA,IACxC,IAAI,OAAO;AACT,aAAO,MAAM;AAAA,IACf;AAAA,EACF;AACF;AAEO,IAAM,oBAAoB,CAAW,OAAO,EAAE,kBAAkB,MAAM,MAAM;AACjF,QAAM,SAA+C,CAAC;AACtD,QAAM,OAAO,CAAC,SAAiB,SAAsB;AACnD,QAAI,CAAC,OAAO,OAAO;AAAG,aAAO,OAAO,IAAI,iBAAoB,IAAI;AAChE,WAAO,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,EAClC;AACA,QAAM,QAAQ,CAAC,YAAoB;AACjC,QAAI,CAAC,OAAO,OAAO;AAAG,aAAO,OAAO,IAAI,iBAAoB,IAAI;AAChE,WAAO,OAAO,OAAO,EAAE,MAAM;AAAA,EAC/B;AACA,SAAO,EAAE,MAAM,MAAM;AACvB;AAEA,IAAM,kBAAN,MAAyC;AAAA,EAMvC,cAAc;AALd,mBAAU;AACV,mBAA2C,MAAM;AAAA,IAAC;AAClD,kBAAyB,MAAM;AAAA,IAAC;AAI9B,SAAK,UAAU,IAAI,QAAW,CAAC,KAAK,QAAQ;AAC1C,WAAK,UAAU;AACf,WAAK,SAAS;AAAA,IAChB,CAAC;AAAA,EACH;AACF;","names":[]}
|
||||
{"version":3,"sources":["../../src/common/AsyncQueue.ts"],"sourcesContent":["type Callback<T> = () => Promise<T>\n\nexport type AsyncQueue<T = void> = {\n push: (task: Callback<T>) => Promise<T>\n flush: () => Promise<void>\n size: number\n}\n\n/**\n * Ensures that each callback pushed onto the queue is executed in series.\n * Such a quetie 😻\n * @param opts.dedupeConcurrent If dedupeConcurrent is `true` it ensures that if multiple\n * tasks are pushed onto the queue while there is an active task, only the\n * last one will be executed, once the active task has completed.\n * e.g. in the below example, only 0 and 3 will be executed.\n * ```\n * const queue = createAsyncQueue({ dedupeConcurrent: true })\n * queue.push(async () => console.log(0)) // returns 0\n * queue.push(async () => console.log(1)) // returns 3\n * queue.push(async () => console.log(2)) // returns 3\n * queue.push(async () => console.log(3)) // returns 3\n * ```\n * */\nexport function createAsyncQueue<T = void>(opts = { dedupeConcurrent: false }): AsyncQueue<T> {\n const { dedupeConcurrent } = opts\n let queue: Callback<T>[] = []\n let running: Promise<void> | undefined\n let nextPromise = new DeferredPromise<T>()\n const push = (task: Callback<T>) => {\n let taskPromise = new DeferredPromise<T>()\n if (dedupeConcurrent) {\n queue = []\n if (nextPromise.started) nextPromise = new DeferredPromise<T>()\n taskPromise = nextPromise\n }\n queue.push(() => {\n taskPromise.started = true\n task().then(taskPromise.resolve).catch(taskPromise.reject)\n return taskPromise.promise\n })\n if (!running) running = start()\n return taskPromise.promise\n }\n const start = async () => {\n while (queue.length) {\n const task = queue.shift()!\n await task().catch(() => {})\n }\n running = undefined\n }\n return {\n push,\n flush: () => running || Promise.resolve(),\n get size() {\n return queue.length\n },\n }\n}\n\nexport const createAsyncQueues = <T = void>(opts = { dedupeConcurrent: false }) => {\n const queues: { [queueId: string]: AsyncQueue<T> } = {}\n const push = (queueId: string, task: Callback<T>) => {\n if (!queues[queueId]) queues[queueId] = createAsyncQueue<T>(opts)\n return queues[queueId].push(task)\n }\n const flush = (queueId: string) => {\n if (!queues[queueId]) queues[queueId] = createAsyncQueue<T>(opts)\n return queues[queueId].flush()\n }\n return { push, flush }\n}\n\nclass DeferredPromise<T = void, E = any> {\n started = false\n resolve: (x: T | PromiseLike<T>) => void = () => {}\n reject: (x: E) => void = () => {}\n promise: Promise<T>\n\n constructor() {\n this.promise = new Promise<T>((res, rej) => {\n this.resolve = res\n this.reject = rej\n })\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBO,SAAS,iBAA2B,OAAO,EAAE,kBAAkB,MAAM,GAAkB;AAC5F,QAAM,EAAE,iBAAiB,IAAI;AAC7B,MAAI,QAAuB,CAAC;AAC5B,MAAI;AACJ,MAAI,cAAc,IAAI,gBAAmB;AACzC,QAAM,OAAO,CAAC,SAAsB;AAClC,QAAI,cAAc,IAAI,gBAAmB;AACzC,QAAI,kBAAkB;AACpB,cAAQ,CAAC;AACT,UAAI,YAAY,QAAS,eAAc,IAAI,gBAAmB;AAC9D,oBAAc;AAAA,IAChB;AACA,UAAM,KAAK,MAAM;AACf,kBAAY,UAAU;AACtB,WAAK,EAAE,KAAK,YAAY,OAAO,EAAE,MAAM,YAAY,MAAM;AACzD,aAAO,YAAY;AAAA,IACrB,CAAC;AACD,QAAI,CAAC,QAAS,WAAU,MAAM;AAC9B,WAAO,YAAY;AAAA,EACrB;AACA,QAAM,QAAQ,YAAY;AACxB,WAAO,MAAM,QAAQ;AACnB,YAAM,OAAO,MAAM,MAAM;AACzB,YAAM,KAAK,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAC7B;AACA,cAAU;AAAA,EACZ;AACA,SAAO;AAAA,IACL;AAAA,IACA,OAAO,MAAM,WAAW,QAAQ,QAAQ;AAAA,IACxC,IAAI,OAAO;AACT,aAAO,MAAM;AAAA,IACf;AAAA,EACF;AACF;AAEO,IAAM,oBAAoB,CAAW,OAAO,EAAE,kBAAkB,MAAM,MAAM;AACjF,QAAM,SAA+C,CAAC;AACtD,QAAM,OAAO,CAAC,SAAiB,SAAsB;AACnD,QAAI,CAAC,OAAO,OAAO,EAAG,QAAO,OAAO,IAAI,iBAAoB,IAAI;AAChE,WAAO,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,EAClC;AACA,QAAM,QAAQ,CAAC,YAAoB;AACjC,QAAI,CAAC,OAAO,OAAO,EAAG,QAAO,OAAO,IAAI,iBAAoB,IAAI;AAChE,WAAO,OAAO,OAAO,EAAE,MAAM;AAAA,EAC/B;AACA,SAAO,EAAE,MAAM,MAAM;AACvB;AAEA,IAAM,kBAAN,MAAyC;AAAA,EAMvC,cAAc;AALd,mBAAU;AACV,mBAA2C,MAAM;AAAA,IAAC;AAClD,kBAAyB,MAAM;AAAA,IAAC;AAI9B,SAAK,UAAU,IAAI,QAAW,CAAC,KAAK,QAAQ;AAC1C,WAAK,UAAU;AACf,WAAK,SAAS;AAAA,IAChB,CAAC;AAAA,EACH;AACF;","names":[]}
|
12
dist/common/AsyncQueue.js
vendored
12
dist/common/AsyncQueue.js
vendored
@ -8,8 +8,7 @@ function createAsyncQueue(opts = { dedupeConcurrent: false }) {
|
||||
let taskPromise = new DeferredPromise();
|
||||
if (dedupeConcurrent) {
|
||||
queue = [];
|
||||
if (nextPromise.started)
|
||||
nextPromise = new DeferredPromise();
|
||||
if (nextPromise.started) nextPromise = new DeferredPromise();
|
||||
taskPromise = nextPromise;
|
||||
}
|
||||
queue.push(() => {
|
||||
@ -17,8 +16,7 @@ function createAsyncQueue(opts = { dedupeConcurrent: false }) {
|
||||
task().then(taskPromise.resolve).catch(taskPromise.reject);
|
||||
return taskPromise.promise;
|
||||
});
|
||||
if (!running)
|
||||
running = start();
|
||||
if (!running) running = start();
|
||||
return taskPromise.promise;
|
||||
};
|
||||
const start = async () => {
|
||||
@ -40,13 +38,11 @@ function createAsyncQueue(opts = { dedupeConcurrent: false }) {
|
||||
var createAsyncQueues = (opts = { dedupeConcurrent: false }) => {
|
||||
const queues = {};
|
||||
const push = (queueId, task) => {
|
||||
if (!queues[queueId])
|
||||
queues[queueId] = createAsyncQueue(opts);
|
||||
if (!queues[queueId]) queues[queueId] = createAsyncQueue(opts);
|
||||
return queues[queueId].push(task);
|
||||
};
|
||||
const flush = (queueId) => {
|
||||
if (!queues[queueId])
|
||||
queues[queueId] = createAsyncQueue(opts);
|
||||
if (!queues[queueId]) queues[queueId] = createAsyncQueue(opts);
|
||||
return queues[queueId].flush();
|
||||
};
|
||||
return { push, flush };
|
||||
|
2
dist/common/AsyncQueue.js.map
vendored
2
dist/common/AsyncQueue.js.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/common/AsyncQueue.ts"],"sourcesContent":["type Callback<T> = () => Promise<T>\n\nexport type AsyncQueue<T = void> = {\n push: (task: Callback<T>) => Promise<T>\n flush: () => Promise<void>\n size: number\n}\n\n/**\n * Ensures that each callback pushed onto the queue is executed in series.\n * Such a quetie 😻\n * @param opts.dedupeConcurrent If dedupeConcurrent is `true` it ensures that if multiple\n * tasks are pushed onto the queue while there is an active task, only the\n * last one will be executed, once the active task has completed.\n * e.g. in the below example, only 0 and 3 will be executed.\n * ```\n * const queue = createAsyncQueue({ dedupeConcurrent: true })\n * queue.push(async () => console.log(0)) // returns 0\n * queue.push(async () => console.log(1)) // returns 3\n * queue.push(async () => console.log(2)) // returns 3\n * queue.push(async () => console.log(3)) // returns 3\n * ```\n * */\nexport function createAsyncQueue<T = void>(opts = { dedupeConcurrent: false }): AsyncQueue<T> {\n const { dedupeConcurrent } = opts\n let queue: Callback<T>[] = []\n let running: Promise<void> | undefined\n let nextPromise = new DeferredPromise<T>()\n const push = (task: Callback<T>) => {\n let taskPromise = new DeferredPromise<T>()\n if (dedupeConcurrent) {\n queue = []\n if (nextPromise.started) nextPromise = new DeferredPromise<T>()\n taskPromise = nextPromise\n }\n queue.push(() => {\n taskPromise.started = true\n task().then(taskPromise.resolve).catch(taskPromise.reject)\n return taskPromise.promise\n })\n if (!running) running = start()\n return taskPromise.promise\n }\n const start = async () => {\n while (queue.length) {\n const task = queue.shift()!\n await task().catch(() => {})\n }\n running = undefined\n }\n return {\n push,\n flush: () => running || Promise.resolve(),\n get size() {\n return queue.length\n },\n }\n}\n\nexport const createAsyncQueues = <T = void>(opts = { dedupeConcurrent: false }) => {\n const queues: { [queueId: string]: AsyncQueue<T> } = {}\n const push = (queueId: string, task: Callback<T>) => {\n if (!queues[queueId]) queues[queueId] = createAsyncQueue<T>(opts)\n return queues[queueId].push(task)\n }\n const flush = (queueId: string) => {\n if (!queues[queueId]) queues[queueId] = createAsyncQueue<T>(opts)\n return queues[queueId].flush()\n }\n return { push, flush }\n}\n\nclass DeferredPromise<T = void, E = any> {\n started = false\n resolve: (x: T | PromiseLike<T>) => void = () => {}\n reject: (x: E) => void = () => {}\n promise: Promise<T>\n\n constructor() {\n this.promise = new Promise<T>((res, rej) => {\n this.resolve = res\n this.reject = rej\n })\n }\n}\n"],"mappings":";AAuBO,SAAS,iBAA2B,OAAO,EAAE,kBAAkB,MAAM,GAAkB;AAC5F,QAAM,EAAE,iBAAiB,IAAI;AAC7B,MAAI,QAAuB,CAAC;AAC5B,MAAI;AACJ,MAAI,cAAc,IAAI,gBAAmB;AACzC,QAAM,OAAO,CAAC,SAAsB;AAClC,QAAI,cAAc,IAAI,gBAAmB;AACzC,QAAI,kBAAkB;AACpB,cAAQ,CAAC;AACT,UAAI,YAAY;AAAS,sBAAc,IAAI,gBAAmB;AAC9D,oBAAc;AAAA,IAChB;AACA,UAAM,KAAK,MAAM;AACf,kBAAY,UAAU;AACtB,WAAK,EAAE,KAAK,YAAY,OAAO,EAAE,MAAM,YAAY,MAAM;AACzD,aAAO,YAAY;AAAA,IACrB,CAAC;AACD,QAAI,CAAC;AAAS,gBAAU,MAAM;AAC9B,WAAO,YAAY;AAAA,EACrB;AACA,QAAM,QAAQ,YAAY;AACxB,WAAO,MAAM,QAAQ;AACnB,YAAM,OAAO,MAAM,MAAM;AACzB,YAAM,KAAK,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAC7B;AACA,cAAU;AAAA,EACZ;AACA,SAAO;AAAA,IACL;AAAA,IACA,OAAO,MAAM,WAAW,QAAQ,QAAQ;AAAA,IACxC,IAAI,OAAO;AACT,aAAO,MAAM;AAAA,IACf;AAAA,EACF;AACF;AAEO,IAAM,oBAAoB,CAAW,OAAO,EAAE,kBAAkB,MAAM,MAAM;AACjF,QAAM,SAA+C,CAAC;AACtD,QAAM,OAAO,CAAC,SAAiB,SAAsB;AACnD,QAAI,CAAC,OAAO,OAAO;AAAG,aAAO,OAAO,IAAI,iBAAoB,IAAI;AAChE,WAAO,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,EAClC;AACA,QAAM,QAAQ,CAAC,YAAoB;AACjC,QAAI,CAAC,OAAO,OAAO;AAAG,aAAO,OAAO,IAAI,iBAAoB,IAAI;AAChE,WAAO,OAAO,OAAO,EAAE,MAAM;AAAA,EAC/B;AACA,SAAO,EAAE,MAAM,MAAM;AACvB;AAEA,IAAM,kBAAN,MAAyC;AAAA,EAMvC,cAAc;AALd,mBAAU;AACV,mBAA2C,MAAM;AAAA,IAAC;AAClD,kBAAyB,MAAM;AAAA,IAAC;AAI9B,SAAK,UAAU,IAAI,QAAW,CAAC,KAAK,QAAQ;AAC1C,WAAK,UAAU;AACf,WAAK,SAAS;AAAA,IAChB,CAAC;AAAA,EACH;AACF;","names":[]}
|
||||
{"version":3,"sources":["../../src/common/AsyncQueue.ts"],"sourcesContent":["type Callback<T> = () => Promise<T>\n\nexport type AsyncQueue<T = void> = {\n push: (task: Callback<T>) => Promise<T>\n flush: () => Promise<void>\n size: number\n}\n\n/**\n * Ensures that each callback pushed onto the queue is executed in series.\n * Such a quetie 😻\n * @param opts.dedupeConcurrent If dedupeConcurrent is `true` it ensures that if multiple\n * tasks are pushed onto the queue while there is an active task, only the\n * last one will be executed, once the active task has completed.\n * e.g. in the below example, only 0 and 3 will be executed.\n * ```\n * const queue = createAsyncQueue({ dedupeConcurrent: true })\n * queue.push(async () => console.log(0)) // returns 0\n * queue.push(async () => console.log(1)) // returns 3\n * queue.push(async () => console.log(2)) // returns 3\n * queue.push(async () => console.log(3)) // returns 3\n * ```\n * */\nexport function createAsyncQueue<T = void>(opts = { dedupeConcurrent: false }): AsyncQueue<T> {\n const { dedupeConcurrent } = opts\n let queue: Callback<T>[] = []\n let running: Promise<void> | undefined\n let nextPromise = new DeferredPromise<T>()\n const push = (task: Callback<T>) => {\n let taskPromise = new DeferredPromise<T>()\n if (dedupeConcurrent) {\n queue = []\n if (nextPromise.started) nextPromise = new DeferredPromise<T>()\n taskPromise = nextPromise\n }\n queue.push(() => {\n taskPromise.started = true\n task().then(taskPromise.resolve).catch(taskPromise.reject)\n return taskPromise.promise\n })\n if (!running) running = start()\n return taskPromise.promise\n }\n const start = async () => {\n while (queue.length) {\n const task = queue.shift()!\n await task().catch(() => {})\n }\n running = undefined\n }\n return {\n push,\n flush: () => running || Promise.resolve(),\n get size() {\n return queue.length\n },\n }\n}\n\nexport const createAsyncQueues = <T = void>(opts = { dedupeConcurrent: false }) => {\n const queues: { [queueId: string]: AsyncQueue<T> } = {}\n const push = (queueId: string, task: Callback<T>) => {\n if (!queues[queueId]) queues[queueId] = createAsyncQueue<T>(opts)\n return queues[queueId].push(task)\n }\n const flush = (queueId: string) => {\n if (!queues[queueId]) queues[queueId] = createAsyncQueue<T>(opts)\n return queues[queueId].flush()\n }\n return { push, flush }\n}\n\nclass DeferredPromise<T = void, E = any> {\n started = false\n resolve: (x: T | PromiseLike<T>) => void = () => {}\n reject: (x: E) => void = () => {}\n promise: Promise<T>\n\n constructor() {\n this.promise = new Promise<T>((res, rej) => {\n this.resolve = res\n this.reject = rej\n })\n }\n}\n"],"mappings":";AAuBO,SAAS,iBAA2B,OAAO,EAAE,kBAAkB,MAAM,GAAkB;AAC5F,QAAM,EAAE,iBAAiB,IAAI;AAC7B,MAAI,QAAuB,CAAC;AAC5B,MAAI;AACJ,MAAI,cAAc,IAAI,gBAAmB;AACzC,QAAM,OAAO,CAAC,SAAsB;AAClC,QAAI,cAAc,IAAI,gBAAmB;AACzC,QAAI,kBAAkB;AACpB,cAAQ,CAAC;AACT,UAAI,YAAY,QAAS,eAAc,IAAI,gBAAmB;AAC9D,oBAAc;AAAA,IAChB;AACA,UAAM,KAAK,MAAM;AACf,kBAAY,UAAU;AACtB,WAAK,EAAE,KAAK,YAAY,OAAO,EAAE,MAAM,YAAY,MAAM;AACzD,aAAO,YAAY;AAAA,IACrB,CAAC;AACD,QAAI,CAAC,QAAS,WAAU,MAAM;AAC9B,WAAO,YAAY;AAAA,EACrB;AACA,QAAM,QAAQ,YAAY;AACxB,WAAO,MAAM,QAAQ;AACnB,YAAM,OAAO,MAAM,MAAM;AACzB,YAAM,KAAK,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAC7B;AACA,cAAU;AAAA,EACZ;AACA,SAAO;AAAA,IACL;AAAA,IACA,OAAO,MAAM,WAAW,QAAQ,QAAQ;AAAA,IACxC,IAAI,OAAO;AACT,aAAO,MAAM;AAAA,IACf;AAAA,EACF;AACF;AAEO,IAAM,oBAAoB,CAAW,OAAO,EAAE,kBAAkB,MAAM,MAAM;AACjF,QAAM,SAA+C,CAAC;AACtD,QAAM,OAAO,CAAC,SAAiB,SAAsB;AACnD,QAAI,CAAC,OAAO,OAAO,EAAG,QAAO,OAAO,IAAI,iBAAoB,IAAI;AAChE,WAAO,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,EAClC;AACA,QAAM,QAAQ,CAAC,YAAoB;AACjC,QAAI,CAAC,OAAO,OAAO,EAAG,QAAO,OAAO,IAAI,iBAAoB,IAAI;AAChE,WAAO,OAAO,OAAO,EAAE,MAAM;AAAA,EAC/B;AACA,SAAO,EAAE,MAAM,MAAM;AACvB;AAEA,IAAM,kBAAN,MAAyC;AAAA,EAMvC,cAAc;AALd,mBAAU;AACV,mBAA2C,MAAM;AAAA,IAAC;AAClD,kBAAyB,MAAM;AAAA,IAAC;AAI9B,SAAK,UAAU,IAAI,QAAW,CAAC,KAAK,QAAQ;AAC1C,WAAK,UAAU;AACf,WAAK,SAAS;AAAA,IAChB,CAAC;AAAA,EACH;AACF;","names":[]}
|
3
dist/common/SyncLocker.cjs
vendored
3
dist/common/SyncLocker.cjs
vendored
@ -20,8 +20,7 @@ var __decorateClass = (decorators, target, key, kind) => {
|
||||
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
||||
if (decorator = decorators[i])
|
||||
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
||||
if (kind && result)
|
||||
__defProp(target, key, result);
|
||||
if (kind && result) __defProp(target, key, result);
|
||||
return result;
|
||||
};
|
||||
|
||||
|
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 * Singletonize a class\n * Usage:\n * @singleton\n * class Test {}\n * new Test() === new Test() // returns `true`\n * It can also be used without a 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":[]}
|
||||
{"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 * Singletonize a class\n * Usage:\n * @singleton\n * class Test {}\n * new Test() === new Test() // returns `true`\n * It can also be used without a 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":[]}
|
3
dist/common/SyncLocker.js
vendored
3
dist/common/SyncLocker.js
vendored
@ -5,8 +5,7 @@ var __decorateClass = (decorators, target, key, kind) => {
|
||||
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
||||
if (decorator = decorators[i])
|
||||
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
||||
if (kind && result)
|
||||
__defProp(target, key, result);
|
||||
if (kind && result) __defProp(target, key, result);
|
||||
return result;
|
||||
};
|
||||
|
||||
|
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 * Singletonize a class\n * Usage:\n * @singleton\n * class Test {}\n * new Test() === new Test() // returns `true`\n * It can also be used without a 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":[]}
|
||||
{"version":3,"sources":["../../src/decorators/singleton.ts","../../src/common/ZError.ts","../../src/common/SyncLocker.ts"],"sourcesContent":["/**\n * Singletonize a class\n * Usage:\n * @singleton\n * class Test {}\n * new Test() === new Test() // returns `true`\n * It can also be used without a 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":[]}
|
15
dist/index.cjs
vendored
15
dist/index.cjs
vendored
@ -20,8 +20,7 @@ var __decorateClass = (decorators, target, key, kind) => {
|
||||
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
||||
if (decorator = decorators[i])
|
||||
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
||||
if (kind && result)
|
||||
__defProp(target, key, result);
|
||||
if (kind && result) __defProp(target, key, result);
|
||||
return result;
|
||||
};
|
||||
|
||||
@ -118,8 +117,7 @@ function createAsyncQueue(opts = { dedupeConcurrent: false }) {
|
||||
let taskPromise = new DeferredPromise();
|
||||
if (dedupeConcurrent) {
|
||||
queue = [];
|
||||
if (nextPromise.started)
|
||||
nextPromise = new DeferredPromise();
|
||||
if (nextPromise.started) nextPromise = new DeferredPromise();
|
||||
taskPromise = nextPromise;
|
||||
}
|
||||
queue.push(() => {
|
||||
@ -127,8 +125,7 @@ function createAsyncQueue(opts = { dedupeConcurrent: false }) {
|
||||
task().then(taskPromise.resolve).catch(taskPromise.reject);
|
||||
return taskPromise.promise;
|
||||
});
|
||||
if (!running)
|
||||
running = start();
|
||||
if (!running) running = start();
|
||||
return taskPromise.promise;
|
||||
};
|
||||
const start = async () => {
|
||||
@ -150,13 +147,11 @@ function createAsyncQueue(opts = { dedupeConcurrent: false }) {
|
||||
var createAsyncQueues = (opts = { dedupeConcurrent: false }) => {
|
||||
const queues = {};
|
||||
const push = (queueId, task) => {
|
||||
if (!queues[queueId])
|
||||
queues[queueId] = createAsyncQueue(opts);
|
||||
if (!queues[queueId]) queues[queueId] = createAsyncQueue(opts);
|
||||
return queues[queueId].push(task);
|
||||
};
|
||||
const flush = (queueId) => {
|
||||
if (!queues[queueId])
|
||||
queues[queueId] = createAsyncQueue(opts);
|
||||
if (!queues[queueId]) queues[queueId] = createAsyncQueue(opts);
|
||||
return queues[queueId].flush();
|
||||
};
|
||||
return { push, flush };
|
||||
|
2
dist/index.cjs.map
vendored
2
dist/index.cjs.map
vendored
File diff suppressed because one or more lines are too long
15
dist/index.js
vendored
15
dist/index.js
vendored
@ -5,8 +5,7 @@ var __decorateClass = (decorators, target, key, kind) => {
|
||||
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
||||
if (decorator = decorators[i])
|
||||
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
||||
if (kind && result)
|
||||
__defProp(target, key, result);
|
||||
if (kind && result) __defProp(target, key, result);
|
||||
return result;
|
||||
};
|
||||
|
||||
@ -81,8 +80,7 @@ function createAsyncQueue(opts = { dedupeConcurrent: false }) {
|
||||
let taskPromise = new DeferredPromise();
|
||||
if (dedupeConcurrent) {
|
||||
queue = [];
|
||||
if (nextPromise.started)
|
||||
nextPromise = new DeferredPromise();
|
||||
if (nextPromise.started) nextPromise = new DeferredPromise();
|
||||
taskPromise = nextPromise;
|
||||
}
|
||||
queue.push(() => {
|
||||
@ -90,8 +88,7 @@ function createAsyncQueue(opts = { dedupeConcurrent: false }) {
|
||||
task().then(taskPromise.resolve).catch(taskPromise.reject);
|
||||
return taskPromise.promise;
|
||||
});
|
||||
if (!running)
|
||||
running = start();
|
||||
if (!running) running = start();
|
||||
return taskPromise.promise;
|
||||
};
|
||||
const start = async () => {
|
||||
@ -113,13 +110,11 @@ function createAsyncQueue(opts = { dedupeConcurrent: false }) {
|
||||
var createAsyncQueues = (opts = { dedupeConcurrent: false }) => {
|
||||
const queues = {};
|
||||
const push = (queueId, task) => {
|
||||
if (!queues[queueId])
|
||||
queues[queueId] = createAsyncQueue(opts);
|
||||
if (!queues[queueId]) queues[queueId] = createAsyncQueue(opts);
|
||||
return queues[queueId].push(task);
|
||||
};
|
||||
const flush = (queueId) => {
|
||||
if (!queues[queueId])
|
||||
queues[queueId] = createAsyncQueue(opts);
|
||||
if (!queues[queueId]) queues[queueId] = createAsyncQueue(opts);
|
||||
return queues[queueId].flush();
|
||||
};
|
||||
return { push, flush };
|
||||
|
2
dist/index.js.map
vendored
2
dist/index.js.map
vendored
File diff suppressed because one or more lines are too long
561
dist/utils/chain.util.cjs
vendored
561
dist/utils/chain.util.cjs
vendored
File diff suppressed because it is too large
Load Diff
2
dist/utils/chain.util.cjs.map
vendored
2
dist/utils/chain.util.cjs.map
vendored
File diff suppressed because one or more lines are too long
568
dist/utils/chain.util.js
vendored
568
dist/utils/chain.util.js
vendored
File diff suppressed because it is too large
Load Diff
2
dist/utils/chain.util.js.map
vendored
2
dist/utils/chain.util.js.map
vendored
File diff suppressed because one or more lines are too long
3
dist/utils/net.util.cjs
vendored
3
dist/utils/net.util.cjs
vendored
@ -157,8 +157,7 @@ function generateKVStr({
|
||||
if (ignoreNull && !data[key]) {
|
||||
continue;
|
||||
}
|
||||
if (i++ > 0)
|
||||
result += splitChar;
|
||||
if (i++ > 0) result += splitChar;
|
||||
if (encode) {
|
||||
result += `${key}${equalChar}${encodeURIComponent(data[key])}`;
|
||||
} else {
|
||||
|
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
3
dist/utils/net.util.js
vendored
3
dist/utils/net.util.js
vendored
@ -112,8 +112,7 @@ function generateKVStr({
|
||||
if (ignoreNull && !data[key]) {
|
||||
continue;
|
||||
}
|
||||
if (i++ > 0)
|
||||
result += splitChar;
|
||||
if (i++ > 0) result += splitChar;
|
||||
if (encode) {
|
||||
result += `${key}${equalChar}${encodeURIComponent(data[key])}`;
|
||||
} else {
|
||||
|
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
3
dist/utils/promise.util.cjs
vendored
3
dist/utils/promise.util.cjs
vendored
@ -76,8 +76,7 @@ var PromiseQueue = class {
|
||||
this.loadNext();
|
||||
}
|
||||
loadNext() {
|
||||
if (this._list.length === 0 || this.concurrency === this._current)
|
||||
return;
|
||||
if (this._list.length === 0 || this.concurrency === this._current) return;
|
||||
this._current++;
|
||||
const fn = this._list.shift();
|
||||
const promise = fn.call(this);
|
||||
|
2
dist/utils/promise.util.cjs.map
vendored
2
dist/utils/promise.util.cjs.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/utils/promise.util.ts"],"sourcesContent":["type RetryOptions = {\n maxRetries: number\n whitelistErrors: Error[]\n}\n/**\n * Usage:\n * retry(() => fetch(\"https://example.com\"), { maxRetries: 3, whitelistErrors: [] })\n * .then((response) => console.log(response))\n * .catch((error) => console.error(error));\n * @param promiseFn\n * @param options\n * @returns\n */\nexport function retry<T>(promiseFn: () => Promise<T>, options: RetryOptions): Promise<T> {\n let retries = 0\n let defaultOptions = {\n maxRetries: 3,\n whitelistErrors: [],\n }\n Object.assign(defaultOptions, options)\n const { maxRetries, whitelistErrors } = options\n\n const retryPromise = async (): Promise<T> => {\n try {\n return await promiseFn()\n } catch (err) {\n if (\n retries < maxRetries &&\n whitelistErrors.some(whitelistedError => err instanceof whitelistedError.constructor)\n ) {\n retries++\n return retryPromise()\n }\n throw err\n }\n }\n\n return retryPromise()\n}\n/**\n * 构建一个promise, 可以在任意时刻resolve或reject\n * Usage:\n * function delay(ms: number): Promise<void> {\n const deferred = new Deferred<void>();\n\n setTimeout(() => {\n deferred.resolve();\n }, ms);\n\n return deferred.promise;\n }\n\n console.log(\"start\");\n\n delay(1000).then(() => {\n console.log(\"after 1 second\");\n });\n\n console.log(\"end\");\n */\nexport class Deferred<T = any> {\n private _resolve!: (value: T | PromiseLike<T>) => void\n private _reject!: (reason?: any) => void\n\n public readonly promise: Promise<T>\n\n constructor() {\n this.promise = new Promise<T>((resolve, reject) => {\n this._resolve = resolve\n this._reject = reject\n })\n }\n\n public resolve(value: T | PromiseLike<T>): void {\n this._resolve(value)\n }\n\n public reject(reason?: any): void {\n this._reject(reason)\n }\n\n public then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null | undefined,\n onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined,\n ): Promise<TResult1 | TResult2> {\n return this.promise.then(onfulfilled, onrejected)\n }\n\n public catch<TResult = never>(\n onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null | undefined,\n ): Promise<T | TResult> {\n return this.promise.catch(onrejected)\n }\n}\n\n/**\n * 简单限流的 Promise 队列\n * Usage:\n const q = new PromiseQueue();\n [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].forEach((v) => {\n q.add(\n () =>\n new Promise((resolve) => {\n setTimeout(() => {\n console.log(v);\n resolve();\n }, 1000);\n })\n );\n});\n */\nexport class PromiseQueue {\n private readonly concurrency: number\n private _current: number = 0\n private _list: (() => Promise<any>)[] = []\n\n constructor({ concurrency = 2 }: { concurrency: number }) {\n this.concurrency = concurrency\n }\n\n add(promiseFn: () => Promise<any>) {\n this._list.push(promiseFn)\n this.loadNext()\n }\n\n loadNext() {\n if (this._list.length === 0 || this.concurrency === this._current) return\n this._current++\n const fn = this._list.shift()!\n const promise = fn.call(this)\n promise.then(this.onLoaded.bind(this)).catch(this.onLoaded.bind(this))\n }\n\n onLoaded() {\n this._current--\n this.loadNext()\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaO,SAAS,MAAS,WAA6B,SAAmC;AACvF,MAAI,UAAU;AACd,MAAI,iBAAiB;AAAA,IACnB,YAAY;AAAA,IACZ,iBAAiB,CAAC;AAAA,EACpB;AACA,SAAO,OAAO,gBAAgB,OAAO;AACrC,QAAM,EAAE,YAAY,gBAAgB,IAAI;AAExC,QAAM,eAAe,YAAwB;AAC3C,QAAI;AACF,aAAO,MAAM,UAAU;AAAA,IACzB,SAAS,KAAK;AACZ,UACE,UAAU,cACV,gBAAgB,KAAK,sBAAoB,eAAe,iBAAiB,WAAW,GACpF;AACA;AACA,eAAO,aAAa;AAAA,MACtB;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAEA,SAAO,aAAa;AACtB;AAsBO,IAAM,WAAN,MAAwB;AAAA,EAM7B,cAAc;AACZ,SAAK,UAAU,IAAI,QAAW,CAAC,SAAS,WAAW;AACjD,WAAK,WAAW;AAChB,WAAK,UAAU;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EAEO,QAAQ,OAAiC;AAC9C,SAAK,SAAS,KAAK;AAAA,EACrB;AAAA,EAEO,OAAO,QAAoB;AAChC,SAAK,QAAQ,MAAM;AAAA,EACrB;AAAA,EAEO,KACL,aACA,YAC8B;AAC9B,WAAO,KAAK,QAAQ,KAAK,aAAa,UAAU;AAAA,EAClD;AAAA,EAEO,MACL,YACsB;AACtB,WAAO,KAAK,QAAQ,MAAM,UAAU;AAAA,EACtC;AACF;AAkBO,IAAM,eAAN,MAAmB;AAAA,EAKxB,YAAY,EAAE,cAAc,EAAE,GAA4B;AAH1D,SAAQ,WAAmB;AAC3B,SAAQ,QAAgC,CAAC;AAGvC,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAI,WAA+B;AACjC,SAAK,MAAM,KAAK,SAAS;AACzB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,WAAW;AACT,QAAI,KAAK,MAAM,WAAW,KAAK,KAAK,gBAAgB,KAAK;AAAU;AACnE,SAAK;AACL,UAAM,KAAK,KAAK,MAAM,MAAM;AAC5B,UAAM,UAAU,GAAG,KAAK,IAAI;AAC5B,YAAQ,KAAK,KAAK,SAAS,KAAK,IAAI,CAAC,EAAE,MAAM,KAAK,SAAS,KAAK,IAAI,CAAC;AAAA,EACvE;AAAA,EAEA,WAAW;AACT,SAAK;AACL,SAAK,SAAS;AAAA,EAChB;AACF;","names":[]}
|
||||
{"version":3,"sources":["../../src/utils/promise.util.ts"],"sourcesContent":["type RetryOptions = {\n maxRetries: number\n whitelistErrors: Error[]\n}\n/**\n * Usage:\n * retry(() => fetch(\"https://example.com\"), { maxRetries: 3, whitelistErrors: [] })\n * .then((response) => console.log(response))\n * .catch((error) => console.error(error));\n * @param promiseFn\n * @param options\n * @returns\n */\nexport function retry<T>(promiseFn: () => Promise<T>, options: RetryOptions): Promise<T> {\n let retries = 0\n let defaultOptions = {\n maxRetries: 3,\n whitelistErrors: [],\n }\n Object.assign(defaultOptions, options)\n const { maxRetries, whitelistErrors } = options\n\n const retryPromise = async (): Promise<T> => {\n try {\n return await promiseFn()\n } catch (err) {\n if (\n retries < maxRetries &&\n whitelistErrors.some(whitelistedError => err instanceof whitelistedError.constructor)\n ) {\n retries++\n return retryPromise()\n }\n throw err\n }\n }\n\n return retryPromise()\n}\n/**\n * 构建一个promise, 可以在任意时刻resolve或reject\n * Usage:\n * function delay(ms: number): Promise<void> {\n const deferred = new Deferred<void>();\n\n setTimeout(() => {\n deferred.resolve();\n }, ms);\n\n return deferred.promise;\n }\n\n console.log(\"start\");\n\n delay(1000).then(() => {\n console.log(\"after 1 second\");\n });\n\n console.log(\"end\");\n */\nexport class Deferred<T = any> {\n private _resolve!: (value: T | PromiseLike<T>) => void\n private _reject!: (reason?: any) => void\n\n public readonly promise: Promise<T>\n\n constructor() {\n this.promise = new Promise<T>((resolve, reject) => {\n this._resolve = resolve\n this._reject = reject\n })\n }\n\n public resolve(value: T | PromiseLike<T>): void {\n this._resolve(value)\n }\n\n public reject(reason?: any): void {\n this._reject(reason)\n }\n\n public then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null | undefined,\n onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined,\n ): Promise<TResult1 | TResult2> {\n return this.promise.then(onfulfilled, onrejected)\n }\n\n public catch<TResult = never>(\n onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null | undefined,\n ): Promise<T | TResult> {\n return this.promise.catch(onrejected)\n }\n}\n\n/**\n * 简单限流的 Promise 队列\n * Usage:\n const q = new PromiseQueue();\n [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].forEach((v) => {\n q.add(\n () =>\n new Promise((resolve) => {\n setTimeout(() => {\n console.log(v);\n resolve();\n }, 1000);\n })\n );\n});\n */\nexport class PromiseQueue {\n private readonly concurrency: number\n private _current: number = 0\n private _list: (() => Promise<any>)[] = []\n\n constructor({ concurrency = 2 }: { concurrency: number }) {\n this.concurrency = concurrency\n }\n\n add(promiseFn: () => Promise<any>) {\n this._list.push(promiseFn)\n this.loadNext()\n }\n\n loadNext() {\n if (this._list.length === 0 || this.concurrency === this._current) return\n this._current++\n const fn = this._list.shift()!\n const promise = fn.call(this)\n promise.then(this.onLoaded.bind(this)).catch(this.onLoaded.bind(this))\n }\n\n onLoaded() {\n this._current--\n this.loadNext()\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaO,SAAS,MAAS,WAA6B,SAAmC;AACvF,MAAI,UAAU;AACd,MAAI,iBAAiB;AAAA,IACnB,YAAY;AAAA,IACZ,iBAAiB,CAAC;AAAA,EACpB;AACA,SAAO,OAAO,gBAAgB,OAAO;AACrC,QAAM,EAAE,YAAY,gBAAgB,IAAI;AAExC,QAAM,eAAe,YAAwB;AAC3C,QAAI;AACF,aAAO,MAAM,UAAU;AAAA,IACzB,SAAS,KAAK;AACZ,UACE,UAAU,cACV,gBAAgB,KAAK,sBAAoB,eAAe,iBAAiB,WAAW,GACpF;AACA;AACA,eAAO,aAAa;AAAA,MACtB;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAEA,SAAO,aAAa;AACtB;AAsBO,IAAM,WAAN,MAAwB;AAAA,EAM7B,cAAc;AACZ,SAAK,UAAU,IAAI,QAAW,CAAC,SAAS,WAAW;AACjD,WAAK,WAAW;AAChB,WAAK,UAAU;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EAEO,QAAQ,OAAiC;AAC9C,SAAK,SAAS,KAAK;AAAA,EACrB;AAAA,EAEO,OAAO,QAAoB;AAChC,SAAK,QAAQ,MAAM;AAAA,EACrB;AAAA,EAEO,KACL,aACA,YAC8B;AAC9B,WAAO,KAAK,QAAQ,KAAK,aAAa,UAAU;AAAA,EAClD;AAAA,EAEO,MACL,YACsB;AACtB,WAAO,KAAK,QAAQ,MAAM,UAAU;AAAA,EACtC;AACF;AAkBO,IAAM,eAAN,MAAmB;AAAA,EAKxB,YAAY,EAAE,cAAc,EAAE,GAA4B;AAH1D,SAAQ,WAAmB;AAC3B,SAAQ,QAAgC,CAAC;AAGvC,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAI,WAA+B;AACjC,SAAK,MAAM,KAAK,SAAS;AACzB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,WAAW;AACT,QAAI,KAAK,MAAM,WAAW,KAAK,KAAK,gBAAgB,KAAK,SAAU;AACnE,SAAK;AACL,UAAM,KAAK,KAAK,MAAM,MAAM;AAC5B,UAAM,UAAU,GAAG,KAAK,IAAI;AAC5B,YAAQ,KAAK,KAAK,SAAS,KAAK,IAAI,CAAC,EAAE,MAAM,KAAK,SAAS,KAAK,IAAI,CAAC;AAAA,EACvE;AAAA,EAEA,WAAW;AACT,SAAK;AACL,SAAK,SAAS;AAAA,EAChB;AACF;","names":[]}
|
3
dist/utils/promise.util.js
vendored
3
dist/utils/promise.util.js
vendored
@ -51,8 +51,7 @@ var PromiseQueue = class {
|
||||
this.loadNext();
|
||||
}
|
||||
loadNext() {
|
||||
if (this._list.length === 0 || this.concurrency === this._current)
|
||||
return;
|
||||
if (this._list.length === 0 || this.concurrency === this._current) return;
|
||||
this._current++;
|
||||
const fn = this._list.shift();
|
||||
const promise = fn.call(this);
|
||||
|
2
dist/utils/promise.util.js.map
vendored
2
dist/utils/promise.util.js.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"sources":["../../src/utils/promise.util.ts"],"sourcesContent":["type RetryOptions = {\n maxRetries: number\n whitelistErrors: Error[]\n}\n/**\n * Usage:\n * retry(() => fetch(\"https://example.com\"), { maxRetries: 3, whitelistErrors: [] })\n * .then((response) => console.log(response))\n * .catch((error) => console.error(error));\n * @param promiseFn\n * @param options\n * @returns\n */\nexport function retry<T>(promiseFn: () => Promise<T>, options: RetryOptions): Promise<T> {\n let retries = 0\n let defaultOptions = {\n maxRetries: 3,\n whitelistErrors: [],\n }\n Object.assign(defaultOptions, options)\n const { maxRetries, whitelistErrors } = options\n\n const retryPromise = async (): Promise<T> => {\n try {\n return await promiseFn()\n } catch (err) {\n if (\n retries < maxRetries &&\n whitelistErrors.some(whitelistedError => err instanceof whitelistedError.constructor)\n ) {\n retries++\n return retryPromise()\n }\n throw err\n }\n }\n\n return retryPromise()\n}\n/**\n * 构建一个promise, 可以在任意时刻resolve或reject\n * Usage:\n * function delay(ms: number): Promise<void> {\n const deferred = new Deferred<void>();\n\n setTimeout(() => {\n deferred.resolve();\n }, ms);\n\n return deferred.promise;\n }\n\n console.log(\"start\");\n\n delay(1000).then(() => {\n console.log(\"after 1 second\");\n });\n\n console.log(\"end\");\n */\nexport class Deferred<T = any> {\n private _resolve!: (value: T | PromiseLike<T>) => void\n private _reject!: (reason?: any) => void\n\n public readonly promise: Promise<T>\n\n constructor() {\n this.promise = new Promise<T>((resolve, reject) => {\n this._resolve = resolve\n this._reject = reject\n })\n }\n\n public resolve(value: T | PromiseLike<T>): void {\n this._resolve(value)\n }\n\n public reject(reason?: any): void {\n this._reject(reason)\n }\n\n public then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null | undefined,\n onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined,\n ): Promise<TResult1 | TResult2> {\n return this.promise.then(onfulfilled, onrejected)\n }\n\n public catch<TResult = never>(\n onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null | undefined,\n ): Promise<T | TResult> {\n return this.promise.catch(onrejected)\n }\n}\n\n/**\n * 简单限流的 Promise 队列\n * Usage:\n const q = new PromiseQueue();\n [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].forEach((v) => {\n q.add(\n () =>\n new Promise((resolve) => {\n setTimeout(() => {\n console.log(v);\n resolve();\n }, 1000);\n })\n );\n});\n */\nexport class PromiseQueue {\n private readonly concurrency: number\n private _current: number = 0\n private _list: (() => Promise<any>)[] = []\n\n constructor({ concurrency = 2 }: { concurrency: number }) {\n this.concurrency = concurrency\n }\n\n add(promiseFn: () => Promise<any>) {\n this._list.push(promiseFn)\n this.loadNext()\n }\n\n loadNext() {\n if (this._list.length === 0 || this.concurrency === this._current) return\n this._current++\n const fn = this._list.shift()!\n const promise = fn.call(this)\n promise.then(this.onLoaded.bind(this)).catch(this.onLoaded.bind(this))\n }\n\n onLoaded() {\n this._current--\n this.loadNext()\n }\n}\n"],"mappings":";AAaO,SAAS,MAAS,WAA6B,SAAmC;AACvF,MAAI,UAAU;AACd,MAAI,iBAAiB;AAAA,IACnB,YAAY;AAAA,IACZ,iBAAiB,CAAC;AAAA,EACpB;AACA,SAAO,OAAO,gBAAgB,OAAO;AACrC,QAAM,EAAE,YAAY,gBAAgB,IAAI;AAExC,QAAM,eAAe,YAAwB;AAC3C,QAAI;AACF,aAAO,MAAM,UAAU;AAAA,IACzB,SAAS,KAAK;AACZ,UACE,UAAU,cACV,gBAAgB,KAAK,sBAAoB,eAAe,iBAAiB,WAAW,GACpF;AACA;AACA,eAAO,aAAa;AAAA,MACtB;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAEA,SAAO,aAAa;AACtB;AAsBO,IAAM,WAAN,MAAwB;AAAA,EAM7B,cAAc;AACZ,SAAK,UAAU,IAAI,QAAW,CAAC,SAAS,WAAW;AACjD,WAAK,WAAW;AAChB,WAAK,UAAU;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EAEO,QAAQ,OAAiC;AAC9C,SAAK,SAAS,KAAK;AAAA,EACrB;AAAA,EAEO,OAAO,QAAoB;AAChC,SAAK,QAAQ,MAAM;AAAA,EACrB;AAAA,EAEO,KACL,aACA,YAC8B;AAC9B,WAAO,KAAK,QAAQ,KAAK,aAAa,UAAU;AAAA,EAClD;AAAA,EAEO,MACL,YACsB;AACtB,WAAO,KAAK,QAAQ,MAAM,UAAU;AAAA,EACtC;AACF;AAkBO,IAAM,eAAN,MAAmB;AAAA,EAKxB,YAAY,EAAE,cAAc,EAAE,GAA4B;AAH1D,SAAQ,WAAmB;AAC3B,SAAQ,QAAgC,CAAC;AAGvC,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAI,WAA+B;AACjC,SAAK,MAAM,KAAK,SAAS;AACzB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,WAAW;AACT,QAAI,KAAK,MAAM,WAAW,KAAK,KAAK,gBAAgB,KAAK;AAAU;AACnE,SAAK;AACL,UAAM,KAAK,KAAK,MAAM,MAAM;AAC5B,UAAM,UAAU,GAAG,KAAK,IAAI;AAC5B,YAAQ,KAAK,KAAK,SAAS,KAAK,IAAI,CAAC,EAAE,MAAM,KAAK,SAAS,KAAK,IAAI,CAAC;AAAA,EACvE;AAAA,EAEA,WAAW;AACT,SAAK;AACL,SAAK,SAAS;AAAA,EAChB;AACF;","names":[]}
|
||||
{"version":3,"sources":["../../src/utils/promise.util.ts"],"sourcesContent":["type RetryOptions = {\n maxRetries: number\n whitelistErrors: Error[]\n}\n/**\n * Usage:\n * retry(() => fetch(\"https://example.com\"), { maxRetries: 3, whitelistErrors: [] })\n * .then((response) => console.log(response))\n * .catch((error) => console.error(error));\n * @param promiseFn\n * @param options\n * @returns\n */\nexport function retry<T>(promiseFn: () => Promise<T>, options: RetryOptions): Promise<T> {\n let retries = 0\n let defaultOptions = {\n maxRetries: 3,\n whitelistErrors: [],\n }\n Object.assign(defaultOptions, options)\n const { maxRetries, whitelistErrors } = options\n\n const retryPromise = async (): Promise<T> => {\n try {\n return await promiseFn()\n } catch (err) {\n if (\n retries < maxRetries &&\n whitelistErrors.some(whitelistedError => err instanceof whitelistedError.constructor)\n ) {\n retries++\n return retryPromise()\n }\n throw err\n }\n }\n\n return retryPromise()\n}\n/**\n * 构建一个promise, 可以在任意时刻resolve或reject\n * Usage:\n * function delay(ms: number): Promise<void> {\n const deferred = new Deferred<void>();\n\n setTimeout(() => {\n deferred.resolve();\n }, ms);\n\n return deferred.promise;\n }\n\n console.log(\"start\");\n\n delay(1000).then(() => {\n console.log(\"after 1 second\");\n });\n\n console.log(\"end\");\n */\nexport class Deferred<T = any> {\n private _resolve!: (value: T | PromiseLike<T>) => void\n private _reject!: (reason?: any) => void\n\n public readonly promise: Promise<T>\n\n constructor() {\n this.promise = new Promise<T>((resolve, reject) => {\n this._resolve = resolve\n this._reject = reject\n })\n }\n\n public resolve(value: T | PromiseLike<T>): void {\n this._resolve(value)\n }\n\n public reject(reason?: any): void {\n this._reject(reason)\n }\n\n public then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null | undefined,\n onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined,\n ): Promise<TResult1 | TResult2> {\n return this.promise.then(onfulfilled, onrejected)\n }\n\n public catch<TResult = never>(\n onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null | undefined,\n ): Promise<T | TResult> {\n return this.promise.catch(onrejected)\n }\n}\n\n/**\n * 简单限流的 Promise 队列\n * Usage:\n const q = new PromiseQueue();\n [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].forEach((v) => {\n q.add(\n () =>\n new Promise((resolve) => {\n setTimeout(() => {\n console.log(v);\n resolve();\n }, 1000);\n })\n );\n});\n */\nexport class PromiseQueue {\n private readonly concurrency: number\n private _current: number = 0\n private _list: (() => Promise<any>)[] = []\n\n constructor({ concurrency = 2 }: { concurrency: number }) {\n this.concurrency = concurrency\n }\n\n add(promiseFn: () => Promise<any>) {\n this._list.push(promiseFn)\n this.loadNext()\n }\n\n loadNext() {\n if (this._list.length === 0 || this.concurrency === this._current) return\n this._current++\n const fn = this._list.shift()!\n const promise = fn.call(this)\n promise.then(this.onLoaded.bind(this)).catch(this.onLoaded.bind(this))\n }\n\n onLoaded() {\n this._current--\n this.loadNext()\n }\n}\n"],"mappings":";AAaO,SAAS,MAAS,WAA6B,SAAmC;AACvF,MAAI,UAAU;AACd,MAAI,iBAAiB;AAAA,IACnB,YAAY;AAAA,IACZ,iBAAiB,CAAC;AAAA,EACpB;AACA,SAAO,OAAO,gBAAgB,OAAO;AACrC,QAAM,EAAE,YAAY,gBAAgB,IAAI;AAExC,QAAM,eAAe,YAAwB;AAC3C,QAAI;AACF,aAAO,MAAM,UAAU;AAAA,IACzB,SAAS,KAAK;AACZ,UACE,UAAU,cACV,gBAAgB,KAAK,sBAAoB,eAAe,iBAAiB,WAAW,GACpF;AACA;AACA,eAAO,aAAa;AAAA,MACtB;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAEA,SAAO,aAAa;AACtB;AAsBO,IAAM,WAAN,MAAwB;AAAA,EAM7B,cAAc;AACZ,SAAK,UAAU,IAAI,QAAW,CAAC,SAAS,WAAW;AACjD,WAAK,WAAW;AAChB,WAAK,UAAU;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EAEO,QAAQ,OAAiC;AAC9C,SAAK,SAAS,KAAK;AAAA,EACrB;AAAA,EAEO,OAAO,QAAoB;AAChC,SAAK,QAAQ,MAAM;AAAA,EACrB;AAAA,EAEO,KACL,aACA,YAC8B;AAC9B,WAAO,KAAK,QAAQ,KAAK,aAAa,UAAU;AAAA,EAClD;AAAA,EAEO,MACL,YACsB;AACtB,WAAO,KAAK,QAAQ,MAAM,UAAU;AAAA,EACtC;AACF;AAkBO,IAAM,eAAN,MAAmB;AAAA,EAKxB,YAAY,EAAE,cAAc,EAAE,GAA4B;AAH1D,SAAQ,WAAmB;AAC3B,SAAQ,QAAgC,CAAC;AAGvC,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAI,WAA+B;AACjC,SAAK,MAAM,KAAK,SAAS;AACzB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,WAAW;AACT,QAAI,KAAK,MAAM,WAAW,KAAK,KAAK,gBAAgB,KAAK,SAAU;AACnE,SAAK;AACL,UAAM,KAAK,KAAK,MAAM,MAAM;AAC5B,UAAM,UAAU,GAAG,KAAK,IAAI;AAC5B,YAAQ,KAAK,KAAK,SAAS,KAAK,IAAI,CAAC,EAAE,MAAM,KAAK,SAAS,KAAK,IAAI,CAAC;AAAA,EACvE;AAAA,EAEA,WAAW;AACT,SAAK;AACL,SAAK,SAAS;AAAA,EAChB;AACF;","names":[]}
|
560
dist/utils/wallet.util.cjs
vendored
560
dist/utils/wallet.util.cjs
vendored
File diff suppressed because it is too large
Load Diff
2
dist/utils/wallet.util.cjs.map
vendored
2
dist/utils/wallet.util.cjs.map
vendored
File diff suppressed because one or more lines are too long
565
dist/utils/wallet.util.js
vendored
565
dist/utils/wallet.util.js
vendored
File diff suppressed because it is too large
Load Diff
2
dist/utils/wallet.util.js.map
vendored
2
dist/utils/wallet.util.js.map
vendored
File diff suppressed because one or more lines are too long
22
package.json
22
package.json
@ -32,28 +32,28 @@
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@metamask/eth-sig-util": "^4.0.1",
|
||||
"@metamask/eth-sig-util": "^7.0.3",
|
||||
"crypto-js": "^4.2.0",
|
||||
"ethereumjs-util": "^7.1.5",
|
||||
"node-fetch": "2",
|
||||
"node-fetch": "3.3.2",
|
||||
"redis": "^3.1.2",
|
||||
"web3": "^1.7.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@jest/globals": "^29.7.0",
|
||||
"@types/crypto-js": "^4.2.1",
|
||||
"@types/jest": "^29.5.12",
|
||||
"@types/crypto-js": "^4.2.2",
|
||||
"@types/jest": "^29.5.13",
|
||||
"@types/node-fetch": "^2.6.11",
|
||||
"@types/redis": "^2.8.28",
|
||||
"@typescript-eslint/eslint-plugin": "^6.19.0",
|
||||
"@typescript-eslint/parser": "^6.19.0",
|
||||
"@typescript-eslint/eslint-plugin": "^8.9.0",
|
||||
"@typescript-eslint/parser": "^8.9.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"eslint-plugin-prettier": "^5.2.1",
|
||||
"jest": "^29.7.0",
|
||||
"prettier": "^3.2.3",
|
||||
"ts-jest": "^29.1.2",
|
||||
"prettier": "^3.3.3",
|
||||
"ts-jest": "^29.2.5",
|
||||
"ts-node": "^10.9.2",
|
||||
"tsup": "^8.0.1",
|
||||
"typescript": "^5.3.3"
|
||||
"tsup": "^8.3.0",
|
||||
"typescript": "^5.6.3"
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user