@@ -32,6 +32,54 @@ function trimChar(text: string, charToRemove: string): string {
32
32
return text ;
33
33
}
34
34
35
+ function registerFileLoader ( interpreter : Interpreter ) : Interpreter {
36
+ function getScriptFunctionsListWithArgs ( scripts : string ) : any {
37
+ if ( scripts ) {
38
+ return scripts . split ( '\n' ) . map ( line => {
39
+ const match = line . match ( / ( d e f \s ) ( .* ) ( \( .* \) ) : / ) ;
40
+ if ( match ) {
41
+ const args = ( match [ 3 ] as string ) . replace ( / [ \( \) \s + ] / g, '' ) . split ( ',' ) as string [ ] ;
42
+ return [ match [ 2 ] . replace ( / / g, '' ) as string , args ] as [ string , string [ ] ] ;
43
+ }
44
+ } ) . filter ( func => Boolean ( func ) ) ;
45
+ }
46
+ }
47
+
48
+ const loader = async ( filePath : string ) => {
49
+ const module = filePath ;
50
+ try {
51
+
52
+ const script = fs . readFileSync ( `${ options . srcRoot } ${ trimChar ( filePath , '/' ) } .jspy` , 'utf8' ) ;
53
+ const funcs = getScriptFunctionsListWithArgs ( script ) ;
54
+ const result = funcs
55
+ . reduce ( ( prev : any , [ func , paramKeys ] : any ) => {
56
+ prev [ func ] = async ( ...args : any ) => {
57
+ const params = ( paramKeys || [ ] ) . reduce ( ( prev2 : any , key : any , i : any ) => {
58
+ prev2 [ key ] = args [ i ] || null ;
59
+ return prev2 ;
60
+ } , { } ) ;
61
+ const context = { } ; // this.getAppContext();
62
+ try {
63
+ return await interpreter . evaluate ( script , { ...context , ...params } , func , module ) ;
64
+ } catch ( e ) {
65
+ throw Error ( `${ e . message } ` ) ;
66
+ }
67
+ } ;
68
+ return prev ;
69
+ } , { }
70
+ ) ;
71
+
72
+ return result ;
73
+ } catch ( e ) {
74
+ console . error ( e ) ;
75
+ }
76
+
77
+ } ;
78
+ interpreter . registerFileLoader ( loader ) ;
79
+ return interpreter ;
80
+ }
81
+
82
+
35
83
async function initialize ( baseSource : string ) {
36
84
// process app.json (if exists)
37
85
// add configuration to the 'app'
@@ -92,11 +140,8 @@ async function run() {
92
140
await initialize ( options . srcRoot ) ;
93
141
94
142
if ( options . file ) {
95
- interpreter . registerFileLoader ( ( jspyPath : any ) => {
96
- console . log ( ' * file loader * ' , rootFolder , jspyPath ) ;
97
- return Promise . resolve ( { sum : ( x : number , y : number ) => x + y } ) ;
98
- } )
99
143
interpreter . registerPackagesLoader ( packageLoader as PackageLoader ) ;
144
+ registerFileLoader ( interpreter )
100
145
const scripts = fs . readFileSync ( `${ options . srcRoot } ${ options . file } ` , 'utf8' ) ;
101
146
context . asserts . length = 0 ;
102
147
console . log ( interpreter . jsPythonInfo ( ) )
0 commit comments