11import type { ZModelServices } from '@zenstackhq/language' ;
22import { Attribute , isEnum , type DataField , type DataModel , type Enum , type Model } from '@zenstackhq/language/ast' ;
33import {
4- DataFieldAttributeFactory ,
5- DataFieldFactory ,
6- DataModelFactory ,
7- EnumFactory
4+ DataFieldAttributeFactory ,
5+ DataFieldFactory ,
6+ DataModelFactory ,
7+ EnumFactory ,
88} from '@zenstackhq/language/factory' ;
99import type { PullOptions } from '../db' ;
1010import type { Cascade , IntrospectedEnum , IntrospectedTable , IntrospectionProvider } from './provider' ;
@@ -22,21 +22,21 @@ export function syncEnums({
2222 options : PullOptions ;
2323} ) {
2424 for ( const dbEnum of dbEnums ) {
25- const { modified, name } = resolveNameCasing ( options , dbEnum . enum_type ) ;
25+ const { modified, name } = resolveNameCasing ( options . modelCasing , dbEnum . enum_type ) ;
2626 if ( modified ) console . log ( `Mapping enum ${ dbEnum . enum_type } to ${ name } ` ) ;
2727 const factory = new EnumFactory ( ) . setName ( name ) ;
28- if ( modified )
28+ if ( modified || options . alwaysMap )
2929 factory . addAttribute ( ( builder ) =>
3030 builder
3131 . setDecl ( getAttributeRef ( '@@map' , services ) )
3232 . addArg ( ( argBuilder ) => argBuilder . StringLiteral . setValue ( dbEnum . enum_type ) ) ,
3333 ) ;
3434
3535 dbEnum . values . forEach ( ( v ) => {
36- const { name, modified } = resolveNameCasing ( options , v ) ;
36+ const { name, modified } = resolveNameCasing ( options . fieldCasing , v ) ;
3737 factory . addField ( ( builder ) => {
3838 builder . setName ( name ) ;
39- if ( modified )
39+ if ( modified || options . alwaysMap )
4040 builder . addAttribute ( ( builder ) =>
4141 builder
4242 . setDecl ( getAttributeRef ( '@map' , services ) )
@@ -64,10 +64,11 @@ export function syncEnums({
6464 }
6565}
6666
67- function resolveNameCasing ( options : PullOptions , originalName : string ) {
67+ function resolveNameCasing ( casing : 'pascal' | 'camel' | 'snake' | 'kebab' | 'none' , originalName : string ) {
6868 let name = originalName ;
69+ const fieldPrefix = / [ 0 - 9 ] / g. test ( name . charAt ( 0 ) ) ? '_' : '' ;
6970
70- switch ( options . naming ) {
71+ switch ( casing ) {
7172 case 'pascal' :
7273 name = toPascalCase ( originalName ) ;
7374 break ;
@@ -83,8 +84,8 @@ function resolveNameCasing(options: PullOptions, originalName: string) {
8384 }
8485
8586 return {
86- modified : options . alwaysMap ? true : name !== originalName ,
87- name,
87+ modified : name !== originalName || fieldPrefix !== '' ,
88+ name : ` ${ fieldPrefix } ${ name } ` ,
8889 } ;
8990}
9091
@@ -163,13 +164,13 @@ export function syncTable({
163164 }
164165
165166 const relations : Relation [ ] = [ ] ;
166- const { name, modified } = resolveNameCasing ( { ... options , naming : 'pascal' } , table . name ) ;
167+ const { name, modified } = resolveNameCasing ( options . modelCasing , table . name ) ;
167168 const multiPk = table . columns . filter ( ( c ) => c . pk ) . length > 1 ;
168169
169170 const modelFactory = new DataModelFactory ( ) . setName ( name ) . setIsView ( table . type === 'view' ) ;
170171 modelFactory . setContainer ( model ) ;
171172
172- if ( modified ) {
173+ if ( modified || options . alwaysMap ) {
173174 modelFactory . addAttribute ( ( builder ) =>
174175 builder . setDecl ( tableMapAttribute ) . addArg ( ( argBuilder ) => argBuilder . StringLiteral . setValue ( table . name ) ) ,
175176 ) ;
@@ -195,10 +196,7 @@ export function syncTable({
195196 } ) ;
196197 }
197198
198- const fieldPrefix = / [ 0 - 9 ] / g. test ( column . name . charAt ( 0 ) ) ? '_' : '' ;
199- const { name : _name , modified : _modified } = resolveNameCasing ( options , column . name ) ;
200- const name = `${ fieldPrefix } ${ _name } ` ;
201- const modified = fieldPrefix !== '' || _modified ;
199+ const { name, modified } = resolveNameCasing ( options . fieldCasing , column . name ) ;
202200
203201 const builtinType = provider . getBuiltinType ( column . datatype ) ;
204202
@@ -252,7 +250,7 @@ export function syncTable({
252250 return b ;
253251 } ) ;
254252 }
255- if ( modified ) {
253+ if ( modified || options . alwaysMap ) {
256254 builder . addAttribute ( ( ab ) =>
257255 ab . setDecl ( fieldMapAttribute ) . addArg ( ( ab ) => ab . StringLiteral . setValue ( column . name ) ) ,
258256 ) ;
0 commit comments