dommy 0.15.0 → 0.17.0

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.
Files changed (207) hide show
  1. checksums.yaml +4 -4
  2. data/lib/dommy/animation.rb +1 -0
  3. data/lib/dommy/backend.rb +19 -15
  4. data/lib/dommy/blob.rb +23 -0
  5. data/lib/dommy/bridge/values.rb +29 -2
  6. data/lib/dommy/bridge/wire_tags.rb +8 -4
  7. data/lib/dommy/browser.rb +335 -52
  8. data/lib/dommy/character_data.rb +21 -40
  9. data/lib/dommy/class_list.rb +24 -9
  10. data/lib/dommy/cookie_jar.rb +408 -0
  11. data/lib/dommy/cookie_store.rb +105 -49
  12. data/lib/dommy/css.rb +34 -8
  13. data/lib/dommy/custom_elements.rb +362 -114
  14. data/lib/dommy/data_transfer.rb +22 -2
  15. data/lib/dommy/document.rb +1114 -206
  16. data/lib/dommy/dom_exception.rb +6 -0
  17. data/lib/dommy/dom_parser.rb +46 -14
  18. data/lib/dommy/dom_string_list.rb +36 -0
  19. data/lib/dommy/element.rb +228 -102
  20. data/lib/dommy/element_internals.rb +227 -0
  21. data/lib/dommy/encodings/legacy_multibyte.rb +800 -0
  22. data/lib/dommy/encodings/multibyte_overrides.rb +76 -0
  23. data/lib/dommy/encodings/prescan.rb +234 -0
  24. data/lib/dommy/encodings.rb +126 -52
  25. data/lib/dommy/event.rb +472 -163
  26. data/lib/dommy/event_source.rb +5 -30
  27. data/lib/dommy/fetch.rb +244 -53
  28. data/lib/dommy/file_reader.rb +6 -29
  29. data/lib/dommy/form_data.rb +62 -15
  30. data/lib/dommy/form_entry_list.rb +108 -139
  31. data/lib/dommy/fragment.rb +11 -10
  32. data/lib/dommy/history.rb +247 -90
  33. data/lib/dommy/html_canvas_element.rb +95 -42
  34. data/lib/dommy/html_collection.rb +49 -30
  35. data/lib/dommy/html_elements/base.rb +112 -69
  36. data/lib/dommy/html_elements/embedded.rb +349 -105
  37. data/lib/dommy/html_elements/forms/form.rb +407 -368
  38. data/lib/dommy/html_elements/forms/input.rb +336 -174
  39. data/lib/dommy/html_elements/forms/select.rb +90 -74
  40. data/lib/dommy/html_elements/interactive.rb +329 -111
  41. data/lib/dommy/html_elements/media.rb +71 -30
  42. data/lib/dommy/html_elements/metadata.rb +238 -71
  43. data/lib/dommy/html_elements/miscellaneous.rb +58 -14
  44. data/lib/dommy/html_elements/tables.rb +7 -9
  45. data/lib/dommy/html_elements.rb +23 -1
  46. data/lib/dommy/hyperlink_utils.rb +15 -4
  47. data/lib/dommy/interaction/drag_and_drop.rb +187 -0
  48. data/lib/dommy/interaction/event_synthesis.rb +182 -24
  49. data/lib/dommy/interaction/field_interactor.rb +17 -5
  50. data/lib/dommy/interaction/form_submission.rb +31 -43
  51. data/lib/dommy/interaction/key_sender.rb +101 -16
  52. data/lib/dommy/interaction.rb +1 -0
  53. data/lib/dommy/internal/accessibility_tree.rb +149 -150
  54. data/lib/dommy/internal/accessibility_visibility.rb +16 -17
  55. data/lib/dommy/internal/accessible_description.rb +1 -1
  56. data/lib/dommy/internal/accessible_name.rb +231 -253
  57. data/lib/dommy/internal/aria_role.rb +182 -195
  58. data/lib/dommy/internal/aria_snapshot.rb +35 -38
  59. data/lib/dommy/internal/aria_state.rb +102 -118
  60. data/lib/dommy/internal/autofill.rb +75 -75
  61. data/lib/dommy/internal/backend_prefilter.rb +126 -133
  62. data/lib/dommy/internal/ce_reactions.rb +285 -0
  63. data/lib/dommy/internal/ce_reactions_table.rb +296 -0
  64. data/lib/dommy/internal/child_list.rb +7 -43
  65. data/lib/dommy/internal/child_navigable.rb +158 -0
  66. data/lib/dommy/internal/child_node.rb +44 -41
  67. data/lib/dommy/internal/close_watcher_manager.rb +239 -0
  68. data/lib/dommy/internal/complex_match.rb +3 -1
  69. data/lib/dommy/internal/constraint_validation.rb +130 -0
  70. data/lib/dommy/internal/css/ancestor_filter.rb +107 -0
  71. data/lib/dommy/internal/css/calc.rb +90 -71
  72. data/lib/dommy/internal/css/cascade.rb +72 -70
  73. data/lib/dommy/internal/css/cascaded_declarations.rb +4 -1
  74. data/lib/dommy/internal/css/color.rb +249 -187
  75. data/lib/dommy/internal/css/computed_style_builder.rb +43 -3
  76. data/lib/dommy/internal/css/computed_style_declaration.rb +50 -11
  77. data/lib/dommy/internal/css/counters.rb +67 -67
  78. data/lib/dommy/internal/css/custom_properties.rb +115 -103
  79. data/lib/dommy/internal/css/parser.rb +273 -257
  80. data/lib/dommy/internal/css/property_registry.rb +321 -302
  81. data/lib/dommy/internal/css/renderability.rb +39 -31
  82. data/lib/dommy/internal/css/rule_index.rb +151 -100
  83. data/lib/dommy/internal/css/rule_index_inputs.rb +135 -0
  84. data/lib/dommy/internal/css/selector_dependencies.rb +8 -2
  85. data/lib/dommy/internal/css/style_cache.rb +7 -4
  86. data/lib/dommy/internal/css/supports.rb +115 -113
  87. data/lib/dommy/internal/css/ua_stylesheet.rb +60 -24
  88. data/lib/dommy/internal/css_rule_text.rb +121 -119
  89. data/lib/dommy/internal/css_source.rb +1 -3
  90. data/lib/dommy/internal/css_syntax.rb +157 -92
  91. data/lib/dommy/internal/declarative_shadow_roots.rb +183 -0
  92. data/lib/dommy/internal/directionality.rb +120 -123
  93. data/lib/dommy/internal/document_generations.rb +55 -2
  94. data/lib/dommy/internal/document_interaction_state.rb +293 -9
  95. data/lib/dommy/internal/document_live_ranges.rb +26 -1
  96. data/lib/dommy/internal/dom_matching.rb +185 -184
  97. data/lib/dommy/internal/element_aria.rb +25 -19
  98. data/lib/dommy/internal/element_geometry.rb +8 -1
  99. data/lib/dommy/internal/element_matching.rb +71 -69
  100. data/lib/dommy/internal/element_popover.rb +226 -25
  101. data/lib/dommy/internal/element_shadow.rb +98 -39
  102. data/lib/dommy/internal/element_state.rb +264 -181
  103. data/lib/dommy/internal/element_top_layer.rb +15 -1
  104. data/lib/dommy/internal/enumerated_keyword_sets.rb +40 -0
  105. data/lib/dommy/internal/event_handler_tables.rb +241 -0
  106. data/lib/dommy/internal/event_handlers.rb +151 -0
  107. data/lib/dommy/internal/exception_report.rb +89 -87
  108. data/lib/dommy/internal/focusability.rb +267 -0
  109. data/lib/dommy/internal/form_associated_custom_elements.rb +127 -0
  110. data/lib/dommy/internal/global_functions.rb +49 -47
  111. data/lib/dommy/internal/html_or_svg_or_mathml_element.rb +34 -23
  112. data/lib/dommy/internal/html_serialization.rb +292 -0
  113. data/lib/dommy/internal/idl_reflection.rb +204 -0
  114. data/lib/dommy/internal/idl_reflection_table.rb +589 -0
  115. data/lib/dommy/internal/infra.rb +9 -0
  116. data/lib/dommy/internal/input_type.rb +76 -18
  117. data/lib/dommy/internal/insertion_point.rb +27 -3
  118. data/lib/dommy/internal/js_number.rb +62 -0
  119. data/lib/dommy/internal/light_dismiss.rb +176 -0
  120. data/lib/dommy/internal/literal_lookup.rb +75 -75
  121. data/lib/dommy/internal/mime_type.rb +55 -42
  122. data/lib/dommy/internal/mutation_coordinator.rb +140 -62
  123. data/lib/dommy/internal/mutation_observer_microtask.rb +60 -0
  124. data/lib/dommy/internal/namespaces.rb +51 -49
  125. data/lib/dommy/internal/node_adopter.rb +77 -5
  126. data/lib/dommy/internal/node_equality.rb +61 -59
  127. data/lib/dommy/internal/node_factory.rb +111 -7
  128. data/lib/dommy/internal/node_identity.rb +1 -1
  129. data/lib/dommy/internal/node_traversal.rb +22 -4
  130. data/lib/dommy/internal/node_wrapper_cache.rb +6 -38
  131. data/lib/dommy/internal/observer_options.rb +24 -14
  132. data/lib/dommy/internal/origin.rb +86 -0
  133. data/lib/dommy/internal/parent_node.rb +10 -8
  134. data/lib/dommy/internal/popover_invoker_element.rb +67 -0
  135. data/lib/dommy/internal/popover_stack.rb +120 -0
  136. data/lib/dommy/internal/post_insertion_steps.rb +141 -71
  137. data/lib/dommy/internal/referrer.rb +144 -0
  138. data/lib/dommy/internal/reflected_attributes.rb +128 -18
  139. data/lib/dommy/internal/rendered_text/collector.rb +23 -8
  140. data/lib/dommy/internal/rendered_text/computed_box.rb +3 -2
  141. data/lib/dommy/internal/rendered_text/fragment.rb +37 -34
  142. data/lib/dommy/internal/rendered_text/items.rb +7 -5
  143. data/lib/dommy/internal/selector_arguments.rb +2 -1
  144. data/lib/dommy/internal/selector_match.rb +1 -1
  145. data/lib/dommy/internal/selector_matcher.rb +361 -354
  146. data/lib/dommy/internal/selector_parser.rb +88 -63
  147. data/lib/dommy/internal/sequential_focus_navigation.rb +209 -0
  148. data/lib/dommy/internal/shadow_root_registry.rb +14 -0
  149. data/lib/dommy/internal/slot_assignment.rb +117 -0
  150. data/lib/dommy/internal/slot_signals.rb +125 -0
  151. data/lib/dommy/internal/template_content_registry.rb +7 -1
  152. data/lib/dommy/internal/text_selection.rb +185 -32
  153. data/lib/dommy/internal/toggle_events.rb +6 -4
  154. data/lib/dommy/internal/unsafe_html.rb +109 -0
  155. data/lib/dommy/internal/url_parser.rb +89 -37
  156. data/lib/dommy/internal/user_activation.rb +192 -0
  157. data/lib/dommy/internal/web_idl.rb +176 -38
  158. data/lib/dommy/internal/window_bound.rb +14 -0
  159. data/lib/dommy/internal/window_constructors.rb +29 -6
  160. data/lib/dommy/internal/xml_serialization.rb +298 -296
  161. data/lib/dommy/js/constructor_resolver.rb +18 -0
  162. data/lib/dommy/js/custom_element_bridge.rb +57 -82
  163. data/lib/dommy/js/dom_interfaces.rb +63 -16
  164. data/lib/dommy/js/host_bridge.rb +212 -41
  165. data/lib/dommy/js/host_callbacks.rb +7 -0
  166. data/lib/dommy/js/host_runtime.js +2494 -448
  167. data/lib/dommy/js/import_map.rb +1 -1
  168. data/lib/dommy/js/marshaller.rb +13 -4
  169. data/lib/dommy/js/module_loader.rb +37 -6
  170. data/lib/dommy/js/module_preload.rb +107 -29
  171. data/lib/dommy/js/observable_runtime.js +295 -128
  172. data/lib/dommy/js/script_boot.rb +197 -115
  173. data/lib/dommy/js/serialized_record.rb +32 -0
  174. data/lib/dommy/js/webidl_event_handlers.js +45 -0
  175. data/lib/dommy/js/webidl_members.js +196 -0
  176. data/lib/dommy/js/webidl_signatures.js +2084 -0
  177. data/lib/dommy/js/webidl_tables.js +47 -100
  178. data/lib/dommy/js/window_wiring.rb +9 -5
  179. data/lib/dommy/location.rb +129 -76
  180. data/lib/dommy/media_query_list.rb +5 -13
  181. data/lib/dommy/message_channel.rb +139 -64
  182. data/lib/dommy/mutation_observer.rb +27 -29
  183. data/lib/dommy/navigation.rb +59 -9
  184. data/lib/dommy/navigator.rb +135 -6
  185. data/lib/dommy/node.rb +23 -11
  186. data/lib/dommy/notification.rb +10 -1
  187. data/lib/dommy/promise.rb +20 -0
  188. data/lib/dommy/range.rb +25 -37
  189. data/lib/dommy/resources.rb +38 -3
  190. data/lib/dommy/scheduler.rb +176 -48
  191. data/lib/dommy/shadow_root.rb +141 -19
  192. data/lib/dommy/storage.rb +135 -25
  193. data/lib/dommy/streams.rb +18 -0
  194. data/lib/dommy/structured_data.rb +45 -0
  195. data/lib/dommy/style_declaration.rb +31 -4
  196. data/lib/dommy/text_codec.rb +9 -19
  197. data/lib/dommy/tree_walker.rb +78 -79
  198. data/lib/dommy/url.rb +11 -4
  199. data/lib/dommy/validity_state.rb +109 -107
  200. data/lib/dommy/version.rb +1 -1
  201. data/lib/dommy/web_socket.rb +6 -28
  202. data/lib/dommy/window.rb +833 -103
  203. data/lib/dommy/worker.rb +5 -28
  204. data/lib/dommy/xml_http_request.rb +43 -46
  205. data/lib/dommy.rb +52 -3
  206. metadata +45 -6
  207. data/lib/dommy/internal/cookie_jar.rb +0 -29
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b0d28c900db6681f80910f285f05e95985648e6bf824990f23d4f4b4b47bdaf9
4
- data.tar.gz: 509faf8cfe617d13f1ff69507254c3ef7987d77a9bdf796fa7ce44836d63c798
3
+ metadata.gz: 2063a6335f55bcddf4a9db6b162b0ea69ccce3aaa4c8b7bd45069850992c98ca
4
+ data.tar.gz: 725b6c8395b377fcddbda372ecb55709f169e0143b5a0bc404f78036db18e243
5
5
  SHA512:
