@forgebase/database 0.0.1

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 (219) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +470 -0
  3. package/dist/cjs/adapters/base.d.ts +20 -0
  4. package/dist/cjs/adapters/base.d.ts.map +1 -0
  5. package/dist/cjs/adapters/base.js +13 -0
  6. package/dist/cjs/adapters/base.js.map +1 -0
  7. package/dist/cjs/adapters/index.d.ts +6 -0
  8. package/dist/cjs/adapters/index.d.ts.map +1 -0
  9. package/dist/cjs/adapters/index.js +24 -0
  10. package/dist/cjs/adapters/index.js.map +1 -0
  11. package/dist/cjs/adapters/postgres.d.ts +13 -0
  12. package/dist/cjs/adapters/postgres.d.ts.map +1 -0
  13. package/dist/cjs/adapters/postgres.js +51 -0
  14. package/dist/cjs/adapters/postgres.js.map +1 -0
  15. package/dist/cjs/adapters/sqlite.d.ts +13 -0
  16. package/dist/cjs/adapters/sqlite.d.ts.map +1 -0
  17. package/dist/cjs/adapters/sqlite.js +47 -0
  18. package/dist/cjs/adapters/sqlite.js.map +1 -0
  19. package/dist/cjs/adapters/types.d.ts +8 -0
  20. package/dist/cjs/adapters/types.d.ts.map +1 -0
  21. package/dist/cjs/adapters/types.js +3 -0
  22. package/dist/cjs/adapters/types.js.map +1 -0
  23. package/dist/cjs/database.d.ts +73 -0
  24. package/dist/cjs/database.d.ts.map +1 -0
  25. package/dist/cjs/database.js +673 -0
  26. package/dist/cjs/database.js.map +1 -0
  27. package/dist/cjs/errors.d.ts +37 -0
  28. package/dist/cjs/errors.d.ts.map +1 -0
  29. package/dist/cjs/errors.js +64 -0
  30. package/dist/cjs/errors.js.map +1 -0
  31. package/dist/cjs/index.d.ts +16 -0
  32. package/dist/cjs/index.d.ts.map +1 -0
  33. package/dist/cjs/index.js +31 -0
  34. package/dist/cjs/index.js.map +1 -0
  35. package/dist/cjs/kysely-hooks.d.ts +45 -0
  36. package/dist/cjs/kysely-hooks.d.ts.map +1 -0
  37. package/dist/cjs/kysely-hooks.js +93 -0
  38. package/dist/cjs/kysely-hooks.js.map +1 -0
  39. package/dist/cjs/libsql/example.d.ts +2 -0
  40. package/dist/cjs/libsql/example.d.ts.map +1 -0
  41. package/dist/cjs/libsql/example.js +44 -0
  42. package/dist/cjs/libsql/example.js.map +1 -0
  43. package/dist/cjs/libsql/index.d.ts +36 -0
  44. package/dist/cjs/libsql/index.d.ts.map +1 -0
  45. package/dist/cjs/libsql/index.js +155 -0
  46. package/dist/cjs/libsql/index.js.map +1 -0
  47. package/dist/cjs/permissionService.d.ts +20 -0
  48. package/dist/cjs/permissionService.d.ts.map +1 -0
  49. package/dist/cjs/permissionService.js +107 -0
  50. package/dist/cjs/permissionService.js.map +1 -0
  51. package/dist/cjs/rlsFunctionRegistry.d.ts +43 -0
  52. package/dist/cjs/rlsFunctionRegistry.d.ts.map +1 -0
  53. package/dist/cjs/rlsFunctionRegistry.js +63 -0
  54. package/dist/cjs/rlsFunctionRegistry.js.map +1 -0
  55. package/dist/cjs/rlsManager.d.ts +23 -0
  56. package/dist/cjs/rlsManager.d.ts.map +1 -0
  57. package/dist/cjs/rlsManager.js +371 -0
  58. package/dist/cjs/rlsManager.js.map +1 -0
  59. package/dist/cjs/schema.d.ts +15 -0
  60. package/dist/cjs/schema.d.ts.map +1 -0
  61. package/dist/cjs/schema.js +119 -0
  62. package/dist/cjs/schema.js.map +1 -0
  63. package/dist/cjs/sdk/client.d.ts +324 -0
  64. package/dist/cjs/sdk/client.d.ts.map +1 -0
  65. package/dist/cjs/sdk/client.js +554 -0
  66. package/dist/cjs/sdk/client.js.map +1 -0
  67. package/dist/cjs/sdk/examples.d.ts +68 -0
  68. package/dist/cjs/sdk/examples.d.ts.map +1 -0
  69. package/dist/cjs/sdk/examples.js +232 -0
  70. package/dist/cjs/sdk/examples.js.map +1 -0
  71. package/dist/cjs/sdk/server.d.ts +115 -0
  72. package/dist/cjs/sdk/server.d.ts.map +1 -0
  73. package/dist/cjs/sdk/server.js +140 -0
  74. package/dist/cjs/sdk/server.js.map +1 -0
  75. package/dist/cjs/types.d.ts +217 -0
  76. package/dist/cjs/types.d.ts.map +1 -0
  77. package/dist/cjs/types.js +5 -0
  78. package/dist/cjs/types.js.map +1 -0
  79. package/dist/cjs/utils/column-utils.d.ts +8 -0
  80. package/dist/cjs/utils/column-utils.d.ts.map +1 -0
  81. package/dist/cjs/utils/column-utils.js +131 -0
  82. package/dist/cjs/utils/column-utils.js.map +1 -0
  83. package/dist/cjs/utils/db.d.ts +2 -0
  84. package/dist/cjs/utils/db.d.ts.map +1 -0
  85. package/dist/cjs/utils/db.js +6 -0
  86. package/dist/cjs/utils/db.js.map +1 -0
  87. package/dist/cjs/utils/inspector.d.ts +39 -0
  88. package/dist/cjs/utils/inspector.d.ts.map +1 -0
  89. package/dist/cjs/utils/inspector.js +164 -0
  90. package/dist/cjs/utils/inspector.js.map +1 -0
  91. package/dist/cjs/utils/permission-initializer.d.ts +15 -0
  92. package/dist/cjs/utils/permission-initializer.d.ts.map +1 -0
  93. package/dist/cjs/utils/permission-initializer.js +173 -0
  94. package/dist/cjs/utils/permission-initializer.js.map +1 -0
  95. package/dist/cjs/websocket/RealtimeAdapter.d.ts +22 -0
  96. package/dist/cjs/websocket/RealtimeAdapter.d.ts.map +1 -0
  97. package/dist/cjs/websocket/RealtimeAdapter.js +3 -0
  98. package/dist/cjs/websocket/RealtimeAdapter.js.map +1 -0
  99. package/dist/cjs/websocket/SSEManager.d.ts +40 -0
  100. package/dist/cjs/websocket/SSEManager.d.ts.map +1 -0
  101. package/dist/cjs/websocket/SSEManager.js +268 -0
  102. package/dist/cjs/websocket/SSEManager.js.map +1 -0
  103. package/dist/cjs/websocket/WebSocketManager.d.ts +28 -0
  104. package/dist/cjs/websocket/WebSocketManager.d.ts.map +1 -0
  105. package/dist/cjs/websocket/WebSocketManager.js +156 -0
  106. package/dist/cjs/websocket/WebSocketManager.js.map +1 -0
  107. package/dist/cjs/websocket/index.d.ts +4 -0
  108. package/dist/cjs/websocket/index.d.ts.map +1 -0
  109. package/dist/cjs/websocket/index.js +20 -0
  110. package/dist/cjs/websocket/index.js.map +1 -0
  111. package/dist/esm/adapters/base.d.ts +20 -0
  112. package/dist/esm/adapters/base.d.ts.map +1 -0
  113. package/dist/esm/adapters/base.js +10 -0
  114. package/dist/esm/adapters/base.js.map +1 -0
  115. package/dist/esm/adapters/index.d.ts +6 -0
  116. package/dist/esm/adapters/index.d.ts.map +1 -0
  117. package/dist/esm/adapters/index.js +19 -0
  118. package/dist/esm/adapters/index.js.map +1 -0
  119. package/dist/esm/adapters/postgres.d.ts +13 -0
  120. package/dist/esm/adapters/postgres.d.ts.map +1 -0
  121. package/dist/esm/adapters/postgres.js +47 -0
  122. package/dist/esm/adapters/postgres.js.map +1 -0
  123. package/dist/esm/adapters/sqlite.d.ts +13 -0
  124. package/dist/esm/adapters/sqlite.d.ts.map +1 -0
  125. package/dist/esm/adapters/sqlite.js +43 -0
  126. package/dist/esm/adapters/sqlite.js.map +1 -0
  127. package/dist/esm/adapters/types.d.ts +8 -0
  128. package/dist/esm/adapters/types.d.ts.map +1 -0
  129. package/dist/esm/adapters/types.js +2 -0
  130. package/dist/esm/adapters/types.js.map +1 -0
  131. package/dist/esm/database.d.ts +73 -0
  132. package/dist/esm/database.d.ts.map +1 -0
  133. package/dist/esm/database.js +668 -0
  134. package/dist/esm/database.js.map +1 -0
  135. package/dist/esm/errors.d.ts +37 -0
  136. package/dist/esm/errors.d.ts.map +1 -0
  137. package/dist/esm/errors.js +55 -0
  138. package/dist/esm/errors.js.map +1 -0
  139. package/dist/esm/index.d.ts +16 -0
  140. package/dist/esm/index.d.ts.map +1 -0
  141. package/dist/esm/index.js +15 -0
  142. package/dist/esm/index.js.map +1 -0
  143. package/dist/esm/kysely-hooks.d.ts +45 -0
  144. package/dist/esm/kysely-hooks.d.ts.map +1 -0
  145. package/dist/esm/kysely-hooks.js +86 -0
  146. package/dist/esm/kysely-hooks.js.map +1 -0
  147. package/dist/esm/libsql/example.d.ts +2 -0
  148. package/dist/esm/libsql/example.d.ts.map +1 -0
  149. package/dist/esm/libsql/example.js +42 -0
  150. package/dist/esm/libsql/example.js.map +1 -0
  151. package/dist/esm/libsql/index.d.ts +36 -0
  152. package/dist/esm/libsql/index.d.ts.map +1 -0
  153. package/dist/esm/libsql/index.js +116 -0
  154. package/dist/esm/libsql/index.js.map +1 -0
  155. package/dist/esm/permissionService.d.ts +20 -0
  156. package/dist/esm/permissionService.d.ts.map +1 -0
  157. package/dist/esm/permissionService.js +103 -0
  158. package/dist/esm/permissionService.js.map +1 -0
  159. package/dist/esm/rlsFunctionRegistry.d.ts +43 -0
  160. package/dist/esm/rlsFunctionRegistry.d.ts.map +1 -0
  161. package/dist/esm/rlsFunctionRegistry.js +60 -0
  162. package/dist/esm/rlsFunctionRegistry.js.map +1 -0
  163. package/dist/esm/rlsManager.d.ts +23 -0
  164. package/dist/esm/rlsManager.d.ts.map +1 -0
  165. package/dist/esm/rlsManager.js +366 -0
  166. package/dist/esm/rlsManager.js.map +1 -0
  167. package/dist/esm/schema.d.ts +15 -0
  168. package/dist/esm/schema.d.ts.map +1 -0
  169. package/dist/esm/schema.js +113 -0
  170. package/dist/esm/schema.js.map +1 -0
  171. package/dist/esm/sdk/client.d.ts +324 -0
  172. package/dist/esm/sdk/client.d.ts.map +1 -0
  173. package/dist/esm/sdk/client.js +550 -0
  174. package/dist/esm/sdk/client.js.map +1 -0
  175. package/dist/esm/sdk/examples.d.ts +68 -0
  176. package/dist/esm/sdk/examples.d.ts.map +1 -0
  177. package/dist/esm/sdk/examples.js +229 -0
  178. package/dist/esm/sdk/examples.js.map +1 -0
  179. package/dist/esm/sdk/server.d.ts +115 -0
  180. package/dist/esm/sdk/server.d.ts.map +1 -0
  181. package/dist/esm/sdk/server.js +136 -0
  182. package/dist/esm/sdk/server.js.map +1 -0
  183. package/dist/esm/types.d.ts +217 -0
  184. package/dist/esm/types.d.ts.map +1 -0
  185. package/dist/esm/types.js +2 -0
  186. package/dist/esm/types.js.map +1 -0
  187. package/dist/esm/utils/column-utils.d.ts +8 -0
  188. package/dist/esm/utils/column-utils.d.ts.map +1 -0
  189. package/dist/esm/utils/column-utils.js +127 -0
  190. package/dist/esm/utils/column-utils.js.map +1 -0
  191. package/dist/esm/utils/db.d.ts +2 -0
  192. package/dist/esm/utils/db.d.ts.map +1 -0
  193. package/dist/esm/utils/db.js +3 -0
  194. package/dist/esm/utils/db.js.map +1 -0
  195. package/dist/esm/utils/inspector.d.ts +39 -0
  196. package/dist/esm/utils/inspector.d.ts.map +1 -0
  197. package/dist/esm/utils/inspector.js +160 -0
  198. package/dist/esm/utils/inspector.js.map +1 -0
  199. package/dist/esm/utils/permission-initializer.d.ts +15 -0
  200. package/dist/esm/utils/permission-initializer.d.ts.map +1 -0
  201. package/dist/esm/utils/permission-initializer.js +137 -0
  202. package/dist/esm/utils/permission-initializer.js.map +1 -0
  203. package/dist/esm/websocket/RealtimeAdapter.d.ts +22 -0
  204. package/dist/esm/websocket/RealtimeAdapter.d.ts.map +1 -0
  205. package/dist/esm/websocket/RealtimeAdapter.js +2 -0
  206. package/dist/esm/websocket/RealtimeAdapter.js.map +1 -0
  207. package/dist/esm/websocket/SSEManager.d.ts +40 -0
  208. package/dist/esm/websocket/SSEManager.d.ts.map +1 -0
  209. package/dist/esm/websocket/SSEManager.js +231 -0
  210. package/dist/esm/websocket/SSEManager.js.map +1 -0
  211. package/dist/esm/websocket/WebSocketManager.d.ts +28 -0
  212. package/dist/esm/websocket/WebSocketManager.d.ts.map +1 -0
  213. package/dist/esm/websocket/WebSocketManager.js +152 -0
  214. package/dist/esm/websocket/WebSocketManager.js.map +1 -0
  215. package/dist/esm/websocket/index.d.ts +4 -0
  216. package/dist/esm/websocket/index.d.ts.map +1 -0
  217. package/dist/esm/websocket/index.js +4 -0
  218. package/dist/esm/websocket/index.js.map +1 -0
  219. package/package.json +67 -0
