{"version":3,"file":"schema.cjs","names":["Column","SQL","columnToSchema","t","mapEnumValues","isWithEnum"],"sources":["../../src/typebox/schema.ts"],"sourcesContent":["import { Type as t } from 'typebox';\nimport type { TSchema } from 'typebox';\nimport { Column } from '~/column.ts';\nimport { is } from '~/entity.ts';\nimport type { PgEnum } from '~/pg-core/columns/enum.ts';\nimport { isView, SQL, type View } from '~/sql/sql.ts';\nimport { isTable, type Table } from '~/table.ts';\nimport { getColumns } from '~/utils.ts';\nimport { isWithEnum } from '../utils.ts';\nimport { columnToSchema, mapEnumValues } from './column.ts';\nimport type { Conditions } from './schema.types.internal.ts';\nimport type {\n\tCreateInsertSchema,\n\tCreateSchemaFactoryOptions,\n\tCreateSelectSchema,\n\tCreateUpdateSchema,\n} from './schema.types.ts';\n\nexport function handleColumns(\n\tcolumns: Record<string, any>,\n\trefinements: Record<string, any>,\n\tconditions: Conditions,\n\tfactory?: CreateSchemaFactoryOptions,\n): TSchema {\n\tconst columnSchemas: Record<string, TSchema> = {};\n\n\tfor (const [key, selected] of Object.entries(columns)) {\n\t\tif (!is(selected, Column) && !is(selected, SQL) && !is(selected, SQL.Aliased) && typeof selected === 'object') {\n\t\t\tconst columns = isTable(selected) || isView(selected) ? getColumns(selected) : selected;\n\t\t\tcolumnSchemas[key] = handleColumns(columns, refinements[key] ?? {}, conditions, factory);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst refinement = refinements[key];\n\t\tif (refinement !== undefined && typeof refinement !== 'function') {\n\t\t\tcolumnSchemas[key] = refinement;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst column = is(selected, Column) ? selected : undefined;\n\t\tconst schema = column ? columnToSchema(column, factory?.typeboxInstance ?? t) : t.Any();\n\t\tconst refined = typeof refinement === 'function' ? refinement(schema) : schema;\n\n\t\tif (conditions.never(column)) {\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tcolumnSchemas[key] = refined;\n\t\t}\n\n\t\tif (column) {\n\t\t\tif (conditions.nullable(column)) {\n\t\t\t\tcolumnSchemas[key] = t.Union([columnSchemas[key]!, t.Null()]);\n\t\t\t}\n\n\t\t\tif (conditions.optional(column)) {\n\t\t\t\tcolumnSchemas[key] = t.Optional(columnSchemas[key]!);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn t.Object(columnSchemas) as any;\n}\n\nexport function handleEnum(enum_: PgEnum<any>, factory?: CreateSchemaFactoryOptions) {\n\tconst typebox: typeof t = factory?.typeboxInstance ?? t;\n\treturn typebox.Enum(mapEnumValues(enum_.enumValues));\n}\n\nconst selectConditions: Conditions = {\n\tnever: () => false,\n\toptional: () => false,\n\tnullable: (column) => !column.notNull,\n};\n\nconst insertConditions: Conditions = {\n\tnever: (column) =>\n\t\tcolumn?.generated?.type === 'always' || column?.generatedIdentity?.type === 'always'\n\t\t|| ('identity' in (column ?? {}) && typeof (column as any)?.identity !== 'undefined'),\n\toptional: (column) => !column.notNull || (column.notNull && column.hasDefault),\n\tnullable: (column) => !column.notNull,\n};\n\nconst updateConditions: Conditions = {\n\tnever: (column) =>\n\t\tcolumn?.generated?.type === 'always' || column?.generatedIdentity?.type === 'always'\n\t\t|| ('identity' in (column ?? {}) && typeof (column as any)?.identity !== 'undefined'),\n\toptional: () => true,\n\tnullable: (column) => !column.notNull,\n};\n\nexport const createSelectSchema: CreateSelectSchema = (\n\tentity: Table | View | PgEnum<[string, ...string[]]>,\n\trefine?: Record<string, any>,\n) => {\n\tif (isWithEnum(entity)) {\n\t\treturn handleEnum(entity);\n\t}\n\tconst columns = getColumns(entity);\n\treturn handleColumns(columns, refine ?? {}, selectConditions) as any;\n};\n\nexport const createInsertSchema: CreateInsertSchema = (\n\tentity: Table,\n\trefine?: Record<string, any>,\n) => {\n\tconst columns = getColumns(entity);\n\treturn handleColumns(columns, refine ?? {}, insertConditions) as any;\n};\n\nexport const createUpdateSchema: CreateUpdateSchema = (\n\tentity: Table,\n\trefine?: Record<string, any>,\n) => {\n\tconst columns = getColumns(entity);\n\treturn handleColumns(columns, refine ?? {}, updateConditions) as any;\n};\n\nexport function createSchemaFactory(options?: CreateSchemaFactoryOptions) {\n\tconst createSelectSchema: CreateSelectSchema = (\n\t\tentity: Table | View | PgEnum<[string, ...string[]]>,\n\t\trefine?: Record<string, any>,\n\t) => {\n\t\tif (isWithEnum(entity)) {\n\t\t\treturn handleEnum(entity, options);\n\t\t}\n\t\tconst columns = getColumns(entity);\n\t\treturn handleColumns(columns, refine ?? {}, selectConditions, options) as any;\n\t};\n\n\tconst createInsertSchema: CreateInsertSchema = (\n\t\tentity: Table,\n\t\trefine?: Record<string, any>,\n\t) => {\n\t\tconst columns = getColumns(entity);\n\t\treturn handleColumns(columns, refine ?? {}, insertConditions, options) as any;\n\t};\n\n\tconst createUpdateSchema: CreateUpdateSchema = (\n\t\tentity: Table,\n\t\trefine?: Record<string, any>,\n\t) => {\n\t\tconst columns = getColumns(entity);\n\t\treturn handleColumns(columns, refine ?? {}, updateConditions, options) as any;\n\t};\n\n\treturn { createSelectSchema, createInsertSchema, createUpdateSchema };\n}\n"],"mappings":";;;;;;;;;;;;AAkBA,SAAgB,cACf,SACA,aACA,YACA,SACU;CACV,MAAM,gBAAyC,EAAE;AAEjD,MAAK,MAAM,CAAC,KAAK,aAAa,OAAO,QAAQ,QAAQ,EAAE;AACtD,MAAI,qBAAI,UAAUA,mBAAO,IAAI,qBAAI,UAAUC,iBAAI,IAAI,qBAAI,UAAUA,iBAAI,QAAQ,IAAI,OAAO,aAAa,UAAU;AAE9G,iBAAc,OAAO,sCADG,SAAS,6BAAW,SAAS,8BAAc,SAAS,GAAG,UACnC,YAAY,QAAQ,EAAE,EAAE,YAAY,QAAQ;AACxF;;EAGD,MAAM,aAAa,YAAY;AAC/B,MAAI,eAAe,UAAa,OAAO,eAAe,YAAY;AACjE,iBAAc,OAAO;AACrB;;EAGD,MAAM,6BAAY,UAAUD,mBAAO,GAAG,WAAW;EACjD,MAAM,SAAS,SAASE,sCAAe,QAAQ,SAAS,mBAAmBC,aAAE,GAAGA,aAAE,KAAK;EACvF,MAAM,UAAU,OAAO,eAAe,aAAa,WAAW,OAAO,GAAG;AAExE,MAAI,WAAW,MAAM,OAAO,CAC3B;MAEA,eAAc,OAAO;AAGtB,MAAI,QAAQ;AACX,OAAI,WAAW,SAAS,OAAO,CAC9B,eAAc,OAAOA,aAAE,MAAM,CAAC,cAAc,MAAOA,aAAE,MAAM,CAAC,CAAC;AAG9D,OAAI,WAAW,SAAS,OAAO,CAC9B,eAAc,OAAOA,aAAE,SAAS,cAAc,KAAM;;;AAKvD,QAAOA,aAAE,OAAO,cAAc;;AAG/B,SAAgB,WAAW,OAAoB,SAAsC;AAEpF,SAD0B,SAAS,mBAAmBA,cACvC,KAAKC,qCAAc,MAAM,WAAW,CAAC;;AAGrD,MAAM,mBAA+B;CACpC,aAAa;CACb,gBAAgB;CAChB,WAAW,WAAW,CAAC,OAAO;CAC9B;AAED,MAAM,mBAA+B;CACpC,QAAQ,WACP,QAAQ,WAAW,SAAS,YAAY,QAAQ,mBAAmB,SAAS,YACxE,eAAe,UAAU,EAAE,KAAK,OAAQ,QAAgB,aAAa;CAC1E,WAAW,WAAW,CAAC,OAAO,WAAY,OAAO,WAAW,OAAO;CACnE,WAAW,WAAW,CAAC,OAAO;CAC9B;AAED,MAAM,mBAA+B;CACpC,QAAQ,WACP,QAAQ,WAAW,SAAS,YAAY,QAAQ,mBAAmB,SAAS,YACxE,eAAe,UAAU,EAAE,KAAK,OAAQ,QAAgB,aAAa;CAC1E,gBAAgB;CAChB,WAAW,WAAW,CAAC,OAAO;CAC9B;AAED,MAAa,sBACZ,QACA,WACI;AACJ,KAAIC,yBAAW,OAAO,CACrB,QAAO,WAAW,OAAO;AAG1B,QAAO,yCADoB,OAAO,EACJ,UAAU,EAAE,EAAE,iBAAiB;;AAG9D,MAAa,sBACZ,QACA,WACI;AAEJ,QAAO,yCADoB,OAAO,EACJ,UAAU,EAAE,EAAE,iBAAiB;;AAG9D,MAAa,sBACZ,QACA,WACI;AAEJ,QAAO,yCADoB,OAAO,EACJ,UAAU,EAAE,EAAE,iBAAiB;;AAG9D,SAAgB,oBAAoB,SAAsC;CACzE,MAAM,sBACL,QACA,WACI;AACJ,MAAIA,yBAAW,OAAO,CACrB,QAAO,WAAW,QAAQ,QAAQ;AAGnC,SAAO,yCADoB,OAAO,EACJ,UAAU,EAAE,EAAE,kBAAkB,QAAQ;;CAGvE,MAAM,sBACL,QACA,WACI;AAEJ,SAAO,yCADoB,OAAO,EACJ,UAAU,EAAE,EAAE,kBAAkB,QAAQ;;CAGvE,MAAM,sBACL,QACA,WACI;AAEJ,SAAO,yCADoB,OAAO,EACJ,UAAU,EAAE,EAAE,kBAAkB,QAAQ;;AAGvE,QAAO;EAAE;EAAoB;EAAoB;EAAoB"}