{"version":3,"file":"datetime.cjs","names":["SingleStoreColumnBuilder","entityKind","SingleStoreColumn"],"sources":["../../../src/singlestore-core/columns/datetime.ts"],"sourcesContent":["import type { ColumnBuilderRuntimeConfig, GeneratedColumnConfig, HasGenerated } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnySingleStoreTable, SingleStoreTable } from '~/singlestore-core/table.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { SingleStoreColumn, SingleStoreColumnBuilder, type SingleStoreGeneratedColumnConfig } from './common.ts';\n\nexport class SingleStoreDateTimeBuilder extends SingleStoreColumnBuilder<{\n\tdataType: 'object date';\n\tdata: Date;\n\tdriverParam: string | number;\n}, SingleStoreDatetimeConfig> {\n\t// TODO: we need to add a proper support for SingleStore\n\toverride generatedAlwaysAs(\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\tas: SQL | (() => SQL) | this['_']['data'],\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\tconfig?: SingleStoreGeneratedColumnConfig,\n\t): HasGenerated<this, { type: 'always' }> {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\tstatic override readonly [entityKind]: string = 'SingleStoreDateTimeBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'object date', 'SingleStoreDateTime');\n\t}\n\n\t/** @internal */\n\toverride build(table: SingleStoreTable) {\n\t\treturn new SingleStoreDateTime(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class SingleStoreDateTime<T extends ColumnBaseConfig<'object date'>> extends SingleStoreColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreDateTime';\n\n\tconstructor(\n\t\ttable: AnySingleStoreTable<{ name: T['tableName'] }>,\n\t\tconfig: ColumnBuilderRuntimeConfig<T['data']> & SingleStoreDatetimeConfig,\n\t) {\n\t\tsuper(table, config);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn `datetime`;\n\t}\n\n\toverride mapToDriverValue = (value: Date | string): string => {\n\t\tif (typeof value === 'string') return value;\n\t\treturn value.toISOString().replace('T', ' ').replace('Z', '');\n\t};\n\n\toverride mapFromDriverValue = (value: string): Date => {\n\t\treturn new Date(value.replace(' ', 'T') + 'Z');\n\t};\n}\n\nexport class SingleStoreDateTimeStringBuilder extends SingleStoreColumnBuilder<{\n\tdataType: 'string datetime';\n\tdata: string;\n\tdriverParam: string | number;\n}, SingleStoreDatetimeConfig> {\n\t// TODO: we need to add a proper support for SingleStore\n\toverride generatedAlwaysAs(\n\t\t_as: SQL | (() => SQL) | this['_']['data'],\n\t\t_config?: Partial<GeneratedColumnConfig<unknown>>,\n\t): HasGenerated<this, { type: 'always' }> {\n\t\tthrow new Error('Method not implemented.');\n\t}\n\tstatic override readonly [entityKind]: string = 'SingleStoreDateTimeStringBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'string datetime', 'SingleStoreDateTimeString');\n\t}\n\n\t/** @internal */\n\toverride build(table: SingleStoreTable) {\n\t\treturn new SingleStoreDateTimeString(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class SingleStoreDateTimeString<T extends ColumnBaseConfig<'string datetime'>> extends SingleStoreColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreDateTimeString';\n\n\tconstructor(\n\t\ttable: AnySingleStoreTable<{ name: T['tableName'] }>,\n\t\tconfig: ColumnBuilderRuntimeConfig<T['data']> & SingleStoreDatetimeConfig,\n\t) {\n\t\tsuper(table, config);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn `datetime`;\n\t}\n\n\toverride mapToDriverValue = (value: Date | string): string => {\n\t\tif (typeof value === 'string') return value;\n\t\treturn value.toISOString().replace('T', ' ').replace('Z', '');\n\t};\n}\n\nexport interface SingleStoreDatetimeConfig<TMode extends 'date' | 'string' = 'date' | 'string'> {\n\tmode?: TMode;\n}\n\nexport function datetime<TMode extends SingleStoreDatetimeConfig['mode'] & {}>(\n\tconfig?: SingleStoreDatetimeConfig<TMode>,\n): Equal<TMode, 'string'> extends true ? SingleStoreDateTimeStringBuilder\n\t: SingleStoreDateTimeBuilder;\nexport function datetime<TMode extends SingleStoreDatetimeConfig['mode'] & {}>(\n\tname: string,\n\tconfig?: SingleStoreDatetimeConfig<TMode>,\n): Equal<TMode, 'string'> extends true ? SingleStoreDateTimeStringBuilder\n\t: SingleStoreDateTimeBuilder;\nexport function datetime(a?: string | SingleStoreDatetimeConfig, b?: SingleStoreDatetimeConfig) {\n\tconst { name, config } = getColumnNameAndConfig<SingleStoreDatetimeConfig | undefined>(a, b);\n\tif (config?.mode === 'string') {\n\t\treturn new SingleStoreDateTimeStringBuilder(name);\n\t}\n\treturn new SingleStoreDateTimeBuilder(name);\n}\n"],"mappings":";;;;;;;AAQA,IAAa,6BAAb,cAAgDA,iEAIlB;CAE7B,AAAS,kBAER,IAEA,QACyC;AACzC,QAAM,IAAI,MAAM,0BAA0B;;CAE3C,QAA0BC,0BAAsB;CAEhD,YAAY,MAAc;AACzB,QAAM,MAAM,eAAe,sBAAsB;;;CAIlD,AAAS,MAAM,OAAyB;AACvC,SAAO,IAAI,oBACV,OACA,KAAK,OACL;;;AAIH,IAAa,sBAAb,cAAoFC,0DAAqB;CACxG,QAA0BD,0BAAsB;CAEhD,YACC,OACA,QACC;AACD,QAAM,OAAO,OAAO;;CAGrB,aAAqB;AACpB,SAAO;;CAGR,AAAS,oBAAoB,UAAiC;AAC7D,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,SAAO,MAAM,aAAa,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,KAAK,GAAG;;CAG9D,AAAS,sBAAsB,UAAwB;AACtD,yBAAO,IAAI,KAAK,MAAM,QAAQ,KAAK,IAAI,GAAG,IAAI;;;AAIhD,IAAa,mCAAb,cAAsDD,iEAIxB;CAE7B,AAAS,kBACR,KACA,SACyC;AACzC,QAAM,IAAI,MAAM,0BAA0B;;CAE3C,QAA0BC,0BAAsB;CAEhD,YAAY,MAAc;AACzB,QAAM,MAAM,mBAAmB,4BAA4B;;;CAI5D,AAAS,MAAM,OAAyB;AACvC,SAAO,IAAI,0BACV,OACA,KAAK,OACL;;;AAIH,IAAa,4BAAb,cAA8FC,0DAAqB;CAClH,QAA0BD,0BAAsB;CAEhD,YACC,OACA,QACC;AACD,QAAM,OAAO,OAAO;;CAGrB,aAAqB;AACpB,SAAO;;CAGR,AAAS,oBAAoB,UAAiC;AAC7D,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,SAAO,MAAM,aAAa,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,KAAK,GAAG;;;AAiB/D,SAAgB,SAAS,GAAwC,GAA+B;CAC/F,MAAM,EAAE,MAAM,kDAAyE,GAAG,EAAE;AAC5F,KAAI,QAAQ,SAAS,SACpB,QAAO,IAAI,iCAAiC,KAAK;AAElD,QAAO,IAAI,2BAA2B,KAAK"}