6
- metadata.gz: d52a0dec8dca36a172c0ff93e89ab75126049a6b85eeea2a7527c99a162cc087b98cdf11afa7a98d0cd5024bce642ac612f955babf15a3b02af63cbddc336981
7
- data.tar.gz: f8de49a82844eee7f75e5b5db13a798b7210b70a9bc1e902b85c37819fc79e98c71a2dd8d60abeeaa4f16de9a2679c15f27d48d57f7005b2345ac5a1e0fce7b5
6
+ metadata.gz: 7a4af1e30b2e3efe5de479b05c67d770e7ca6e11b71db0fc932c5ba382cee6e52a65ebebfb63be3aa2ac8e431efec5e1da9f97fcbc85fd3fea7e12926b3f4350
7
+ data.tar.gz: 0dab9637f563f76636614616d79b2422e618ac92aff8cc39a5b8f3c64730ee1af68b48f09b76b37d5b9c2b85bcd38131549863862ee598f4c5b7b0b0d449b42e
@@ -88,6 +88,7 @@ module Dommy
88
88
  # Spec: https://drafts.csswg.org/web-animations/#animation
89
89
  class Animation
90
90
  include EventTarget
91
+ include Internal::WindowBound
91
92
 
92
93
  attr_accessor :id
93
94
  attr_reader :effect, :timeline, :play_state
