( name: string | Partial<NameVariants>, columns: Columns )
| 568 | } |
| 569 | |
| 570 | export function table<Columns extends Record<string, AnyColumn>>( |
| 571 | name: string | Partial<NameVariants>, |
| 572 | columns: Columns |
| 573 | ): Table<Columns, {}> { |
| 574 | let idCol: AnyColumn | undefined; |
| 575 | let names: NameVariants | undefined; |
| 576 | |
| 577 | const uniqueConstraints: UniqueConstraint[] = []; |
| 578 | const policies: StoredTablePolicy[] = []; |
| 579 | const out: Table<Columns, {}> = { |
| 580 | ormName: "", |
| 581 | get names() { |
| 582 | if (names) return names; |
| 583 | |
| 584 | return typeof name === "string" |
| 585 | ? nameVariants(name, out.ormName) |
| 586 | : nameVariants(out.ormName, out.ormName, name); |
| 587 | }, |
| 588 | set names(v) { |
| 589 | names = v; |
| 590 | }, |
| 591 | columns, |
| 592 | relations: {}, |
| 593 | foreignKeys: [], |
| 594 | policies, |
| 595 | getUniqueConstraints(level = "all") { |
| 596 | const result: UniqueConstraint[] = []; |
| 597 | if (level === "all" || level === "table") |
| 598 | result.push(...uniqueConstraints); |
| 599 | |
| 600 | if (level === "all" || level === "column") { |
| 601 | for (const col of Object.values(this.columns)) { |
| 602 | if (!col.isUnique) continue; |
| 603 | |
| 604 | result.push({ |
| 605 | name: col.getUniqueConstraintName(), |
| 606 | columns: [col], |
| 607 | }); |
| 608 | } |
| 609 | } |
| 610 | |
| 611 | return result; |
| 612 | }, |
| 613 | getColumnByName(name, type = "sql") { |
| 614 | return Object.values(this.columns).find((c) => c.names[type] === name); |
| 615 | }, |
| 616 | getIdColumn() { |
| 617 | return idCol!; |
| 618 | }, |
| 619 | unique(name, columns) { |
| 620 | uniqueConstraints.push({ |
| 621 | name, |
| 622 | columns: columns.map((name) => { |
| 623 | const column = this.columns[name]; |
| 624 | if (!column) |
| 625 | throw new Error(`Unknown column name ${name.toString()}`); |
| 626 | |
| 627 | return column; |
no outgoing calls
no test coverage detected