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