@exactjs/core 0.6.2 → 0.6.4
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.
- package/AGENTS.md +12 -14
- package/README.md +6 -8
- package/dist/client/component/resumption.js +5 -1
- package/dist/client/component/resumption.js.map +1 -1
- package/dist/client/component-contract/continuation-validation.d.ts +5 -0
- package/dist/client/component-contract/continuation-validation.d.ts.map +1 -1
- package/dist/client/component-contract/continuation-validation.js +7 -0
- package/dist/client/component-contract/continuation-validation.js.map +1 -1
- package/dist/client/component-contract/contract-validation.d.ts.map +1 -1
- package/dist/client/component-contract/contract-validation.js +4 -1
- package/dist/client/component-contract/contract-validation.js.map +1 -1
- package/dist/client/component-contracts.d.ts +5 -0
- package/dist/client/component-contracts.d.ts.map +1 -1
- package/dist/client/component-contracts.js.map +1 -1
- package/dist/client/framework/component-contract-validation.d.ts +1 -1
- package/dist/client/framework/component-contract-validation.d.ts.map +1 -1
- package/dist/client/framework/component-contract-validation.js +1 -1
- package/dist/client/framework/component-contract-validation.js.map +1 -1
- package/dist/client/framework/fragment-target-projection-plan.d.ts +9 -0
- package/dist/client/framework/fragment-target-projection-plan.d.ts.map +1 -0
- package/dist/client/framework/fragment-target-projection-plan.js +99 -0
- package/dist/client/framework/fragment-target-projection-plan.js.map +1 -0
- package/dist/client/framework/fragment-target-projection.d.ts +1 -5
- package/dist/client/framework/fragment-target-projection.d.ts.map +1 -1
- package/dist/client/framework/fragment-target-projection.js +5 -95
- package/dist/client/framework/fragment-target-projection.js.map +1 -1
- package/dist/client/framework/operation-protocol.d.ts +9 -0
- package/dist/client/framework/operation-protocol.d.ts.map +1 -1
- package/dist/client/framework/operation-protocol.js.map +1 -1
- package/dist/client/framework/server-fragment-target-projection.d.ts +4 -0
- package/dist/client/framework/server-fragment-target-projection.d.ts.map +1 -0
- package/dist/client/framework/server-fragment-target-projection.js +7 -0
- package/dist/client/framework/server-fragment-target-projection.js.map +1 -0
- package/dist/client/framework/server-render-structure.d.ts +1 -0
- package/dist/client/framework/server-render-structure.d.ts.map +1 -1
- package/dist/client/framework/server-render-structure.js +1 -0
- package/dist/client/framework/server-render-structure.js.map +1 -1
- package/dist/client/framework/server-task-helpers.d.ts +1 -0
- package/dist/client/framework/server-task-helpers.d.ts.map +1 -1
- package/dist/client/framework/server-task-helpers.js +1 -0
- package/dist/client/framework/server-task-helpers.js.map +1 -1
- package/dist/client/framework/task-frames.d.ts +2 -1
- package/dist/client/framework/task-frames.d.ts.map +1 -1
- package/dist/client/framework/task-frames.js +1 -0
- package/dist/client/framework/task-frames.js.map +1 -1
- package/dist/client/runtime/tasks.d.ts +1 -0
- package/dist/client/runtime/tasks.d.ts.map +1 -1
- package/dist/client/runtime/tasks.js +1 -0
- package/dist/client/runtime/tasks.js.map +1 -1
- package/dist/client/tasks/contracts.d.ts +2 -0
- package/dist/client/tasks/contracts.d.ts.map +1 -1
- package/dist/client/tasks/contracts.js.map +1 -1
- package/dist/client/tasks/progress-bindings.d.ts +20 -0
- package/dist/client/tasks/progress-bindings.d.ts.map +1 -0
- package/dist/client/tasks/progress-bindings.js +51 -0
- package/dist/client/tasks/progress-bindings.js.map +1 -0
- package/dist/client/tasks/progress-receiver.d.ts +24 -0
- package/dist/client/tasks/progress-receiver.d.ts.map +1 -0
- package/dist/client/tasks/progress-receiver.js +71 -0
- package/dist/client/tasks/progress-receiver.js.map +1 -0
- package/dist/component/resumption.js +5 -1
- package/dist/component/resumption.js.map +1 -1
- package/dist/component-contract/continuation-validation.d.ts +5 -0
- package/dist/component-contract/continuation-validation.d.ts.map +1 -1
- package/dist/component-contract/continuation-validation.js +7 -0
- package/dist/component-contract/continuation-validation.js.map +1 -1
- package/dist/component-contract/contract-validation.d.ts.map +1 -1
- package/dist/component-contract/contract-validation.js +4 -1
- package/dist/component-contract/contract-validation.js.map +1 -1
- package/dist/component-contracts.d.ts +5 -0
- package/dist/component-contracts.d.ts.map +1 -1
- package/dist/component-contracts.js.map +1 -1
- package/dist/framework/component-contract-validation.d.ts +1 -1
- package/dist/framework/component-contract-validation.d.ts.map +1 -1
- package/dist/framework/component-contract-validation.js +1 -1
- package/dist/framework/component-contract-validation.js.map +1 -1
- package/dist/framework/fragment-target-projection-plan.d.ts +9 -0
- package/dist/framework/fragment-target-projection-plan.d.ts.map +1 -0
- package/dist/framework/fragment-target-projection-plan.js +99 -0
- package/dist/framework/fragment-target-projection-plan.js.map +1 -0
- package/dist/framework/fragment-target-projection.d.ts +1 -5
- package/dist/framework/fragment-target-projection.d.ts.map +1 -1
- package/dist/framework/fragment-target-projection.js +5 -95
- package/dist/framework/fragment-target-projection.js.map +1 -1
- package/dist/framework/operation-protocol.d.ts +9 -0
- package/dist/framework/operation-protocol.d.ts.map +1 -1
- package/dist/framework/operation-protocol.js.map +1 -1
- package/dist/framework/server-fragment-target-projection.d.ts +4 -0
- package/dist/framework/server-fragment-target-projection.d.ts.map +1 -0
- package/dist/framework/server-fragment-target-projection.js +7 -0
- package/dist/framework/server-fragment-target-projection.js.map +1 -0
- package/dist/framework/server-render-structure.d.ts +1 -0
- package/dist/framework/server-render-structure.d.ts.map +1 -1
- package/dist/framework/server-render-structure.js +1 -0
- package/dist/framework/server-render-structure.js.map +1 -1
- package/dist/framework/server-task-helpers.d.ts +1 -0
- package/dist/framework/server-task-helpers.d.ts.map +1 -1
- package/dist/framework/server-task-helpers.js +1 -0
- package/dist/framework/server-task-helpers.js.map +1 -1
- package/dist/framework/task-frames.d.ts +2 -1
- package/dist/framework/task-frames.d.ts.map +1 -1
- package/dist/framework/task-frames.js +1 -0
- package/dist/framework/task-frames.js.map +1 -1
- package/dist/runtime/tasks.d.ts +1 -0
- package/dist/runtime/tasks.d.ts.map +1 -1
- package/dist/runtime/tasks.js +1 -0
- package/dist/runtime/tasks.js.map +1 -1
- package/dist/server/component/resumption.js +5 -1
- package/dist/server/component/resumption.js.map +1 -1
- package/dist/server/component-contract/continuation-validation.d.ts +5 -0
- package/dist/server/component-contract/continuation-validation.d.ts.map +1 -1
- package/dist/server/component-contract/continuation-validation.js +7 -0
- package/dist/server/component-contract/continuation-validation.js.map +1 -1
- package/dist/server/component-contract/contract-validation.d.ts.map +1 -1
- package/dist/server/component-contract/contract-validation.js +4 -1
- package/dist/server/component-contract/contract-validation.js.map +1 -1
- package/dist/server/component-contracts.d.ts +5 -0
- package/dist/server/component-contracts.d.ts.map +1 -1
- package/dist/server/component-contracts.js.map +1 -1
- package/dist/server/framework/component-contract-validation.d.ts +1 -1
- package/dist/server/framework/component-contract-validation.d.ts.map +1 -1
- package/dist/server/framework/component-contract-validation.js +1 -1
- package/dist/server/framework/component-contract-validation.js.map +1 -1
- package/dist/server/framework/fragment-target-projection-plan.d.ts +9 -0
- package/dist/server/framework/fragment-target-projection-plan.d.ts.map +1 -0
- package/dist/server/framework/fragment-target-projection-plan.js +99 -0
- package/dist/server/framework/fragment-target-projection-plan.js.map +1 -0
- package/dist/server/framework/fragment-target-projection.d.ts +1 -5
- package/dist/server/framework/fragment-target-projection.d.ts.map +1 -1
- package/dist/server/framework/fragment-target-projection.js +5 -95
- package/dist/server/framework/fragment-target-projection.js.map +1 -1
- package/dist/server/framework/operation-protocol.d.ts +9 -0
- package/dist/server/framework/operation-protocol.d.ts.map +1 -1
- package/dist/server/framework/operation-protocol.js.map +1 -1
- package/dist/server/framework/server-fragment-target-projection.d.ts +4 -0
- package/dist/server/framework/server-fragment-target-projection.d.ts.map +1 -0
- package/dist/server/framework/server-fragment-target-projection.js +7 -0
- package/dist/server/framework/server-fragment-target-projection.js.map +1 -0
- package/dist/server/framework/server-render-structure.d.ts +1 -0
- package/dist/server/framework/server-render-structure.d.ts.map +1 -1
- package/dist/server/framework/server-render-structure.js +1 -0
- package/dist/server/framework/server-render-structure.js.map +1 -1
- package/dist/server/framework/server-task-helpers.d.ts +1 -0
- package/dist/server/framework/server-task-helpers.d.ts.map +1 -1
- package/dist/server/framework/server-task-helpers.js +1 -0
- package/dist/server/framework/server-task-helpers.js.map +1 -1
- package/dist/server/framework/task-frames.d.ts +2 -1
- package/dist/server/framework/task-frames.d.ts.map +1 -1
- package/dist/server/framework/task-frames.js +1 -0
- package/dist/server/framework/task-frames.js.map +1 -1
- package/dist/server/runtime/tasks.d.ts +1 -0
- package/dist/server/runtime/tasks.d.ts.map +1 -1
- package/dist/server/runtime/tasks.js +1 -0
- package/dist/server/runtime/tasks.js.map +1 -1
- package/dist/server/tasks/contracts.d.ts +2 -0
- package/dist/server/tasks/contracts.d.ts.map +1 -1
- package/dist/server/tasks/contracts.js.map +1 -1
- package/dist/server/tasks/progress-bindings.d.ts +20 -0
- package/dist/server/tasks/progress-bindings.d.ts.map +1 -0
- package/dist/server/tasks/progress-bindings.js +51 -0
- package/dist/server/tasks/progress-bindings.js.map +1 -0
- package/dist/server/tasks/progress-receiver.d.ts +24 -0
- package/dist/server/tasks/progress-receiver.d.ts.map +1 -0
- package/dist/server/tasks/progress-receiver.js +71 -0
- package/dist/server/tasks/progress-receiver.js.map +1 -0
- package/dist/tasks/contracts.d.ts +2 -0
- package/dist/tasks/contracts.d.ts.map +1 -1
- package/dist/tasks/contracts.js.map +1 -1
- package/dist/tasks/progress-bindings.d.ts +20 -0
- package/dist/tasks/progress-bindings.d.ts.map +1 -0
- package/dist/tasks/progress-bindings.js +51 -0
- package/dist/tasks/progress-bindings.js.map +1 -0
- package/dist/tasks/progress-receiver.d.ts +24 -0
- package/dist/tasks/progress-receiver.d.ts.map +1 -0
- package/dist/tasks/progress-receiver.js +71 -0
- package/dist/tasks/progress-receiver.js.map +1 -0
- package/package.json +1 -1
- package/dist/client/component/error-boundary.js.map +0 -1
- package/dist/server/component/error-boundary.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/runtime/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAE9B,OAAO,EAAE,qCAAqC,EAAE,MAAM,oCAAoC,CAAC;AAC3F,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EACN,mCAAmC,EACnC,mCAAmC,EACnC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACN,uCAAuC,EACvC,mCAAmC,EACnC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EACN,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC","sourcesContent":["import './component-tasks.js';\n\nexport { registerComponentContinuationContexts } from '../component/context-resumption.js';\nexport { dispatchComponentContinuation } from '../component/domain.js';\nexport { activateTaskForHost } from '../tasks/activation.js';\nexport { activateComputationForHost } from '../tasks/computation-activation.js';\nexport {\n\tcreateIndexedContinuationDependency,\n\tcreateTrackedContinuationDependency\n} from '../tasks/dependency-source.js';\nexport {\n\tactivateCompiledClientLatestTaskForHost,\n\tbindCompiledClientLatestTaskForHost\n} from '../tasks/compiled-latest.js';\nexport { markComponentContinuationTask } from '../tasks/component-continuation.js';\nexport { taskMutation } from '../tasks/frame-runtime.js';\nexport { bindTaskForHost, defineTask, invokeTask } from '../tasks/runtime.js';\nexport {\n\tmutateTaskCollection,\n\townTaskResource,\n\tstageTaskMutation,\n\ttaskAnimationFrame,\n\ttaskAwait,\n\ttaskFetch,\n\ttaskIdleCallback,\n\ttaskInterval,\n\ttaskObserver,\n\ttaskTimeout\n} from '../tasks/resources.js';\nexport { combineTaskSignal, withAbortSignal, withTaskSignal } from '../tasks/signals.js';\n"]}
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/runtime/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAE9B,OAAO,EAAE,qCAAqC,EAAE,MAAM,oCAAoC,CAAC;AAC3F,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EACN,mCAAmC,EACnC,mCAAmC,EACnC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACN,uCAAuC,EACvC,mCAAmC,EACnC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EACN,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEzF,OAAO,EACN,0BAA0B,EAC1B,4BAA4B,EAC5B,MAAM,+BAA+B,CAAC","sourcesContent":["import './component-tasks.js';\n\nexport { registerComponentContinuationContexts } from '../component/context-resumption.js';\nexport { dispatchComponentContinuation } from '../component/domain.js';\nexport { activateTaskForHost } from '../tasks/activation.js';\nexport { activateComputationForHost } from '../tasks/computation-activation.js';\nexport {\n\tcreateIndexedContinuationDependency,\n\tcreateTrackedContinuationDependency\n} from '../tasks/dependency-source.js';\nexport {\n\tactivateCompiledClientLatestTaskForHost,\n\tbindCompiledClientLatestTaskForHost\n} from '../tasks/compiled-latest.js';\nexport { markComponentContinuationTask } from '../tasks/component-continuation.js';\nexport { taskMutation } from '../tasks/frame-runtime.js';\nexport { bindTaskForHost, defineTask, invokeTask } from '../tasks/runtime.js';\nexport {\n\tmutateTaskCollection,\n\townTaskResource,\n\tstageTaskMutation,\n\ttaskAnimationFrame,\n\ttaskAwait,\n\ttaskFetch,\n\ttaskIdleCallback,\n\ttaskInterval,\n\ttaskObserver,\n\ttaskTimeout\n} from '../tasks/resources.js';\nexport { combineTaskSignal, withAbortSignal, withTaskSignal } from '../tasks/signals.js';\n\nexport {\n\tcreateTaskProgressReporter,\n\tregisterTaskProgressReceiver\n} from '../tasks/progress-bindings.js';\n"]}
|
|
@@ -17,6 +17,8 @@ export interface TaskContext {
|
|
|
17
17
|
export interface TaskContextPolicy extends TaskContext {
|
|
18
18
|
client(): TaskContextPolicy;
|
|
19
19
|
server(): TaskContextPolicy;
|
|
20
|
+
/** Declares a missable snapshot receiver for browser-initiated server work. */
|
|
21
|
+
progress(): TaskContextPolicy;
|
|
20
22
|
parallel(): TaskContextPolicy;
|
|
21
23
|
latest(): TaskContextPolicy;
|
|
22
24
|
queue(): TaskContextPolicy;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../src/tasks/contracts.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../src/tasks/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../src/tasks/contracts.ts"],"names":[],"mappings":"","sourcesContent":["/** Describes why a task generation began. */\nexport type TaskActivation =\n\t| 'initialization'\n\t| 'reactive'\n\t| 'interaction'\n\t| 'invoked'\n\t| 'lifecycle';\n\n/** Capabilities scoped to one task frame. */\nexport interface TaskContext {\n\treadonly signal: AbortSignal;\n\treadonly generation: number;\n\treadonly activation: TaskActivation;\n\tpeek<T>(read: () => T): T;\n\toptimistic(work: () => void): void;\n\tcleanup(cleanup: () => void | Promise<void>): void;\n\town<T extends Disposable | AsyncDisposable>(resource: T): T;\n}\n\n/**\n * Declarative task policy accepted only as the default value of a final\n * {@link TaskContext} parameter in compiler-authored source.\n */\nexport interface TaskContextPolicy extends TaskContext {\n\tclient(): TaskContextPolicy;\n\tserver(): TaskContextPolicy;\n\tparallel(): TaskContextPolicy;\n\tlatest(): TaskContextPolicy;\n\tqueue(): TaskContextPolicy;\n\tkey<T>(value: T): TaskContextPolicy;\n\timmediate(): TaskContextPolicy;\n\tnormal(): TaskContextPolicy;\n\tdeferred(): TaskContextPolicy;\n\tblocking(): TaskContextPolicy;\n\tnonblocking(): TaskContextPolicy;\n\tdetached(): TaskContextPolicy;\n}\n\n/** Durable cancellation and concurrency ownership for task generations. */\nexport interface TaskOwner extends AsyncDisposable {\n\treadonly signal: AbortSignal;\n}\n\n/** Owner-bound observable state for one task definition. */\nexport interface TaskStatus<Result> {\n\treadonly pending: boolean;\n\treadonly pendingCount: number;\n\treadonly generation: number;\n\treadonly result: Result | undefined;\n\treadonly error: unknown;\n\tcancel(reason?: unknown): void;\n}\n\n/** A thenable whose result settles only after its attached task subtree. */\nexport interface TaskInvocation<Result> extends PromiseLike<Result> {\n\tthen<TResult1 = Result, TResult2 = never>(\n\t\tonFulfilled?: ((value: Result) => TResult1 | PromiseLike<TResult1>) | null,\n\t\tonRejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n\t): TaskInvocation<TResult1 | TResult2>;\n\tcatch<TResult = never>(\n\t\tonRejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | null\n\t): TaskInvocation<Result | TResult>;\n\tfinally(onFinally?: (() => void) | null): TaskInvocation<Result>;\n\treadonly [Symbol.toStringTag]: 'TaskInvocation';\n}\n\n/** Callable runtime task definition. */\nexport interface TaskFunction<Args extends unknown[], Result> {\n\t(...args: Args): TaskInvocation<Result>;\n}\n\n/** Existential task function retained where authored argument tuples are not inspected. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Runtime task registries preserve arbitrary authored argument tuples through callable identity.\nexport type AnyTaskFunction<Result = unknown> = TaskFunction<any[], Result>;\n\n/** Owner-bound task callable with aggregate status. */\nexport interface BoundTaskFunction<Args extends unknown[], Result>\n\textends TaskFunction<Args, Result>,\n\t\tTaskStatus<Result> {}\n\n/** Runtime policy required when an integration defines a task outside compiled component source. */\nexport interface RuntimeTaskOptions<Args extends unknown[]> {\n\treadonly label?: string;\n\treadonly placement?: 'current' | 'client' | 'server';\n\treadonly priority?: 'immediate' | 'normal' | 'deferred';\n\treadonly concurrency?: 'parallel' | 'latest' | 'queue';\n\treadonly concurrencyKey?: (...args: Args) => unknown;\n\t/**\n\t * Compiler-generated resolver for defaulted task parameters. It evaluates\n\t * omitted defaults once per generation without subscribing the task to\n\t * reactive reads performed while resolving them.\n\t */\n\treadonly captureArguments?: (args: unknown[]) => readonly unknown[];\n\treadonly readiness?: 'blocking' | 'nonblocking';\n\treadonly detached?: boolean;\n\treadonly owner?: TaskOwner;\n}\n\n/** Reserved callback that must run or be explicitly released exactly once. */\nexport interface ReservedTaskCallback<Args extends unknown[], Result> extends Disposable {\n\t(...args: Args): Result;\n\tcancel(reason?: unknown): void;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../src/tasks/contracts.ts"],"names":[],"mappings":"","sourcesContent":["/** Describes why a task generation began. */\nexport type TaskActivation =\n\t| 'initialization'\n\t| 'reactive'\n\t| 'interaction'\n\t| 'invoked'\n\t| 'lifecycle';\n\n/** Capabilities scoped to one task frame. */\nexport interface TaskContext {\n\treadonly signal: AbortSignal;\n\treadonly generation: number;\n\treadonly activation: TaskActivation;\n\tpeek<T>(read: () => T): T;\n\toptimistic(work: () => void): void;\n\tcleanup(cleanup: () => void | Promise<void>): void;\n\town<T extends Disposable | AsyncDisposable>(resource: T): T;\n}\n\n/**\n * Declarative task policy accepted only as the default value of a final\n * {@link TaskContext} parameter in compiler-authored source.\n */\nexport interface TaskContextPolicy extends TaskContext {\n\tclient(): TaskContextPolicy;\n\tserver(): TaskContextPolicy;\n\t/** Declares a missable snapshot receiver for browser-initiated server work. */\n\tprogress(): TaskContextPolicy;\n\tparallel(): TaskContextPolicy;\n\tlatest(): TaskContextPolicy;\n\tqueue(): TaskContextPolicy;\n\tkey<T>(value: T): TaskContextPolicy;\n\timmediate(): TaskContextPolicy;\n\tnormal(): TaskContextPolicy;\n\tdeferred(): TaskContextPolicy;\n\tblocking(): TaskContextPolicy;\n\tnonblocking(): TaskContextPolicy;\n\tdetached(): TaskContextPolicy;\n}\n\n/** Durable cancellation and concurrency ownership for task generations. */\nexport interface TaskOwner extends AsyncDisposable {\n\treadonly signal: AbortSignal;\n}\n\n/** Owner-bound observable state for one task definition. */\nexport interface TaskStatus<Result> {\n\treadonly pending: boolean;\n\treadonly pendingCount: number;\n\treadonly generation: number;\n\treadonly result: Result | undefined;\n\treadonly error: unknown;\n\tcancel(reason?: unknown): void;\n}\n\n/** A thenable whose result settles only after its attached task subtree. */\nexport interface TaskInvocation<Result> extends PromiseLike<Result> {\n\tthen<TResult1 = Result, TResult2 = never>(\n\t\tonFulfilled?: ((value: Result) => TResult1 | PromiseLike<TResult1>) | null,\n\t\tonRejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n\t): TaskInvocation<TResult1 | TResult2>;\n\tcatch<TResult = never>(\n\t\tonRejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | null\n\t): TaskInvocation<Result | TResult>;\n\tfinally(onFinally?: (() => void) | null): TaskInvocation<Result>;\n\treadonly [Symbol.toStringTag]: 'TaskInvocation';\n}\n\n/** Callable runtime task definition. */\nexport interface TaskFunction<Args extends unknown[], Result> {\n\t(...args: Args): TaskInvocation<Result>;\n}\n\n/** Existential task function retained where authored argument tuples are not inspected. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Runtime task registries preserve arbitrary authored argument tuples through callable identity.\nexport type AnyTaskFunction<Result = unknown> = TaskFunction<any[], Result>;\n\n/** Owner-bound task callable with aggregate status. */\nexport interface BoundTaskFunction<Args extends unknown[], Result>\n\textends TaskFunction<Args, Result>,\n\t\tTaskStatus<Result> {}\n\n/** Runtime policy required when an integration defines a task outside compiled component source. */\nexport interface RuntimeTaskOptions<Args extends unknown[]> {\n\treadonly label?: string;\n\treadonly placement?: 'current' | 'client' | 'server';\n\treadonly priority?: 'immediate' | 'normal' | 'deferred';\n\treadonly concurrency?: 'parallel' | 'latest' | 'queue';\n\treadonly concurrencyKey?: (...args: Args) => unknown;\n\t/**\n\t * Compiler-generated resolver for defaulted task parameters. It evaluates\n\t * omitted defaults once per generation without subscribing the task to\n\t * reactive reads performed while resolving them.\n\t */\n\treadonly captureArguments?: (args: unknown[]) => readonly unknown[];\n\treadonly readiness?: 'blocking' | 'nonblocking';\n\treadonly detached?: boolean;\n\treadonly owner?: TaskOwner;\n}\n\n/** Reserved callback that must run or be explicitly released exactly once. */\nexport interface ReservedTaskCallback<Args extends unknown[], Result> extends Disposable {\n\t(...args: Args): Result;\n\tcancel(reason?: unknown): void;\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { RuntimeTaskOptions, TaskContext } from './contracts.js';
|
|
2
|
+
import type { AnyComponentInstance } from '../component/contracts.js';
|
|
3
|
+
import { type TaskProgressReceiver } from './progress-receiver.js';
|
|
4
|
+
/** Compiler-owned receiver work. Only validated snapshot arguments reach this boundary. */
|
|
5
|
+
export type TaskProgressWork = (snapshot: unknown, task: TaskContext) => void | Promise<void>;
|
|
6
|
+
type ProgressReceiverOptions = Pick<RuntimeTaskOptions<[unknown]>, 'label' | 'priority' | 'readiness'>;
|
|
7
|
+
/** Registers one compiled receiver against its durable component, without activating it. */
|
|
8
|
+
export declare function registerTaskProgressReceiver<Snapshot>(host: object, id: string, work: (snapshot: Snapshot, task: TaskContext) => void | Promise<void>, options: ProgressReceiverOptions): (snapshot: Snapshot) => void;
|
|
9
|
+
/** Binds a server frame to its trusted, invocation-local progress transport. */
|
|
10
|
+
export declare function attachTaskProgressReporter(task: TaskContext, report: (id: string, snapshot: unknown) => void): void;
|
|
11
|
+
/**
|
|
12
|
+
* Captures explicit server progress authority while an executor establishes its lexical tasks.
|
|
13
|
+
* SSR has no transport and therefore creates a no-op. Retained callbacks stop at cancellation
|
|
14
|
+
* or settlement even if application code invokes them after the originating frame has closed.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createTaskProgressReporter(id: string, task?: TaskContext): (snapshot: unknown) => void;
|
|
17
|
+
/** Creates an isolated receiver lane for a validated operation and live component instance. */
|
|
18
|
+
export declare function taskProgressReceiverForHost(host: AnyComponentInstance, id: string, signal: AbortSignal): TaskProgressReceiver<unknown>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=progress-bindings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-bindings.d.ts","sourceRoot":"","sources":["../../../src/tasks/progress-bindings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAKtE,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE/F,2FAA2F;AAC3F,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9F,KAAK,uBAAuB,GAAG,IAAI,CAClC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,EAC7B,OAAO,GAAG,UAAU,GAAG,WAAW,CAClC,CAAC;AAOF,4FAA4F;AAC5F,wBAAgB,4BAA4B,CAAC,QAAQ,EACpD,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACrE,OAAO,EAAE,uBAAuB,GAC9B,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAQ9B;AAED,gFAAgF;AAChF,wBAAgB,0BAA0B,CACzC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,GAC7C,IAAI,CAEN;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACzC,EAAE,EAAE,MAAM,EACV,IAAI,CAAC,EAAE,WAAW,GAChB,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAO7B;AAED,+FAA+F;AAC/F,wBAAgB,2BAA2B,CAC1C,IAAI,EAAE,oBAAoB,EAC1B,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,WAAW,GACjB,oBAAoB,CAAC,OAAO,CAAC,CAgB/B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { componentLogMethod } from '../component/log.js';
|
|
2
|
+
import { frameForTaskContext } from './frame-runtime.js';
|
|
3
|
+
import { taskOwnerForHost } from './owner-hosts.js';
|
|
4
|
+
import { createTaskProgressReceiver } from './progress-receiver.js';
|
|
5
|
+
const receivers = new WeakMap();
|
|
6
|
+
const reporters = new WeakMap();
|
|
7
|
+
/** Registers one compiled receiver against its durable component, without activating it. */
|
|
8
|
+
export function registerTaskProgressReceiver(host, id, work, options) {
|
|
9
|
+
let registry = receivers.get(host);
|
|
10
|
+
if (!registry)
|
|
11
|
+
receivers.set(host, (registry = new Map()));
|
|
12
|
+
if (registry.has(id))
|
|
13
|
+
throw new Error(`Duplicate task progress receiver ${id}`);
|
|
14
|
+
registry.set(id, { work: work, options });
|
|
15
|
+
return () => {
|
|
16
|
+
throw new Error('Progress receivers are invoked by server continuation progress');
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/** Binds a server frame to its trusted, invocation-local progress transport. */
|
|
20
|
+
export function attachTaskProgressReporter(task, report) {
|
|
21
|
+
reporters.set(frameForTaskContext(task), report);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Captures explicit server progress authority while an executor establishes its lexical tasks.
|
|
25
|
+
* SSR has no transport and therefore creates a no-op. Retained callbacks stop at cancellation
|
|
26
|
+
* or settlement even if application code invokes them after the originating frame has closed.
|
|
27
|
+
*/
|
|
28
|
+
export function createTaskProgressReporter(id, task) {
|
|
29
|
+
const ownedFrame = task && frameForTaskContext(task);
|
|
30
|
+
const report = ownedFrame && reporters.get(ownedFrame);
|
|
31
|
+
return (snapshot) => {
|
|
32
|
+
if (ownedFrame && !ownedFrame.settled && !ownedFrame.controller.signal.aborted)
|
|
33
|
+
report?.(id, snapshot);
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/** Creates an isolated receiver lane for a validated operation and live component instance. */
|
|
37
|
+
export function taskProgressReceiverForHost(host, id, signal) {
|
|
38
|
+
const owner = taskOwnerForHost(host);
|
|
39
|
+
const receiver = receivers.get(host)?.get(id);
|
|
40
|
+
if (!owner || !receiver)
|
|
41
|
+
throw new Error(`Unknown component task progress receiver ${id}`);
|
|
42
|
+
return createTaskProgressReceiver({
|
|
43
|
+
owner,
|
|
44
|
+
signal,
|
|
45
|
+
...receiver.options,
|
|
46
|
+
label: receiver.options.label ?? id,
|
|
47
|
+
receive: receiver.work,
|
|
48
|
+
onError: (error) => componentLogMethod(host, 'error')?.(() => ['Task progress receiver failed', error, { receiver: id }])
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=progress-bindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-bindings.js","sourceRoot":"","sources":["../../../src/tasks/progress-bindings.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAA6B,MAAM,wBAAwB,CAAC;AAS/F,MAAM,SAAS,GAAG,IAAI,OAAO,EAG1B,CAAC;AACJ,MAAM,SAAS,GAAG,IAAI,OAAO,EAA4D,CAAC;AAE1F,4FAA4F;AAC5F,MAAM,UAAU,4BAA4B,CAC3C,IAAY,EACZ,EAAU,EACV,IAAqE,EACrE,OAAgC;IAEhC,IAAI,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,QAAQ;QAAE,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IAC3D,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC;IAChF,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAwB,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9D,OAAO,GAAG,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACnF,CAAC,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,0BAA0B,CACzC,IAAiB,EACjB,MAA+C;IAE/C,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACzC,EAAU,EACV,IAAkB;IAElB,MAAM,UAAU,GAAG,IAAI,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,UAAU,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACvD,OAAO,CAAC,QAAQ,EAAE,EAAE;QACnB,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;YAC7E,MAAM,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACzB,CAAC,CAAC;AACH,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,2BAA2B,CAC1C,IAA0B,EAC1B,EAAU,EACV,MAAmB;IAEnB,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,EAAE,EAAE,CAAC,CAAC;IAC3F,OAAO,0BAA0B,CAAC;QACjC,KAAK;QACL,MAAM;QACN,GAAG,QAAQ,CAAC,OAAO;QACnB,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;QACnC,OAAO,EAAE,QAAQ,CAAC,IAAI;QACtB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,kBAAkB,CACjB,IAAI,EACJ,OAAO,CACP,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,+BAA+B,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;KACtE,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { RuntimeTaskOptions, TaskContext } from './contracts.js';\nimport type { AnyComponentInstance } from '../component/contracts.js';\nimport { componentLogMethod } from '../component/log.js';\nimport { frameForTaskContext } from './frame-runtime.js';\nimport type { TaskFrameRecord } from './frame-contracts.js';\nimport { taskOwnerForHost } from './owner-hosts.js';\nimport { createTaskProgressReceiver, type TaskProgressReceiver } from './progress-receiver.js';\n\n/** Compiler-owned receiver work. Only validated snapshot arguments reach this boundary. */\nexport type TaskProgressWork = (snapshot: unknown, task: TaskContext) => void | Promise<void>;\n\ntype ProgressReceiverOptions = Pick<\n\tRuntimeTaskOptions<[unknown]>,\n\t'label' | 'priority' | 'readiness'\n>;\nconst receivers = new WeakMap<\n\tobject,\n\tMap<string, { work: TaskProgressWork; options: ProgressReceiverOptions }>\n>();\nconst reporters = new WeakMap<TaskFrameRecord, (id: string, snapshot: unknown) => void>();\n\n/** Registers one compiled receiver against its durable component, without activating it. */\nexport function registerTaskProgressReceiver<Snapshot>(\n\thost: object,\n\tid: string,\n\twork: (snapshot: Snapshot, task: TaskContext) => void | Promise<void>,\n\toptions: ProgressReceiverOptions\n): (snapshot: Snapshot) => void {\n\tlet registry = receivers.get(host);\n\tif (!registry) receivers.set(host, (registry = new Map()));\n\tif (registry.has(id)) throw new Error(`Duplicate task progress receiver ${id}`);\n\tregistry.set(id, { work: work as TaskProgressWork, options });\n\treturn () => {\n\t\tthrow new Error('Progress receivers are invoked by server continuation progress');\n\t};\n}\n\n/** Binds a server frame to its trusted, invocation-local progress transport. */\nexport function attachTaskProgressReporter(\n\ttask: TaskContext,\n\treport: (id: string, snapshot: unknown) => void\n): void {\n\treporters.set(frameForTaskContext(task), report);\n}\n\n/**\n * Captures explicit server progress authority while an executor establishes its lexical tasks.\n * SSR has no transport and therefore creates a no-op. Retained callbacks stop at cancellation\n * or settlement even if application code invokes them after the originating frame has closed.\n */\nexport function createTaskProgressReporter(\n\tid: string,\n\ttask?: TaskContext\n): (snapshot: unknown) => void {\n\tconst ownedFrame = task && frameForTaskContext(task);\n\tconst report = ownedFrame && reporters.get(ownedFrame);\n\treturn (snapshot) => {\n\t\tif (ownedFrame && !ownedFrame.settled && !ownedFrame.controller.signal.aborted)\n\t\t\treport?.(id, snapshot);\n\t};\n}\n\n/** Creates an isolated receiver lane for a validated operation and live component instance. */\nexport function taskProgressReceiverForHost(\n\thost: AnyComponentInstance,\n\tid: string,\n\tsignal: AbortSignal\n): TaskProgressReceiver<unknown> {\n\tconst owner = taskOwnerForHost(host);\n\tconst receiver = receivers.get(host)?.get(id);\n\tif (!owner || !receiver) throw new Error(`Unknown component task progress receiver ${id}`);\n\treturn createTaskProgressReceiver({\n\t\towner,\n\t\tsignal,\n\t\t...receiver.options,\n\t\tlabel: receiver.options.label ?? id,\n\t\treceive: receiver.work,\n\t\tonError: (error) =>\n\t\t\tcomponentLogMethod(\n\t\t\t\thost,\n\t\t\t\t'error'\n\t\t\t)?.(() => ['Task progress receiver failed', error, { receiver: id }])\n\t});\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { TaskContext, TaskOwner } from './contracts.js';
|
|
2
|
+
/** One replaceable observation lane, owned by an originating invocation. */
|
|
3
|
+
export interface TaskProgressReceiver<Snapshot> {
|
|
4
|
+
/** Offers a captured snapshot, replacing any snapshot which has not started. */
|
|
5
|
+
report(snapshot: Snapshot): void;
|
|
6
|
+
/** Fences publication immediately; asynchronous cleanup does not delay the caller. */
|
|
7
|
+
close(reason?: unknown): void;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Serializes asynchronous progress activations while retaining only the latest pending value.
|
|
11
|
+
* Each activation is an ordinary task with independent staged publication and structural children.
|
|
12
|
+
* It belongs to the durable component owner, but never extends the originating invocation.
|
|
13
|
+
* Callers must capture/validate snapshots before offering them and route errors to diagnostics.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createTaskProgressReceiver<Snapshot>(options: {
|
|
16
|
+
readonly owner: TaskOwner;
|
|
17
|
+
readonly signal: AbortSignal;
|
|
18
|
+
readonly label: string;
|
|
19
|
+
readonly priority?: 'immediate' | 'normal' | 'deferred';
|
|
20
|
+
readonly readiness?: 'blocking' | 'nonblocking';
|
|
21
|
+
readonly receive: (snapshot: Snapshot, task: TaskContext) => void | Promise<void>;
|
|
22
|
+
readonly onError: (error: unknown) => void;
|
|
23
|
+
}): TaskProgressReceiver<Snapshot>;
|
|
24
|
+
//# sourceMappingURL=progress-receiver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-receiver.d.ts","sourceRoot":"","sources":["../../../src/tasks/progress-receiver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK7D,4EAA4E;AAC5E,MAAM,WAAW,oBAAoB,CAAC,QAAQ;IAC7C,gFAAgF;IAChF,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACjC,sFAAsF;IACtF,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,OAAO,EAAE;IAC7D,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;IACxD,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC3C,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAoEjC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { isTaskCancellation } from './cancellation.js';
|
|
2
|
+
import { bindTask, defineTask } from './runtime.js';
|
|
3
|
+
import { logFrameworkEvent } from '../component/log.js';
|
|
4
|
+
/**
|
|
5
|
+
* Serializes asynchronous progress activations while retaining only the latest pending value.
|
|
6
|
+
* Each activation is an ordinary task with independent staged publication and structural children.
|
|
7
|
+
* It belongs to the durable component owner, but never extends the originating invocation.
|
|
8
|
+
* Callers must capture/validate snapshots before offering them and route errors to diagnostics.
|
|
9
|
+
*/
|
|
10
|
+
export function createTaskProgressReceiver(options) {
|
|
11
|
+
const task = bindTask(defineTask({
|
|
12
|
+
label: options.label,
|
|
13
|
+
placement: 'client',
|
|
14
|
+
readiness: options.readiness ?? 'nonblocking',
|
|
15
|
+
priority: options.priority,
|
|
16
|
+
detached: true,
|
|
17
|
+
owner: options.owner
|
|
18
|
+
}, options.receive), { owner: options.owner });
|
|
19
|
+
let closed = false;
|
|
20
|
+
let running = false;
|
|
21
|
+
let pending;
|
|
22
|
+
const close = (reason = 'progress-complete') => {
|
|
23
|
+
if (closed)
|
|
24
|
+
return;
|
|
25
|
+
closed = true;
|
|
26
|
+
pending = undefined;
|
|
27
|
+
options.signal.removeEventListener('abort', abort);
|
|
28
|
+
options.owner.signal.removeEventListener('abort', abort);
|
|
29
|
+
task.cancel(reason);
|
|
30
|
+
};
|
|
31
|
+
const abort = () => close(options.signal.reason ?? options.owner.signal.reason);
|
|
32
|
+
const drain = () => {
|
|
33
|
+
if (closed || running || !pending)
|
|
34
|
+
return;
|
|
35
|
+
const { snapshot } = pending;
|
|
36
|
+
pending = undefined;
|
|
37
|
+
running = true;
|
|
38
|
+
// Observe the invocation's rejection before work can settle. Cancellation is lifecycle,
|
|
39
|
+
// while failures still remain inspectable on the task and reach the supplied diagnostic.
|
|
40
|
+
void Promise.resolve(task(snapshot)).then(() => finish(), (error) => {
|
|
41
|
+
try {
|
|
42
|
+
if (!isTaskCancellation(error))
|
|
43
|
+
options.onError(error);
|
|
44
|
+
}
|
|
45
|
+
catch (diagnosticError) {
|
|
46
|
+
logFrameworkEvent('error', 'core', 'task', 'progress error diagnostic failed', diagnosticError);
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
finish();
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
const finish = () => {
|
|
54
|
+
running = false;
|
|
55
|
+
drain();
|
|
56
|
+
};
|
|
57
|
+
options.signal.addEventListener('abort', abort, { once: true });
|
|
58
|
+
options.owner.signal.addEventListener('abort', abort, { once: true });
|
|
59
|
+
if (options.signal.aborted || options.owner.signal.aborted)
|
|
60
|
+
abort();
|
|
61
|
+
return {
|
|
62
|
+
report(snapshot) {
|
|
63
|
+
if (closed)
|
|
64
|
+
return;
|
|
65
|
+
pending = { snapshot };
|
|
66
|
+
drain();
|
|
67
|
+
},
|
|
68
|
+
close
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=progress-receiver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-receiver.js","sourceRoot":"","sources":["../../../src/tasks/progress-receiver.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TaskContext, TaskOwner } from './contracts.js';\nimport { isTaskCancellation } from './cancellation.js';\nimport { bindTask, defineTask } from './runtime.js';\nimport { logFrameworkEvent } from '../component/log.js';\n\n/** One replaceable observation lane, owned by an originating invocation. */\nexport interface TaskProgressReceiver<Snapshot> {\n\t/** Offers a captured snapshot, replacing any snapshot which has not started. */\n\treport(snapshot: Snapshot): void;\n\t/** Fences publication immediately; asynchronous cleanup does not delay the caller. */\n\tclose(reason?: unknown): void;\n}\n\n/**\n * Serializes asynchronous progress activations while retaining only the latest pending value.\n * Each activation is an ordinary task with independent staged publication and structural children.\n * It belongs to the durable component owner, but never extends the originating invocation.\n * Callers must capture/validate snapshots before offering them and route errors to diagnostics.\n */\nexport function createTaskProgressReceiver<Snapshot>(options: {\n\treadonly owner: TaskOwner;\n\treadonly signal: AbortSignal;\n\treadonly label: string;\n\treadonly priority?: 'immediate' | 'normal' | 'deferred';\n\treadonly readiness?: 'blocking' | 'nonblocking';\n\treadonly receive: (snapshot: Snapshot, task: TaskContext) => void | Promise<void>;\n\treadonly onError: (error: unknown) => void;\n}): TaskProgressReceiver<Snapshot> {\n\tconst task = bindTask(\n\t\tdefineTask<[Snapshot], void>(\n\t\t\t{\n\t\t\t\tlabel: options.label,\n\t\t\t\tplacement: 'client',\n\t\t\t\treadiness: options.readiness ?? 'nonblocking',\n\t\t\t\tpriority: options.priority,\n\t\t\t\tdetached: true,\n\t\t\t\towner: options.owner\n\t\t\t},\n\t\t\toptions.receive\n\t\t),\n\t\t{ owner: options.owner }\n\t);\n\tlet closed = false;\n\tlet running = false;\n\tlet pending: { snapshot: Snapshot } | undefined;\n\tconst close = (reason: unknown = 'progress-complete') => {\n\t\tif (closed) return;\n\t\tclosed = true;\n\t\tpending = undefined;\n\t\toptions.signal.removeEventListener('abort', abort);\n\t\toptions.owner.signal.removeEventListener('abort', abort);\n\t\ttask.cancel(reason);\n\t};\n\tconst abort = () => close(options.signal.reason ?? options.owner.signal.reason);\n\tconst drain = () => {\n\t\tif (closed || running || !pending) return;\n\t\tconst { snapshot } = pending;\n\t\tpending = undefined;\n\t\trunning = true;\n\t\t// Observe the invocation's rejection before work can settle. Cancellation is lifecycle,\n\t\t// while failures still remain inspectable on the task and reach the supplied diagnostic.\n\t\tvoid Promise.resolve(task(snapshot)).then(\n\t\t\t() => finish(),\n\t\t\t(error: unknown) => {\n\t\t\t\ttry {\n\t\t\t\t\tif (!isTaskCancellation(error)) options.onError(error);\n\t\t\t\t} catch (diagnosticError) {\n\t\t\t\t\tlogFrameworkEvent(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\t'core',\n\t\t\t\t\t\t'task',\n\t\t\t\t\t\t'progress error diagnostic failed',\n\t\t\t\t\t\tdiagnosticError\n\t\t\t\t\t);\n\t\t\t\t} finally {\n\t\t\t\t\tfinish();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t};\n\tconst finish = () => {\n\t\trunning = false;\n\t\tdrain();\n\t};\n\toptions.signal.addEventListener('abort', abort, { once: true });\n\toptions.owner.signal.addEventListener('abort', abort, { once: true });\n\tif (options.signal.aborted || options.owner.signal.aborted) abort();\n\treturn {\n\t\treport(snapshot) {\n\t\t\tif (closed) return;\n\t\t\tpending = { snapshot };\n\t\t\tdrain();\n\t\t},\n\t\tclose\n\t};\n}\n"]}
|
|
@@ -32,7 +32,11 @@ function writePath(target, path, value) {
|
|
|
32
32
|
cursor = created;
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
-
|
|
35
|
+
const key = segments.at(-1);
|
|
36
|
+
// A captured collection already restores derived reads such as Map/Set.size.
|
|
37
|
+
// Reassigning that identical read would attempt to write a native getter-only property.
|
|
38
|
+
if (!Object.is(cursor[key], value))
|
|
39
|
+
cursor[key] = value;
|
|
36
40
|
}
|
|
37
41
|
/** Rejects prototype-bearing path segments before touching reactive state. */
|
|
38
42
|
function safeSegment(segment) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resumption.js","sourceRoot":"","sources":["../../src/component/resumption.ts"],"names":[],"mappings":"AAKA,4FAA4F;AAC5F,MAAM,UAAU,wBAAwB,CACvC,KAAwC,EACxC,UAAqC;IAErC,MAAM,MAAM,GAAG,aAAa,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvF,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAsD,EAAE,CAAC;YACrF,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAC5B,MAAM,IAAI,KAAK,CACd,iDAAiD,aAAa,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CACvH,CAAC;YACH,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,OAAO;IACR,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACnF,CAAC;AAED,wFAAwF;AACxF,SAAS,SAAS,CAAC,MAA+B,EAAE,IAAY,EAAE,KAAc;IAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,mDAAmD,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAChC,yEAAyE;QACzE,+EAA+E;QAC/E,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,GAAG,OAAkC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACP,MAAM,OAAO,GAA4B,EAAE,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;YAC1B,MAAM,GAAG,OAAO,CAAC;QAClB,CAAC;IACF,CAAC;IACD,MAAM,
|
|
1
|
+
{"version":3,"file":"resumption.js","sourceRoot":"","sources":["../../src/component/resumption.ts"],"names":[],"mappings":"AAKA,4FAA4F;AAC5F,MAAM,UAAU,wBAAwB,CACvC,KAAwC,EACxC,UAAqC;IAErC,MAAM,MAAM,GAAG,aAAa,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvF,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAsD,EAAE,CAAC;YACrF,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAC5B,MAAM,IAAI,KAAK,CACd,iDAAiD,aAAa,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CACvH,CAAC;YACH,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,OAAO;IACR,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACnF,CAAC;AAED,wFAAwF;AACxF,SAAS,SAAS,CAAC,MAA+B,EAAE,IAAY,EAAE,KAAc;IAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,mDAAmD,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAChC,yEAAyE;QACzE,+EAA+E;QAC/E,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,GAAG,OAAkC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACP,MAAM,OAAO,GAA4B,EAAE,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;YAC1B,MAAM,GAAG,OAAO,CAAC;QAClB,CAAC;IACF,CAAC;IACD,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;IAC7B,6EAA6E;IAC7E,wFAAwF;IACxF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACzD,CAAC;AAED,8EAA8E;AAC9E,SAAS,WAAW,CAAC,OAAe;IACnC,OAAO,CACN,OAAO,CAAC,MAAM,GAAG,CAAC;QAClB,OAAO,KAAK,WAAW;QACvB,OAAO,KAAK,WAAW;QACvB,OAAO,KAAK,aAAa,CACzB,CAAC;AACH,CAAC","sourcesContent":["import type { Reactive } from '@exactjs/reactive/framework/runtime';\nimport type { ComponentResumptionSource } from './contracts.js';\n\ntype IndexedResumptionField = readonly [field: number | string, value: unknown];\n\n/** Applies compiler-selected SSR state paths without replacing client-local setup state. */\nexport function applyComponentResumption(\n\tstate: Reactive<Record<string, unknown>>,\n\tresumption: ComponentResumptionSource\n): void {\n\tconst values = 'componentId' in resumption ? resumption.values : (resumption[1] ?? []);\n\tif (Array.isArray(values)) {\n\t\tfor (const [field, value] of values as unknown as readonly IndexedResumptionField[]) {\n\t\t\tif (typeof field !== 'string')\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`eXact indexed resumption was not prepared for ${'componentId' in resumption ? resumption.componentId : resumption[0]}`\n\t\t\t\t);\n\t\t\twritePath(state, field, value);\n\t\t}\n\t\treturn;\n\t}\n\tfor (const [path, value] of Object.entries(values)) writePath(state, path, value);\n}\n\n/** Materializes one validated dotted state path into the live reactive state object. */\nfunction writePath(target: Record<string, unknown>, path: string, value: unknown): void {\n\tconst segments = path.split('.');\n\tif (!segments.length || !segments.every(safeSegment)) {\n\t\tthrow new Error(`Malformed eXact component resumption state path ${path}`);\n\t}\n\tlet cursor = target;\n\tfor (const segment of segments.slice(0, -1)) {\n\t\tconst current = cursor[segment];\n\t\t// A child path can accompany its captured parent or a setup-owned array.\n\t\t// Traversing `.length` or an indexed item must preserve that array's identity.\n\t\tif (current && typeof current === 'object') {\n\t\t\tcursor = current as Record<string, unknown>;\n\t\t} else {\n\t\t\tconst created: Record<string, unknown> = {};\n\t\t\tcursor[segment] = created;\n\t\t\tcursor = created;\n\t\t}\n\t}\n\tconst key = segments.at(-1)!;\n\t// A captured collection already restores derived reads such as Map/Set.size.\n\t// Reassigning that identical read would attempt to write a native getter-only property.\n\tif (!Object.is(cursor[key], value)) cursor[key] = value;\n}\n\n/** Rejects prototype-bearing path segments before touching reactive state. */\nfunction safeSegment(segment: string): boolean {\n\treturn (\n\t\tsegment.length > 0 &&\n\t\tsegment !== '__proto__' &&\n\t\tsegment !== 'prototype' &&\n\t\tsegment !== 'constructor'\n\t);\n}\n"]}
|
|
@@ -8,4 +8,9 @@ export declare function isExactContinuationInvocation(value: unknown, options: {
|
|
|
8
8
|
}): boolean;
|
|
9
9
|
/** Reports whether a generated continuation state-path descriptor is valid. */
|
|
10
10
|
export declare function isExactContinuationStatePath(value: unknown): value is ExactContinuationStatePathContract;
|
|
11
|
+
/** Validates readable attribution and opaque identity for a compiled progress receiver. */
|
|
12
|
+
export declare function isExactProgressReceiver(value: unknown): value is Readonly<{
|
|
13
|
+
id: string;
|
|
14
|
+
label: string;
|
|
15
|
+
}>;
|
|
11
16
|
//# sourceMappingURL=continuation-validation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"continuation-validation.d.ts","sourceRoot":"","sources":["../../src/component-contract/continuation-validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,kCAAkC,EAClC,kCAAkC,EAClC,MAAM,2BAA2B,CAAC;AAGnC,kFAAkF;AAClF,wBAAgB,6BAA6B,CAC5C,KAAK,EAAE,OAAO,GACZ,KAAK,IAAI,kCAAkC,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAYrE;AAED,6FAA6F;AAC7F,wBAAgB,6BAA6B,CAC5C,KAAK,EAAE,OAAO,GACZ,KAAK,IAAI,kCAAkC,CAAC,YAAY,CAAC,CAAC;AAC7D,wBAAgB,6BAA6B,CAC5C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE;IAAE,iBAAiB,EAAE,IAAI,CAAA;CAAE,GAClC,OAAO,CAAC;AA4BX,+EAA+E;AAC/E,wBAAgB,4BAA4B,CAC3C,KAAK,EAAE,OAAO,GACZ,KAAK,IAAI,kCAAkC,CAc7C"}
|
|
1
|
+
{"version":3,"file":"continuation-validation.d.ts","sourceRoot":"","sources":["../../src/component-contract/continuation-validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,kCAAkC,EAClC,kCAAkC,EAClC,MAAM,2BAA2B,CAAC;AAGnC,kFAAkF;AAClF,wBAAgB,6BAA6B,CAC5C,KAAK,EAAE,OAAO,GACZ,KAAK,IAAI,kCAAkC,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAYrE;AAED,6FAA6F;AAC7F,wBAAgB,6BAA6B,CAC5C,KAAK,EAAE,OAAO,GACZ,KAAK,IAAI,kCAAkC,CAAC,YAAY,CAAC,CAAC;AAC7D,wBAAgB,6BAA6B,CAC5C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE;IAAE,iBAAiB,EAAE,IAAI,CAAA;CAAE,GAClC,OAAO,CAAC;AA4BX,+EAA+E;AAC/E,wBAAgB,4BAA4B,CAC3C,KAAK,EAAE,OAAO,GACZ,KAAK,IAAI,kCAAkC,CAc7C;AAED,2FAA2F;AAC3F,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,OAAO,GACZ,KAAK,IAAI,QAAQ,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAOlD"}
|
|
@@ -43,4 +43,11 @@ export function isExactContinuationStatePath(value) {
|
|
|
43
43
|
value.operation === 'map' ||
|
|
44
44
|
value.operation === 'set'));
|
|
45
45
|
}
|
|
46
|
+
/** Validates readable attribution and opaque identity for a compiled progress receiver. */
|
|
47
|
+
export function isExactProgressReceiver(value) {
|
|
48
|
+
return (isContractRecord(value) &&
|
|
49
|
+
hasOnlyContractKeys(value, ['id', 'label']) &&
|
|
50
|
+
isContractString(value.id) &&
|
|
51
|
+
isContractString(value.label));
|
|
52
|
+
}
|
|
46
53
|
//# sourceMappingURL=continuation-validation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"continuation-validation.js","sourceRoot":"","sources":["../../src/component-contract/continuation-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tExactComponentContinuationContract,\n\tExactContinuationStatePathContract\n} from '../component-contracts.js';\nimport { hasOnlyContractKeys, isContractRecord, isContractString } from './metadata-validation.js';\n\n/** Reports whether a generated continuation dependency has a supported source. */\nexport function isExactContinuationDependency(\n\tvalue: unknown\n): value is ExactComponentContinuationContract['dependencies'][number] {\n\treturn (\n\t\tisContractRecord(value) &&\n\t\thasOnlyContractKeys(value, ['index', 'source', 'path']) &&\n\t\t(value.index === undefined ||\n\t\t\t(typeof value.index === 'number' && Number.isSafeInteger(value.index) && value.index >= 0)) &&\n\t\t(value.path === undefined || isContractString(value.path)) &&\n\t\t(value.source === 'state' ||\n\t\t\tvalue.source === 'props' ||\n\t\t\tvalue.source === 'derived' ||\n\t\t\tvalue.source === 'argument')\n\t);\n}\n\n/** Reports whether generated continuation invocation metadata has a valid protocol shape. */\nexport function isExactContinuationInvocation(\n\tvalue: unknown\n): value is ExactComponentContinuationContract['invocation'];\nexport function isExactContinuationInvocation(\n\tvalue: unknown,\n\toptions: { argumentsOptional: true }\n): boolean;\nexport function isExactContinuationInvocation(\n\tvalue: unknown,\n\toptions: { argumentsOptional?: boolean } = {}\n): boolean {\n\tif (!isContractRecord(value) || !hasOnlyContractKeys(value, ['arguments', 'concurrency']))\n\t\treturn false;\n\tconst argumentsValue = value.arguments;\n\treturn (\n\t\t((options.argumentsOptional && argumentsValue === undefined) ||\n\t\t\t(Array.isArray(argumentsValue) &&\n\t\t\t\targumentsValue.every(\n\t\t\t\t\t(argument) =>\n\t\t\t\t\t\tisContractRecord(argument) &&\n\t\t\t\t\t\thasOnlyContractKeys(argument, ['index', 'source', 'path']) &&\n\t\t\t\t\t\t(argument.index === undefined ||\n\t\t\t\t\t\t\t(typeof argument.index === 'number' &&\n\t\t\t\t\t\t\t\tNumber.isSafeInteger(argument.index) &&\n\t\t\t\t\t\t\t\targument.index >= 0)) &&\n\t\t\t\t\t\t(argument.path === undefined || isContractString(argument.path)) &&\n\t\t\t\t\t\targument.source === 'argument'\n\t\t\t\t))) &&\n\t\t(value.concurrency === 'parallel' ||\n\t\t\tvalue.concurrency === 'latest' ||\n\t\t\tvalue.concurrency === 'queue')\n\t);\n}\n\n/** Reports whether a generated continuation state-path descriptor is valid. */\nexport function isExactContinuationStatePath(\n\tvalue: unknown\n): value is ExactContinuationStatePathContract {\n\treturn (\n\t\tisContractRecord(value) &&\n\t\thasOnlyContractKeys(value, ['path', 'kind', 'confidence', 'operation']) &&\n\t\tisContractString(value.path) &&\n\t\t(value.kind === 'read' || value.kind === 'write') &&\n\t\t(value.confidence === 'exact' ||\n\t\t\tvalue.confidence === 'broad' ||\n\t\t\tvalue.confidence === 'unknown') &&\n\t\t(value.operation === undefined ||\n\t\t\tvalue.operation === 'value' ||\n\t\t\tvalue.operation === 'map' ||\n\t\t\tvalue.operation === 'set')\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"continuation-validation.js","sourceRoot":"","sources":["../../src/component-contract/continuation-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tExactComponentContinuationContract,\n\tExactContinuationStatePathContract\n} from '../component-contracts.js';\nimport { hasOnlyContractKeys, isContractRecord, isContractString } from './metadata-validation.js';\n\n/** Reports whether a generated continuation dependency has a supported source. */\nexport function isExactContinuationDependency(\n\tvalue: unknown\n): value is ExactComponentContinuationContract['dependencies'][number] {\n\treturn (\n\t\tisContractRecord(value) &&\n\t\thasOnlyContractKeys(value, ['index', 'source', 'path']) &&\n\t\t(value.index === undefined ||\n\t\t\t(typeof value.index === 'number' && Number.isSafeInteger(value.index) && value.index >= 0)) &&\n\t\t(value.path === undefined || isContractString(value.path)) &&\n\t\t(value.source === 'state' ||\n\t\t\tvalue.source === 'props' ||\n\t\t\tvalue.source === 'derived' ||\n\t\t\tvalue.source === 'argument')\n\t);\n}\n\n/** Reports whether generated continuation invocation metadata has a valid protocol shape. */\nexport function isExactContinuationInvocation(\n\tvalue: unknown\n): value is ExactComponentContinuationContract['invocation'];\nexport function isExactContinuationInvocation(\n\tvalue: unknown,\n\toptions: { argumentsOptional: true }\n): boolean;\nexport function isExactContinuationInvocation(\n\tvalue: unknown,\n\toptions: { argumentsOptional?: boolean } = {}\n): boolean {\n\tif (!isContractRecord(value) || !hasOnlyContractKeys(value, ['arguments', 'concurrency']))\n\t\treturn false;\n\tconst argumentsValue = value.arguments;\n\treturn (\n\t\t((options.argumentsOptional && argumentsValue === undefined) ||\n\t\t\t(Array.isArray(argumentsValue) &&\n\t\t\t\targumentsValue.every(\n\t\t\t\t\t(argument) =>\n\t\t\t\t\t\tisContractRecord(argument) &&\n\t\t\t\t\t\thasOnlyContractKeys(argument, ['index', 'source', 'path']) &&\n\t\t\t\t\t\t(argument.index === undefined ||\n\t\t\t\t\t\t\t(typeof argument.index === 'number' &&\n\t\t\t\t\t\t\t\tNumber.isSafeInteger(argument.index) &&\n\t\t\t\t\t\t\t\targument.index >= 0)) &&\n\t\t\t\t\t\t(argument.path === undefined || isContractString(argument.path)) &&\n\t\t\t\t\t\targument.source === 'argument'\n\t\t\t\t))) &&\n\t\t(value.concurrency === 'parallel' ||\n\t\t\tvalue.concurrency === 'latest' ||\n\t\t\tvalue.concurrency === 'queue')\n\t);\n}\n\n/** Reports whether a generated continuation state-path descriptor is valid. */\nexport function isExactContinuationStatePath(\n\tvalue: unknown\n): value is ExactContinuationStatePathContract {\n\treturn (\n\t\tisContractRecord(value) &&\n\t\thasOnlyContractKeys(value, ['path', 'kind', 'confidence', 'operation']) &&\n\t\tisContractString(value.path) &&\n\t\t(value.kind === 'read' || value.kind === 'write') &&\n\t\t(value.confidence === 'exact' ||\n\t\t\tvalue.confidence === 'broad' ||\n\t\t\tvalue.confidence === 'unknown') &&\n\t\t(value.operation === undefined ||\n\t\t\tvalue.operation === 'value' ||\n\t\t\tvalue.operation === 'map' ||\n\t\t\tvalue.operation === 'set')\n\t);\n}\n\n/** Validates readable attribution and opaque identity for a compiled progress receiver. */\nexport function isExactProgressReceiver(\n\tvalue: unknown\n): value is Readonly<{ id: string; label: string }> {\n\treturn (\n\t\tisContractRecord(value) &&\n\t\thasOnlyContractKeys(value, ['id', 'label']) &&\n\t\tisContractString(value.id) &&\n\t\tisContractString(value.label)\n\t);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-validation.d.ts","sourceRoot":"","sources":["../../src/component-contract/contract-validation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,sBAAsB,EAKtB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"contract-validation.d.ts","sourceRoot":"","sources":["../../src/component-contract/contract-validation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,sBAAsB,EAKtB,MAAM,2BAA2B,CAAC;AAuBnC,2FAA2F;AAC3F,wBAAgB,wBAAwB,CACvC,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,MAAM,GACjB,KAAK,IAAI,sBAAsB,CA0CjC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { componentContractVersion } from '../component/contract-versions.js';
|
|
2
2
|
import { hasConsistentStatelessServerExecution, isExactServerExecutionMetadata } from './server-execution-validation.js';
|
|
3
3
|
import { isExactComponentBoundaryContract } from './boundary-validation.js';
|
|
4
|
-
import { isExactContinuationDependency, isExactContinuationInvocation, isExactContinuationStatePath } from './continuation-validation.js';
|
|
4
|
+
import { isExactProgressReceiver, isExactContinuationDependency, isExactContinuationInvocation, isExactContinuationStatePath } from './continuation-validation.js';
|
|
5
5
|
import { hasOnlyContractKeys, isContractRecord, isContractString, isReactiveAllocation, isSafeContractStringList, isSafeContractPropertyKeyList } from './metadata-validation.js';
|
|
6
6
|
import { allCompiledComponentABI } from '../component/compiled-abi.js';
|
|
7
7
|
import { isExactValueSerializationSchema } from '../component-abi/value-serialization.js';
|
|
@@ -211,6 +211,7 @@ function isContinuation(value) {
|
|
|
211
211
|
'componentId',
|
|
212
212
|
'readiness',
|
|
213
213
|
'concurrency',
|
|
214
|
+
'progress',
|
|
214
215
|
'dependencies',
|
|
215
216
|
'stateReads',
|
|
216
217
|
'stateWrites',
|
|
@@ -226,6 +227,8 @@ function isContinuation(value) {
|
|
|
226
227
|
isContractString(value.componentId) &&
|
|
227
228
|
(value.readiness === 'blocking' || value.readiness === 'nonblocking') &&
|
|
228
229
|
(value.concurrency === undefined || isConcurrency(value.concurrency)) &&
|
|
230
|
+
(value.progress === undefined ||
|
|
231
|
+
(Array.isArray(value.progress) && value.progress.every(isExactProgressReceiver))) &&
|
|
229
232
|
Array.isArray(value.dependencies) &&
|
|
230
233
|
value.dependencies.every(isExactContinuationDependency) &&
|
|
231
234
|
Array.isArray(value.stateReads) &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-validation.js","sourceRoot":"","sources":["../../src/component-contract/contract-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { componentContractVersion } from '../component/contract-versions.js';\nimport type {\n\tExactComponentContract,\n\tExactComponentExecutionContract,\n\tExactComponentImplementationContract,\n\tExactComponentContinuationExecutorContract,\n\tExactComponentResumptionContract\n} from '../component-contracts.js';\nimport {\n\thasConsistentStatelessServerExecution,\n\tisExactServerExecutionMetadata\n} from './server-execution-validation.js';\nimport { isExactComponentBoundaryContract } from './boundary-validation.js';\nimport {\n\tisExactContinuationDependency,\n\tisExactContinuationInvocation,\n\tisExactContinuationStatePath\n} from './continuation-validation.js';\nimport {\n\thasOnlyContractKeys,\n\tisContractRecord,\n\tisContractString,\n\tisReactiveAllocation,\n\tisSafeContractStringList,\n\tisSafeContractPropertyKeyList\n} from './metadata-validation.js';\nimport { allCompiledComponentABI } from '../component/compiled-abi.js';\nimport { isExactValueSerializationSchema } from '../component-abi/value-serialization.js';\n\n/** Validates all required metadata before a generated artifact gains runtime authority. */\nexport function isExactComponentContract(\n\tvalue: unknown,\n\tcomponentId: string\n): value is ExactComponentContract {\n\tif (!isContractRecord(value)) return false;\n\treturn (\n\t\thasOnlyContractKeys(value, [\n\t\t\t'version',\n\t\t\t'placement',\n\t\t\t'role',\n\t\t\t'implementations',\n\t\t\t'continuations',\n\t\t\t'executors',\n\t\t\t'boundaries',\n\t\t\t'resumption',\n\t\t\t'execution',\n\t\t\t'artifact'\n\t\t]) &&\n\t\tvalue.version === componentContractVersion &&\n\t\t(value.placement === 'client' ||\n\t\t\tvalue.placement === 'server' ||\n\t\t\tvalue.placement === 'isomorphic' ||\n\t\t\tvalue.placement === 'unknown') &&\n\t\t(value.role === 'client' || value.role === 'render' || value.role === 'executor') &&\n\t\tArray.isArray(value.implementations) &&\n\t\tvalue.implementations.every(isImplementation) &&\n\t\tArray.isArray(value.continuations) &&\n\t\tvalue.continuations.every(\n\t\t\t(continuation) => isContinuation(continuation) && continuation.componentId === componentId\n\t\t) &&\n\t\tArray.isArray(value.executors) &&\n\t\tvalue.executors.every(\n\t\t\t(executor) => isExecutor(executor) && executor.componentId === componentId\n\t\t) &&\n\t\tArray.isArray(value.boundaries) &&\n\t\tvalue.boundaries.every(\n\t\t\t(boundary) =>\n\t\t\t\tisExactComponentBoundaryContract(boundary) && boundary.ownerComponentId === componentId\n\t\t) &&\n\t\t(value.resumption === undefined ||\n\t\t\t(isResumption(value.resumption) && value.resumption.componentId === componentId)) &&\n\t\t(value.execution === undefined || isExecution(value.execution)) &&\n\t\tisExecutableArtifact(value.artifact, componentId, value.role) &&\n\t\thasConsistentServerPublication(value)\n\t);\n}\n\nfunction hasConsistentServerPublication(value: Record<PropertyKey, unknown>): boolean {\n\tif (!isContractRecord(value.artifact) || !isContractRecord(value.artifact.execution)) return true;\n\tconst resumable =\n\t\tvalue.resumption !== undefined &&\n\t\tArray.isArray(value.continuations) &&\n\t\tvalue.continuations.length !== 0;\n\treturn (value.artifact.execution.publication !== undefined) === resumable;\n}\n\nfunction isExecutableArtifact(value: unknown, componentId: string, role: unknown): boolean {\n\tif (\n\t\t!isContractRecord(value) ||\n\t\tvalue.version !== componentContractVersion ||\n\t\tvalue.id !== componentId\n\t)\n\t\treturn false;\n\tif (!hasCommonArtifactFields(value)) return false;\n\tif (value.target === 'client') return role === 'client' && isClientArtifact(value);\n\tif (value.target === 'server')\n\t\treturn (role === 'render' || role === 'executor') && isServerArtifact(value);\n\treturn false;\n}\n\nfunction hasCommonArtifactFields(value: Record<PropertyKey, unknown>): boolean {\n\treturn (\n\t\ttypeof value.instantiate === 'function' &&\n\t\ttypeof value.construct === 'function' &&\n\t\ttypeof value.abi === 'number' &&\n\t\tNumber.isSafeInteger(value.abi) &&\n\t\tvalue.abi >= 0 &&\n\t\t(value.abi & ~allCompiledComponentABI) === 0 &&\n\t\tisSafeContractStringList(value.state) &&\n\t\tisSafeContractStringList(value.props) &&\n\t\t(value.opaqueProps === undefined || isSafeContractPropertyKeyList(value.opaqueProps)) &&\n\t\t(value.identityProps === undefined || isSafeContractStringList(value.identityProps)) &&\n\t\t(value.serialization === undefined || isExactValueSerializationSchema(value.serialization)) &&\n\t\t(value.tasks === undefined || isSafeContractStringList(value.tasks)) &&\n\t\t(value.reactive === undefined ||\n\t\t\t(Array.isArray(value.reactive) && value.reactive.every(isReactiveAllocation))) &&\n\t\t(value.render === undefined || value.render === 'returned-function') &&\n\t\tArray.isArray(value.capabilities) &&\n\t\tvalue.capabilities.every(isCapability)\n\t);\n}\n\nfunction isClientArtifact(value: Record<PropertyKey, unknown>): boolean {\n\treturn (\n\t\thasOnlyContractKeys(value, [\n\t\t\t'version',\n\t\t\t'target',\n\t\t\t'id',\n\t\t\t'template',\n\t\t\t'construct',\n\t\t\t'attach',\n\t\t\t'receive',\n\t\t\t'dispose',\n\t\t\t'instantiate',\n\t\t\t'abi',\n\t\t\t'updates',\n\t\t\t'state',\n\t\t\t'props',\n\t\t\t'serialization',\n\t\t\t'opaqueProps',\n\t\t\t'identityProps',\n\t\t\t'tasks',\n\t\t\t'reactive',\n\t\t\t'render',\n\t\t\t'capabilities'\n\t\t]) &&\n\t\t(value.template === undefined || isContractRecord(value.template)) &&\n\t\ttypeof value.attach === 'function' &&\n\t\ttypeof value.receive === 'function' &&\n\t\ttypeof value.dispose === 'function' &&\n\t\t(value.updates === undefined || isComponentUpdates(value.updates))\n\t);\n}\n\nfunction isServerArtifact(value: Record<PropertyKey, unknown>): boolean {\n\treturn (\n\t\thasOnlyContractKeys(value, [\n\t\t\t'version',\n\t\t\t'target',\n\t\t\t'id',\n\t\t\t'issue',\n\t\t\t'write',\n\t\t\t'dispose',\n\t\t\t'execute',\n\t\t\t'instantiate',\n\t\t\t'construct',\n\t\t\t'abi',\n\t\t\t'state',\n\t\t\t'props',\n\t\t\t'serialization',\n\t\t\t'opaqueProps',\n\t\t\t'tasks',\n\t\t\t'reactive',\n\t\t\t'render',\n\t\t\t'capabilities',\n\t\t\t'execution',\n\t\t\t'selection'\n\t\t]) &&\n\t\ttypeof value.issue === 'function' &&\n\t\ttypeof value.write === 'function' &&\n\t\ttypeof value.dispose === 'function' &&\n\t\t(value.execute === undefined || typeof value.execute === 'function') &&\n\t\t(value.selection === undefined || isServerSelection(value.selection)) &&\n\t\tisServerExecution(value.execution, value.selection !== undefined) &&\n\t\thasConsistentStatelessServerExecution(value)\n\t);\n}\n\n/** Validates the finite registry resolver retained by a lazy server facade. */\nfunction isServerSelection(value: unknown): boolean {\n\treturn (\n\t\tisContractRecord(value) &&\n\t\thasOnlyContractKeys(value, ['key', 'resolve']) &&\n\t\tisContractString(value.key) &&\n\t\ttypeof value.resolve === 'function'\n\t);\n}\n\nfunction isCapability(value: unknown): boolean {\n\treturn (\n\t\ttypeof value === 'string' &&\n\t\t[\n\t\t\t'tasks',\n\t\t\t'continuations',\n\t\t\t'resumption',\n\t\t\t'inspection',\n\t\t\t'registry',\n\t\t\t'enhancements',\n\t\t\t'interactions',\n\t\t\t'compatibility',\n\t\t\t'dynamic-components',\n\t\t\t'collections',\n\t\t\t'contexts',\n\t\t\t'targets'\n\t\t].includes(value)\n\t);\n}\n\n/** Validates the closed server projection without accepting executable data from foreign input. */\nfunction isServerExecution(value: unknown, selection = false): boolean {\n\treturn isExactServerExecutionMetadata(value, selection);\n}\n\nfunction isComponentUpdates(value: unknown): boolean {\n\tif (\n\t\t!isContractRecord(value) ||\n\t\t!hasOnlyContractKeys(value, ['bindings', 'props', 'words', 'apply'])\n\t)\n\t\treturn false;\n\tconst words = value.words === undefined ? 2 : value.words;\n\treturn (\n\t\ttypeof words === 'number' &&\n\t\tNumber.isSafeInteger(words) &&\n\t\twords >= 2 &&\n\t\t(value.words === undefined || words >= 3) &&\n\t\tArray.isArray(value.bindings) &&\n\t\t(value.props === undefined ||\n\t\t\t(typeof value.props === 'number' &&\n\t\t\t\tNumber.isSafeInteger(value.props) &&\n\t\t\t\tvalue.props > 0 &&\n\t\t\t\tvalue.props <= value.bindings.length)) &&\n\t\tvalue.bindings.every(\n\t\t\t(binding) =>\n\t\t\t\tArray.isArray(binding) &&\n\t\t\t\tbinding.length === words + 1 &&\n\t\t\t\tNumber.isSafeInteger(binding[0]) &&\n\t\t\t\tbinding[0] >= 0 &&\n\t\t\t\tbinding\n\t\t\t\t\t.slice(1)\n\t\t\t\t\t.every((mask) => Number.isSafeInteger(mask) && mask >= 0 && mask <= 0xffff_ffff)\n\t\t) &&\n\t\ttypeof value.apply === 'function'\n\t);\n}\n\nfunction isImplementation(value: unknown): value is ExactComponentImplementationContract {\n\tif (!isContractRecord(value)) return false;\n\treturn (\n\t\thasOnlyContractKeys(value, ['id', 'name', 'role', 'implementation']) &&\n\t\tisContractString(value.id) &&\n\t\tisContractString(value.name) &&\n\t\t(value.role === 'root' || value.role === 'client-island' || value.role === 'server-part') &&\n\t\ttypeof value.implementation === 'function'\n\t);\n}\n\nfunction isContinuation(value: unknown): boolean {\n\tif (!isContractRecord(value)) return false;\n\treturn (\n\t\thasOnlyContractKeys(value, [\n\t\t\t'id',\n\t\t\t'kind',\n\t\t\t'componentId',\n\t\t\t'readiness',\n\t\t\t'concurrency',\n\t\t\t'dependencies',\n\t\t\t'stateReads',\n\t\t\t'stateWrites',\n\t\t\t'publicContexts',\n\t\t\t'serverContexts',\n\t\t\t'contextWrites',\n\t\t\t'serverContextWrites',\n\t\t\t'boundaries',\n\t\t\t'invocation'\n\t\t]) &&\n\t\tisContractString(value.id) &&\n\t\tvalue.kind === 'task' &&\n\t\tisContractString(value.componentId) &&\n\t\t(value.readiness === 'blocking' || value.readiness === 'nonblocking') &&\n\t\t(value.concurrency === undefined || isConcurrency(value.concurrency)) &&\n\t\tArray.isArray(value.dependencies) &&\n\t\tvalue.dependencies.every(isExactContinuationDependency) &&\n\t\tArray.isArray(value.stateReads) &&\n\t\tvalue.stateReads.every(isExactContinuationStatePath) &&\n\t\tArray.isArray(value.stateWrites) &&\n\t\tvalue.stateWrites.every(isExactContinuationStatePath) &&\n\t\tisSafeContractStringList(value.publicContexts) &&\n\t\tisSafeContractStringList(value.serverContexts) &&\n\t\tisSafeContractStringList(value.contextWrites) &&\n\t\t(value.serverContextWrites === undefined ||\n\t\t\tisSafeContractStringList(value.serverContextWrites)) &&\n\t\tisSafeContractStringList(value.boundaries) &&\n\t\t(value.invocation === undefined || isExactContinuationInvocation(value.invocation))\n\t);\n}\n\nfunction isExecutor(value: unknown): value is ExactComponentContinuationExecutorContract {\n\treturn (\n\t\tisContractRecord(value) &&\n\t\thasOnlyContractKeys(value, ['id', 'componentId', 'execute']) &&\n\t\tisContractString(value.id) &&\n\t\tisContractString(value.componentId) &&\n\t\ttypeof value.execute === 'function'\n\t);\n}\n\nfunction isResumption(value: unknown): value is ExactComponentResumptionContract {\n\treturn (\n\t\tisContractRecord(value) &&\n\t\thasOnlyContractKeys(value, [\n\t\t\t'componentId',\n\t\t\t'statePaths',\n\t\t\t'stateInputs',\n\t\t\t'stateDefaults',\n\t\t\t'continuations',\n\t\t\t'valueCaptures',\n\t\t\t'contexts',\n\t\t\t'boundaries'\n\t\t]) &&\n\t\tisContractString(value.componentId) &&\n\t\tisSafeContractStringList(value.statePaths) &&\n\t\tArray.isArray(value.stateInputs) &&\n\t\tvalue.stateInputs.every(\n\t\t\t(input) =>\n\t\t\t\tArray.isArray(input) &&\n\t\t\t\tinput.length === 2 &&\n\t\t\t\tisContractString(input[0]) &&\n\t\t\t\tisContractString(input[1])\n\t\t) &&\n\t\t(value.continuations === undefined || isSafeContractStringList(value.continuations)) &&\n\t\t(value.stateDefaults === undefined ||\n\t\t\t(Array.isArray(value.stateDefaults) &&\n\t\t\t\tvalue.stateDefaults.every(\n\t\t\t\t\t(input) =>\n\t\t\t\t\t\tArray.isArray(input) &&\n\t\t\t\t\t\tinput.length === 2 &&\n\t\t\t\t\t\tisContractString(input[0]) &&\n\t\t\t\t\t\t(input[1] === null ||\n\t\t\t\t\t\t\ttypeof input[1] === 'string' ||\n\t\t\t\t\t\t\ttypeof input[1] === 'boolean' ||\n\t\t\t\t\t\t\t(typeof input[1] === 'number' && Number.isFinite(input[1])))\n\t\t\t\t))) &&\n\t\tisSafeContractStringList(value.valueCaptures) &&\n\t\tisSafeContractStringList(value.contexts) &&\n\t\tisSafeContractStringList(value.boundaries)\n\t);\n}\n\nfunction isExecution(value: unknown): value is ExactComponentExecutionContract {\n\tif (!isContractRecord(value) || !Array.isArray(value.ports)) return false;\n\tconst ports = value.ports;\n\treturn (\n\t\thasOnlyContractKeys(value, ['version', 'ports', 'transitions', 'reactive']) &&\n\t\tvalue.version === 1 &&\n\t\tports.every(isExecutionPort) &&\n\t\tArray.isArray(value.transitions) &&\n\t\tvalue.transitions.every((transition) => isExecutionTransition(transition, ports.length)) &&\n\t\t(value.reactive === undefined ||\n\t\t\t(Array.isArray(value.reactive) && value.reactive.every(isReactiveAllocation)))\n\t);\n}\n\nfunction isExecutionPort(value: unknown): boolean {\n\treturn (\n\t\tArray.isArray(value) &&\n\t\tvalue.length === 3 &&\n\t\ttypeof value[0] === 'string' &&\n\t\t['state', 'props', 'context', 'derived', 'argument'].includes(value[0]) &&\n\t\tisContractString(value[1]) &&\n\t\ttypeof value[2] === 'string' &&\n\t\t['input', 'output', 'inout'].includes(value[2])\n\t);\n}\n\nfunction isExecutionTransition(value: unknown, portCount: number): boolean {\n\treturn (\n\t\tArray.isArray(value) &&\n\t\tvalue.length === 8 &&\n\t\tisContractString(value[0]) &&\n\t\tisContractString(value[1]) &&\n\t\t(value[2] === 'setup' || value[2] === 'interaction') &&\n\t\t(value[3] === 'client' || value[3] === 'server' || value[3] === 'isomorphic') &&\n\t\t(value[4] === 'blocking' || value[4] === 'nonblocking') &&\n\t\tisConcurrency(value[5]) &&\n\t\tisPortIndexList(value[6], portCount) &&\n\t\tisPortIndexList(value[7], portCount)\n\t);\n}\n\nfunction isConcurrency(value: unknown): boolean {\n\treturn value === 'parallel' || value === 'latest' || value === 'queue';\n}\n\nfunction isPortIndexList(value: unknown, portCount: number): boolean {\n\treturn (\n\t\tArray.isArray(value) &&\n\t\tvalue.every((index) => Number.isSafeInteger(index) && index >= 0 && index < portCount)\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"contract-validation.js","sourceRoot":"","sources":["../../src/component-contract/contract-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { componentContractVersion } from '../component/contract-versions.js';\nimport type {\n\tExactComponentContract,\n\tExactComponentExecutionContract,\n\tExactComponentImplementationContract,\n\tExactComponentContinuationExecutorContract,\n\tExactComponentResumptionContract\n} from '../component-contracts.js';\nimport {\n\thasConsistentStatelessServerExecution,\n\tisExactServerExecutionMetadata\n} from './server-execution-validation.js';\nimport { isExactComponentBoundaryContract } from './boundary-validation.js';\nimport {\n\tisExactProgressReceiver,\n\tisExactContinuationDependency,\n\tisExactContinuationInvocation,\n\tisExactContinuationStatePath\n} from './continuation-validation.js';\nimport {\n\thasOnlyContractKeys,\n\tisContractRecord,\n\tisContractString,\n\tisReactiveAllocation,\n\tisSafeContractStringList,\n\tisSafeContractPropertyKeyList\n} from './metadata-validation.js';\nimport { allCompiledComponentABI } from '../component/compiled-abi.js';\nimport { isExactValueSerializationSchema } from '../component-abi/value-serialization.js';\n\n/** Validates all required metadata before a generated artifact gains runtime authority. */\nexport function isExactComponentContract(\n\tvalue: unknown,\n\tcomponentId: string\n): value is ExactComponentContract {\n\tif (!isContractRecord(value)) return false;\n\treturn (\n\t\thasOnlyContractKeys(value, [\n\t\t\t'version',\n\t\t\t'placement',\n\t\t\t'role',\n\t\t\t'implementations',\n\t\t\t'continuations',\n\t\t\t'executors',\n\t\t\t'boundaries',\n\t\t\t'resumption',\n\t\t\t'execution',\n\t\t\t'artifact'\n\t\t]) &&\n\t\tvalue.version === componentContractVersion &&\n\t\t(value.placement === 'client' ||\n\t\t\tvalue.placement === 'server' ||\n\t\t\tvalue.placement === 'isomorphic' ||\n\t\t\tvalue.placement === 'unknown') &&\n\t\t(value.role === 'client' || value.role === 'render' || value.role === 'executor') &&\n\t\tArray.isArray(value.implementations) &&\n\t\tvalue.implementations.every(isImplementation) &&\n\t\tArray.isArray(value.continuations) &&\n\t\tvalue.continuations.every(\n\t\t\t(continuation) => isContinuation(continuation) && continuation.componentId === componentId\n\t\t) &&\n\t\tArray.isArray(value.executors) &&\n\t\tvalue.executors.every(\n\t\t\t(executor) => isExecutor(executor) && executor.componentId === componentId\n\t\t) &&\n\t\tArray.isArray(value.boundaries) &&\n\t\tvalue.boundaries.every(\n\t\t\t(boundary) =>\n\t\t\t\tisExactComponentBoundaryContract(boundary) && boundary.ownerComponentId === componentId\n\t\t) &&\n\t\t(value.resumption === undefined ||\n\t\t\t(isResumption(value.resumption) && value.resumption.componentId === componentId)) &&\n\t\t(value.execution === undefined || isExecution(value.execution)) &&\n\t\tisExecutableArtifact(value.artifact, componentId, value.role) &&\n\t\thasConsistentServerPublication(value)\n\t);\n}\n\nfunction hasConsistentServerPublication(value: Record<PropertyKey, unknown>): boolean {\n\tif (!isContractRecord(value.artifact) || !isContractRecord(value.artifact.execution)) return true;\n\tconst resumable =\n\t\tvalue.resumption !== undefined &&\n\t\tArray.isArray(value.continuations) &&\n\t\tvalue.continuations.length !== 0;\n\treturn (value.artifact.execution.publication !== undefined) === resumable;\n}\n\nfunction isExecutableArtifact(value: unknown, componentId: string, role: unknown): boolean {\n\tif (\n\t\t!isContractRecord(value) ||\n\t\tvalue.version !== componentContractVersion ||\n\t\tvalue.id !== componentId\n\t)\n\t\treturn false;\n\tif (!hasCommonArtifactFields(value)) return false;\n\tif (value.target === 'client') return role === 'client' && isClientArtifact(value);\n\tif (value.target === 'server')\n\t\treturn (role === 'render' || role === 'executor') && isServerArtifact(value);\n\treturn false;\n}\n\nfunction hasCommonArtifactFields(value: Record<PropertyKey, unknown>): boolean {\n\treturn (\n\t\ttypeof value.instantiate === 'function' &&\n\t\ttypeof value.construct === 'function' &&\n\t\ttypeof value.abi === 'number' &&\n\t\tNumber.isSafeInteger(value.abi) &&\n\t\tvalue.abi >= 0 &&\n\t\t(value.abi & ~allCompiledComponentABI) === 0 &&\n\t\tisSafeContractStringList(value.state) &&\n\t\tisSafeContractStringList(value.props) &&\n\t\t(value.opaqueProps === undefined || isSafeContractPropertyKeyList(value.opaqueProps)) &&\n\t\t(value.identityProps === undefined || isSafeContractStringList(value.identityProps)) &&\n\t\t(value.serialization === undefined || isExactValueSerializationSchema(value.serialization)) &&\n\t\t(value.tasks === undefined || isSafeContractStringList(value.tasks)) &&\n\t\t(value.reactive === undefined ||\n\t\t\t(Array.isArray(value.reactive) && value.reactive.every(isReactiveAllocation))) &&\n\t\t(value.render === undefined || value.render === 'returned-function') &&\n\t\tArray.isArray(value.capabilities) &&\n\t\tvalue.capabilities.every(isCapability)\n\t);\n}\n\nfunction isClientArtifact(value: Record<PropertyKey, unknown>): boolean {\n\treturn (\n\t\thasOnlyContractKeys(value, [\n\t\t\t'version',\n\t\t\t'target',\n\t\t\t'id',\n\t\t\t'template',\n\t\t\t'construct',\n\t\t\t'attach',\n\t\t\t'receive',\n\t\t\t'dispose',\n\t\t\t'instantiate',\n\t\t\t'abi',\n\t\t\t'updates',\n\t\t\t'state',\n\t\t\t'props',\n\t\t\t'serialization',\n\t\t\t'opaqueProps',\n\t\t\t'identityProps',\n\t\t\t'tasks',\n\t\t\t'reactive',\n\t\t\t'render',\n\t\t\t'capabilities'\n\t\t]) &&\n\t\t(value.template === undefined || isContractRecord(value.template)) &&\n\t\ttypeof value.attach === 'function' &&\n\t\ttypeof value.receive === 'function' &&\n\t\ttypeof value.dispose === 'function' &&\n\t\t(value.updates === undefined || isComponentUpdates(value.updates))\n\t);\n}\n\nfunction isServerArtifact(value: Record<PropertyKey, unknown>): boolean {\n\treturn (\n\t\thasOnlyContractKeys(value, [\n\t\t\t'version',\n\t\t\t'target',\n\t\t\t'id',\n\t\t\t'issue',\n\t\t\t'write',\n\t\t\t'dispose',\n\t\t\t'execute',\n\t\t\t'instantiate',\n\t\t\t'construct',\n\t\t\t'abi',\n\t\t\t'state',\n\t\t\t'props',\n\t\t\t'serialization',\n\t\t\t'opaqueProps',\n\t\t\t'tasks',\n\t\t\t'reactive',\n\t\t\t'render',\n\t\t\t'capabilities',\n\t\t\t'execution',\n\t\t\t'selection'\n\t\t]) &&\n\t\ttypeof value.issue === 'function' &&\n\t\ttypeof value.write === 'function' &&\n\t\ttypeof value.dispose === 'function' &&\n\t\t(value.execute === undefined || typeof value.execute === 'function') &&\n\t\t(value.selection === undefined || isServerSelection(value.selection)) &&\n\t\tisServerExecution(value.execution, value.selection !== undefined) &&\n\t\thasConsistentStatelessServerExecution(value)\n\t);\n}\n\n/** Validates the finite registry resolver retained by a lazy server facade. */\nfunction isServerSelection(value: unknown): boolean {\n\treturn (\n\t\tisContractRecord(value) &&\n\t\thasOnlyContractKeys(value, ['key', 'resolve']) &&\n\t\tisContractString(value.key) &&\n\t\ttypeof value.resolve === 'function'\n\t);\n}\n\nfunction isCapability(value: unknown): boolean {\n\treturn (\n\t\ttypeof value === 'string' &&\n\t\t[\n\t\t\t'tasks',\n\t\t\t'continuations',\n\t\t\t'resumption',\n\t\t\t'inspection',\n\t\t\t'registry',\n\t\t\t'enhancements',\n\t\t\t'interactions',\n\t\t\t'compatibility',\n\t\t\t'dynamic-components',\n\t\t\t'collections',\n\t\t\t'contexts',\n\t\t\t'targets'\n\t\t].includes(value)\n\t);\n}\n\n/** Validates the closed server projection without accepting executable data from foreign input. */\nfunction isServerExecution(value: unknown, selection = false): boolean {\n\treturn isExactServerExecutionMetadata(value, selection);\n}\n\nfunction isComponentUpdates(value: unknown): boolean {\n\tif (\n\t\t!isContractRecord(value) ||\n\t\t!hasOnlyContractKeys(value, ['bindings', 'props', 'words', 'apply'])\n\t)\n\t\treturn false;\n\tconst words = value.words === undefined ? 2 : value.words;\n\treturn (\n\t\ttypeof words === 'number' &&\n\t\tNumber.isSafeInteger(words) &&\n\t\twords >= 2 &&\n\t\t(value.words === undefined || words >= 3) &&\n\t\tArray.isArray(value.bindings) &&\n\t\t(value.props === undefined ||\n\t\t\t(typeof value.props === 'number' &&\n\t\t\t\tNumber.isSafeInteger(value.props) &&\n\t\t\t\tvalue.props > 0 &&\n\t\t\t\tvalue.props <= value.bindings.length)) &&\n\t\tvalue.bindings.every(\n\t\t\t(binding) =>\n\t\t\t\tArray.isArray(binding) &&\n\t\t\t\tbinding.length === words + 1 &&\n\t\t\t\tNumber.isSafeInteger(binding[0]) &&\n\t\t\t\tbinding[0] >= 0 &&\n\t\t\t\tbinding\n\t\t\t\t\t.slice(1)\n\t\t\t\t\t.every((mask) => Number.isSafeInteger(mask) && mask >= 0 && mask <= 0xffff_ffff)\n\t\t) &&\n\t\ttypeof value.apply === 'function'\n\t);\n}\n\nfunction isImplementation(value: unknown): value is ExactComponentImplementationContract {\n\tif (!isContractRecord(value)) return false;\n\treturn (\n\t\thasOnlyContractKeys(value, ['id', 'name', 'role', 'implementation']) &&\n\t\tisContractString(value.id) &&\n\t\tisContractString(value.name) &&\n\t\t(value.role === 'root' || value.role === 'client-island' || value.role === 'server-part') &&\n\t\ttypeof value.implementation === 'function'\n\t);\n}\n\nfunction isContinuation(value: unknown): boolean {\n\tif (!isContractRecord(value)) return false;\n\treturn (\n\t\thasOnlyContractKeys(value, [\n\t\t\t'id',\n\t\t\t'kind',\n\t\t\t'componentId',\n\t\t\t'readiness',\n\t\t\t'concurrency',\n\t\t\t'progress',\n\t\t\t'dependencies',\n\t\t\t'stateReads',\n\t\t\t'stateWrites',\n\t\t\t'publicContexts',\n\t\t\t'serverContexts',\n\t\t\t'contextWrites',\n\t\t\t'serverContextWrites',\n\t\t\t'boundaries',\n\t\t\t'invocation'\n\t\t]) &&\n\t\tisContractString(value.id) &&\n\t\tvalue.kind === 'task' &&\n\t\tisContractString(value.componentId) &&\n\t\t(value.readiness === 'blocking' || value.readiness === 'nonblocking') &&\n\t\t(value.concurrency === undefined || isConcurrency(value.concurrency)) &&\n\t\t(value.progress === undefined ||\n\t\t\t(Array.isArray(value.progress) && value.progress.every(isExactProgressReceiver))) &&\n\t\tArray.isArray(value.dependencies) &&\n\t\tvalue.dependencies.every(isExactContinuationDependency) &&\n\t\tArray.isArray(value.stateReads) &&\n\t\tvalue.stateReads.every(isExactContinuationStatePath) &&\n\t\tArray.isArray(value.stateWrites) &&\n\t\tvalue.stateWrites.every(isExactContinuationStatePath) &&\n\t\tisSafeContractStringList(value.publicContexts) &&\n\t\tisSafeContractStringList(value.serverContexts) &&\n\t\tisSafeContractStringList(value.contextWrites) &&\n\t\t(value.serverContextWrites === undefined ||\n\t\t\tisSafeContractStringList(value.serverContextWrites)) &&\n\t\tisSafeContractStringList(value.boundaries) &&\n\t\t(value.invocation === undefined || isExactContinuationInvocation(value.invocation))\n\t);\n}\n\nfunction isExecutor(value: unknown): value is ExactComponentContinuationExecutorContract {\n\treturn (\n\t\tisContractRecord(value) &&\n\t\thasOnlyContractKeys(value, ['id', 'componentId', 'execute']) &&\n\t\tisContractString(value.id) &&\n\t\tisContractString(value.componentId) &&\n\t\ttypeof value.execute === 'function'\n\t);\n}\n\nfunction isResumption(value: unknown): value is ExactComponentResumptionContract {\n\treturn (\n\t\tisContractRecord(value) &&\n\t\thasOnlyContractKeys(value, [\n\t\t\t'componentId',\n\t\t\t'statePaths',\n\t\t\t'stateInputs',\n\t\t\t'stateDefaults',\n\t\t\t'continuations',\n\t\t\t'valueCaptures',\n\t\t\t'contexts',\n\t\t\t'boundaries'\n\t\t]) &&\n\t\tisContractString(value.componentId) &&\n\t\tisSafeContractStringList(value.statePaths) &&\n\t\tArray.isArray(value.stateInputs) &&\n\t\tvalue.stateInputs.every(\n\t\t\t(input) =>\n\t\t\t\tArray.isArray(input) &&\n\t\t\t\tinput.length === 2 &&\n\t\t\t\tisContractString(input[0]) &&\n\t\t\t\tisContractString(input[1])\n\t\t) &&\n\t\t(value.continuations === undefined || isSafeContractStringList(value.continuations)) &&\n\t\t(value.stateDefaults === undefined ||\n\t\t\t(Array.isArray(value.stateDefaults) &&\n\t\t\t\tvalue.stateDefaults.every(\n\t\t\t\t\t(input) =>\n\t\t\t\t\t\tArray.isArray(input) &&\n\t\t\t\t\t\tinput.length === 2 &&\n\t\t\t\t\t\tisContractString(input[0]) &&\n\t\t\t\t\t\t(input[1] === null ||\n\t\t\t\t\t\t\ttypeof input[1] === 'string' ||\n\t\t\t\t\t\t\ttypeof input[1] === 'boolean' ||\n\t\t\t\t\t\t\t(typeof input[1] === 'number' && Number.isFinite(input[1])))\n\t\t\t\t))) &&\n\t\tisSafeContractStringList(value.valueCaptures) &&\n\t\tisSafeContractStringList(value.contexts) &&\n\t\tisSafeContractStringList(value.boundaries)\n\t);\n}\n\nfunction isExecution(value: unknown): value is ExactComponentExecutionContract {\n\tif (!isContractRecord(value) || !Array.isArray(value.ports)) return false;\n\tconst ports = value.ports;\n\treturn (\n\t\thasOnlyContractKeys(value, ['version', 'ports', 'transitions', 'reactive']) &&\n\t\tvalue.version === 1 &&\n\t\tports.every(isExecutionPort) &&\n\t\tArray.isArray(value.transitions) &&\n\t\tvalue.transitions.every((transition) => isExecutionTransition(transition, ports.length)) &&\n\t\t(value.reactive === undefined ||\n\t\t\t(Array.isArray(value.reactive) && value.reactive.every(isReactiveAllocation)))\n\t);\n}\n\nfunction isExecutionPort(value: unknown): boolean {\n\treturn (\n\t\tArray.isArray(value) &&\n\t\tvalue.length === 3 &&\n\t\ttypeof value[0] === 'string' &&\n\t\t['state', 'props', 'context', 'derived', 'argument'].includes(value[0]) &&\n\t\tisContractString(value[1]) &&\n\t\ttypeof value[2] === 'string' &&\n\t\t['input', 'output', 'inout'].includes(value[2])\n\t);\n}\n\nfunction isExecutionTransition(value: unknown, portCount: number): boolean {\n\treturn (\n\t\tArray.isArray(value) &&\n\t\tvalue.length === 8 &&\n\t\tisContractString(value[0]) &&\n\t\tisContractString(value[1]) &&\n\t\t(value[2] === 'setup' || value[2] === 'interaction') &&\n\t\t(value[3] === 'client' || value[3] === 'server' || value[3] === 'isomorphic') &&\n\t\t(value[4] === 'blocking' || value[4] === 'nonblocking') &&\n\t\tisConcurrency(value[5]) &&\n\t\tisPortIndexList(value[6], portCount) &&\n\t\tisPortIndexList(value[7], portCount)\n\t);\n}\n\nfunction isConcurrency(value: unknown): boolean {\n\treturn value === 'parallel' || value === 'latest' || value === 'queue';\n}\n\nfunction isPortIndexList(value: unknown, portCount: number): boolean {\n\treturn (\n\t\tArray.isArray(value) &&\n\t\tvalue.every((index) => Number.isSafeInteger(index) && index >= 0 && index < portCount)\n\t);\n}\n"]}
|
|
@@ -60,6 +60,11 @@ export type ExactComponentContinuationContract = Readonly<{
|
|
|
60
60
|
componentId: string;
|
|
61
61
|
readiness: 'blocking' | 'nonblocking';
|
|
62
62
|
concurrency?: 'parallel' | 'latest' | 'queue';
|
|
63
|
+
/** Compiler-owned progress receivers allowed for this operation. */
|
|
64
|
+
progress?: readonly Readonly<{
|
|
65
|
+
id: string;
|
|
66
|
+
label: string;
|
|
67
|
+
}>[];
|
|
63
68
|
dependencies: readonly Readonly<{
|
|
64
69
|
index?: number;
|
|
65
70
|
source: 'state' | 'props' | 'derived' | 'argument';
|