jsonrpc-middleware 0.6.0 → 0.7.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 (79) hide show
  1. checksums.yaml +4 -4
  2. data/.aiignore +6 -1
  3. data/.claude/agents/entire-search.md +25 -0
  4. data/.claude/agents/rbs-specialist.md +89 -0
  5. data/.claude/settings.json +84 -0
  6. data/.devcontainer/devcontainer.json +17 -0
  7. data/.dockerignore +16 -0
  8. data/.entire/.gitignore +5 -0
  9. data/.entire/settings.json +4 -0
  10. data/.rubocop.yml +26 -1
  11. data/.tool-versions +1 -1
  12. data/.yard-lint.yml +283 -0
  13. data/AGENTS.md +142 -0
  14. data/CHANGELOG.md +19 -0
  15. data/CLAUDE.md +2 -113
  16. data/Dockerfile +144 -0
  17. data/README.md +9 -17
  18. data/Rakefile +62 -11
  19. data/examples/procedures.rb +3 -1
  20. data/examples/rack/Gemfile.lock +4 -4
  21. data/examples/rack-echo/Gemfile.lock +4 -4
  22. data/examples/rails/Gemfile.lock +12 -5
  23. data/examples/rails/config/initializers/jsonrpc.rb +1 -1
  24. data/examples/rails-routing-dsl/config.ru +5 -5
  25. data/examples/rails-single-file/config.ru +1 -1
  26. data/examples/rails-single-file-routing/config.ru +1 -1
  27. data/examples/sinatra-classic/Gemfile.lock +11 -4
  28. data/examples/sinatra-modular/Gemfile.lock +11 -4
  29. data/lib/jsonrpc/batch_request.rb +8 -11
  30. data/lib/jsonrpc/batch_response.rb +6 -8
  31. data/lib/jsonrpc/configuration.rb +30 -4
  32. data/lib/jsonrpc/error.rb +7 -8
  33. data/lib/jsonrpc/errors/internal_error.rb +2 -0
  34. data/lib/jsonrpc/errors/invalid_params_error.rb +2 -0
  35. data/lib/jsonrpc/errors/invalid_request_error.rb +2 -0
  36. data/lib/jsonrpc/errors/method_not_found_error.rb +2 -0
  37. data/lib/jsonrpc/errors/parse_error.rb +2 -0
  38. data/lib/jsonrpc/helpers.rb +6 -0
  39. data/lib/jsonrpc/middleware.rb +12 -11
  40. data/lib/jsonrpc/notification.rb +7 -8
  41. data/lib/jsonrpc/parser.rb +13 -12
  42. data/lib/jsonrpc/railtie/batch_constraint.rb +1 -0
  43. data/lib/jsonrpc/railtie/mapper_extension.rb +2 -2
  44. data/lib/jsonrpc/railtie/method_constraint.rb +9 -0
  45. data/lib/jsonrpc/railtie/routes_dsl.rb +10 -15
  46. data/lib/jsonrpc/railtie.rb +2 -0
  47. data/lib/jsonrpc/response.rb +2 -2
  48. data/lib/jsonrpc/types.rb +1 -1
  49. data/lib/jsonrpc/validator.rb +14 -4
  50. data/lib/jsonrpc/version.rb +1 -1
  51. data/lib/jsonrpc.rb +3 -0
  52. data/rbs_collection.lock.yaml +476 -0
  53. data/rbs_collection.yaml +21 -0
  54. data/sig/jsonrpc/batch_request.rbs +17 -0
  55. data/sig/jsonrpc/batch_response.rbs +17 -0
  56. data/sig/jsonrpc/configuration.rbs +18 -0
  57. data/sig/jsonrpc/error.rbs +17 -0
  58. data/sig/jsonrpc/errors/internal_error.rbs +5 -0
  59. data/sig/jsonrpc/errors/invalid_params_error.rbs +5 -0
  60. data/sig/jsonrpc/errors/invalid_request_error.rbs +5 -0
  61. data/sig/jsonrpc/errors/method_not_found_error.rbs +5 -0
  62. data/sig/jsonrpc/errors/parse_error.rbs +5 -0
  63. data/sig/jsonrpc/middleware.rbs +20 -3
  64. data/sig/jsonrpc/notification.rbs +15 -0
  65. data/sig/jsonrpc/parser.rbs +7 -1
  66. data/sig/jsonrpc/request.rbs +18 -0
  67. data/sig/jsonrpc/response.rbs +19 -0
  68. data/sig/jsonrpc/validator.rbs +8 -0
  69. data/sig/jsonrpc.rbs +3 -156
  70. data/sig/multi_json.rbs +17 -0
  71. data/sig/type_definitions.rbs +11 -0
  72. data/sig/zeitwerk.rbs +10 -0
  73. metadata +34 -12
  74. data/.claude/commands/document.md +0 -105
  75. data/.claude/commands/gemfile/update.md +0 -52
  76. data/.claude/commands/test.md +0 -561
  77. data/.claude/docs/yard.md +0 -602
  78. data/.claude/settings.local.json +0 -15
  79. data/.yardstick.yml +0 -22
