octane 0.2.11 → 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/context-epoch.cjs +38 -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-stage.cjs +896 -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 +24 -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 +9 -0
- package/dist/cjs/runtime.cjs +6397 -1683
- package/dist/cjs/runtime.server.cjs +1465 -213
- package/dist/cjs/server/early-signals.cjs +45 -0
- package/dist/cjs/server/index.cjs +47 -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 +166 -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 +54 -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/trusted-html.cjs +30 -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 +51 -22
- package/dist/compiler/compile.js +2534 -581
- 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 +759 -10
- package/dist/compiler/hydrate-boundaries.js +358 -15
- package/dist/compiler/index.d.ts +39 -2
- package/dist/compiler/index.js +1 -0
- package/dist/compiler/native-attribute-reads.js +127 -0
- package/dist/compiler/native-change-diagnostics.js +32 -38
- package/dist/compiler/native-read-diagnostics.js +69 -8
- package/dist/compiler/native-read-types.js +80 -34
- package/dist/compiler/parser.node.js +1 -1
- package/dist/compiler/renderer-boundaries.js +40 -0
- 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.d.ts +3 -1
- package/dist/compiler/slot-hooks.js +168 -34
- package/dist/compiler/strong-auto-memo.js +90 -0
- package/dist/compiler/strong-html.js +143 -0
- package/dist/compiler/strong-mode.js +764 -66
- package/dist/compiler/strong-template-policy.js +307 -0
- 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.LICENSES.txt +1 -1
- package/dist/compiler/volar.d.ts +6 -1
- package/dist/compiler/volar.js +750 -1433
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +10 -0
- package/dist/context-epoch.d.ts +2 -0
- package/dist/context-epoch.js +13 -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-stage.d.ts +52 -0
- package/dist/dom-stage.js +872 -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 +6 -0
- package/dist/error-codes.server.generated.js +24 -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 +3 -0
- package/dist/index.js +6 -0
- package/dist/internal/signal-read.d.ts +1 -0
- package/dist/internal/signal-read.js +4 -0
- package/dist/jsx-runtime-strong.d.ts +33 -0
- package/dist/jsx-runtime.d.ts +58 -2
- package/dist/public-types.d.ts +15 -1
- package/dist/runtime.d.ts +297 -23
- package/dist/runtime.js +6405 -1679
- package/dist/runtime.server.d.ts +110 -27
- package/dist/runtime.server.js +1458 -213
- package/dist/server/early-signals.d.ts +14 -0
- package/dist/server/early-signals.js +34 -0
- package/dist/server/index.d.ts +11 -2
- package/dist/server/index.js +50 -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 +52 -6
- package/dist/signals/graph.js +174 -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 +37 -2
- package/dist/signals/read-protocol.js +44 -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/trusted-html.d.ts +17 -0
- package/dist/trusted-html.js +6 -0
- package/dist/universal-core.d.ts +6 -0
- package/dist/universal-core.js +214 -202
- package/dist/version.js +1 -1
- package/package.json +48 -5
|
@@ -0,0 +1,368 @@
|
|
|
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 control_binding_exports = {};
|
|
20
|
+
__export(control_binding_exports, {
|
|
21
|
+
__createBindingControls: () => __createBindingControls,
|
|
22
|
+
bindSignalControl: () => bindSignalControl
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(control_binding_exports);
|
|
25
|
+
var import_control_capture = require("../hydration/control-capture.cjs");
|
|
26
|
+
var import_early_values = require("./early-values.cjs");
|
|
27
|
+
var import_handle_protocol = require("./handle-protocol.cjs");
|
|
28
|
+
var import_owner_context = require("./owner-context.cjs");
|
|
29
|
+
var import_read_protocol = require("./read-protocol.cjs");
|
|
30
|
+
var import_types = require("./types.cjs");
|
|
31
|
+
var import_transition_state = require("./transition-state.cjs");
|
|
32
|
+
const CONTROL_BINDINGS = /* @__PURE__ */ new WeakMap();
|
|
33
|
+
const RADIO_WRITERS = /* @__PURE__ */ new WeakMap();
|
|
34
|
+
function controlString(value) {
|
|
35
|
+
return typeof value === "string" ? value : typeof value === "function" || typeof value === "symbol" ? "" : String(value);
|
|
36
|
+
}
|
|
37
|
+
function publishRadioInput(input) {
|
|
38
|
+
const root = input.getRootNode();
|
|
39
|
+
const group = input.form !== null ? input.form.elements : root.nodeType === 9 ? root.getElementsByName(input.name) : root.querySelectorAll('input[type="radio"]');
|
|
40
|
+
const edits = [];
|
|
41
|
+
for (let index = 0; index < group.length; index++) {
|
|
42
|
+
const other = group[index];
|
|
43
|
+
if (other.localName !== "input" || other.type !== "radio" || other.name !== input.name || other.form !== input.form || other.getRootNode() !== root)
|
|
44
|
+
continue;
|
|
45
|
+
const write = RADIO_WRITERS.get(other);
|
|
46
|
+
if (write) edits.push([write, other.checked]);
|
|
47
|
+
}
|
|
48
|
+
for (const [write, checked] of edits) if (!checked) write(false);
|
|
49
|
+
for (const [write, checked] of edits) if (checked) write(true);
|
|
50
|
+
}
|
|
51
|
+
function __createBindingControls() {
|
|
52
|
+
const owner = (0, import_owner_context.currentSignalOwner)();
|
|
53
|
+
const run = owner === null ? (callback) => callback() : (0, import_owner_context.captureSignalOwner)(owner);
|
|
54
|
+
return {
|
|
55
|
+
claim(element, channel, notify) {
|
|
56
|
+
const control = element;
|
|
57
|
+
if (control?.nodeType !== 1 || channel !== "value" && channel !== "checked" || !["input", "textarea", "select"].includes(control.localName) || channel === "checked" && (control.localName !== "input" || !["checkbox", "radio"].includes(control.type)) || channel === "value" && control.localName === "input" && control.type === "file")
|
|
58
|
+
throw new TypeError(
|
|
59
|
+
"A signal control requires a native value/checked property and a signal."
|
|
60
|
+
);
|
|
61
|
+
if (CONTROL_BINDINGS.get(control)?.has(channel) || (0, import_early_values.hasHydrationControlSignalWriter)(control, channel))
|
|
62
|
+
throw new Error(
|
|
63
|
+
"This control property already has a signal binding. Dispose it before rebinding."
|
|
64
|
+
);
|
|
65
|
+
let channels = CONTROL_BINDINGS.get(control);
|
|
66
|
+
if (!channels) CONTROL_BINDINGS.set(control, channels = /* @__PURE__ */ new Set());
|
|
67
|
+
channels.add(channel);
|
|
68
|
+
let disposed = false;
|
|
69
|
+
let initialized = false;
|
|
70
|
+
let composing = false;
|
|
71
|
+
let raw;
|
|
72
|
+
let handle;
|
|
73
|
+
let active;
|
|
74
|
+
let unsubscribe;
|
|
75
|
+
let stopWriter;
|
|
76
|
+
let generation = 0;
|
|
77
|
+
let revision = 0;
|
|
78
|
+
const read = (value) => run(() => value[import_types.SIGNAL_BINDING_READ]());
|
|
79
|
+
const write = (value) => {
|
|
80
|
+
if (disposed || !(0, import_handle_protocol.isWritableSignal)(active)) return;
|
|
81
|
+
const writable = active;
|
|
82
|
+
(0, import_transition_state.withoutSignalCandidate)(
|
|
83
|
+
() => run(() => {
|
|
84
|
+
const previous = read(writable);
|
|
85
|
+
if (Object.is(previous, value) || Array.isArray(previous) && Array.isArray(value) && previous.length === value.length && previous.every((item, index) => item === value[index]))
|
|
86
|
+
return;
|
|
87
|
+
writable.set(value);
|
|
88
|
+
})
|
|
89
|
+
);
|
|
90
|
+
};
|
|
91
|
+
const nativeValue = () => {
|
|
92
|
+
const snapshot = (0, import_control_capture.snapshotHydrationControl)(control);
|
|
93
|
+
return channel === "checked" ? snapshot.checked : snapshot.selectedValues ?? snapshot.value;
|
|
94
|
+
};
|
|
95
|
+
const input = () => {
|
|
96
|
+
if (disposed) return;
|
|
97
|
+
if (channel === "checked" && control.type === "radio" && control.name !== "")
|
|
98
|
+
publishRadioInput(control);
|
|
99
|
+
else write(nativeValue());
|
|
100
|
+
};
|
|
101
|
+
const compositionStart = () => {
|
|
102
|
+
composing = true;
|
|
103
|
+
};
|
|
104
|
+
const compositionEnd = () => {
|
|
105
|
+
if (disposed) return;
|
|
106
|
+
composing = false;
|
|
107
|
+
input();
|
|
108
|
+
if (!disposed) notify();
|
|
109
|
+
};
|
|
110
|
+
const dispose = () => {
|
|
111
|
+
if (disposed) return;
|
|
112
|
+
disposed = true;
|
|
113
|
+
generation++;
|
|
114
|
+
raw = void 0;
|
|
115
|
+
active = handle = void 0;
|
|
116
|
+
if (channel === "checked") RADIO_WRITERS.delete(control);
|
|
117
|
+
let failed = false;
|
|
118
|
+
let failure;
|
|
119
|
+
const attempt = (stop2) => {
|
|
120
|
+
try {
|
|
121
|
+
stop2?.();
|
|
122
|
+
} catch (error) {
|
|
123
|
+
if (!failed) {
|
|
124
|
+
failed = true;
|
|
125
|
+
failure = error;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
const stop = unsubscribe;
|
|
130
|
+
unsubscribe = void 0;
|
|
131
|
+
attempt(stop);
|
|
132
|
+
attempt(stopWriter);
|
|
133
|
+
stopWriter = void 0;
|
|
134
|
+
control.removeEventListener("input", input);
|
|
135
|
+
control.removeEventListener("compositionstart", compositionStart);
|
|
136
|
+
control.removeEventListener("compositionend", compositionEnd);
|
|
137
|
+
channels.delete(channel);
|
|
138
|
+
if (channels.size === 0) CONTROL_BINDINGS.delete(control);
|
|
139
|
+
if (failed) throw failure;
|
|
140
|
+
};
|
|
141
|
+
const prepare = (next, preview = false) => {
|
|
142
|
+
if (disposed) return { validate: () => false, discard() {
|
|
143
|
+
}, publish() {
|
|
144
|
+
}, commit() {
|
|
145
|
+
} };
|
|
146
|
+
if ((0, import_handle_protocol.isSignalHandle)(next) && (typeof next[import_types.SIGNAL_BINDING_READ] !== "function" || typeof next[import_types.SIGNAL_BINDING_SUBSCRIBE] !== "function"))
|
|
147
|
+
throw new TypeError(
|
|
148
|
+
"A signal control requires a native value/checked property and a signal."
|
|
149
|
+
);
|
|
150
|
+
if (!preview && raw !== next) {
|
|
151
|
+
const ticket2 = ++generation;
|
|
152
|
+
const stop = unsubscribe;
|
|
153
|
+
unsubscribe = void 0;
|
|
154
|
+
handle = void 0;
|
|
155
|
+
stop?.();
|
|
156
|
+
if (disposed) return { validate: () => false, discard() {
|
|
157
|
+
}, publish() {
|
|
158
|
+
}, commit() {
|
|
159
|
+
} };
|
|
160
|
+
raw = next;
|
|
161
|
+
handle = (0, import_handle_protocol.isSignalHandle)(next) ? next : void 0;
|
|
162
|
+
if (handle) {
|
|
163
|
+
const candidate2 = handle;
|
|
164
|
+
const stopNext = run(
|
|
165
|
+
() => candidate2[import_types.SIGNAL_BINDING_SUBSCRIBE](
|
|
166
|
+
(0, import_read_protocol.forwardNativeTransitionConsumer)(notify, () => {
|
|
167
|
+
if (!disposed && generation === ticket2) {
|
|
168
|
+
revision++;
|
|
169
|
+
notify();
|
|
170
|
+
}
|
|
171
|
+
}),
|
|
172
|
+
() => {
|
|
173
|
+
if (!disposed && generation === ticket2) dispose();
|
|
174
|
+
}
|
|
175
|
+
)
|
|
176
|
+
);
|
|
177
|
+
if (typeof stopNext !== "function")
|
|
178
|
+
throw new TypeError("A signal control subscription must return cleanup.");
|
|
179
|
+
if (disposed || generation !== ticket2) stopNext();
|
|
180
|
+
else unsubscribe = stopNext;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (disposed) return { validate: () => false, discard() {
|
|
184
|
+
}, publish() {
|
|
185
|
+
}, commit() {
|
|
186
|
+
} };
|
|
187
|
+
const candidate = preview ? (0, import_handle_protocol.isSignalHandle)(next) ? next : void 0 : handle;
|
|
188
|
+
const value = candidate ? read(candidate) : next;
|
|
189
|
+
if (disposed) return { validate: () => false, discard() {
|
|
190
|
+
}, publish() {
|
|
191
|
+
}, commit() {
|
|
192
|
+
} };
|
|
193
|
+
const multiple = control.localName === "select" && control.multiple;
|
|
194
|
+
if (candidate && (channel === "checked" ? typeof value !== "boolean" : multiple ? !Array.isArray(value) : typeof value !== "string"))
|
|
195
|
+
throw new TypeError(
|
|
196
|
+
channel === "checked" ? "A checked signal must contain a boolean." : multiple ? "A multiple select signal must contain an array." : "A value signal must contain a string."
|
|
197
|
+
);
|
|
198
|
+
let selected;
|
|
199
|
+
if (multiple && Array.isArray(value)) {
|
|
200
|
+
selected = /* @__PURE__ */ new Set();
|
|
201
|
+
for (const item of value) selected.add(candidate ? item : controlString(item));
|
|
202
|
+
}
|
|
203
|
+
const normalized = channel === "checked" ? !!value : value == null || multiple ? "" : controlString(value);
|
|
204
|
+
let ticket = generation;
|
|
205
|
+
const version = revision;
|
|
206
|
+
let accepted = !preview;
|
|
207
|
+
let retired = false;
|
|
208
|
+
let invalid = false;
|
|
209
|
+
let staged = preview && candidate && candidate !== handle ? run(
|
|
210
|
+
() => candidate[import_types.SIGNAL_BINDING_SUBSCRIBE](
|
|
211
|
+
(0, import_read_protocol.forwardNativeTransitionConsumer)(notify, () => {
|
|
212
|
+
if (retired || disposed) return;
|
|
213
|
+
if (!accepted) invalid = true;
|
|
214
|
+
else if (generation === ticket) {
|
|
215
|
+
revision++;
|
|
216
|
+
notify();
|
|
217
|
+
}
|
|
218
|
+
}),
|
|
219
|
+
() => {
|
|
220
|
+
if (!accepted) invalid = true;
|
|
221
|
+
else if (!disposed && generation === ticket) dispose();
|
|
222
|
+
}
|
|
223
|
+
)
|
|
224
|
+
) : void 0;
|
|
225
|
+
const prepared = {
|
|
226
|
+
publish() {
|
|
227
|
+
if (retired || disposed || ticket !== generation) return;
|
|
228
|
+
if (!accepted) {
|
|
229
|
+
accepted = true;
|
|
230
|
+
if (raw !== next) {
|
|
231
|
+
const stop = unsubscribe;
|
|
232
|
+
ticket = ++generation;
|
|
233
|
+
raw = next;
|
|
234
|
+
handle = candidate;
|
|
235
|
+
unsubscribe = staged;
|
|
236
|
+
staged = void 0;
|
|
237
|
+
stop?.();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
active = candidate;
|
|
241
|
+
if ((0, import_handle_protocol.isWritableSignal)(active)) {
|
|
242
|
+
stopWriter ??= (0, import_early_values.registerHydrationControlSignalWriter)(
|
|
243
|
+
control,
|
|
244
|
+
channel,
|
|
245
|
+
channel === "checked" && control.type === "radio" ? input : write
|
|
246
|
+
);
|
|
247
|
+
if (channel === "checked" && control.type === "radio")
|
|
248
|
+
RADIO_WRITERS.set(control, write);
|
|
249
|
+
} else {
|
|
250
|
+
stopWriter?.();
|
|
251
|
+
stopWriter = void 0;
|
|
252
|
+
if (channel === "checked") RADIO_WRITERS.delete(control);
|
|
253
|
+
}
|
|
254
|
+
if (initialized) return;
|
|
255
|
+
(0, import_control_capture.initializeHydrationControlCapture)(control.ownerDocument);
|
|
256
|
+
control.addEventListener("input", input);
|
|
257
|
+
control.addEventListener("compositionstart", compositionStart);
|
|
258
|
+
control.addEventListener("compositionend", compositionEnd);
|
|
259
|
+
initialized = true;
|
|
260
|
+
if (!(0, import_handle_protocol.isWritableSignal)(active)) return;
|
|
261
|
+
let snapshot;
|
|
262
|
+
do {
|
|
263
|
+
snapshot = (0, import_control_capture.snapshotHydrationControl)(control);
|
|
264
|
+
if (snapshot.editRevision > 0 && (0, import_handle_protocol.isWritableSignal)(active)) write(nativeValue());
|
|
265
|
+
if (disposed) return;
|
|
266
|
+
} while (!(0, import_control_capture.consumeHydrationControl)(control, snapshot.revision));
|
|
267
|
+
},
|
|
268
|
+
commit() {
|
|
269
|
+
if (retired || disposed || value == null || multiple && selected === void 0 || ticket !== generation || version !== revision || active !== candidate || composing || (0, import_control_capture.snapshotHydrationControl)(control).composing)
|
|
270
|
+
return;
|
|
271
|
+
if (channel === "checked") {
|
|
272
|
+
if (control.checked !== normalized)
|
|
273
|
+
control.checked = normalized;
|
|
274
|
+
} else if (selected) {
|
|
275
|
+
for (const option of control.options) {
|
|
276
|
+
if (disposed) return;
|
|
277
|
+
const next2 = selected.has(option.value);
|
|
278
|
+
if (option.selected !== next2) option.selected = next2;
|
|
279
|
+
}
|
|
280
|
+
} else if (!candidate && control.localName === "input" && control.type === "number" ? (
|
|
281
|
+
// Preserve a user's "1.0" for sampled numeric 1, but show zero over an empty edit.
|
|
282
|
+
value === 0 && control.value === "" || control.value != value
|
|
283
|
+
) : control.value !== normalized)
|
|
284
|
+
control.value = normalized;
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
return preview ? Object.assign(prepared, {
|
|
288
|
+
validate: () => !retired && !invalid && !disposed && ticket === generation && version === revision,
|
|
289
|
+
discard() {
|
|
290
|
+
if (accepted || retired) return;
|
|
291
|
+
retired = true;
|
|
292
|
+
staged?.();
|
|
293
|
+
staged = void 0;
|
|
294
|
+
}
|
|
295
|
+
}) : prepared;
|
|
296
|
+
};
|
|
297
|
+
return {
|
|
298
|
+
prepare,
|
|
299
|
+
preview: (value) => prepare(value, true),
|
|
300
|
+
prepareCurrent: () => prepare(raw),
|
|
301
|
+
dispose
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
function bindSignalControl(control, channel, handle$) {
|
|
307
|
+
if (!(0, import_handle_protocol.isSignalHandle)(handle$))
|
|
308
|
+
throw new TypeError("A signal control requires a native value/checked property and a signal.");
|
|
309
|
+
let busy = false;
|
|
310
|
+
let dirty = false;
|
|
311
|
+
let disposed = false;
|
|
312
|
+
let lease;
|
|
313
|
+
const dispose = () => {
|
|
314
|
+
disposed = true;
|
|
315
|
+
lease.dispose();
|
|
316
|
+
};
|
|
317
|
+
const refresh = () => {
|
|
318
|
+
if (disposed) return;
|
|
319
|
+
dirty = true;
|
|
320
|
+
if (busy) return;
|
|
321
|
+
busy = true;
|
|
322
|
+
try {
|
|
323
|
+
while (dirty && !disposed) {
|
|
324
|
+
dirty = false;
|
|
325
|
+
const prepared = lease.prepare(handle$);
|
|
326
|
+
prepared.publish();
|
|
327
|
+
if (!dirty && !disposed) prepared.commit();
|
|
328
|
+
}
|
|
329
|
+
} catch (error) {
|
|
330
|
+
try {
|
|
331
|
+
dispose();
|
|
332
|
+
} catch {
|
|
333
|
+
}
|
|
334
|
+
throw error;
|
|
335
|
+
} finally {
|
|
336
|
+
busy = false;
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
refresh[import_read_protocol.NATIVE_TRANSITION_CONSUMER] = {
|
|
340
|
+
active: () => !disposed,
|
|
341
|
+
prepare: () => {
|
|
342
|
+
const prepared = lease.preview(handle$);
|
|
343
|
+
return {
|
|
344
|
+
validate: () => !disposed && !busy && prepared.validate(),
|
|
345
|
+
discard: prepared.discard,
|
|
346
|
+
commit() {
|
|
347
|
+
if (!disposed) {
|
|
348
|
+
busy = true;
|
|
349
|
+
try {
|
|
350
|
+
prepared.publish();
|
|
351
|
+
prepared.commit();
|
|
352
|
+
} finally {
|
|
353
|
+
busy = false;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
};
|
|
360
|
+
lease = __createBindingControls().claim(control, channel, refresh);
|
|
361
|
+
refresh();
|
|
362
|
+
return dispose;
|
|
363
|
+
}
|
|
364
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
365
|
+
0 && (module.exports = {
|
|
366
|
+
__createBindingControls,
|
|
367
|
+
bindSignalControl
|
|
368
|
+
});
|
|
@@ -0,0 +1,50 @@
|
|
|
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 derived_facade_exports = {};
|
|
20
|
+
__export(derived_facade_exports, {
|
|
21
|
+
__derivedAt: () => __derivedAt,
|
|
22
|
+
derived$: () => derived$
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(derived_facade_exports);
|
|
25
|
+
var import_computations = require("./computations.cjs");
|
|
26
|
+
var import_facade = require("./facade.cjs");
|
|
27
|
+
var import_owner_context = require("./owner-context.cjs");
|
|
28
|
+
function __derivedAt(site, compute, options) {
|
|
29
|
+
if (typeof compute !== "function") throw new TypeError("derived$ requires a function.");
|
|
30
|
+
const explicit = (0, import_facade.signalOptionsKey)(options);
|
|
31
|
+
site ??= explicit;
|
|
32
|
+
const key = (0, import_facade.descriptorKey)(site, explicit);
|
|
33
|
+
return new import_facade.DerivedDescriptor(
|
|
34
|
+
key,
|
|
35
|
+
"derived",
|
|
36
|
+
(owner) => {
|
|
37
|
+
const wrapped = compute.length ? (context) => (0, import_owner_context.runWithSignalOwner)(owner, () => compute(context)) : () => (0, import_owner_context.runWithSignalOwner)(owner, () => compute());
|
|
38
|
+
return (0, import_computations.createDeclaredDerivedCell)(owner, key, wrapped, options);
|
|
39
|
+
},
|
|
40
|
+
site
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
function derived$(compute, options) {
|
|
44
|
+
return __derivedAt(void 0, compute, options);
|
|
45
|
+
}
|
|
46
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
47
|
+
0 && (module.exports = {
|
|
48
|
+
__derivedAt,
|
|
49
|
+
derived$
|
|
50
|
+
});
|
|
@@ -0,0 +1,71 @@
|
|
|
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 document_owner_exports = {};
|
|
20
|
+
__export(document_owner_exports, {
|
|
21
|
+
documentSignalOwner: () => documentSignalOwner,
|
|
22
|
+
enableSignalDocument: () => enableSignalDocument,
|
|
23
|
+
installStreamedSignalOwnerActivator: () => installStreamedSignalOwnerActivator,
|
|
24
|
+
signalDocumentEnabled: () => signalDocumentEnabled,
|
|
25
|
+
streamedSignalOwnerActivator: () => streamedSignalOwnerActivator
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(document_owner_exports);
|
|
28
|
+
var import_error_codes_client_generated = require("../error-codes.client.generated.cjs");
|
|
29
|
+
var import_early_values = require("./early-values.cjs");
|
|
30
|
+
var import_owner_context = require("./owner-context.cjs");
|
|
31
|
+
const documentOwners = /* @__PURE__ */ new WeakMap();
|
|
32
|
+
let defaultInstalled = false;
|
|
33
|
+
let signalDocumentEnabled = false;
|
|
34
|
+
let streamedSignalOwnerActivator;
|
|
35
|
+
function documentSignalOwner(container) {
|
|
36
|
+
const ownerDocument = container.nodeType === 9 ? container : container.ownerDocument;
|
|
37
|
+
if (ownerDocument === null) throw new TypeError("A signal document owner requires a document.");
|
|
38
|
+
let owner = documentOwners.get(ownerDocument);
|
|
39
|
+
if (owner === void 0) {
|
|
40
|
+
owner = Object.freeze({ scopeKey: "octane:document" });
|
|
41
|
+
documentOwners.set(ownerDocument, owner);
|
|
42
|
+
}
|
|
43
|
+
(0, import_early_values.registerSignalOwnerDocument)(owner, ownerDocument);
|
|
44
|
+
return owner;
|
|
45
|
+
}
|
|
46
|
+
function enableSignalDocument(abi = 1) {
|
|
47
|
+
if (abi !== 1) throw new TypeError((0, import_error_codes_client_generated.formatClientError)(74));
|
|
48
|
+
signalDocumentEnabled = true;
|
|
49
|
+
if (defaultInstalled) return;
|
|
50
|
+
defaultInstalled = true;
|
|
51
|
+
(0, import_owner_context.installDefaultSignalOwner)(
|
|
52
|
+
() => typeof document === "undefined" ? null : documentSignalOwner(document)
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
function installStreamedSignalOwnerActivator(activate) {
|
|
56
|
+
if (streamedSignalOwnerActivator !== void 0) {
|
|
57
|
+
throw new Error("A streamed signal hydration owner is already installed.");
|
|
58
|
+
}
|
|
59
|
+
streamedSignalOwnerActivator = activate;
|
|
60
|
+
return () => {
|
|
61
|
+
if (streamedSignalOwnerActivator === activate) streamedSignalOwnerActivator = void 0;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
65
|
+
0 && (module.exports = {
|
|
66
|
+
documentSignalOwner,
|
|
67
|
+
enableSignalDocument,
|
|
68
|
+
installStreamedSignalOwnerActivator,
|
|
69
|
+
signalDocumentEnabled,
|
|
70
|
+
streamedSignalOwnerActivator
|
|
71
|
+
});
|
|
@@ -0,0 +1,155 @@
|
|
|
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 early_values_exports = {};
|
|
20
|
+
__export(early_values_exports, {
|
|
21
|
+
claimEarlyHydrationControlCapture: () => claimEarlyHydrationControlCapture,
|
|
22
|
+
clearEarlyHydrationControlRevision: () => clearEarlyHydrationControlRevision,
|
|
23
|
+
hasHydrationControlSignalWriter: () => hasHydrationControlSignalWriter,
|
|
24
|
+
publishHydrationControlSignalValues: () => publishHydrationControlSignalValues,
|
|
25
|
+
readEarlyHydrationControlRevision: () => readEarlyHydrationControlRevision,
|
|
26
|
+
readEarlySignalValue: () => readEarlySignalValue,
|
|
27
|
+
registerHydrationControlSignalWriter: () => registerHydrationControlSignalWriter,
|
|
28
|
+
registerSignalOwnerDocument: () => registerSignalOwnerDocument
|
|
29
|
+
});
|
|
30
|
+
module.exports = __toCommonJS(early_values_exports);
|
|
31
|
+
var import_hydration_markers = require("../hydration-markers.cjs");
|
|
32
|
+
const OWNER_DOCUMENTS = /* @__PURE__ */ new WeakMap();
|
|
33
|
+
const DOCUMENT_VALUES = /* @__PURE__ */ new WeakMap();
|
|
34
|
+
const CONTROL_WRITERS = /* @__PURE__ */ new WeakMap();
|
|
35
|
+
const EARLY_CONTROL_REVISIONS = /* @__PURE__ */ new WeakMap();
|
|
36
|
+
const CLAIMED_CONTROL_DOCUMENTS = /* @__PURE__ */ new WeakSet();
|
|
37
|
+
function rendererOwner(owner) {
|
|
38
|
+
return typeof owner === "object" && owner !== null && "documentOwner" in owner;
|
|
39
|
+
}
|
|
40
|
+
function ownerObject(owner) {
|
|
41
|
+
return rendererOwner(owner) ? owner.instanceOwner : owner;
|
|
42
|
+
}
|
|
43
|
+
function valueKey(ownerKey, instanceKey, nodeKey) {
|
|
44
|
+
return JSON.stringify([ownerKey, instanceKey, nodeKey]);
|
|
45
|
+
}
|
|
46
|
+
function registerSignalOwnerDocument(owner, ownerDocument) {
|
|
47
|
+
OWNER_DOCUMENTS.set(ownerObject(owner), ownerDocument);
|
|
48
|
+
if (rendererOwner(owner)) OWNER_DOCUMENTS.set(owner.documentOwner, ownerDocument);
|
|
49
|
+
}
|
|
50
|
+
function documentForOwner(owner) {
|
|
51
|
+
return OWNER_DOCUMENTS.get(ownerObject(owner));
|
|
52
|
+
}
|
|
53
|
+
function bindingKey(owner, binding) {
|
|
54
|
+
const ownerKey = rendererOwner(owner) ? owner.documentOwner.scopeKey : owner.scopeKey;
|
|
55
|
+
const instanceKey = binding.scope === "instance" && rendererOwner(owner) ? owner.instanceKey : "";
|
|
56
|
+
return valueKey(ownerKey, instanceKey, binding.nodeKey);
|
|
57
|
+
}
|
|
58
|
+
function readEarlySignalValue(owner, binding) {
|
|
59
|
+
const ownerDocument = documentForOwner(owner);
|
|
60
|
+
return ownerDocument === void 0 ? void 0 : DOCUMENT_VALUES.get(ownerDocument)?.get(bindingKey(owner, binding));
|
|
61
|
+
}
|
|
62
|
+
function parseControlBindings(control) {
|
|
63
|
+
const raw = control.getAttribute(import_hydration_markers.SIGNAL_CONTROL_ATTR);
|
|
64
|
+
if (raw === null) return null;
|
|
65
|
+
try {
|
|
66
|
+
const parsed = JSON.parse(raw);
|
|
67
|
+
if (!Array.isArray(parsed) || parsed.length !== 3 || parsed[0] !== 1) return null;
|
|
68
|
+
if (typeof parsed[1] !== "string" || !Array.isArray(parsed[2])) return null;
|
|
69
|
+
const bindings = [];
|
|
70
|
+
for (const entry of parsed[2]) {
|
|
71
|
+
if (!Array.isArray(entry) || entry.length !== 3 || typeof entry[0] !== "string" || typeof entry[1] !== "string" || entry[2] !== "value" && entry[2] !== "checked") {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
bindings.push(entry);
|
|
75
|
+
}
|
|
76
|
+
return { ownerKey: parsed[1], bindings };
|
|
77
|
+
} catch {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function controlValue(control, channel) {
|
|
82
|
+
if (channel === "checked") return control.checked;
|
|
83
|
+
if (control.localName === "select" && control.multiple) {
|
|
84
|
+
return Array.from(control.selectedOptions, (option) => option.value);
|
|
85
|
+
}
|
|
86
|
+
return control.value;
|
|
87
|
+
}
|
|
88
|
+
function publishHydrationControlSignalValues(control, revision) {
|
|
89
|
+
const metadata = parseControlBindings(control);
|
|
90
|
+
if (metadata !== null) {
|
|
91
|
+
let values = DOCUMENT_VALUES.get(control.ownerDocument);
|
|
92
|
+
if (values === void 0) DOCUMENT_VALUES.set(control.ownerDocument, values = /* @__PURE__ */ new Map());
|
|
93
|
+
for (const [instanceKey, nodeKey, channel] of metadata.bindings) {
|
|
94
|
+
const key = valueKey(metadata.ownerKey, instanceKey, nodeKey);
|
|
95
|
+
const previous = values.get(key);
|
|
96
|
+
if (CLAIMED_CONTROL_DOCUMENTS.has(control.ownerDocument) || previous === void 0 || revision >= previous.revision) {
|
|
97
|
+
values.set(key, { revision, value: controlValue(control, channel) });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const writers = CONTROL_WRITERS.get(control);
|
|
102
|
+
if (writers !== void 0) {
|
|
103
|
+
for (const [channel, write] of writers) write(controlValue(control, channel));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function registerHydrationControlSignalWriter(control, channel, write) {
|
|
107
|
+
let writers = CONTROL_WRITERS.get(control);
|
|
108
|
+
if (writers === void 0) CONTROL_WRITERS.set(control, writers = /* @__PURE__ */ new Map());
|
|
109
|
+
writers.set(channel, write);
|
|
110
|
+
return () => {
|
|
111
|
+
if (writers.get(channel) !== write) return;
|
|
112
|
+
writers.delete(channel);
|
|
113
|
+
if (writers.size === 0) CONTROL_WRITERS.delete(control);
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function hasHydrationControlSignalWriter(control, channel) {
|
|
117
|
+
return CONTROL_WRITERS.get(control)?.has(channel) ?? false;
|
|
118
|
+
}
|
|
119
|
+
function readEarlyHydrationControlRevision(control) {
|
|
120
|
+
return EARLY_CONTROL_REVISIONS.get(control) ?? 0;
|
|
121
|
+
}
|
|
122
|
+
function clearEarlyHydrationControlRevision(control) {
|
|
123
|
+
EARLY_CONTROL_REVISIONS.delete(control);
|
|
124
|
+
}
|
|
125
|
+
function claimEarlyHydrationControlCapture(ownerDocument) {
|
|
126
|
+
CLAIMED_CONTROL_DOCUMENTS.add(ownerDocument);
|
|
127
|
+
}
|
|
128
|
+
function publishEarlyHydrationControlSignalValues(control, revision) {
|
|
129
|
+
if (CLAIMED_CONTROL_DOCUMENTS.has(control.ownerDocument)) return;
|
|
130
|
+
EARLY_CONTROL_REVISIONS.set(control, revision);
|
|
131
|
+
publishHydrationControlSignalValues(control, revision);
|
|
132
|
+
}
|
|
133
|
+
if (typeof globalThis !== "undefined") {
|
|
134
|
+
const host = globalThis;
|
|
135
|
+
host.__octanePublishSignalControl = publishEarlyHydrationControlSignalValues;
|
|
136
|
+
const mailbox = host.__octaneEarlySignalControls;
|
|
137
|
+
if (mailbox !== void 0) {
|
|
138
|
+
mailbox.p = publishEarlyHydrationControlSignalValues;
|
|
139
|
+
const queued = mailbox.q.splice(0);
|
|
140
|
+
for (const [control, revision] of queued) {
|
|
141
|
+
publishEarlyHydrationControlSignalValues(control, revision);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
146
|
+
0 && (module.exports = {
|
|
147
|
+
claimEarlyHydrationControlCapture,
|
|
148
|
+
clearEarlyHydrationControlRevision,
|
|
149
|
+
hasHydrationControlSignalWriter,
|
|
150
|
+
publishHydrationControlSignalValues,
|
|
151
|
+
readEarlyHydrationControlRevision,
|
|
152
|
+
readEarlySignalValue,
|
|
153
|
+
registerHydrationControlSignalWriter,
|
|
154
|
+
registerSignalOwnerDocument
|
|
155
|
+
});
|