drizzle-fp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/README.md +9 -0
  2. package/dist/index.js +2 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/src/TableFuncArgs.js +1 -0
  5. package/dist/src/TableFuncArgs.js.map +1 -0
  6. package/dist/src/columnsAdders/AllowOnlyValidColumnMaps.js +2 -0
  7. package/dist/src/columnsAdders/AllowOnlyValidColumnMaps.js.map +1 -0
  8. package/dist/src/columnsAdders/FunctionExtendingColumnsMap.js +1 -0
  9. package/dist/src/columnsAdders/FunctionExtendingColumnsMap.js.map +1 -0
  10. package/dist/src/columnsAdders/addColumn.js +3 -0
  11. package/dist/src/columnsAdders/addColumn.js.map +1 -0
  12. package/dist/src/columnsAdders/addColumns.js +9 -0
  13. package/dist/src/columnsAdders/addColumns.js.map +1 -0
  14. package/dist/src/columnsAdders/addHappenedAtDateColumns.js +12 -0
  15. package/dist/src/columnsAdders/addHappenedAtDateColumns.js.map +1 -0
  16. package/dist/src/columnsAdders/addRequiredColumn.js +3 -0
  17. package/dist/src/columnsAdders/addRequiredColumn.js.map +1 -0
  18. package/dist/src/columnsAdders/addRequiredColumns.js +6 -0
  19. package/dist/src/columnsAdders/addRequiredColumns.js.map +1 -0
  20. package/dist/src/columnsAdders/addRequiredNameOrDescription.js +8 -0
  21. package/dist/src/columnsAdders/addRequiredNameOrDescription.js.map +1 -0
  22. package/dist/src/columnsAdders/index.js +10 -0
  23. package/dist/src/columnsAdders/index.js.map +1 -0
  24. package/dist/src/columnsAdders/nonNullIdentity.js +6 -0
  25. package/dist/src/columnsAdders/nonNullIdentity.js.map +1 -0
  26. package/dist/src/columnsWithExtraTableConfigsAdders/addAutoGeneratedGloballyUniqueOrderingColumn.js +7 -0
  27. package/dist/src/columnsWithExtraTableConfigsAdders/addAutoGeneratedGloballyUniqueOrderingColumn.js.map +1 -0
  28. package/dist/src/columnsWithExtraTableConfigsAdders/addBigint53IdColumnAsPrimaryKey.js +8 -0
  29. package/dist/src/columnsWithExtraTableConfigsAdders/addBigint53IdColumnAsPrimaryKey.js.map +1 -0
  30. package/dist/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnWithFk.js +4 -0
  31. package/dist/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnWithFk.js.map +1 -0
  32. package/dist/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk.js +4 -0
  33. package/dist/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk.js.map +1 -0
  34. package/dist/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk1to1.js +4 -0
  35. package/dist/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk1to1.js.map +1 -0
  36. package/dist/src/columnsWithExtraTableConfigsAdders/addColumnWithFk.js +5 -0
  37. package/dist/src/columnsWithExtraTableConfigsAdders/addColumnWithFk.js.map +1 -0
  38. package/dist/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk.js +9 -0
  39. package/dist/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk.js.map +1 -0
  40. package/dist/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk1to1.js +3 -0
  41. package/dist/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk1to1.js.map +1 -0
  42. package/dist/src/columnsWithExtraTableConfigsAdders/addColumnsWithCompositeFk.js +14 -0
  43. package/dist/src/columnsWithExtraTableConfigsAdders/addColumnsWithCompositeFk.js.map +1 -0
  44. package/dist/src/columnsWithExtraTableConfigsAdders/addIntegerIdColumnAsPrimaryKey.js +8 -0
  45. package/dist/src/columnsWithExtraTableConfigsAdders/addIntegerIdColumnAsPrimaryKey.js.map +1 -0
  46. package/dist/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnWithFk.js +4 -0
  47. package/dist/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnWithFk.js.map +1 -0
  48. package/dist/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk.js +4 -0
  49. package/dist/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk.js.map +1 -0
  50. package/dist/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk1to1.js +4 -0
  51. package/dist/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk1to1.js.map +1 -0
  52. package/dist/src/columnsWithExtraTableConfigsAdders/addTextRequiredColumnWithFk.js +4 -0
  53. package/dist/src/columnsWithExtraTableConfigsAdders/addTextRequiredColumnWithFk.js.map +1 -0
  54. package/dist/src/columnsWithExtraTableConfigsAdders/addUuidColumnAsPrimaryKey.js +8 -0
  55. package/dist/src/columnsWithExtraTableConfigsAdders/addUuidColumnAsPrimaryKey.js.map +1 -0
  56. package/dist/src/columnsWithExtraTableConfigsAdders/addUuidRequiredColumnWithFk.js +4 -0
  57. package/dist/src/columnsWithExtraTableConfigsAdders/addUuidRequiredColumnWithFk.js.map +1 -0
  58. package/dist/src/columnsWithExtraTableConfigsAdders/index.js +17 -0
  59. package/dist/src/columnsWithExtraTableConfigsAdders/index.js.map +1 -0
  60. package/dist/src/extraTableConfigsAdders/ForeignTableColumnGetter.js +1 -0
  61. package/dist/src/extraTableConfigsAdders/ForeignTableColumnGetter.js.map +1 -0
  62. package/dist/src/extraTableConfigsAdders/FunctionRequiringColumnsMap.js +1 -0
  63. package/dist/src/extraTableConfigsAdders/FunctionRequiringColumnsMap.js.map +1 -0
  64. package/dist/src/extraTableConfigsAdders/addCompositeFk.js +26 -0
  65. package/dist/src/extraTableConfigsAdders/addCompositeFk.js.map +1 -0
  66. package/dist/src/extraTableConfigsAdders/addCompositePrimaryKey.js +3 -0
  67. package/dist/src/extraTableConfigsAdders/addCompositePrimaryKey.js.map +1 -0
  68. package/dist/src/extraTableConfigsAdders/addExtraConfig.js +6 -0
  69. package/dist/src/extraTableConfigsAdders/addExtraConfig.js.map +1 -0
  70. package/dist/src/extraTableConfigsAdders/addFk.js +32 -0
  71. package/dist/src/extraTableConfigsAdders/addFk.js.map +1 -0
  72. package/dist/src/extraTableConfigsAdders/addPrimaryKey.js +10 -0
  73. package/dist/src/extraTableConfigsAdders/addPrimaryKey.js.map +1 -0
  74. package/dist/src/extraTableConfigsAdders/addUniqueConstraintWithIndex.js +11 -0
  75. package/dist/src/extraTableConfigsAdders/addUniqueConstraintWithIndex.js.map +1 -0
  76. package/dist/src/extraTableConfigsAdders/getCompressedIdentifierName.js +25 -0
  77. package/dist/src/extraTableConfigsAdders/getCompressedIdentifierName.js.map +1 -0
  78. package/dist/src/extraTableConfigsAdders/index.js +10 -0
  79. package/dist/src/extraTableConfigsAdders/index.js.map +1 -0
  80. package/dist/src/finalizePgTable.js +8 -0
  81. package/dist/src/finalizePgTable.js.map +1 -0
  82. package/dist/src/index.js +6 -0
  83. package/dist/src/index.js.map +1 -0
  84. package/dist/src/initPgTable.js +2 -0
  85. package/dist/src/initPgTable.js.map +1 -0
  86. package/dist-types/index.d.ts +2 -0
  87. package/dist-types/index.d.ts.map +1 -0
  88. package/dist-types/src/TableFuncArgs.d.ts +12 -0
  89. package/dist-types/src/TableFuncArgs.d.ts.map +1 -0
  90. package/dist-types/src/columnsAdders/AllowOnlyValidColumnMaps.d.ts +24 -0
  91. package/dist-types/src/columnsAdders/AllowOnlyValidColumnMaps.d.ts.map +1 -0
  92. package/dist-types/src/columnsAdders/FunctionExtendingColumnsMap.d.ts +8 -0
  93. package/dist-types/src/columnsAdders/FunctionExtendingColumnsMap.d.ts.map +1 -0
  94. package/dist-types/src/columnsAdders/addColumn.d.ts +4 -0
  95. package/dist-types/src/columnsAdders/addColumn.d.ts.map +1 -0
  96. package/dist-types/src/columnsAdders/addColumns.d.ts +4 -0
  97. package/dist-types/src/columnsAdders/addColumns.d.ts.map +1 -0
  98. package/dist-types/src/columnsAdders/addHappenedAtDateColumns.d.ts +9 -0
  99. package/dist-types/src/columnsAdders/addHappenedAtDateColumns.d.ts.map +1 -0
  100. package/dist-types/src/columnsAdders/addRequiredColumn.d.ts +5 -0
  101. package/dist-types/src/columnsAdders/addRequiredColumn.d.ts.map +1 -0
  102. package/dist-types/src/columnsAdders/addRequiredColumns.d.ts +14 -0
  103. package/dist-types/src/columnsAdders/addRequiredColumns.d.ts.map +1 -0
  104. package/dist-types/src/columnsAdders/addRequiredNameOrDescription.d.ts +12 -0
  105. package/dist-types/src/columnsAdders/addRequiredNameOrDescription.d.ts.map +1 -0
  106. package/dist-types/src/columnsAdders/index.d.ts +10 -0
  107. package/dist-types/src/columnsAdders/index.d.ts.map +1 -0
  108. package/dist-types/src/columnsAdders/nonNullIdentity.d.ts +9 -0
  109. package/dist-types/src/columnsAdders/nonNullIdentity.d.ts.map +1 -0
  110. package/dist-types/src/columnsWithExtraTableConfigsAdders/addAutoGeneratedGloballyUniqueOrderingColumn.d.ts +4 -0
  111. package/dist-types/src/columnsWithExtraTableConfigsAdders/addAutoGeneratedGloballyUniqueOrderingColumn.d.ts.map +1 -0
  112. package/dist-types/src/columnsWithExtraTableConfigsAdders/addBigint53IdColumnAsPrimaryKey.d.ts +10 -0
  113. package/dist-types/src/columnsWithExtraTableConfigsAdders/addBigint53IdColumnAsPrimaryKey.d.ts.map +1 -0
  114. package/dist-types/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnWithFk.d.ts +4 -0
  115. package/dist-types/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnWithFk.d.ts.map +1 -0
  116. package/dist-types/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk.d.ts +4 -0
  117. package/dist-types/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk.d.ts.map +1 -0
  118. package/dist-types/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk1to1.d.ts +4 -0
  119. package/dist-types/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk1to1.d.ts.map +1 -0
  120. package/dist-types/src/columnsWithExtraTableConfigsAdders/addColumnWithFk.d.ts +5 -0
  121. package/dist-types/src/columnsWithExtraTableConfigsAdders/addColumnWithFk.d.ts.map +1 -0
  122. package/dist-types/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk.d.ts +4 -0
  123. package/dist-types/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk.d.ts.map +1 -0
  124. package/dist-types/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk1to1.d.ts +4 -0
  125. package/dist-types/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk1to1.d.ts.map +1 -0
  126. package/dist-types/src/columnsWithExtraTableConfigsAdders/addColumnsWithCompositeFk.d.ts +11 -0
  127. package/dist-types/src/columnsWithExtraTableConfigsAdders/addColumnsWithCompositeFk.d.ts.map +1 -0
  128. package/dist-types/src/columnsWithExtraTableConfigsAdders/addIntegerIdColumnAsPrimaryKey.d.ts +9 -0
  129. package/dist-types/src/columnsWithExtraTableConfigsAdders/addIntegerIdColumnAsPrimaryKey.d.ts.map +1 -0
  130. package/dist-types/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnWithFk.d.ts +4 -0
  131. package/dist-types/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnWithFk.d.ts.map +1 -0
  132. package/dist-types/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk.d.ts +4 -0
  133. package/dist-types/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk.d.ts.map +1 -0
  134. package/dist-types/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk1to1.d.ts +4 -0
  135. package/dist-types/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk1to1.d.ts.map +1 -0
  136. package/dist-types/src/columnsWithExtraTableConfigsAdders/addTextRequiredColumnWithFk.d.ts +4 -0
  137. package/dist-types/src/columnsWithExtraTableConfigsAdders/addTextRequiredColumnWithFk.d.ts.map +1 -0
  138. package/dist-types/src/columnsWithExtraTableConfigsAdders/addUuidColumnAsPrimaryKey.d.ts +9 -0
  139. package/dist-types/src/columnsWithExtraTableConfigsAdders/addUuidColumnAsPrimaryKey.d.ts.map +1 -0
  140. package/dist-types/src/columnsWithExtraTableConfigsAdders/addUuidRequiredColumnWithFk.d.ts +4 -0
  141. package/dist-types/src/columnsWithExtraTableConfigsAdders/addUuidRequiredColumnWithFk.d.ts.map +1 -0
  142. package/dist-types/src/columnsWithExtraTableConfigsAdders/index.d.ts +17 -0
  143. package/dist-types/src/columnsWithExtraTableConfigsAdders/index.d.ts.map +1 -0
  144. package/dist-types/src/extraTableConfigsAdders/ForeignTableColumnGetter.d.ts +5 -0
  145. package/dist-types/src/extraTableConfigsAdders/ForeignTableColumnGetter.d.ts.map +1 -0
  146. package/dist-types/src/extraTableConfigsAdders/FunctionRequiringColumnsMap.d.ts +4 -0
  147. package/dist-types/src/extraTableConfigsAdders/FunctionRequiringColumnsMap.d.ts.map +1 -0
  148. package/dist-types/src/extraTableConfigsAdders/addCompositeFk.d.ts +4 -0
  149. package/dist-types/src/extraTableConfigsAdders/addCompositeFk.d.ts.map +1 -0
  150. package/dist-types/src/extraTableConfigsAdders/addCompositePrimaryKey.d.ts +3 -0
  151. package/dist-types/src/extraTableConfigsAdders/addCompositePrimaryKey.d.ts.map +1 -0
  152. package/dist-types/src/extraTableConfigsAdders/addExtraConfig.d.ts +6 -0
  153. package/dist-types/src/extraTableConfigsAdders/addExtraConfig.d.ts.map +1 -0
  154. package/dist-types/src/extraTableConfigsAdders/addFk.d.ts +4 -0
  155. package/dist-types/src/extraTableConfigsAdders/addFk.d.ts.map +1 -0
  156. package/dist-types/src/extraTableConfigsAdders/addPrimaryKey.d.ts +3 -0
  157. package/dist-types/src/extraTableConfigsAdders/addPrimaryKey.d.ts.map +1 -0
  158. package/dist-types/src/extraTableConfigsAdders/addUniqueConstraintWithIndex.d.ts +3 -0
  159. package/dist-types/src/extraTableConfigsAdders/addUniqueConstraintWithIndex.d.ts.map +1 -0
  160. package/dist-types/src/extraTableConfigsAdders/getCompressedIdentifierName.d.ts +2 -0
  161. package/dist-types/src/extraTableConfigsAdders/getCompressedIdentifierName.d.ts.map +1 -0
  162. package/dist-types/src/extraTableConfigsAdders/index.d.ts +10 -0
  163. package/dist-types/src/extraTableConfigsAdders/index.d.ts.map +1 -0
  164. package/dist-types/src/finalizePgTable.d.ts +130 -0
  165. package/dist-types/src/finalizePgTable.d.ts.map +1 -0
  166. package/dist-types/src/index.d.ts +6 -0
  167. package/dist-types/src/index.d.ts.map +1 -0
  168. package/dist-types/src/initPgTable.d.ts +3 -0
  169. package/dist-types/src/initPgTable.d.ts.map +1 -0
  170. package/index.ts +1 -0
  171. package/package.json +92 -0
  172. package/src/TableFuncArgs.ts +21 -0
  173. package/src/columnsAdders/AllowOnlyValidColumnMaps.ts +69 -0
  174. package/src/columnsAdders/FunctionExtendingColumnsMap.ts +24 -0
  175. package/src/columnsAdders/addColumn.ts +14 -0
  176. package/src/columnsAdders/addColumns.ts +18 -0
  177. package/src/columnsAdders/addHappenedAtDateColumns.ts +24 -0
  178. package/src/columnsAdders/addRequiredColumn.ts +20 -0
  179. package/src/columnsAdders/addRequiredColumns.ts +41 -0
  180. package/src/columnsAdders/addRequiredNameOrDescription.ts +14 -0
  181. package/src/columnsAdders/index.ts +9 -0
  182. package/src/columnsAdders/nonNullIdentity.ts +11 -0
  183. package/src/columnsWithExtraTableConfigsAdders/addAutoGeneratedGloballyUniqueOrderingColumn.ts +13 -0
  184. package/src/columnsWithExtraTableConfigsAdders/addBigint53IdColumnAsPrimaryKey.ts +30 -0
  185. package/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnWithFk.ts +21 -0
  186. package/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk.ts +26 -0
  187. package/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk1to1.ts +25 -0
  188. package/src/columnsWithExtraTableConfigsAdders/addColumnWithFk.ts +27 -0
  189. package/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk.ts +36 -0
  190. package/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk1to1.ts +23 -0
  191. package/src/columnsWithExtraTableConfigsAdders/addColumnsWithCompositeFk.ts +60 -0
  192. package/src/columnsWithExtraTableConfigsAdders/addIntegerIdColumnAsPrimaryKey.ts +27 -0
  193. package/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnWithFk.ts +21 -0
  194. package/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk.ts +26 -0
  195. package/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk1to1.ts +25 -0
  196. package/src/columnsWithExtraTableConfigsAdders/addTextRequiredColumnWithFk.ts +21 -0
  197. package/src/columnsWithExtraTableConfigsAdders/addUuidColumnAsPrimaryKey.ts +25 -0
  198. package/src/columnsWithExtraTableConfigsAdders/addUuidRequiredColumnWithFk.ts +21 -0
  199. package/src/columnsWithExtraTableConfigsAdders/index.ts +16 -0
  200. package/src/extraTableConfigsAdders/ForeignTableColumnGetter.ts +3 -0
  201. package/src/extraTableConfigsAdders/FunctionRequiringColumnsMap.ts +13 -0
  202. package/src/extraTableConfigsAdders/addCompositeFk.ts +47 -0
  203. package/src/extraTableConfigsAdders/addCompositePrimaryKey.ts +9 -0
  204. package/src/extraTableConfigsAdders/addExtraConfig.ts +21 -0
  205. package/src/extraTableConfigsAdders/addFk.ts +51 -0
  206. package/src/extraTableConfigsAdders/addPrimaryKey.ts +17 -0
  207. package/src/extraTableConfigsAdders/addUniqueConstraintWithIndex.ts +20 -0
  208. package/src/extraTableConfigsAdders/getCompressedIdentifierName.ts +24 -0
  209. package/src/extraTableConfigsAdders/index.ts +9 -0
  210. package/src/finalizePgTable.ts +22 -0
  211. package/src/index.ts +5 -0
  212. package/src/initPgTable.ts +5 -0
