@@ -4,11 +4,12 @@ import fs from "fs/promises";
44import { setupDatabase } from "./database.js" ;
55
66const rubyWasm = new URL ( "../node_modules/@rails-tutorial/wasm/dist/rails.wasm" , import . meta. url ) . pathname ;
7+
78const railsRootDir = new URL ( "../workspace/store" , import . meta. url ) . pathname ;
89const pgDataDir = new URL ( "../pgdata" , import . meta. url ) . pathname ;
910
1011export default async function initVM ( vmopts = { } ) {
11- const { env, args } = vmopts ;
12+ const { env, args, skipRails } = vmopts ;
1213 const binary = await fs . readFile ( rubyWasm ) ;
1314 const module = await WebAssembly . compile ( binary ) ;
1415
@@ -19,6 +20,8 @@ export default async function initVM(vmopts = {}) {
1920 `/workspace${ process . cwd ( ) . slice ( workspaceDir . length ) } ` :
2021 "" ;
2122
23+ const cliArgs = args ?. length ? [ 'ruby.wasm' ] . concat ( args ) : undefined ;
24+
2225 const wasi = new WASI (
2326 {
2427 env : { "RUBYOPT" : "-EUTF-8 -W0" , ...env } ,
@@ -27,26 +30,31 @@ export default async function initVM(vmopts = {}) {
2730 preopens : {
2831 "/workspace" : workspaceDir
2932 } ,
30- args : args || [ ] // FIXME: doesn't work
33+ args : cliArgs
3134 }
3235 ) ;
36+
3337 const { vm } = await RubyVM . instantiateModule ( {
34- module, wasip1 : wasi
38+ module,
39+ wasip1 : wasi ,
40+ args : cliArgs
3541 } ) ;
3642
37- try {
38- await fs . readdir ( railsRootDir ) ;
39- await setupDatabase ( pgDataDir ) ;
40- } catch ( error ) {
41- // not database directory — skip it
42- }
43+ if ( ! skipRails ) {
44+ try {
45+ await fs . readdir ( railsRootDir ) ;
46+ await setupDatabase ( pgDataDir ) ;
47+ } catch ( error ) {
48+ // not database directory — skip it
49+ }
4350
44- vm . eval ( `
45- Dir.chdir("${ workdir } ") unless "${ workdir } ".empty?
46- require "/rails-vm/boot"
51+ vm . eval ( `
52+ Dir.chdir("${ workdir } ") unless "${ workdir } ".empty?
53+ require "/rails-vm/boot"
4754
48- require "js"
49- ` )
55+ require "js"
56+ ` )
57+ }
5058
5159 return vm ;
5260}
0 commit comments