@@ -33,14 +33,14 @@ export class FunctionCache {
33
33
* @param module
34
34
* @returns
35
35
*/
36
- static requireCloudFunction ( moduleName : string ) : any {
36
+ static requireCloudFunction ( moduleName : string , fromModules ?: string [ ] ) : any {
37
37
const func = FunctionCache . cache . get ( moduleName )
38
38
assert (
39
39
func ,
40
40
`require cloud function failed: function ${ moduleName } not found` ,
41
41
)
42
- const funcRequire = new FunctionRequire ( this . requireFunc )
43
- const module = funcRequire . load ( func . name , func . source . compiled )
42
+ const funcRequire = new FunctionRequire ( this . requireFunc , fromModules )
43
+ const module = funcRequire . load ( func . name , func . source . compiled , fromModules )
44
44
return module
45
45
}
46
46
@@ -87,12 +87,20 @@ export class FunctionCache {
87
87
* @param module the module id. ex. `path`, `lodash`
88
88
* @returns
89
89
*/
90
- static requireFunc : RequireFuncType = ( module : string ) : any => {
90
+ static requireFunc : RequireFuncType = ( module : string , fromModules ?: string [ ] ) : any => {
91
91
if ( module === '@/cloud-sdk' ) {
92
92
return require ( '@lafjs/cloud' )
93
93
}
94
94
if ( module . startsWith ( '@/' ) ) {
95
- return FunctionCache . requireCloudFunction ( module . replace ( '@/' , '' ) )
95
+ const cloudModule = module . replace ( '@/' , '' )
96
+
97
+ // check circular dependency
98
+ const index = fromModules ?. indexOf ( cloudModule )
99
+ if ( index !== - 1 ) {
100
+ throw new Error ( `Circular dependency detected: ${ fromModules . slice ( index ) . join ( ' -> ' ) } -> ${ cloudModule } ` )
101
+ }
102
+
103
+ return FunctionCache . requireCloudFunction ( cloudModule , fromModules )
96
104
}
97
105
return require ( module ) as any
98
106
}
0 commit comments