{"version":3,"file":"indexes.cjs","names":["entityKind"],"sources":["../../src/mssql-core/indexes.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport type { AnyMsSqlColumn, MsSqlColumn } from './columns/index.ts';\nimport type { MsSqlTable } from './table.ts';\n\ninterface IndexConfig {\n\tname: string;\n\n\tcolumns: IndexColumn[];\n\n\t/**\n\t * If true, the index will be created as `create unique index` instead of `create index`.\n\t */\n\tunique?: boolean;\n\n\t/**\n\t * Condition for partial index.\n\t */\n\twhere?: SQL;\n}\n\nexport type IndexColumn = MsSqlColumn | SQL;\n\nexport class IndexBuilderOn {\n\tstatic readonly [entityKind]: string = 'MsSqlIndexBuilderOn';\n\n\tconstructor(private name: string, private unique: boolean) {}\n\n\ton(...columns: [IndexColumn, ...IndexColumn[]]): IndexBuilder {\n\t\treturn new IndexBuilder(this.name, columns, this.unique);\n\t}\n}\n\nexport interface AnyIndexBuilder {\n\tbuild(table: MsSqlTable): Index;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IndexBuilder extends AnyIndexBuilder {}\n\nexport class IndexBuilder implements AnyIndexBuilder {\n\tstatic readonly [entityKind]: string = 'MsSqlIndexBuilder';\n\n\t/** @internal */\n\tconfig: IndexConfig;\n\n\tconstructor(name: string, columns: IndexColumn[], unique: boolean) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tcolumns,\n\t\t\tunique,\n\t\t};\n\t}\n\n\twhere(condition: SQL): this {\n\t\tthis.config.where = condition;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: MsSqlTable): Index {\n\t\treturn new Index(this.config, table);\n\t}\n}\n\nexport class Index {\n\tstatic readonly [entityKind]: string = 'MsSqlIndex';\n\n\treadonly config: IndexConfig & { table: MsSqlTable };\n\treadonly isNameExplicit: boolean;\n\n\tconstructor(config: IndexConfig, table: MsSqlTable) {\n\t\tthis.config = { ...config, table };\n\t\tthis.isNameExplicit = !!config.name;\n\t}\n}\n\nexport type GetColumnsTableName<TColumns> = TColumns extends\n\tAnyMsSqlColumn<{ tableName: infer TTableName extends string }> | AnyMsSqlColumn<\n\t\t{ tableName: infer TTableName extends string }\n\t>[] ? TTableName\n\t: never;\n\nexport function index(name: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(name, false);\n}\n\nexport function uniqueIndex(name: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(name, true);\n}\n"],"mappings":";;;;;AAuBA,IAAa,iBAAb,MAA4B;CAC3B,QAAiBA,0BAAsB;CAEvC,YAAY,AAAQ,MAAc,AAAQ,QAAiB;EAAvC;EAAsB;;CAE1C,GAAG,GAAG,SAAwD;AAC7D,SAAO,IAAI,aAAa,KAAK,MAAM,SAAS,KAAK,OAAO;;;AAW1D,IAAa,eAAb,MAAqD;CACpD,QAAiBA,0BAAsB;;CAGvC;CAEA,YAAY,MAAc,SAAwB,QAAiB;AAClE,OAAK,SAAS;GACb;GACA;GACA;GACA;;CAGF,MAAM,WAAsB;AAC3B,OAAK,OAAO,QAAQ;AACpB,SAAO;;;CAIR,MAAM,OAA0B;AAC/B,SAAO,IAAI,MAAM,KAAK,QAAQ,MAAM;;;AAItC,IAAa,QAAb,MAAmB;CAClB,QAAiBA,0BAAsB;CAEvC,AAAS;CACT,AAAS;CAET,YAAY,QAAqB,OAAmB;AACnD,OAAK,SAAS;GAAE,GAAG;GAAQ;GAAO;AAClC,OAAK,iBAAiB,CAAC,CAAC,OAAO;;;AAUjC,SAAgB,MAAM,MAA8B;AACnD,QAAO,IAAI,eAAe,MAAM,MAAM;;AAGvC,SAAgB,YAAY,MAA8B;AACzD,QAAO,IAAI,eAAe,MAAM,KAAK"}