data/lib/dommy/backend.rb CHANGED
@@ -78,16 +78,22 @@ module Dommy
78
78
  # which matches no-quirks everywhere Dommy asks). An XML document is
79
79
  # never in it.
80
80
  def quirks_mode?(doc)
81
- doc.respond_to?(:quirks_mode?) && doc.quirks_mode?
81
+ doc.quirks_mode?
82
82
  end
83
83
 
84
84
  # An empty backing document matching `doc`'s kind (HTML stays HTML, XML
85
85
  # stays XML) — for a shallow document clone, whose result keeps the
86
86
  # source flavor.
87
+ # Whether `doc` is an HTML-backed document (the HTML parser built it).
88
+ def html_backed?(doc) = !doc.is_a?(::Makiri::XML::Document)
89
+
87
90
  def empty_document_like(doc)
88
91
  doc.is_a?(::Makiri::XML::Document) ? empty_xml_document : empty_document
89
92
  end
90
93
 
94
+ # Whether backend node `node` belongs to an XML document's tree.
95
+ def xml_node?(node) = node.is_a?(::Makiri::XML::NodeMethods)
96
+
91
97
  # Bring `node` (already detached from its old tree) into `target_doc`,
92
98
  # returning the backend node now owned by `target_doc`. Lexbor's arenas
