table.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { entityKind } from "../entity.js";
  2. import { Table } from "../table.js";
  3. import { getGelColumnBuilders } from "./columns/all.js";
  4. const InlineForeignKeys = Symbol.for("drizzle:GelInlineForeignKeys");
  5. const EnableRLS = Symbol.for("drizzle:EnableRLS");
  6. class GelTable extends Table {
  7. static [entityKind] = "GelTable";
  8. /** @internal */
  9. static Symbol = Object.assign({}, Table.Symbol, {
  10. InlineForeignKeys,
  11. EnableRLS
  12. });
  13. /**@internal */
  14. [InlineForeignKeys] = [];
  15. /** @internal */
  16. [EnableRLS] = false;
  17. /** @internal */
  18. [Table.Symbol.ExtraConfigBuilder] = void 0;
  19. /** @internal */
  20. [Table.Symbol.ExtraConfigColumns] = {};
  21. }
  22. function gelTableWithSchema(name, columns, extraConfig, schema, baseName = name) {
  23. const rawTable = new GelTable(name, schema, baseName);
  24. const parsedColumns = typeof columns === "function" ? columns(getGelColumnBuilders()) : columns;
  25. const builtColumns = Object.fromEntries(
  26. Object.entries(parsedColumns).map(([name2, colBuilderBase]) => {
  27. const colBuilder = colBuilderBase;
  28. colBuilder.setName(name2);
  29. const column = colBuilder.build(rawTable);
  30. rawTable[InlineForeignKeys].push(...colBuilder.buildForeignKeys(column, rawTable));
  31. return [name2, column];
  32. })
  33. );
  34. const builtColumnsForExtraConfig = Object.fromEntries(
  35. Object.entries(parsedColumns).map(([name2, colBuilderBase]) => {
  36. const colBuilder = colBuilderBase;
  37. colBuilder.setName(name2);
  38. const column = colBuilder.buildExtraConfigColumn(rawTable);
  39. return [name2, column];
  40. })
  41. );
  42. const table = Object.assign(rawTable, builtColumns);
  43. table[Table.Symbol.Columns] = builtColumns;
  44. table[Table.Symbol.ExtraConfigColumns] = builtColumnsForExtraConfig;
  45. if (extraConfig) {
  46. table[GelTable.Symbol.ExtraConfigBuilder] = extraConfig;
  47. }
  48. return Object.assign(table, {
  49. enableRLS: () => {
  50. table[GelTable.Symbol.EnableRLS] = true;
  51. return table;
  52. }
  53. });
  54. }
  55. const gelTable = (name, columns, extraConfig) => {
  56. return gelTableWithSchema(name, columns, extraConfig, void 0);
  57. };
  58. function gelTableCreator(customizeTableName) {
  59. return (name, columns, extraConfig) => {
  60. return gelTableWithSchema(customizeTableName(name), columns, extraConfig, void 0, name);
  61. };
  62. }
  63. export {
  64. EnableRLS,
  65. GelTable,
  66. InlineForeignKeys,
  67. gelTable,
  68. gelTableCreator,
  69. gelTableWithSchema
  70. };
  71. //# sourceMappingURL=table.js.map