@@ -0,0 +1,476 @@
1
+ ---
2
+ path: ".gem_rbs_collection"
3
+ gems:
4
+ - name: actioncable
5
+ version: '7.1'
6
+ source:
7
+ type: git
8
+ name: ruby/gem_rbs_collection
9
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
10
+ remote: https://github.com/ruby/gem_rbs_collection.git
11
+ repo_dir: gems
12
+ - name: actionmailer
13
+ version: '7.0'
14
+ source:
15
+ type: git
16
+ name: ruby/gem_rbs_collection
17
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
18
+ remote: https://github.com/ruby/gem_rbs_collection.git
19
+ repo_dir: gems
20
+ - name: actionpack
21
+ version: '7.2'
22
+ source:
23
+ type: git
24
+ name: ruby/gem_rbs_collection
25
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
26
+ remote: https://github.com/ruby/gem_rbs_collection.git
27
+ repo_dir: gems
28
+ - name: actiontext
29
+ version: '7.2'
30
+ source:
31
+ type: git
32
+ name: ruby/gem_rbs_collection
33
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
34
+ remote: https://github.com/ruby/gem_rbs_collection.git
35
+ repo_dir: gems
36
+ - name: actionview
37
+ version: '6.0'
38
+ source:
39
+ type: git
40
+ name: ruby/gem_rbs_collection
41
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
42
+ remote: https://github.com/ruby/gem_rbs_collection.git
43
+ repo_dir: gems
44
+ - name: activejob
45
+ version: '6.0'
46
+ source:
47
+ type: git
48
+ name: ruby/gem_rbs_collection
49
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
50
+ remote: https://github.com/ruby/gem_rbs_collection.git
51
+ repo_dir: gems
52
+ - name: activemodel
53
+ version: '7.1'
54
+ source:
55
+ type: git
56
+ name: ruby/gem_rbs_collection
57
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
58
+ remote: https://github.com/ruby/gem_rbs_collection.git
59
+ repo_dir: gems
60
+ - name: activerecord
61
+ version: '8.0'
62
+ source:
63
+ type: git
64
+ name: ruby/gem_rbs_collection
65
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
66
+ remote: https://github.com/ruby/gem_rbs_collection.git
67
+ repo_dir: gems
68
+ - name: activestorage
69
+ version: '7.0'
70
+ source:
71
+ type: git
72
+ name: ruby/gem_rbs_collection
73
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
74
+ remote: https://github.com/ruby/gem_rbs_collection.git
75
+ repo_dir: gems
76
+ - name: activesupport
77
+ version: '7.0'
78
+ source:
79
+ type: git
80
+ name: ruby/gem_rbs_collection
81
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
82
+ remote: https://github.com/ruby/gem_rbs_collection.git
83
+ repo_dir: gems
84
+ - name: ast
85
+ version: '2.4'
86
+ source:
87
+ type: git
88
+ name: ruby/gem_rbs_collection
89
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
90
+ remote: https://github.com/ruby/gem_rbs_collection.git
91
+ repo_dir: gems
92
+ - name: base64
93
+ version: 0.3.0
94
+ source:
95
+ type: rubygems
96
+ - name: bigdecimal
97
+ version: 4.1.2
98
+ source:
99
+ type: rubygems
100
+ - name: cgi
101
+ version: '0.5'
102
+ source:
103
+ type: git
104
+ name: ruby/gem_rbs_collection
105
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
106
+ remote: https://github.com/ruby/gem_rbs_collection.git
107
+ repo_dir: gems
108
+ - name: concurrent-ruby
109
+ version: '1.1'
110
+ source:
111
+ type: git
112
+ name: ruby/gem_rbs_collection
113
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
114
+ remote: https://github.com/ruby/gem_rbs_collection.git
115
+ repo_dir: gems
116
+ - name: connection_pool
117
+ version: '2.4'
118
+ source:
119
+ type: git
120
+ name: ruby/gem_rbs_collection
121
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
122
+ remote: https://github.com/ruby/gem_rbs_collection.git
123
+ repo_dir: gems
124
+ - name: csv
125
+ version: '3.3'
126
+ source:
127
+ type: git
128
+ name: ruby/gem_rbs_collection
129
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
130
+ remote: https://github.com/ruby/gem_rbs_collection.git
131
+ repo_dir: gems
132
+ - name: date
133
+ version: '0'
134
+ source:
135
+ type: stdlib
136
+ - name: delegate
137
+ version: '0'
138
+ source:
139
+ type: stdlib
140
+ - name: diff-lcs
141
+ version: '1.5'
142
+ source:
143
+ type: git
144
+ name: ruby/gem_rbs_collection
145
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
146
+ remote: https://github.com/ruby/gem_rbs_collection.git
147
+ repo_dir: gems
148
+ - name: digest
149
+ version: '0'
150
+ source:
151
+ type: stdlib
152
+ - name: erb
153
+ version: '0'
154
+ source:
155
+ type: stdlib
156
+ - name: ffi
157
+ version: 1.17.4
158
+ source:
159
+ type: rubygems
160
+ - name: fileutils
161
+ version: '0'
162
+ source:
163
+ type: stdlib
164
+ - name: forwardable
165
+ version: '0'
166
+ source:
167
+ type: stdlib
168
+ - name: globalid
169
+ version: '1.1'
170
+ source:
171
+ type: git
172
+ name: ruby/gem_rbs_collection
173
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
174
+ remote: https://github.com/ruby/gem_rbs_collection.git
175
+ repo_dir: gems
176
+ - name: i18n
177
+ version: '1.10'
178
+ source:
179
+ type: git
180
+ name: ruby/gem_rbs_collection
181
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
182
+ remote: https://github.com/ruby/gem_rbs_collection.git
183
+ repo_dir: gems
184
+ - name: io-console
185
+ version: '0'
186
+ source:
187
+ type: stdlib
188
+ - name: json
189
+ version: '0'
190
+ source:
191
+ type: stdlib
192
+ - name: lint_roller
193
+ version: '1.1'
194
+ source:
195
+ type: git
196
+ name: ruby/gem_rbs_collection
197
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
198
+ remote: https://github.com/ruby/gem_rbs_collection.git
199
+ repo_dir: gems
200
+ - name: listen
201
+ version: '3.9'
202
+ source:
203
+ type: git
204
+ name: ruby/gem_rbs_collection
205
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
206
+ remote: https://github.com/ruby/gem_rbs_collection.git
207
+ repo_dir: gems
208
+ - name: logger
209
+ version: '1.7'
210
+ source:
211
+ type: git
212
+ name: ruby/gem_rbs_collection
213
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
214
+ remote: https://github.com/ruby/gem_rbs_collection.git
215
+ repo_dir: gems
216
+ - name: mail
217
+ version: '2.8'
218
+ source:
219
+ type: git
220
+ name: ruby/gem_rbs_collection
221
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
222
+ remote: https://github.com/ruby/gem_rbs_collection.git
223
+ repo_dir: gems
224
+ - name: marcel
225
+ version: '1.0'
226
+ source:
227
+ type: git
228
+ name: ruby/gem_rbs_collection
229
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
230
+ remote: https://github.com/ruby/gem_rbs_collection.git
231
+ repo_dir: gems
232
+ - name: mini_mime
233
+ version: '0.1'
234
+ source:
235
+ type: git
236
+ name: ruby/gem_rbs_collection
237
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
238
+ remote: https://github.com/ruby/gem_rbs_collection.git
239
+ repo_dir: gems
240
+ - name: minitest
241
+ version: '5.25'
242
+ source:
243
+ type: git
244
+ name: ruby/gem_rbs_collection
245
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
246
+ remote: https://github.com/ruby/gem_rbs_collection.git
247
+ repo_dir: gems
248
+ - name: monitor
249
+ version: '0'
250
+ source:
251
+ type: stdlib
252
+ - name: net-protocol
253
+ version: '0'
254
+ source:
255
+ type: stdlib
256
+ - name: net-smtp
257
+ version: '0.5'
258
+ source:
259
+ type: git
260
+ name: ruby/gem_rbs_collection
261
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
262
+ remote: https://github.com/ruby/gem_rbs_collection.git
263
+ repo_dir: gems
264
+ - name: nokogiri
265
+ version: '1.11'
266
+ source:
267
+ type: git
268
+ name: ruby/gem_rbs_collection
269
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
270
+ remote: https://github.com/ruby/gem_rbs_collection.git
271
+ repo_dir: gems
272
+ - name: openssl
273
+ version: '0'
274
+ source:
275
+ type: stdlib
276
+ - name: optparse
277
+ version: '0'
278
+ source:
279
+ type: stdlib
280
+ - name: parallel
281
+ version: '1.20'
282
+ source:
283
+ type: git
284
+ name: ruby/gem_rbs_collection
285
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
286
+ remote: https://github.com/ruby/gem_rbs_collection.git
287
+ repo_dir: gems
288
+ - name: parser
289
+ version: '3.2'
290
+ source:
291
+ type: git
292
+ name: ruby/gem_rbs_collection
293
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
294
+ remote: https://github.com/ruby/gem_rbs_collection.git
295
+ repo_dir: gems
296
+ - name: pathname
297
+ version: '0'
298
+ source:
299
+ type: stdlib
300
+ - name: pp
301
+ version: '0'
302
+ source:
303
+ type: stdlib
304
+ - name: prettyprint
305
+ version: '0'
306
+ source:
307
+ type: stdlib
308
+ - name: prism
309
+ version: 1.9.0
310
+ source:
311
+ type: rubygems
312
+ - name: rack
313
+ version: '2.2'
314
+ source:
315
+ type: git
316
+ name: ruby/gem_rbs_collection
317
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
318
+ remote: https://github.com/ruby/gem_rbs_collection.git
319
+ repo_dir: gems
320
+ - name: rails-dom-testing
321
+ version: '2.0'
322
+ source:
323
+ type: git
324
+ name: ruby/gem_rbs_collection
325
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
326
+ remote: https://github.com/ruby/gem_rbs_collection.git
327
+ repo_dir: gems
328
+ - name: rails-html-sanitizer
329
+ version: '1.6'
330
+ source:
331
+ type: git
332
+ name: ruby/gem_rbs_collection
333
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
334
+ remote: https://github.com/ruby/gem_rbs_collection.git
335
+ repo_dir: gems
336
+ - name: railties
337
+ version: '6.0'
338
+ source:
339
+ type: git
340
+ name: ruby/gem_rbs_collection
341
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
342
+ remote: https://github.com/ruby/gem_rbs_collection.git
343
+ repo_dir: gems
344
+ - name: rainbow
345
+ version: '3.0'
346
+ source:
347
+ type: git
348
+ name: ruby/gem_rbs_collection
349
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
350
+ remote: https://github.com/ruby/gem_rbs_collection.git
351
+ repo_dir: gems
352
+ - name: rake
353
+ version: '13.0'
354
+ source:
355
+ type: git
356
+ name: ruby/gem_rbs_collection
357
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
358
+ remote: https://github.com/ruby/gem_rbs_collection.git
359
+ repo_dir: gems
360
+ - name: random-formatter
361
+ version: '0'
362
+ source:
363
+ type: stdlib
364
+ - name: rbs
365
+ version: 4.0.2
366
+ source:
367
+ type: rubygems
368
+ - name: rdoc
369
+ version: '0'
370
+ source:
371
+ type: stdlib
372
+ - name: regexp_parser
373
+ version: '2.8'
374
+ source:
375
+ type: git
376
+ name: ruby/gem_rbs_collection
377
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
378
+ remote: https://github.com/ruby/gem_rbs_collection.git
379
+ repo_dir: gems
380
+ - name: ripper
381
+ version: '0'
382
+ source:
383
+ type: stdlib
384
+ - name: rubocop
385
+ version: '1.57'
386
+ source:
387
+ type: git
388
+ name: ruby/gem_rbs_collection
389
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
390
+ remote: https://github.com/ruby/gem_rbs_collection.git
391
+ repo_dir: gems
392
+ - name: rubocop-ast
393
+ version: '1.46'
394
+ source:
395
+ type: git
396
+ name: ruby/gem_rbs_collection
397
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
398
+ remote: https://github.com/ruby/gem_rbs_collection.git
399
+ repo_dir: gems
400
+ - name: rubocop-yard
401
+ version: 1.2.0
402
+ source:
403
+ type: rubygems
404
+ - name: securerandom
405
+ version: '0'
406
+ source:
407
+ type: stdlib
408
+ - name: simplecov
409
+ version: '0.22'
410
+ source:
411
+ type: git
412
+ name: ruby/gem_rbs_collection
413
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
414
+ remote: https://github.com/ruby/gem_rbs_collection.git
415
+ repo_dir: gems
416
+ - name: singleton
417
+ version: '0'
418
+ source:
419
+ type: stdlib
420
+ - name: socket
421
+ version: '0'
422
+ source:
423
+ type: stdlib
424
+ - name: stringio
425
+ version: '0'
426
+ source:
427
+ type: stdlib
428
+ - name: strscan
429
+ version: '0'
430
+ source:
431
+ type: stdlib
432
+ - name: tempfile
433
+ version: '0'
434
+ source:
435
+ type: stdlib
436
+ - name: thor
437
+ version: '1.2'
438
+ source:
439
+ type: git
440
+ name: ruby/gem_rbs_collection
441
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
442
+ remote: https://github.com/ruby/gem_rbs_collection.git
443
+ repo_dir: gems
444
+ - name: time
445
+ version: '0'
446
+ source:
447
+ type: stdlib
448
+ - name: timeout
449
+ version: '0'
450
+ source:
451
+ type: stdlib
452
+ - name: tsort
453
+ version: '0'
454
+ source:
455
+ type: stdlib
456
+ - name: tzinfo
457
+ version: '2.0'
458
+ source:
459
+ type: git
460
+ name: ruby/gem_rbs_collection
461
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
462
+ remote: https://github.com/ruby/gem_rbs_collection.git
463
+ repo_dir: gems
464
+ - name: uri
465
+ version: '0'
466
+ source:
467
+ type: stdlib
468
+ - name: yard
469
+ version: '0.9'
470
+ source:
471
+ type: git
472
+ name: ruby/gem_rbs_collection
473
+ revision: 3f5e8df1ce89ea06067fa42263012c968b4e583e
474
+ remote: https://github.com/ruby/gem_rbs_collection.git
475
+ repo_dir: gems
476
+ gemfile_lock_path: Gemfile.lock
@@ -0,0 +1,21 @@
1
+ # Download sources
2
+ sources:
3
+ - type: git
4
+ name: ruby/gem_rbs_collection
5
+ remote: https://github.com/ruby/gem_rbs_collection.git
6
+ revision: main
7
+ repo_dir: gems
8
+
9
+ # You can specify local directories as sources also.
10
+ # - type: local
11
+ # path: path/to/your/local/repository
12
+
13
+ # A directory to install the downloaded RBSs
14
+ path: .gem_rbs_collection
15
+
16
+ gems:
17
+ - name: activesupport
18
+ - name: dry-struct
19
+ - name: dry-validation
20
+ - name: multi_json
21
+ - name: zeitwerk
@@ -0,0 +1,17 @@
1
+ module JSONRPC
2
+ class BatchRequest
3
+ include Enumerable[Request | Notification | Error]
4
+
5
+ attr_reader requests: Array[Request | Notification | Error]
6
+
7
+ def initialize: (Array[Request | Notification | Error]) -> void
8
+ def to_h: -> Array[symbol_hash]
9
+ def to_json: (*untyped) -> String
10
+ def each: () { (Request | Notification | Error) -> void } -> self
11
+ | () -> Enumerator[Request | Notification | Error, self]
12
+
13
+ private
14
+
15
+ def validate_requests: (Array[untyped]) -> void
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module JSONRPC
2
+ class BatchResponse
3
+ include Enumerable[Response]
4
+
5
+ attr_reader responses: Array[Response]
6
+
7
+ def initialize: (Array[Response]) -> void
8
+ def to_h: -> Array[symbol_hash]
9
+ def to_json: (*untyped) -> String
10
+ def each: () { (Response) -> void } -> self
11
+ | () -> Enumerator[Response, self]
12
+
13
+ private
14
+
15
+ def validate_responses: (Array[untyped]) -> void
16
+ end
17
+ end
@@ -0,0 +1,18 @@
1
+ module JSONRPC
2
+ class Configuration
3
+ attr_accessor logger: Logger
4
+ attr_accessor log_internal_errors: bool
5
+ attr_accessor log_request_validation_errors: bool
6
+ attr_accessor render_internal_errors: bool
7
+ attr_accessor rescue_internal_errors: bool
8
+ attr_reader validate_procedure_signatures: bool
9
+
10
+ def initialize: (?logger: Logger, ?log_internal_errors: bool, ?log_request_validation_errors: bool, ?rescue_internal_errors: bool, ?render_internal_errors: bool, ?validate_procedure_signatures: bool) -> void
11
+ def self.instance: -> Configuration
12
+ def procedure: (interned method_name, ?allow_positional_arguments: bool) ?{ () -> void } -> Configuration::Procedure
13
+ def get_procedure: (interned method_name) -> Configuration::Procedure?
14
+ def procedure?: (interned method_name) -> bool
15
+ def reset!: -> void
16
+ def json_adapter=: (Symbol?) -> void
17
+ end
18
+ end
@@ -0,0 +1,17 @@
1
+ module JSONRPC
2
+ class Error < StandardError
3
+ attr_reader code: Integer
4
+ attr_reader message: String
5
+ attr_reader data: data_type
6
+ attr_accessor request_id: Integer | String | nil
7
+
8
+ def initialize: (String message, code: Integer, ?data: data_type, ?request_id: id_type) -> void
9
+ def to_h: -> symbol_hash
10
+ def to_json: (*untyped) -> String
11
+
12
+ private
13
+
14
+ def validate_code: (Integer) -> void
15
+ def validate_message: (String) -> void
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ module JSONRPC
2
+ class InternalError < Error
3
+ def initialize: (?String message, ?data: data_type, ?request_id: id_type) -> void
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module JSONRPC
2
+ class InvalidParamsError < Error
3
+ def initialize: (?String message, ?data: data_type, ?request_id: id_type) -> void
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module JSONRPC
2
+ class InvalidRequestError < Error
3
+ def initialize: (?String message, ?data: data_type, ?request_id: id_type) -> void
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module JSONRPC
2
+ class MethodNotFoundError < Error
3
+ def initialize: (?String message, ?data: data_type, ?request_id: id_type) -> void
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module JSONRPC
2
+ class ParseError < Error
3
+ def initialize: (?String message, ?data: data_type) -> void
4
+ end
5
+ end
@@ -1,6 +1,23 @@
1
1
  module JSONRPC