93
99
  # can't move a node between documents, so adoption imports a detached
@@ -135,21 +141,13 @@ module Dommy
135
141
  end
136
142
 
137
143
  # The DOM's createElement: an element whose local name is `local_name`
138
- # as written, colons included (`foo:` and `f::oo` are valid local names,
139
- # not prefixed ones), in `namespace` — the HTML namespace in an HTML or
140
- # XHTML document, nil in any other. An XML document's own creator parses
141
- # a QName, so its element is built from the parts. An HTML-backed one —
142
- # which a document typed as XHTML or XML after an HTML parse also is —
143
- # makes it by createElementNS, which keeps the name's case and the
144
- # namespace given; that splits a name at its colon, and refuses `xmlns`
145
- # outside the XMLNS namespace, as createElementNS must — so a name with
146
- # a colon, or `xmlns`, takes the HTML document's creator, which keeps
147
- # the name as written but folds it into the HTML namespace in lower case.
144
+ # as written, colons and case included (`foo:` and `f::oo` are valid
145
+ # local names, not prefixed ones), in `namespace` — the HTML namespace
146
+ # in an HTML or XHTML document, nil in any other. Makiri builds it from
147
+ # the parts in an HTML and an XML document alike, without parsing the
148
+ # name as a QName.
148
149
  def create_element(local_name, namespace, doc)
