brickflow 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/worker/execution.ts","../src/brick/failure.ts","../src/brick/implementation.ts","../src/path-segment.ts","../src/signal/namespace.ts","../src/engine/execution-context.ts","../src/signal/handler.ts","../src/signal/functions.ts","../src/worker/local-worker.ts","../src/worker/run.ts","../src/brick/contract.ts","../src/layer/composition.ts","../src/layer/provide.ts","../src/layer/layer.ts"],"sourcesContent":["export { P } from 'ts-pattern'\nexport type { Brick } from './brick/contract'\nexport { brick } from './brick/contract'\nexport type {\n BrickExecutionResult,\n BrickHandler,\n BrickImplementation,\n BrickOf,\n BrickRunOptionArgs,\n BrickRunOptions,\n BrickTools,\n DependenciesOf,\n DependencyFunctions,\n EffectiveDependenciesOf,\n EffectiveErrorsOf,\n EffectiveRequirementsOf,\n EffectiveSignalsOf,\n ErrorsOf,\n ParamsOf,\n RequirementsOf,\n ResultOf,\n SignalsOf\n} from './brick/types'\nexport type { ExecutionContextOptions } from './engine/execution-context'\nexport { ExecutionContext } from './engine/execution-context'\nexport type {\n EngineExecutionHandle,\n EngineExecutionRequest,\n EngineExecutionResult,\n EngineSignalRequest,\n EngineStatus\n} from './engine/types'\nexport { Layer } from './layer/layer'\nexport type {\n AnyLayer,\n FlattenedLayerEntry,\n LayerEntries,\n LayerEntriesOf,\n LayerEntry,\n LayerProvidersOf,\n LayerRequirementsOf,\n LayerUnprovidedRequirementsOf,\n RequirementConflict\n} from './layer/types'\nexport type {\n MatchedError,\n MatchingBuilder,\n MatchingOutcome,\n MatchingThunk,\n RecoveryValue,\n RemainingErrors,\n SupportedPattern\n} from './matching/types'\nexport { MissingSignalHandlerError, NonBoundarySignalHandlerChainError } from './signal/handler'\nexport type {\n BoundarySignalHandler,\n BoundarySignalHandlers,\n InternalSignalHandler,\n InternalSignalHandlers,\n SignalCallMetadata,\n SignalDefinition,\n SignalDefinitions,\n SignalFunction,\n SignalFunctions,\n SignalHandlerChain,\n SignalRequest,\n SignalResponse\n} from './signal/types'\nexport type { Worker } from './worker/contract'\nexport {\n DuplicateLocalRunIdError,\n LocalRunCancelledError,\n LocalWorker,\n localWorker\n} from './worker/local-worker'\nexport { UnhandledBrickFailureError } from './worker/run'\nexport type {\n BrickRun,\n BrickRunControls,\n CompleteBrickRun,\n IncompleteBrickRun,\n RunMetadata\n} from './worker/types'\n","import { randomUUID } from 'node:crypto'\nimport type { Brick } from '../brick/contract'\nimport { failWith } from '../brick/failure'\nimport { executeBrickImplementation } from '../brick/implementation'\nimport type {\n AnyBrickImplementation,\n BrickImplementation,\n DependencyFunctions,\n EffectiveErrorsOf,\n ParamsOf,\n RequirementsOf,\n ResultOf\n} from '../brick/types'\nimport { ExecutionContext } from '../engine/execution-context'\nimport type { EngineExecutionRequest } from '../engine/types'\nimport { assertValidPathSegment } from '../path-segment'\nimport { createSignalFunctions } from '../signal/functions'\nimport { createSignalHandlerChain, resolveSignal } from '../signal/handler'\nimport { flattenNamespacedSignalHandlers } from '../signal/namespace'\nimport type { SignalHandlerChain, UnknownSignalHandlers } from '../signal/types'\nimport type { Worker } from './contract'\nimport { localWorker } from './local-worker'\nimport { createBrickRun } from './run'\nimport type { BrickRun, RunMetadata } from './types'\n\nexport interface SuppliedDependencyNode {\n readonly brick?: AnyBrickImplementation\n readonly dependencies?: Readonly<Record<string, SuppliedDependencyNode>>\n}\n\nexport interface ExecutionEntry {\n readonly id?: string\n readonly key: string\n readonly implementation: AnyBrickImplementation\n readonly suppliedDependencies?: Readonly<Record<string, SuppliedDependencyNode>>\n readonly suppliedPath?: readonly string[]\n readonly signalPath?: readonly string[]\n readonly ownSignalPath?: readonly string[]\n}\n\ninterface ExecuteOptions<F extends Brick> {\n readonly root: ExecutionEntry\n readonly entries: readonly ExecutionEntry[]\n readonly params: ParamsOf<F>\n readonly providers: Readonly<Record<string, unknown>>\n readonly resolveDependency: (caller: ExecutionEntry, alias: string) => ExecutionEntry\n readonly signals?: Readonly<Record<string, unknown>>\n readonly directSignals?: boolean\n readonly worker?: Worker\n readonly id?: string\n readonly metadata?: RunMetadata\n}\n\nfunction directSignalChain(handlers: Readonly<Record<string, unknown>>): SignalHandlerChain {\n return createSignalHandlerChain(flattenNamespacedSignalHandlers(handlers), undefined, true)\n}\n\nasync function executeResolvedBrick<F extends Brick>(\n entry: ExecutionEntry,\n params: ParamsOf<F>,\n options: ExecuteOptions<F>,\n context: ExecutionContext\n) {\n const implementation = entry.implementation as unknown as BrickImplementation<F>\n const dependencies = new Proxy(Object.create(null) as DependencyFunctions<F>, {\n get(_target, property) {\n if (typeof property !== 'string') return undefined\n assertValidPathSegment(property)\n const dependencyEntry = options.resolveDependency(entry, property)\n return async (\n dependencyParams: unknown,\n callOptions?: { readonly signals?: Readonly<Record<string, unknown>> }\n ) => {\n const signalPath = dependencyEntry.signalPath ??\n dependencyEntry.suppliedPath ??\n dependencyEntry.id?.split('.') ?? [dependencyEntry.key]\n const layerPath = signalPath.slice(0, -1)\n const brickPath = [signalPath.at(-1) ?? dependencyEntry.key]\n const parentSignalHandlers = context.signalHandlers\n const localHandlers = callOptions?.signals\n ? createSignalHandlerChain(\n Object.fromEntries(\n Object.entries(callOptions.signals).map(([name, handler]) => {\n assertValidPathSegment(name)\n return [[...signalPath, name].join('.'), handler]\n })\n ) as UnknownSignalHandlers,\n parentSignalHandlers,\n false\n )\n : parentSignalHandlers\n const dependencyContext = new ExecutionContext({\n layerPath,\n brickPath,\n callId: context.callId,\n providers: context.providers,\n ...(localHandlers ? { signalHandlers: localHandlers } : {})\n })\n const outcome = await executeResolvedBrick(\n dependencyEntry,\n dependencyParams as never,\n options as ExecuteOptions<Brick>,\n dependencyContext\n )\n if (outcome.ok) return outcome.value\n return failWith(outcome.error as never)\n }\n }\n })\n const signalContext = entry.ownSignalPath\n ? new ExecutionContext({\n layerPath: entry.ownSignalPath.slice(0, -1),\n brickPath: [entry.ownSignalPath.at(-1) ?? entry.key],\n callId: context.callId,\n providers: context.providers,\n ...(context.signalHandlers ? { signalHandlers: context.signalHandlers } : {})\n })\n : context\n const signals = createSignalFunctions(signalContext) as Parameters<\n typeof executeBrickImplementation<F>\n >[4]\n return executeBrickImplementation(\n implementation,\n params,\n context.providers as RequirementsOf<F>,\n dependencies,\n signals\n )\n}\n\nexport function executeBrick<F extends Brick>(\n options: ExecuteOptions<F>\n): BrickRun<EffectiveErrorsOf<F>, ResultOf<F>> {\n const id = options.id ?? randomUUID()\n const handlers = options.signals ?? {}\n const boundary = options.directSignals\n ? directSignalChain(handlers)\n : createSignalHandlerChain(flattenNamespacedSignalHandlers(handlers), undefined, true)\n const rootId = options.root.id?.split('.') ?? []\n const context = new ExecutionContext({\n layerPath: rootId.slice(0, -1),\n brickPath: rootId.length > 0 ? [rootId.at(-1) as string] : [],\n callId: id,\n providers: options.providers,\n signalHandlers: boundary\n })\n const request: EngineExecutionRequest<ResultOf<F>, EffectiveErrorsOf<F>> = {\n id,\n ...(options.root.id ? { brickId: options.root.id } : {}),\n params: options.params,\n ...(options.metadata ? { metadata: options.metadata } : {}),\n context,\n execute: () => executeResolvedBrick(options.root, options.params, options, context),\n signal: ({ name, request: signalRequest }) => resolveSignal(boundary, name, signalRequest)\n }\n return createBrickRun((options.worker ?? localWorker).start(request))\n}\n\nfunction createSuppliedEntry(\n key: string,\n brick: AnyBrickImplementation,\n dependencies: Readonly<Record<string, SuppliedDependencyNode>> | undefined,\n path: readonly string[]\n): ExecutionEntry {\n const id = [...path, key].join('.')\n return Object.freeze({\n id,\n key,\n implementation: brick,\n suppliedPath: Object.freeze([...path, key]),\n ...(dependencies ? { suppliedDependencies: dependencies } : {})\n })\n}\n\nexport function runDirectBrick<F extends Brick>(\n implementation: BrickImplementation<F>,\n params: ParamsOf<F>,\n options?: Readonly<{\n requirements?: Readonly<Record<string, unknown>>\n dependencies?: Readonly<Record<string, SuppliedDependencyNode>>\n signals?: Readonly<Record<string, unknown>>\n worker?: Worker\n id?: string\n metadata?: RunMetadata\n }>\n): BrickRun<EffectiveErrorsOf<F>, ResultOf<F>> {\n const root = Object.freeze({\n key: 'direct',\n implementation,\n ...(options?.dependencies ? { suppliedDependencies: options.dependencies } : {})\n })\n return executeBrick({\n root,\n entries: [root],\n params,\n providers: Object.freeze({ ...(options?.requirements ?? {}) }),\n resolveDependency: (caller, alias) => {\n const node = caller.suppliedDependencies?.[alias]\n if (!node?.brick) throw new Error(`Missing direct dependency Brick \"${alias}\"`)\n return createSuppliedEntry(alias, node.brick, node.dependencies, caller.id?.split('.') ?? [])\n },\n directSignals: true,\n ...(options?.signals ? { signals: options.signals } : {}),\n ...(options?.worker ? { worker: options.worker } : {}),\n ...(typeof options?.id === 'string' ? { id: options.id } : {}),\n ...(options?.metadata ? { metadata: options.metadata } : {})\n })\n}\n","class BrickFailure<E> {\n readonly error: E\n\n constructor(error: E) {\n this.error = error\n }\n}\n\nexport function failWith<E>(error: E): never {\n throw new BrickFailure(error)\n}\n\nexport function readBrickFailure(value: unknown): unknown | undefined {\n return value instanceof BrickFailure ? value.error : undefined\n}\n\nexport function isBrickFailure(value: unknown): boolean {\n return value instanceof BrickFailure\n}\n","import type { SignalDefinitions, SignalFunctions } from '../signal/types'\nimport type { Brick } from './contract'\nimport { failWith, isBrickFailure, readBrickFailure } from './failure'\nimport type {\n BrickExecutionResult,\n BrickImplementation,\n DependencyFunctions,\n ErrorsOf,\n ParamsOf,\n RequirementsOf,\n SignalsOf\n} from './types'\n\nconst implementationBrand = Symbol('BrickImplementation')\n\ntype BrandedImplementation = { readonly [implementationBrand]: true }\n\nexport function markBrickImplementation(target: object): void {\n Object.defineProperty(target, implementationBrand, {\n configurable: false,\n enumerable: false,\n value: true,\n writable: false\n })\n}\n\nexport function isBrickImplementation(value: unknown): value is BrickImplementation {\n return (\n typeof value === 'object' &&\n value !== null &&\n Object.hasOwn(value, implementationBrand) &&\n (value as BrandedImplementation)[implementationBrand] === true\n )\n}\n\nexport async function executeBrickImplementation<F extends Brick>(\n implementation: BrickImplementation<F>,\n params: ParamsOf<F>,\n requirements: RequirementsOf<F>,\n dependencies: DependencyFunctions<F>,\n signals: SignalsOf<F> extends SignalDefinitions ? SignalFunctions<SignalsOf<F>> : never\n): Promise<BrickExecutionResult<F>> {\n try {\n const value = await implementation.handler(params, requirements, dependencies, {\n fail: failWith,\n signals\n })\n return { ok: true, value }\n } catch (error) {\n if (!isBrickFailure(error)) throw error\n return { ok: false, error: readBrickFailure(error) as ErrorsOf<F> }\n }\n}\n","export const PATH_DELIMITER = '.'\n\nexport type ValidPathSegment<Value extends string> = Value extends ''\n ? never\n : Value extends `${string}.${string}`\n ? never\n : Value\n\nexport type ValidatePathSegmentKeys<Values extends object> = {\n readonly [Key in keyof Values]: Key extends string\n ? ValidPathSegment<Key> extends never\n ? never\n : Values[Key]\n : never\n}\n\nexport type HasValidPathSegmentKeys<Values extends object> =\n Values extends ValidatePathSegmentKeys<Values> ? true : false\n\nexport function assertValidPathSegment(segment: string): void {\n if (segment.length === 0) {\n throw new Error('Invalid path segment: segment must not be empty')\n }\n if (segment.includes(PATH_DELIMITER)) {\n throw new Error(\n `Invalid path segment \"${segment}\": \"${PATH_DELIMITER}\" is a reserved delimiter`\n )\n }\n}\n","import { assertValidPathSegment } from '../path-segment'\nimport type { SignalCallMetadata, UnknownSignalHandlers } from './types'\n\nexport type NamespacedHandlers<Path extends readonly string[], Handlers> = Path extends readonly [\n infer Head extends string,\n ...infer Tail extends readonly string[]\n]\n ? Readonly<Record<Head, NamespacedHandlers<Tail, Handlers>>>\n : Handlers\n\nfunction isHandler(value: unknown): value is NonNullable<UnknownSignalHandlers[string]> {\n return typeof value === 'function'\n}\n\nexport function flattenNamespacedSignalHandlers(\n handlers: Readonly<Record<string, unknown>>,\n path: readonly string[] = []\n): UnknownSignalHandlers {\n const flattened = Object.create(null) as Record<\n string,\n NonNullable<UnknownSignalHandlers[string]>\n >\n\n for (const [name, value] of Object.entries(handlers)) {\n assertValidPathSegment(name)\n const durableName = durableSignalName(path, name)\n if (isHandler(value)) {\n flattened[durableName] = value\n continue\n }\n if (typeof value === 'object' && value !== null) {\n Object.assign(\n flattened,\n flattenNamespacedSignalHandlers(value as Readonly<Record<string, unknown>>, [...path, name])\n )\n continue\n }\n throw new Error(`Invalid signal handler at \"${durableName}\"`)\n }\n\n return Object.freeze(flattened)\n}\n\nexport function namespaceSignalHandlers<const Path extends readonly string[], Handlers>(\n path: Path,\n handlers: Handlers\n): NamespacedHandlers<Path, Handlers> {\n for (const segment of path) assertValidPathSegment(segment)\n return path.reduceRight<unknown>(\n (nested, segment) => ({ [segment]: nested }),\n handlers\n ) as NamespacedHandlers<Path, Handlers>\n}\n\nexport function durableSignalName(path: readonly string[], signalName: string): string {\n for (const segment of path) assertValidPathSegment(segment)\n assertValidPathSegment(signalName)\n return [...path, signalName].join('.')\n}\n\nexport function signalCallMetadata(\n layerPath: readonly string[],\n brickPath: readonly string[],\n signalName: string,\n callId: string,\n occurrence: number\n): SignalCallMetadata {\n const stableLayerPath = Object.freeze([...layerPath])\n const stableBrickPath = Object.freeze([...brickPath])\n return Object.freeze({\n durableName: durableSignalName([...stableLayerPath, ...stableBrickPath], signalName),\n signalName,\n layerPath: stableLayerPath,\n brickPath: stableBrickPath,\n callId,\n occurrence\n })\n}\n\nexport function flattenSignalHandlers(\n namespace: readonly string[],\n handlers: UnknownSignalHandlers\n): Readonly<Record<string, UnknownSignalHandlers[string]>> {\n return Object.freeze(\n Object.fromEntries(\n Object.entries(handlers).map(([name, handler]) => [\n durableSignalName(namespace, name),\n handler\n ])\n )\n )\n}\n","import { assertValidPathSegment } from '../path-segment'\nimport { signalCallMetadata } from '../signal/namespace'\nimport type { SignalCallMetadata, SignalHandlerChain } from '../signal/types'\n\nexport interface ExecutionContextOptions {\n readonly layerPath?: readonly string[]\n readonly brickPath?: readonly string[]\n readonly callId: string\n readonly providers?: Readonly<Record<string, unknown>>\n readonly signalHandlers?: SignalHandlerChain\n}\n\nexport class ExecutionContext {\n readonly layerPath: readonly string[]\n readonly brickPath: readonly string[]\n readonly callId: string\n readonly providers: Readonly<Record<string, unknown>>\n readonly signalHandlers: SignalHandlerChain | undefined\n readonly #signalOccurrences = new Map<string, number>()\n\n constructor(options: ExecutionContextOptions) {\n const layerPath = [...(options.layerPath ?? [])]\n const brickPath = [...(options.brickPath ?? [])]\n for (const segment of layerPath) assertValidPathSegment(segment)\n for (const segment of brickPath) assertValidPathSegment(segment)\n this.layerPath = Object.freeze(layerPath)\n this.brickPath = Object.freeze(brickPath)\n this.callId = options.callId\n this.providers = options.providers ?? Object.freeze({})\n this.signalHandlers = options.signalHandlers\n Object.freeze(this)\n }\n\n childLayer(segment: string): ExecutionContext {\n assertValidPathSegment(segment)\n return new ExecutionContext({\n layerPath: [...this.layerPath, segment],\n brickPath: this.brickPath,\n callId: this.callId,\n providers: this.providers,\n ...(this.signalHandlers ? { signalHandlers: this.signalHandlers } : {})\n })\n }\n\n childBrick(segment: string, callId: string): ExecutionContext {\n assertValidPathSegment(segment)\n return new ExecutionContext({\n layerPath: this.layerPath,\n brickPath: [...this.brickPath, segment],\n callId,\n providers: this.providers,\n ...(this.signalHandlers ? { signalHandlers: this.signalHandlers } : {})\n })\n }\n\n withSignalHandlers(signalHandlers: SignalHandlerChain): ExecutionContext {\n return new ExecutionContext({\n layerPath: this.layerPath,\n brickPath: this.brickPath,\n callId: this.callId,\n providers: this.providers,\n signalHandlers\n })\n }\n\n nextSignalMetadata(signalName: string): SignalCallMetadata {\n const occurrence = (this.#signalOccurrences.get(signalName) ?? 0) + 1\n this.#signalOccurrences.set(signalName, occurrence)\n return signalCallMetadata(this.layerPath, this.brickPath, signalName, this.callId, occurrence)\n }\n}\n","import type { SignalHandlerChain, UnknownSignalHandlers } from './types'\n\nexport class NonBoundarySignalHandlerChainError extends Error {\n readonly signalName: string\n\n constructor(signalName: string) {\n super(`Signal handler chain exhausted before reaching a boundary for \"${signalName}\"`)\n this.name = 'NonBoundarySignalHandlerChainError'\n this.signalName = signalName\n }\n}\n\nexport class MissingSignalHandlerError extends Error {\n readonly signalName: string\n\n constructor(signalName: string) {\n super(`No boundary handler resolved signal \"${signalName}\"`)\n this.name = 'MissingSignalHandlerError'\n this.signalName = signalName\n }\n}\n\nexport function createSignalHandlerChain(\n handlers: UnknownSignalHandlers,\n parent?: SignalHandlerChain,\n boundary = false\n): SignalHandlerChain {\n const chain: SignalHandlerChain = parent\n ? { handlers: Object.freeze({ ...handlers }), parent, boundary }\n : { handlers: Object.freeze({ ...handlers }), boundary }\n return Object.freeze(chain)\n}\n\nexport async function resolveSignal<Response>(\n chain: SignalHandlerChain,\n signalName: string,\n request: unknown\n): Promise<Response> {\n const handler = Object.hasOwn(chain.handlers, signalName) ? chain.handlers[signalName] : undefined\n if (handler) {\n const response = await handler(request)\n if (response !== undefined) {\n return response as Response\n }\n }\n\n if (chain.parent) {\n return resolveSignal<Response>(chain.parent, signalName, request)\n }\n\n if (chain.boundary) {\n throw new MissingSignalHandlerError(signalName)\n }\n\n throw new NonBoundarySignalHandlerChainError(signalName)\n}\n","import type { ExecutionContext } from '../engine/execution-context'\nimport type { EngineSignalRequest } from '../engine/types'\nimport { assertValidPathSegment } from '../path-segment'\nimport { resolveSignal } from './handler'\nimport type { SignalDefinitions, SignalFunctions } from './types'\n\nexport type SignalDispatch = (signal: EngineSignalRequest) => Promise<unknown>\n\nexport function createSignalFunctions<Definitions extends SignalDefinitions>(\n context: ExecutionContext,\n dispatch?: SignalDispatch\n): SignalFunctions<Definitions> {\n const functions = new Map<string, (request: unknown) => Promise<unknown>>()\n const target = Object.freeze({})\n\n return new Proxy(target, {\n get(_target, property) {\n if (typeof property !== 'string') return undefined\n assertValidPathSegment(property)\n let signal = functions.get(property)\n if (!signal) {\n signal = async (request: unknown) => {\n const metadata = context.nextSignalMetadata(property)\n if (context.signalHandlers) {\n return resolveSignal(context.signalHandlers, metadata.durableName, request)\n }\n if (dispatch) {\n return dispatch({ name: metadata.durableName, request })\n }\n throw new Error(`No signal dispatch configured for \"${metadata.durableName}\"`)\n }\n functions.set(property, signal)\n }\n return signal\n }\n }) as SignalFunctions<Definitions>\n}\n","import type {\n EngineExecutionHandle,\n EngineExecutionRequest,\n EngineExecutionResult,\n EngineStatus\n} from '../engine/types'\nimport type { Worker } from './contract'\n\nexport class LocalRunCancelledError extends Error {\n readonly runId: string\n readonly reason: string | undefined\n\n constructor(runId: string, reason?: string) {\n super(\n reason === undefined\n ? `Local run \"${runId}\" was cancelled`\n : `Local run \"${runId}\" was cancelled: ${reason}`\n )\n this.name = 'LocalRunCancelledError'\n this.runId = runId\n this.reason = reason\n }\n}\n\nexport class DuplicateLocalRunIdError extends Error {\n readonly runId: string\n\n constructor(runId: string) {\n super(`Local run ID \"${runId}\" already exists`)\n this.name = 'DuplicateLocalRunIdError'\n this.runId = runId\n }\n}\n\nclass LocalRun<Result, Failure> implements EngineExecutionHandle<Result, Failure> {\n readonly id: string\n readonly result: Promise<EngineExecutionResult<Result, Failure>>\n private currentStatus: EngineStatus = 'queued'\n private cancellation: LocalRunCancelledError | undefined\n private rejectResult!: (error: unknown) => void\n\n constructor(private readonly request: EngineExecutionRequest<Result, Failure>) {\n this.id = request.id\n this.result = new Promise((resolve, reject) => {\n this.rejectResult = reject\n queueMicrotask(async () => {\n if (this.cancellation !== undefined) return\n this.currentStatus = 'running'\n try {\n const result = await this.request.execute()\n if (this.cancellation !== undefined) return\n this.currentStatus = result.ok ? 'completed' : 'failed'\n resolve(result)\n } catch (error) {\n if (this.cancellation !== undefined) return\n this.currentStatus = 'failed'\n reject(error)\n }\n })\n })\n }\n\n async status(): Promise<EngineStatus> {\n return this.currentStatus\n }\n\n async cancel(reason?: string): Promise<void> {\n if (\n this.cancellation !== undefined ||\n this.currentStatus === 'completed' ||\n this.currentStatus === 'failed'\n ) {\n return\n }\n this.cancellation = new LocalRunCancelledError(this.id, reason)\n this.currentStatus = 'cancelled'\n this.rejectResult(this.cancellation)\n }\n\n async signal(signal: Parameters<EngineExecutionRequest<Result, Failure>['signal']>[0]) {\n if (this.cancellation !== undefined) throw this.cancellation\n return this.request.signal(signal)\n }\n}\n\nexport class LocalWorker implements Worker {\n private readonly runIds = new Set<string>()\n\n start<Result, Failure>(\n request: EngineExecutionRequest<Result, Failure>\n ): EngineExecutionHandle<Result, Failure> {\n if (this.runIds.has(request.id)) throw new DuplicateLocalRunIdError(request.id)\n this.runIds.add(request.id)\n return new LocalRun(request)\n }\n}\n\nexport const localWorker: Worker = new LocalWorker()\n","import { isMatching } from 'ts-pattern'\nimport type { EngineExecutionHandle, EngineExecutionResult } from '../engine/types'\nimport type { SupportedPattern } from '../matching/types'\nimport type { BrickRun } from './types'\n\ninterface RegisteredHandler {\n readonly pattern: SupportedPattern<unknown>\n readonly handler: (error: never) => unknown | Promise<unknown>\n}\n\nexport class UnhandledBrickFailureError extends Error {\n readonly failure: unknown\n\n constructor(failure: unknown) {\n super(`Unhandled Brick failure: ${readableFailure(failure)}`)\n this.name = 'UnhandledBrickFailureError'\n this.failure = failure\n }\n}\n\nfunction readableFailure(failure: unknown): string {\n if (typeof failure === 'string') return failure\n try {\n return JSON.stringify(failure)\n } catch {\n return String(failure)\n }\n}\n\nclass BrickRunImplementation<Error, InitialSuccess, LocalResult, RemainingError> {\n readonly id: string\n readonly #handle: EngineExecutionHandle<InitialSuccess, Error>\n readonly #handlers: readonly RegisteredHandler[]\n #execution?: Promise<LocalResult>\n\n constructor(\n handle: EngineExecutionHandle<InitialSuccess, Error>,\n handlers: readonly RegisteredHandler[] = []\n ) {\n this.id = handle.id\n this.#handle = handle\n this.#handlers = Object.freeze([...handlers])\n Object.freeze(this)\n }\n\n status() {\n return this.#handle.status()\n }\n\n cancel(reason?: string) {\n return this.#handle.cancel(reason)\n }\n\n with(pattern: SupportedPattern<RemainingError>, handler: (error: never) => unknown) {\n return new BrickRunImplementation(this.#handle, [\n ...this.#handlers,\n { pattern: pattern as SupportedPattern<unknown>, handler }\n ])\n }\n\n // biome-ignore lint/suspicious/noThenProperty: exhaustive BrickRun values are intentionally PromiseLike\n then<TResult1 = LocalResult, TResult2 = never>(\n onfulfilled?: ((value: LocalResult) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n this.#execution ??= this.#execute()\n return this.#execution.then(onfulfilled, onrejected)\n }\n\n async #execute(): Promise<LocalResult> {\n const outcome: EngineExecutionResult<InitialSuccess, Error> = await this.#handle.result\n if (outcome.ok) return outcome.value as unknown as LocalResult\n\n for (const registered of this.#handlers) {\n if (!isMatching(registered.pattern)(outcome.error)) continue\n const recovered = await registered.handler(outcome.error as never)\n if (recovered !== undefined) return recovered as LocalResult\n throw new UnhandledBrickFailureError(outcome.error)\n }\n\n throw new UnhandledBrickFailureError(outcome.error)\n }\n}\n\nexport function createBrickRun<Error, Success>(\n handle: EngineExecutionHandle<Success, Error>\n): BrickRun<Error, Success> {\n return new BrickRunImplementation<Error, Success, Success, Error>(handle) as unknown as BrickRun<\n Error,\n Success\n >\n}\n","import type { SignalDefinitions } from '../signal/types'\nimport { runDirectBrick } from '../worker/execution'\nimport { markBrickImplementation } from './implementation'\nimport type { BrickHandler, BrickImplementation, ValidBrick } from './types'\n\ninterface BrickConfig {\n params: unknown\n result: unknown\n errors?: unknown\n requires?: object\n depends?: Readonly<Record<string, Brick>>\n signals?: SignalDefinitions\n}\n\nexport type Brick<Config extends BrickConfig = BrickConfig> = Config\n\nexport function brick<F extends Brick>(\n handler: F extends ValidBrick<F> ? BrickHandler<F> : never\n): BrickImplementation<F> {\n const implementation = { handler } as unknown as BrickImplementation<F>\n Object.defineProperty(implementation, 'run', {\n configurable: false,\n enumerable: false,\n value: (\n params: Parameters<BrickImplementation<F>['run']>[0],\n ...options: Parameters<BrickImplementation<F>['run']> extends readonly [\n unknown,\n ...infer Rest\n ]\n ? Rest\n : never\n ) => runDirectBrick(implementation, params, options[0] as never),\n writable: false\n })\n markBrickImplementation(implementation)\n return Object.freeze(implementation)\n}\n","import { isBrickImplementation } from '../brick/implementation'\nimport type { AnyLayer, FlattenedLayerEntry } from './types'\n\nexport function isLayer(value: unknown): value is AnyLayer {\n return value instanceof LayerRuntime\n}\n\nexport function flattenLayer(layer: AnyLayer): readonly FlattenedLayerEntry[] {\n const flattened: FlattenedLayerEntry[] = []\n const durableIds = new Set<string>()\n const active = new Set<AnyLayer>()\n\n const visit = (current: AnyLayer, parentPath: readonly string[]): void => {\n const path = [...parentPath, current.id]\n if (active.has(current)) {\n throw new Error(`Cyclic Layer nesting detected: ${[...path, current.id].join(' -> ')}`)\n }\n active.add(current)\n\n for (const [key, entry] of Object.entries(current.entries)) {\n if (isBrickImplementation(entry)) {\n const id = [...path, key].join('.')\n if (durableIds.has(id)) {\n throw new Error(`Duplicate durable Brick ID: ${id}`)\n }\n durableIds.add(id)\n flattened.push(\n Object.freeze({\n id,\n key,\n layerPath: Object.freeze([...path]),\n implementation: entry\n })\n )\n } else if (isLayer(entry)) {\n visit(entry, path)\n } else {\n throw new Error(`Invalid Layer entry at ${[...path, key].join('.')}`)\n }\n }\n\n active.delete(current)\n }\n\n visit(layer, [])\n return Object.freeze(flattened)\n}\n\nexport function lookupLayer(\n layer: AnyLayer,\n durableId: string\n): FlattenedLayerEntry['implementation'] | undefined {\n return flattenLayer(layer).find(({ id }) => id === durableId)?.implementation\n}\n\nexport function findLayerDependency(\n layer: AnyLayer,\n caller: FlattenedLayerEntry,\n alias: string,\n fallback?: FlattenedLayerEntry\n): FlattenedLayerEntry | undefined {\n const entries = flattenLayer(layer)\n const inCallerScope = entries.filter(\n (entry) => entry.key === alias && entry.layerPath.join('.') === caller.layerPath.join('.')\n )\n if (inCallerScope.length > 0) return inCallerScope[0]\n\n const matches = entries.filter((entry) => entry.key === alias)\n if (matches.length === 0) return fallback\n if (matches.length > 1 && fallback) return fallback\n\n if (matches.length > 1) {\n throw new Error(\n `Ambiguous dependency Brick entry \"${alias}\" resolved to multiple durable paths: ${matches\n .map(({ id }) => id)\n .join(', ')}`\n )\n }\n return matches[0]\n}\n\nexport function resolveLayerDependency(\n layer: AnyLayer,\n caller: FlattenedLayerEntry,\n alias: string\n): FlattenedLayerEntry {\n const match = findLayerDependency(layer, caller, alias)\n if (!match) throw new Error(`Missing dependency Brick entry \"${alias}\" in the configured Layer`)\n return match\n}\n\nexport function effectiveLayerProviders(layer: AnyLayer): Readonly<Record<string, unknown>> {\n const providers = Object.create(null) as Record<string, unknown>\n const sources = new Map<string, string>()\n const topLevelKeys = new Set(Object.keys(layer.providers))\n\n const visit = (current: AnyLayer, path: readonly string[]): void => {\n const currentPath = [...path, current.id]\n for (const entry of Object.values(current.entries)) {\n if (isLayer(entry)) visit(entry, currentPath)\n }\n for (const [key, value] of Object.entries(current.providers)) {\n if (path.length === 0) {\n providers[key] = value\n sources.set(key, currentPath.join('.'))\n continue\n }\n if (topLevelKeys.has(key)) continue\n if (Object.hasOwn(providers, key) && providers[key] !== value) {\n throw new Error(\n `Conflicting nested Layer provider \"${key}\" from ${sources.get(key)} and ${currentPath.join('.')}`\n )\n }\n providers[key] = value\n sources.set(key, currentPath.join('.'))\n }\n }\n\n visit(layer, [])\n return Object.freeze(providers)\n}\n\nexport abstract class LayerRuntime {\n abstract readonly id: string\n abstract readonly entries: Readonly<Record<string, unknown>>\n}\n","export function addProviders(\n current: Readonly<Record<string, unknown>>,\n values: Readonly<Record<string, unknown>>\n): Readonly<Record<string, unknown>> {\n for (const key of Object.keys(values)) {\n if (Object.hasOwn(current, key)) {\n throw new Error(`Provider key is already provided: ${key}`)\n }\n }\n return Object.freeze({ ...current, ...values })\n}\n\nexport function overrideProviders(\n current: Readonly<Record<string, unknown>>,\n values: Readonly<Record<string, unknown>>\n): Readonly<Record<string, unknown>> {\n for (const key of Object.keys(values)) {\n if (!Object.hasOwn(current, key)) {\n throw new Error(`Cannot override absent provider key: ${key}`)\n }\n }\n return Object.freeze({ ...current, ...values })\n}\n","import { isBrickImplementation, markBrickImplementation } from '../brick/implementation'\nimport type { BrickImplementation } from '../brick/types'\nimport { assertValidPathSegment } from '../path-segment'\nimport { executeBrick, type SuppliedDependencyNode } from '../worker/execution'\nimport {\n effectiveLayerProviders,\n findLayerDependency,\n flattenLayer,\n isLayer,\n LayerRuntime\n} from './composition'\nimport { addProviders } from './provide'\nimport type {\n AnyLayer,\n FlattenedLayerEntry,\n LayerConstructor,\n LayerEntries,\n Providers,\n ReservedLayerEntryName\n} from './types'\n\nfunction brickIdentity(value: BrickImplementation): BrickImplementation {\n return value\n}\n\nfunction hasProviderKey(layer: AnyLayer, key: string): boolean {\n if (Object.hasOwn(layer.providers, key)) return true\n return Object.values(layer.entries).some((entry) => isLayer(entry) && hasProviderKey(entry, key))\n}\n\nconst reservedNames: ReadonlySet<ReservedLayerEntryName> = new Set([\n 'id',\n 'entries',\n 'providers',\n 'provide',\n 'override'\n])\n\nclass LayerImplementation<\n Id extends string,\n Entries extends LayerEntries,\n Provided extends Providers\n> extends LayerRuntime {\n readonly id: Id\n readonly entries: Readonly<Entries>\n readonly providers: Readonly<Provided>\n\n constructor(id: Id, entries: Entries, providers?: Provided) {\n super()\n assertValidPathSegment(id)\n\n for (const [key, entry] of Object.entries(entries)) {\n assertValidPathSegment(key)\n if (reservedNames.has(key as ReservedLayerEntryName)) {\n throw new Error(`Reserved Layer entry name: ${key}`)\n }\n if (!isBrickImplementation(entry) && !isLayer(entry)) {\n throw new Error(`Invalid Layer entry value for key: ${key}`)\n }\n }\n\n this.id = id\n this.entries = Object.freeze({ ...entries })\n this.providers = Object.freeze({ ...(providers ?? {}) }) as Readonly<Provided>\n\n for (const [key, entry] of Object.entries(this.entries)) {\n Object.defineProperty(this, key, {\n configurable: false,\n enumerable: true,\n value: this.bindEntry(entry, key),\n writable: false\n })\n }\n\n flattenLayer(this)\n Object.freeze(this)\n }\n\n private bindEntry(entry: unknown, key: string): unknown {\n if (isBrickImplementation(entry)) return this.bindBrick(entry, key, `${this.id}.${key}`)\n if (isLayer(entry)) return this.bindNestedLayer(entry, `${this.id}.${entry.id}`)\n return entry\n }\n\n private bindBrick(\n entry: ReturnType<typeof brickIdentity>,\n key: string,\n targetId: string\n ): unknown {\n const layer = this\n const bound = {\n handler: entry.handler,\n run(\n params: unknown,\n options?: {\n readonly requirements?: Readonly<Record<string, unknown>>\n readonly dependencies?: Readonly<Record<string, SuppliedDependencyNode>>\n readonly signals?: Readonly<Record<string, unknown>>\n readonly worker?: unknown\n readonly id?: string\n readonly metadata?: Readonly<Record<string, unknown>>\n }\n ) {\n const entries = flattenLayer(layer)\n const root = entries.find((candidate) => candidate.id === targetId) as\n | FlattenedLayerEntry\n | undefined\n if (!root) throw new Error(`Bound Brick entry not found: ${key}`)\n const suppliedDependencies = options?.dependencies ?? {}\n const executionRoot = Object.freeze({\n ...root,\n ...(options?.dependencies ? { suppliedDependencies } : {})\n })\n return executeBrick({\n root: executionRoot,\n entries,\n params,\n providers: Object.freeze({\n ...effectiveLayerProviders(layer),\n ...((options?.requirements as Readonly<Record<string, unknown>> | undefined) ?? {})\n }),\n resolveDependency: (caller, alias) => {\n const callerLayerPath = (caller as FlattenedLayerEntry).layerPath ?? root.layerPath\n const suppliedNode = caller.suppliedDependencies?.[alias]\n const supplied = suppliedNode?.brick ? suppliedNode : undefined\n const suppliedBranchPath = Object.freeze([...(caller.suppliedPath ?? []), alias])\n const scopedSupplied = supplied\n ? Object.freeze({\n id: [...(caller.id?.split('.') ?? []), alias].join('.'),\n key: alias,\n implementation: supplied.brick,\n layerPath: Object.freeze([...callerLayerPath]),\n suppliedPath: suppliedBranchPath,\n ...(supplied.dependencies ? { suppliedDependencies: supplied.dependencies } : {})\n })\n : undefined\n if (callerLayerPath.length > 0) {\n const layerEntry = findLayerDependency(\n layer,\n caller as FlattenedLayerEntry,\n alias,\n scopedSupplied as FlattenedLayerEntry | undefined\n )\n if (layerEntry) {\n const resolvedDependencies =\n suppliedNode?.dependencies ?? caller.suppliedDependencies?.[alias]?.dependencies\n return resolvedDependencies\n ? Object.freeze({\n ...layerEntry,\n suppliedDependencies: resolvedDependencies,\n signalPath: Object.freeze(layerEntry.id.split('.')),\n ...(caller.suppliedPath || suppliedNode\n ? { suppliedPath: suppliedBranchPath }\n : {}),\n ...(scopedSupplied ? { ownSignalPath: scopedSupplied.suppliedPath } : {})\n })\n : scopedSupplied\n ? Object.freeze({\n ...layerEntry,\n suppliedPath: scopedSupplied.suppliedPath,\n signalPath: Object.freeze(layerEntry.id.split('.')),\n ownSignalPath: scopedSupplied.suppliedPath\n })\n : caller.suppliedPath\n ? Object.freeze({\n ...layerEntry,\n suppliedPath: caller.suppliedPath,\n signalPath: Object.freeze(layerEntry.id.split('.'))\n })\n : layerEntry\n }\n }\n if (scopedSupplied) return scopedSupplied as unknown as FlattenedLayerEntry\n throw new Error(`Missing dependency Brick entry \"${alias}\" in the configured Layer`)\n },\n ...(options?.signals\n ? { signals: options.signals as Readonly<Record<string, unknown>> }\n : {}),\n ...(options?.worker ? { worker: options.worker as never } : {}),\n ...(typeof options?.id === 'string' ? { id: options.id } : {}),\n ...(options?.metadata\n ? { metadata: options.metadata as Readonly<Record<string, unknown>> }\n : {})\n })\n }\n }\n markBrickImplementation(bound)\n return Object.freeze(bound)\n }\n\n private bindNestedLayer(nested: AnyLayer, pathPrefix: string): AnyLayer {\n const view = Object.create(Object.getPrototypeOf(nested)) as Record<string, unknown>\n Object.defineProperties(view, {\n id: { enumerable: true, value: nested.id },\n entries: { enumerable: false, value: nested.entries },\n providers: { enumerable: false, value: nested.providers },\n provide: { value: nested.provide?.bind(nested) },\n override: { value: nested.override?.bind(nested) }\n })\n for (const [key, entry] of Object.entries(nested.entries)) {\n Object.defineProperty(view, key, {\n enumerable: true,\n value: isBrickImplementation(entry)\n ? this.bindBrick(entry, key, `${pathPrefix}.${key}`)\n : isLayer(entry)\n ? this.bindNestedLayer(entry, `${pathPrefix}.${entry.id}`)\n : entry\n })\n }\n return Object.freeze(view) as unknown as AnyLayer\n }\n\n provide(values: Readonly<Record<string, unknown>>): AnyLayer {\n addProviders(effectiveLayerProviders(this), values)\n return new LayerImplementation(this.id, this.entries, { ...this.providers, ...values })\n }\n\n override(values: Readonly<Record<string, unknown>>): AnyLayer {\n for (const key of Object.keys(values)) {\n if (!hasProviderKey(this, key)) {\n throw new Error(`Cannot override absent provider key: ${key}`)\n }\n }\n return new LayerImplementation(this.id, this.entries, { ...this.providers, ...values })\n }\n}\n\nexport const Layer = LayerImplementation as unknown as LayerConstructor\n"],"mappings":"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","names":["brick"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brickflow",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "Typed domain failures, structural dependency injection, composable Layers, Signals, and engine-neutral execution for TypeScript.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -27,6 +27,7 @@
27
27
  },
28
28
  "scripts": {
29
29
  "build": "tsup",
30
+ "prepack": "bun run build",
30
31
  "test": "bun test",
31
32
  "typecheck": "tsc -p tsconfig.json --noEmit"
32
33
  },