2
- module Middleware
3
- VERSION: String
4
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
2
+ class Middleware
3
+ DEFAULT_PATH: String
4
+
5
+ @app: untyped
6
+ @path: String
7
+ @config: Configuration
8
+ @logger: Logger
9
+ @parser: Parser
10
+ @validator: Validator
11
+ @log_internal_errors: bool
12
+ @rescue_internal_errors: bool
13
+
14
+ def initialize: (untyped app, ?Hash[Symbol, untyped] options) -> void
15
+ def call: (Hash[String, untyped] env) -> [Integer, Hash[String, String], Array[String]]
16
+
17
+ private
18
+
19
+ def jsonrpc_request?: -> bool
20
+ def handle_jsonrpc_request: -> [Integer, Hash[String, String], Array[String]]
21
+ def log_internal_error: (Exception error) -> void
5
22
  end
6
23
  end
@@ -0,0 +1,15 @@
1
+ module JSONRPC
2
+ class Notification
3
+ attr_reader jsonrpc: String
4
+ attr_reader method: String
5
+ attr_reader params: params_type
6
+
7
+ def initialize: (method: String, ?params: params_type) -> void
8
+ def to_h: -> symbol_hash
9
+ def to_json: (*untyped) -> String
10
+
11
+ private
12
+ def validate_method: (String) -> void
13
+ def validate_params: (params_type) -> void
14
+ end
15
+ end
@@ -1,7 +1,13 @@
1
1
  module JSONRPC
