kobako 0.4.0 → 0.5.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.
- checksums.yaml +4 -4
- data/.release-please-manifest.json +1 -0
- data/CHANGELOG.md +29 -0
- data/Cargo.lock +1 -1
- data/README.md +0 -1
- data/data/kobako.wasm +0 -0
- data/ext/kobako/Cargo.toml +1 -1
- data/ext/kobako/src/lib.rs +4 -2
- data/ext/kobako/src/{wasm → runtime}/cache.rs +12 -16
- data/ext/kobako/src/runtime/capture.rs +91 -0
- data/ext/kobako/src/runtime/config.rs +26 -0
- data/ext/kobako/src/runtime/dispatch.rs +211 -0
- data/ext/kobako/src/runtime/exports.rs +51 -0
- data/ext/kobako/src/runtime/guest_mem.rs +228 -0
- data/ext/kobako/src/{wasm/host_state.rs → runtime/invocation.rs} +94 -86
- data/ext/kobako/src/runtime/trap.rs +134 -0
- data/ext/kobako/src/runtime.rs +782 -0
- data/ext/kobako/src/snapshot.rs +110 -0
- data/lib/kobako/capture.rb +11 -16
- data/lib/kobako/catalog/handles.rb +107 -0
- data/lib/kobako/catalog/namespaces.rb +99 -0
- data/lib/kobako/{snippet/table.rb → catalog/snippets.rb} +37 -62
- data/lib/kobako/catalog.rb +18 -0
- data/lib/kobako/codec/decoder.rb +13 -5
- data/lib/kobako/codec/factory.rb +12 -12
- data/lib/kobako/codec/utils.rb +56 -59
- data/lib/kobako/codec.rb +6 -3
- data/lib/kobako/errors.rb +45 -28
- data/lib/kobako/fault.rb +40 -0
- data/lib/kobako/handle.rb +4 -6
- data/lib/kobako/namespace.rb +67 -0
- data/lib/kobako/outcome.rb +31 -35
- data/lib/kobako/runtime.rb +30 -0
- data/lib/kobako/sandbox.rb +83 -72
- data/lib/kobako/sandbox_options.rb +6 -9
- data/lib/kobako/snapshot.rb +40 -0
- data/lib/kobako/snippet/binary.rb +6 -7
- data/lib/kobako/snippet/source.rb +8 -8
- data/lib/kobako/snippet.rb +7 -9
- data/lib/kobako/transport/dispatcher.rb +195 -0
- data/lib/kobako/{rpc/wire_error.rb → transport/error.rb} +7 -6
- data/lib/kobako/transport/request.rb +78 -0
- data/lib/kobako/transport/response.rb +69 -0
- data/lib/kobako/transport/run.rb +141 -0
- data/lib/kobako/transport/yield.rb +91 -0
- data/lib/kobako/transport/yielder.rb +89 -0
- data/lib/kobako/transport.rb +24 -0
- data/lib/kobako/version.rb +1 -1
- data/lib/kobako.rb +4 -4
- data/release-please-config.json +24 -0
- data/sig/kobako/capture.rbs +0 -2
- data/sig/kobako/catalog/handles.rbs +19 -0
- data/sig/kobako/catalog/namespaces.rbs +17 -0
- data/sig/kobako/{snippet/table.rbs → catalog/snippets.rbs} +2 -11
- data/sig/kobako/{rpc.rbs → catalog.rbs} +1 -1
- data/sig/kobako/codec/decoder.rbs +2 -1
- data/sig/kobako/codec/factory.rbs +2 -2
- data/sig/kobako/codec/utils.rbs +5 -5
- data/sig/kobako/errors.rbs +7 -7
- data/sig/kobako/fault.rbs +19 -0
- data/sig/kobako/handle.rbs +2 -3
- data/sig/kobako/namespace.rbs +19 -0
- data/sig/kobako/outcome.rbs +2 -2
- data/sig/kobako/runtime.rbs +23 -0
- data/sig/kobako/sandbox.rbs +5 -8
- data/sig/kobako/snapshot.rbs +15 -0
- data/sig/kobako/transport/dispatcher.rbs +34 -0
- data/sig/kobako/transport/error.rbs +6 -0
- data/sig/kobako/transport/request.rbs +32 -0
- data/sig/kobako/transport/response.rbs +30 -0
- data/sig/kobako/transport/run.rbs +27 -0
- data/sig/kobako/transport/yield.rbs +34 -0
- data/sig/kobako/transport/yielder.rbs +21 -0
- data/sig/kobako/transport.rbs +4 -0
- metadata +48 -30
- data/ext/kobako/src/wasm/dispatch.rs +0 -162
- data/ext/kobako/src/wasm/instance.rs +0 -873
- data/ext/kobako/src/wasm.rs +0 -126
- data/lib/kobako/handle_table.rb +0 -119
- data/lib/kobako/invocation.rb +0 -143
- data/lib/kobako/rpc/dispatcher.rb +0 -171
- data/lib/kobako/rpc/envelope.rb +0 -118
- data/lib/kobako/rpc/fault.rb +0 -41
- data/lib/kobako/rpc/namespace.rb +0 -74
- data/lib/kobako/rpc/server.rb +0 -146
- data/lib/kobako/rpc.rb +0 -11
- data/lib/kobako/wasm.rb +0 -25
- data/sig/kobako/handle_table.rbs +0 -23
- data/sig/kobako/invocation.rbs +0 -25
- data/sig/kobako/rpc/dispatcher.rbs +0 -33
- data/sig/kobako/rpc/envelope.rbs +0 -51
- data/sig/kobako/rpc/fault.rbs +0 -20
- data/sig/kobako/rpc/namespace.rbs +0 -24
- data/sig/kobako/rpc/server.rbs +0 -31
- data/sig/kobako/rpc/wire_error.rbs +0 -6
- data/sig/kobako/wasm.rbs +0 -41
data/lib/kobako/rpc/fault.rb
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Kobako
|
|
4
|
-
module RPC
|
|
5
|
-
# Wire-level value object for an ext-0x02 Exception envelope.
|
|
6
|
-
#
|
|
7
|
-
# SPEC pins the payload
|
|
8
|
-
# ({docs/wire-codec.md}[link:../../../docs/wire-codec.md] § Ext Types
|
|
9
|
-
# → ext 0x02) to a msgpack map with exactly three keys:
|
|
10
|
-
# * "type" — one of "runtime", "argument", "disconnected", "undefined"
|
|
11
|
-
# * "message" — human-readable string
|
|
12
|
-
# * "details" — any wire-legal value, or nil when absent
|
|
13
|
-
#
|
|
14
|
-
# This object holds the *encoded* form. Reifying the corresponding Ruby
|
|
15
|
-
# exception class (RuntimeError, ArgumentError, Kobako::ServiceError, ...)
|
|
16
|
-
# is the responsibility of the dispatch layer, not the codec.
|
|
17
|
-
#
|
|
18
|
-
# Built on +Data.define+ so equality, hash, and immutability are
|
|
19
|
-
# inherited from the value-object machinery; only the field invariants
|
|
20
|
-
# ride on top.
|
|
21
|
-
Fault = Data.define(:type, :message, :details) do
|
|
22
|
-
# +VALID_TYPES+ is attached to the Exception class below this block.
|
|
23
|
-
# Reach it through +self.class::VALID_TYPES+ — Data.define's block
|
|
24
|
-
# scope resolves bare constants against the enclosing +Wire+ module,
|
|
25
|
-
# so a bare +VALID_TYPES+ would raise +NameError+. Same pattern as
|
|
26
|
-
# +Kobako::Handle+.
|
|
27
|
-
# steep:ignore:start
|
|
28
|
-
def initialize(type:, message:, details: nil)
|
|
29
|
-
valid_types = self.class::VALID_TYPES
|
|
30
|
-
raise ArgumentError, "type must be String" unless type.is_a?(String)
|
|
31
|
-
raise ArgumentError, "message must be String" unless message.is_a?(String)
|
|
32
|
-
raise ArgumentError, "type=#{type.inspect} not one of #{valid_types.inspect}" unless valid_types.include?(type)
|
|
33
|
-
|
|
34
|
-
super
|
|
35
|
-
end
|
|
36
|
-
# steep:ignore:end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
Fault::VALID_TYPES = %w[runtime argument disconnected undefined].freeze
|
|
40
|
-
end
|
|
41
|
-
end
|
data/lib/kobako/rpc/namespace.rb
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Kobako
|
|
4
|
-
module RPC
|
|
5
|
-
# A named grouping of Members for one Sandbox
|
|
6
|
-
# ({docs/behavior.md B-07..B-11}[link:../../../docs/behavior.md]). Returned by
|
|
7
|
-
# +Sandbox#define+. Each instance owns a flat name→object table of
|
|
8
|
-
# Members; member binding is validated against {NAME_PATTERN}.
|
|
9
|
-
class Namespace
|
|
10
|
-
# Ruby constant-name pattern shared by Namespace and Member names
|
|
11
|
-
# ({docs/behavior.md B-07/B-08 Notes}[link:../../../docs/behavior.md]).
|
|
12
|
-
NAME_PATTERN = /\A[A-Z]\w*\z/
|
|
13
|
-
|
|
14
|
-
attr_reader :name, :members
|
|
15
|
-
|
|
16
|
-
# Build a new Namespace. +name+ is an already-validated Namespace
|
|
17
|
-
# name (must satisfy {NAME_PATTERN}; validation is the caller's
|
|
18
|
-
# responsibility).
|
|
19
|
-
def initialize(name)
|
|
20
|
-
@name = name
|
|
21
|
-
@members = {}
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Bind +object+ under +member+ inside this Namespace. +member+ is a
|
|
25
|
-
# constant-form name as a +Symbol+ or +String+. +object+ is any Ruby
|
|
26
|
-
# object that responds to the methods guest code will invoke. Returns
|
|
27
|
-
# +self+ for chaining. Raises +ArgumentError+ when +member+ does not
|
|
28
|
-
# match the constant pattern, or a Member of the same name is already
|
|
29
|
-
# bound ({docs/behavior.md B-11}[link:../../../docs/behavior.md]).
|
|
30
|
-
def bind(member, object)
|
|
31
|
-
member_str = validate_member_name!(member)
|
|
32
|
-
raise ArgumentError, "Member #{@name}::#{member_str} is already bound" if @members.key?(member_str)
|
|
33
|
-
|
|
34
|
-
@members[member_str] = object
|
|
35
|
-
self
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
# Member lookup. Returns the bound object or +nil+ when missing.
|
|
39
|
-
def [](member)
|
|
40
|
-
@members[member.to_s]
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# Strict variant of {#[]}; raises +KeyError+ when no Member is
|
|
44
|
-
# registered under +member+.
|
|
45
|
-
def fetch(member)
|
|
46
|
-
member_str = member.to_s
|
|
47
|
-
unless @members.key?(member_str)
|
|
48
|
-
raise KeyError,
|
|
49
|
-
"no member named #{member_str.inspect} in namespace #{@name.inspect}"
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
@members[member_str]
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
# Structured description for the guest preamble (Frame 1). Returns a
|
|
56
|
-
# two-element array +[name, member_keys]+ suitable for msgpack encoding.
|
|
57
|
-
def to_preamble
|
|
58
|
-
[@name, @members.keys]
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
private
|
|
62
|
-
|
|
63
|
-
def validate_member_name!(member)
|
|
64
|
-
member_str = member.to_s
|
|
65
|
-
unless NAME_PATTERN.match?(member_str)
|
|
66
|
-
raise ArgumentError,
|
|
67
|
-
"MemberName must match #{NAME_PATTERN.inspect} (got #{member.inspect})"
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
member_str
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
data/lib/kobako/rpc/server.rb
DELETED
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "msgpack"
|
|
4
|
-
require_relative "../errors"
|
|
5
|
-
require_relative "envelope"
|
|
6
|
-
require_relative "namespace"
|
|
7
|
-
require_relative "../handle_table"
|
|
8
|
-
require_relative "dispatcher"
|
|
9
|
-
|
|
10
|
-
module Kobako
|
|
11
|
-
module RPC
|
|
12
|
-
# Kobako::RPC::Server — per-Sandbox host-side RPC coordinator. Maintains
|
|
13
|
-
# the Namespace / Member registry, owns the HandleTable, and routes
|
|
14
|
-
# incoming Requests to the resolved Service object
|
|
15
|
-
# ({docs/behavior.md B-07..B-21}[link:../../../docs/behavior.md]).
|
|
16
|
-
#
|
|
17
|
-
# Public API:
|
|
18
|
-
#
|
|
19
|
-
# server = Kobako::RPC::Server.new
|
|
20
|
-
# namespace = server.define(:MyService) # => Kobako::RPC::Namespace
|
|
21
|
-
# namespace.bind(:KV, kv_object) # => namespace (chainable)
|
|
22
|
-
# server.to_preamble # => array for Frame 1
|
|
23
|
-
# server.dispatch(request_bytes) # => msgpack bytes (delegated to Dispatcher)
|
|
24
|
-
#
|
|
25
|
-
# Namespaces live at +Kobako::RPC::Namespace+
|
|
26
|
-
# (lib/kobako/rpc/namespace.rb). The opaque Handle allocator lives at
|
|
27
|
-
# +Kobako::HandleTable+ (lib/kobako/handle_table.rb) and is owned by
|
|
28
|
-
# the Sandbox — the Server only holds an injected reference so RPC
|
|
29
|
-
# dispatch resolves against the same table the wire layer allocates
|
|
30
|
-
# into (docs/behavior.md B-19). Dispatch helpers live at
|
|
31
|
-
# +Kobako::RPC::Dispatcher+ (lib/kobako/rpc/dispatcher.rb).
|
|
32
|
-
class Server
|
|
33
|
-
# Build a fresh Server. +handle_table+ is an internal seam that
|
|
34
|
-
# injects a pre-configured +HandleTable+; tests pass one whose +next_id+
|
|
35
|
-
# is pinned near +MAX_ID+ to exercise the B-21 cap-exhaustion path
|
|
36
|
-
# without 2³¹ allocations. Production callers leave it at the default.
|
|
37
|
-
def initialize(handle_table: HandleTable.new)
|
|
38
|
-
@namespaces = {} # : Hash[String, Kobako::RPC::Namespace]
|
|
39
|
-
@handle_table = handle_table
|
|
40
|
-
@sealed = false
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# Declare or retrieve the Namespace named +name+ (idempotent — docs/behavior.md B-10).
|
|
44
|
-
# +name+ is a constant-form name as a +Symbol+ or +String+ (must satisfy
|
|
45
|
-
# +Namespace::NAME_PATTERN+). Returns the +Kobako::RPC::Namespace+ for
|
|
46
|
-
# that name, creating it if it does not exist. Raises +ArgumentError+
|
|
47
|
-
# when +name+ is malformed, or when called after the owning Sandbox has
|
|
48
|
-
# been sealed by its first invocation ({docs/behavior.md B-07}[link:../../../docs/behavior.md]).
|
|
49
|
-
def define(name)
|
|
50
|
-
raise ArgumentError, "cannot define after first Sandbox invocation" if @sealed
|
|
51
|
-
|
|
52
|
-
name_str = name.to_s
|
|
53
|
-
unless Namespace::NAME_PATTERN.match?(name_str)
|
|
54
|
-
raise ArgumentError,
|
|
55
|
-
"Namespace name must match #{Namespace::NAME_PATTERN.inspect} (got #{name.inspect})"
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
@namespaces[name_str] ||= Namespace.new(name_str)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
# Resolve a +target+ path of the form +"Namespace::Member"+ to the
|
|
62
|
-
# bound Host object. +target+ is a two-level path using the +::+
|
|
63
|
-
# separator. Returns the bound Host object. Raises +KeyError+ when the
|
|
64
|
-
# namespace or the member is not bound.
|
|
65
|
-
def lookup(target)
|
|
66
|
-
namespace, member_name, namespace_name = parse_target(target)
|
|
67
|
-
raise KeyError, "no namespace named #{namespace_name.inspect}" if namespace.nil?
|
|
68
|
-
raise KeyError, "no member #{target.inspect} bound on server" unless member_name
|
|
69
|
-
|
|
70
|
-
namespace.fetch(member_name)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
# Returns +true+ when +target+ (a +"Namespace::Member"+ path) resolves
|
|
74
|
-
# to a bound member, +false+ otherwise.
|
|
75
|
-
def bound?(target)
|
|
76
|
-
namespace, member_name, = parse_target(target)
|
|
77
|
-
!namespace.nil? && !member_name.nil? && !namespace[member_name].nil?
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
# Returns the number of declared namespaces as an +Integer+.
|
|
81
|
-
def size
|
|
82
|
-
@namespaces.size
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
# Returns +true+ when no namespaces have been declared, +false+ otherwise.
|
|
86
|
-
def empty?
|
|
87
|
-
@namespaces.empty?
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
# Structured Frame 1 description. Called by +Sandbox#eval+ when
|
|
91
|
-
# assembling stdin Frame 1
|
|
92
|
-
# ({docs/behavior.md B-02}[link:../../../docs/behavior.md]). Returns an
|
|
93
|
-
# unencoded preamble array — an +Array+ of two-element +[name, members]+
|
|
94
|
-
# arrays, one per declared namespace.
|
|
95
|
-
def to_preamble
|
|
96
|
-
@namespaces.values.map(&:to_preamble)
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
# Encode the preamble as msgpack bytes for stdin Frame 1 delivery
|
|
100
|
-
# ({docs/behavior.md B-02}[link:../../../docs/behavior.md]). Uses plain MessagePack (no
|
|
101
|
-
# kobako ext types) because the preamble contains only strings — no
|
|
102
|
-
# Handles or Fault envelopes. Structure:
|
|
103
|
-
# +[["Namespace", ["MemberA", "MemberB"]], ...]+. Returns a binary
|
|
104
|
-
# +String+ of msgpack bytes.
|
|
105
|
-
def encoded_preamble
|
|
106
|
-
MessagePack.pack(to_preamble)
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
# Mark the Server as sealed. Called by +Sandbox+ on the first
|
|
110
|
-
# invocation. After sealing, #define raises ArgumentError. Idempotent.
|
|
111
|
-
def seal!
|
|
112
|
-
@sealed = true
|
|
113
|
-
self
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
# Returns +true+ when {#seal!} has been called, +false+ otherwise.
|
|
117
|
-
def sealed?
|
|
118
|
-
@sealed
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
# Dispatch a single RPC request and return the encoded response bytes
|
|
122
|
-
# ({docs/behavior.md B-12}[link:../../../docs/behavior.md]). +request_bytes+ is a
|
|
123
|
-
# msgpack-encoded Request envelope. Called by the Rust ext from inside
|
|
124
|
-
# +__kobako_dispatch+. Always returns a binary +String+ — never raises.
|
|
125
|
-
# Forwards both the Server (for namespace lookup) and the injected
|
|
126
|
-
# +HandleTable+ (for Handle resolution / return-value wrapping) to
|
|
127
|
-
# +Dispatcher.dispatch+. The Server holds the HandleTable as an
|
|
128
|
-
# injected reference, not an owned resource — the Sandbox owns it
|
|
129
|
-
# (B-19) — so the table is not exposed via accessors.
|
|
130
|
-
def dispatch(request_bytes)
|
|
131
|
-
Dispatcher.dispatch(request_bytes, self, @handle_table)
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
private
|
|
135
|
-
|
|
136
|
-
# Split +target+ on the +::+ separator and resolve the namespace half.
|
|
137
|
-
# Returns +[namespace_or_nil, member_str_or_nil, namespace_name_str]+ so
|
|
138
|
-
# each public method ({#lookup} / {#bound?}) only owns its boundary
|
|
139
|
-
# semantics (raise vs predicate).
|
|
140
|
-
def parse_target(target)
|
|
141
|
-
namespace_name, member_name = target.to_s.split("::", 2)
|
|
142
|
-
[@namespaces[namespace_name], member_name, namespace_name]
|
|
143
|
-
end
|
|
144
|
-
end
|
|
145
|
-
end
|
|
146
|
-
end
|
data/lib/kobako/rpc.rb
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Kobako
|
|
4
|
-
# Kobako::RPC — protocol namespace for host↔guest RPC. Houses the value
|
|
5
|
-
# objects that travel on the wire (+Handle+, +Request+, +Response+,
|
|
6
|
-
# +Fault+) and the host-side Server coordinator. See
|
|
7
|
-
# {SPEC.md Refinement → Internal Concepts}[link:../../SPEC.md] for the
|
|
8
|
-
# RPC role split.
|
|
9
|
-
module RPC
|
|
10
|
-
end
|
|
11
|
-
end
|
data/lib/kobako/wasm.rb
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Kobako
|
|
4
|
-
# Host-side wasmtime wrapper, surfaced as Ruby classes by the native ext
|
|
5
|
-
# (see ext/kobako/src/wasm.rs). This module is the foundational binding
|
|
6
|
-
# layer for Sandbox (#14), the run path (#16) and RPC dispatch (#18).
|
|
7
|
-
#
|
|
8
|
-
# The classes themselves (Instance) and the error hierarchy (Error /
|
|
9
|
-
# ModuleNotBuiltError) are defined from Rust at ext load time; this file
|
|
10
|
-
# only adds the pure-Ruby helpers that have no reason to live in Rust.
|
|
11
|
-
module Wasm
|
|
12
|
-
# Absolute path to the gem-bundled `data/kobako.wasm` artifact. Computed
|
|
13
|
-
# from this file's location so it works for both `bundle exec` (running
|
|
14
|
-
# from the repo) and an installed gem (running from the gem dir).
|
|
15
|
-
#
|
|
16
|
-
# Returns a String regardless of whether the file currently exists —
|
|
17
|
-
# call sites that need the file to be present should pass this through
|
|
18
|
-
# +Kobako::Wasm::Instance.from_path+, which raises +ModuleNotBuiltError+
|
|
19
|
-
# with a clear remediation message.
|
|
20
|
-
def self.default_path
|
|
21
|
-
dir = __dir__ or raise Error, "Kobako::Wasm.default_path requires __dir__"
|
|
22
|
-
File.expand_path("../../data/kobako.wasm", dir)
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
data/sig/kobako/handle_table.rbs
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
module Kobako
|
|
2
|
-
class HandleTable
|
|
3
|
-
def initialize: (?next_id: Integer) -> void
|
|
4
|
-
|
|
5
|
-
def alloc: (untyped object) -> Kobako::Handle
|
|
6
|
-
|
|
7
|
-
def fetch: (Integer id) -> untyped
|
|
8
|
-
|
|
9
|
-
def release: (Integer id) -> untyped
|
|
10
|
-
|
|
11
|
-
def reset!: () -> self
|
|
12
|
-
|
|
13
|
-
def mark_disconnected: (Integer id) -> self
|
|
14
|
-
|
|
15
|
-
def size: () -> Integer
|
|
16
|
-
|
|
17
|
-
def include?: (Integer id) -> bool
|
|
18
|
-
|
|
19
|
-
private
|
|
20
|
-
|
|
21
|
-
def require_bound!: (Integer id) -> void
|
|
22
|
-
end
|
|
23
|
-
end
|
data/sig/kobako/invocation.rbs
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
module Kobako
|
|
2
|
-
class Invocation < Data
|
|
3
|
-
NAME_PATTERN: Regexp
|
|
4
|
-
|
|
5
|
-
attr_reader entrypoint: Symbol
|
|
6
|
-
attr_reader args: Array[untyped]
|
|
7
|
-
attr_reader kwargs: Hash[Symbol, untyped]
|
|
8
|
-
|
|
9
|
-
def self.new: (entrypoint: Symbol | String, ?args: Array[untyped], ?kwargs: Hash[untyped, untyped]) -> Invocation
|
|
10
|
-
|
|
11
|
-
def initialize: (entrypoint: Symbol | String, ?args: Array[untyped], ?kwargs: Hash[untyped, untyped]) -> void
|
|
12
|
-
|
|
13
|
-
def encode: (Kobako::HandleTable handle_table) -> String
|
|
14
|
-
|
|
15
|
-
private
|
|
16
|
-
|
|
17
|
-
def normalize_entrypoint: (Symbol | String target) -> Symbol
|
|
18
|
-
|
|
19
|
-
def validate_args!: (Array[untyped] args) -> Array[untyped]
|
|
20
|
-
|
|
21
|
-
def validate_kwargs!: (Hash[untyped, untyped] kwargs) -> Hash[Symbol, untyped]
|
|
22
|
-
|
|
23
|
-
def forged_handle_message: (String slot) -> String
|
|
24
|
-
end
|
|
25
|
-
end
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
module Kobako
|
|
2
|
-
module RPC
|
|
3
|
-
module Dispatcher
|
|
4
|
-
class UndefinedTargetError < StandardError
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
class DisconnectedTargetError < StandardError
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def self?.dispatch: (String request_bytes, Server server, Kobako::HandleTable handle_table) -> String
|
|
11
|
-
|
|
12
|
-
def self?.encode_caught_error: (StandardError error) -> String
|
|
13
|
-
|
|
14
|
-
def self?.invoke: (untyped target, String method, Array[untyped] args, Hash[Symbol, untyped] kwargs) -> untyped
|
|
15
|
-
|
|
16
|
-
def self?.resolve_arg: (untyped value, Kobako::HandleTable handle_table) -> untyped
|
|
17
|
-
|
|
18
|
-
def self?.resolve_target: (String | Kobako::Handle target, Server server, Kobako::HandleTable handle_table) -> untyped
|
|
19
|
-
|
|
20
|
-
def self?.resolve_path: (String path, Server server) -> untyped
|
|
21
|
-
|
|
22
|
-
def self?.resolve_handle: (Kobako::Handle handle, Kobako::HandleTable handle_table) -> untyped
|
|
23
|
-
|
|
24
|
-
def self?.require_live_object!: (Integer id, Kobako::HandleTable handle_table) -> untyped
|
|
25
|
-
|
|
26
|
-
def self?.encode_ok: (untyped value, Kobako::HandleTable handle_table) -> String
|
|
27
|
-
|
|
28
|
-
def self?.wrap_as_handle: (untyped value, Kobako::HandleTable handle_table) -> Kobako::Handle
|
|
29
|
-
|
|
30
|
-
def self?.encode_error: (String type, String message) -> String
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
data/sig/kobako/rpc/envelope.rbs
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
module Kobako
|
|
2
|
-
module RPC
|
|
3
|
-
STATUS_OK: Integer
|
|
4
|
-
STATUS_ERROR: Integer
|
|
5
|
-
|
|
6
|
-
class Request
|
|
7
|
-
attr_reader target: String | Kobako::Handle
|
|
8
|
-
attr_reader method_name: String
|
|
9
|
-
attr_reader args: Array[untyped]
|
|
10
|
-
attr_reader kwargs: Hash[Symbol, untyped]
|
|
11
|
-
|
|
12
|
-
def initialize: (target: String | Kobako::Handle, method: String, ?args: Array[untyped], ?kwargs: Hash[Symbol, untyped]) -> void
|
|
13
|
-
|
|
14
|
-
def with: (?target: String | Kobako::Handle, ?method: String, ?args: Array[untyped], ?kwargs: Hash[Symbol, untyped]) -> Request
|
|
15
|
-
|
|
16
|
-
def ==: (untyped other) -> bool
|
|
17
|
-
|
|
18
|
-
def hash: () -> Integer
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def self.encode_request: (Request request) -> String
|
|
22
|
-
|
|
23
|
-
def self.decode_request: (String bytes) -> Request
|
|
24
|
-
|
|
25
|
-
class Response
|
|
26
|
-
attr_reader status: Integer
|
|
27
|
-
attr_reader payload: untyped
|
|
28
|
-
|
|
29
|
-
def self.ok: (untyped value) -> Response
|
|
30
|
-
|
|
31
|
-
def self.error: (Kobako::RPC::Fault fault) -> Response
|
|
32
|
-
|
|
33
|
-
def initialize: (Integer status, untyped payload) -> void
|
|
34
|
-
| (status: Integer, payload: untyped) -> void
|
|
35
|
-
|
|
36
|
-
def with: (?status: Integer, ?payload: untyped) -> Response
|
|
37
|
-
|
|
38
|
-
def ok?: () -> bool
|
|
39
|
-
|
|
40
|
-
def error?: () -> bool
|
|
41
|
-
|
|
42
|
-
def ==: (untyped other) -> bool
|
|
43
|
-
|
|
44
|
-
def hash: () -> Integer
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def self.encode_response: (Response response) -> String
|
|
48
|
-
|
|
49
|
-
def self.decode_response: (String bytes) -> Response
|
|
50
|
-
end
|
|
51
|
-
end
|
data/sig/kobako/rpc/fault.rbs
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
module Kobako
|
|
2
|
-
module RPC
|
|
3
|
-
class Fault
|
|
4
|
-
VALID_TYPES: Array[String]
|
|
5
|
-
|
|
6
|
-
attr_reader type: String
|
|
7
|
-
attr_reader message: String
|
|
8
|
-
attr_reader details: untyped
|
|
9
|
-
|
|
10
|
-
def initialize: (String type, String message, untyped details) -> void
|
|
11
|
-
| (type: String, message: String, ?details: untyped) -> void
|
|
12
|
-
|
|
13
|
-
def with: (?type: String, ?message: String, ?details: untyped) -> Fault
|
|
14
|
-
|
|
15
|
-
def ==: (untyped other) -> bool
|
|
16
|
-
|
|
17
|
-
def hash: () -> Integer
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
module Kobako
|
|
2
|
-
module RPC
|
|
3
|
-
class Namespace
|
|
4
|
-
NAME_PATTERN: Regexp
|
|
5
|
-
|
|
6
|
-
attr_reader name: String
|
|
7
|
-
attr_reader members: Hash[String, untyped]
|
|
8
|
-
|
|
9
|
-
def initialize: (String name) -> void
|
|
10
|
-
|
|
11
|
-
def bind: (Symbol | String member, untyped object) -> self
|
|
12
|
-
|
|
13
|
-
def []: (Symbol | String member) -> untyped
|
|
14
|
-
|
|
15
|
-
def fetch: (Symbol | String member) -> untyped
|
|
16
|
-
|
|
17
|
-
def to_preamble: () -> [String, Array[String]]
|
|
18
|
-
|
|
19
|
-
private
|
|
20
|
-
|
|
21
|
-
def validate_member_name!: (Symbol | String member) -> String
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
data/sig/kobako/rpc/server.rbs
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
module Kobako
|
|
2
|
-
module RPC
|
|
3
|
-
class Server
|
|
4
|
-
def initialize: (?handle_table: Kobako::HandleTable) -> void
|
|
5
|
-
|
|
6
|
-
def define: (Symbol | String name) -> Kobako::RPC::Namespace
|
|
7
|
-
|
|
8
|
-
def lookup: (String target) -> untyped
|
|
9
|
-
|
|
10
|
-
def bound?: (String target) -> bool
|
|
11
|
-
|
|
12
|
-
def size: () -> Integer
|
|
13
|
-
|
|
14
|
-
def empty?: () -> bool
|
|
15
|
-
|
|
16
|
-
def to_preamble: () -> Array[[String, Array[String]]]
|
|
17
|
-
|
|
18
|
-
def encoded_preamble: () -> String
|
|
19
|
-
|
|
20
|
-
def seal!: () -> self
|
|
21
|
-
|
|
22
|
-
def sealed?: () -> bool
|
|
23
|
-
|
|
24
|
-
def dispatch: (String request_bytes) -> String
|
|
25
|
-
|
|
26
|
-
private
|
|
27
|
-
|
|
28
|
-
def parse_target: (String target) -> [Kobako::RPC::Namespace?, String?, String?]
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
data/sig/kobako/wasm.rbs
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
module Kobako
|
|
2
|
-
module Wasm
|
|
3
|
-
class Error < StandardError
|
|
4
|
-
end
|
|
5
|
-
|
|
6
|
-
class ModuleNotBuiltError < Error
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def self.default_path: () -> String
|
|
10
|
-
|
|
11
|
-
class TimeoutError < Error
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
class MemoryLimitError < Error
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
class Instance
|
|
18
|
-
def self.from_path: (
|
|
19
|
-
String path,
|
|
20
|
-
(Float | Integer)? timeout_seconds,
|
|
21
|
-
Integer? memory_limit,
|
|
22
|
-
Integer? stdout_limit_bytes,
|
|
23
|
-
Integer? stderr_limit_bytes
|
|
24
|
-
) -> Instance
|
|
25
|
-
|
|
26
|
-
def server=: (Kobako::RPC::Server server) -> void
|
|
27
|
-
|
|
28
|
-
def eval: (String preamble, String source, String snippets) -> void
|
|
29
|
-
|
|
30
|
-
def run: (String preamble, String snippets, String envelope) -> void
|
|
31
|
-
|
|
32
|
-
def stdout: () -> [String, bool]
|
|
33
|
-
|
|
34
|
-
def stderr: () -> [String, bool]
|
|
35
|
-
|
|
36
|
-
def outcome!: () -> String
|
|
37
|
-
|
|
38
|
-
def usage: () -> [Float, Integer]
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|