@handfish/drizzle-effect
Version:
Generate `effect` schemas from Drizzle ORM schemas
3 lines (2 loc) • 2.33 kB
JavaScript
import*as e from"drizzle-orm";import*as t from"drizzle-orm/mysql-core";import*as r from"drizzle-orm/pg-core";import*as n from"drizzle-orm/sqlite-core";import{Schema as i}from"effect";const o=i.Union(i.String,i.Number,i.Boolean,i.Null,i.Record({key:i.String,value:i.Unknown}),i.Array(i.Unknown)),a=i.suspend((()=>i.Union(i.String,i.Number,i.Boolean,i.Null,i.Record({key:i.String,value:a}),i.Array(a))));function s(t,r){const n=e.getTableColumns(t),o=Object.entries(n);let a=Object.fromEntries(o.map((([e,t])=>[e,f(t)])));if(r){const e=Object.entries(r).map((([e,t])=>[e,"function"!=typeof t||i.isSchema(t)||i.isPropertySignature(t)?t:t(a)]));a=Object.assign(a,Object.fromEntries(e))}for(const[e,t]of o)t.notNull?t.hasDefault&&(a[e]=i.optional(a[e])):a[e]=i.optional(i.NullOr(a[e]));return i.Struct(a)}function l(t,r){const n=e.getTableColumns(t),o=Object.entries(n);let a=Object.fromEntries(o.map((([e,t])=>[e,f(t)])));if(r){const e=Object.entries(r).map((([e,t])=>[e,"function"!=typeof t||i.isSchema(t)||i.isPropertySignature(t)?t:t(a)]));a=Object.assign(a,Object.fromEntries(e))}for(const[e,t]of o)t.notNull||(a[e]=i.NullOr(a[e]));return i.Struct(a)}function m(e){return"object"==typeof e&&null!==e&&"mode"in e&&"string"==typeof e.mode}function f(a){let s;if(function(e){return"enumValues"in e&&Array.isArray(e.enumValues)&&e.enumValues.length>0}(a)&&(s=a.enumValues.length?i.Literal(...a.enumValues):i.String),!s)if(e.is(a,r.PgUUID))s=i.UUID;else if("custom"===a.dataType)s=i.Any;else if("json"===a.dataType)s=o;else if("array"===a.dataType)s=i.Array(f(a.baseColumn));else if("number"===a.dataType)s=i.Number;else if("bigint"===a.dataType)s=i.BigIntFromSelf;else if("boolean"===a.dataType)s=i.Boolean;else if("date"===a.dataType)s=m(a)&&"string"===a.mode?i.String:i.DateFromSelf;else if("string"===a.dataType)if(e.is(a,r.PgTimestamp))s=m(a)&&"string"===a.mode?i.String:i.DateFromSelf;else if(e.is(a,r.PgDate))s=m(a)&&"string"===a.mode?i.String:i.DateFromSelf;else{let o=i.String;(e.is(a,r.PgChar)||e.is(a,r.PgVarchar)||e.is(a,t.MySqlVarChar)||e.is(a,t.MySqlVarBinary)||e.is(a,t.MySqlChar)||e.is(a,n.SQLiteText))&&"number"==typeof a.length&&(o=o.pipe(i.maxLength(a.length))),s=o}return s||(s=i.Any),s}export{o as JsonValue,a as StrictJsonValue,s as createInsertSchema,l as createSelectSchema};
//# sourceMappingURL=index.mjs.map