@@ -0,0 +1,217 @@
1
+ import type { ColumnDataType, Kysely, Transaction } from 'kysely';
2
+ import type { KyselyHooks } from './kysely-hooks';
3
+ import type { PermissionService } from './permissionService';
4
+ import type { DatabaseSchema, TableInfo } from './utils/inspector';
5
+ import { QueryParams } from './sdk/server';
6
+ import { LibsqlDialectConfig } from './libsql';
7
+ export type { QueryParams } from './sdk/server';
8
+ export declare const FG_PERMISSION_TABLE = "fg_table_permissions";
9
+ export type Row = Record<string, any>;
10
+ export type ColumnType = ColumnDataType | 'increments' | 'enum';
11
+ export interface ColumnDefinition {
12
+ name: string;
13
+ type: ColumnType;
14
+ primary?: boolean;
15
+ unique?: boolean;
16
+ nullable: boolean;
17
+ enumValues?: string[];
18
+ foreignKeys?: ForeignKey;
19
+ default?: any;
20
+ }
21
+ export interface UpdateColumnDefinition {
22
+ currentName: string;
23
+ newName?: string;
24
+ type?: ColumnType;
25
+ currentType: ColumnType;
26
+ primary?: boolean;
27
+ unique?: boolean;
28
+ nullable?: boolean;
29
+ foreignKeys?: ForeignKey;
30
+ default?: any;
31
+ }
32
+ export interface ForeignKey {
33
+ columnName: string;
34
+ references: {
35
+ tableName: string;
36
+ columnName: string;
37
+ };
38
+ }
39
+ export type CustomRlsFunction = (userContext: UserContext, row: Record<string, unknown>, db?: Kysely<any>) => Promise<boolean> | boolean;
40
+ export type PermissionRule = {
41
+ allow: 'public' | 'private' | 'role' | 'auth' | 'guest' | 'labels' | 'teams' | 'static' | 'fieldCheck' | 'customSql' | 'customFunction';
42
+ labels?: string[];
43
+ teams?: string[];
44
+ static?: boolean;
45
+ customSql?: string;
46
+ customFunction?: string;
47
+ fieldCheck?: FieldCheck;
48
+ roles?: string[];
49
+ };
50
+ export type UserContextFields = keyof UserContext;
51
+ export type FieldCheck = {
52
+ field: string;
53
+ operator: '===' | '!==' | 'in' | 'notIn';
54
+ valueType: 'userContext' | 'static';
55
+ value: UserContextFields | any[];
56
+ };
57
+ export type UserContext = {
58
+ userId: number | string;
59
+ labels: string[];
60
+ teams: string[];
61
+ permissions?: string[];
62
+ role?: string;
63
+ };
64
+ export type TablePermissions = {
65
+ operations: {
66
+ SELECT?: PermissionRule[];
67
+ INSERT?: PermissionRule[];
68
+ UPDATE?: PermissionRule[];
69
+ DELETE?: PermissionRule[];
70
+ };
71
+ };
72
+ /**
73
+ * Type of realtime adapter to use for database table broadcasts
74
+ */
75
+ export type RealtimeAdapterType = 'websocket' | 'sse';
76
+ export interface ForgeDatabaseConfig {
77
+ db?: Kysely<any>;
78
+ libsql?: LibsqlDialectConfig;
79
+ hooks?: KyselyHooks;
80
+ permissionsService?: PermissionService;
81
+ prefix?: string;
82
+ enforceRls?: boolean;
83
+ realtime?: boolean;
84
+ /** Type of realtime adapter to use (default: 'websocket') */
85
+ realtimeAdapter?: RealtimeAdapterType;
86
+ defaultPermissions?: TablePermissions;
87
+ excludedTables?: string[];
88
+ websocketPort?: number;
89
+ /** Whether to automatically initialize permissions for all tables (default: false) */
90
+ initializePermissions?: boolean;
91
+ /** Path where the permission initialization report will be saved */
92
+ permissionReportPath?: string;
93
+ /** Callback function to be called when permission initialization is complete */
94
+ onPermissionInitComplete?: (report: PermissionInitializationReport) => void;
95
+ }
96
+ export type EndpointHandler = (request: Request) => Promise<any>;
97
+ export type SchemaHandler = (request: Request) => Promise<any>;
98
+ export type PermissionHandler = (request: Request) => Promise<any>;
99
+ export type DataHandler = (request: Request) => Promise<any>;
100
+ export interface ApiResponse<T = any> {
101
+ data?: T;
102
+ error?: string;
103
+ status?: number;
104
+ }
105
+ export interface SchemaCreateParams {
106
+ tableName: string;
107
+ columns: ColumnDefinition[];
108
+ }
109
+ export interface AddForeignKeyParams {
110
+ tableName: string;
111
+ column: string;
112
+ foreignTableName: string;
113
+ foreignColumn: string;
114
+ }
115
+ export interface DropForeignKeyParams {
116
+ tableName: string;
117
+ column: string;
118
+ }
119
+ export interface ModifySchemaParams {
120
+ tableName: string;
121
+ action: 'addColumn' | 'deleteColumn' | 'updateColumn';
122
+ columns: ColumnDefinition[] | UpdateColumnDefinition[];
123
+ }
124
+ export type DataQueryParams = QueryParams;
125
+ export interface DataMutationParams {
126
+ tableName: string;
127
+ data: Record<string, any> | Array<Record<string, any>>;
128
+ id?: string | number;
129
+ }
130
+ export interface AdvanceDataMutationParams {
131
+ tableName: string;
132
+ data: Record<string, any> | Array<Record<string, any>>;
133
+ query: DataQueryParams;
134
+ }
135
+ export interface DataDeleteParams {
136
+ tableName: string;
137
+ id: string | number;
138
+ }
139
+ export interface AdvanceDataDeleteParams {
140
+ tableName: string;
141
+ query: DataQueryParams;
142
+ }
143
+ export interface PermissionParams {
144
+ tableName: string;
145
+ permissions?: TablePermissions;
146
+ }
147
+ /**
148
+ * Report generated after permission initialization
149
+ */
150
+ export interface PermissionInitializationReport {
151
+ /** Timestamp when the initialization started */
152
+ startTime: Date;
153
+ /** Timestamp when the initialization completed */
154
+ endTime: Date;
155
+ /** Total number of tables processed */
156
+ totalTables: number;
157
+ /** Number of tables that already had permissions */
158
+ tablesWithPermissions: number;
159
+ /** Number of tables that had permissions initialized */
160
+ tablesInitialized: number;
161
+ /** Number of tables excluded from initialization */
162
+ tablesExcluded: number;
163
+ /** List of tables that had permissions initialized */
164
+ initializedTables: string[];
165
+ /** List of tables that already had permissions */
166
+ existingPermissionTables: string[];
167
+ /** List of tables that were excluded */
168
+ excludedTables: string[];
169
+ /** Any errors that occurred during initialization */
170
+ errors: Array<{
171
+ table: string;
172
+ error: string;
173
+ }>;
174
+ }
175
+ export interface ForgeDatabaseEndpoints {
176
+ schema: {
177
+ get: () => Promise<DatabaseSchema>;
178
+ create: (params: SchemaCreateParams, trx?: Transaction<any>) => Promise<{
179
+ message: string;
180
+ tablename: string;
181
+ action: string;
182
+ }>;
183
+ delete: (tableName: string, trx?: Transaction<any>) => Promise<{
184
+ message: string;
185
+ tablename: string;
186
+ action: string;
187
+ }>;
188
+ modify: (params: ModifySchemaParams, trx?: Transaction<any>) => Promise<any>;
189
+ addForeingKey: (params: AddForeignKeyParams, trx?: Transaction<any>) => Promise<any>;
190
+ dropForeignKey: (params: DropForeignKeyParams, trx?: Transaction<any>) => Promise<any>;
191
+ truncateTable: (tableName: string, trx?: Transaction<any>) => Promise<any>;
192
+ getTables: () => Promise<string[]>;
193
+ getTableSchema: (tableName: string) => Promise<{
194
+ name: string;
195
+ info: TableInfo;
196
+ }>;
197
+ getTablePermissions: (tableName: string, trx?: Transaction<any>) => Promise<TablePermissions>;
198
+ getTableSchemaWithPermissions: (tableName: string, trx?: Transaction<any>) => Promise<{
199
+ name: string;
200
+ info: TableInfo;
201
+ permissions: TablePermissions;
202
+ }>;
203
+ };
204
+ data: {
205
+ query: <T>(tableName: string, params: DataQueryParams, user?: UserContext, isSystem?: boolean, trx?: Transaction<any>) => Promise<T[]>;
206
+ create: (params: DataMutationParams, user?: UserContext, isSystem?: boolean, trx?: Transaction<any>) => Promise<any>;
207
+ update: (params: DataMutationParams, user?: UserContext, isSystem?: boolean, trx?: Transaction<any>) => Promise<any>;
208
+ advanceUpdate: (params: AdvanceDataMutationParams, user?: UserContext, isSystem?: boolean, trx?: Transaction<any>) => Promise<any>;
209
+ delete: (params: DataDeleteParams, user?: UserContext, isSystem?: boolean, trx?: Transaction<any>) => Promise<any>;
210
+ advanceDelete: (params: AdvanceDataDeleteParams, user?: UserContext, isSystem?: boolean, trx?: Transaction<any>) => Promise<any>;
211
+ };
212
+ permissions: {
213
+ get: (params: PermissionParams, trx?: Transaction<any>) => Promise<TablePermissions | undefined>;
214
+ set: (params: PermissionParams, trx?: Transaction<any>) => Promise<any>;
215
+ };
216
+ }
217
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export const FG_PERMISSION_TABLE = 'fg_table_permissions';
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,mBAAmB,GAAG,sBAAsB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Kysely, type CreateTableBuilder, type AlterTableBuilder, type AlterTableColumnAlteringBuilder, type Transaction } from 'kysely';
2
+ import type { ColumnDefinition, UpdateColumnDefinition } from '../types';
3
+ type SchemaBuilder = CreateTableBuilder<any, any> | AlterTableBuilder | AlterTableColumnAlteringBuilder;
4
+ export declare function createColumn(builder: SchemaBuilder, // CreateTableBuilder or AlterTableBuilder
5
+ columnDef: ColumnDefinition, db: Kysely<any>): CreateTableBuilder<any, any> | AlterTableColumnAlteringBuilder;
6
+ export declare function updateColumn(db: Kysely<any>, tableName: string, columnDef: UpdateColumnDefinition, trx?: Transaction<any>): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=column-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-utils.d.ts","sourceRoot":"","sources":["../../../src/utils/column-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAEN,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,+BAA+B,EAIpC,KAAK,WAAW,EACjB,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AASzE,KAAK,aAAa,GACd,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,GAC5B,iBAAiB,GACjB,+BAA+B,CAAC;AAEpC,wBAAgB,YAAY,CAC1B,OAAO,EAAE,aAAa,EAAE,0CAA0C;AAClE,SAAS,EAAE,gBAAgB,EAC3B,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,kEAsFhB;AA+BD,wBAAsB,YAAY,CAChC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,sBAAsB,EACjC,GAAG,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,iBAmCvB"}
@@ -0,0 +1,127 @@
1
+ import { sql, } from 'kysely';
2
+ // import { SchemaInspector } from '../knex-schema-inspector/lib/index'; // Removed
3
+ import { DBInspector } from './inspector'; // Use our new inspector
4
+ import { uuid } from './db';
5
+ export function createColumn(builder, // CreateTableBuilder or AlterTableBuilder
6
+ columnDef, db) {
7
+ const { name, type } = columnDef;
8
+ let dataType = 'text'; // Default to text to satisfy type, will be overwritten
9
+ let constraints = [];
10
+ // Map Knex types to Kysely/SQL types
11
+ switch (type) {
12
+ case 'increments':
13
+ dataType = 'integer';
14
+ break;
15
+ case 'enum':
16
+ // Enum handling in Kysely is dialect constants usually or separate createType
17
+ // For simplicity, we might fall back to text with check constraint or native enum if created
18
+ // adhering to existing logic:
19
+ if (!columnDef.enumValues) {
20
+ throw new Error('Enum values are required');
21
+ }
22
+ // For now, treat as text/varchar for SQLite compatibility or handle specifically
23
+ // Kysely doesnt have a direct 'enum' method on column builder that works everywhere without createType
24
+ dataType = 'text';
25
+ constraints.push((col) => col.check(sql `${sql.ref(name)} in (${sql.join(columnDef.enumValues)})`));
26
+ break;
27
+ case 'uuid':
28
+ // Basic uuid handling
29
+ dataType = 'uuid';
30
+ // We might need dialect check here if we want to support SQLite specifically as text(36)
31
+ break;
32
+ default:
33
+ // Try passing raw strings
34
+ dataType = type;
35
+ }
36
+ // SQLite uuid callback override simulation
37
+ // if (['Client_SQLite3', ...].includes(...)) ... -> Kysely: db.introspection.getMetadata() ...
38
+ // For now assuming standard types or relying on driver translation
39
+ return builder.addColumn(name, dataType, (col) => {
40
+ let c = col;
41
+ // Apply collected constraints (like enum checks)
42
+ for (const constraint of constraints) {
43
+ c = constraint(c);
44
+ }
45
+ if (columnDef.unique)
46
+ c = c.unique();
47
+ if (columnDef.nullable === false)
48
+ c = c.notNull();
49
+ if (columnDef.default !== undefined) {
50
+ c = c.defaultTo(columnDef.default);
51
+ }
52
+ // Auto timestamps
53
+ if (columnDef.name === 'created_at' || columnDef.name === 'updated_at') {
54
+ c = c.defaultTo(sql `now()`);
55
+ }
56
+ if (columnDef.type === 'uuid') {
57
+ const adapter = db.getExecutor().adapter;
58
+ const adapterName = adapter.constructor.name;
59
+ if (adapterName.includes('Postgres')) {
60
+ c = c.defaultTo(sql `gen_random_uuid()`);
61
+ }
62
+ else if (adapterName.includes('Sqlite')) {
63
+ c = c.defaultTo(uuid);
64
+ }
65
+ }
66
+ if (columnDef.type === 'increments') {
67
+ c = c.autoIncrement();
68
+ }
69
+ if (columnDef.primary)
70
+ c = c.primaryKey();
71
+ if (columnDef.foreignKeys) {
72
+ c = c.references(`${columnDef.foreignKeys.references.tableName}.${columnDef.foreignKeys.references.columnName}`);
73
+ }
74
+ return c;
75
+ });
76
+ }
77
+ // Helper function to check for foreign keys
78
+ async function dropExistingForeignKeys(db, tableName, columnName) {
79
+ const inspector = new DBInspector(db);
80
+ const tableInfo = await inspector.getTableInfo(tableName);
81
+ // Find FKs where the *source* column is the one we are modifying
82
+ // The inspector returns FKs for the table, showing which column points to what.
83
+ const fks = tableInfo.foreignKeys.filter((fk) => fk.column === columnName);
84
+ for (const fk of fks) {
85
+ if (fk.constraintName) {
86
+ await db.schema
87
+ .alterTable(tableName)
88
+ .dropConstraint(fk.constraintName)
89
+ .execute();
90
+ }
91
+ else {
92
+ console.warn(`Could not drop FK for ${tableName}.${columnName} because constraint name is missing.`);
93
+ }
94
+ }
95
+ }
96
+ // Update column function using drop and recreate approach
97
+ export async function updateColumn(db, tableName, columnDef, trx) {
98
+ // Use transaction if provided, otherwise use the db instance
99
+ const executor = trx || db;
100
+ // 1. Check and drop existing FKs
101
+ // We use the 'db' instance for inspection even if inside a transaction for reading metadata if needed,
102
+ // but better to use executor if inspector supported it. Inspector currently takes 'Kysely<any>'.
103
+ // If 'trx' is passed, we might face issues if inspector expects Kysely instance.
104
+ // Ideally DBInspector should accept Kysely | Transaction.
105
+ // For now, we use 'db' for inspection as schema read usually doesn't need to be in the same trx unless strictly isolatedDDL.
106
+ await dropExistingForeignKeys(db, tableName, columnDef.currentName);
107
+ // 2. Drop existing column
108
+ await executor.schema
109
+ .alterTable(tableName)
110
+ .dropColumn(columnDef.currentName)
111
+ .execute();
112
+ // 3. Recreate column
113
+ let alterBuilder = executor.schema.alterTable(tableName);
114
+ // We need to map UpdateColumnDefinition to ColumnDefinition for createColumn
115
+ const newColDef = {
116
+ name: columnDef.newName || columnDef.currentName,
117
+ type: columnDef.type || columnDef.currentType,
118
+ nullable: columnDef.nullable ?? true,
119
+ primary: columnDef.primary,
120
+ unique: columnDef.unique,
121
+ foreignKeys: columnDef.foreignKeys,
122
+ default: columnDef.default,
123
+ enumValues: undefined, // Not present in UpdateColumnDefinition?
124
+ };
125
+ createColumn(alterBuilder, newColDef, db).execute();
126
+ }
127
+ //# sourceMappingURL=column-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-utils.js","sourceRoot":"","sources":["../../../src/utils/column-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const uuid: import("kysely").RawBuilder<unknown>;
2
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../src/utils/db.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,sCAAmP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { sql } from 'kysely';
2
+ export const uuid = sql `(lower(hex(randomblob(4))) || '-' || lower(hex(randomblob(2))) || '-4' || substr(lower(hex(randomblob(2))),2) || '-' || substr('89ab',abs(random()) % 4 + 1, 1) || substr(lower(hex(randomblob(2))),2) || '-' || lower(hex(randomblob(6))))`;
3
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/utils/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAE7B,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,CAAA,6OAA6O,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { type Kysely } from 'kysely';
2
+ export interface ColumnInfo {
3
+ name: string;
4
+ defaultValue: any;
5
+ dataType: string;
6
+ isNullable: boolean;
7
+ isPrimaryKey: boolean;
8
+ hasAutoIncrement: boolean;
9
+ foreignKeyReference?: {
10
+ table: string;
11
+ column: string;
12
+ };
13
+ }
14
+ export interface ForeignKeyInfo {
15
+ table: string;
16
+ column: string;
17
+ foreignTable: string;
18
+ foreignColumn: string;
19
+ constraintName?: string;
20
+ onDelete?: string;
21
+ onUpdate?: string;
22
+ }
23
+ export interface TableInfo {
24
+ columns: ColumnInfo[];
25
+ foreignKeys: ForeignKeyInfo[];
26
+ }
27
+ export interface DatabaseSchema {
28
+ [tableName: string]: TableInfo;
29
+ }
30
+ export declare class DBInspector {
31
+ private db;
32
+ constructor(db: Kysely<any>);
33
+ private getDialect;
34
+ getTables(): Promise<string[]>;
35
+ hasTable(tableName: string): Promise<boolean>;
36
+ getTableInfo(tableName: string): Promise<TableInfo>;
37
+ getDatabaseSchema(excludedTables: string[]): Promise<DatabaseSchema>;
38
+ }
39
+ //# sourceMappingURL=inspector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../../src/utils/inspector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAO,MAAM,QAAQ,CAAC;AAE1C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,GAAG,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,WAAW,EAAE,cAAc,EAAE,CAAC;CAE/B;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,qBAAa,WAAW;IACV,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAEnC,OAAO,CAAC,UAAU;IAYZ,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAK9B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA4B7C,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA8HnD,iBAAiB,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;CAW3E"}
@@ -0,0 +1,160 @@
1
+ import { sql } from 'kysely';
2
+ export class DBInspector {
3
+ constructor(db) {
4
+ this.db = db;
5
+ }
6
+ getDialect() {
7
+ const adapter = this.db.getExecutor().adapter;
8
+ // Check adapter name or class
9
+ // Kysely adapters: PostgresAdapter, SqliteAdapter
10
+ const name = adapter.constructor.name;
11
+ if (name.includes('Postgres'))
12
+ return 'postgres';
13
+ if (name.includes('Sqlite'))
14
+ return 'sqlite';
15
+ // Fallback check if class name is minified or different
16
+ // We can check supportsTransactionalDdl as a heuristic? No.
17
+ return 'unknown';
18
+ }
19
+ async getTables() {
20
+ const tables = await this.db.introspection.getTables();
21
+ return tables.map((t) => t.name);
22
+ }
23
+ async hasTable(tableName) {
24
+ const dialect = this.getDialect();
25
+ try {
26
+ if (dialect === 'postgres') {
27
+ const result = await sql `
28
+ SELECT EXISTS (
29
+ SELECT FROM information_schema.tables
30
+ WHERE table_name = ${tableName}
31
+ ) as "exists"
32
+ `.execute(this.db);
33
+ return !!result.rows[0]?.exists;
34
+ }
35
+ else if (dialect === 'sqlite') {
36
+ const result = await sql `
37
+ SELECT name FROM sqlite_master
38
+ WHERE type='table' AND name=${tableName}
39
+ `.execute(this.db);
40
+ return result.rows.length > 0;
41
+ }
42
+ }
43
+ catch (e) {
44
+ console.warn(`Failed to check table existence for ${tableName}:`, e);
45
+ }
46
+ // Fallback to introspection if optimized check fails
47
+ const tables = await this.db.introspection.getTables();
48
+ return tables.some((t) => t.name === tableName);
49
+ }
50
+ async getTableInfo(tableName) {
51
+ const tables = await this.db.introspection.getTables();
52
+ const tableMetadata = tables.find((t) => t.name === tableName);
53
+ if (!tableMetadata) {
54
+ throw new Error(`Table ${tableName} not found`);
55
+ }
56
+ const dialect = this.getDialect();
57
+ let primaryKeys = [];
58
+ let foreignKeys = [];
59
+ if (dialect === 'postgres') {
60
+ try {
61
+ // Get Primary Keys
62
+ const pkResult = await sql `
63
+ SELECT kcu.column_name
64
+ FROM information_schema.key_column_usage kcu
65
+ JOIN information_schema.table_constraints tc ON kcu.constraint_name = tc.constraint_name
66
+ WHERE kcu.table_name = ${tableName} AND tc.constraint_type = 'PRIMARY KEY'
67
+ `.execute(this.db);
68
+ primaryKeys = pkResult.rows.map((r) => r.column_name);
69
+ // Get Foreign Keys
70
+ const fkResult = await sql `
71
+ SELECT
72
+ kcu.column_name,
73
+ ccu.table_name AS foreign_table_name,
74
+ ccu.column_name AS foreign_column_name,
75
+ tc.constraint_name
76
+ FROM information_schema.table_constraints AS tc
77
+ JOIN information_schema.key_column_usage AS kcu
78
+ ON tc.constraint_name = kcu.constraint_name
79
+ AND tc.table_schema = kcu.table_schema
80
+ JOIN information_schema.constraint_column_usage AS ccu
81
+ ON ccu.constraint_name = tc.constraint_name
82
+ AND ccu.table_schema = tc.table_schema
83
+ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = ${tableName}
84
+ `.execute(this.db);
85
+ foreignKeys = fkResult.rows.map((r) => ({
86
+ table: tableName,
87
+ column: r.column_name,
88
+ foreignTable: r.foreign_table_name,
89
+ foreignColumn: r.foreign_column_name,
90
+ constraintName: r.constraint_name,
91
+ }));
92
+ }
93
+ catch (e) {
94
+ console.warn(`Failed to inspect Postgres constraints for ${tableName}:`, e);
95
+ }
96
+ }
97
+ else if (dialect === 'sqlite') {
98
+ try {
99
+ // Get Primary Keys
100
+ // PRAGMA table_info returns: cid, name, type, notnull, dflt_value, pk
101
+ const pkResult = await sql `
102
+ PRAGMA table_info(${sql.table(tableName)})
103
+ `.execute(this.db);
104
+ primaryKeys = pkResult.rows.filter((r) => r.pk > 0).map((r) => r.name);
105
+ // Get Foreign Keys
106
+ // PRAGMA foreign_key_list returns: id, seq, table, from, to, on_update, on_delete, match
107
+ const fkResult = await sql `
108
+ PRAGMA foreign_key_list(${sql.table(tableName)})
109
+ `.execute(this.db);
110
+ // SQLite foreign_key_list 'table' is the foreign table
111
+ // 'from' is the column in current table, 'to' is column in foreign table
112
+ foreignKeys = fkResult.rows.map((r) => ({
113
+ table: tableName,
114
+ column: r.from,
115
+ foreignTable: r.table,
116
+ foreignColumn: r.to,
117
+ onUpdate: r.on_update,
118
+ onDelete: r.on_delete,
119
+ }));
120
+ }
121
+ catch (e) {
122
+ console.warn(`Failed to inspect SQLite constraints for ${tableName}:`, e);
123
+ }
124
+ }
125
+ const columns = tableMetadata.columns.map((col) => {
126
+ const isPk = primaryKeys.includes(col.name);
127
+ // Find generic FK info if exists
128
+ const fk = foreignKeys.find((f) => f.column === col.name);
129
+ return {
130
+ name: col.name,
131
+ defaultValue: col.defaultValue,
132
+ dataType: col.dataType,
133
+ isNullable: col.isNullable,
134
+ isPrimaryKey: isPk,
135
+ hasAutoIncrement: col.isAutoIncrementing,
136
+ foreignKeyReference: fk
137
+ ? {
138
+ table: fk.foreignTable,
139
+ column: fk.foreignColumn,
140
+ }
141
+ : undefined,
142
+ };
143
+ });
144
+ return {
145
+ columns,
146
+ foreignKeys,
147
+ //indexes,
148
+ };
149
+ }
150
+ async getDatabaseSchema(excludedTables) {
151
+ let tables = await this.getTables();
152
+ tables = tables.filter((t) => !excludedTables.includes(t));
153
+ const schema = {};
154
+ for (const table of tables) {
155
+ schema[table] = await this.getTableInfo(table);
156
+ }
157
+ return schema;
158
+ }
159
+ }
160
+ //# sourceMappingURL=inspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspector.js","sourceRoot":"","sources":["../../../src/utils/inspector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,GAAG,EAAE,MAAM,QAAQ,CAAC;AAmC1C,MAAM,OAAO,WAAW;IACtB,YAAoB,EAAe;QAAf,OAAE,GAAF,EAAE,CAAa;IAAG,CAAC;IAE/B,UAAU;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;QAC9C,8BAA8B;QAC9B,kDAAkD;QAClD,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;QACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,OAAO,UAAU,CAAC;QACjD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,QAAQ,CAAC;QAC7C,wDAAwD;QACxD,4DAA4D;QAC5D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QACvD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAiB;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAElC,IAAI,CAAC;YACH,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAqB;;;iCAGpB,SAAS;;SAEjC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACnB,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;YAClC,CAAC;iBAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAkB;;wCAEV,SAAS;SACxC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACnB,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,uCAAuC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC;QACvE,CAAC;QAED,qDAAqD;QACrD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QACvD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAAiB;QAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QACvD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAE/D,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,SAAS,SAAS,YAAY,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,WAAW,GAAa,EAAE,CAAC;QAC/B,IAAI,WAAW,GAAqB,EAAE,CAAC;QAEvC,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,mBAAmB;gBACnB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAyB;;;;mCAIxB,SAAS;SACnC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACnB,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBAEtD,mBAAmB;gBACnB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAKxB;;;;;;;;;;;;;yEAa+D,SAAS;SACzE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEnB,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACtC,KAAK,EAAE,SAAS;oBAChB,MAAM,EAAE,CAAC,CAAC,WAAW;oBACrB,YAAY,EAAE,CAAC,CAAC,kBAAkB;oBAClC,aAAa,EAAE,CAAC,CAAC,mBAAmB;oBACpC,cAAc,EAAE,CAAC,CAAC,eAAe;iBAClC,CAAC,CAAC,CAAC;YACN,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CACV,8CAA8C,SAAS,GAAG,EAC1D,CAAC,CACF,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,mBAAmB;gBACnB,sEAAsE;gBACtE,MAAM,QAAQ,GAAG,MAAM,GAAG,CAA8B;8BAClC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;SACzC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACnB,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAEvE,mBAAmB;gBACnB,yFAAyF;gBACzF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAMxB;oCAC0B,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;SAC/C,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEnB,uDAAuD;gBACvD,yEAAyE;gBACzE,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACtC,KAAK,EAAE,SAAS;oBAChB,MAAM,EAAE,CAAC,CAAC,IAAI;oBACd,YAAY,EAAE,CAAC,CAAC,KAAK;oBACrB,aAAa,EAAE,CAAC,CAAC,EAAE;oBACnB,QAAQ,EAAE,CAAC,CAAC,SAAS;oBACrB,QAAQ,EAAE,CAAC,CAAC,SAAS;iBACtB,CAAC,CAAC,CAAC;YACN,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CACV,4CAA4C,SAAS,GAAG,EACxD,CAAC,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAiB,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9D,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAE5C,iCAAiC;YACjC,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;YAE1D,OAAO;gBACL,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,YAAY,EAAG,GAAW,CAAC,YAAY;gBACvC,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,YAAY,EAAE,IAAI;gBAClB,gBAAgB,EAAE,GAAG,CAAC,kBAAkB;gBACxC,mBAAmB,EAAE,EAAE;oBACrB,CAAC,CAAC;wBACE,KAAK,EAAE,EAAE,CAAC,YAAY;wBACtB,MAAM,EAAE,EAAE,CAAC,aAAa;qBACzB;oBACH,CAAC,CAAC,SAAS;aACd,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,OAAO;YACP,WAAW;YACX,UAAU;SACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,cAAwB;QAC9C,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAmB,EAAE,CAAC;QAElC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { PermissionInitializationReport, TablePermissions } from '../types';
2
+ import { PermissionService } from '../permissionService';
3
+ import { DBInspector } from './inspector';
4
+ /**
5
+ * Initializes permissions for all tables in the database
6
+ * @param permissionService Permission service instance
7
+ * @param dbInspector Database inspector instance
8
+ * @param excludedTables List of tables to exclude from initialization
9
+ * @param defaultPermissions Default permissions to apply
10
+ * @param reportPath Path where to save the report file
11
+ * @param onComplete Callback function to call when initialization is complete
12
+ */
13
+ import type { Kysely } from 'kysely';
14
+ export declare function initializePermissions(db: Kysely<any>, permissionService: PermissionService, dbInspector: DBInspector, excludedTables: string[], defaultPermissions: TablePermissions, reportPath?: string, onComplete?: (report: PermissionInitializationReport) => void): Promise<void>;
15
+ //# sourceMappingURL=permission-initializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-initializer.d.ts","sourceRoot":"","sources":["../../../src/utils/permission-initializer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,8BAA8B,EAC9B,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EACf,iBAAiB,EAAE,iBAAiB,EACpC,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,MAAM,EAAE,EACxB,kBAAkB,EAAE,gBAAgB,EACpC,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,8BAA8B,KAAK,IAAI,GAC5D,OAAO,CAAC,IAAI,CAAC,CAqFf"}