@@ -0,0 +1,130 @@
1
+ import type { CamelCase } from 'type-fest';
2
+ import type { GeneralColumnMap } from './columnsAdders/AllowOnlyValidColumnMaps.ts';
3
+ import type { TableFuncArgs } from './TableFuncArgs.ts';
4
+ export declare const finalizePgTable: <const TTableName extends string, TColumnsMap extends GeneralColumnMap = GeneralColumnMap>(args: TableFuncArgs<TTableName, TColumnsMap>) => { [key in CamelCase<TTableName>]: import("drizzle-orm/pg-core").PgTableWithColumns<{
5
+ name: TTableName;
6
+ schema: undefined;
7
+ columns: { [Key in keyof TColumnsMap]: import("drizzle-orm/pg-core").PgColumn<{
8
+ name: (Omit<TColumnsMap[Key]["_"], "name"> & {
9
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
10
+ })["name"];
11
+ tableName: TTableName;
12
+ dataType: (Omit<TColumnsMap[Key]["_"], "name"> & {
13
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
14
+ })["dataType"];
15
+ columnType: (Omit<TColumnsMap[Key]["_"], "name"> & {
16
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
17
+ })["columnType"];
18
+ data: Omit<TColumnsMap[Key]["_"], "name"> & {
19
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
20
+ } extends infer T ? T extends Omit<TColumnsMap[Key]["_"], "name"> & {
21
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
22
+ } ? T extends {
23
+ $type: infer U;
24
+ } ? U : T["data"] : never : never;
25
+ driverParam: (Omit<TColumnsMap[Key]["_"], "name"> & {
26
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
27
+ })["driverParam"];
28
+ notNull: Omit<TColumnsMap[Key]["_"], "name"> & {
29
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
30
+ } extends infer T_1 ? T_1 extends Omit<TColumnsMap[Key]["_"], "name"> & {
31
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
32
+ } ? T_1 extends {
33
+ notNull: true;
34
+ } ? true : false : never : never;
35
+ hasDefault: Omit<TColumnsMap[Key]["_"], "name"> & {
36
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
37
+ } extends infer T_2 ? T_2 extends Omit<TColumnsMap[Key]["_"], "name"> & {
38
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
39
+ } ? T_2 extends {
40
+ hasDefault: true;
41
+ } ? true : false : never : never;
42
+ isPrimaryKey: Omit<TColumnsMap[Key]["_"], "name"> & {
43
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
44
+ } extends infer T_3 ? T_3 extends Omit<TColumnsMap[Key]["_"], "name"> & {
45
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
46
+ } ? T_3 extends {
47
+ isPrimaryKey: true;
48
+ } ? true : false : never : never;
49
+ isAutoincrement: Omit<TColumnsMap[Key]["_"], "name"> & {
50
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
51
+ } extends infer T_4 ? T_4 extends Omit<TColumnsMap[Key]["_"], "name"> & {
52
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
53
+ } ? T_4 extends {
54
+ isAutoincrement: true;
55
+ } ? true : false : never : never;
56
+ hasRuntimeDefault: Omit<TColumnsMap[Key]["_"], "name"> & {
57
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
58
+ } extends infer T_5 ? T_5 extends Omit<TColumnsMap[Key]["_"], "name"> & {
59
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
60
+ } ? T_5 extends {
61
+ hasRuntimeDefault: true;
62
+ } ? true : false : never : never;
63
+ enumValues: (Omit<TColumnsMap[Key]["_"], "name"> & {
64
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
65
+ })["enumValues"];
66
+ baseColumn: Omit<TColumnsMap[Key]["_"], "name"> & {
67
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
68
+ } extends infer T_6 ? T_6 extends Omit<TColumnsMap[Key]["_"], "name"> & {
69
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
70
+ } ? T_6 extends {
71
+ baseBuilder: infer U_1 extends import("drizzle-orm").ColumnBuilderBase;
72
+ } ? import("drizzle-orm").Column<{
73
+ name: U_1["_"]["name"];
74
+ tableName: TTableName;
75
+ dataType: U_1["_"]["dataType"];
76
+ columnType: U_1["_"]["columnType"];
77
+ data: U_1["_"] extends infer T_7 ? T_7 extends U_1["_"] ? T_7 extends {
78
+ $type: infer U;
79
+ } ? U : T_7["data"] : never : never;
80
+ driverParam: U_1["_"]["driverParam"];
81
+ notNull: U_1["_"] extends infer T_8 ? T_8 extends U_1["_"] ? T_8 extends {
82
+ notNull: true;
83
+ } ? true : false : never : never;
84
+ hasDefault: U_1["_"] extends infer T_9 ? T_9 extends U_1["_"] ? T_9 extends {
85
+ hasDefault: true;
86
+ } ? true : false : never : never;
87
+ isPrimaryKey: U_1["_"] extends infer T_10 ? T_10 extends U_1["_"] ? T_10 extends {
88
+ isPrimaryKey: true;
89
+ } ? true : false : never : never;
90
+ isAutoincrement: U_1["_"] extends infer T_11 ? T_11 extends U_1["_"] ? T_11 extends {
91
+ isAutoincrement: true;
92
+ } ? true : false : never : never;
93
+ hasRuntimeDefault: U_1["_"] extends infer T_12 ? T_12 extends U_1["_"] ? T_12 extends {
94
+ hasRuntimeDefault: true;
95
+ } ? true : false : never : never;
96
+ enumValues: U_1["_"]["enumValues"];
97
+ baseColumn: U_1["_"] extends infer T_13 ? T_13 extends U_1["_"] ? T_13 extends {
98
+ baseBuilder: infer U_1 extends import("drizzle-orm").ColumnBuilderBase;
99
+ } ? import("drizzle-orm").Column</*elided*/ any, {}, Omit<U_1["_"], "brand" | "name" | "dataType" | "columnType" | "data" | "driverParam" | "notNull" | "hasDefault" | "enumValues" | "identity" | "generated" | "dialect" | "tableName" | "isPrimaryKey" | "isAutoincrement" | "hasRuntimeDefault" | "baseColumn"> extends infer T_14 ? { [K in keyof T_14]: T_14[K]; } : never> : never : never : never;
100
+ identity: U_1["_"] extends infer T_15 ? T_15 extends U_1["_"] ? T_15 extends {
101
+ identity: "always";
102
+ } ? "always" : T_15 extends {
103
+ identity: "byDefault";
104
+ } ? "byDefault" : undefined : never : never;
105
+ generated: U_1["_"] extends infer T_16 ? T_16 extends U_1["_"] ? T_16 extends {
106
+ generated: infer G;
107
+ } ? unknown extends G ? undefined : G extends undefined ? undefined : G : undefined : never : never;
108
+ }, {}, Omit<U_1["_"], "brand" | "name" | "dataType" | "columnType" | "data" | "driverParam" | "notNull" | "hasDefault" | "enumValues" | "identity" | "generated" | "dialect" | "tableName" | "isPrimaryKey" | "isAutoincrement" | "hasRuntimeDefault" | "baseColumn"> extends infer T_17 ? { [K in keyof T_17]: T_17[K]; } : never> : never : never : never;
109
+ identity: Omit<TColumnsMap[Key]["_"], "name"> & {
110
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
111
+ } extends infer T_18 ? T_18 extends Omit<TColumnsMap[Key]["_"], "name"> & {
112
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
113
+ } ? T_18 extends {
114
+ identity: "always";
115
+ } ? "always" : T_18 extends {
116
+ identity: "byDefault";
117
+ } ? "byDefault" : undefined : never : never;
118
+ generated: Omit<TColumnsMap[Key]["_"], "name"> & {
119
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
120
+ } extends infer T_19 ? T_19 extends Omit<TColumnsMap[Key]["_"], "name"> & {
121
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
122
+ } ? T_19 extends {
123
+ generated: infer G;
124
+ } ? unknown extends G ? undefined : G extends undefined ? undefined : G : undefined : never : never;
125
+ }, {}, Omit<Omit<TColumnsMap[Key]["_"], "name"> & {
126
+ name: TColumnsMap[Key]["_"]["name"] extends "" ? import("drizzle-orm").Assume<Key, string> : TColumnsMap[Key]["_"]["name"];
127
+ }, "brand" | "name" | "dataType" | "columnType" | "data" | "driverParam" | "notNull" | "hasDefault" | "enumValues" | "identity" | "generated" | "dialect" | "tableName" | "isPrimaryKey" | "isAutoincrement" | "hasRuntimeDefault" | "baseColumn"> extends infer T_20 ? { [K_1 in keyof T_20]: T_20[K_1]; } : never>; };
128
+ dialect: "pg";
129
+ }>; };
130
+ //# sourceMappingURL=finalizePgTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finalizePgTable.d.ts","sourceRoot":"","sources":["../../src/finalizePgTable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAE1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAA;AACnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEvD,eAAO,MAAM,eAAe,GAC1B,KAAK,CAAC,UAAU,SAAS,MAAM,EAC/B,WAAW,SAAS,gBAAgB,GAAG,gBAAgB,EAEvD,MAAM,aAAa,CAAC,UAAU,EAAE,WAAW,CAAC,KAOV,GAC/B,GAAG,yBAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAErB,CAAA"}
@@ -0,0 +1,6 @@
1
+ export * from './columnsAdders/index.ts';
2
+ export * from './columnsWithExtraTableConfigsAdders/index.ts';
3
+ export * from './extraTableConfigsAdders/index.ts';
4
+ export * from './finalizePgTable.ts';
5
+ export * from './initPgTable.ts';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,+CAA+C,CAAA;AAC7D,cAAc,oCAAoC,CAAA;AAClD,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { TableFuncArgs } from './TableFuncArgs.ts';
2
+ export declare const initPgTable: <const TTableName extends string>(snakeCaseTableName: TTableName) => TableFuncArgs<TTableName, {}>;
3
+ //# sourceMappingURL=initPgTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initPgTable.d.ts","sourceRoot":"","sources":["../../src/initPgTable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEvD,eAAO,MAAM,WAAW,GAAI,KAAK,CAAC,UAAU,SAAS,MAAM,EACzD,oBAAoB,UAAU,KAC7B,aAAa,CAAC,UAAU,EAAE,EAAE,CAAuC,CAAA"}
package/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './src/index.ts'
package/package.json ADDED
@@ -0,0 +1,92 @@
1
+ {
2
+ "name": "drizzle-fp",
3
+ "type": "module",
4
+ "version": "0.1.0",
5
+ "description": "Write drizzle table declarations in functional style, and make reusable table parts easily",
6
+ "devDependencies": {
7
+ "@effect/language-service": "^0.86.2",
8
+ "@evadev/tsconfig": "^1.0.1",
9
+ "@types/pg": "^8.15.6",
10
+ "ts-namespace-import": "nounder/ts-namespace-import",
11
+ "ts-patch": "^4.0.1",
12
+ "typescript": "^6.0.3"
13
+ },
14
+ "peerDependencies": {
15
+ "effect": "^3.19.16"
16
+ },
17
+ "dependencies": {
18
+ "@nevware21/ts-utils": "^0.14.0",
19
+ "drizzle-orm": "^0.45.0",
20
+ "pg": "^8.21.0",
21
+ "type-fest": "^5.4.4"
22
+ },
23
+ "homepage": "https://github.com/nikelborm/effect-garden/tree/main/packages/drizzle-fp#readme",
24
+ "bugs": {
25
+ "url": "https://github.com/nikelborm/effect-garden/issues",
26
+ "email": "evadev@duck.com"
27
+ },
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "git+ssh://git@github.com/nikelborm/effect-garden.git",
31
+ "directory": "packages/drizzle-fp"
32
+ },
33
+ "scripts": {
34
+ "build": "tspc",
35
+ "dev": "tspc --watch"
36
+ },
37
+ "author": {
38
+ "name": "nikelborm",
39
+ "email": "evadev@duck.com",
40
+ "url": "https://github.com/nikelborm"
41
+ },
42
+ "contributors": [
43
+ {
44
+ "name": "nikelborm",
45
+ "email": "evadev@duck.com",
46
+ "url": "https://github.com/nikelborm"
47
+ }
48
+ ],
49
+ "maintainers": [
50
+ {
51
+ "name": "nikelborm",
52
+ "email": "evadev@duck.com",
53
+ "url": "https://github.com/nikelborm"
54
+ }
55
+ ],
56
+ "license": "MIT",
57
+ "private": false,
58
+ "publishConfig": {
59
+ "access": "public",
60
+ "provenance": false
61
+ },
62
+ "exports": {
63
+ ".": {
64
+ "types": "./dist-types/index.d.ts",
65
+ "default": "./dist/index.js"
66
+ },
67
+ "./*.js": {
68
+ "types": "./dist-types/src/*.d.ts",
69
+ "default": "./dist/src/*.js"
70
+ },
71
+ "./*.ts": "./src/*.ts",
72
+ "./*": {
73
+ "types": "./dist-types/src/*.d.ts",
74
+ "default": "./dist/src/*.js"
75
+ },
76
+ "./internal/*": null,
77
+ "./package.json": "./package.json"
78
+ },
79
+ "main": "./dist/index.js",
80
+ "module": "./dist/index.js",
81
+ "types": "./dist-types/index.d.ts",
82
+ "files": [
83
+ "dist-types",
84
+ "dist",
85
+ "index.ts",
86
+ "package.json",
87
+ "src",
88
+ "!**/*.spec.*",
89
+ "!**/*.tsbuildinfo",
90
+ "!**/scratchpad.*"
91
+ ]
92
+ }
@@ -0,0 +1,21 @@
1
+ import type { BuildIndexColumn } from 'drizzle-orm'
2
+ import type { PgTableExtraConfigValue } from 'drizzle-orm/pg-core'
3
+
4
+ import type { GeneralColumnMap } from './columnsAdders/index.ts'
5
+
6
+ export type TableFuncArgs<
7
+ TTableName extends string,
8
+ TColumnsMap extends GeneralColumnMap = GeneralColumnMap,
9
+ > = [
10
+ name: TTableName,
11
+ columns: TColumnsMap,
12
+ extraConfig: (
13
+ table: RemapToTableArgumentOfExtraConfigRenderer<TColumnsMap>,
14
+ ) => PgTableExtraConfigValue[],
15
+ ]
16
+
17
+ export type RemapToTableArgumentOfExtraConfigRenderer<
18
+ TColumnsMap extends GeneralColumnMap = GeneralColumnMap,
19
+ > = {
20
+ [Key in keyof TColumnsMap]: BuildIndexColumn<'pg'>
21
+ }
@@ -0,0 +1,69 @@
1
+ import type { PgColumnBuilderBase } from 'drizzle-orm/pg-core'
2
+
3
+ const ErrorMessageBrand = Symbol()
4
+
5
+ export type ErrMsg<Message extends string, Context = any> = {
6
+ message: Message
7
+ brand: typeof ErrorMessageBrand
8
+ context: Context
9
+ }
10
+
11
+ export type ColumnMap<Keys extends string> = Record<Keys, PgColumnBuilderBase>
12
+ export type GeneralColumnMap = ColumnMap<string>
13
+
14
+ // TODO: make all validation sound with runtime execution
15
+
16
+ export type AllowOnlyNonEmptyObjectsWithActualKeys<
17
+ ValueToValidate,
18
+ ExpectedRecordValue = any,
19
+ > = [
20
+ AllowOnlyNonEmptyLiteralStringKeys<AllowOnlyNonEmptyObjects<ValueToValidate>>,
21
+ ] extends [infer U extends ErrMsg<string>]
22
+ ? U
23
+ : Record<string, ExpectedRecordValue>
24
+
25
+ type AllowOnlyNonEmptyLiteralStringKeys<ValueToValidate> =
26
+ ForbidEmptyStringKeys<
27
+ ForbidNonLiteralStringKeys<ForbidNonStringKeys<ValueToValidate>>
28
+ >
29
+
30
+ type AllowOnlyNonEmptyObjects<ValueToValidate> = ForbidNonEmptyObject<
31
+ ForbidNonObjects<ValueToValidate>
32
+ >
33
+
34
+ type ForbidNonEmptyObject<ValueToValidate> = keyof ValueToValidate extends never
35
+ ? ErrMsg<'Cannot be empty object', ValueToValidate>
36
+ : ValueToValidate
37
+
38
+ type ForbidNonLiteralStringKeys<ValueToValidate> =
39
+ string extends keyof ValueToValidate
40
+ ? ErrMsg<
41
+ 'Object parameter keys cannot be general strings, they should be specific string literals',
42
+ ValueToValidate
43
+ >
44
+ : ValueToValidate
45
+
46
+ type ForbidNonObjects<ValueToValidate> = [ValueToValidate] extends [
47
+ Record<symbol | string | number, any>,
48
+ ]
49
+ ? ValueToValidate
50
+ : ErrMsg<'Should be an object', ValueToValidate>
51
+
52
+ type ForbidEmptyStringKeys<ValueToValidate> = keyof ValueToValidate extends ''
53
+ ? ErrMsg<'Object parameter keys cannot be empty string, ValueToValidate'>
54
+ : ValueToValidate
55
+
56
+ type ForbidNonStringKeys<ValueToValidate> = keyof ValueToValidate extends
57
+ | number
58
+ | symbol
59
+ | boolean
60
+ | undefined
61
+ | null
62
+ ? ErrMsg<
63
+ 'Object parameter keys should be only strings and only literals, and not number, symbol, boolean, undefined or null',
64
+ ValueToValidate
65
+ >
66
+ : ValueToValidate
67
+
68
+ export type AllowOnlyValidColumnMaps<T> =
69
+ AllowOnlyNonEmptyObjectsWithActualKeys<T, PgColumnBuilderBase>
@@ -0,0 +1,24 @@
1
+ import type { TableFuncArgs } from '../TableFuncArgs.ts'
2
+ import type {
3
+ AllowOnlyValidColumnMaps,
4
+ ErrMsg,
5
+ GeneralColumnMap,
6
+ } from './AllowOnlyValidColumnMaps.ts'
7
+
8
+ export type FunctionExtendingColumnsMap<TAdditionalColumnsMap> =
9
+ SwitchEitherToNeverOrToValueOnError<
10
+ AllowOnlyValidColumnMaps<TAdditionalColumnsMap>,
11
+ <
12
+ const TTableName extends string,
13
+ TColumnsMap extends GeneralColumnMap = GeneralColumnMap,
14
+ >([snakeCaseTableName, options, extraConfig]: TableFuncArgs<
15
+ TTableName,
16
+ TColumnsMap
17
+ >) => TableFuncArgs<TTableName, TAdditionalColumnsMap & TColumnsMap>
18
+ >
19
+
20
+ type SwitchEitherToNeverOrToValueOnError<ValueToValidate, SuccessValue> = [
21
+ ValueToValidate,
22
+ ] extends [ErrMsg<string>]
23
+ ? never
24
+ : SuccessValue
@@ -0,0 +1,14 @@
1
+ import type { PgColumnBuilderBase } from 'drizzle-orm/pg-core'
2
+
3
+ import { addColumns } from './addColumns.ts'
4
+ import type { FunctionExtendingColumnsMap } from './FunctionExtendingColumnsMap.ts'
5
+
6
+ export const addColumn = <
7
+ const NameOfColumnInCurrentTable extends string,
8
+ ColumnBuilder extends PgColumnBuilderBase,
9
+ >(
10
+ nameOfColumnInCurrentTable: NameOfColumnInCurrentTable,
11
+ buildColumn: () => ColumnBuilder,
12
+ ): FunctionExtendingColumnsMap<{
13
+ [Key in NameOfColumnInCurrentTable]: ColumnBuilder
14
+ }> => addColumns(() => ({ [nameOfColumnInCurrentTable]: buildColumn() }) as any)
@@ -0,0 +1,18 @@
1
+ import type { AllowOnlyValidColumnMaps } from './AllowOnlyValidColumnMaps.ts'
2
+ import type { FunctionExtendingColumnsMap } from './FunctionExtendingColumnsMap.ts'
3
+
4
+ export const addColumns = <
5
+ TAdditionalColumnsMap extends [TAdditionalColumnsMap] extends [infer U]
6
+ ? AllowOnlyValidColumnMaps<U>
7
+ : never,
8
+ >(
9
+ getAdditionalColumnMap: () => TAdditionalColumnsMap,
10
+ ): FunctionExtendingColumnsMap<TAdditionalColumnsMap> =>
11
+ (([snakeCaseTableName, options, extraConfig]) => [
12
+ snakeCaseTableName,
13
+ {
14
+ ...options,
15
+ ...(getAdditionalColumnMap() as any),
16
+ },
17
+ table => extraConfig(table),
18
+ ]) as FunctionExtendingColumnsMap<TAdditionalColumnsMap>
@@ -0,0 +1,24 @@
1
+ import { timestamp } from 'drizzle-orm/pg-core'
2
+
3
+ import { flow } from 'effect/Function'
4
+
5
+ import { addColumn } from './addColumn.ts'
6
+
7
+ const addHappenedAtDateColumn = <const TColumnName extends string>(
8
+ name: TColumnName,
9
+ ) =>
10
+ addColumn(name, () =>
11
+ timestamp({
12
+ withTimezone: true,
13
+ mode: 'string',
14
+ })
15
+ .defaultNow()
16
+ .notNull(),
17
+ )
18
+
19
+ export const addCreatedAtDateColumn = addHappenedAtDateColumn('createdAt')
20
+
21
+ export const addCreatedAndUpdatedDateColumns = flow(
22
+ addCreatedAtDateColumn,
23
+ addHappenedAtDateColumn('updatedAt'),
24
+ )
@@ -0,0 +1,20 @@
1
+ import type { NotNull } from 'drizzle-orm'
2
+
3
+ import {
4
+ addRequiredColumns,
5
+ type ColumnBuilderWithNotNullMethod,
6
+ } from './addRequiredColumns.ts'
7
+ import type { FunctionExtendingColumnsMap } from './FunctionExtendingColumnsMap.ts'
8
+
9
+ export const addRequiredColumn = <
10
+ const NameOfColumnInCurrentTable extends string,
11
+ ColumnBuilder extends ColumnBuilderWithNotNullMethod,
12
+ >(
13
+ nameOfColumnInCurrentTable: NameOfColumnInCurrentTable,
14
+ buildColumn: () => ColumnBuilder,
15
+ ): FunctionExtendingColumnsMap<{
16
+ [Key in NameOfColumnInCurrentTable]: NotNull<ColumnBuilder>
17
+ }> =>
18
+ addRequiredColumns(
19
+ () => ({ [nameOfColumnInCurrentTable]: buildColumn() }) as any,
20
+ )
@@ -0,0 +1,41 @@
1
+ import type { NotNull } from 'drizzle-orm'
2
+ import type { PgColumnBuilderBase } from 'drizzle-orm/pg-core'
3
+
4
+ import type { AllowOnlyNonEmptyObjectsWithActualKeys } from './AllowOnlyValidColumnMaps.ts'
5
+ import { addColumns } from './addColumns.ts'
6
+ import type { FunctionExtendingColumnsMap } from './FunctionExtendingColumnsMap.ts'
7
+
8
+ export const addRequiredColumns = <
9
+ const TAdditionalColumnsMap extends [TAdditionalColumnsMap] extends [infer U]
10
+ ? AllowOnlyNonEmptyObjectsWithActualKeys<U, ColumnBuilderWithNotNullMethod>
11
+ : never,
12
+ >(
13
+ getAdditionalColumnMap: () => TAdditionalColumnsMap,
14
+ ): BuiltRequiredColumnsAdder<TAdditionalColumnsMap> =>
15
+ addColumns(
16
+ () =>
17
+ Object.fromEntries(
18
+ Object.entries(
19
+ getAdditionalColumnMap() as unknown as Record<
20
+ string,
21
+ ColumnBuilderWithNotNullMethod
22
+ >,
23
+ ).map(([ownColumnName, currentColumnBuilder]) => [
24
+ ownColumnName,
25
+ currentColumnBuilder.notNull(),
26
+ ]),
27
+ ) as any,
28
+ )
29
+
30
+ type BuiltRequiredColumnsAdder<TAdditionalColumnsMap> =
31
+ FunctionExtendingColumnsMap<MakeColumnsInMapNotNull<TAdditionalColumnsMap>>
32
+
33
+ type MakeColumnsInMapNotNull<TColumnsMap> = {
34
+ [ColumnName in keyof TColumnsMap]: TColumnsMap[ColumnName] extends PgColumnBuilderBase
35
+ ? NotNull<TColumnsMap[ColumnName]>
36
+ : never
37
+ }
38
+
39
+ export type ColumnBuilderWithNotNullMethod = PgColumnBuilderBase & {
40
+ notNull: () => NotNull<PgColumnBuilderBase>
41
+ }
@@ -0,0 +1,14 @@
1
+ import { varchar } from 'drizzle-orm/pg-core'
2
+
3
+ import { flow } from 'effect/Function'
4
+
5
+ import { addColumn } from './addColumn.ts'
6
+ import { addRequiredColumn } from './addRequiredColumn.ts'
7
+
8
+ export const addRequiredName = addRequiredColumn('name', varchar)
9
+ export const addOptionalDescription = addColumn('description', varchar)
10
+
11
+ export const addRequiredNameWithOptionalDescription = flow(
12
+ addRequiredName,
13
+ addOptionalDescription,
14
+ )
@@ -0,0 +1,9 @@
1
+ export * from './AllowOnlyValidColumnMaps.ts'
2
+ export * from './addColumn.ts'
3
+ export * from './addColumns.ts'
4
+ export * from './addHappenedAtDateColumns.ts'
5
+ export * from './addRequiredColumn.ts'
6
+ export * from './addRequiredColumns.ts'
7
+ export * from './addRequiredNameOrDescription.ts'
8
+ export * from './FunctionExtendingColumnsMap.ts'
9
+ export * from './nonNullIdentity.ts'
@@ -0,0 +1,11 @@
1
+ import { bigint, integer, text, uuid } from 'drizzle-orm/pg-core'
2
+
3
+ export const nonNullInteger = () => integer().notNull()
4
+ export const nonNullBigint53 = () => bigint({ mode: 'number' }).notNull()
5
+ export const nonNullUuid = () => uuid().notNull()
6
+ export const nonNullText = () => text().notNull()
7
+
8
+ export type NonNullInteger = ReturnType<typeof nonNullInteger>
9
+ export type NonNullBigint53 = ReturnType<typeof nonNullBigint53>
10
+ export type NonNullUUID = ReturnType<typeof nonNullUuid>
11
+ export type NonNullText = ReturnType<typeof nonNullText>
@@ -0,0 +1,13 @@
1
+ import { serial } from 'drizzle-orm/pg-core'
2
+
3
+ import { flow } from 'effect/Function'
4
+
5
+ import { addRequiredColumn } from '../columnsAdders/index.ts'
6
+ import { addUniqueConstraintWithIndex } from '../extraTableConfigsAdders/index.ts'
7
+
8
+ // TODO: Add also Bigint53 version
9
+
10
+ export const addAutoGeneratedGloballyUniqueOrderingColumn = flow(
11
+ addRequiredColumn('order', serial),
12
+ addUniqueConstraintWithIndex('order'),
13
+ )
@@ -0,0 +1,30 @@
1
+ import type { IsIdentity, NotNull } from 'drizzle-orm'
2
+ import type { PgBigInt53BuilderInitial } from 'drizzle-orm/pg-core'
3
+ import { bigint } from 'drizzle-orm/pg-core'
4
+
5
+ import { pipe } from 'effect/Function'
6
+
7
+ import { addColumn, type GeneralColumnMap } from '../columnsAdders/index.ts'
8
+ import { addPrimaryKey } from '../extraTableConfigsAdders/index.ts'
9
+ import type { TableFuncArgs } from '../TableFuncArgs.ts'
10
+
11
+ export const addBigint53IdColumnAsPrimaryKey = <
12
+ const TTableName extends string,
13
+ TColumnsMap extends GeneralColumnMap,
14
+ >(
15
+ args: TableFuncArgs<TTableName, TColumnsMap>,
16
+ ): TableFuncArgs<
17
+ TTableName,
18
+ TColumnsMap & { id: PgBigint53GeneratedAlwaysAsIdentity<TTableName> }
19
+ > =>
20
+ pipe(
21
+ addColumn('id', () =>
22
+ bigint(`${args[0]}_id`, {
23
+ mode: 'number',
24
+ }).generatedAlwaysAsIdentity(),
25
+ )(args),
26
+ addPrimaryKey('id'),
27
+ )
28
+
29
+ type PgBigint53GeneratedAlwaysAsIdentity<TTableName extends string> =
30
+ IsIdentity<NotNull<PgBigInt53BuilderInitial<`${TTableName}_id`>>, 'always'>
@@ -0,0 +1,21 @@
1
+ import {
2
+ type FunctionExtendingColumnsMap,
3
+ type NonNullBigint53,
4
+ nonNullBigint53,
5
+ } from '../columnsAdders/index.ts'
6
+ import type { ForeignTableColumnGetter } from '../extraTableConfigsAdders/index.ts'
7
+ import { addColumnWithFk } from './addColumnWithFk.ts'
8
+
9
+ export const addBigint53RequiredColumnWithFk = <
10
+ const NameOfColumnInCurrentTable extends string,
11
+ >(
12
+ nameOfColumnInCurrentTable: NameOfColumnInCurrentTable,
13
+ getColumnOfForeignTable: ForeignTableColumnGetter,
14
+ ): FunctionExtendingColumnsMap<
15
+ Record<NameOfColumnInCurrentTable, NonNullBigint53>
16
+ > =>
17
+ addColumnWithFk(
18
+ nameOfColumnInCurrentTable,
19
+ nonNullBigint53,
20
+ getColumnOfForeignTable,
21
+ )
@@ -0,0 +1,26 @@
1
+ import type { AnyPgTable } from 'drizzle-orm/pg-core'
2
+
3
+ import {
4
+ type AllowOnlyNonEmptyObjectsWithActualKeys,
5
+ type FunctionExtendingColumnsMap,
6
+ type NonNullBigint53,
7
+ nonNullBigint53,
8
+ } from '../columnsAdders/index.ts'
9
+ import { addColumnsOfTheSameTypeWithCompositeFk } from './addColumnsOfTheSameTypeWithCompositeFk.ts'
10
+
11
+ export const addBigint53RequiredColumnsWithCompositeFk = <
12
+ const FkConfig extends [FkConfig] extends [infer U]
13
+ ? AllowOnlyNonEmptyObjectsWithActualKeys<U, keyof NoInfer<TTable>>
14
+ : never,
15
+ TTable extends AnyPgTable,
16
+ >(
17
+ getForeignTable: () => TTable,
18
+ fkConfig: FkConfig,
19
+ ): FunctionExtendingColumnsMap<
20
+ Record<keyof NoInfer<FkConfig>, NonNullBigint53>
21
+ > =>
22
+ addColumnsOfTheSameTypeWithCompositeFk(
23
+ getForeignTable,
24
+ nonNullBigint53,
25
+ fkConfig,
26
+ )
@@ -0,0 +1,25 @@
1
+ import type { AnyPgTable } from 'drizzle-orm/pg-core'
2
+
3
+ import {
4
+ type FunctionExtendingColumnsMap,
5
+ type NonNullBigint53,
6
+ nonNullBigint53,
7
+ } from '../columnsAdders/index.ts'
8
+ import { addColumnsOfTheSameTypeWithCompositeFk1to1 } from './addColumnsOfTheSameTypeWithCompositeFk1to1.ts'
9
+
10
+ export const addBigint53RequiredColumnsWithCompositeFk1to1 = <
11
+ const FkConfig extends readonly [
12
+ keyof TTable,
13
+ keyof TTable,
14
+ ...(keyof TTable)[],
15
+ ],
16
+ TTable extends AnyPgTable,
17
+ >(
18
+ getForeignTable: () => TTable,
19
+ fkConfig: FkConfig,
20
+ ): FunctionExtendingColumnsMap<Record<FkConfig[number], NonNullBigint53>> =>
21
+ addColumnsOfTheSameTypeWithCompositeFk1to1(
22
+ getForeignTable,
23
+ nonNullBigint53,
24
+ fkConfig,
25
+ )