11#!/usr/bin/env node
2- const fs = require ( 'fs' )
3- const path = require ( 'path' )
4- const { extensions, toFolder, readFolder, watch, strict, translate } = require ( '../js/bsconfig.js' )
5- const { parsing, parsingMsg, parseCode, addSemicolons } = require ( '../js/parser.js' )
6- const { funcReplace, condReplace, forEachReplace, reassignReplace, assignReplace, logReplace, interactReplace, mathReplace, domReplace, commentReplace, utilityReplace, asyncReplace, flowReplace, forReplace, convReplace, checkReplace, oopReplace, excepReplace, expReplace, otherReplace } = require ( './parser/parsingDecl.js' )
7- const { watching } = require ( '../js/watcher.js' )
2+ const fs = require ( 'fs' ) ;
3+ const vm = require ( 'vm' ) ;
4+ const path = require ( 'path' ) ;
5+ const { extensions, toFolder, readFolder, watch, strict, translate } = require ( '../js/bsc.js' ) ;
6+ const { parsing, parsingMsg, parseCode, addSemicolons } = require ( '../js/parser.js' ) ;
7+ const { funcReplace, condReplace, forEachReplace, reassignReplace, assignReplace, logReplace, interactReplace, mathReplace, domReplace, commentReplace, utilityReplace, asyncReplace, flowReplace, forReplace, convReplace, checkReplace, oopReplace, excepReplace, expReplace, otherReplace } = require ( './parser/parsingDecl.js' ) ;
8+ const { watching } = require ( '../js/watcher.js' ) ;
9+ const { stackParsing } = require ( '../js/error.js' ) ;
810
9- var locate = String ( process . argv [ 2 ] )
10- const directory = String ( toFolder )
11- const directory2 = String ( readFolder )
12- var filePath = path . join ( directory , locate )
13- var fileFrom = path . join ( directory2 , locate )
11+ const sandbox = {
12+ console : {
13+ log : ( ) => { }
14+ } ,
15+ require : require ,
16+ process : process
17+ } ;
1418
15- if ( watch === true ) {
16- watching ( directory2 , directory )
17- } else {
18- if ( locate . endsWith ( extensions . primary ) || locate . endsWith ( extensions . secondary ) || locate . endsWith ( extensions . module ) ) {
19- var box = fs . readFileSync ( fileFrom , 'utf-8' )
20- var code = parseCode ( box )
21- code = addSemicolons ( code )
22- const parsingResults = parsing ( code )
23-
24- if ( parsingResults === false ) {
25- console . log ( "Please check your code and try again." )
26- } else {
27- code = flowReplace ( code )
28- code = utilityReplace ( code )
29- code = funcReplace ( code )
30- code = condReplace ( code )
31- code = forEachReplace ( code )
32- code = reassignReplace ( code )
33- code = assignReplace ( code )
34- code = logReplace ( code )
35- code = interactReplace ( code )
36- code = mathReplace ( code )
37- code = commentReplace ( code )
38- code = asyncReplace ( code )
39- code = forReplace ( code )
40- code = convReplace ( code )
41- code = checkReplace ( code )
42- code = oopReplace ( code )
43- code = excepReplace ( code )
44- code = domReplace ( code )
45-
46- filePath = filePath . replace ( extensions . primary , ".js" )
47- filePath = filePath . replace ( extensions . secondary , ".js" )
48- filePath = filePath . replace ( extensions . module , ".mjs" )
19+ var locate = String ( process . argv [ 2 ] ) ;
20+ const directory = String ( toFolder ) ;
21+ const directory2 = String ( readFolder ) ;
22+ var filePath = path . join ( directory , locate ) ;
23+ var fileFrom = path . join ( directory2 , locate ) ;
24+
25+ var code
26+ try {
27+ var box = fs . readFileSync ( fileFrom , 'utf-8' ) ;
28+ if ( watch === true ) {
29+ watching ( directory2 , directory ) ;
30+ } else {
31+ if ( locate . endsWith ( extensions . primary ) || locate . endsWith ( extensions . secondary ) || locate . endsWith ( extensions . module ) ) {
32+ code = parseCode ( box ) ;
33+ code = addSemicolons ( code ) ;
34+ const parsingResults = parsing ( code ) ;
4935
50- fs . writeFileSync ( filePath , code , 'utf8' )
51- console . log ( "Successfully compiled " + locate + " file" )
36+ if ( parsingResults === false ) {
37+ console . log ( "Error:" , parsingMsg . message ) ;
38+ } else {
39+ code = flowReplace ( code ) ;
40+ code = utilityReplace ( code ) ;
41+ code = funcReplace ( code ) ;
42+ code = condReplace ( code ) ;
43+ code = forEachReplace ( code ) ;
44+ code = reassignReplace ( code ) ;
45+ code = assignReplace ( code ) ;
46+ code = logReplace ( code ) ;
47+ code = interactReplace ( code ) ;
48+ code = mathReplace ( code ) ;
49+ code = commentReplace ( code ) ;
50+ code = asyncReplace ( code ) ;
51+ code = forReplace ( code ) ;
52+ code = convReplace ( code ) ;
53+ code = checkReplace ( code ) ;
54+ code = oopReplace ( code ) ;
55+ code = excepReplace ( code ) ;
56+ code = domReplace ( code ) ;
57+
58+ vm . runInNewContext ( code , sandbox ) ;
59+ filePath = filePath . replace ( extensions . primary , ".js" ) ;
60+ filePath = filePath . replace ( extensions . secondary , ".js" ) ;
61+ filePath = filePath . replace ( extensions . module , ".mjs" ) ;
62+
63+ fs . writeFileSync ( filePath , code , 'utf8' ) ;
64+ console . log ( "Successfully compiled " + locate + " file" ) ;
65+ }
66+ } else {
67+ console . log ( `Error: Unsupported file extension. Please use a ${ extensions . primary } , ${ extensions . secondary } , or ${ extensions . module } file.` )
5268 }
69+ }
70+ } catch ( err ) {
71+ const msg = err . message ;
72+ if ( msg . includes ( 'module' ) ) {
73+ filePath = filePath . replace ( extensions . primary , ".js" ) ;
74+ filePath = filePath . replace ( extensions . secondary , ".js" ) ;
75+ filePath = filePath . replace ( extensions . module , ".mjs" ) ;
76+
77+ fs . writeFileSync ( filePath , code , 'utf8' ) ;
78+ console . log ( "Successfully compiled " + locate + " file" ) ;
5379 } else {
54- locate = locate . replace ( "undefined" , "" )
55- console . log ( "Invalid file name '" + locate + "'" )
56- console . log ( "Use the " + extensions . primary + ", " + extensions . secondary + ", or " + extensions . module + " extension" )
80+ const stackMsg = err . stack ;
81+ console . log ( stackParsing ( locate , err . message , stackMsg , box , err . name ) ) ;
5782 }
5883}
0 commit comments