{"version":3,"file":"text.cjs","names":["SQLiteColumnBuilder","entityKind","SQLiteColumn"],"sources":["../../../src/sqlite-core/columns/text.ts"],"sourcesContent":["import type { ColumnBuilderRuntimeConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnySQLiteTable, SQLiteTable } from '~/sqlite-core/table.ts';\nimport { type Equal, getColumnNameAndConfig, type Writable } from '~/utils.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport class SQLiteTextBuilder<\n\tTEnum extends [string, ...string[]],\n> extends SQLiteColumnBuilder<\n\t{\n\t\tdataType: Equal<TEnum, [string, ...string[]]> extends true ? 'string' : 'string enum';\n\t\tdata: TEnum[number];\n\t\tdriverParam: string;\n\t\tenumValues: TEnum;\n\t},\n\t{ enumValues: TEnum; length: number | undefined }\n> {\n\tstatic override readonly [entityKind]: string = 'SQLiteTextBuilder';\n\n\tconstructor(name: string, config: SQLiteTextConfig<'text', TEnum>) {\n\t\tsuper(name, config.enum?.length ? 'string enum' : 'string', 'SQLiteText');\n\t\tthis.config.enumValues = config.enum!;\n\t\tthis.config.length = config.length!;\n\t}\n\n\t/** @internal */\n\toverride build(table: SQLiteTable) {\n\t\treturn new SQLiteText(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class SQLiteText<T extends ColumnBaseConfig<'string' | 'string enum'>>\n\textends SQLiteColumn<T, { length: number | undefined; enumValues: T['enumValues'] }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteText';\n\n\toverride readonly enumValues = this.config.enumValues;\n\n\tconstructor(\n\t\ttable: AnySQLiteTable<{ name: T['tableName'] }>,\n\t\tconfig: ColumnBuilderRuntimeConfig<T['data']> & { enumValues: T['enumValues']; length: number | undefined },\n\t) {\n\t\tsuper(table, config);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn `text${this.config.length ? `(${this.config.length})` : ''}`;\n\t}\n}\n\nexport class SQLiteTextJsonBuilder extends SQLiteColumnBuilder<{\n\tdataType: 'object json';\n\tdata: unknown;\n\tdriverParam: string;\n\n\tgenerated: undefined;\n}> {\n\tstatic override readonly [entityKind]: string = 'SQLiteTextJsonBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'object json', 'SQLiteTextJson');\n\t}\n\n\t/** @internal */\n\toverride build(table: SQLiteTable) {\n\t\treturn new SQLiteTextJson(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class SQLiteTextJson<T extends ColumnBaseConfig<'object json'>>\n\textends SQLiteColumn<T, { length: number | undefined; enumValues: T['enumValues'] }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteTextJson';\n\n\tgetSQLType(): string {\n\t\treturn 'text';\n\t}\n\n\toverride mapFromDriverValue = (value: string): T['data'] => {\n\t\treturn JSON.parse(value);\n\t};\n\n\toverride mapToDriverValue = (value: T['data']): string => {\n\t\treturn JSON.stringify(value);\n\t};\n}\n\nexport type SQLiteTextConfig<\n\tTMode extends 'text' | 'json' = 'text' | 'json',\n\tTEnum extends readonly string[] | string[] | undefined = readonly string[] | string[] | undefined,\n> = TMode extends 'text' ? {\n\t\tmode?: TMode;\n\t\tlength?: number;\n\t\tenum?: TEnum;\n\t}\n\t: {\n\t\tmode?: TMode;\n\t};\n\nexport function text<\n\tU extends string,\n\tT extends Readonly<[U, ...U[]]>,\n\tTMode extends 'text' | 'json' = 'text' | 'json',\n>(\n\tconfig?: SQLiteTextConfig<TMode, T | Writable<T>>,\n): Equal<TMode, 'json'> extends true ? SQLiteTextJsonBuilder\n\t: SQLiteTextBuilder<Writable<T>>;\nexport function text<\n\tU extends string,\n\tT extends Readonly<[U, ...U[]]>,\n\tTMode extends 'text' | 'json' = 'text' | 'json',\n>(\n\tname: string,\n\tconfig?: SQLiteTextConfig<TMode, T | Writable<T>>,\n): Equal<TMode, 'json'> extends true ? SQLiteTextJsonBuilder\n\t: SQLiteTextBuilder<Writable<T>>;\nexport function text(a?: string | SQLiteTextConfig, b: SQLiteTextConfig = {}): any {\n\tconst { name, config } = getColumnNameAndConfig<SQLiteTextConfig>(a, b);\n\tif (config.mode === 'json') {\n\t\treturn new SQLiteTextJsonBuilder(name);\n\t}\n\treturn new SQLiteTextBuilder(name, config as any);\n}\n"],"mappings":";;;;;;;AAOA,IAAa,oBAAb,cAEUA,uDAQR;CACD,QAA0BC,0BAAsB;CAEhD,YAAY,MAAc,QAAyC;AAClE,QAAM,MAAM,OAAO,MAAM,SAAS,gBAAgB,UAAU,aAAa;AACzE,OAAK,OAAO,aAAa,OAAO;AAChC,OAAK,OAAO,SAAS,OAAO;;;CAI7B,AAAS,MAAM,OAAoB;AAClC,SAAO,IAAI,WACV,OACA,KAAK,OACL;;;AAIH,IAAa,aAAb,cACSC,gDACT;CACC,QAA0BD,0BAAsB;CAEhD,AAAkB,aAAa,KAAK,OAAO;CAE3C,YACC,OACA,QACC;AACD,QAAM,OAAO,OAAO;;CAGrB,aAAqB;AACpB,SAAO,OAAO,KAAK,OAAO,SAAS,IAAI,KAAK,OAAO,OAAO,KAAK;;;AAIjE,IAAa,wBAAb,cAA2CD,uDAMxC;CACF,QAA0BC,0BAAsB;CAEhD,YAAY,MAAc;AACzB,QAAM,MAAM,eAAe,iBAAiB;;;CAI7C,AAAS,MAAM,OAAoB;AAClC,SAAO,IAAI,eACV,OACA,KAAK,OACL;;;AAIH,IAAa,iBAAb,cACSC,gDACT;CACC,QAA0BD,0BAAsB;CAEhD,aAAqB;AACpB,SAAO;;CAGR,AAAS,sBAAsB,UAA6B;AAC3D,SAAO,KAAK,MAAM,MAAM;;CAGzB,AAAS,oBAAoB,UAA6B;AACzD,SAAO,KAAK,UAAU,MAAM;;;AAiC9B,SAAgB,KAAK,GAA+B,IAAsB,EAAE,EAAO;CAClF,MAAM,EAAE,MAAM,kDAAoD,GAAG,EAAE;AACvE,KAAI,OAAO,SAAS,OACnB,QAAO,IAAI,sBAAsB,KAAK;AAEvC,QAAO,IAAI,kBAAkB,MAAM,OAAc"}