| 1 | module jsbuilder |
| 2 | |
| 3 | import os |
| 4 | import v.pref |
| 5 | import v.util |
| 6 | import v.builder |
| 7 | import v.gen.js |
| 8 | |
| 9 | pub fn start() { |
| 10 | mut args_and_flags := util.join_env_vflags_and_os_args()[1..] |
| 11 | prefs, _ := pref.parse_args([], args_and_flags) |
| 12 | builder.compile('build', prefs, compile_js) |
| 13 | } |
| 14 | |
| 15 | pub fn compile_js(mut b builder.Builder) { |
| 16 | mut files := b.get_builtin_files() |
| 17 | files << b.get_user_files() |
| 18 | b.set_module_lookup_paths() |
| 19 | if b.pref.is_verbose { |
| 20 | println('all .v files:') |
| 21 | println(files) |
| 22 | } |
| 23 | mut name := b.pref.out_name |
| 24 | if !name.ends_with('.js') { |
| 25 | name += '.js' |
| 26 | } |
| 27 | build_js(mut b, files, name) |
| 28 | } |
| 29 | |
| 30 | pub fn build_js(mut b builder.Builder, v_files []string, out_file string) { |
| 31 | b.out_name_js = out_file |
| 32 | b.info('build_js(${out_file})') |
| 33 | output := gen_js(mut b, v_files) |
| 34 | os.write_file(out_file, output) or { panic(err) } |
| 35 | if b.pref.is_stats { |
| 36 | b.stats_lines = output.count('\n') + 1 |
| 37 | b.stats_bytes = output.len |
| 38 | } |
| 39 | } |
| 40 | |
| 41 | pub fn gen_js(mut b builder.Builder, v_files []string) string { |
| 42 | b.front_and_middle_stages(v_files) or { return '' } |
| 43 | util.timing_start('JS GEN') |
| 44 | res := js.gen(b.parsed_files, mut b.table, b.pref) |
| 45 | util.timing_measure('JS GEN') |
| 46 | return res |
| 47 | } |
| 48 | |