octane 0.2.12 → 0.2.13
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/README.md +5 -0
- package/dist/behavior-root.d.ts +13 -3
- package/dist/behavior-root.js +28 -5
- package/dist/cjs/behavior-root.cjs +32 -6
- package/dist/cjs/class-names.cjs +49 -0
- package/dist/cjs/constants.cjs +9 -0
- package/dist/cjs/css.cjs +6 -27
- package/dist/cjs/data-encoding.cjs +160 -0
- package/dist/cjs/dom-binding-handoff.cjs +93 -0
- package/dist/cjs/dom-binding-protocol.cjs +115 -0
- package/dist/cjs/dom-binding-styles.cjs +292 -0
- package/dist/cjs/dom-bindings.cjs +700 -0
- package/dist/cjs/dom-focused-move.cjs +66 -0
- package/dist/cjs/dom-tables.cjs +4 -94
- package/dist/cjs/error-codes.client.generated.cjs +33 -0
- package/dist/cjs/error-codes.server.generated.cjs +19 -0
- package/dist/cjs/hydration/control-capture.cjs +244 -0
- package/dist/cjs/hydration/event-capture.cjs +125 -43
- package/dist/cjs/hydration/interaction-config.cjs +50 -2
- package/dist/cjs/hydration-markers.cjs +37 -0
- package/dist/cjs/independent-hydration-protocol.cjs +106 -0
- package/dist/cjs/index.cjs +6 -0
- package/dist/cjs/runtime.cjs +2791 -215
- package/dist/cjs/runtime.server.cjs +716 -76
- package/dist/cjs/server/early-signals.cjs +45 -0
- package/dist/cjs/server/index.cjs +44 -0
- package/dist/cjs/server/rpc-batch.cjs +149 -0
- package/dist/cjs/server/rpc-stream.cjs +146 -0
- package/dist/cjs/server/rpc.cjs +34 -15
- package/dist/cjs/server/signal-query-observation.cjs +158 -0
- package/dist/cjs/server/streamed-region.cjs +52 -0
- package/dist/cjs/server/streamed-signals.cjs +512 -0
- package/dist/cjs/server-call.cjs +103 -0
- package/dist/cjs/server-rpc-batch-client.cjs +141 -0
- package/dist/cjs/server-rpc-client.cjs +94 -27
- package/dist/cjs/server-rpc-protocol.cjs +141 -0
- package/dist/cjs/server-rpc-stream-client.cjs +118 -0
- package/dist/cjs/signals/actions.cjs +474 -0
- package/dist/cjs/signals/client.cjs +4 -1
- package/dist/cjs/signals/computations.cjs +460 -0
- package/dist/cjs/signals/control-binding.cjs +368 -0
- package/dist/cjs/signals/derived-facade.cjs +50 -0
- package/dist/cjs/signals/document-owner.cjs +71 -0
- package/dist/cjs/signals/early-values.cjs +155 -0
- package/dist/cjs/signals/encoding.cjs +6 -95
- package/dist/cjs/signals/engine.cjs +276 -12
- package/dist/cjs/signals/errors.cjs +18 -0
- package/dist/cjs/signals/facade.cjs +477 -0
- package/dist/cjs/signals/graph.cjs +163 -20
- package/dist/cjs/signals/handle-protocol.cjs +36 -0
- package/dist/cjs/signals/index.cjs +81 -2
- package/dist/cjs/signals/native-read-client.cjs +10 -0
- package/dist/cjs/signals/owner-context.cjs +112 -0
- package/dist/cjs/signals/query-attempt-observer.cjs +68 -0
- package/dist/cjs/signals/query-facade.cjs +72 -0
- package/dist/cjs/signals/read-protocol.cjs +32 -0
- package/dist/cjs/signals/requests.cjs +287 -14
- package/dist/cjs/signals/scalar-computations.cjs +76 -0
- package/dist/cjs/signals/server.cjs +4 -1
- package/dist/cjs/signals/transition-candidate.cjs +567 -0
- package/dist/cjs/signals/transition-state.cjs +106 -0
- package/dist/cjs/signals/types.cjs +50 -0
- package/dist/cjs/stream-protocol.cjs +3 -0
- package/dist/cjs/streamed-signals-protocol.cjs +159 -0
- package/dist/cjs/style-values.cjs +122 -0
- package/dist/cjs/version.cjs +1 -1
- package/dist/class-names.d.ts +5 -0
- package/dist/class-names.js +25 -0
- package/dist/compiler/bundler.js +34 -6
- package/dist/compiler/compile.js +2234 -559
- package/dist/compiler/dom-binding-program.js +935 -0
- package/dist/compiler/dom-binding-request.js +57 -0
- package/dist/compiler/dom-bindings.js +2245 -0
- package/dist/compiler/hook-deps.js +26 -0
- package/dist/compiler/hydrate-boundaries.js +358 -15
- package/dist/compiler/index.d.ts +38 -1
- package/dist/compiler/index.js +1 -0
- package/dist/compiler/native-attribute-reads.js +127 -0
- package/dist/compiler/native-read-diagnostics.js +48 -9
- package/dist/compiler/native-read-types.js +55 -32
- package/dist/compiler/server-context.js +118 -0
- package/dist/compiler/signal-attempt-reads.js +479 -0
- package/dist/compiler/signal-declarations.js +557 -0
- package/dist/compiler/signal-start-reads.js +413 -0
- package/dist/compiler/slot-hooks.js +57 -10
- package/dist/compiler/template-ir.js +200 -0
- package/dist/compiler/typescript.d.ts +2 -0
- package/dist/compiler/typescript.js +2 -0
- package/dist/compiler/vite.d.ts +3 -1
- package/dist/compiler/vite.js +122 -4
- package/dist/compiler/volar.d.ts +6 -1
- package/dist/compiler/volar.js +674 -143
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +10 -0
- package/dist/css.d.ts +2 -5
- package/dist/css.js +2 -23
- package/dist/data-encoding.d.ts +9 -0
- package/dist/data-encoding.js +134 -0
- package/dist/dom-binding-classes.d.ts +15 -0
- package/dist/dom-binding-classes.js +129 -0
- package/dist/dom-binding-controls.d.ts +2 -0
- package/dist/dom-binding-controls.js +6 -0
- package/dist/dom-binding-handoff.d.ts +55 -0
- package/dist/dom-binding-handoff.js +62 -0
- package/dist/dom-binding-program.d.ts +300 -0
- package/dist/dom-binding-program.js +1625 -0
- package/dist/dom-binding-projections.d.ts +15 -0
- package/dist/dom-binding-projections.js +187 -0
- package/dist/dom-binding-protocol.d.ts +13 -0
- package/dist/dom-binding-protocol.js +88 -0
- package/dist/dom-binding-signals.d.ts +21 -0
- package/dist/dom-binding-signals.js +109 -0
- package/dist/dom-binding-styles.d.ts +17 -0
- package/dist/dom-binding-styles.js +272 -0
- package/dist/dom-bindings.d.ts +89 -0
- package/dist/dom-bindings.js +670 -0
- package/dist/dom-focused-move.d.ts +6 -0
- package/dist/dom-focused-move.js +42 -0
- package/dist/dom-tables.d.ts +1 -3
- package/dist/dom-tables.js +1 -91
- package/dist/error-codes.client.generated.d.ts +9 -0
- package/dist/error-codes.client.generated.js +33 -0
- package/dist/error-codes.server.generated.d.ts +5 -0
- package/dist/error-codes.server.generated.js +19 -0
- package/dist/hydration/control-capture.d.ts +62 -0
- package/dist/hydration/control-capture.js +223 -0
- package/dist/hydration/document-lifecycle.d.ts +23 -0
- package/dist/hydration/document-lifecycle.js +80 -0
- package/dist/hydration/event-capture.d.ts +20 -1
- package/dist/hydration/event-capture.js +128 -42
- package/dist/hydration/independent-island.d.ts +45 -0
- package/dist/hydration/independent-island.js +233 -0
- package/dist/hydration/index.d.ts +8 -1
- package/dist/hydration/index.js +55 -1
- package/dist/hydration/interaction-config.d.ts +5 -0
- package/dist/hydration/interaction-config.js +44 -1
- package/dist/hydration/stream-delivery.d.ts +32 -0
- package/dist/hydration/stream-delivery.js +333 -0
- package/dist/hydration/stream-receiver.d.ts +26 -0
- package/dist/hydration/stream-receiver.js +204 -0
- package/dist/hydration/stream-result-receiver.d.ts +70 -0
- package/dist/hydration/stream-result-receiver.js +246 -0
- package/dist/hydration/streamed-signals.d.ts +44 -0
- package/dist/hydration/streamed-signals.js +186 -0
- package/dist/hydration/types.d.ts +6 -0
- package/dist/hydration-markers.d.ts +7 -0
- package/dist/hydration-markers.js +10 -0
- package/dist/independent-hydration-protocol.d.ts +31 -0
- package/dist/independent-hydration-protocol.js +80 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -0
- package/dist/internal/signal-read.d.ts +1 -0
- package/dist/internal/signal-read.js +4 -0
- package/dist/jsx-runtime.d.ts +45 -6
- package/dist/public-types.d.ts +15 -1
- package/dist/runtime.d.ts +259 -21
- package/dist/runtime.js +2812 -220
- package/dist/runtime.server.d.ts +86 -6
- package/dist/runtime.server.js +712 -76
- package/dist/server/early-signals.d.ts +14 -0
- package/dist/server/early-signals.js +34 -0
- package/dist/server/index.d.ts +10 -2
- package/dist/server/index.js +48 -1
- package/dist/server/rpc-batch.d.ts +17 -0
- package/dist/server/rpc-batch.js +129 -0
- package/dist/server/rpc-stream.d.ts +9 -0
- package/dist/server/rpc-stream.js +125 -0
- package/dist/server/rpc.d.ts +5 -1
- package/dist/server/rpc.js +37 -13
- package/dist/server/signal-query-observation.d.ts +3 -0
- package/dist/server/signal-query-observation.js +134 -0
- package/dist/server/streamed-region.d.ts +15 -0
- package/dist/server/streamed-region.js +30 -0
- package/dist/server/streamed-signals.d.ts +45 -0
- package/dist/server/streamed-signals.js +488 -0
- package/dist/server-call.d.ts +41 -0
- package/dist/server-call.js +75 -0
- package/dist/server-rpc-batch-client.d.ts +7 -0
- package/dist/server-rpc-batch-client.js +119 -0
- package/dist/server-rpc-client.d.ts +3 -1
- package/dist/server-rpc-client.js +99 -27
- package/dist/server-rpc-protocol.d.ts +47 -0
- package/dist/server-rpc-protocol.js +109 -0
- package/dist/server-rpc-stream-client.d.ts +5 -0
- package/dist/server-rpc-stream-client.js +98 -0
- package/dist/signals/actions.d.ts +12 -0
- package/dist/signals/actions.js +466 -0
- package/dist/signals/client.d.ts +2 -0
- package/dist/signals/client.js +1 -0
- package/dist/signals/computations.d.ts +37 -0
- package/dist/signals/computations.js +455 -0
- package/dist/signals/control-binding.d.ts +31 -0
- package/dist/signals/control-binding.js +353 -0
- package/dist/signals/derived-facade.d.ts +3 -0
- package/dist/signals/derived-facade.js +25 -0
- package/dist/signals/document-owner.d.ts +10 -0
- package/dist/signals/document-owner.js +43 -0
- package/dist/signals/early-values.d.ts +24 -0
- package/dist/signals/early-values.js +124 -0
- package/dist/signals/encoding.d.ts +1 -3
- package/dist/signals/encoding.js +3 -93
- package/dist/signals/engine.d.ts +53 -4
- package/dist/signals/engine.js +275 -16
- package/dist/signals/errors.d.ts +7 -0
- package/dist/signals/errors.js +16 -0
- package/dist/signals/facade.d.ts +74 -0
- package/dist/signals/facade.js +452 -0
- package/dist/signals/graph.d.ts +50 -5
- package/dist/signals/graph.js +170 -19
- package/dist/signals/handle-protocol.d.ts +4 -0
- package/dist/signals/handle-protocol.js +11 -0
- package/dist/signals/index.d.ts +12 -3
- package/dist/signals/index.js +71 -2
- package/dist/signals/native-read-client.d.ts +3 -0
- package/dist/signals/native-read-client.js +10 -0
- package/dist/signals/owner-context.d.ts +22 -0
- package/dist/signals/owner-context.js +77 -0
- package/dist/signals/query-attempt-observer.d.ts +49 -0
- package/dist/signals/query-attempt-observer.js +41 -0
- package/dist/signals/query-facade.d.ts +3 -0
- package/dist/signals/query-facade.js +49 -0
- package/dist/signals/read-protocol.d.ts +32 -3
- package/dist/signals/read-protocol.js +26 -0
- package/dist/signals/requests.d.ts +38 -5
- package/dist/signals/requests.js +298 -15
- package/dist/signals/scalar-computations.d.ts +2 -0
- package/dist/signals/scalar-computations.js +60 -0
- package/dist/signals/server.d.ts +2 -0
- package/dist/signals/server.js +1 -0
- package/dist/signals/transition-candidate.d.ts +71 -0
- package/dist/signals/transition-candidate.js +557 -0
- package/dist/signals/transition-state.d.ts +51 -0
- package/dist/signals/transition-state.js +70 -0
- package/dist/signals/types.d.ts +95 -5
- package/dist/signals/types.js +20 -0
- package/dist/stream-protocol.d.ts +0 -5
- package/dist/stream-protocol.js +3 -0
- package/dist/streamed-signals-protocol.d.ts +60 -0
- package/dist/streamed-signals-protocol.js +130 -0
- package/dist/style-values.d.ts +3 -0
- package/dist/style-values.js +96 -0
- package/dist/version.js +1 -1
- package/package.json +37 -1
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
let CURRENT_OBSERVER;
|
|
2
|
+
function runWithServerSignalQueryAttemptObserver(owner, observe, createObservations, callback) {
|
|
3
|
+
const previous = CURRENT_OBSERVER;
|
|
4
|
+
CURRENT_OBSERVER = { owner, observe, createObservations };
|
|
5
|
+
try {
|
|
6
|
+
return callback();
|
|
7
|
+
} finally {
|
|
8
|
+
CURRENT_OBSERVER = previous;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function serverSignalQueryAttemptObserver(scopeKey) {
|
|
12
|
+
const context = CURRENT_OBSERVER;
|
|
13
|
+
if (context === void 0) return;
|
|
14
|
+
const ownerKey = context.owner.documentOwner.scopeKey;
|
|
15
|
+
if (scopeKey !== ownerKey && scopeKey !== `${ownerKey}:instance:${context.owner.instanceKey}`) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (typeof context.createObservations !== "function") {
|
|
19
|
+
throw new TypeError("A server signal query observer requires an observation factory.");
|
|
20
|
+
}
|
|
21
|
+
return context;
|
|
22
|
+
}
|
|
23
|
+
function hasServerSignalQueryAttemptObserver(scopeKey) {
|
|
24
|
+
return serverSignalQueryAttemptObserver(scopeKey) !== void 0;
|
|
25
|
+
}
|
|
26
|
+
function captureCurrentServerSignalQueryAttemptObserver(scopeKey) {
|
|
27
|
+
const context = serverSignalQueryAttemptObserver(scopeKey);
|
|
28
|
+
if (context === void 0) return;
|
|
29
|
+
return (callback) => runWithServerSignalQueryAttemptObserver(
|
|
30
|
+
context.owner,
|
|
31
|
+
context.observe,
|
|
32
|
+
context.createObservations,
|
|
33
|
+
callback
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
export {
|
|
37
|
+
captureCurrentServerSignalQueryAttemptObserver,
|
|
38
|
+
hasServerSignalQueryAttemptObserver,
|
|
39
|
+
runWithServerSignalQueryAttemptObserver,
|
|
40
|
+
serverSignalQueryAttemptObserver
|
|
41
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { skip, type QueryContext, type QueryLoadResult, type QueryOptions, type QuerySignal, type SignalOptions } from './types.js';
|
|
2
|
+
export declare function __queryAt<A, T>(site: string | undefined, select: () => A | typeof skip, load: (selection: A, context: QueryContext<T>) => QueryLoadResult<T>, options?: QueryOptions & SignalOptions): QuerySignal<T>;
|
|
3
|
+
export declare function query$<A, T>(select: () => A | typeof skip, load: (selection: A, context: QueryContext<T>) => QueryLoadResult<T>, options?: QueryOptions & SignalOptions): QuerySignal<T>;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { createResourceCellWith } from "./engine.js";
|
|
2
|
+
import { Descriptor, descriptorKey, signalOptionsKey } from "./facade.js";
|
|
3
|
+
import { runWithSignalOwner } from "./owner-context.js";
|
|
4
|
+
import { initializeResource, query as createQueryRequest } from "./requests.js";
|
|
5
|
+
import {
|
|
6
|
+
skip
|
|
7
|
+
} from "./types.js";
|
|
8
|
+
class QueryDescriptor extends Descriptor {
|
|
9
|
+
refetch() {
|
|
10
|
+
this.resolve().retry();
|
|
11
|
+
}
|
|
12
|
+
reset() {
|
|
13
|
+
this.resolve().retry({ pending: true });
|
|
14
|
+
}
|
|
15
|
+
retry(options) {
|
|
16
|
+
this.resolve().retry(options);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function __queryAt(site, select, load, options) {
|
|
20
|
+
if (typeof select !== "function" || typeof load !== "function") {
|
|
21
|
+
throw new TypeError("query$ requires selector and loader functions.");
|
|
22
|
+
}
|
|
23
|
+
const explicit = signalOptionsKey(options);
|
|
24
|
+
site ??= explicit;
|
|
25
|
+
const authoredKey = descriptorKey(site, explicit);
|
|
26
|
+
const key = explicit !== void 0 && (site?.startsWith("g:") || site?.startsWith("i:")) ? site.slice(0, 2) + authoredKey : authoredKey;
|
|
27
|
+
const request = createQueryRequest(key, load, options);
|
|
28
|
+
return new QueryDescriptor(
|
|
29
|
+
key,
|
|
30
|
+
"async",
|
|
31
|
+
(owner) => createResourceCellWith(
|
|
32
|
+
owner,
|
|
33
|
+
key,
|
|
34
|
+
() => {
|
|
35
|
+
const selection = runWithSignalOwner(owner, select);
|
|
36
|
+
return selection === skip ? skip : request(selection);
|
|
37
|
+
},
|
|
38
|
+
initializeResource
|
|
39
|
+
),
|
|
40
|
+
site
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
function query$(select, load, options) {
|
|
44
|
+
return __queryAt(void 0, select, load, options);
|
|
45
|
+
}
|
|
46
|
+
export {
|
|
47
|
+
__queryAt,
|
|
48
|
+
query$
|
|
49
|
+
};
|
|
@@ -1,11 +1,40 @@
|
|
|
1
|
-
import type { AdoptionFrame, ConnectionState, ScopeSeed } from './types.js';
|
|
1
|
+
import type { AdoptionFrame, ConnectionState, ScopeSeed, SignalHandle } from './types.js';
|
|
2
|
+
import type { SignalCandidateFrame } from './transition-candidate.js';
|
|
3
|
+
import type { ScopedNode } from './graph.js';
|
|
4
|
+
/** Explicit async reads own an observer edge instead of a synchronous graph edge. */
|
|
5
|
+
export declare const SIGNAL_DEPENDENT_NODE: unique symbol;
|
|
6
|
+
export type SignalDependencyNotify = (() => void) & {
|
|
7
|
+
[SIGNAL_DEPENDENT_NODE]?: ScopedNode;
|
|
8
|
+
};
|
|
9
|
+
/** Only presentation subscriptions participate; public subscribers are never replayed. */
|
|
10
|
+
export declare const NATIVE_TRANSITION_CONSUMER: unique symbol;
|
|
11
|
+
export interface NativeTransitionConsumer {
|
|
12
|
+
active(): boolean;
|
|
13
|
+
prepare(): void | NativeTransitionPresentation;
|
|
14
|
+
}
|
|
15
|
+
/** Prepared host work stays private until every participating presentation is ready. */
|
|
16
|
+
export interface NativeTransitionPresentation {
|
|
17
|
+
validate(): boolean;
|
|
18
|
+
commit(): void;
|
|
19
|
+
discard(): void;
|
|
20
|
+
}
|
|
21
|
+
export type NativeTransitionNotify = (() => void) & {
|
|
22
|
+
[NATIVE_TRANSITION_CONSUMER]?: NativeTransitionConsumer;
|
|
23
|
+
};
|
|
24
|
+
/** Preserve presentation identity when an owner or lifetime wraps a subscription. */
|
|
25
|
+
export declare function forwardNativeTransitionConsumer<T extends () => void>(notify: NativeTransitionNotify, wrapped: T): T;
|
|
26
|
+
/** Lazy renderer registration survives a reentrant synchronous input scope. */
|
|
27
|
+
export declare function registerNativeActionResolver(resolver: () => SignalCandidateFrame | undefined): void;
|
|
28
|
+
export declare function getNativeCandidate(): SignalCandidateFrame | undefined;
|
|
29
|
+
/** Restore before yielding; null suppresses even a newly registered Action resolver. */
|
|
30
|
+
export declare function setNativeCandidateResolver(resolver: (() => SignalCandidateFrame | undefined) | null | undefined): typeof resolver;
|
|
2
31
|
/** Detached DevTools metadata. Reading it must never evaluate or expose a value. */
|
|
3
32
|
export interface NativeReadInspection {
|
|
4
33
|
readonly scopeKey: string;
|
|
5
34
|
readonly key: string;
|
|
6
35
|
readonly read: 'value' | 'latest' | 'snapshot';
|
|
7
36
|
readonly kind: 'signal' | 'derived' | 'async';
|
|
8
|
-
readonly status: 'ready' | 'pending' | 'error' | 'unevaluated';
|
|
37
|
+
readonly status: 'idle' | 'ready' | 'pending' | 'error' | 'unevaluated';
|
|
9
38
|
readonly revision: number;
|
|
10
39
|
readonly generation?: number;
|
|
11
40
|
readonly epoch: number;
|
|
@@ -42,7 +71,7 @@ export interface NativeReadSource {
|
|
|
42
71
|
export type NativeReadObserver = (source: NativeReadSource, version: number) => void;
|
|
43
72
|
/** Private protocol implemented on native handles, never inferred from a get method. */
|
|
44
73
|
export declare const NATIVE_DOM_VALUE: unique symbol;
|
|
45
|
-
export declare function readNativeDomValue(value:
|
|
74
|
+
export declare function readNativeDomValue<T>(value: T): T extends SignalHandle<infer V> ? V : T;
|
|
46
75
|
/** Snapshot values so later writes can diff against the last applied style. */
|
|
47
76
|
export declare function readNativeDomStyle(value: any): any;
|
|
48
77
|
export declare function readNativeDomProps(props: Record<string, unknown>): Record<string, unknown>;
|
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
const SIGNAL_DEPENDENT_NODE = /* @__PURE__ */ Symbol("octane.signalDependent");
|
|
2
|
+
const NATIVE_TRANSITION_CONSUMER = /* @__PURE__ */ Symbol("octane.transitionConsumer");
|
|
3
|
+
function forwardNativeTransitionConsumer(notify, wrapped) {
|
|
4
|
+
const consumer = notify[NATIVE_TRANSITION_CONSUMER];
|
|
5
|
+
if (consumer) wrapped[NATIVE_TRANSITION_CONSUMER] = consumer;
|
|
6
|
+
return wrapped;
|
|
7
|
+
}
|
|
8
|
+
let nativeActionResolver;
|
|
9
|
+
let nativeCandidateResolver;
|
|
10
|
+
function registerNativeActionResolver(resolver) {
|
|
11
|
+
nativeActionResolver = resolver;
|
|
12
|
+
}
|
|
13
|
+
function getNativeCandidate() {
|
|
14
|
+
return nativeCandidateResolver === void 0 ? nativeActionResolver?.() : nativeCandidateResolver?.();
|
|
15
|
+
}
|
|
16
|
+
function setNativeCandidateResolver(resolver) {
|
|
17
|
+
const previous = nativeCandidateResolver;
|
|
18
|
+
nativeCandidateResolver = resolver;
|
|
19
|
+
return previous;
|
|
20
|
+
}
|
|
1
21
|
let nativeReadObserver = null;
|
|
2
22
|
let nativeWriteGuarded = false;
|
|
3
23
|
const NATIVE_DOM_VALUE = /* @__PURE__ */ Symbol("octane.nativeDomValue");
|
|
@@ -79,20 +99,26 @@ function isNativeWriteGuarded() {
|
|
|
79
99
|
}
|
|
80
100
|
export {
|
|
81
101
|
NATIVE_DOM_VALUE,
|
|
102
|
+
NATIVE_TRANSITION_CONSUMER,
|
|
82
103
|
NativeAdoptionMiss,
|
|
104
|
+
SIGNAL_DEPENDENT_NODE,
|
|
83
105
|
beginNativeBatch,
|
|
84
106
|
beginNativeWriteGuard,
|
|
85
107
|
endNativeBatch,
|
|
86
108
|
endNativeWriteGuard,
|
|
109
|
+
forwardNativeTransitionConsumer,
|
|
87
110
|
getNativeAdoptionResolver,
|
|
111
|
+
getNativeCandidate,
|
|
88
112
|
getNativeReadObserver,
|
|
89
113
|
isNativeWriteGuarded,
|
|
90
114
|
readNativeDomProps,
|
|
91
115
|
readNativeDomStyle,
|
|
92
116
|
readNativeDomValue,
|
|
117
|
+
registerNativeActionResolver,
|
|
93
118
|
registerNativeBatchHooks,
|
|
94
119
|
reportNativeRead,
|
|
95
120
|
runNativeBatch,
|
|
96
121
|
setNativeAdoptionResolver,
|
|
122
|
+
setNativeCandidateResolver,
|
|
97
123
|
setNativeReadObserver
|
|
98
124
|
};
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { ScopedNode, type GraphOwner, type NodeState } from './graph.js';
|
|
2
|
-
import
|
|
1
|
+
import { ScopedNode, type GraphOwner, type CandidateProducer, type NodeState } from './graph.js';
|
|
2
|
+
import { QUERY_REQUEST, skip, type Query, type QueryContext, type QueryRequest, type Resource, type Scope, type SignalSeedEntry } from './types.js';
|
|
3
|
+
import type { StreamFrameIdentity, StreamedSignalResultFrame } from '../streamed-signals-protocol.js';
|
|
4
|
+
import { type ServerSignalQueryAttemptObservations } from './query-attempt-observer.js';
|
|
3
5
|
export interface QueryDefinition {
|
|
4
6
|
readonly key: string;
|
|
5
7
|
readonly kind: 'promise' | 'stream';
|
|
@@ -8,10 +10,13 @@ export interface QueryDefinition {
|
|
|
8
10
|
interface RequestOwner extends GraphOwner {
|
|
9
11
|
readonly requests: Map<string, RequestEntry>;
|
|
10
12
|
readonly queryDefinitions: Map<string, QueryDefinition>;
|
|
13
|
+
readonly streamedSelections?: Map<string, StreamFrameIdentity>;
|
|
14
|
+
streamedSelectionReady?(binding: ResourceBinding): void;
|
|
15
|
+
discardCompletedStreamedSelection?(identity: StreamFrameIdentity): void;
|
|
11
16
|
}
|
|
12
17
|
declare class Request<T> implements QueryRequest<T> {
|
|
13
18
|
readonly definition: QueryDefinition;
|
|
14
|
-
|
|
19
|
+
get [QUERY_REQUEST](): T;
|
|
15
20
|
readonly queryKey: string;
|
|
16
21
|
readonly identity: string;
|
|
17
22
|
readonly argument: unknown;
|
|
@@ -23,11 +28,22 @@ export declare function query<A, T>(key: string, load: (argument: A, context: Qu
|
|
|
23
28
|
export declare function query<A, T>(key: string, load: (argument: A, context: QueryContext) => AsyncIterable<T> | PromiseLike<AsyncIterable<T>>, options: {
|
|
24
29
|
kind: 'stream';
|
|
25
30
|
}): Query<A, T>;
|
|
31
|
+
/**
|
|
32
|
+
* Create an eagerly selected, explicitly owned query resource. Keys are unique
|
|
33
|
+
* within the scope; separate resources may share one canonical query request.
|
|
34
|
+
* Native query$ declarations are the owner-optional authoring API.
|
|
35
|
+
*/
|
|
36
|
+
export declare function createResource<T>(owner: Scope, key: string, describe: () => QueryRequest<T> | typeof skip): Resource<T>;
|
|
26
37
|
interface Attempt {
|
|
27
38
|
entry: RequestEntry | undefined;
|
|
28
39
|
controller: AbortController | undefined;
|
|
29
40
|
iterator: AsyncIterator<unknown> | undefined;
|
|
30
41
|
readonly settled: Promise<void>;
|
|
42
|
+
readonly generation: number;
|
|
43
|
+
readonly streamed: boolean;
|
|
44
|
+
result: unknown;
|
|
45
|
+
observations: ServerSignalQueryAttemptObservations | undefined;
|
|
46
|
+
sequence: number;
|
|
31
47
|
resolve(): void;
|
|
32
48
|
hasYielded: boolean;
|
|
33
49
|
}
|
|
@@ -43,7 +59,11 @@ export declare class RequestEntry {
|
|
|
43
59
|
value: unknown;
|
|
44
60
|
});
|
|
45
61
|
get active(): boolean;
|
|
62
|
+
get attemptGeneration(): number;
|
|
63
|
+
observe(nodeKey: string): Attempt | undefined;
|
|
46
64
|
start(pending: boolean): void;
|
|
65
|
+
startStreamed(identity: StreamFrameIdentity): boolean;
|
|
66
|
+
acceptStreamed(frame: StreamedSignalResultFrame): boolean;
|
|
47
67
|
deliver(): void;
|
|
48
68
|
stopAttempt(): void;
|
|
49
69
|
remove(consumer: ResourceBinding): void;
|
|
@@ -52,14 +72,19 @@ export declare class ResourceBinding<T = any> {
|
|
|
52
72
|
readonly owner: RequestOwner;
|
|
53
73
|
readonly node: ScopedNode<T>;
|
|
54
74
|
private describe;
|
|
75
|
+
private candidate?;
|
|
55
76
|
private selected;
|
|
56
77
|
private selectedIdentity;
|
|
57
78
|
private retainedRequest;
|
|
58
79
|
private seeded;
|
|
59
80
|
private describedAttempt;
|
|
81
|
+
private observedAttempt;
|
|
82
|
+
private pendingObserver;
|
|
60
83
|
private pendingPromise;
|
|
61
84
|
private resolvePending;
|
|
62
|
-
|
|
85
|
+
private streamedSelection;
|
|
86
|
+
private selectionAuthority;
|
|
87
|
+
constructor(owner: RequestOwner, node: ScopedNode<T>, describe: (() => QueryRequest<T> | typeof skip) | undefined, seed?: {
|
|
63
88
|
entry: SignalSeedEntry;
|
|
64
89
|
value: unknown;
|
|
65
90
|
}, retained?: {
|
|
@@ -67,18 +92,26 @@ export declare class ResourceBinding<T = any> {
|
|
|
67
92
|
value: unknown;
|
|
68
93
|
} | undefined);
|
|
69
94
|
private request;
|
|
95
|
+
forkCandidate(target: ScopedNode<T>): CandidateProducer;
|
|
70
96
|
private compute;
|
|
71
97
|
private state;
|
|
72
98
|
deliver(): void;
|
|
73
99
|
private detach;
|
|
100
|
+
private observeSelectedAttempt;
|
|
101
|
+
get authority(): object | undefined;
|
|
102
|
+
isStreamedSelectionReady(identity: StreamFrameIdentity): boolean;
|
|
103
|
+
bindStreamedSelection(identity: StreamFrameIdentity): boolean;
|
|
104
|
+
acceptStreamed(frame: StreamedSignalResultFrame): boolean;
|
|
105
|
+
failStreamed(identity: StreamFrameIdentity, error: Error): boolean;
|
|
74
106
|
retry(options?: {
|
|
75
107
|
pending?: boolean;
|
|
76
108
|
}): void;
|
|
109
|
+
adopt(requestKey: string | undefined, value: T): boolean;
|
|
77
110
|
seedRequest(retained?: boolean): SignalSeedEntry['request'];
|
|
78
111
|
acceptsSeed(seed: SignalSeedEntry): boolean;
|
|
79
112
|
dispose(): void;
|
|
80
113
|
}
|
|
81
|
-
export declare function initializeResource<T>(owner: RequestOwner, node: ScopedNode<T>, describe: () => QueryRequest<T
|
|
114
|
+
export declare function initializeResource<T>(owner: RequestOwner, node: ScopedNode<T>, describe: () => QueryRequest<T> | typeof skip, seed?: {
|
|
82
115
|
entry: SignalSeedEntry;
|
|
83
116
|
value: unknown;
|
|
84
117
|
}, retained?: {
|