@orpc/shared
Advanced tools
Comparing version 0.0.0-next.bc564a6 to 0.0.0-next.bc9d3dd
@@ -25,59 +25,68 @@ // src/constants.ts | ||
// src/hook.ts | ||
async function executeWithHooks(options) { | ||
const interceptors = convertToArray(options.hooks?.interceptor); | ||
const onStarts = convertToArray(options.hooks?.onStart); | ||
const onSuccesses = convertToArray(options.hooks?.onSuccess); | ||
const onErrors = convertToArray(options.hooks?.onError); | ||
const onFinishes = convertToArray(options.hooks?.onFinish); | ||
let currentExecuteIndex = 0; | ||
const next = async () => { | ||
const execute = interceptors[currentExecuteIndex]; | ||
if (execute) { | ||
currentExecuteIndex++; | ||
return await execute(options.input, options.context, { | ||
...options.meta, | ||
next | ||
}); | ||
// src/function.ts | ||
function once(fn) { | ||
let cached; | ||
return () => { | ||
if (cached) { | ||
return cached.result; | ||
} | ||
let state = { status: "pending", input: options.input, output: void 0, error: void 0 }; | ||
const result = fn(); | ||
cached = { result }; | ||
return result; | ||
}; | ||
} | ||
// src/interceptor.ts | ||
function onStart(callback) { | ||
return async (options, ...rest) => { | ||
await callback(options, ...rest); | ||
return await options.next(); | ||
}; | ||
} | ||
function onSuccess(callback) { | ||
return async (options, ...rest) => { | ||
const result = await options.next(); | ||
await callback(result, options, ...rest); | ||
return result; | ||
}; | ||
} | ||
function onError(callback) { | ||
return async (options, ...rest) => { | ||
try { | ||
for (const onStart of onStarts) { | ||
await onStart(state, options.context, options.meta); | ||
} | ||
const output = await options.execute(); | ||
state = { status: "success", input: options.input, output, error: void 0 }; | ||
for (let i = onSuccesses.length - 1; i >= 0; i--) { | ||
await onSuccesses[i](state, options.context, options.meta); | ||
} | ||
} catch (e) { | ||
state = { status: "error", input: options.input, error: toError(e), output: void 0 }; | ||
for (let i = onErrors.length - 1; i >= 0; i--) { | ||
try { | ||
await onErrors[i](state, options.context, options.meta); | ||
} catch (e2) { | ||
state = { status: "error", input: options.input, error: toError(e2), output: void 0 }; | ||
} | ||
} | ||
return await options.next(); | ||
} catch (error) { | ||
await callback(error, options, ...rest); | ||
throw error; | ||
} | ||
for (let i = onFinishes.length - 1; i >= 0; i--) { | ||
try { | ||
await onFinishes[i](state, options.context, options.meta); | ||
} catch (e) { | ||
state = { status: "error", input: options.input, error: toError(e), output: void 0 }; | ||
} | ||
}; | ||
} | ||
function onFinish(callback) { | ||
let state; | ||
return async (options, ...rest) => { | ||
try { | ||
const result = await options.next(); | ||
state = [result, void 0, "success"]; | ||
return result; | ||
} catch (error) { | ||
state = [void 0, error, "error"]; | ||
throw error; | ||
} finally { | ||
await callback(state, options, ...rest); | ||
} | ||
if (state.status === "error") { | ||
throw state.error; | ||
}; | ||
} | ||
async function intercept(interceptors, options, main) { | ||
let index = 0; | ||
const next = async (options2) => { | ||
const interceptor = interceptors[index++]; | ||
if (!interceptor) { | ||
return await main(options2); | ||
} | ||
return state.output; | ||
return await interceptor({ | ||
...options2, | ||
next: (newOptions = options2) => next(newOptions) | ||
}); | ||
}; | ||
return await next(); | ||
return await next(options); | ||
} | ||
function convertToArray(value2) { | ||
if (value2 === void 0) { | ||
return []; | ||
} | ||
return Array.isArray(value2) ? value2 : [value2]; | ||
} | ||
@@ -182,5 +191,3 @@ // src/json.ts | ||
ORPC_HANDLER_VALUE, | ||
convertToArray, | ||
createCallableObject, | ||
executeWithHooks, | ||
findDeepMatches, | ||
@@ -190,2 +197,3 @@ get, | ||
guard, | ||
intercept, | ||
isPlainObject3 as isPlainObject, | ||
@@ -195,2 +203,7 @@ mapEntries, | ||
omit, | ||
onError, | ||
onFinish, | ||
onStart, | ||
onSuccess, | ||
once, | ||
parseJSONSafely, | ||
@@ -197,0 +210,0 @@ set, |
export type AnyFunction = (...args: any[]) => any; | ||
export declare function once<T extends () => any>(fn: T): () => ReturnType<T>; | ||
//# sourceMappingURL=function.d.ts.map |
@@ -5,3 +5,3 @@ export * from './chain'; | ||
export * from './function'; | ||
export * from './hook'; | ||
export * from './interceptor'; | ||
export * from './json'; | ||
@@ -8,0 +8,0 @@ export * from './object'; |
export type Segment = string | number; | ||
export declare function set(root: Readonly<Record<string, unknown> | unknown[]>, segments: Readonly<Segment[]>, value: unknown): unknown; | ||
export declare function set(root: unknown, segments: Readonly<Segment[]>, value: unknown): unknown; | ||
export declare function get(root: Readonly<Record<string, unknown> | unknown[]>, segments: Readonly<Segment[]>): unknown; | ||
@@ -4,0 +4,0 @@ export declare function findDeepMatches(check: (value: unknown) => boolean, payload: unknown, segments?: Segment[], maps?: Segment[][], values?: unknown[]): { |
{ | ||
"name": "@orpc/shared", | ||
"type": "module", | ||
"version": "0.0.0-next.bc564a6", | ||
"version": "0.0.0-next.bc9d3dd", | ||
"license": "MIT", | ||
@@ -32,3 +32,2 @@ "homepage": "https://orpc.unnoq.com", | ||
"dependencies": { | ||
"@standard-schema/spec": "1.0.0-beta.4", | ||
"is-what": "^5.0.2", | ||
@@ -35,0 +34,0 @@ "radash": "^12.1.0", |
11895
3
282
228
228
- Removed@standard-schema/spec@1.0.0-beta.4
- Removed@standard-schema/spec@1.0.0-beta.4(transitive)