@defer.run/client
Advanced tools
Comparing version
@@ -55,3 +55,4 @@ "use strict"; | ||
console.log(`[defer.run][${fn.name}] defer ignore, no token found.`); | ||
return fn(...functionArguments); | ||
await fn(...functionArguments); | ||
return { id: "00000000000000000000000000000000" }; | ||
}; | ||
@@ -68,20 +69,45 @@ ret.__fn = fn; | ||
ret.await = async (...args) => { | ||
const response0 = (await (0, exports.defer)(fn)(...args)); | ||
if (!__httpClient) | ||
return Promise.resolve(response0); | ||
const response1 = await (0, client_js_1.waitExecutionResult)(__httpClient, { | ||
id: response0.id, | ||
}); | ||
if (response1.state === "failed") { | ||
let error = new Error("Defer execution failed"); | ||
if (response1.result?.message) { | ||
error = new Error(response1.result.message); | ||
error.stack = response1.result.stack; | ||
let functionArguments; | ||
try { | ||
functionArguments = JSON.parse(JSON.stringify(args)); | ||
} | ||
catch (error) { | ||
const e = error; | ||
throw new errors_js_1.DeferError(`cannot serialize argument: ${e.message}`); | ||
} | ||
if (__httpClient) { | ||
const { id } = await (0, client_js_1.enqueueExecution)(__httpClient, { | ||
name: fn.name, | ||
arguments: functionArguments, | ||
scheduleFor: new Date(), | ||
}); | ||
const response = await (0, client_js_1.waitExecutionResult)(__httpClient, { id: id }); | ||
if (response.state === "failed") { | ||
let error = new Error("Defer execution failed"); | ||
if (response.result?.message) { | ||
error = new Error(response.result.message); | ||
error.stack = response.result.stack; | ||
} | ||
else if (response.result) { | ||
error = response.result; | ||
} | ||
throw error; | ||
} | ||
else if (response1.result) { | ||
error = response1.result; | ||
return response.result; | ||
} | ||
try { | ||
return Promise.resolve(await fn(...functionArguments)); | ||
} | ||
catch (error) { | ||
// const e = error as Error; | ||
let deferError = new Error("Defer execution failed"); | ||
if (error instanceof Error) { | ||
deferError = new Error(error.message); | ||
deferError.stack = error.stack || ""; | ||
} | ||
else { | ||
deferError = error; | ||
} | ||
throw error; | ||
} | ||
return Promise.resolve(response1.result); | ||
}; | ||
@@ -88,0 +114,0 @@ return ret; |
@@ -48,3 +48,4 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ | ||
console.log(`[defer.run][${fn.name}] defer ignore, no token found.`); | ||
return fn(...functionArguments); | ||
await fn(...functionArguments); | ||
return { id: "00000000000000000000000000000000" }; | ||
}; | ||
@@ -61,20 +62,45 @@ ret.__fn = fn; | ||
ret.await = async (...args) => { | ||
const response0 = (await defer(fn)(...args)); | ||
if (!__httpClient) | ||
return Promise.resolve(response0); | ||
const response1 = await waitExecutionResult(__httpClient, { | ||
id: response0.id, | ||
}); | ||
if (response1.state === "failed") { | ||
let error = new Error("Defer execution failed"); | ||
if (response1.result?.message) { | ||
error = new Error(response1.result.message); | ||
error.stack = response1.result.stack; | ||
let functionArguments; | ||
try { | ||
functionArguments = JSON.parse(JSON.stringify(args)); | ||
} | ||
catch (error) { | ||
const e = error; | ||
throw new DeferError(`cannot serialize argument: ${e.message}`); | ||
} | ||
if (__httpClient) { | ||
const { id } = await enqueueExecution(__httpClient, { | ||
name: fn.name, | ||
arguments: functionArguments, | ||
scheduleFor: new Date(), | ||
}); | ||
const response = await waitExecutionResult(__httpClient, { id: id }); | ||
if (response.state === "failed") { | ||
let error = new Error("Defer execution failed"); | ||
if (response.result?.message) { | ||
error = new Error(response.result.message); | ||
error.stack = response.result.stack; | ||
} | ||
else if (response.result) { | ||
error = response.result; | ||
} | ||
throw error; | ||
} | ||
else if (response1.result) { | ||
error = response1.result; | ||
return response.result; | ||
} | ||
try { | ||
return Promise.resolve(await fn(...functionArguments)); | ||
} | ||
catch (error) { | ||
// const e = error as Error; | ||
let deferError = new Error("Defer execution failed"); | ||
if (error instanceof Error) { | ||
deferError = new Error(error.message); | ||
deferError.stack = error.stack || ""; | ||
} | ||
else { | ||
deferError = error; | ||
} | ||
throw error; | ||
} | ||
return Promise.resolve(response1.result); | ||
}; | ||
@@ -81,0 +107,0 @@ return ret; |
{ | ||
"name": "@defer.run/client", | ||
"version": "1.0.0-alpha-20230224163353-d791d79", | ||
"version": "1.0.0-alpha-20230224174742-0a3a02b", | ||
"description": "Zero infrastructure NodeJS background jobs", | ||
@@ -5,0 +5,0 @@ "dependencies": { |
@@ -24,3 +24,3 @@ import { Units } from "parse-duration"; | ||
export interface DeferRetFn<F extends (...args: any | undefined) => Promise<any>> extends HasDeferMetadata { | ||
(...args: Parameters<F>): ReturnType<F> | Promise<EnqueueExecutionResponse>; | ||
(...args: Parameters<F>): Promise<EnqueueExecutionResponse>; | ||
__fn: F; | ||
@@ -34,3 +34,3 @@ await: DeferAwaitRetFn<F>; | ||
export interface DeferAwaitRetFn<F extends (...args: any | undefined) => Promise<any>> { | ||
(...args: Parameters<F>): Promise<UnPromise<ReturnType<F>> | EnqueueExecutionResponse>; | ||
(...args: Parameters<F>): Promise<UnPromise<ReturnType<F>>>; | ||
} | ||
@@ -37,0 +37,0 @@ export interface Defer { |
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
36359
5.1%817
6.8%1
-50%