isomorfeus-speednode 0.4.1 → 0.4.5
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/README.md +8 -8
- data/lib/isomorfeus/speednode/runner.js +13 -12
- data/lib/isomorfeus/speednode/runtime/vm.rb +9 -5
- data/lib/isomorfeus/speednode/runtime.rb +5 -5
- data/lib/isomorfeus/speednode/version.rb +5 -5
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 87a39ac56870791f30d5da2cd2421132b54360e732596b487a674fd77985bfb4
|
4
|
+
data.tar.gz: e9f56a2e8f8596e7757da194b70fe299ec63566472da5e81188a997b6fb54558
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5710791bcc21e6694223d430ef943d526819a7159442003285ab0e12c07cf168856394a2eaf825edd82aca5d96b3da609322694237d9cbb069e4a25d97ddf63
|
7
|
+
data.tar.gz: 1dac21aab4f330ba546ae5389facd15858120109ae7996b955108c39bbb004f72ca612c63c8fd78b485c4a723fd9c03ddc6bdeddaf87766f92b213090c51e37a
|
data/README.md
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
|
1
|
+
<h1 align="center">
|
2
|
+
<img src="https://github.com/isomorfeus/isomorfeus-speednode/blob/master/Logo.png?raw=true" align="center" width="234" height="127"/><br/>
|
3
|
+
Isomorfeus Speednode<br/>
|
4
|
+
</h1>
|
2
5
|
|
3
6
|
A fast runtime for execjs using node js. Works on Linux, BSDs, MacOS and Windows.
|
4
7
|
Inspired by [execjs-fastnode](https://github.com/jhawthorn/execjs-fastnode).
|
5
8
|
|
6
9
|
### Community and Support
|
7
|
-
At the [Isomorfeus Framework Project](http://isomorfeus.com)
|
8
|
-
|
9
|
-
### Tested
|
10
|
-
[TravisCI](https://travis-ci.org): [](https://travis-ci.org/isomorfeus/isomorfeus-speednode)
|
10
|
+
At the [Isomorfeus Framework Project](http://isomorfeus.com)
|
11
11
|
|
12
12
|
### Installation
|
13
13
|
|
@@ -40,8 +40,8 @@ Example for a compatible context:
|
|
40
40
|
compat_context = ExecJS.compile('Test = "test"')
|
41
41
|
compat_context.eval('1+1')
|
42
42
|
```
|
43
|
-
#### Permissive
|
44
|
-
A permissive context can be created with `ExecJS.permissive_compile` or code can be executed within a permissive context by using
|
43
|
+
#### Permissive
|
44
|
+
A permissive context can be created with `ExecJS.permissive_compile` or code can be executed within a permissive context by using
|
45
45
|
`ExecJS.permissive_eval` or `ExecJS.permissive_exec`.
|
46
46
|
Example for a permissive context:
|
47
47
|
```ruby
|
@@ -63,7 +63,7 @@ context.eval <<~JAVASCRIPT
|
|
63
63
|
return new Promise(function (resolve, reject) { resolve(val); });
|
64
64
|
}
|
65
65
|
JAVASCRIPT
|
66
|
-
|
66
|
+
|
67
67
|
context.await("foo('test')") # => 'test'
|
68
68
|
```
|
69
69
|
|
@@ -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')
|
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')
|
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')
|
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({
|
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')
|
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;
|
@@ -322,5 +323,5 @@ let server = net.createServer(function(s) {
|
|
322
323
|
});
|
323
324
|
});
|
324
325
|
|
325
|
-
if (os.platform().indexOf('win')
|
326
|
+
if (os.platform().indexOf('win') == 0) { server.listen('\\\\.\\pipe\\' + socket_path); }
|
326
327
|
else { server.listen(socket_path); }
|
@@ -56,7 +56,7 @@ module Isomorfeus
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def self.finalize(socket, socket_dir, socket_path, pid)
|
59
|
-
proc do
|
59
|
+
proc do
|
60
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
|
@@ -97,7 +97,7 @@ module Isomorfeus
|
|
97
97
|
|
98
98
|
def attach(context, func)
|
99
99
|
create_responder(context) unless responder
|
100
|
-
command("attach", {'context' => context, 'func' => func })
|
100
|
+
command("attach", {'context' => context, 'func' => func })
|
101
101
|
end
|
102
102
|
|
103
103
|
def delete_context(context)
|
@@ -125,14 +125,18 @@ module Isomorfeus
|
|
125
125
|
@socket_dir = Dir.mktmpdir("isomorfeus-speednode-")
|
126
126
|
@socket_path = File.join(@socket_dir, "socket")
|
127
127
|
end
|
128
|
-
@pid =
|
128
|
+
@pid = if @options.key?(:source_maps)
|
129
|
+
Process.spawn({"SOCKET_PATH" => @socket_path}, @options[:binary], @options[:source_maps], @options[:runner_path])
|
130
|
+
else
|
131
|
+
Process.spawn({"SOCKET_PATH" => @socket_path}, @options[:binary], @options[:runner_path])
|
132
|
+
end
|
129
133
|
|
130
|
-
retries =
|
134
|
+
retries = 100
|
131
135
|
|
132
136
|
if ExecJS.windows?
|
133
137
|
timeout_or_connected = false
|
134
138
|
begin
|
135
|
-
retries -= 1
|
139
|
+
retries -= 1
|
136
140
|
begin
|
137
141
|
@socket = Win32::Pipe::Client.new(@socket_path, Win32::Pipe::ACCESS_DUPLEX)
|
138
142
|
rescue
|
@@ -22,11 +22,11 @@ module Isomorfeus
|
|
22
22
|
@encoding = options[:encoding]
|
23
23
|
@deprecated = !!options[:deprecated]
|
24
24
|
|
25
|
-
@vm =
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
25
|
+
@vm = if Gem::Platform.local.cpu.start_with?('arm')
|
26
|
+
VM.new(binary: @binary, runner_path: @runner_path)
|
27
|
+
else
|
28
|
+
VM.new(binary: @binary, source_maps: '--enable-source-maps', runner_path: @runner_path)
|
29
|
+
end
|
30
30
|
|
31
31
|
@popen_options = {}
|
32
32
|
@popen_options[:external_encoding] = @encoding if @encoding
|
@@ -1,5 +1,5 @@
|
|
1
|
-
module Isomorfeus
|
2
|
-
module Speednode
|
3
|
-
VERSION = '0.4.
|
4
|
-
end
|
5
|
-
end
|
1
|
+
module Isomorfeus
|
2
|
+
module Speednode
|
3
|
+
VERSION = '0.4.5'
|
4
|
+
end
|
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.
|
4
|
+
version: 0.4.5
|
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-
|
11
|
+
date: 2021-11-19 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.
|
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.
|
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.
|
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.
|