{"version":3,"file":"decimal.cjs","names":["MySqlColumnBuilderWithAutoIncrement","entityKind","MySqlColumnWithAutoIncrement"],"sources":["../../../src/mysql-core/columns/decimal.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 { MySqlColumnBuilderWithAutoIncrement, MySqlColumnWithAutoIncrement } from './common.ts';\n\nexport class MySqlDecimalBuilder<TUnsigned extends boolean | undefined> extends MySqlColumnBuilderWithAutoIncrement<{\n\tdataType: Equal<TUnsigned, true> extends true ? 'string unumeric' : 'string numeric';\n\tdata: string;\n\tdriverParam: string;\n}, MySqlDecimalConfig> {\n\tstatic override readonly [entityKind]: string = 'MySqlDecimalBuilder';\n\n\tconstructor(name: string, config: MySqlDecimalConfig | undefined) {\n\t\tsuper(name, (config?.unsigned ? 'string unumeric' : 'string numeric') as any, 'MySqlDecimal');\n\t\tthis.config.precision = config?.precision;\n\t\tthis.config.scale = config?.scale;\n\t\tthis.config.unsigned = config?.unsigned;\n\t}\n\n\t/** @internal */\n\toverride build(table: MySqlTable) {\n\t\treturn new MySqlDecimal(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class MySqlDecimal<T extends ColumnBaseConfig<'string numeric' | 'string unumeric'>>\n\textends MySqlColumnWithAutoIncrement<T, MySqlDecimalConfig>\n{\n\tstatic override readonly [entityKind]: string = 'MySqlDecimal';\n\n\t/** @internal */\n\toverride readonly codec = 'decimal';\n\n\treadonly precision: number | undefined = this.config.precision;\n\treadonly scale: number | undefined = this.config.scale;\n\treadonly unsigned: boolean | undefined = this.config.unsigned;\n\n\tgetSQLType(): string {\n\t\tlet type = '';\n\t\tif (this.precision !== undefined && this.scale !== undefined) {\n\t\t\ttype += `decimal(${this.precision},${this.scale})`;\n\t\t} else if (this.precision === undefined) {\n\t\t\ttype += 'decimal';\n\t\t} else {\n\t\t\ttype += `decimal(${this.precision})`;\n\t\t}\n\t\ttype = type === 'decimal(10,0)' || type === 'decimal(10)' ? 'decimal' : type;\n\t\treturn this.unsigned ? `${type} unsigned` : type;\n\t}\n}\n\nexport class MySqlDecimalNumberBuilder<TUnsigned extends boolean | undefined>\n\textends MySqlColumnBuilderWithAutoIncrement<{\n\t\tdataType: Equal<TUnsigned, true> extends true ? 'number unsigned' : 'number';\n\t\tdata: number;\n\t\tdriverParam: string;\n\t}, MySqlDecimalConfig>\n{\n\tstatic override readonly [entityKind]: string = 'MySqlDecimalNumberBuilder';\n\n\tconstructor(name: string, config: MySqlDecimalConfig | undefined) {\n\t\tsuper(name, config?.unsigned ? 'number unsigned' : 'number' as any, 'MySqlDecimalNumber');\n\t\tthis.config.precision = config?.precision;\n\t\tthis.config.scale = config?.scale;\n\t\tthis.config.unsigned = config?.unsigned;\n\t}\n\n\t/** @internal */\n\toverride build(table: MySqlTable) {\n\t\treturn new MySqlDecimalNumber(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class MySqlDecimalNumber<T extends ColumnBaseConfig<'number' | 'number unsigned'>>\n\textends MySqlColumnWithAutoIncrement<T, MySqlDecimalConfig>\n{\n\tstatic override readonly [entityKind]: string = 'MySqlDecimalNumber';\n\n\t/** @internal */\n\toverride readonly codec = 'decimal:number';\n\n\treadonly precision: number | undefined = this.config.precision;\n\treadonly scale: number | undefined = this.config.scale;\n\treadonly unsigned: boolean | undefined = this.config.unsigned;\n\n\toverride mapToDriverValue = String;\n\n\tgetSQLType(): string {\n\t\tlet type = '';\n\t\tif (this.precision !== undefined && this.scale !== undefined) {\n\t\t\ttype += `decimal(${this.precision},${this.scale})`;\n\t\t} else if (this.precision === undefined) {\n\t\t\ttype += 'decimal';\n\t\t} else {\n\t\t\ttype += `decimal(${this.precision})`;\n\t\t}\n\t\ttype = type === 'decimal(10,0)' || type === 'decimal(10)' ? 'decimal' : type;\n\t\treturn this.unsigned ? `${type} unsigned` : type;\n\t}\n}\nexport class MySqlDecimalBigIntBuilder<TUnsigned extends boolean | undefined>\n\textends MySqlColumnBuilderWithAutoIncrement<{\n\t\tdataType: Equal<TUnsigned, true> extends true ? 'bigint uint64' : 'bigint int64';\n\t\tdata: bigint;\n\t\tdriverParam: string;\n\t}, MySqlDecimalConfig>\n{\n\tstatic override readonly [entityKind]: string = 'MySqlDecimalBigIntBuilder';\n\n\tconstructor(name: string, config: MySqlDecimalConfig | undefined) {\n\t\tsuper(name, config?.unsigned ? 'bigint uint64' : 'bigint int64' as any, 'MySqlDecimalBigInt');\n\t\tthis.config.precision = config?.precision;\n\t\tthis.config.scale = config?.scale;\n\t\tthis.config.unsigned = config?.unsigned;\n\t}\n\n\t/** @internal */\n\toverride build(table: MySqlTable) {\n\t\treturn new MySqlDecimalBigInt(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class MySqlDecimalBigInt<T extends ColumnBaseConfig<'bigint int64' | 'bigint uint64'>>\n\textends MySqlColumnWithAutoIncrement<T, MySqlDecimalConfig>\n{\n\tstatic override readonly [entityKind]: string = 'MySqlDecimalBigInt';\n\n\t/** @internal */\n\toverride readonly codec = 'decimal:bigint';\n\n\treadonly precision: number | undefined = this.config.precision;\n\treadonly scale: number | undefined = this.config.scale;\n\treadonly unsigned: boolean | undefined = this.config.unsigned;\n\n\toverride mapToDriverValue = String;\n\n\tgetSQLType(): string {\n\t\tlet type = '';\n\t\tif (this.precision !== undefined && this.scale !== undefined) {\n\t\t\ttype += `decimal(${this.precision},${this.scale})`;\n\t\t} else if (this.precision === undefined) {\n\t\t\ttype += 'decimal';\n\t\t} else {\n\t\t\ttype += `decimal(${this.precision})`;\n\t\t}\n\t\ttype = type === 'decimal(10,0)' || type === 'decimal(10)' ? 'decimal' : type;\n\t\treturn this.unsigned ? `${type} unsigned` : type;\n\t}\n}\n\nexport interface MySqlDecimalConfig<\n\tT extends 'string' | 'number' | 'bigint' = 'string' | 'number' | 'bigint',\n\tTUnsigned extends boolean | undefined = boolean | undefined,\n> {\n\tprecision?: number;\n\tscale?: number;\n\tunsigned?: TUnsigned;\n\tmode?: T;\n}\n\nexport function decimal<TMode extends 'string' | 'number' | 'bigint', TUnsigned extends boolean | undefined>(\n\tconfig?: MySqlDecimalConfig<TMode, TUnsigned>,\n): Equal<TMode, 'number'> extends true ? MySqlDecimalNumberBuilder<TUnsigned>\n\t: Equal<TMode, 'bigint'> extends true ? MySqlDecimalBigIntBuilder<TUnsigned>\n\t: MySqlDecimalBuilder<TUnsigned>;\nexport function decimal<TMode extends 'string' | 'number' | 'bigint', TUnsigned extends boolean | undefined>(\n\tname: string,\n\tconfig?: MySqlDecimalConfig<TMode, TUnsigned>,\n): Equal<TMode, 'number'> extends true ? MySqlDecimalNumberBuilder<TUnsigned>\n\t: Equal<TMode, 'bigint'> extends true ? MySqlDecimalBigIntBuilder<TUnsigned>\n\t: MySqlDecimalBuilder<TUnsigned>;\nexport function decimal(a?: string | MySqlDecimalConfig, b: MySqlDecimalConfig = {}) {\n\tconst { name, config } = getColumnNameAndConfig<MySqlDecimalConfig>(a, b);\n\tconst mode = config?.mode;\n\treturn mode === 'number'\n\t\t? new MySqlDecimalNumberBuilder(name, config)\n\t\t: mode === 'bigint'\n\t\t? new MySqlDecimalBigIntBuilder(name, config)\n\t\t: new MySqlDecimalBuilder(name, config);\n}\n"],"mappings":"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"}