{"version":3,"file":"foreign-keys.cjs","names":["entityKind"],"sources":["../../src/cockroach-core/foreign-keys.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport type { AnyCockroachColumn, CockroachColumn } from './columns/index.ts';\nimport type { CockroachTable } from './table.ts';\n\nexport type UpdateDeleteAction = 'cascade' | 'restrict' | 'no action' | 'set null' | 'set default';\n\nexport type Reference = () => {\n\treadonly name?: string;\n\treadonly columns: CockroachColumn[];\n\treadonly foreignTable: CockroachTable;\n\treadonly foreignColumns: CockroachColumn[];\n};\n\nexport class ForeignKeyBuilder {\n\tstatic readonly [entityKind]: string = 'CockroachForeignKeyBuilder';\n\n\t/** @internal */\n\treference: Reference;\n\n\t/** @internal */\n\t_onUpdate: UpdateDeleteAction | undefined = 'no action';\n\n\t/** @internal */\n\t_onDelete: UpdateDeleteAction | undefined = 'no action';\n\n\tconstructor(\n\t\tconfig: () => {\n\t\t\tname?: string;\n\t\t\tcolumns: CockroachColumn[];\n\t\t\tforeignColumns: CockroachColumn[];\n\t\t},\n\t\tactions?: {\n\t\t\tonUpdate?: UpdateDeleteAction;\n\t\t\tonDelete?: UpdateDeleteAction;\n\t\t} | undefined,\n\t) {\n\t\tthis.reference = () => {\n\t\t\tconst { name, columns, foreignColumns } = config();\n\t\t\treturn { name, columns, foreignTable: foreignColumns[0]!.table as CockroachTable, foreignColumns };\n\t\t};\n\t\tif (actions) {\n\t\t\tthis._onUpdate = actions.onUpdate;\n\t\t\tthis._onDelete = actions.onDelete;\n\t\t}\n\t}\n\n\tonUpdate(action: UpdateDeleteAction): this {\n\t\tthis._onUpdate = action === undefined ? 'no action' : action;\n\t\treturn this;\n\t}\n\n\tonDelete(action: UpdateDeleteAction): this {\n\t\tthis._onDelete = action === undefined ? 'no action' : action;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: CockroachTable): ForeignKey {\n\t\treturn new ForeignKey(table, this);\n\t}\n}\n\nexport type AnyForeignKeyBuilder = ForeignKeyBuilder;\n\nexport class ForeignKey {\n\tstatic readonly [entityKind]: string = 'CockroachForeignKey';\n\n\treadonly reference: Reference;\n\treadonly onUpdate: UpdateDeleteAction | undefined;\n\treadonly onDelete: UpdateDeleteAction | undefined;\n\treadonly name?: string;\n\n\tconstructor(readonly table: CockroachTable, builder: ForeignKeyBuilder) {\n\t\tthis.reference = builder.reference;\n\t\tthis.onUpdate = builder._onUpdate;\n\t\tthis.onDelete = builder._onDelete;\n\t}\n\n\tgetName(): string | undefined {\n\t\tconst { name } = this.reference();\n\n\t\treturn name;\n\t}\n\n\tisNameExplicit() {\n\t\treturn !!this.reference().name;\n\t}\n}\n\ntype ColumnsWithTable<\n\tTTableName extends string,\n\tTColumns extends CockroachColumn[],\n> = { [Key in keyof TColumns]: AnyCockroachColumn<{ tableName: TTableName }> };\n\nexport function foreignKey<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends [\n\t\tAnyCockroachColumn<{ tableName: TTableName }>,\n\t\t...AnyCockroachColumn<{ tableName: TTableName }>[],\n\t],\n>(\n\tconfig: {\n\t\tname?: string;\n\t\tcolumns: TColumns;\n\t\tforeignColumns: ColumnsWithTable<TForeignTableName, TColumns>;\n\t},\n): ForeignKeyBuilder {\n\tfunction mappedConfig() {\n\t\tconst { name, columns, foreignColumns } = config;\n\t\treturn {\n\t\t\tname,\n\t\t\tcolumns,\n\t\t\tforeignColumns,\n\t\t};\n\t}\n\n\treturn new ForeignKeyBuilder(mappedConfig);\n}\n"],"mappings":";;;;;AAaA,IAAa,oBAAb,MAA+B;CAC9B,QAAiBA,0BAAsB;;CAGvC;;CAGA,YAA4C;;CAG5C,YAA4C;CAE5C,YACC,QAKA,SAIC;AACD,OAAK,kBAAkB;GACtB,MAAM,EAAE,MAAM,SAAS,mBAAmB,QAAQ;AAClD,UAAO;IAAE;IAAM;IAAS,cAAc,eAAe,GAAI;IAAyB;IAAgB;;AAEnG,MAAI,SAAS;AACZ,QAAK,YAAY,QAAQ;AACzB,QAAK,YAAY,QAAQ;;;CAI3B,SAAS,QAAkC;AAC1C,OAAK,YAAY,WAAW,SAAY,cAAc;AACtD,SAAO;;CAGR,SAAS,QAAkC;AAC1C,OAAK,YAAY,WAAW,SAAY,cAAc;AACtD,SAAO;;;CAIR,MAAM,OAAmC;AACxC,SAAO,IAAI,WAAW,OAAO,KAAK;;;AAMpC,IAAa,aAAb,MAAwB;CACvB,QAAiBA,0BAAsB;CAEvC,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CAET,YAAY,AAAS,OAAuB,SAA4B;EAAnD;AACpB,OAAK,YAAY,QAAQ;AACzB,OAAK,WAAW,QAAQ;AACxB,OAAK,WAAW,QAAQ;;CAGzB,UAA8B;EAC7B,MAAM,EAAE,SAAS,KAAK,WAAW;AAEjC,SAAO;;CAGR,iBAAiB;AAChB,SAAO,CAAC,CAAC,KAAK,WAAW,CAAC;;;AAS5B,SAAgB,WAQf,QAKoB;CACpB,SAAS,eAAe;EACvB,MAAM,EAAE,MAAM,SAAS,mBAAmB;AAC1C,SAAO;GACN;GACA;GACA;GACA;;AAGF,QAAO,IAAI,kBAAkB,aAAa"}