jscall 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dad6ca4017b93ba7f1675b3d1e3727a143d5e413f86d9f000966f7eae9306d06
4
- data.tar.gz: e50ef13d47441f195194e4a36886b506266f87339f9d7bbf7f5b9d79dc500814
3
+ metadata.gz: 1df05fa2e6cee8575b7cdf9a95d35c264422d66c1c793f71e620462380a891bc
4
+ data.tar.gz: 4bae39ef37ec190d8c6b87fb4541c0ec4f074b7c5b09eeecc1d92a4a47dd570c
5
5
  SHA512:
6
- metadata.gz: 16a7885d6e0e5ef993a9f8ea43a6dc2bcfe78624f20cd10517642c00f59525b1edab1a91ab99367f962d3f63ba5a5c6705bf7cad915673613fb9ee805358baeb
7
- data.tar.gz: 1f7d95224652882839fd9bce1d4fd539021980018ecc1cca73aed56e598a2c034b8800cdfb88cc6ffd4b09f6488867e33335e8180f7e5e81aa29663ebdc6a5d4
6
+ metadata.gz: 16c12783ff80fefb85e4453ca09b54faf4b614895157f4e57108379a51ef0ebbacc2fb38ddff7d87faef50a5c3880a6690cfeb03dc5e5d67be447e36236475af
7
+ data.tar.gz: a5b57ae8e5d7d891648d457ed32f481ea1b0d528d973e693e164f5053e39f6bfce235148fc22990a53e52e5d7ceaa5eb91dc3297b4b89b8a7af90aa47b88ff54
data/README.md CHANGED
@@ -392,6 +392,22 @@ Jscall.config()
392
392
 
393
393
  ### Other configurations
394
394
 
395
+ To obtain more detailed error messages,
396
+ set a debugging level to 10.
397
+ In Ruby,
398
+
399
+ ```
400
+ Jscall.debug = 10
401
+ ```
402
+
403
+ In JavaScript,
404
+
405
+ ```
406
+ Ruby.setDebugLevel(10)
407
+ ```
408
+
409
+ The default debugging level is 0.
410
+
395
411
  To change the name of the node command,
396
412
 
397
413
  ```
data/Rakefile CHANGED
@@ -6,7 +6,11 @@ require "rake/testtask"
6
6
  Rake::TestTask.new(:test) do |t|
7
7
  t.libs << "test"
8
8
  t.libs << "lib"
9
- t.test_files = FileList["test/**/test_*.rb"]
9
+ files = FileList["test/**/test_*.rb"]
10
+ unless /linux/ =~ RbConfig::CONFIG['host_os']
11
+ files.exclude "test/test_sync_io.rb"
12
+ end
13
+ t.test_files = files
10
14
  end
11
15
 
12
16
  task default: :test
data/lib/jscall/main.mjs CHANGED
@@ -1,5 +1,12 @@
1
1
  // Copyright (C) 2022- Shigeru Chiba. All rights reserved.
2
2
 
3
+ let debug_level = 0
4
+
5
+ // debug level is 0 (default) or 10.
6
+ export const setDebugLevel = d => {
7
+ debug_level = d
8
+ }
9
+
3
10
  export const cmd_eval = 1
4
11
  export const cmd_call = 2
5
12
  export const cmd_reply = 3
@@ -199,6 +206,9 @@ export const funcall_from_ruby = cmd => {
199
206
  const receiver = decode_obj(cmd[2])
200
207
  const name = cmd[3]
201
208
  const args = cmd[4].map(e => decode_obj(e))
209
+ if (debug_level >= 10)
210
+ console.error(`RubyToJS> ${name} ${cmd[1]}`)
211
+
202
212
  if (name.endsWith('=')) {
203
213
  const name2 = name.substring(0, name.length - 1)
204
214
  if (receiver === null)
@@ -219,8 +229,8 @@ export const funcall_from_ruby = cmd => {
219
229
  }
220
230
  else {
221
231
  const f = Reflect.get(receiver, name)
222
- if (f)
223
- if (typeof f === 'function')
232
+ if (f !== undefined)
233
+ if (typeof f === 'function' && !(f instanceof RemoteRef))
224
234
  return Reflect.apply(f, receiver, args)
225
235
  else if (args.length === 0)
226
236
  return f // obtain a propety
@@ -252,8 +262,10 @@ export const reply = (message_id, value, sync_mode) => {
252
262
  }
253
263
  }
254
264
 
255
- export const reply_error = (message_id, e) => {
256
- const cmd = reply_with_piggyback([cmd_reply, message_id, encode_error(e)])
265
+ export const reply_error = (message_id, error) => {
266
+ const msg = typeof error === 'string' ? error : error.toString() +
267
+ '\n ---\n' + error.stack
268
+ const cmd = reply_with_piggyback([cmd_reply, message_id, encode_error(msg)])
257
269
  stdout_puts(JSON.stringify(cmd))
258
270
  }
259
271
 
@@ -304,6 +316,9 @@ let funcall_to_ruby = (receiver_id, name, args) => {
304
316
  const cmd = make_cmd_call(receiver_id, name, args)
305
317
  const message_id = cmd[1]
306
318
  callback_stack.push([message_id, resolve, reject])
319
+ if (debug_level >= 10)
320
+ console.error(`JStoRuby< ${name} ${message_id}`)
321
+
307
322
  stdout_puts(JSON.stringify(cmd))
308
323
  })
309
324
  }
@@ -475,9 +490,7 @@ export const start = async (stdin, use_stdout) => {
475
490
  else // cmd_retry and other unknown commands
476
491
  reply_error(cmd[1], `invalid command ${cmd[0]}`)
477
492
  } catch (error) {
478
- const msg = typeof error === 'string' ? error : error.toString() +
479
- '\n ---\n' + error.stack
480
- reply_error(cmd[1], msg)
493
+ reply_error(cmd[1], error)
481
494
  }
482
495
  }
483
496
  }
@@ -3,5 +3,5 @@
3
3
  # Copyright (C) 2022- Shigeru Chiba. All rights reserved.
4
4
 
5
5
  module Jscall
6
- VERSION = "1.2.0"
6
+ VERSION = "1.3.0"
7
7
  end
data/lib/jscall.rb CHANGED
@@ -393,13 +393,15 @@ module Jscall
393
393
  if reply[1] != message_id
394
394
  send_reply(reply[1], nil, false, CMD_REJECT)
395
395
  else
396
- result = @pending_replies.delete(message_id)
397
- if result.nil?
398
- raise RuntimeError.new("bad CMD_RETRY: #{reply}")
399
- elsif result.is_a?(JavaScriptError)
400
- raise result
396
+ if @pending_replies.key?(message_id)
397
+ result = @pending_replies.delete(message_id)
398
+ if result.is_a?(JavaScriptError)
399
+ raise result
400
+ else
401
+ return result
402
+ end
401
403
  else
402
- return result
404
+ raise RuntimeError.new("bad CMD_RETRY: #{reply}")
403
405
  end
404
406
  end
405
407
  else
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jscall
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shigeru Chiba
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-23 00:00:00.000000000 Z
11
+ date: 2022-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: webrick