(column: Column)
| 71 | } |
| 72 | |
| 73 | export function columnToSchema(column: Column): v.GenericSchema { |
| 74 | let schema!: v.GenericSchema; |
| 75 | |
| 76 | if (isWithEnum(column)) { |
| 77 | schema = column.enumValues.length ? v.enum(mapEnumValues(column.enumValues)) : v.string(); |
| 78 | } |
| 79 | |
| 80 | if (!schema) { |
| 81 | // Handle specific types |
| 82 | if (isColumnType<PgGeometry<any> | PgPointTuple<any>>(column, ['PgGeometry', 'PgPointTuple'])) { |
| 83 | schema = v.tuple([v.number(), v.number()]); |
| 84 | } else if ( |
| 85 | isColumnType<PgPointObject<any> | PgGeometryObject<any>>(column, ['PgGeometryObject', 'PgPointObject']) |
| 86 | ) { |
| 87 | schema = v.object({ x: v.number(), y: v.number() }); |
| 88 | } else if (isColumnType<PgHalfVector<any> | PgVector<any>>(column, ['PgHalfVector', 'PgVector'])) { |
| 89 | schema = v.array(v.number()); |
| 90 | schema = column.dimensions ? v.pipe(schema as v.ArraySchema<any, any>, v.length(column.dimensions)) : schema; |
| 91 | } else if (isColumnType<PgLineTuple<any>>(column, ['PgLine'])) { |
| 92 | schema = v.tuple([v.number(), v.number(), v.number()]); |
| 93 | v.array(v.array(v.number())); |
| 94 | } else if (isColumnType<PgLineABC<any>>(column, ['PgLineABC'])) { |
| 95 | schema = v.object({ a: v.number(), b: v.number(), c: v.number() }); |
| 96 | } // Handle other types |
| 97 | else if (isColumnType<PgArray<any, any>>(column, ['PgArray'])) { |
| 98 | schema = v.array(columnToSchema(column.baseColumn)); |
| 99 | schema = column.size ? v.pipe(schema as v.ArraySchema<any, any>, v.length(column.size)) : schema; |
| 100 | } else if (column.dataType === 'array') { |
| 101 | schema = v.array(v.any()); |
| 102 | } else if (column.dataType === 'number') { |
| 103 | schema = numberColumnToSchema(column); |
| 104 | } else if (column.dataType === 'bigint') { |
| 105 | schema = bigintColumnToSchema(column); |
| 106 | } else if (column.dataType === 'boolean') { |
| 107 | schema = v.boolean(); |
| 108 | } else if (column.dataType === 'date') { |
| 109 | schema = v.date(); |
| 110 | } else if (column.dataType === 'string') { |
| 111 | schema = stringColumnToSchema(column); |
| 112 | } else if (column.dataType === 'json') { |
| 113 | schema = jsonSchema; |
| 114 | } else if (column.dataType === 'custom') { |
| 115 | schema = v.any(); |
| 116 | } else if (column.dataType === 'buffer') { |
| 117 | schema = bufferSchema; |
| 118 | } |
| 119 | } |
| 120 | |
| 121 | if (!schema) { |
| 122 | schema = v.any(); |
| 123 | } |
| 124 | |
| 125 | return schema; |
| 126 | } |
| 127 | |
| 128 | function numberColumnToSchema(column: Column): v.GenericSchema { |
| 129 | let unsigned = column.getSQLType().includes('unsigned'); |
no test coverage detected