@@ -3,20 +3,28 @@ import { ZModelCodeGenerator } from '@zenstackhq/sdk';
33import  fs  from  'node:fs' ; 
44import  path  from  'node:path' ; 
55import  {  execPackage  }  from  '../utils/exec-utils' ; 
6- import  {  generateTempPrismaSchema ,  getSchemaFile ,  handleSubProcessError ,  loadSchemaDocumentWithServices  }  from  './action-utils' ; 
6+ import  { 
7+     generateTempPrismaSchema , 
8+     getSchemaFile , 
9+     handleSubProcessError , 
10+     loadSchemaDocumentWithServices , 
11+ }  from  './action-utils' ; 
712import  {  syncEnums ,  syncRelation ,  syncTable ,  type  Relation  }  from  './pull' ; 
813import  {  providers  }  from  './pull/provider' ; 
914import  {  getDatasource  }  from  './pull/utils' ; 
15+ import  {  config  }  from  '@dotenvx/dotenvx' ; 
1016
1117type  PushOptions  =  { 
1218    schema ?: string ; 
1319    acceptDataLoss ?: boolean ; 
1420    forceReset ?: boolean ; 
1521} ; 
1622
17- type  PullOptions  =  { 
23+ export   type  PullOptions  =  { 
1824    schema ?: string ; 
1925    out ?: string ; 
26+     naming ?: 'pascal'  |  'camel'  |  'snake'  |  'kebab'  |  'none' ; 
27+     alwaysMap ?: boolean ; 
2028} ; 
2129
2230/** 
@@ -63,62 +71,57 @@ async function runPush(options: PushOptions) {
6371async  function  runPull ( options : PullOptions )  { 
6472    const  schemaFile  =  getSchemaFile ( options . schema ) ; 
6573    const  {  model,  services }  =  await  loadSchemaDocumentWithServices ( schemaFile ) ; 
66-     await   import ( "@dotenvx/dotenvx/ config" ) 
67-     const  SUPPORTED_PROVIDERS  =  [ 'sqlite' ,  'postgresql' ] 
68-     const  datasource  =  getDatasource ( model ) 
74+     config ( ) ; 
75+     const  SUPPORTED_PROVIDERS  =  [ 'sqlite' ,  'postgresql' ] ; 
76+     const  datasource  =  getDatasource ( model ) ; 
6977
7078    if  ( ! datasource )  { 
71-         throw  new  Error ( 'No datasource found in the schema.' ) 
79+         throw  new  Error ( 'No datasource found in the schema.' ) ; 
7280    } 
7381
7482    if  ( ! SUPPORTED_PROVIDERS . includes ( datasource . provider ) )  { 
75-         throw  new  Error ( `Unsupported datasource provider: ${ datasource . provider }  ) 
83+         throw  new  Error ( `Unsupported datasource provider: ${ datasource . provider }  ) ; 
7684    } 
7785
7886    const  provider  =  providers [ datasource . provider ] ; 
7987
8088    if  ( ! provider )  { 
81-         throw  new  Error ( 
82-             `No introspection provider found for: ${ datasource . provider }  
83-         ) 
89+         throw  new  Error ( `No introspection provider found for: ${ datasource . provider }  ) ; 
8490    } 
8591
86-     const  {  enums,  tables }  =  await  provider . introspect ( datasource . url ) 
92+     const  {  enums,  tables }  =  await  provider . introspect ( datasource . url ) ; 
8793
8894    const  newModel : Model  =  { 
8995        $type : 'Model' , 
9096        $container : undefined , 
9197        $containerProperty : undefined , 
9298        $containerIndex : undefined , 
93-         declarations : [ ...model . declarations . filter ( d  =>  [ " DataSource" ] . includes ( d . $type ) ) ] , 
99+         declarations : [ ...model . declarations . filter ( ( d )  =>  [ ' DataSource' ] . includes ( d . $type ) ) ] , 
94100        imports : [ ] , 
95101    } ; 
96102
103+     syncEnums ( {  dbEnums : enums ,  model : newModel ,  services,  options } ) ; 
97104
98-     syncEnums ( {  dbEnums : enums ,  model : newModel ,  services } ) 
99- 
100- 
101- 
102-     const  resolvedRelations : Relation [ ]  =  [ ] 
105+     const  resolvedRelations : Relation [ ]  =  [ ] ; 
103106    for  ( const  table  of  tables )  { 
104-         const  relations  =  syncTable ( {  table,  model : newModel ,  provider,  services  } ) 
105-         resolvedRelations . push ( ...relations ) 
107+         const  relations  =  syncTable ( {  table,  model : newModel ,  provider,  services,  options  } ) ; 
108+         resolvedRelations . push ( ...relations ) ; 
106109    } 
107110
108111    for  ( const  relation  of  resolvedRelations )  { 
109-         syncRelation ( {  model : newModel ,  relation,  services } ) ; 
112+         syncRelation ( {  model : newModel ,  relation,  services,  options  } ) ; 
110113    } 
111114
112115    //TODO: diff models and apply changes only 
113116
114-     const  generator  =  await   new  ZModelCodeGenerator ( ) ; 
117+     const  generator  =  new  ZModelCodeGenerator ( ) ; 
115118
116-     const  zmodelSchema  =  await   generator . generate ( newModel ) 
119+     const  zmodelSchema  =  generator . generate ( newModel ) ; 
117120
118121    console . log ( options . out  ? `Writing to ${ options . out }   : schemaFile ) ; 
119122
120123    const  outPath  =  options . out  ? path . resolve ( options . out )  : schemaFile ; 
121124    console . log ( outPath ) ; 
122125
123-     fs . writeFileSync ( outPath ,  zmodelSchema ) 
126+     fs . writeFileSync ( outPath ,  zmodelSchema ) ; 
124127} 
0 commit comments