Class: Puppeteer::Bidi::Deserializer

Inherits:
Object
  • Object
show all
Defined in:
lib/puppeteer/bidi/deserializer.rb,
sig/puppeteer/bidi/deserializer.rbs

Overview

Deserializer converts BiDi Script.RemoteValue to Ruby values Based on Puppeteer's Deserializer.ts

Class Method Summary collapse

Class Method Details

.deserialize(remote_value, realm = nil) ⇒ Object

Deserialize a BiDi RemoteValue to Ruby value

Parameters:

  • remote_value (Hash)

    BiDi RemoteValue

  • realm (Core::Realm, nil) (defaults to: nil)

    Realm for creating handles (optional)

Returns:

  • (Object)

    Ruby value or JSHandle/ElementHandle if realm provided



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/puppeteer/bidi/deserializer.rb', line 17

def deserialize(remote_value, realm = nil)
  return remote_value unless remote_value.is_a?(Hash)

  type = remote_value['type']

  case type
  when 'string'
    remote_value['value']
  when 'number'
    deserialize_number(remote_value['value'])
  when 'boolean'
    remote_value['value']
  when 'null'
    nil
  when 'undefined'
    nil
  when 'bigint'
    # BiDi sends bigint as string, convert to Integer
    remote_value['value'].to_i
  when 'array'
    # Deserialize array elements
    return [] unless remote_value['value']
    remote_value['value'].map { |item| deserialize(item, realm) }
  when 'set'
    # Deserialize set elements and return Ruby Set
    return Set.new unless remote_value['value']
    Set.new(remote_value['value'].map { |item| deserialize(item, realm) })
  when 'object'
    # Object is an array of [key, value] tuples
    deserialize_object(remote_value['value'], realm)
  when 'map'
    # Map is an array of [key, value] tuples with non-string keys
    deserialize_map(remote_value['value'], realm)
  when 'regexp'
    # Reconstruct Ruby Regexp
    deserialize_regexp(remote_value['value'])
  when 'date'
    # Parse ISO 8601 datetime string
    Time.parse(remote_value['value'])
  when 'promise'
    # Promise placeholder - return empty hash
    {}
  when 'node'
    # DOM node - create ElementHandle if realm provided
    if realm
      ElementHandle.new(realm, remote_value)
    else
      # Without realm, return the remote value as-is
      remote_value
    end
  else
    # Unknown type - create JSHandle if realm provided
    if realm
      JSHandle.new(realm, remote_value)
    else
      # Without realm, return value as-is or nil
      remote_value['value']
    end
  end
end