MCPcopy Create free account
hub / github.com/UsefulSoftwareCo/executor / promisifyDeep

Function promisifyDeep

packages/core/sdk/src/promise-executor.ts:165–197  ·  view source on GitHub ↗
(value: T)

Source from the content-addressed store, hash-verified

163 args.map((arg) => adaptPromiseInvokeOptions(arg));
164
165const promisifyDeep = <T>(value: T): Promisified<T> => {
166 if (typeof value === "function") {
167 return ((...args: unknown[]) => {
168 const result = (value as (...a: unknown[]) => unknown).apply(
169 undefined,
170 adaptPromiseArgs(args),
171 );
172 if (Effect.isEffect(result)) {
173 return Effect.runPromise(result as Effect.Effect<unknown, unknown>);
174 }
175 return result;
176 }) as Promisified<T>;
177 }
178
179 if (!isPlainObject(value)) return value as Promisified<T>;
180
181 return new Proxy(value, {
182 get(target, prop, receiver) {
183 const v = Reflect.get(target, prop, receiver);
184 if (typeof v === "function") {
185 return (...args: unknown[]) => {
186 const result = (v as (...a: unknown[]) => unknown).apply(target, adaptPromiseArgs(args));
187 if (Effect.isEffect(result)) {
188 return Effect.runPromise(result as Effect.Effect<unknown, unknown>);
189 }
190 return result;
191 };
192 }
193 if (isPlainObject(v)) return promisifyDeep(v);
194 return v;
195 },
196 }) as Promisified<T>;
197};
198
199// ---------------------------------------------------------------------------
200// createExecutor — Promise wrapper over the Effect createExecutor.

Callers 2

getFunction · 0.85
createExecutorFunction · 0.85

Calls 2

adaptPromiseArgsFunction · 0.85
isPlainObjectFunction · 0.70

Tested by

no test coverage detected