2
2
  class Parser
3
+ def parse: (String json) -> (Request | Notification | BatchRequest | Error)
4
+
3
5
  private
4
6
 
5
- def parse_batch: (Array[Request | Notification] data) -> BatchRequest
7
+ def parse_single: (interned_hash data) -> (Request | Notification | Error)
8
+ def parse_batch: (Array[interned_hash] data) -> BatchRequest
9
+ def parse_single_for_batch: (interned_hash data) -> (Request | Notification)
10
+ def validate_jsonrpc_version: (interned_hash data) -> void
11
+ def validate_request_structure: (interned_hash data) -> void
6
12
  end
7
13
  end
@@ -0,0 +1,18 @@
1
+ module JSONRPC
2
+ class Request
3
+ attr_reader jsonrpc: String
4
+ attr_reader method: String
5
+ attr_reader params: params_type
6
+ attr_reader id: id_type
7
+
8
+ def initialize: (method: String, ?params: params_type, id: id_type) -> void
9
+ def to_h: -> symbol_hash
10
+ def to_json: (*untyped) -> String
11
+
12
+ private
13
+
14
+ def validate_method: (String) -> void
15
+ def validate_params: (params_type) -> void
16
+ def validate_id: (id_type) -> void
17
+ end
18
+ end
@@ -0,0 +1,19 @@
1
+ module JSONRPC
2
+ class Response
3
+ attr_reader jsonrpc: String
4
+ attr_reader result: untyped
5
+ attr_reader error: Error?
6
+ attr_reader id: id_type
7
+
8
+ def initialize: (?result: untyped, ?error: Error?, id: id_type) -> void
9
+ def success?: -> bool
10
+ def error?: -> bool
11
+ def to_h: -> symbol_hash
12
+ def to_json: (*untyped) -> String
13
+
14
+ private
15
+
16
+ def validate_result_and_error: (untyped, Error?) -> void
17
+ def validate_id: (id_type) -> void
18
+ end
19
+ end