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,477 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var facade_exports = {};
|
|
20
|
+
__export(facade_exports, {
|
|
21
|
+
DerivedDescriptor: () => DerivedDescriptor,
|
|
22
|
+
Descriptor: () => Descriptor,
|
|
23
|
+
__derivedScalarAt: () => __derivedScalarAt,
|
|
24
|
+
__signalAt: () => __signalAt,
|
|
25
|
+
__startSignalReads: () => __startSignalReads,
|
|
26
|
+
acceptStreamedSignalResult: () => acceptStreamedSignalResult,
|
|
27
|
+
attachStreamedSignalResult: () => attachStreamedSignalResult,
|
|
28
|
+
bindStreamedSignalSelection: () => bindStreamedSignalSelection,
|
|
29
|
+
createSignalOwnerLifecycle: () => createSignalOwnerLifecycle,
|
|
30
|
+
descriptorKey: () => descriptorKey,
|
|
31
|
+
failStreamedSignalResult: () => failStreamedSignalResult,
|
|
32
|
+
initializeDocumentSignalOwner: () => initializeDocumentSignalOwner,
|
|
33
|
+
isSignalHandle: () => import_handle_protocol2.isSignalHandle,
|
|
34
|
+
isWritableSignal: () => import_handle_protocol2.isWritableSignal,
|
|
35
|
+
readSignalBinding: () => readSignalBinding,
|
|
36
|
+
resolveCurrentSignalHandle: () => resolveCurrentSignalHandle,
|
|
37
|
+
resolveSignalHandleForOwner: () => resolveSignalHandleForOwner,
|
|
38
|
+
resolveSignalHandleForScope: () => resolveSignalHandleForScope,
|
|
39
|
+
signal$: () => signal$,
|
|
40
|
+
signalOptionsKey: () => signalOptionsKey
|
|
41
|
+
});
|
|
42
|
+
module.exports = __toCommonJS(facade_exports);
|
|
43
|
+
var import_engine = require("./engine.cjs");
|
|
44
|
+
var import_scalar_computations = require("./scalar-computations.cjs");
|
|
45
|
+
var import_errors = require("./errors.cjs");
|
|
46
|
+
var import_graph = require("./graph.cjs");
|
|
47
|
+
var import_early_values = require("./early-values.cjs");
|
|
48
|
+
var import_read_protocol = require("./read-protocol.cjs");
|
|
49
|
+
var import_handle_protocol = require("./handle-protocol.cjs");
|
|
50
|
+
var import_handle_protocol2 = require("./handle-protocol.cjs");
|
|
51
|
+
var import_owner_context = require("./owner-context.cjs");
|
|
52
|
+
var import_types = require("./types.cjs");
|
|
53
|
+
const identityScopes = /* @__PURE__ */ new WeakMap();
|
|
54
|
+
const scopeOwners = /* @__PURE__ */ new WeakMap();
|
|
55
|
+
const retiredIdentities = /* @__PURE__ */ new WeakSet();
|
|
56
|
+
const documentInstances = /* @__PURE__ */ new WeakMap();
|
|
57
|
+
const instanceDocuments = /* @__PURE__ */ new WeakMap();
|
|
58
|
+
const frozenDocuments = /* @__PURE__ */ new WeakMap();
|
|
59
|
+
function isScope(owner) {
|
|
60
|
+
return typeof owner.signal$ === "function";
|
|
61
|
+
}
|
|
62
|
+
function isRendererOwner(owner) {
|
|
63
|
+
return "documentOwner" in owner && "instanceOwner" in owner && typeof owner.instanceKey === "string";
|
|
64
|
+
}
|
|
65
|
+
function resolveIdentity(identity, scopeKey, owner) {
|
|
66
|
+
if (retiredIdentities.has(identity)) throw new import_errors.ScopeDisposedError(scopeKey);
|
|
67
|
+
let scope = identityScopes.get(identity);
|
|
68
|
+
if (!scope) {
|
|
69
|
+
scope = (0, import_engine.createScope)({ scopeKey });
|
|
70
|
+
identityScopes.set(identity, scope);
|
|
71
|
+
scopeOwners.set(scope, owner);
|
|
72
|
+
const barrier = frozenDocuments.get(isRendererOwner(owner) ? owner.documentOwner : owner);
|
|
73
|
+
if (barrier !== void 0) scope.readBarrier = barrier;
|
|
74
|
+
}
|
|
75
|
+
return scope;
|
|
76
|
+
}
|
|
77
|
+
function initializeDocumentSignalOwner(owner, seed) {
|
|
78
|
+
if (isScope(owner) || isRendererOwner(owner)) {
|
|
79
|
+
throw new TypeError("Initial document signals require an implicit document owner.");
|
|
80
|
+
}
|
|
81
|
+
if (retiredIdentities.has(owner)) throw new import_errors.ScopeDisposedError(owner.scopeKey);
|
|
82
|
+
if (identityScopes.has(owner)) {
|
|
83
|
+
throw new Error(
|
|
84
|
+
"Initial document signals must be installed once, before any signal reads or writes."
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
const scope = (0, import_engine.createScope)({ scopeKey: owner.scopeKey, seed });
|
|
88
|
+
const barrier = frozenDocuments.get(owner);
|
|
89
|
+
if (barrier !== void 0) scope.readBarrier = barrier;
|
|
90
|
+
identityScopes.set(owner, scope);
|
|
91
|
+
scopeOwners.set(scope, owner);
|
|
92
|
+
}
|
|
93
|
+
function resolveOwner(owner) {
|
|
94
|
+
if (isScope(owner)) return owner;
|
|
95
|
+
if (isRendererOwner(owner)) {
|
|
96
|
+
if (!isScope(owner.documentOwner) && retiredIdentities.has(owner.documentOwner)) {
|
|
97
|
+
throw new import_errors.ScopeDisposedError(owner.documentOwner.scopeKey);
|
|
98
|
+
}
|
|
99
|
+
if (isScope(owner.documentOwner) && owner.documentOwner.retired) {
|
|
100
|
+
throw new import_errors.ScopeDisposedError(owner.documentOwner.scopeKey);
|
|
101
|
+
}
|
|
102
|
+
let instances = documentInstances.get(owner.documentOwner);
|
|
103
|
+
if (!instances) documentInstances.set(owner.documentOwner, instances = /* @__PURE__ */ new Set());
|
|
104
|
+
instances.add(owner.instanceOwner);
|
|
105
|
+
instanceDocuments.set(owner.instanceOwner, owner.documentOwner);
|
|
106
|
+
const documentKey = owner.documentOwner.scopeKey;
|
|
107
|
+
return resolveIdentity(
|
|
108
|
+
owner.instanceOwner,
|
|
109
|
+
`${documentKey}:instance:${owner.instanceKey}`,
|
|
110
|
+
owner
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
return resolveIdentity(owner, owner.scopeKey, owner);
|
|
114
|
+
}
|
|
115
|
+
function resolveDescriptorOwner(site, owner) {
|
|
116
|
+
if (isScope(owner)) owner = scopeOwners.get(owner) ?? owner;
|
|
117
|
+
if (!isRendererOwner(owner)) return resolveOwner(owner);
|
|
118
|
+
if (site?.startsWith("g:")) return resolveOwner(owner.documentOwner);
|
|
119
|
+
if (site?.startsWith("i:")) {
|
|
120
|
+
return resolveOwner(owner);
|
|
121
|
+
}
|
|
122
|
+
return resolveOwner(owner);
|
|
123
|
+
}
|
|
124
|
+
function existingIdentityScope(identity) {
|
|
125
|
+
if (retiredIdentities.has(identity)) return;
|
|
126
|
+
const scope = identityScopes.get(identity);
|
|
127
|
+
return scope?.retired ? void 0 : scope;
|
|
128
|
+
}
|
|
129
|
+
function streamedScope(owner, identity, create) {
|
|
130
|
+
if (isScope(owner)) {
|
|
131
|
+
return !owner.retired && identity.ownerKey === owner.scopeKey ? owner : void 0;
|
|
132
|
+
}
|
|
133
|
+
if (!isRendererOwner(owner)) return;
|
|
134
|
+
if (identity.ownerKey !== owner.documentOwner.scopeKey || identity.instanceKey !== owner.instanceKey || !identity.nodeKey.startsWith("g:") && !identity.nodeKey.startsWith("i:")) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const documentRetired = isScope(owner.documentOwner) ? owner.documentOwner.retired : retiredIdentities.has(owner.documentOwner);
|
|
138
|
+
if (documentRetired || retiredIdentities.has(owner.instanceOwner)) return;
|
|
139
|
+
const target = identity.nodeKey.startsWith("g:") ? owner.documentOwner : owner;
|
|
140
|
+
if (create) return resolveDescriptorOwner(identity.nodeKey, target);
|
|
141
|
+
if (isScope(target)) return target.retired ? void 0 : target;
|
|
142
|
+
return existingIdentityScope(isRendererOwner(target) ? target.instanceOwner : target);
|
|
143
|
+
}
|
|
144
|
+
(0, import_owner_context.installSignalOwnerRetirement)((owner) => {
|
|
145
|
+
if (isScope(owner)) return;
|
|
146
|
+
const identity = isRendererOwner(owner) ? owner.instanceOwner : owner;
|
|
147
|
+
if (isRendererOwner(owner)) {
|
|
148
|
+
const document = instanceDocuments.get(identity);
|
|
149
|
+
if (document) documentInstances.get(document)?.delete(identity);
|
|
150
|
+
instanceDocuments.delete(identity);
|
|
151
|
+
} else {
|
|
152
|
+
const instances = documentInstances.get(identity);
|
|
153
|
+
if (instances) {
|
|
154
|
+
for (const instance of instances) {
|
|
155
|
+
retiredIdentities.add(instance);
|
|
156
|
+
const instanceScope = identityScopes.get(instance);
|
|
157
|
+
if (instanceScope) {
|
|
158
|
+
identityScopes.delete(instance);
|
|
159
|
+
scopeOwners.delete(instanceScope);
|
|
160
|
+
instanceScope.dispose();
|
|
161
|
+
}
|
|
162
|
+
instanceDocuments.delete(instance);
|
|
163
|
+
}
|
|
164
|
+
documentInstances.delete(identity);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
retiredIdentities.add(identity);
|
|
168
|
+
const scope = identityScopes.get(identity);
|
|
169
|
+
if (!scope) return;
|
|
170
|
+
identityScopes.delete(identity);
|
|
171
|
+
scopeOwners.delete(scope);
|
|
172
|
+
scope.dispose();
|
|
173
|
+
});
|
|
174
|
+
function createSignalOwnerLifecycle(owner) {
|
|
175
|
+
if (isRendererOwner(owner))
|
|
176
|
+
throw new TypeError("A document lifecycle requires its document owner.");
|
|
177
|
+
let barrier;
|
|
178
|
+
let release;
|
|
179
|
+
let disposed = false;
|
|
180
|
+
const scopes = () => {
|
|
181
|
+
const result = [];
|
|
182
|
+
const scope = isScope(owner) ? owner : existingIdentityScope(owner);
|
|
183
|
+
if (scope instanceof import_engine.ScopeImpl && !scope.retired) result.push(scope);
|
|
184
|
+
for (const instance of documentInstances.get(owner) ?? []) {
|
|
185
|
+
const scope2 = existingIdentityScope(instance);
|
|
186
|
+
if (scope2 instanceof import_engine.ScopeImpl) result.push(scope2);
|
|
187
|
+
}
|
|
188
|
+
return result;
|
|
189
|
+
};
|
|
190
|
+
return {
|
|
191
|
+
get retired() {
|
|
192
|
+
return disposed || (isScope(owner) ? owner.retired : retiredIdentities.has(owner));
|
|
193
|
+
},
|
|
194
|
+
freeze() {
|
|
195
|
+
if (this.retired || barrier !== void 0) return;
|
|
196
|
+
barrier = new Promise((resolve) => {
|
|
197
|
+
release = resolve;
|
|
198
|
+
});
|
|
199
|
+
frozenDocuments.set(owner, barrier);
|
|
200
|
+
const existing = scopes();
|
|
201
|
+
for (const scope of existing) scope.readBarrier = barrier;
|
|
202
|
+
for (const scope of existing) scope.suspendReads();
|
|
203
|
+
},
|
|
204
|
+
resume() {
|
|
205
|
+
if (this.retired || barrier === void 0) return;
|
|
206
|
+
const existing = scopes();
|
|
207
|
+
barrier = void 0;
|
|
208
|
+
frozenDocuments.delete(owner);
|
|
209
|
+
for (const scope of existing) scope.readBarrier = void 0;
|
|
210
|
+
release?.();
|
|
211
|
+
release = void 0;
|
|
212
|
+
for (const scope of existing) {
|
|
213
|
+
if (barrier !== void 0 || this.retired) break;
|
|
214
|
+
scope.resumeReads();
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
retire() {
|
|
218
|
+
if (disposed) return;
|
|
219
|
+
disposed = true;
|
|
220
|
+
frozenDocuments.delete(owner);
|
|
221
|
+
const existing = scopes();
|
|
222
|
+
for (const instance of documentInstances.get(owner) ?? []) retiredIdentities.add(instance);
|
|
223
|
+
retiredIdentities.add(owner);
|
|
224
|
+
for (const scope of existing) scope.dispose();
|
|
225
|
+
documentInstances.delete(owner);
|
|
226
|
+
release?.();
|
|
227
|
+
release = void 0;
|
|
228
|
+
barrier = void 0;
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
function requireOwner() {
|
|
233
|
+
const owner = (0, import_owner_context.currentSignalOwner)();
|
|
234
|
+
if (!owner) {
|
|
235
|
+
throw new Error(
|
|
236
|
+
"A module signal needs an active signal owner. Render it in an Octane root or use runWithSignalOwner()."
|
|
237
|
+
);
|
|
238
|
+
}
|
|
239
|
+
return owner;
|
|
240
|
+
}
|
|
241
|
+
function resolveCurrentSignalHandle(handle$) {
|
|
242
|
+
return resolveSignalHandleForOwner(handle$, requireOwner());
|
|
243
|
+
}
|
|
244
|
+
function resolveSignalHandleForOwner(handle$, owner) {
|
|
245
|
+
return resolveSignalHandleForScope(handle$, resolveOwner(owner));
|
|
246
|
+
}
|
|
247
|
+
function resolveSignalHandleForScope(handle$, owner) {
|
|
248
|
+
return import_types.SIGNAL_OWNER_RESOLVE in handle$ ? handle$[import_types.SIGNAL_OWNER_RESOLVE](owner) : handle$;
|
|
249
|
+
}
|
|
250
|
+
function requireSite(site) {
|
|
251
|
+
if (site) return site;
|
|
252
|
+
throw new Error(
|
|
253
|
+
"Module signal identity is assigned by the Octane compiler. Use an explicit key outside compiled code."
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
class Descriptor {
|
|
257
|
+
constructor(key, kind, create, site) {
|
|
258
|
+
this.key = key;
|
|
259
|
+
this.kind = kind;
|
|
260
|
+
this.create = create;
|
|
261
|
+
this.site = site;
|
|
262
|
+
}
|
|
263
|
+
key;
|
|
264
|
+
kind;
|
|
265
|
+
create;
|
|
266
|
+
site;
|
|
267
|
+
[import_types.SIGNAL_HANDLE] = true;
|
|
268
|
+
cells = /* @__PURE__ */ new WeakMap();
|
|
269
|
+
[import_types.SIGNAL_OWNER_RESOLVE](owner) {
|
|
270
|
+
requireSite(this.site);
|
|
271
|
+
return this.resolvedCell(resolveDescriptorOwner(this.site, owner));
|
|
272
|
+
}
|
|
273
|
+
resolvedCell(target) {
|
|
274
|
+
let cell = this.cells.get(target);
|
|
275
|
+
if (!cell) {
|
|
276
|
+
cell = this.create(target);
|
|
277
|
+
this.cells.set(target, cell);
|
|
278
|
+
}
|
|
279
|
+
return cell;
|
|
280
|
+
}
|
|
281
|
+
resolve() {
|
|
282
|
+
const token = requireOwner();
|
|
283
|
+
const owner = resolveDescriptorOwner(this.site, token);
|
|
284
|
+
requireSite(this.site);
|
|
285
|
+
return this.resolvedCell(owner);
|
|
286
|
+
}
|
|
287
|
+
get() {
|
|
288
|
+
return this.resolve().get();
|
|
289
|
+
}
|
|
290
|
+
[import_read_protocol.NATIVE_DOM_VALUE]() {
|
|
291
|
+
return this.get();
|
|
292
|
+
}
|
|
293
|
+
[import_types.SIGNAL_BINDING_READ]() {
|
|
294
|
+
return (0, import_graph.readSignalBinding)(this.resolve());
|
|
295
|
+
}
|
|
296
|
+
[import_types.SIGNAL_BINDING_SUBSCRIBE](notify, onRetire) {
|
|
297
|
+
const run = (0, import_owner_context.captureSignalOwner)(requireOwner());
|
|
298
|
+
return this.resolve()[import_types.SIGNAL_BINDING_SUBSCRIBE](
|
|
299
|
+
(0, import_read_protocol.forwardNativeTransitionConsumer)(notify, () => run(notify)),
|
|
300
|
+
onRetire === void 0 ? void 0 : () => run(onRetire)
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
[import_types.SIGNAL_BINDING_IDENTITY]() {
|
|
304
|
+
return {
|
|
305
|
+
scope: this.site?.startsWith("g:") ? "document" : "instance",
|
|
306
|
+
nodeKey: this.key
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
latest(fallback) {
|
|
310
|
+
return this.resolve().latest(fallback);
|
|
311
|
+
}
|
|
312
|
+
snapshot() {
|
|
313
|
+
return this.resolve().snapshot();
|
|
314
|
+
}
|
|
315
|
+
subscribe(notify) {
|
|
316
|
+
const token = requireOwner();
|
|
317
|
+
const scope = resolveDescriptorOwner(this.site, token);
|
|
318
|
+
const run = (0, import_owner_context.captureSignalOwner)(token);
|
|
319
|
+
return this[import_types.SIGNAL_OWNER_RESOLVE](scope).subscribe(
|
|
320
|
+
(0, import_read_protocol.forwardNativeTransitionConsumer)(notify, () => run(notify))
|
|
321
|
+
);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
class SignalDescriptor extends Descriptor {
|
|
325
|
+
set(value) {
|
|
326
|
+
this.resolve().set(value);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
class DerivedDescriptor extends Descriptor {
|
|
330
|
+
}
|
|
331
|
+
function descriptorKey(site, explicit) {
|
|
332
|
+
const key = explicit ?? site;
|
|
333
|
+
if (typeof key !== "string" || !key.trim()) return "<compiler-assigned-signal>";
|
|
334
|
+
return key;
|
|
335
|
+
}
|
|
336
|
+
function signalOptionsKey(options) {
|
|
337
|
+
if (options != null && typeof options !== "object") {
|
|
338
|
+
throw new TypeError("Signal declaration options must be an object.");
|
|
339
|
+
}
|
|
340
|
+
const key = options?.key;
|
|
341
|
+
if (key !== void 0 && (typeof key !== "string" || !key.trim())) {
|
|
342
|
+
throw new TypeError("A signal declaration key must be a nonempty string.");
|
|
343
|
+
}
|
|
344
|
+
return key;
|
|
345
|
+
}
|
|
346
|
+
function __signalAt(site, initial, options) {
|
|
347
|
+
const explicit = signalOptionsKey(options);
|
|
348
|
+
site ??= explicit;
|
|
349
|
+
const key = descriptorKey(site, explicit);
|
|
350
|
+
return new SignalDescriptor(
|
|
351
|
+
key,
|
|
352
|
+
"signal",
|
|
353
|
+
(owner) => {
|
|
354
|
+
const early = (0, import_early_values.readEarlySignalValue)(scopeOwners.get(owner) ?? owner, {
|
|
355
|
+
scope: site?.startsWith("g:") ? "document" : "instance",
|
|
356
|
+
nodeKey: key
|
|
357
|
+
});
|
|
358
|
+
return (0, import_engine.createDeclaredSignalCell)(
|
|
359
|
+
owner,
|
|
360
|
+
key,
|
|
361
|
+
early === void 0 ? initial : early.value,
|
|
362
|
+
early !== void 0
|
|
363
|
+
);
|
|
364
|
+
},
|
|
365
|
+
site
|
|
366
|
+
);
|
|
367
|
+
}
|
|
368
|
+
function signal$(initial, options) {
|
|
369
|
+
return __signalAt(void 0, initial, options);
|
|
370
|
+
}
|
|
371
|
+
function __derivedScalarAt(site, compute, options) {
|
|
372
|
+
if (typeof compute !== "function") throw new TypeError("derived$ requires a function.");
|
|
373
|
+
const explicit = signalOptionsKey(options);
|
|
374
|
+
site ??= explicit;
|
|
375
|
+
const key = descriptorKey(site, explicit);
|
|
376
|
+
return new DerivedDescriptor(
|
|
377
|
+
key,
|
|
378
|
+
"derived",
|
|
379
|
+
(owner) => (0, import_scalar_computations.createDeclaredScalarCell)(
|
|
380
|
+
owner,
|
|
381
|
+
key,
|
|
382
|
+
() => (0, import_owner_context.runWithSignalOwner)(owner, () => compute())
|
|
383
|
+
),
|
|
384
|
+
site
|
|
385
|
+
);
|
|
386
|
+
}
|
|
387
|
+
function readSignalBinding(handle$) {
|
|
388
|
+
if (!(0, import_handle_protocol.isSignalHandle)(handle$)) throw new TypeError("A signal binding requires a signal handle.");
|
|
389
|
+
return handle$[import_types.SIGNAL_BINDING_READ]();
|
|
390
|
+
}
|
|
391
|
+
function __startSignalReads(handles, primitive = false) {
|
|
392
|
+
(0, import_graph.untrack)(() => {
|
|
393
|
+
for (const handle of handles) {
|
|
394
|
+
try {
|
|
395
|
+
const value = handle[import_types.SIGNAL_BINDING_READ]();
|
|
396
|
+
if (primitive && value != null && (typeof value === "object" || typeof value === "function" || typeof value === "symbol"))
|
|
397
|
+
break;
|
|
398
|
+
} catch (error) {
|
|
399
|
+
if (!(0, import_graph.isThenable)(error)) break;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
function bindStreamedSignalSelection(owner, identity) {
|
|
405
|
+
const scope = streamedScope(owner, identity, true);
|
|
406
|
+
return scope ? (0, import_engine.bindScopeStreamedSelection)(scope, identity) : false;
|
|
407
|
+
}
|
|
408
|
+
function acceptStreamedSignalResult(owner, frame) {
|
|
409
|
+
const scope = streamedScope(owner, frame.identity, false);
|
|
410
|
+
return scope ? (0, import_engine.acceptScopeStreamedResult)(scope, frame) : false;
|
|
411
|
+
}
|
|
412
|
+
function failStreamedSignalResult(owner, identity, code) {
|
|
413
|
+
const scope = streamedScope(owner, identity, false);
|
|
414
|
+
return scope ? (0, import_engine.failScopeStreamedResult)(scope, identity, new import_errors.SignalStreamError(code)) : false;
|
|
415
|
+
}
|
|
416
|
+
function receiverErrorCode(error) {
|
|
417
|
+
if (error && (typeof error === "object" || typeof error === "function") && typeof error.code === "string") {
|
|
418
|
+
return error.code;
|
|
419
|
+
}
|
|
420
|
+
return "receiver";
|
|
421
|
+
}
|
|
422
|
+
function attachStreamedSignalResult(receiver, owner, identity) {
|
|
423
|
+
const scope = streamedScope(owner, identity, true);
|
|
424
|
+
if (!(scope instanceof import_engine.ScopeImpl) || !scope.bindStreamedSelection(identity))
|
|
425
|
+
throw new import_errors.SignalStreamError("identity");
|
|
426
|
+
const fail = (error) => {
|
|
427
|
+
failStreamedSignalResult(owner, identity, receiverErrorCode(error));
|
|
428
|
+
};
|
|
429
|
+
const consumer = {
|
|
430
|
+
accept(frame) {
|
|
431
|
+
if (acceptStreamedSignalResult(owner, frame)) return;
|
|
432
|
+
if (scope.isStreamedSelectionPending(frame.identity)) return false;
|
|
433
|
+
fail(new import_errors.SignalStreamError("identity"));
|
|
434
|
+
throw new import_errors.SignalStreamError("identity");
|
|
435
|
+
},
|
|
436
|
+
retainCompleted(frames) {
|
|
437
|
+
return scope.retainCompletedStreamedResult(identity, frames);
|
|
438
|
+
},
|
|
439
|
+
fail
|
|
440
|
+
};
|
|
441
|
+
try {
|
|
442
|
+
let detach = receiver.attachResult(identity, consumer);
|
|
443
|
+
const stopWaiting = scope.whenStreamedSelectionReady(identity, () => {
|
|
444
|
+
detach = receiver.attachResult(identity, consumer);
|
|
445
|
+
});
|
|
446
|
+
return () => {
|
|
447
|
+
stopWaiting();
|
|
448
|
+
detach();
|
|
449
|
+
};
|
|
450
|
+
} catch (error) {
|
|
451
|
+
fail(error);
|
|
452
|
+
throw error;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
456
|
+
0 && (module.exports = {
|
|
457
|
+
DerivedDescriptor,
|
|
458
|
+
Descriptor,
|
|
459
|
+
__derivedScalarAt,
|
|
460
|
+
__signalAt,
|
|
461
|
+
__startSignalReads,
|
|
462
|
+
acceptStreamedSignalResult,
|
|
463
|
+
attachStreamedSignalResult,
|
|
464
|
+
bindStreamedSignalSelection,
|
|
465
|
+
createSignalOwnerLifecycle,
|
|
466
|
+
descriptorKey,
|
|
467
|
+
failStreamedSignalResult,
|
|
468
|
+
initializeDocumentSignalOwner,
|
|
469
|
+
isSignalHandle,
|
|
470
|
+
isWritableSignal,
|
|
471
|
+
readSignalBinding,
|
|
472
|
+
resolveCurrentSignalHandle,
|
|
473
|
+
resolveSignalHandleForOwner,
|
|
474
|
+
resolveSignalHandleForScope,
|
|
475
|
+
signal$,
|
|
476
|
+
signalOptionsKey
|
|
477
|
+
});
|