isomorfeus-speednode 0.4.10 → 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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc7add59924aa8a26faab4104731a2a2a5370f1a019417105206cb0dc38fd533
|
4
|
+
data.tar.gz: 239f6c6e4f2cf18caffca1b755c41d78c76e8d4fdcefdb319d18d6acdf9c8963
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77e34c80ccf9ad930f74e57efdc2529c7f91cde1b5b1b91a1ffe3cae33c7f4033c489cb19b788e50d13236a64dba994e55f842825e0ed63cf71f7b3046d91481
|
7
|
+
data.tar.gz: d2cef10f4eab5e96fbffd7c8f7b3c3cef3b7a351467dcd76485d779812a514d944d32a0a0b44fb8fe083fe457a54bd94cd4808f3b9a782ce394e30ed117c9111
|
data/README.md
CHANGED
@@ -53,6 +53,15 @@ Evaluation in a permissive context:
|
|
53
53
|
ExecJS.permissive_eval('1+1')
|
54
54
|
```
|
55
55
|
|
56
|
+
### Storing scripts for repeated execution
|
57
|
+
|
58
|
+
Scripts can be precompiled and stored for repeated execution, which leads to a significant performance improvement, especially for larger scripts:
|
59
|
+
```ruby
|
60
|
+
context = ExecJS.compile('Test = "test"')
|
61
|
+
context.add_script(key: 'super', source: some_large_javascript) # will compile and store the script
|
62
|
+
context.eval_script(:key: 'super') # will run the precompiled script in the context
|
63
|
+
```
|
64
|
+
|
56
65
|
### Async function support
|
57
66
|
|
58
67
|
Its possible to call async functions synchronously from ruby using Context#await:
|
@@ -10,6 +10,7 @@ try {
|
|
10
10
|
} catch (err) {}
|
11
11
|
const crypto = crypto_var;
|
12
12
|
let contexts = {};
|
13
|
+
let scripts = {};
|
13
14
|
let process_exit = false;
|
14
15
|
|
15
16
|
/*** circular-json, originally taken from https://raw.githubusercontent.com/WebReflection/circular-json/
|
@@ -280,6 +281,17 @@ let commands = {
|
|
280
281
|
let result = vm.runInContext(input.source, getContext(input.context), getContextOptions(input.context));
|
281
282
|
return formatResult(result);
|
282
283
|
},
|
284
|
+
scsc: function (input) {
|
285
|
+
if (input.source.match(/^\s*{/)) { input.source = "(" + input.source + ")"; }
|
286
|
+
else if (input.source.match(/^\s*function\s*\(/)) { input.source = "(" + input.source + ")"; }
|
287
|
+
scripts[input.context] = {};
|
288
|
+
scripts[input.context][input.key] = new vm.Script(input.source);
|
289
|
+
return formatResult(true);
|
290
|
+
},
|
291
|
+
evsc: function(input) {
|
292
|
+
let result = scripts[input.context][input.key].runInContext(getContext(input.context));
|
293
|
+
return formatResult(result);
|
294
|
+
},
|
283
295
|
// ctxo: function (input) {
|
284
296
|
// return formatResult(getContextOptions(input.context));
|
285
297
|
// },
|
@@ -7,7 +7,6 @@ module Isomorfeus
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def initialize(runtime, source = "", options = {})
|
10
|
-
|
11
10
|
@runtime = runtime
|
12
11
|
@uuid = SecureRandom.uuid
|
13
12
|
@permissive = !!options.delete(:permissive)
|
@@ -69,6 +68,14 @@ module Isomorfeus
|
|
69
68
|
raw_exec("(function(){#{source}})()")
|
70
69
|
end
|
71
70
|
|
71
|
+
def eval_script(key:)
|
72
|
+
extract_result(@vm.evsc(@uuid, key))
|
73
|
+
end
|
74
|
+
|
75
|
+
def add_script(key:, source:)
|
76
|
+
extract_result(@vm.scsc(@uuid, key, encode(source)))
|
77
|
+
end
|
78
|
+
|
72
79
|
def permissive?
|
73
80
|
@permissive
|
74
81
|
end
|
@@ -89,7 +96,6 @@ module Isomorfeus
|
|
89
96
|
extract_result(@vm.eval(@uuid, encode(source)))
|
90
97
|
end
|
91
98
|
|
92
|
-
|
93
99
|
def raw_exec(source)
|
94
100
|
extract_result(@vm.exec(@uuid, encode(source)))
|
95
101
|
end
|
@@ -79,25 +79,33 @@ module Isomorfeus
|
|
79
79
|
nil
|
80
80
|
end
|
81
81
|
|
82
|
+
def evsc(context, key)
|
83
|
+
command('evsc', { 'context' => context, 'key' => key })
|
84
|
+
end
|
85
|
+
|
86
|
+
def scsc(context, key, source)
|
87
|
+
command('scsc', { 'context' => context, 'key' => key, 'source' => source })
|
88
|
+
end
|
89
|
+
|
82
90
|
def eval(context, source)
|
83
|
-
command(
|
91
|
+
command('eval', {'context' => context, 'source' => source})
|
84
92
|
end
|
85
93
|
|
86
94
|
def exec(context, source)
|
87
|
-
command(
|
95
|
+
command('exec', {'context' => context, 'source' => source})
|
88
96
|
end
|
89
97
|
|
90
98
|
def create(context, source, options)
|
91
|
-
command(
|
99
|
+
command('create', {'context' => context, 'source' => source, 'options' => options})
|
92
100
|
end
|
93
101
|
|
94
102
|
def createp(context, source, options)
|
95
|
-
command(
|
103
|
+
command('createp', {'context' => context, 'source' => source, 'options' => options})
|
96
104
|
end
|
97
105
|
|
98
106
|
def attach(context, func)
|
99
107
|
create_responder(context) unless responder
|
100
|
-
command(
|
108
|
+
command('attach', {'context' => context, 'func' => func })
|
101
109
|
end
|
102
110
|
|
103
111
|
def delete_context(context)
|