nodo 1.7.1 → 1.8.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 +4 -4
- data/README.md +17 -0
- data/lib/nodo/core.rb +8 -5
- data/lib/nodo/dependency.rb +28 -5
- data/lib/nodo/nodo.cjs +6 -2
- data/lib/nodo/version.rb +1 -1
- metadata +19 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e7c1002efcf0b7ba146dde5e10af7ddcdfdfeb450824dfaf5cce56c115630303
|
4
|
+
data.tar.gz: 3dc41a17980258b0ef634bb6a05319cc98501495ebb7a4688007cd0546f32fb3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 877eac53f4eb526c8fc8ef7cc7b10437232a9b50effffd894dda29c36129b33c7a2c9e9edb47964ad2b566ce98c25f38d2866ce0cd0fc52062efbe0084105f31
|
7
|
+
data.tar.gz: 5aaf9f8097c8a3b7335e1a67b23dc388a194b2dfe395b8b8e0faeca324b194615d1b946fd3a6bf117b0c0d2567c71cae622b00611d772e95f8f35e1e1f519f4a
|
data/README.md
CHANGED
@@ -99,6 +99,23 @@ bar = Bar.new
|
|
99
99
|
bar.v4 => "b305f5c4-db9a-4504-b0c3-4e097a5ec8b9"
|
100
100
|
```
|
101
101
|
|
102
|
+
`import` is also supported for loading ESM packages:
|
103
|
+
|
104
|
+
```ruby
|
105
|
+
class Bar < Nodo::Core
|
106
|
+
import :uuid
|
107
|
+
|
108
|
+
function :v4, <<~JS
|
109
|
+
() => {
|
110
|
+
return uuid.v4();
|
111
|
+
}
|
112
|
+
JS
|
113
|
+
end
|
114
|
+
|
115
|
+
bar = Bar.new
|
116
|
+
bar.v4 => "b305f5c4-db9a-4504-b0c3-4e097a5ec8b9"
|
117
|
+
```
|
118
|
+
|
102
119
|
### Aliasing requires
|
103
120
|
|
104
121
|
If the library name cannot be used as name of the constant, the `const` name
|
data/lib/nodo/core.rb
CHANGED
@@ -82,7 +82,7 @@ module Nodo
|
|
82
82
|
|
83
83
|
def generate_class_code
|
84
84
|
<<~JS
|
85
|
-
(() => {
|
85
|
+
(async () => {
|
86
86
|
const __nodo_klass__ = { nodo: global.nodo };
|
87
87
|
#{dependencies.map(&:to_js).join}
|
88
88
|
#{constants.map(&:to_js).join}
|
@@ -106,10 +106,13 @@ module Nodo
|
|
106
106
|
|
107
107
|
private
|
108
108
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
109
|
+
{ require: :cjs, import: :esm }.each do |method, type|
|
110
|
+
define_method method do |*mods|
|
111
|
+
deps = mods.last.is_a?(Hash) ? mods.pop : {}
|
112
|
+
mods = mods.map { |m| [m, m] }.to_h
|
113
|
+
self.dependencies = dependencies + mods.merge(deps).map { |name, package| Dependency.new(name, package, type: type) }
|
114
|
+
end
|
115
|
+
private method
|
113
116
|
end
|
114
117
|
|
115
118
|
def function(name, _code = nil, timeout: Nodo.timeout, code: nil, &block)
|
data/lib/nodo/dependency.rb
CHANGED
@@ -1,12 +1,22 @@
|
|
1
1
|
module Nodo
|
2
2
|
class Dependency
|
3
|
-
attr_reader :name, :package
|
4
|
-
|
5
|
-
def initialize(name, package)
|
6
|
-
@name, @package = name, package
|
3
|
+
attr_reader :name, :package, :type
|
4
|
+
|
5
|
+
def initialize(name, package, type:)
|
6
|
+
@name, @package, @type = name, package, type
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
def to_js
|
10
|
+
case type
|
11
|
+
when :cjs then to_cjs
|
12
|
+
when :esm then to_esm
|
13
|
+
else raise "Unknown dependency type: #{type}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def to_cjs
|
10
20
|
<<~JS
|
11
21
|
const #{name} = __nodo_klass__.#{name} = (() => {
|
12
22
|
try {
|
@@ -18,5 +28,18 @@ module Nodo
|
|
18
28
|
})();
|
19
29
|
JS
|
20
30
|
end
|
31
|
+
|
32
|
+
def to_esm
|
33
|
+
<<~JS
|
34
|
+
const #{name} = __nodo_klass__.#{name} = await (async () => {
|
35
|
+
try {
|
36
|
+
return await nodo.import(#{package.to_json});
|
37
|
+
} catch(e) {
|
38
|
+
e.nodo_dependency = #{package.to_json};
|
39
|
+
throw e;
|
40
|
+
}
|
41
|
+
})();
|
42
|
+
JS
|
43
|
+
end
|
21
44
|
end
|
22
45
|
end
|
data/lib/nodo/nodo.cjs
CHANGED
@@ -99,8 +99,12 @@ module.exports = (function() {
|
|
99
99
|
|
100
100
|
try {
|
101
101
|
if (DEFINE_METHOD == method) {
|
102
|
-
|
103
|
-
|
102
|
+
Promise.resolve(vm.runInThisContext(input, class_name)).then((result) => {
|
103
|
+
classes[class_name] = result;
|
104
|
+
respond_with_data(res, class_name, start);
|
105
|
+
}).catch((error) => {
|
106
|
+
respond_with_error(res, 500, error);
|
107
|
+
})
|
104
108
|
} else if (EVALUATE_METHOD == method) {
|
105
109
|
Promise.resolve(vm.runInNewContext(input, context)).then((result) => {
|
106
110
|
respond_with_data(res, result, start);
|
data/lib/nodo/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,28 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nodo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthias Grosser
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
10
|
+
date: 2025-02-05 00:00:00.000000000 Z
|
11
|
+
dependencies:
|
12
|
+
- !ruby/object:Gem::Dependency
|
13
|
+
name: logger
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - ">="
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '0'
|
19
|
+
type: :runtime
|
20
|
+
prerelease: false
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: '0'
|
13
26
|
description: Fast Ruby bridge to run JavaScript inside a Node process
|
14
27
|
email:
|
15
28
|
- mtgrosser@gmx.net
|
@@ -34,7 +47,6 @@ homepage: https://github.com/mtgrosser/nodo
|
|
34
47
|
licenses:
|
35
48
|
- MIT
|
36
49
|
metadata: {}
|
37
|
-
post_install_message:
|
38
50
|
rdoc_options: []
|
39
51
|
require_paths:
|
40
52
|
- lib
|
@@ -42,15 +54,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
42
54
|
requirements:
|
43
55
|
- - ">="
|
44
56
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
57
|
+
version: 3.0.0
|
46
58
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
47
59
|
requirements:
|
48
60
|
- - ">="
|
49
61
|
- !ruby/object:Gem::Version
|
50
62
|
version: '0'
|
51
63
|
requirements: []
|
52
|
-
rubygems_version: 3.
|
53
|
-
signing_key:
|
64
|
+
rubygems_version: 3.6.2
|
54
65
|
specification_version: 4
|
55
66
|
summary: Call Node.js from Ruby
|
56
67
|
test_files: []
|