Class: JsxRosetta::NodeBridge
- Inherits:
-
Object
- Object
- JsxRosetta::NodeBridge
- Defined in:
- lib/jsx_rosetta/node_bridge.rb
Overview
Spawns the Node sidecar (‘node/parse.js`) as a one-shot subprocess per parse request. A long-lived worker is a future optimization.
Defined Under Namespace
Classes: MissingDependencies, MissingNode
Constant Summary collapse
- SIDECAR_DIR =
File.("../../node", __dir__)
- SIDECAR_SCRIPT =
File.join(SIDECAR_DIR, "parse.js")
- NODE_MODULES_DIR =
File.join(SIDECAR_DIR, "node_modules")
Instance Method Summary collapse
Instance Method Details
#parse(source, typescript: false, source_filename: nil) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/jsx_rosetta/node_bridge.rb', line 17 def parse(source, typescript: false, source_filename: nil) ensure_dependencies_installed! request = JSON.generate( source: source, typescript: typescript, source_filename: source_filename ) stdout, stderr, status = Open3.capture3(node_executable, SIDECAR_SCRIPT, stdin_data: request) raise Error, "jsx_rosetta sidecar exited with status #{status.exitstatus}: #{stderr.strip}" unless status.success? JSON.parse(stdout) rescue Errno::ENOENT raise MissingNode, end |