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
112 lines
3.9 KiB
Plaintext
112 lines
3.9 KiB
Plaintext
export const columnToCodeConverter = ({ adapter, addImport, column, locales, tableKey })=>{
|
|
let columnBuilderFn = column.type;
|
|
const columnBuilderArgsArray = [];
|
|
let defaultStatement = null;
|
|
switch(column.type){
|
|
case 'boolean':
|
|
{
|
|
columnBuilderFn = 'integer';
|
|
columnBuilderArgsArray.push("mode: 'boolean'");
|
|
break;
|
|
}
|
|
case 'enum':
|
|
{
|
|
let options;
|
|
if ('locale' in column) {
|
|
if (!locales?.length) {
|
|
throw new Error('Locales must be defined for locale columns');
|
|
}
|
|
options = locales;
|
|
} else {
|
|
options = column.options;
|
|
}
|
|
columnBuilderFn = 'text';
|
|
columnBuilderArgsArray.push(`enum: [${options.map((locale)=>`'${locale}'`).join(', ')}]`);
|
|
break;
|
|
}
|
|
case 'geometry':
|
|
case 'jsonb':
|
|
{
|
|
columnBuilderFn = 'text';
|
|
columnBuilderArgsArray.push("mode: 'json'");
|
|
break;
|
|
}
|
|
case 'numeric':
|
|
{
|
|
columnBuilderArgsArray.push("mode: 'number'");
|
|
break;
|
|
}
|
|
case 'serial':
|
|
{
|
|
columnBuilderFn = 'integer';
|
|
break;
|
|
}
|
|
case 'timestamp':
|
|
{
|
|
columnBuilderFn = 'text';
|
|
defaultStatement = `default(sql\`(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))\`)`;
|
|
break;
|
|
}
|
|
case 'uuid':
|
|
{
|
|
columnBuilderFn = 'text';
|
|
if (column.defaultRandom) {
|
|
addImport('crypto', 'randomUUID');
|
|
defaultStatement = `$defaultFn(() => randomUUID())`;
|
|
}
|
|
break;
|
|
}
|
|
case 'varchar':
|
|
{
|
|
columnBuilderFn = 'text';
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
columnBuilderFn = column.type;
|
|
}
|
|
}
|
|
addImport(`${adapter.packageName}/drizzle/sqlite-core`, columnBuilderFn);
|
|
let columnBuilderArgs = '';
|
|
if (columnBuilderArgsArray.length) {
|
|
columnBuilderArgs = `, {${columnBuilderArgsArray.join(',')}}`;
|
|
}
|
|
let code = `${columnBuilderFn}('${column.name}'${columnBuilderArgs})`;
|
|
if (column.notNull) {
|
|
code = `${code}.notNull()`;
|
|
}
|
|
if (column.primaryKey) {
|
|
let arg = '';
|
|
if (column.type === 'integer' && column.autoIncrement) {
|
|
arg = `{ autoIncrement: true }`;
|
|
}
|
|
code = `${code}.primaryKey(${arg})`;
|
|
}
|
|
if (defaultStatement) {
|
|
code = `${code}.${defaultStatement}`;
|
|
} else if (typeof column.default !== 'undefined') {
|
|
let sanitizedDefault = column.default;
|
|
if (column.type === 'jsonb' || column.type === 'geometry') {
|
|
sanitizedDefault = `'${JSON.stringify(column.default)}'`;
|
|
} else if (typeof column.default === 'string') {
|
|
sanitizedDefault = JSON.stringify(column.default);
|
|
} else if (column.type === 'numeric') {
|
|
sanitizedDefault = `${column.default}`;
|
|
}
|
|
code = `${code}.default(${sanitizedDefault})`;
|
|
}
|
|
if (column.reference) {
|
|
let callback = `()`;
|
|
if (column.reference.table === tableKey) {
|
|
addImport(`${adapter.packageName}/drizzle/sqlite-core`, 'type AnySQLiteColumn');
|
|
callback = `${callback}: AnySQLiteColumn`;
|
|
}
|
|
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 |