149
- return doc.create_loose_dom_element(local_name, nil, local_name, namespace) unless doc.is_a?(::Makiri::HTML::Document)
150
- return doc.create_element(local_name) if local_name.include?(":") || local_name == "xmlns"
151
-
152
- doc.create_element_ns(namespace, local_name)
150
+ doc.create_loose_dom_element(local_name, nil, local_name, namespace)
153
151
  end
154
152
 
155
153
  # The DOM's createElementNS, in an HTML or an XML document alike: the
@@ -327,6 +325,12 @@ module Dommy
327
325
  node.attribute_value_ns(nil, local_name)
328
326
  end
329
327
 
328
+ # The qualified names of the element's attributes, in order, without
329
+ # materializing an attribute node for each (Element#getAttributeNames).
330
+ def attribute_names(node)
331
+ node.keys
332
+ end
333
+
330
334
  # The element's attribute nodes (each readable via attribute_ns_info).
331
335
  # The single choke point so DOM code doesn't touch parser internals.
332
336
  def attribute_nodes(node)
data/lib/dommy/blob.rb CHANGED
@@ -43,6 +43,12 @@ module Dommy
43
43
  File.new([@data], name, {"type" => @type}, @window)
44
44
  end
45
45
 
46
+ # Blob's serialization + deserialization steps (structured clone): a new
47
+ # Blob over the same bytes and type.
48
+ def __internal_structured_clone__(_for_storage = false)
49
+ Blob.new([@data], {"type" => @type}, @window)
50
+ end
51
+
46
52
  # Return a new Blob over a byte range of this one.
47
53
  # Negative indices are treated as offsets from the end (per spec).
48
54
  def slice(start = 0, last = @size, content_type = "")
@@ -181,6 +187,18 @@ module Dommy
181
187
  @last_modified = (raw_lm || (Time.now.to_f * 1000)).to_i
182
188
  end
183
189
 
190
+ # A File under another name keeps its lastModified (XHR's "create an
191
+ # entry"); only a Blob gets a new one.
192
+ def __internal_file_named__(name)
193
+ File.new([@data], name, {"type" => @type, "lastModified" => @last_modified}, @window)
194
+ end
195
+
196
+ # File's serialization + deserialization steps: bytes, type, name and
197
+ # lastModified.
198
+ def __internal_structured_clone__(_for_storage = false)
199
+ File.new([@data], @name, {"type" => @type, "lastModified" => @last_modified}, @window)
200
+ end
201
+
184
202
  def __js_get__(key)
185
203
  case key
186
204
  when "name"
@@ -210,6 +228,11 @@ module Dommy
210
228
 
211
229
  alias size length
212
230
 
231
+ # FileList's serialization + deserialization steps: each File cloned.
232
+ def __internal_structured_clone__(for_storage = false)
233
+ FileList.new(@files.map { |file| file.__internal_structured_clone__(for_storage) })
234
+ end
235
+
213
236
  def item(index)
214
237
  @files[index.to_i]
215
238
  end
@@ -3,8 +3,8 @@
3
3
  module Dommy
