Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
89 lines
3.2 KiB
Plaintext
89 lines
3.2 KiB
Plaintext
export const columnToCodeConverter = ({ adapter, addEnum, addImport, column, tableKey })=>{
|
|
let columnBuilderFn = column.type;
|
|
if (column.type === 'geometry') {
|
|
columnBuilderFn = 'geometryColumn';
|
|
addImport(adapter.packageName, columnBuilderFn);
|
|
} else if (column.type === 'enum') {
|
|
if ('locale' in column) {
|
|
columnBuilderFn = `enum__locales`;
|
|
} else {
|
|
addEnum(column.enumName, column.options);
|
|
columnBuilderFn = column.enumName;
|
|
}
|
|
} else {
|
|
addImport(`${adapter.packageName}/drizzle/pg-core`, columnBuilderFn);
|
|
}
|
|
const columnBuilderArgsArray = [];
|
|
switch(column.type){
|
|
case 'bit':
|
|
case 'halfvec':
|
|
case 'sparsevec':
|
|
case 'vector':
|
|
{
|
|
if (column.dimensions) {
|
|
columnBuilderArgsArray.push(`dimensions: ${column.dimensions}`);
|
|
}
|
|
break;
|
|
}
|
|
case 'numeric':
|
|
{
|
|
columnBuilderArgsArray.push("mode: 'number'");
|
|
break;
|
|
}
|
|
case 'timestamp':
|
|
{
|
|
columnBuilderArgsArray.push(`mode: '${column.mode}'`);
|
|
if (column.withTimezone) {
|
|
columnBuilderArgsArray.push('withTimezone: true');
|
|
}
|
|
if (typeof column.precision === 'number') {
|
|
columnBuilderArgsArray.push(`precision: ${column.precision}`);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
let columnBuilderArgs = '';
|
|
if (columnBuilderArgsArray.length) {
|
|
columnBuilderArgs = `, {${columnBuilderArgsArray.join(',')}}`;
|
|
}
|
|
let code = `${columnBuilderFn}('${column.name}'${columnBuilderArgs})`;
|
|
if (column.type === 'timestamp' && column.defaultNow) {
|
|
code = `${code}.defaultNow()`;
|
|
}
|
|
if (column.type === 'uuid' && column.defaultRandom) {
|
|
code = `${code}.defaultRandom()`;
|
|
}
|
|
if (column.notNull) {
|
|
code = `${code}.notNull()`;
|
|
}
|
|
if (column.primaryKey) {
|
|
code = `${code}.primaryKey()`;
|
|
}
|
|
if (typeof column.default !== 'undefined') {
|
|
let sanitizedDefault = column.default;
|
|
if (column.type === 'geometry') {
|
|
sanitizedDefault = `sql\`${column.default}\``;
|
|
} else if (column.type === 'jsonb') {
|
|
sanitizedDefault = `sql\`'${JSON.stringify(column.default)}'::jsonb\``;
|
|
} else if (column.type === 'numeric') {
|
|
sanitizedDefault = `${column.default}`;
|
|
} else if (typeof column.default === 'string') {
|
|
sanitizedDefault = `${JSON.stringify(column.default)}`;
|
|
}
|
|
code = `${code}.default(${sanitizedDefault})`;
|
|
}
|
|
if (column.reference) {
|
|
let callback = `()`;
|
|
if (column.reference.table === tableKey) {
|
|
addImport(`${adapter.packageName}/drizzle/pg-core`, 'type AnyPgColumn');
|
|
callback = `${callback}: AnyPgColumn`;
|
|
}
|
|
callback = `${callback} => ${column.reference.table}.${column.reference.name}`;
|
|
code = `${code}.references(${callback}, {
|
|
${column.reference.onDelete ? `onDelete: '${column.reference.onDelete}'` : ''}
|
|
})`;
|
|
}
|
|
return code;
|
|
};
|
|
|
|
//# sourceMappingURL=columnToCodeConverter.js.map |