{"version":3,"file":"blob.cjs","names":["MySqlColumnBuilder","entityKind","MySqlColumn"],"sources":["../../../src/mysql-core/columns/blob.ts"],"sourcesContent":["import type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { MySqlTable } from '~/mysql-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { MySqlColumn, MySqlColumnBuilder } from './common.ts';\n\nexport type MySqlBlobColumnType = 'tinyblob' | 'blob' | 'mediumblob' | 'longblob';\n\nexport class MySqlStringBlobBuilder extends MySqlColumnBuilder<\n\t{\n\t\tdataType: 'string';\n\t\tdata: string;\n\t\tdriverParam: string;\n\t},\n\t{ blobType: MySqlBlobColumnType; length: number }\n> {\n\tstatic override readonly [entityKind]: string = 'MySqlBlobBuilder';\n\n\tconstructor(name: string, blobType: MySqlBlobColumnType) {\n\t\tsuper(name, 'string', 'MySqlBlob');\n\t\tthis.config.blobType = blobType;\n\t\tswitch (blobType) {\n\t\t\tcase 'tinyblob': {\n\t\t\t\tthis.config.length = 255;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'blob': {\n\t\t\t\tthis.config.length = 65535;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'mediumblob': {\n\t\t\t\tthis.config.length = 16777215;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'longblob': {\n\t\t\t\tthis.config.length = 4294967295;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @internal */\n\toverride build(table: MySqlTable) {\n\t\treturn new MySqlStringBlob(table, this.config as any);\n\t}\n}\n\nexport class MySqlStringBlob<T extends ColumnBaseConfig<'string'>>\n\textends MySqlColumn<T, { blobType: MySqlBlobColumnType }>\n{\n\tstatic override readonly [entityKind]: string = 'MySqlBlob';\n\n\t/** @internal */\n\toverride readonly codec: MySqlBlobColumnType = this.config.blobType;\n\n\treadonly blobType: MySqlBlobColumnType = this.config.blobType;\n\n\tgetSQLType(): string {\n\t\treturn this.blobType;\n\t}\n}\n\nexport class MySqlBufferBlobBuilder extends MySqlColumnBuilder<\n\t{\n\t\tdataType: 'string';\n\t\tdata: Buffer;\n\t\tdriverParam: string;\n\t},\n\t{ blobType: MySqlBlobColumnType; length: number }\n> {\n\tstatic override readonly [entityKind]: string = 'MySqlBlobBuilder';\n\n\tconstructor(name: string, blobType: MySqlBlobColumnType) {\n\t\tsuper(name, 'string', 'MySqlBlob');\n\t\tthis.config.blobType = blobType;\n\t\tswitch (blobType) {\n\t\t\tcase 'tinyblob': {\n\t\t\t\tthis.config.length = 255;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'blob': {\n\t\t\t\tthis.config.length = 65535;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'mediumblob': {\n\t\t\t\tthis.config.length = 16777215;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'longblob': {\n\t\t\t\tthis.config.length = 4294967295;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @internal */\n\toverride build(table: MySqlTable) {\n\t\treturn new MySqlBufferBlob(table, this.config as any);\n\t}\n}\nexport class MySqlBufferBlob<T extends ColumnBaseConfig<'object buffer'>>\n\textends MySqlColumn<T, { blobType: MySqlBlobColumnType }>\n{\n\tstatic override readonly [entityKind]: string = 'MySqlBlob';\n\n\t/** @internal */\n\toverride readonly codec: `${MySqlBlobColumnType}:buffer` = `${this.config.blobType}:buffer`;\n\n\treadonly blobType: MySqlBlobColumnType = this.config.blobType;\n\n\tgetSQLType(): string {\n\t\treturn this.blobType;\n\t}\n}\n\nexport interface MySqlBlobConfig<\n\tTMode extends 'buffer' | 'string' = 'buffer' | 'string',\n> {\n\tmode?: TMode;\n}\n\nexport function blob<TMode extends MySqlBlobConfig['mode'] & {}>(\n\tconfig?: MySqlBlobConfig<TMode>,\n): Equal<TMode, 'string'> extends true ? MySqlStringBlobBuilder\n\t: MySqlBufferBlobBuilder;\nexport function blob<TMode extends MySqlBlobConfig['mode'] & {}>(\n\tname: string,\n\tconfig?: MySqlBlobConfig<TMode>,\n): Equal<TMode, 'string'> extends true ? MySqlStringBlobBuilder\n\t: MySqlBufferBlobBuilder;\nexport function blob(a?: string | MySqlBlobConfig, b: MySqlBlobConfig = {}): any {\n\tconst { name, config } = getColumnNameAndConfig<MySqlBlobConfig | undefined>(a, b);\n\tif (config?.mode === 'string') {\n\t\treturn new MySqlStringBlobBuilder(name, 'blob');\n\t}\n\treturn new MySqlBufferBlobBuilder(name, 'blob');\n}\n\nexport function tinyblob<TMode extends MySqlBlobConfig['mode'] & {}>(\n\tconfig?: MySqlBlobConfig<TMode>,\n): Equal<TMode, 'string'> extends true ? MySqlStringBlobBuilder\n\t: MySqlBufferBlobBuilder;\nexport function tinyblob<TMode extends MySqlBlobConfig['mode'] & {}>(\n\tname: string,\n\tconfig?: MySqlBlobConfig<TMode>,\n): Equal<TMode, 'string'> extends true ? MySqlStringBlobBuilder\n\t: MySqlBufferBlobBuilder;\nexport function tinyblob(a?: string | MySqlBlobConfig, b: MySqlBlobConfig = {}): any {\n\tconst { name, config } = getColumnNameAndConfig<MySqlBlobConfig | undefined>(a, b);\n\tif (config?.mode === 'string') {\n\t\treturn new MySqlStringBlobBuilder(name, 'tinyblob');\n\t}\n\treturn new MySqlBufferBlobBuilder(name, 'tinyblob');\n}\n\nexport function mediumblob<TMode extends MySqlBlobConfig['mode'] & {}>(\n\tconfig?: MySqlBlobConfig<TMode>,\n): Equal<TMode, 'string'> extends true ? MySqlStringBlobBuilder\n\t: MySqlBufferBlobBuilder;\nexport function mediumblob<TMode extends MySqlBlobConfig['mode'] & {}>(\n\tname: string,\n\tconfig?: MySqlBlobConfig<TMode>,\n): Equal<TMode, 'string'> extends true ? MySqlStringBlobBuilder\n\t: MySqlBufferBlobBuilder;\nexport function mediumblob(a?: string | MySqlBlobConfig, b: MySqlBlobConfig = {}): any {\n\tconst { name, config } = getColumnNameAndConfig<MySqlBlobConfig | undefined>(a, b);\n\tif (config?.mode === 'string') {\n\t\treturn new MySqlStringBlobBuilder(name, 'mediumblob');\n\t}\n\treturn new MySqlBufferBlobBuilder(name, 'mediumblob');\n}\n\nexport function longblob<TMode extends MySqlBlobConfig['mode'] & {}>(\n\tconfig?: MySqlBlobConfig<TMode>,\n): Equal<TMode, 'string'> extends true ? MySqlStringBlobBuilder\n\t: MySqlBufferBlobBuilder;\nexport function longblob<TMode extends MySqlBlobConfig['mode'] & {}>(\n\tname: string,\n\tconfig?: MySqlBlobConfig<TMode>,\n): Equal<TMode, 'string'> extends true ? MySqlStringBlobBuilder\n\t: MySqlBufferBlobBuilder;\nexport function longblob(a?: string | MySqlBlobConfig, b: MySqlBlobConfig = {}): any {\n\tconst { name, config } = getColumnNameAndConfig<MySqlBlobConfig | undefined>(a, b);\n\tif (config?.mode === 'string') {\n\t\treturn new MySqlStringBlobBuilder(name, 'longblob');\n\t}\n\treturn new MySqlBufferBlobBuilder(name, 'longblob');\n}\n"],"mappings":";;;;;;;AAQA,IAAa,yBAAb,cAA4CA,qDAO1C;CACD,QAA0BC,0BAAsB;CAEhD,YAAY,MAAc,UAA+B;AACxD,QAAM,MAAM,UAAU,YAAY;AAClC,OAAK,OAAO,WAAW;AACvB,UAAQ,UAAR;GACC,KAAK;AACJ,SAAK,OAAO,SAAS;AACrB;GAED,KAAK;AACJ,SAAK,OAAO,SAAS;AACrB;GAED,KAAK;AACJ,SAAK,OAAO,SAAS;AACrB;GAED,KAAK;AACJ,SAAK,OAAO,SAAS;AACrB;;;;CAMH,AAAS,MAAM,OAAmB;AACjC,SAAO,IAAI,gBAAgB,OAAO,KAAK,OAAc;;;AAIvD,IAAa,kBAAb,cACSC,8CACT;CACC,QAA0BD,0BAAsB;;CAGhD,AAAkB,QAA6B,KAAK,OAAO;CAE3D,AAAS,WAAgC,KAAK,OAAO;CAErD,aAAqB;AACpB,SAAO,KAAK;;;AAId,IAAa,yBAAb,cAA4CD,qDAO1C;CACD,QAA0BC,0BAAsB;CAEhD,YAAY,MAAc,UAA+B;AACxD,QAAM,MAAM,UAAU,YAAY;AAClC,OAAK,OAAO,WAAW;AACvB,UAAQ,UAAR;GACC,KAAK;AACJ,SAAK,OAAO,SAAS;AACrB;GAED,KAAK;AACJ,SAAK,OAAO,SAAS;AACrB;GAED,KAAK;AACJ,SAAK,OAAO,SAAS;AACrB;GAED,KAAK;AACJ,SAAK,OAAO,SAAS;AACrB;;;;CAMH,AAAS,MAAM,OAAmB;AACjC,SAAO,IAAI,gBAAgB,OAAO,KAAK,OAAc;;;AAGvD,IAAa,kBAAb,cACSC,8CACT;CACC,QAA0BD,0BAAsB;;CAGhD,AAAkB,QAAyC,GAAG,KAAK,OAAO,SAAS;CAEnF,AAAS,WAAgC,KAAK,OAAO;CAErD,aAAqB;AACpB,SAAO,KAAK;;;AAmBd,SAAgB,KAAK,GAA8B,IAAqB,EAAE,EAAO;CAChF,MAAM,EAAE,MAAM,kDAA+D,GAAG,EAAE;AAClF,KAAI,QAAQ,SAAS,SACpB,QAAO,IAAI,uBAAuB,MAAM,OAAO;AAEhD,QAAO,IAAI,uBAAuB,MAAM,OAAO;;AAYhD,SAAgB,SAAS,GAA8B,IAAqB,EAAE,EAAO;CACpF,MAAM,EAAE,MAAM,kDAA+D,GAAG,EAAE;AAClF,KAAI,QAAQ,SAAS,SACpB,QAAO,IAAI,uBAAuB,MAAM,WAAW;AAEpD,QAAO,IAAI,uBAAuB,MAAM,WAAW;;AAYpD,SAAgB,WAAW,GAA8B,IAAqB,EAAE,EAAO;CACtF,MAAM,EAAE,MAAM,kDAA+D,GAAG,EAAE;AAClF,KAAI,QAAQ,SAAS,SACpB,QAAO,IAAI,uBAAuB,MAAM,aAAa;AAEtD,QAAO,IAAI,uBAAuB,MAAM,aAAa;;AAYtD,SAAgB,SAAS,GAA8B,IAAqB,EAAE,EAAO;CACpF,MAAM,EAAE,MAAM,kDAA+D,GAAG,EAAE;AAClF,KAAI,QAAQ,SAAS,SACpB,QAAO,IAAI,uBAAuB,MAAM,WAAW;AAEpD,QAAO,IAAI,uBAAuB,MAAM,WAAW"}