4
4
  module Bridge
5
5
  # The Ruby shapes a JS value takes while it is on this side: an opaque
6
- # reference, and the two byte buffers that cross as a typed array or a bare
7
- # ArrayBuffer.
6
+ # reference (a Date one carrying its time value), and the two byte buffers
7
+ # that cross as a typed array or a bare ArrayBuffer.
8
8
 
9
9
  # An opaque handle to a JS-side value that Ruby only stores and hands back
10
10
  # (an AbortSignal's reason, a CustomEvent's detail). A non-plain JS object
@@ -35,6 +35,33 @@ module Dommy
35
35
  def inspect = "#<Dommy::Bridge::JSValue #{to_s}>"
36
36
  end
37
37
 
38
+ # A JS Date that crossed into Ruby. It is still an opaque reference, so
39
+ # handing it back returns the same Date, but it also carries its time value
40
+ # (ms since the epoch, NaN for an invalid date) — the one thing a host API
41
+ # taking a Date (`input.valueAsDate = d`) needs to read off it. A Date the
42
+ # host creates crosses from a Ruby ::Time instead.
43
+ class Date < JSValue
44
+ # The largest time value a JS Date can hold, either side of the epoch.
45
+ MAX_TIME_VALUE = 8_640_000_000_000_000
46
+
47
+ # The time value a JS Date made from `time` holds — ECMAScript's TimeClip:
48
+ # whole milliseconds truncated toward zero (0.1 ms before the epoch is 0,
49
+ # not -1), and NaN beyond MAX_TIME_VALUE.
50
+ def self.time_value_of(time)
51
+ ms = (time.to_r * 1000).truncate
52
+ ms.abs > MAX_TIME_VALUE ? ::Float::NAN : ms.to_f
53
+ end
54
+
55
+ attr_reader :time_value
56
+
57
+ def initialize(ref, time_value)
58
+ super(ref, nil, nil, "Date")
59
+ @time_value = time_value
60
+ end
61
+
62
+ def inspect = "#<Dommy::Bridge::Date #{time_value}>"
63
+ end
64
+
38
65
  # A byte buffer that crosses the JS boundary as a `Uint8Array` (rather than a
39
66
  # plain Array). Wrap a host method's byte-array result in this so JS sees a
40
67
  # real typed array — e.g. `TextEncoder#encode`, `Blob#arrayBuffer`. The
@@ -25,10 +25,6 @@ module Dommy
25
25
  # method set) instead of a `__rb_host_describe` round trip per new proxy —
26
26
  # the dominant overhead when JS traverses/builds many nodes.
27
27
  INTERFACE = "__rb_if"
28
- # The custom-element tag of a handle whose node is a registered custom
29
- # element (so makeProxy upgrades it), carried per-instance since it is the
30
- # one part of a describe that is NOT per-interface.
31
- CUSTOM_ELEMENT = "__rb_ce"
32
28
  # A live JS function that crossed into Ruby, referenced by callback id.
33
29
  CALLBACK = "__rb_callback"
34
30
  # An opaque JS value referenced by its id in the JS-side `jsRefs` table
@@ -58,6 +54,10 @@ module Dommy
58
54
  BYTES = "__rb_bytes"
59
55
  # A byte buffer crossing as a bare JS ArrayBuffer.
60
56
  ARRAY_BUFFER = "__rb_arraybuffer"
57
+ # A JS Date's time value (ms since the epoch). Host -> JS it builds a new
58
+ # Date; JS -> host it decorates a JS_REF, so the Date keeps its identity
59
+ # and the host can still read the time (see Dommy::Bridge::Date).
60
+ DATE = "__rb_date"
61
61
  # A host-raised DOMException/TypeError/RangeError, re-thrown JS-side.
62
62
  EXCEPTION = "__rb_exception__"
63
63
  # A host-created native JS error (TypeError/RangeError) crossing as a VALUE
@@ -68,6 +68,10 @@ module Dommy
68
68
  THROW = "__rb_throw__"
69
69
  # A callback whose JS invocation threw (the thrown value is carried here).
70
70
  CALLBACK_THREW = "__rb_cb_threw__"
71
+ # A structured-serialization record the JS realm holds (by id), crossing
72
+ # as an opaque Dommy::Js::SerializedRecord (see host_runtime.js
73
+ # serializedTag).
74
+ SERIALIZED = "__rb_serialized"
71
75
  end
72
76
  end
73
77
  end