isomorfeus-speednode 0.4.0 → 0.4.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9ae800090e3226f94d53570baf613f33123e4f95bbb3e384b33d373a17328b60
4
- data.tar.gz: 3036d03ea6149df04d5cb53c6d2058893e6d2a61a2ea96f0a24c1d3b694705a0
3
+ metadata.gz: 1a2f7d96883b92de64ef9d3432854caba940a961a38bc4c22067c33eb8e6c9cd
4
+ data.tar.gz: 82bdc61da0e3aa48348e59d600e6d39658b7e6fd04f17f00b89cbf0db4986e38
5
5
  SHA512:
6
- metadata.gz: 13ccaa36e365de0b48dbc5124f8f4ff3ef123ca2177d745c895828aa5037c2d6dba1510803cb2434358117ddd3824c854bc3a44df72c5ca684176077f109c3c8
7
- data.tar.gz: e66f98d834d55218c99744b66bde19a680506fd543093e1a0316234480aa46c880262cf33f16cc3722df6a31255c4f8059f4914e4ce40d9485de4233d7aeb282
6
+ metadata.gz: 6944313b70b37a8fcea6598d4b83e437b644e86ce63a5989b7ce6d55d8f8786eafa33a629bfafbd2c5ee9be167967128e03ab82cb93f873f6f0bd70877bd9fd3
7
+ data.tar.gz: e06a2a69e670619b5660c9da30d14d7b4f6a8a34d1688ebac88c597bc411c2ef78d8f949496829602f329afd58c7a3c1ccd4e7a3a306be5567b9dbd45e7668c2
@@ -135,7 +135,7 @@ function attachFunctionSource(responder_path, context, func) {
135
135
  if (!global.__responder_socket) {\n\
136
136
  return new Promise(function(resolve, reject) {\n\
137
137
  setTimeout(function(){\n\
138
- if (os.platform().indexOf('win') > -1) {\n\
138
+ if (os.platform().indexOf('win') == 0) {\n\
139
139
  let socket = net.connect(responder_path);\n\
140
140
  socket.on('connect', function(){\n\
141
141
  global.__responder_socket = true;\n\
@@ -160,9 +160,9 @@ function attachFunctionSource(responder_path, context, func) {
160
160
  socket.on('error', function (err) {\n\
161
161
  if (err.syscall === 'connect') {\n\
162
162
  // ignore, close will handle\n\
163
- } else if (os.platform().indexOf('win') > -1 && err.message.includes('read EPIPE')) {\n\
163
+ } else if ((os.platform().indexOf('win') == 0) && err.message.includes('read EPIPE')) {\n\
164
164
  // ignore, close will handle\n\
165
- } else if (os.platform().indexOf('win') > -1 && err.message.includes('write EPIPE')) {\n\
165
+ } else if ((os.platform().indexOf('win') == 0) && err.message.includes('write EPIPE')) {\n\
166
166
  // ignore, close will handle\n\
167
167
  } else { reject(err); }\n\
168
168
  });\n\
@@ -200,7 +200,8 @@ function createCompatibleContext(uuid, options) {
200
200
  }
201
201
 
202
202
  function createPermissiveContext(uuid, options) {
203
- let c = vm.createContext({ global: { __responder_socket: false }, process: { release: { name: "node" }, env: process.env }, Buffer, clearTimeout, fs, net, os, require, setTimeout });
203
+ let c = vm.createContext({ __responder_socket: false, process: { release: { name: "node" }, env: process.env }, Buffer, clearTimeout, fs, net, os, require, setTimeout });
204
+ vm.runInContext('global = globalThis;', c);
204
205
  contexts[uuid] = { context: c, options: options };
205
206
  return c;
206
207
  }
@@ -223,7 +224,7 @@ function getContextOptions(uuid) {
223
224
  if (contexts[uuid].options.timeout) {
224
225
  options.timeout = contexts[uuid].options.timeout;
225
226
  }
226
- return options;
227
+ return options;
227
228
  }
228
229
 
229
230
  function massageStackTrace(stack) {
@@ -241,7 +242,7 @@ let commands = {
241
242
  attach: function(input) {
242
243
  let context = getContext(input.context);
243
244
  let responder_path;
244
- if (os.platform().indexOf('win') > -1) { responder_path = '\\\\\\\\.\\\\pipe\\\\' + socket_path + '_responder'; }
245
+ if (os.platform().indexOf('win') == 0) { responder_path = '\\\\\\\\.\\\\pipe\\\\' + socket_path + '_responder'; }
245
246
  else { responder_path = socket_path + '_responder' }
246
247
  let result = vm.runInContext(attachFunctionSource(responder_path, input.context, input.func), context, { filename: "(execjs)", displayErrors: true });
247
248
  return formatResult(result);
@@ -285,23 +286,23 @@ let server = net.createServer(function(s) {
285
286
  s.on('data', function (data) {
286
287
  received_data.push(data);
287
288
  if (data[data.length - 1] !== 4) { return; }
288
-
289
+
289
290
  let request = received_data.join('').toString('utf8');
290
291
  request = request.substr(0, request.length - 1);
291
292
  received_data = [];
292
-
293
+
293
294
  let input, result;
294
295
  let outputJSON = '';
295
296
 
296
297
  try { input = JSON.parse(request); }
297
- catch(err) {
298
+ catch(err) {
298
299
  outputJSON = JSON.stringify(['err', ['', err].join(''), err.stack]);
299
300
  s.write([outputJSON, "\x04"].join(''));
300
301
  return;
301
302
  }
302
303
 
303
- try { result = commands[input.cmd].apply(null, input.args); }
304
- catch (err) {
304
+ try { result = commands[input.cmd].apply(null, input.args); }
305
+ catch (err) {
305
306
  outputJSON = JSON.stringify(['err', ['', err].join(''), massageStackTrace(err.stack)]);
306
307
  s.write([outputJSON, "\x04"].join(''));
307
308
  return;
@@ -312,13 +313,15 @@ let server = net.createServer(function(s) {
312
313
  if (err.message.includes('circular')) { outputJSON = CircularJSON.stringify(result); }
313
314
  else { outputJSON = JSON.stringify([['', err].join(''), err.stack]); }
314
315
  s.write([outputJSON, "\x04"].join(''));
316
+ if (process_exit !== false) { process.exit(process_exit); }
315
317
  return;
316
318
  }
317
319
 
318
- s.write([outputJSON, "\x04"].join(''));
320
+ try { s.write([outputJSON, "\x04"].join('')); }
321
+ catch (err) {}
319
322
  if (process_exit !== false) { process.exit(process_exit); }
320
323
  });
321
324
  });
322
325
 
323
- if (os.platform().indexOf('win') > -1) { server.listen('\\\\.\\pipe\\' + socket_path); }
326
+ if (os.platform().indexOf('win') == 0) { server.listen('\\\\.\\pipe\\' + socket_path); }
324
327
  else { server.listen(socket_path); }
@@ -56,8 +56,8 @@ module Isomorfeus
56
56
  end
57
57
 
58
58
  def self.finalize(socket, socket_dir, socket_path, pid)
59
- proc do
60
- Isomorfeus::Speednode::Runtime.responders(socket_path).kill if Isomorfeus::Speednode::Runtime.responders(socket_path)
59
+ proc do
60
+ Isomorfeus::Speednode::Runtime.responders[socket_path].kill if Isomorfeus::Speednode::Runtime.responders[socket_path]
61
61
  exit_node(socket, socket_dir, socket_path, pid)
62
62
  end
63
63
  end
@@ -65,14 +65,18 @@ module Isomorfeus
65
65
  def self.exit_node(socket, socket_dir, socket_path, pid)
66
66
  VMCommand.new(socket, "exit", [0]).execute
67
67
  socket.close
68
- File.unlink(socket_path)
69
- Dir.rmdir(socket_dir)
68
+ File.unlink(socket_path) if File.exist?(socket_path)
69
+ Dir.rmdir(socket_dir) if socket_dir && Dir.exist?(socket_dir)
70
70
  if Gem.win_platform?
71
71
  # SIGINT or SIGKILL are unreliable on Windows, try native taskkill first
72
- Process.kill('KILL', pid) unless system("taskkill /f /t /pid #{pid} >NUL 2>NUL")
72
+ unless system("taskkill /f /t /pid #{pid} >NUL 2>NUL")
73
+ Process.kill('KILL', pid) rescue nil
74
+ end
73
75
  else
74
- Process.kill 'KILL', pid
76
+ Process.kill('KILL', pid) rescue nil
75
77
  end
78
+ rescue
79
+ nil
76
80
  end
77
81
 
78
82
  def eval(context, source)
@@ -93,7 +97,7 @@ module Isomorfeus
93
97
 
94
98
  def attach(context, func)
95
99
  create_responder(context) unless responder
96
- command("attach", {'context' => context, 'func' => func })
100
+ command("attach", {'context' => context, 'func' => func })
97
101
  end
98
102
 
99
103
  def delete_context(context)
@@ -123,12 +127,12 @@ module Isomorfeus
123
127
  end
124
128
  @pid = Process.spawn({"SOCKET_PATH" => @socket_path}, @options[:binary], @options[:source_maps], @options[:runner_path])
125
129
 
126
- retries = 20
130
+ retries = 100
127
131
 
128
132
  if ExecJS.windows?
129
133
  timeout_or_connected = false
130
134
  begin
131
- retries -= 1
135
+ retries -= 1
132
136
  begin
133
137
  @socket = Win32::Pipe::Client.new(@socket_path, Win32::Pipe::ACCESS_DUPLEX)
134
138
  rescue
@@ -159,6 +163,7 @@ module Isomorfeus
159
163
  end
160
164
 
161
165
  ObjectSpace.define_finalizer(self, self.class.finalize(@socket, @socket_dir, @socket_path, @pid))
166
+ Kernel.at_exit { self.class.finalize(@socket, @socket_dir, @socket_path, @pid).call }
162
167
  end
163
168
 
164
169
  def create_responder(context)
@@ -1,5 +1,5 @@
1
1
  module Isomorfeus
2
2
  module Speednode
3
- VERSION = '0.4.0'
3
+ VERSION = '0.4.4'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isomorfeus-speednode
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-03 00:00:00.000000000 Z
11
+ date: 2021-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: execjs
@@ -28,28 +28,28 @@ dependencies:
28
28
  name: oj
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 3.13.3
33
+ version: 3.13.9
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 3.13.3
40
+ version: 3.13.9
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: win32-pipe
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: 0.4.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.4.0
55
55
  - !ruby/object:Gem::Dependency
@@ -150,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
150
150
  - !ruby/object:Gem::Version
151
151
  version: '0'
152
152
  requirements: []
153
- rubygems_version: 3.2.15
153
+ rubygems_version: 3.2.22
154
154
  signing_key:
155
155
  specification_version: 4
156
156
  summary: A fast ExecJS runtime based on nodejs, tuned for Isomorfeus.