quickjs 0.2.0 → 0.2.1
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 +30 -24
- data/ext/quickjsrb/quickjsrb.c +1 -1
- data/lib/quickjs/version.rb +1 -1
- data/lib/quickjs.rb +23 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7afae8229fda495f4a4c40c5c3ec1527bbb5491f23cd46ac1cf7d94badaa6a8b
|
4
|
+
data.tar.gz: 62abbf8909cabf1e5d22b7228eda4fe3bd2193122573ad38b6491a7e60c142e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6fad5187a6672299187de72faf8ccb3cc5402858c65a12edb808ae5759c1665ec90c75cbc34194b9d81e28c4ca5b8616de9174cbac060ba74da4509a28b21d85
|
7
|
+
data.tar.gz: dd8505b9ac5459fa2a2859cb1108b27861efcd59f234290ec43c4e2dc80e8ee61ea1ae34dba2f013036b495bcf6e9013f0fad0822a5249a43f7eba7cd3864251
|
data/README.md
CHANGED
@@ -36,7 +36,10 @@ Quickjs.eval_code('const obj = {}; obj.missingKey;') # => :undefined (Quickjs::V
|
|
36
36
|
Quickjs.eval_code("Number('whatever')") #=> :NaN (Quickjs::Value::NAN)
|
37
37
|
```
|
38
38
|
|
39
|
-
|
39
|
+
<details>
|
40
|
+
<summary>Options</summary>
|
41
|
+
|
42
|
+
#### Resources
|
40
43
|
|
41
44
|
```rb
|
42
45
|
# 1GB memory limit
|
@@ -46,20 +49,21 @@ Quickjs.eval_code(code, { memory_limit: 1024 ** 3 })
|
|
46
49
|
Quickjs.eval_code(code, { max_stack_size: 1024 ** 2 })
|
47
50
|
```
|
48
51
|
|
49
|
-
####
|
52
|
+
#### Built-in modules
|
53
|
+
|
54
|
+
To enable [std module](https://bellard.org/quickjs/quickjs.html#std-module) and [os module](https://bellard.org/quickjs/quickjs.html#os-module) selectively.
|
50
55
|
|
51
56
|
```rb
|
52
57
|
# enable std module
|
53
|
-
# https://bellard.org/quickjs/quickjs.html#std-module
|
54
58
|
Quickjs.eval_code(code, { features: [Quickjs::MODULE_STD] })
|
55
59
|
|
56
60
|
# enable os module
|
57
|
-
# https://bellard.org/quickjs/quickjs.html#os-module
|
58
61
|
Quickjs.eval_code(code, { features: [Quickjs::MODULE_OS] })
|
59
62
|
|
60
|
-
# enable timeout features `setTimeout`, `clearTimeout`
|
63
|
+
# enable timeout features `setTimeout`, `clearTimeout` from os module specifically
|
61
64
|
Quickjs.eval_code(code, { features: [Quickjs::FEATURES_TIMEOUT] })
|
62
65
|
```
|
66
|
+
</details>
|
63
67
|
|
64
68
|
### `Quickjs::VM`: Maintain a consistent VM/runtime
|
65
69
|
|
@@ -71,7 +75,10 @@ vm.eval_code('a.b = "d";')
|
|
71
75
|
vm.eval_code('a.b;') #=> "d"
|
72
76
|
```
|
73
77
|
|
74
|
-
|
78
|
+
<details>
|
79
|
+
<summary>Config VM/runtime</summary>
|
80
|
+
|
81
|
+
#### Resources
|
75
82
|
|
76
83
|
```rb
|
77
84
|
vm = Quickjs::VM.new(
|
@@ -80,31 +87,30 @@ vm = Quickjs::VM.new(
|
|
80
87
|
)
|
81
88
|
```
|
82
89
|
|
90
|
+
#### Built-in modules
|
91
|
+
|
92
|
+
To enable [std module](https://bellard.org/quickjs/quickjs.html#std-module) and [os module](https://bellard.org/quickjs/quickjs.html#os-module) selectively.
|
93
|
+
|
83
94
|
```rb
|
84
95
|
# enable std module
|
85
|
-
|
86
|
-
vm = Quickjs::VM.new(
|
87
|
-
features: [::Quickjs::MODULE_STD],
|
88
|
-
)
|
96
|
+
vm = Quickjs::VM.new(features: [::Quickjs::MODULE_STD])
|
89
97
|
|
90
98
|
# enable os module
|
91
|
-
|
92
|
-
vm = Quickjs::VM.new(
|
93
|
-
features: [::Quickjs::MODULE_OS],
|
94
|
-
)
|
95
|
-
|
96
|
-
# `eval_code` will be interrupted after 1 sec (default: 100 msec)
|
97
|
-
vm = Quickjs::VM.new(
|
98
|
-
timeout_msec: 1_000,
|
99
|
-
)
|
99
|
+
vm = Quickjs::VM.new(features: [::Quickjs::MODULE_OS])
|
100
100
|
|
101
101
|
# enable timeout features `setTimeout`, `clearTimeout`
|
102
|
-
vm = Quickjs::VM.new(
|
103
|
-
|
104
|
-
|
102
|
+
vm = Quickjs::VM.new(features: [::Quickjs::FEATURES_TIMEOUT])
|
103
|
+
```
|
104
|
+
|
105
|
+
#### VM timeout
|
106
|
+
|
107
|
+
```rb
|
108
|
+
# `eval_code` will be interrupted after 1 sec (default: 100 msec)
|
109
|
+
vm = Quickjs::VM.new(timeout_msec: 1_000)
|
105
110
|
```
|
111
|
+
</details>
|
106
112
|
|
107
|
-
####
|
113
|
+
#### `Quickjs::VM#import`: 🔌 Import ESM from a source code
|
108
114
|
|
109
115
|
```rb
|
110
116
|
vm = Quickjs::VM.new
|
@@ -114,7 +120,7 @@ vm.eval_code("aliasedDefault()") #=> Exported `default` of the ESM is called
|
|
114
120
|
vm.eval_code("member()") #=> Exported `member` of the ESM is called
|
115
121
|
```
|
116
122
|
|
117
|
-
####
|
123
|
+
#### `Quickjs::VM#define_function`: 💎 Define a global function for JS by Ruby
|
118
124
|
|
119
125
|
```rb
|
120
126
|
vm = Quickjs::VM.new
|
data/ext/quickjsrb/quickjsrb.c
CHANGED
@@ -531,7 +531,7 @@ static VALUE vm_m_import(int argc, VALUE *argv, VALUE r_self)
|
|
531
531
|
rb_scan_args(argc, argv, "10:", &r_import_string, &r_opts);
|
532
532
|
if (NIL_P(r_opts))
|
533
533
|
r_opts = rb_hash_new();
|
534
|
-
VALUE r_from = rb_hash_aref(r_opts, ID2SYM(rb_intern("from")));
|
534
|
+
VALUE r_from = rb_hash_aref(r_opts, ID2SYM(rb_intern("from"))); // TODO: Use kwargs instead
|
535
535
|
if (NIL_P(r_from))
|
536
536
|
{
|
537
537
|
VALUE r_error_message = rb_str_new2("missing import source");
|
data/lib/quickjs/version.rb
CHANGED
data/lib/quickjs.rb
CHANGED
@@ -23,15 +23,30 @@ module Quickjs
|
|
23
23
|
end
|
24
24
|
module_function :_with_timeout
|
25
25
|
|
26
|
-
def _build_import(
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
def _build_import(imported)
|
27
|
+
code_define_global = ->(name) { "globalThis['#{name}'] = #{name};" }
|
28
|
+
case imported
|
29
|
+
in String if matched = imported.match(/\* as (.+)/)
|
30
|
+
[imported, code_define_global.call(matched[1])]
|
31
|
+
in String
|
32
|
+
[imported, code_define_global.call(imported)]
|
33
|
+
in [*all] if all.all? {|e| e.is_a? String }
|
34
|
+
[
|
35
|
+
imported.join(', ').yield_self{|s| '{ %s }' % s },
|
36
|
+
imported.map(&code_define_global).join("\n")
|
37
|
+
]
|
38
|
+
in { ** }
|
39
|
+
imports, aliases = imported.to_a.map do |imp|
|
40
|
+
["#{imp[0]} as #{imp[1]}", imp[1].to_s]
|
41
|
+
end.transpose
|
30
42
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
43
|
+
[
|
44
|
+
imports.join(', ').yield_self{|s| '{ %s }' % s },
|
45
|
+
aliases.map(&code_define_global).join("\n")
|
46
|
+
]
|
47
|
+
else
|
48
|
+
raise 'Unsupported importing style'
|
49
|
+
end
|
35
50
|
end
|
36
51
|
module_function :_build_import
|
37
52
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quickjs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- hmsk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-10-
|
11
|
+
date: 2024-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|