@hedystia/db 2.0.9 → 2.0.10

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.
@@ -0,0 +1,286 @@
1
+ import { __esmMin } from "../_virtual/_rolldown/runtime.mjs";
2
+ import { DriverError, init_errors } from "../errors.mjs";
3
+ import { BaseDriver, init_driver } from "./driver.mjs";
4
+ //#region src/drivers/s3.ts
5
+ var S3Driver;
6
+ var init_s3 = __esmMin((() => {
7
+ init_errors();
8
+ init_driver();
9
+ S3Driver = class extends BaseDriver {
10
+ config;
11
+ data = /* @__PURE__ */ new Map();
12
+ client = null;
13
+ constructor(config) {
14
+ super();
15
+ this.config = config;
16
+ }
17
+ getKey(tableName) {
18
+ return `${this.config.prefix ? `${this.config.prefix}/` : ""}${tableName}.json`;
19
+ }
20
+ async connect() {
21
+ if (this.connected) return;
22
+ try {
23
+ const { S3Client, HeadBucketCommand } = await import("@aws-sdk/client-s3");
24
+ const clientConfig = {};
25
+ if (this.config.region) clientConfig.region = this.config.region;
26
+ if (this.config.endpoint) {
27
+ clientConfig.endpoint = this.config.endpoint;
28
+ clientConfig.forcePathStyle = true;
29
+ }
30
+ if (this.config.accessKeyId && this.config.secretAccessKey) clientConfig.credentials = {
31
+ accessKeyId: this.config.accessKeyId,
32
+ secretAccessKey: this.config.secretAccessKey
33
+ };
34
+ this.client = new S3Client(clientConfig);
35
+ try {
36
+ await this.client.send(new HeadBucketCommand({ Bucket: this.config.bucket }));
37
+ } catch (err) {
38
+ if (err.name === "NotFound" || err.$metadata?.httpStatusCode === 404) {
39
+ const { CreateBucketCommand } = await import("@aws-sdk/client-s3");
40
+ await this.client.send(new CreateBucketCommand({ Bucket: this.config.bucket }));
41
+ } else if (err.$metadata?.httpStatusCode !== 200) throw err;
42
+ }
43
+ await this.loadAll();
44
+ this.connected = true;
45
+ } catch (err) {
46
+ throw new DriverError(`Failed to connect to S3: ${err.message}`);
47
+ }
48
+ }
49
+ async disconnect() {
50
+ await this.flushAll();
51
+ this.data.clear();
52
+ this.client = null;
53
+ this.connected = false;
54
+ }
55
+ async execute(sql, params = []) {
56
+ return this.executeParsed(sql, params);
57
+ }
58
+ async query(sql, params = []) {
59
+ const result = this.executeParsed(sql, params);
60
+ return Array.isArray(result) ? result : [];
61
+ }
62
+ async tableExists(name) {
63
+ return this.data.has(name);
64
+ }
65
+ async getTableColumns(name) {
66
+ const table = this.data.get(name);
67
+ if (!table) return [];
68
+ return Object.values(table.meta.columns);
69
+ }
70
+ async createTable(meta) {
71
+ if (this.data.has(meta.name)) return;
72
+ this.data.set(meta.name, {
73
+ rows: [],
74
+ autoIncrementId: 0,
75
+ meta: { columns: [...meta.columns] }
76
+ });
77
+ await this.flush(meta.name);
78
+ }
79
+ async dropTable(name) {
80
+ this.data.delete(name);
81
+ try {
82
+ const { DeleteObjectCommand } = await import("@aws-sdk/client-s3");
83
+ await this.client.send(new DeleteObjectCommand({
84
+ Bucket: this.config.bucket,
85
+ Key: this.getKey(name)
86
+ }));
87
+ } catch {}
88
+ }
89
+ async addColumn(table, column) {
90
+ const tableData = this.data.get(table);
91
+ if (!tableData) throw new DriverError(`Table "${table}" does not exist`);
92
+ tableData.meta.columns.push(column);
93
+ for (const row of tableData.rows) row[column.name] = column.defaultValue ?? null;
94
+ await this.flush(table);
95
+ }
96
+ async dropColumn(table, name) {
97
+ const tableData = this.data.get(table);
98
+ if (!tableData) throw new DriverError(`Table "${table}" does not exist`);
99
+ tableData.meta.columns = tableData.meta.columns.filter((c) => c.name !== name);
100
+ for (const row of tableData.rows) delete row[name];
101
+ await this.flush(table);
102
+ }
103
+ async renameColumn(table, oldName, newName) {
104
+ const tableData = this.data.get(table);
105
+ if (!tableData) throw new DriverError(`Table "${table}" does not exist`);
106
+ const col = tableData.meta.columns.find((c) => c.name === oldName);
107
+ if (col) col.name = newName;
108
+ for (const row of tableData.rows) {
109
+ row[newName] = row[oldName];
110
+ delete row[oldName];
111
+ }
112
+ await this.flush(table);
113
+ }
114
+ async transaction(fn) {
115
+ const snapshot = /* @__PURE__ */ new Map();
116
+ for (const [name, tableData] of this.data) snapshot.set(name, JSON.stringify(tableData));
117
+ try {
118
+ const result = await fn();
119
+ await this.flushAll();
120
+ return result;
121
+ } catch (err) {
122
+ for (const [name, json] of snapshot) this.data.set(name, JSON.parse(json));
123
+ throw err;
124
+ }
125
+ }
126
+ async getAllTableColumns() {
127
+ const result = {};
128
+ for (const [name, tableData] of this.data) result[name] = [...tableData.meta.columns];
129
+ return result;
130
+ }
131
+ getTableData(tableName) {
132
+ return this.data.get(tableName);
133
+ }
134
+ insertRow(tableName, row) {
135
+ const tableData = this.data.get(tableName);
136
+ if (!tableData) throw new DriverError(`Table "${tableName}" does not exist`);
137
+ let pkCol = null;
138
+ for (const col of tableData.meta.columns) if (col.autoIncrement) {
139
+ pkCol = col.name;
140
+ break;
141
+ }
142
+ if (pkCol && row[pkCol] === void 0) {
143
+ tableData.autoIncrementId++;
144
+ row[pkCol] = tableData.autoIncrementId;
145
+ }
146
+ tableData.rows.push({ ...row });
147
+ this.flush(tableName);
148
+ return pkCol ? row[pkCol] : 0;
149
+ }
150
+ findRows(tableName, filter) {
151
+ const tableData = this.data.get(tableName);
152
+ if (!tableData) return [];
153
+ if (!filter) return tableData.rows.map((r) => ({ ...r }));
154
+ return tableData.rows.filter(filter).map((r) => ({ ...r }));
155
+ }
156
+ updateRows(tableName, filter, data) {
157
+ const tableData = this.data.get(tableName);
158
+ if (!tableData) return 0;
159
+ let count = 0;
160
+ for (const row of tableData.rows) if (filter(row)) {
161
+ Object.assign(row, data);
162
+ count++;
163
+ }
164
+ if (count > 0) this.flush(tableName);
165
+ return count;
166
+ }
167
+ deleteRows(tableName, filter) {
168
+ const tableData = this.data.get(tableName);
169
+ if (!tableData) return 0;
170
+ const before = tableData.rows.length;
171
+ tableData.rows = tableData.rows.filter((r) => !filter(r));
172
+ const deleted = before - tableData.rows.length;
173
+ if (deleted > 0) this.flush(tableName);
174
+ return deleted;
175
+ }
176
+ truncateTable(tableName) {
177
+ const tableData = this.data.get(tableName);
178
+ if (tableData) {
179
+ tableData.rows = [];
180
+ tableData.autoIncrementId = 0;
181
+ this.flush(tableName);
182
+ }
183
+ }
184
+ countRows(tableName, filter) {
185
+ const tableData = this.data.get(tableName);
186
+ if (!tableData) return 0;
187
+ if (!filter) return tableData.rows.length;
188
+ return tableData.rows.filter(filter).length;
189
+ }
190
+ async loadAll() {
191
+ try {
192
+ const { ListObjectsV2Command, GetObjectCommand } = await import("@aws-sdk/client-s3");
193
+ const prefix = this.config.prefix ? `${this.config.prefix}/` : "";
194
+ const response = await this.client.send(new ListObjectsV2Command({
195
+ Bucket: this.config.bucket,
196
+ Prefix: prefix
197
+ }));
198
+ if (response.Contents) {
199
+ for (const obj of response.Contents) if (obj.Key?.endsWith(".json")) {
200
+ const tableName = obj.Key.replace(prefix, "").replace(".json", "");
201
+ try {
202
+ const body = await (await this.client.send(new GetObjectCommand({
203
+ Bucket: this.config.bucket,
204
+ Key: obj.Key
205
+ }))).Body?.transformToString();
206
+ if (body) this.data.set(tableName, JSON.parse(body));
207
+ } catch {}
208
+ }
209
+ }
210
+ } catch {}
211
+ }
212
+ async flush(tableName) {
213
+ const tableData = this.data.get(tableName);
214
+ if (!tableData || !this.client) return;
215
+ try {
216
+ const { PutObjectCommand } = await import("@aws-sdk/client-s3");
217
+ await this.client.send(new PutObjectCommand({
218
+ Bucket: this.config.bucket,
219
+ Key: this.getKey(tableName),
220
+ Body: JSON.stringify(tableData),
221
+ ContentType: "application/json"
222
+ }));
223
+ } catch {}
224
+ }
225
+ async flushAll() {
226
+ for (const [name] of this.data) await this.flush(name);
227
+ }
228
+ executeParsed(sql, params) {
229
+ const trimmed = sql.trim().toUpperCase();
230
+ if (trimmed.startsWith("CREATE TABLE")) return {
231
+ insertId: 0,
232
+ affectedRows: 0
233
+ };
234
+ if (trimmed.startsWith("DROP TABLE")) {
235
+ const match = sql.match(/DROP\s+TABLE\s+(?:IF\s+EXISTS\s+)?`?(\w+)`?/i);
236
+ if (match?.[1]) this.data.delete(match[1]);
237
+ return {
238
+ insertId: 0,
239
+ affectedRows: 0
240
+ };
241
+ }
242
+ if (trimmed.startsWith("SELECT")) {
243
+ const tableMatch = sql.match(/FROM\s+`?(\w+)`?/i);
244
+ if (!tableMatch) return [];
245
+ const tableName = tableMatch[1];
246
+ if (!tableName) return [];
247
+ return this.findRows(tableName);
248
+ }
249
+ if (trimmed.startsWith("INSERT")) {
250
+ const tableMatch = sql.match(/INTO\s+`?(\w+)`?/i);
251
+ if (!tableMatch) return {
252
+ insertId: 0,
253
+ affectedRows: 0
254
+ };
255
+ const colMatch = sql.match(/\(([^)]+)\)\s+VALUES/i);
256
+ if (!colMatch) return {
257
+ insertId: 0,
258
+ affectedRows: 0
259
+ };
260
+ const cols = colMatch[1]?.split(",").map((c) => c.trim().replace(/`/g, ""));
261
+ if (!cols) return {
262
+ insertId: 0,
263
+ affectedRows: 0
264
+ };
265
+ const row = {};
266
+ for (let i = 0; i < cols.length; i++) {
267
+ const col = cols[i];
268
+ if (col) row[col] = params[i];
269
+ }
270
+ return {
271
+ insertId: this.insertRow(tableMatch[1], row),
272
+ affectedRows: 1
273
+ };
274
+ }
275
+ return {
276
+ insertId: 0,
277
+ affectedRows: 0
278
+ };
279
+ }
280
+ };
281
+ }));
282
+ //#endregion
283
+ init_s3();
284
+ export { S3Driver, init_s3 };
285
+
286
+ //# sourceMappingURL=s3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3.mjs","names":[],"sources":["../../src/drivers/s3.ts"],"sourcesContent":["import { DriverError } from \"../errors\";\nimport type { ColumnMetadata, S3ConnectionConfig, TableMetadata } from \"../types\";\nimport { BaseDriver } from \"./driver\";\n\ninterface S3TableData {\n rows: Record<string, unknown>[];\n autoIncrementId: number;\n meta: {\n columns: ColumnMetadata[];\n };\n}\n\n/**\n * S3-based database driver using JSON objects for storage\n */\nexport class S3Driver extends BaseDriver {\n private config: S3ConnectionConfig;\n private data = new Map<string, S3TableData>();\n private client: any = null;\n\n constructor(config: S3ConnectionConfig) {\n super();\n this.config = config;\n }\n\n private getKey(tableName: string): string {\n const prefix = this.config.prefix ? `${this.config.prefix}/` : \"\";\n return `${prefix}${tableName}.json`;\n }\n\n async connect(): Promise<void> {\n if (this.connected) {\n return;\n }\n\n try {\n const { S3Client, HeadBucketCommand } = await import(\"@aws-sdk/client-s3\");\n const clientConfig: any = {};\n if (this.config.region) {\n clientConfig.region = this.config.region;\n }\n if (this.config.endpoint) {\n clientConfig.endpoint = this.config.endpoint;\n clientConfig.forcePathStyle = true;\n }\n if (this.config.accessKeyId && this.config.secretAccessKey) {\n clientConfig.credentials = {\n accessKeyId: this.config.accessKeyId,\n secretAccessKey: this.config.secretAccessKey,\n };\n }\n this.client = new S3Client(clientConfig);\n\n try {\n await this.client.send(new HeadBucketCommand({ Bucket: this.config.bucket }));\n } catch (err: any) {\n if (err.name === \"NotFound\" || err.$metadata?.httpStatusCode === 404) {\n const { CreateBucketCommand } = await import(\"@aws-sdk/client-s3\");\n await this.client.send(new CreateBucketCommand({ Bucket: this.config.bucket }));\n } else if (err.$metadata?.httpStatusCode !== 200) {\n throw err;\n }\n }\n\n await this.loadAll();\n this.connected = true;\n } catch (err: any) {\n throw new DriverError(`Failed to connect to S3: ${err.message}`);\n }\n }\n\n async disconnect(): Promise<void> {\n await this.flushAll();\n this.data.clear();\n this.client = null;\n this.connected = false;\n }\n\n async execute(sql: string, params: unknown[] = []): Promise<any> {\n return this.executeParsed(sql, params);\n }\n\n async query(sql: string, params: unknown[] = []): Promise<any[]> {\n const result = this.executeParsed(sql, params);\n return Array.isArray(result) ? result : [];\n }\n\n async tableExists(name: string): Promise<boolean> {\n return this.data.has(name);\n }\n\n async getTableColumns(name: string): Promise<ColumnMetadata[]> {\n const table = this.data.get(name);\n if (!table) {\n return [];\n }\n return Object.values(table.meta.columns);\n }\n\n async createTable(meta: TableMetadata): Promise<void> {\n if (this.data.has(meta.name)) {\n return;\n }\n this.data.set(meta.name, {\n rows: [],\n autoIncrementId: 0,\n meta: { columns: [...meta.columns] },\n });\n await this.flush(meta.name);\n }\n\n async dropTable(name: string): Promise<void> {\n this.data.delete(name);\n try {\n const { DeleteObjectCommand } = await import(\"@aws-sdk/client-s3\");\n await this.client.send(\n new DeleteObjectCommand({\n Bucket: this.config.bucket,\n Key: this.getKey(name),\n }),\n );\n } catch {}\n }\n\n async addColumn(table: string, column: ColumnMetadata): Promise<void> {\n const tableData = this.data.get(table);\n if (!tableData) {\n throw new DriverError(`Table \"${table}\" does not exist`);\n }\n tableData.meta.columns.push(column);\n for (const row of tableData.rows) {\n row[column.name] = column.defaultValue ?? null;\n }\n await this.flush(table);\n }\n\n async dropColumn(table: string, name: string): Promise<void> {\n const tableData = this.data.get(table);\n if (!tableData) {\n throw new DriverError(`Table \"${table}\" does not exist`);\n }\n tableData.meta.columns = tableData.meta.columns.filter((c) => c.name !== name);\n for (const row of tableData.rows) {\n delete row[name];\n }\n await this.flush(table);\n }\n\n async renameColumn(table: string, oldName: string, newName: string): Promise<void> {\n const tableData = this.data.get(table);\n if (!tableData) {\n throw new DriverError(`Table \"${table}\" does not exist`);\n }\n const col = tableData.meta.columns.find((c) => c.name === oldName);\n if (col) {\n col.name = newName;\n }\n for (const row of tableData.rows) {\n row[newName] = row[oldName];\n delete row[oldName];\n }\n await this.flush(table);\n }\n\n async transaction<T>(fn: () => Promise<T>): Promise<T> {\n const snapshot = new Map<string, string>();\n for (const [name, tableData] of this.data) {\n snapshot.set(name, JSON.stringify(tableData));\n }\n try {\n const result = await fn();\n await this.flushAll();\n return result;\n } catch (err) {\n for (const [name, json] of snapshot) {\n this.data.set(name, JSON.parse(json));\n }\n throw err;\n }\n }\n\n async getAllTableColumns(): Promise<Record<string, ColumnMetadata[]>> {\n const result: Record<string, ColumnMetadata[]> = {};\n for (const [name, tableData] of this.data) {\n result[name] = [...tableData.meta.columns];\n }\n return result;\n }\n\n getTableData(tableName: string): S3TableData | undefined {\n return this.data.get(tableName);\n }\n\n insertRow(tableName: string, row: Record<string, unknown>): number {\n const tableData = this.data.get(tableName);\n if (!tableData) {\n throw new DriverError(`Table \"${tableName}\" does not exist`);\n }\n let pkCol: string | null = null;\n for (const col of tableData.meta.columns) {\n if (col.autoIncrement) {\n pkCol = col.name;\n break;\n }\n }\n if (pkCol && row[pkCol] === undefined) {\n tableData.autoIncrementId++;\n row[pkCol] = tableData.autoIncrementId;\n }\n tableData.rows.push({ ...row });\n this.flush(tableName);\n return pkCol ? (row[pkCol] as number) : 0;\n }\n\n findRows(\n tableName: string,\n filter?: (row: Record<string, unknown>) => boolean,\n ): Record<string, unknown>[] {\n const tableData = this.data.get(tableName);\n if (!tableData) {\n return [];\n }\n if (!filter) {\n return tableData.rows.map((r) => ({ ...r }));\n }\n return tableData.rows.filter(filter).map((r) => ({ ...r }));\n }\n\n updateRows(\n tableName: string,\n filter: (row: Record<string, unknown>) => boolean,\n data: Record<string, unknown>,\n ): number {\n const tableData = this.data.get(tableName);\n if (!tableData) {\n return 0;\n }\n let count = 0;\n for (const row of tableData.rows) {\n if (filter(row)) {\n Object.assign(row, data);\n count++;\n }\n }\n if (count > 0) {\n this.flush(tableName);\n }\n return count;\n }\n\n deleteRows(tableName: string, filter: (row: Record<string, unknown>) => boolean): number {\n const tableData = this.data.get(tableName);\n if (!tableData) {\n return 0;\n }\n const before = tableData.rows.length;\n tableData.rows = tableData.rows.filter((r) => !filter(r));\n const deleted = before - tableData.rows.length;\n if (deleted > 0) {\n this.flush(tableName);\n }\n return deleted;\n }\n\n truncateTable(tableName: string): void {\n const tableData = this.data.get(tableName);\n if (tableData) {\n tableData.rows = [];\n tableData.autoIncrementId = 0;\n this.flush(tableName);\n }\n }\n\n countRows(tableName: string, filter?: (row: Record<string, unknown>) => boolean): number {\n const tableData = this.data.get(tableName);\n if (!tableData) {\n return 0;\n }\n if (!filter) {\n return tableData.rows.length;\n }\n return tableData.rows.filter(filter).length;\n }\n\n private async loadAll(): Promise<void> {\n try {\n const { ListObjectsV2Command, GetObjectCommand } = await import(\"@aws-sdk/client-s3\");\n const prefix = this.config.prefix ? `${this.config.prefix}/` : \"\";\n const response = await this.client.send(\n new ListObjectsV2Command({\n Bucket: this.config.bucket,\n Prefix: prefix,\n }),\n );\n\n if (response.Contents) {\n for (const obj of response.Contents) {\n if (obj.Key?.endsWith(\".json\")) {\n const tableName = obj.Key.replace(prefix, \"\").replace(\".json\", \"\");\n try {\n const getResponse = await this.client.send(\n new GetObjectCommand({\n Bucket: this.config.bucket,\n Key: obj.Key,\n }),\n );\n const body = await getResponse.Body?.transformToString();\n if (body) {\n this.data.set(tableName, JSON.parse(body));\n }\n } catch {}\n }\n }\n }\n } catch {}\n }\n\n private async flush(tableName: string): Promise<void> {\n const tableData = this.data.get(tableName);\n if (!tableData || !this.client) {\n return;\n }\n try {\n const { PutObjectCommand } = await import(\"@aws-sdk/client-s3\");\n await this.client.send(\n new PutObjectCommand({\n Bucket: this.config.bucket,\n Key: this.getKey(tableName),\n Body: JSON.stringify(tableData),\n ContentType: \"application/json\",\n }),\n );\n } catch {}\n }\n\n private async flushAll(): Promise<void> {\n for (const [name] of this.data) {\n await this.flush(name);\n }\n }\n\n private executeParsed(sql: string, params: unknown[]): any {\n const trimmed = sql.trim().toUpperCase();\n if (trimmed.startsWith(\"CREATE TABLE\")) {\n return { insertId: 0, affectedRows: 0 };\n }\n if (trimmed.startsWith(\"DROP TABLE\")) {\n const match = sql.match(/DROP\\s+TABLE\\s+(?:IF\\s+EXISTS\\s+)?`?(\\w+)`?/i);\n if (match?.[1]) {\n this.data.delete(match[1]);\n }\n return { insertId: 0, affectedRows: 0 };\n }\n if (trimmed.startsWith(\"SELECT\")) {\n const tableMatch = sql.match(/FROM\\s+`?(\\w+)`?/i);\n if (!tableMatch) {\n return [];\n }\n const tableName = tableMatch[1];\n if (!tableName) {\n return [];\n }\n return this.findRows(tableName);\n }\n if (trimmed.startsWith(\"INSERT\")) {\n const tableMatch = sql.match(/INTO\\s+`?(\\w+)`?/i);\n if (!tableMatch) {\n return { insertId: 0, affectedRows: 0 };\n }\n const colMatch = sql.match(/\\(([^)]+)\\)\\s+VALUES/i);\n if (!colMatch) {\n return { insertId: 0, affectedRows: 0 };\n }\n const cols = colMatch[1]?.split(\",\").map((c) => c.trim().replace(/`/g, \"\"));\n if (!cols) {\n return { insertId: 0, affectedRows: 0 };\n }\n const row: Record<string, unknown> = {};\n for (let i = 0; i < cols.length; i++) {\n const col = cols[i];\n if (col) {\n row[col] = params[i];\n }\n }\n const id = this.insertRow(tableMatch[1]!, row);\n return { insertId: id, affectedRows: 1 };\n }\n return { insertId: 0, affectedRows: 0 };\n }\n}\n"],"mappings":";;;;;;cAAwC;cAEF;AAazB,YAAb,cAA8B,WAAW;EACvC;EACA,uBAAe,IAAI,KAA0B;EAC7C,SAAsB;EAEtB,YAAY,QAA4B;AACtC,UAAO;AACP,QAAK,SAAS;;EAGhB,OAAe,WAA2B;AAExC,UAAO,GADQ,KAAK,OAAO,SAAS,GAAG,KAAK,OAAO,OAAO,KAAK,KAC5C,UAAU;;EAG/B,MAAM,UAAyB;AAC7B,OAAI,KAAK,UACP;AAGF,OAAI;IACF,MAAM,EAAE,UAAU,sBAAsB,MAAM,OAAO;IACrD,MAAM,eAAoB,EAAE;AAC5B,QAAI,KAAK,OAAO,OACd,cAAa,SAAS,KAAK,OAAO;AAEpC,QAAI,KAAK,OAAO,UAAU;AACxB,kBAAa,WAAW,KAAK,OAAO;AACpC,kBAAa,iBAAiB;;AAEhC,QAAI,KAAK,OAAO,eAAe,KAAK,OAAO,gBACzC,cAAa,cAAc;KACzB,aAAa,KAAK,OAAO;KACzB,iBAAiB,KAAK,OAAO;KAC9B;AAEH,SAAK,SAAS,IAAI,SAAS,aAAa;AAExC,QAAI;AACF,WAAM,KAAK,OAAO,KAAK,IAAI,kBAAkB,EAAE,QAAQ,KAAK,OAAO,QAAQ,CAAC,CAAC;aACtE,KAAU;AACjB,SAAI,IAAI,SAAS,cAAc,IAAI,WAAW,mBAAmB,KAAK;MACpE,MAAM,EAAE,wBAAwB,MAAM,OAAO;AAC7C,YAAM,KAAK,OAAO,KAAK,IAAI,oBAAoB,EAAE,QAAQ,KAAK,OAAO,QAAQ,CAAC,CAAC;gBACtE,IAAI,WAAW,mBAAmB,IAC3C,OAAM;;AAIV,UAAM,KAAK,SAAS;AACpB,SAAK,YAAY;YACV,KAAU;AACjB,UAAM,IAAI,YAAY,4BAA4B,IAAI,UAAU;;;EAIpE,MAAM,aAA4B;AAChC,SAAM,KAAK,UAAU;AACrB,QAAK,KAAK,OAAO;AACjB,QAAK,SAAS;AACd,QAAK,YAAY;;EAGnB,MAAM,QAAQ,KAAa,SAAoB,EAAE,EAAgB;AAC/D,UAAO,KAAK,cAAc,KAAK,OAAO;;EAGxC,MAAM,MAAM,KAAa,SAAoB,EAAE,EAAkB;GAC/D,MAAM,SAAS,KAAK,cAAc,KAAK,OAAO;AAC9C,UAAO,MAAM,QAAQ,OAAO,GAAG,SAAS,EAAE;;EAG5C,MAAM,YAAY,MAAgC;AAChD,UAAO,KAAK,KAAK,IAAI,KAAK;;EAG5B,MAAM,gBAAgB,MAAyC;GAC7D,MAAM,QAAQ,KAAK,KAAK,IAAI,KAAK;AACjC,OAAI,CAAC,MACH,QAAO,EAAE;AAEX,UAAO,OAAO,OAAO,MAAM,KAAK,QAAQ;;EAG1C,MAAM,YAAY,MAAoC;AACpD,OAAI,KAAK,KAAK,IAAI,KAAK,KAAK,CAC1B;AAEF,QAAK,KAAK,IAAI,KAAK,MAAM;IACvB,MAAM,EAAE;IACR,iBAAiB;IACjB,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,QAAQ,EAAE;IACrC,CAAC;AACF,SAAM,KAAK,MAAM,KAAK,KAAK;;EAG7B,MAAM,UAAU,MAA6B;AAC3C,QAAK,KAAK,OAAO,KAAK;AACtB,OAAI;IACF,MAAM,EAAE,wBAAwB,MAAM,OAAO;AAC7C,UAAM,KAAK,OAAO,KAChB,IAAI,oBAAoB;KACtB,QAAQ,KAAK,OAAO;KACpB,KAAK,KAAK,OAAO,KAAK;KACvB,CAAC,CACH;WACK;;EAGV,MAAM,UAAU,OAAe,QAAuC;GACpE,MAAM,YAAY,KAAK,KAAK,IAAI,MAAM;AACtC,OAAI,CAAC,UACH,OAAM,IAAI,YAAY,UAAU,MAAM,kBAAkB;AAE1D,aAAU,KAAK,QAAQ,KAAK,OAAO;AACnC,QAAK,MAAM,OAAO,UAAU,KAC1B,KAAI,OAAO,QAAQ,OAAO,gBAAgB;AAE5C,SAAM,KAAK,MAAM,MAAM;;EAGzB,MAAM,WAAW,OAAe,MAA6B;GAC3D,MAAM,YAAY,KAAK,KAAK,IAAI,MAAM;AACtC,OAAI,CAAC,UACH,OAAM,IAAI,YAAY,UAAU,MAAM,kBAAkB;AAE1D,aAAU,KAAK,UAAU,UAAU,KAAK,QAAQ,QAAQ,MAAM,EAAE,SAAS,KAAK;AAC9E,QAAK,MAAM,OAAO,UAAU,KAC1B,QAAO,IAAI;AAEb,SAAM,KAAK,MAAM,MAAM;;EAGzB,MAAM,aAAa,OAAe,SAAiB,SAAgC;GACjF,MAAM,YAAY,KAAK,KAAK,IAAI,MAAM;AACtC,OAAI,CAAC,UACH,OAAM,IAAI,YAAY,UAAU,MAAM,kBAAkB;GAE1D,MAAM,MAAM,UAAU,KAAK,QAAQ,MAAM,MAAM,EAAE,SAAS,QAAQ;AAClE,OAAI,IACF,KAAI,OAAO;AAEb,QAAK,MAAM,OAAO,UAAU,MAAM;AAChC,QAAI,WAAW,IAAI;AACnB,WAAO,IAAI;;AAEb,SAAM,KAAK,MAAM,MAAM;;EAGzB,MAAM,YAAe,IAAkC;GACrD,MAAM,2BAAW,IAAI,KAAqB;AAC1C,QAAK,MAAM,CAAC,MAAM,cAAc,KAAK,KACnC,UAAS,IAAI,MAAM,KAAK,UAAU,UAAU,CAAC;AAE/C,OAAI;IACF,MAAM,SAAS,MAAM,IAAI;AACzB,UAAM,KAAK,UAAU;AACrB,WAAO;YACA,KAAK;AACZ,SAAK,MAAM,CAAC,MAAM,SAAS,SACzB,MAAK,KAAK,IAAI,MAAM,KAAK,MAAM,KAAK,CAAC;AAEvC,UAAM;;;EAIV,MAAM,qBAAgE;GACpE,MAAM,SAA2C,EAAE;AACnD,QAAK,MAAM,CAAC,MAAM,cAAc,KAAK,KACnC,QAAO,QAAQ,CAAC,GAAG,UAAU,KAAK,QAAQ;AAE5C,UAAO;;EAGT,aAAa,WAA4C;AACvD,UAAO,KAAK,KAAK,IAAI,UAAU;;EAGjC,UAAU,WAAmB,KAAsC;GACjE,MAAM,YAAY,KAAK,KAAK,IAAI,UAAU;AAC1C,OAAI,CAAC,UACH,OAAM,IAAI,YAAY,UAAU,UAAU,kBAAkB;GAE9D,IAAI,QAAuB;AAC3B,QAAK,MAAM,OAAO,UAAU,KAAK,QAC/B,KAAI,IAAI,eAAe;AACrB,YAAQ,IAAI;AACZ;;AAGJ,OAAI,SAAS,IAAI,WAAW,KAAA,GAAW;AACrC,cAAU;AACV,QAAI,SAAS,UAAU;;AAEzB,aAAU,KAAK,KAAK,EAAE,GAAG,KAAK,CAAC;AAC/B,QAAK,MAAM,UAAU;AACrB,UAAO,QAAS,IAAI,SAAoB;;EAG1C,SACE,WACA,QAC2B;GAC3B,MAAM,YAAY,KAAK,KAAK,IAAI,UAAU;AAC1C,OAAI,CAAC,UACH,QAAO,EAAE;AAEX,OAAI,CAAC,OACH,QAAO,UAAU,KAAK,KAAK,OAAO,EAAE,GAAG,GAAG,EAAE;AAE9C,UAAO,UAAU,KAAK,OAAO,OAAO,CAAC,KAAK,OAAO,EAAE,GAAG,GAAG,EAAE;;EAG7D,WACE,WACA,QACA,MACQ;GACR,MAAM,YAAY,KAAK,KAAK,IAAI,UAAU;AAC1C,OAAI,CAAC,UACH,QAAO;GAET,IAAI,QAAQ;AACZ,QAAK,MAAM,OAAO,UAAU,KAC1B,KAAI,OAAO,IAAI,EAAE;AACf,WAAO,OAAO,KAAK,KAAK;AACxB;;AAGJ,OAAI,QAAQ,EACV,MAAK,MAAM,UAAU;AAEvB,UAAO;;EAGT,WAAW,WAAmB,QAA2D;GACvF,MAAM,YAAY,KAAK,KAAK,IAAI,UAAU;AAC1C,OAAI,CAAC,UACH,QAAO;GAET,MAAM,SAAS,UAAU,KAAK;AAC9B,aAAU,OAAO,UAAU,KAAK,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;GACzD,MAAM,UAAU,SAAS,UAAU,KAAK;AACxC,OAAI,UAAU,EACZ,MAAK,MAAM,UAAU;AAEvB,UAAO;;EAGT,cAAc,WAAyB;GACrC,MAAM,YAAY,KAAK,KAAK,IAAI,UAAU;AAC1C,OAAI,WAAW;AACb,cAAU,OAAO,EAAE;AACnB,cAAU,kBAAkB;AAC5B,SAAK,MAAM,UAAU;;;EAIzB,UAAU,WAAmB,QAA4D;GACvF,MAAM,YAAY,KAAK,KAAK,IAAI,UAAU;AAC1C,OAAI,CAAC,UACH,QAAO;AAET,OAAI,CAAC,OACH,QAAO,UAAU,KAAK;AAExB,UAAO,UAAU,KAAK,OAAO,OAAO,CAAC;;EAGvC,MAAc,UAAyB;AACrC,OAAI;IACF,MAAM,EAAE,sBAAsB,qBAAqB,MAAM,OAAO;IAChE,MAAM,SAAS,KAAK,OAAO,SAAS,GAAG,KAAK,OAAO,OAAO,KAAK;IAC/D,MAAM,WAAW,MAAM,KAAK,OAAO,KACjC,IAAI,qBAAqB;KACvB,QAAQ,KAAK,OAAO;KACpB,QAAQ;KACT,CAAC,CACH;AAED,QAAI,SAAS;UACN,MAAM,OAAO,SAAS,SACzB,KAAI,IAAI,KAAK,SAAS,QAAQ,EAAE;MAC9B,MAAM,YAAY,IAAI,IAAI,QAAQ,QAAQ,GAAG,CAAC,QAAQ,SAAS,GAAG;AAClE,UAAI;OAOF,MAAM,OAAO,OANO,MAAM,KAAK,OAAO,KACpC,IAAI,iBAAiB;QACnB,QAAQ,KAAK,OAAO;QACpB,KAAK,IAAI;QACV,CAAC,CACH,EAC8B,MAAM,mBAAmB;AACxD,WAAI,KACF,MAAK,KAAK,IAAI,WAAW,KAAK,MAAM,KAAK,CAAC;cAEtC;;;WAIR;;EAGV,MAAc,MAAM,WAAkC;GACpD,MAAM,YAAY,KAAK,KAAK,IAAI,UAAU;AAC1C,OAAI,CAAC,aAAa,CAAC,KAAK,OACtB;AAEF,OAAI;IACF,MAAM,EAAE,qBAAqB,MAAM,OAAO;AAC1C,UAAM,KAAK,OAAO,KAChB,IAAI,iBAAiB;KACnB,QAAQ,KAAK,OAAO;KACpB,KAAK,KAAK,OAAO,UAAU;KAC3B,MAAM,KAAK,UAAU,UAAU;KAC/B,aAAa;KACd,CAAC,CACH;WACK;;EAGV,MAAc,WAA0B;AACtC,QAAK,MAAM,CAAC,SAAS,KAAK,KACxB,OAAM,KAAK,MAAM,KAAK;;EAI1B,cAAsB,KAAa,QAAwB;GACzD,MAAM,UAAU,IAAI,MAAM,CAAC,aAAa;AACxC,OAAI,QAAQ,WAAW,eAAe,CACpC,QAAO;IAAE,UAAU;IAAG,cAAc;IAAG;AAEzC,OAAI,QAAQ,WAAW,aAAa,EAAE;IACpC,MAAM,QAAQ,IAAI,MAAM,+CAA+C;AACvE,QAAI,QAAQ,GACV,MAAK,KAAK,OAAO,MAAM,GAAG;AAE5B,WAAO;KAAE,UAAU;KAAG,cAAc;KAAG;;AAEzC,OAAI,QAAQ,WAAW,SAAS,EAAE;IAChC,MAAM,aAAa,IAAI,MAAM,oBAAoB;AACjD,QAAI,CAAC,WACH,QAAO,EAAE;IAEX,MAAM,YAAY,WAAW;AAC7B,QAAI,CAAC,UACH,QAAO,EAAE;AAEX,WAAO,KAAK,SAAS,UAAU;;AAEjC,OAAI,QAAQ,WAAW,SAAS,EAAE;IAChC,MAAM,aAAa,IAAI,MAAM,oBAAoB;AACjD,QAAI,CAAC,WACH,QAAO;KAAE,UAAU;KAAG,cAAc;KAAG;IAEzC,MAAM,WAAW,IAAI,MAAM,wBAAwB;AACnD,QAAI,CAAC,SACH,QAAO;KAAE,UAAU;KAAG,cAAc;KAAG;IAEzC,MAAM,OAAO,SAAS,IAAI,MAAM,IAAI,CAAC,KAAK,MAAM,EAAE,MAAM,CAAC,QAAQ,MAAM,GAAG,CAAC;AAC3E,QAAI,CAAC,KACH,QAAO;KAAE,UAAU;KAAG,cAAc;KAAG;IAEzC,MAAM,MAA+B,EAAE;AACvC,SAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;KACpC,MAAM,MAAM,KAAK;AACjB,SAAI,IACF,KAAI,OAAO,OAAO;;AAItB,WAAO;KAAE,UADE,KAAK,UAAU,WAAW,IAAK,IAAI;KACvB,cAAc;KAAG;;AAE1C,UAAO;IAAE,UAAU;IAAG,cAAc;IAAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["database"],"sources":["../src/index.ts"],"sourcesContent":["import { CacheManager } from \"./cache\";\nimport { database } from \"./core/database\";\nimport { TableRepository } from \"./core/repository\";\nimport { createDriver } from \"./drivers\";\nimport {\n compileColumnDef,\n compileCreateTable,\n compileDelete,\n compileInsert,\n compileSelect,\n compileUpdate,\n compileWhere,\n} from \"./drivers/sql-compiler\";\nimport { migration } from \"./migrations/definition\";\nimport { generateMigrationTemplate, generateSchemaTemplate } from \"./migrations/templates\";\nimport { ColumnBuilder } from \"./schema/column\";\nimport * as columns from \"./schema/columns\";\nimport { SchemaRegistry } from \"./schema/registry\";\nimport { table } from \"./schema/table\";\nimport { Synchronizer } from \"./sync/synchronizer\";\n\nexport {\n CacheError,\n DatabaseError,\n DriverError,\n MigrationError,\n QueryError,\n SchemaError,\n SyncError,\n} from \"./errors\";\nexport * from \"./schema/columns\";\nexport type {\n CacheConfig,\n ColumnDataType,\n ColumnMetadata,\n ConnectionConfig,\n DatabaseConfig,\n DatabaseDriver,\n DatabaseType,\n DeferredRefMeta,\n DeleteOptions,\n FileConnectionConfig,\n InferInsert,\n InferRow,\n InferUpdate,\n MigrationContext,\n MigrationDefinition,\n MySQLConnectionConfig,\n QueryOptions,\n ReferenceAction,\n RelationQueryMap,\n RelationsFor,\n Repository,\n ResolveResult,\n SQLiteConnectionConfig,\n TableCacheConfig,\n TableDefinition,\n TableMetadata,\n UpdateOptions,\n WhereClause,\n WhereCondition,\n} from \"./types\";\nexport {\n CacheManager,\n ColumnBuilder,\n columns,\n compileColumnDef,\n compileCreateTable,\n compileDelete,\n compileInsert,\n compileSelect,\n compileUpdate,\n compileWhere,\n createDriver,\n database,\n generateMigrationTemplate,\n generateSchemaTemplate,\n migration,\n SchemaRegistry,\n Synchronizer,\n TableRepository,\n table,\n};\n\nexport default database;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAoFA,IAAA,cAAeA,iBAAAA"}
1
+ {"version":3,"file":"index.cjs","names":["database"],"sources":["../src/index.ts"],"sourcesContent":["import { CacheManager } from \"./cache\";\nimport { database } from \"./core/database\";\nimport { TableRepository } from \"./core/repository\";\nimport { createDriver } from \"./drivers\";\nimport {\n compileColumnDef,\n compileCreateTable,\n compileDelete,\n compileInsert,\n compileSelect,\n compileUpdate,\n compileWhere,\n} from \"./drivers/sql-compiler\";\nimport { migration } from \"./migrations/definition\";\nimport { generateMigrationTemplate, generateSchemaTemplate } from \"./migrations/templates\";\nimport { ColumnBuilder } from \"./schema/column\";\nimport * as columns from \"./schema/columns\";\nimport { SchemaRegistry } from \"./schema/registry\";\nimport { table } from \"./schema/table\";\nimport { Synchronizer } from \"./sync/synchronizer\";\n\nexport {\n CacheError,\n DatabaseError,\n DriverError,\n MigrationError,\n QueryError,\n SchemaError,\n SyncError,\n} from \"./errors\";\nexport * from \"./schema/columns\";\nexport type {\n CacheConfig,\n ColumnDataType,\n ColumnMetadata,\n ConnectionConfig,\n DatabaseConfig,\n DatabaseDriver,\n DatabaseType,\n DeferredRefMeta,\n DeleteOptions,\n FileConnectionConfig,\n InferInsert,\n InferRow,\n InferUpdate,\n MigrationContext,\n MigrationDefinition,\n MySQLConnectionConfig,\n QueryOptions,\n ReferenceAction,\n RelationQueryMap,\n RelationsFor,\n Repository,\n ResolveResult,\n S3ConnectionConfig,\n SQLiteConnectionConfig,\n TableCacheConfig,\n TableDefinition,\n TableMetadata,\n UpdateOptions,\n WhereClause,\n WhereCondition,\n} from \"./types\";\nexport {\n CacheManager,\n ColumnBuilder,\n columns,\n compileColumnDef,\n compileCreateTable,\n compileDelete,\n compileInsert,\n compileSelect,\n compileUpdate,\n compileWhere,\n createDriver,\n database,\n generateMigrationTemplate,\n generateSchemaTemplate,\n migration,\n SchemaRegistry,\n Synchronizer,\n TableRepository,\n table,\n};\n\nexport default database;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAqFA,IAAA,cAAeA,iBAAAA"}
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { CacheConfig, ColumnDataType, ColumnMetadata, ConnectionConfig, DatabaseConfig, DatabaseDriver, DatabaseType, DeferredRefMeta, DeleteOptions, FileConnectionConfig, InferInsert, InferRow, InferUpdate, MigrationContext, MigrationDefinition, MySQLConnectionConfig, QueryOptions, ReferenceAction, RelationQueryMap, RelationsFor, Repository, ResolveResult, SQLiteConnectionConfig, TableCacheConfig, TableDefinition, TableMetadata, UpdateOptions, WhereClause, WhereCondition } from "./types.cjs";
1
+ import { CacheConfig, ColumnDataType, ColumnMetadata, ConnectionConfig, DatabaseConfig, DatabaseDriver, DatabaseType, DeferredRefMeta, DeleteOptions, FileConnectionConfig, InferInsert, InferRow, InferUpdate, MigrationContext, MigrationDefinition, MySQLConnectionConfig, QueryOptions, ReferenceAction, RelationQueryMap, RelationsFor, Repository, ResolveResult, S3ConnectionConfig, SQLiteConnectionConfig, TableCacheConfig, TableDefinition, TableMetadata, UpdateOptions, WhereClause, WhereCondition } from "./types.cjs";
2
2
  import { CacheManager } from "./cache/manager.cjs";
3
3
  import { ColumnBuilder } from "./schema/column.cjs";
4
4
  import { NamedColumnStarter, array, bigint, blob, boolean, char, d, datetime, decimal, float, index_d_exports, integer, json, name, text, timestamp, varchar } from "./schema/columns/index.cjs";
@@ -12,4 +12,4 @@ import { migration } from "./migrations/definition.cjs";
12
12
  import { generateMigrationTemplate, generateSchemaTemplate } from "./migrations/templates.cjs";
13
13
  import { Synchronizer } from "./sync/synchronizer.cjs";
14
14
  import { CacheError, DatabaseError, DriverError, MigrationError, QueryError, SchemaError, SyncError } from "./errors.cjs";
15
- export { type CacheConfig, CacheError, CacheManager, ColumnBuilder, type ColumnDataType, type ColumnMetadata, type ConnectionConfig, type DatabaseConfig, type DatabaseDriver, DatabaseError, type DatabaseType, type DeferredRefMeta, type DeleteOptions, DriverError, type FileConnectionConfig, type InferInsert, type InferRow, type InferUpdate, type MigrationContext, type MigrationDefinition, MigrationError, type MySQLConnectionConfig, NamedColumnStarter, QueryError, type QueryOptions, type ReferenceAction, type RelationQueryMap, type RelationsFor, type Repository, type ResolveResult, type SQLiteConnectionConfig, SchemaError, SchemaRegistry, SyncError, Synchronizer, type TableCacheConfig, type TableDefinition, type TableMetadata, TableRepository, type UpdateOptions, type WhereClause, type WhereCondition, array, bigint, blob, boolean, char, index_d_exports as columns, compileColumnDef, compileCreateTable, compileDelete, compileInsert, compileSelect, compileUpdate, compileWhere, createDriver, d, database, database as default, datetime, decimal, float, generateMigrationTemplate, generateSchemaTemplate, integer, json, migration, name, table, text, timestamp, varchar };
15
+ export { type CacheConfig, CacheError, CacheManager, ColumnBuilder, type ColumnDataType, type ColumnMetadata, type ConnectionConfig, type DatabaseConfig, type DatabaseDriver, DatabaseError, type DatabaseType, type DeferredRefMeta, type DeleteOptions, DriverError, type FileConnectionConfig, type InferInsert, type InferRow, type InferUpdate, type MigrationContext, type MigrationDefinition, MigrationError, type MySQLConnectionConfig, NamedColumnStarter, QueryError, type QueryOptions, type ReferenceAction, type RelationQueryMap, type RelationsFor, type Repository, type ResolveResult, type S3ConnectionConfig, type SQLiteConnectionConfig, SchemaError, SchemaRegistry, SyncError, Synchronizer, type TableCacheConfig, type TableDefinition, type TableMetadata, TableRepository, type UpdateOptions, type WhereClause, type WhereCondition, array, bigint, blob, boolean, char, index_d_exports as columns, compileColumnDef, compileCreateTable, compileDelete, compileInsert, compileSelect, compileUpdate, compileWhere, createDriver, d, database, database as default, datetime, decimal, float, generateMigrationTemplate, generateSchemaTemplate, integer, json, migration, name, table, text, timestamp, varchar };
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { CacheConfig, ColumnDataType, ColumnMetadata, ConnectionConfig, DatabaseConfig, DatabaseDriver, DatabaseType, DeferredRefMeta, DeleteOptions, FileConnectionConfig, InferInsert, InferRow, InferUpdate, MigrationContext, MigrationDefinition, MySQLConnectionConfig, QueryOptions, ReferenceAction, RelationQueryMap, RelationsFor, Repository, ResolveResult, SQLiteConnectionConfig, TableCacheConfig, TableDefinition, TableMetadata, UpdateOptions, WhereClause, WhereCondition } from "./types.mjs";
1
+ import { CacheConfig, ColumnDataType, ColumnMetadata, ConnectionConfig, DatabaseConfig, DatabaseDriver, DatabaseType, DeferredRefMeta, DeleteOptions, FileConnectionConfig, InferInsert, InferRow, InferUpdate, MigrationContext, MigrationDefinition, MySQLConnectionConfig, QueryOptions, ReferenceAction, RelationQueryMap, RelationsFor, Repository, ResolveResult, S3ConnectionConfig, SQLiteConnectionConfig, TableCacheConfig, TableDefinition, TableMetadata, UpdateOptions, WhereClause, WhereCondition } from "./types.mjs";
2
2
  import { CacheManager } from "./cache/manager.mjs";
3
3
  import { ColumnBuilder } from "./schema/column.mjs";
4
4
  import { NamedColumnStarter, array, bigint, blob, boolean, char, d, datetime, decimal, float, index_d_exports, integer, json, name, text, timestamp, varchar } from "./schema/columns/index.mjs";
@@ -12,4 +12,4 @@ import { migration } from "./migrations/definition.mjs";
12
12
  import { generateMigrationTemplate, generateSchemaTemplate } from "./migrations/templates.mjs";
13
13
  import { Synchronizer } from "./sync/synchronizer.mjs";
14
14
  import { CacheError, DatabaseError, DriverError, MigrationError, QueryError, SchemaError, SyncError } from "./errors.mjs";
15
- export { type CacheConfig, CacheError, CacheManager, ColumnBuilder, type ColumnDataType, type ColumnMetadata, type ConnectionConfig, type DatabaseConfig, type DatabaseDriver, DatabaseError, type DatabaseType, type DeferredRefMeta, type DeleteOptions, DriverError, type FileConnectionConfig, type InferInsert, type InferRow, type InferUpdate, type MigrationContext, type MigrationDefinition, MigrationError, type MySQLConnectionConfig, NamedColumnStarter, QueryError, type QueryOptions, type ReferenceAction, type RelationQueryMap, type RelationsFor, type Repository, type ResolveResult, type SQLiteConnectionConfig, SchemaError, SchemaRegistry, SyncError, Synchronizer, type TableCacheConfig, type TableDefinition, type TableMetadata, TableRepository, type UpdateOptions, type WhereClause, type WhereCondition, array, bigint, blob, boolean, char, index_d_exports as columns, compileColumnDef, compileCreateTable, compileDelete, compileInsert, compileSelect, compileUpdate, compileWhere, createDriver, d, database, database as default, datetime, decimal, float, generateMigrationTemplate, generateSchemaTemplate, integer, json, migration, name, table, text, timestamp, varchar };
15
+ export { type CacheConfig, CacheError, CacheManager, ColumnBuilder, type ColumnDataType, type ColumnMetadata, type ConnectionConfig, type DatabaseConfig, type DatabaseDriver, DatabaseError, type DatabaseType, type DeferredRefMeta, type DeleteOptions, DriverError, type FileConnectionConfig, type InferInsert, type InferRow, type InferUpdate, type MigrationContext, type MigrationDefinition, MigrationError, type MySQLConnectionConfig, NamedColumnStarter, QueryError, type QueryOptions, type ReferenceAction, type RelationQueryMap, type RelationsFor, type Repository, type ResolveResult, type S3ConnectionConfig, type SQLiteConnectionConfig, SchemaError, SchemaRegistry, SyncError, Synchronizer, type TableCacheConfig, type TableDefinition, type TableMetadata, TableRepository, type UpdateOptions, type WhereClause, type WhereCondition, array, bigint, blob, boolean, char, index_d_exports as columns, compileColumnDef, compileCreateTable, compileDelete, compileInsert, compileSelect, compileUpdate, compileWhere, createDriver, d, database, database as default, datetime, decimal, float, generateMigrationTemplate, generateSchemaTemplate, integer, json, migration, name, table, text, timestamp, varchar };
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { CacheManager } from \"./cache\";\nimport { database } from \"./core/database\";\nimport { TableRepository } from \"./core/repository\";\nimport { createDriver } from \"./drivers\";\nimport {\n compileColumnDef,\n compileCreateTable,\n compileDelete,\n compileInsert,\n compileSelect,\n compileUpdate,\n compileWhere,\n} from \"./drivers/sql-compiler\";\nimport { migration } from \"./migrations/definition\";\nimport { generateMigrationTemplate, generateSchemaTemplate } from \"./migrations/templates\";\nimport { ColumnBuilder } from \"./schema/column\";\nimport * as columns from \"./schema/columns\";\nimport { SchemaRegistry } from \"./schema/registry\";\nimport { table } from \"./schema/table\";\nimport { Synchronizer } from \"./sync/synchronizer\";\n\nexport {\n CacheError,\n DatabaseError,\n DriverError,\n MigrationError,\n QueryError,\n SchemaError,\n SyncError,\n} from \"./errors\";\nexport * from \"./schema/columns\";\nexport type {\n CacheConfig,\n ColumnDataType,\n ColumnMetadata,\n ConnectionConfig,\n DatabaseConfig,\n DatabaseDriver,\n DatabaseType,\n DeferredRefMeta,\n DeleteOptions,\n FileConnectionConfig,\n InferInsert,\n InferRow,\n InferUpdate,\n MigrationContext,\n MigrationDefinition,\n MySQLConnectionConfig,\n QueryOptions,\n ReferenceAction,\n RelationQueryMap,\n RelationsFor,\n Repository,\n ResolveResult,\n SQLiteConnectionConfig,\n TableCacheConfig,\n TableDefinition,\n TableMetadata,\n UpdateOptions,\n WhereClause,\n WhereCondition,\n} from \"./types\";\nexport {\n CacheManager,\n ColumnBuilder,\n columns,\n compileColumnDef,\n compileCreateTable,\n compileDelete,\n compileInsert,\n compileSelect,\n compileUpdate,\n compileWhere,\n createDriver,\n database,\n generateMigrationTemplate,\n generateSchemaTemplate,\n migration,\n SchemaRegistry,\n Synchronizer,\n TableRepository,\n table,\n};\n\nexport default database;\n"],"mappings":";;;;;;;;;;;;;;;YAAuC;eACI;iBACS;cACX;mBAST;iBACoB;gBACuC;aAC3C;cACJ;eACO;YACZ;aAWrB;;AAuDlB,IAAA,cAAe"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { CacheManager } from \"./cache\";\nimport { database } from \"./core/database\";\nimport { TableRepository } from \"./core/repository\";\nimport { createDriver } from \"./drivers\";\nimport {\n compileColumnDef,\n compileCreateTable,\n compileDelete,\n compileInsert,\n compileSelect,\n compileUpdate,\n compileWhere,\n} from \"./drivers/sql-compiler\";\nimport { migration } from \"./migrations/definition\";\nimport { generateMigrationTemplate, generateSchemaTemplate } from \"./migrations/templates\";\nimport { ColumnBuilder } from \"./schema/column\";\nimport * as columns from \"./schema/columns\";\nimport { SchemaRegistry } from \"./schema/registry\";\nimport { table } from \"./schema/table\";\nimport { Synchronizer } from \"./sync/synchronizer\";\n\nexport {\n CacheError,\n DatabaseError,\n DriverError,\n MigrationError,\n QueryError,\n SchemaError,\n SyncError,\n} from \"./errors\";\nexport * from \"./schema/columns\";\nexport type {\n CacheConfig,\n ColumnDataType,\n ColumnMetadata,\n ConnectionConfig,\n DatabaseConfig,\n DatabaseDriver,\n DatabaseType,\n DeferredRefMeta,\n DeleteOptions,\n FileConnectionConfig,\n InferInsert,\n InferRow,\n InferUpdate,\n MigrationContext,\n MigrationDefinition,\n MySQLConnectionConfig,\n QueryOptions,\n ReferenceAction,\n RelationQueryMap,\n RelationsFor,\n Repository,\n ResolveResult,\n S3ConnectionConfig,\n SQLiteConnectionConfig,\n TableCacheConfig,\n TableDefinition,\n TableMetadata,\n UpdateOptions,\n WhereClause,\n WhereCondition,\n} from \"./types\";\nexport {\n CacheManager,\n ColumnBuilder,\n columns,\n compileColumnDef,\n compileCreateTable,\n compileDelete,\n compileInsert,\n compileSelect,\n compileUpdate,\n compileWhere,\n createDriver,\n database,\n generateMigrationTemplate,\n generateSchemaTemplate,\n migration,\n SchemaRegistry,\n Synchronizer,\n TableRepository,\n table,\n};\n\nexport default database;\n"],"mappings":";;;;;;;;;;;;;;;YAAuC;eACI;iBACS;cACX;mBAST;iBACoB;gBACuC;aAC3C;cACJ;eACO;YACZ;aAWrB;;AAwDlB,IAAA,cAAe"}
@@ -13,7 +13,7 @@ var SchemaRegistry = class {
13
13
  * Register table definitions and resolve all deferred references
14
14
  * @param {readonly TableDefinition[]} schemas - Table definitions to register
15
15
  */
16
- register(schemas) {
16
+ register(schemas, schemaKeyMap) {
17
17
  for (const schema of schemas) {
18
18
  if (!schema.__table || !schema.__name) throw new require_errors.SchemaError("Invalid table definition");
19
19
  this.definitions.set(schema.__name, schema);
@@ -54,7 +54,7 @@ var SchemaRegistry = class {
54
54
  relationName
55
55
  });
56
56
  if (!this.relations.has(resolved.table)) this.relations.set(resolved.table, []);
57
- const reverseRelationName = schema.__name;
57
+ const reverseRelationName = schemaKeyMap?.get(schema.__name) ?? schema.__name;
58
58
  this.relations.get(resolved.table).push({
59
59
  from: {
60
60
  table: resolved.table,
@@ -1 +1 @@
1
- {"version":3,"file":"registry.cjs","names":["SchemaError"],"sources":["../../src/schema/registry.ts"],"sourcesContent":["import { SchemaError } from \"../errors\";\nimport type { TableDefinition, TableMetadata } from \"../types\";\n\n/**\n * Schema registry that manages table definitions and resolves references\n */\nexport class SchemaRegistry {\n private tables = new Map<string, TableMetadata>();\n private definitions = new Map<string, TableDefinition>();\n private columnMaps = new Map<string, Record<string, string>>();\n private reverseColumnMaps = new Map<string, Record<string, string>>();\n private relations = new Map<\n string,\n Array<{\n from: { table: string; column: string };\n to: { table: string; column: string };\n relationName: string;\n }>\n >();\n\n /**\n * Register table definitions and resolve all deferred references\n * @param {readonly TableDefinition[]} schemas - Table definitions to register\n */\n register(schemas: readonly TableDefinition<any, any, any, any>[]): void {\n for (const schema of schemas) {\n if (!schema.__table || !schema.__name) {\n throw new SchemaError(\"Invalid table definition\");\n }\n\n this.definitions.set(schema.__name, schema);\n this.tables.set(schema.__name, {\n name: schema.__name,\n columns: [...schema.__columns],\n });\n\n const colMap: Record<string, string> = schema.__columnMap ?? {};\n this.columnMaps.set(schema.__name, colMap);\n const reverseMap: Record<string, string> = {};\n for (const [codeKey, dbName] of Object.entries(colMap)) {\n reverseMap[dbName] = codeKey;\n }\n this.reverseColumnMaps.set(schema.__name, reverseMap);\n }\n\n for (const schema of schemas) {\n for (const ref of schema.__deferredRefs) {\n const resolved = ref.resolve();\n if (!resolved.table || !resolved.column) {\n throw new SchemaError(\n `Failed to resolve reference for ${schema.__name}.${ref.columnName}`,\n );\n }\n\n if (!this.tables.has(resolved.table)) {\n throw new SchemaError(\n `Referenced table \"${resolved.table}\" does not exist in schema registry`,\n );\n }\n\n const colMap = this.columnMaps.get(schema.__name) ?? {};\n const dbColumnName = colMap[ref.columnName] ?? ref.columnName;\n const column = schema.__columns.find((c: any) => c.name === dbColumnName);\n if (column) {\n column.references = {\n table: resolved.table,\n column: resolved.column,\n onDelete: ref.onDelete,\n onUpdate: ref.onUpdate,\n relationName: ref.relationName,\n };\n }\n\n const relationName =\n ref.relationName || ref.columnName.replace(/Id$/, \"\").replace(/_id$/, \"\");\n\n if (!this.relations.has(schema.__name)) {\n this.relations.set(schema.__name, []);\n }\n this.relations.get(schema.__name)!.push({\n from: { table: schema.__name, column: dbColumnName },\n to: { table: resolved.table, column: resolved.column },\n relationName,\n });\n\n if (!this.relations.has(resolved.table)) {\n this.relations.set(resolved.table, []);\n }\n const reverseRelationName = schema.__name;\n this.relations.get(resolved.table)!.push({\n from: { table: resolved.table, column: resolved.column },\n to: { table: schema.__name, column: dbColumnName },\n relationName: reverseRelationName,\n });\n }\n }\n }\n\n /**\n * Get table metadata by name\n * @param {string} name - Table name\n * @returns {TableMetadata | undefined} The table metadata\n */\n getTable(name: string): TableMetadata | undefined {\n return this.tables.get(name);\n }\n\n /**\n * Get all registered table metadata\n * @returns {Map<string, TableMetadata>} All registered tables\n */\n getAllTables(): Map<string, TableMetadata> {\n return this.tables;\n }\n\n /**\n * Get relations for a table\n * @param {string} tableName - Table name\n * @returns {Array<object>} Relations for the table\n */\n getRelations(tableName: string): Array<{\n from: { table: string; column: string };\n to: { table: string; column: string };\n relationName: string;\n }> {\n return this.relations.get(tableName) ?? [];\n }\n\n /**\n * Get the primary key column name for a table (returns DB column name)\n * @param {string} tableName - Table name\n * @returns {string | null} The primary key column name or null\n */\n getPrimaryKey(tableName: string): string | null {\n const table = this.tables.get(tableName);\n if (!table) {\n return null;\n }\n for (const col of table.columns) {\n if (col.primaryKey) {\n return col.name;\n }\n }\n return null;\n }\n\n /**\n * Get the column name map (code key -> DB column name) for a table\n * @param {string} tableName - Table name\n * @returns {Record<string, string>} Column name map\n */\n getColumnMap(tableName: string): Record<string, string> {\n return this.columnMaps.get(tableName) ?? {};\n }\n\n /**\n * Get the reverse column name map (DB column name -> code key) for a table\n * @param {string} tableName - Table name\n * @returns {Record<string, string>} Reverse column name map\n */\n getReverseColumnMap(tableName: string): Record<string, string> {\n return this.reverseColumnMaps.get(tableName) ?? {};\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"registry.cjs","names":["SchemaError"],"sources":["../../src/schema/registry.ts"],"sourcesContent":["import { SchemaError } from \"../errors\";\nimport type { TableDefinition, TableMetadata } from \"../types\";\n\n/**\n * Schema registry that manages table definitions and resolves references\n */\nexport class SchemaRegistry {\n private tables = new Map<string, TableMetadata>();\n private definitions = new Map<string, TableDefinition>();\n private columnMaps = new Map<string, Record<string, string>>();\n private reverseColumnMaps = new Map<string, Record<string, string>>();\n private relations = new Map<\n string,\n Array<{\n from: { table: string; column: string };\n to: { table: string; column: string };\n relationName: string;\n }>\n >();\n\n /**\n * Register table definitions and resolve all deferred references\n * @param {readonly TableDefinition[]} schemas - Table definitions to register\n */\n register(\n schemas: readonly TableDefinition<any, any, any, any>[],\n schemaKeyMap?: Map<string, string>,\n ): void {\n for (const schema of schemas) {\n if (!schema.__table || !schema.__name) {\n throw new SchemaError(\"Invalid table definition\");\n }\n\n this.definitions.set(schema.__name, schema);\n this.tables.set(schema.__name, {\n name: schema.__name,\n columns: [...schema.__columns],\n });\n\n const colMap: Record<string, string> = schema.__columnMap ?? {};\n this.columnMaps.set(schema.__name, colMap);\n const reverseMap: Record<string, string> = {};\n for (const [codeKey, dbName] of Object.entries(colMap)) {\n reverseMap[dbName] = codeKey;\n }\n this.reverseColumnMaps.set(schema.__name, reverseMap);\n }\n\n for (const schema of schemas) {\n for (const ref of schema.__deferredRefs) {\n const resolved = ref.resolve();\n if (!resolved.table || !resolved.column) {\n throw new SchemaError(\n `Failed to resolve reference for ${schema.__name}.${ref.columnName}`,\n );\n }\n\n if (!this.tables.has(resolved.table)) {\n throw new SchemaError(\n `Referenced table \"${resolved.table}\" does not exist in schema registry`,\n );\n }\n\n const colMap = this.columnMaps.get(schema.__name) ?? {};\n const dbColumnName = colMap[ref.columnName] ?? ref.columnName;\n const column = schema.__columns.find((c: any) => c.name === dbColumnName);\n if (column) {\n column.references = {\n table: resolved.table,\n column: resolved.column,\n onDelete: ref.onDelete,\n onUpdate: ref.onUpdate,\n relationName: ref.relationName,\n };\n }\n\n const relationName =\n ref.relationName || ref.columnName.replace(/Id$/, \"\").replace(/_id$/, \"\");\n\n if (!this.relations.has(schema.__name)) {\n this.relations.set(schema.__name, []);\n }\n this.relations.get(schema.__name)!.push({\n from: { table: schema.__name, column: dbColumnName },\n to: { table: resolved.table, column: resolved.column },\n relationName,\n });\n\n if (!this.relations.has(resolved.table)) {\n this.relations.set(resolved.table, []);\n }\n const reverseRelationName = schemaKeyMap?.get(schema.__name) ?? schema.__name;\n this.relations.get(resolved.table)!.push({\n from: { table: resolved.table, column: resolved.column },\n to: { table: schema.__name, column: dbColumnName },\n relationName: reverseRelationName,\n });\n }\n }\n }\n\n /**\n * Get table metadata by name\n * @param {string} name - Table name\n * @returns {TableMetadata | undefined} The table metadata\n */\n getTable(name: string): TableMetadata | undefined {\n return this.tables.get(name);\n }\n\n /**\n * Get all registered table metadata\n * @returns {Map<string, TableMetadata>} All registered tables\n */\n getAllTables(): Map<string, TableMetadata> {\n return this.tables;\n }\n\n /**\n * Get relations for a table\n * @param {string} tableName - Table name\n * @returns {Array<object>} Relations for the table\n */\n getRelations(tableName: string): Array<{\n from: { table: string; column: string };\n to: { table: string; column: string };\n relationName: string;\n }> {\n return this.relations.get(tableName) ?? [];\n }\n\n /**\n * Get the primary key column name for a table (returns DB column name)\n * @param {string} tableName - Table name\n * @returns {string | null} The primary key column name or null\n */\n getPrimaryKey(tableName: string): string | null {\n const table = this.tables.get(tableName);\n if (!table) {\n return null;\n }\n for (const col of table.columns) {\n if (col.primaryKey) {\n return col.name;\n }\n }\n return null;\n }\n\n /**\n * Get the column name map (code key -> DB column name) for a table\n * @param {string} tableName - Table name\n * @returns {Record<string, string>} Column name map\n */\n getColumnMap(tableName: string): Record<string, string> {\n return this.columnMaps.get(tableName) ?? {};\n }\n\n /**\n * Get the reverse column name map (DB column name -> code key) for a table\n * @param {string} tableName - Table name\n * @returns {Record<string, string>} Reverse column name map\n */\n getReverseColumnMap(tableName: string): Record<string, string> {\n return this.reverseColumnMaps.get(tableName) ?? {};\n }\n}\n"],"mappings":";;;;;AAMA,IAAa,iBAAb,MAA4B;CAC1B,yBAAiB,IAAI,KAA4B;CACjD,8BAAsB,IAAI,KAA8B;CACxD,6BAAqB,IAAI,KAAqC;CAC9D,oCAA4B,IAAI,KAAqC;CACrE,4BAAoB,IAAI,KAOrB;;;;;CAMH,SACE,SACA,cACM;AACN,OAAK,MAAM,UAAU,SAAS;AAC5B,OAAI,CAAC,OAAO,WAAW,CAAC,OAAO,OAC7B,OAAM,IAAIA,eAAAA,YAAY,2BAA2B;AAGnD,QAAK,YAAY,IAAI,OAAO,QAAQ,OAAO;AAC3C,QAAK,OAAO,IAAI,OAAO,QAAQ;IAC7B,MAAM,OAAO;IACb,SAAS,CAAC,GAAG,OAAO,UAAU;IAC/B,CAAC;GAEF,MAAM,SAAiC,OAAO,eAAe,EAAE;AAC/D,QAAK,WAAW,IAAI,OAAO,QAAQ,OAAO;GAC1C,MAAM,aAAqC,EAAE;AAC7C,QAAK,MAAM,CAAC,SAAS,WAAW,OAAO,QAAQ,OAAO,CACpD,YAAW,UAAU;AAEvB,QAAK,kBAAkB,IAAI,OAAO,QAAQ,WAAW;;AAGvD,OAAK,MAAM,UAAU,QACnB,MAAK,MAAM,OAAO,OAAO,gBAAgB;GACvC,MAAM,WAAW,IAAI,SAAS;AAC9B,OAAI,CAAC,SAAS,SAAS,CAAC,SAAS,OAC/B,OAAM,IAAIA,eAAAA,YACR,mCAAmC,OAAO,OAAO,GAAG,IAAI,aACzD;AAGH,OAAI,CAAC,KAAK,OAAO,IAAI,SAAS,MAAM,CAClC,OAAM,IAAIA,eAAAA,YACR,qBAAqB,SAAS,MAAM,qCACrC;GAIH,MAAM,gBADS,KAAK,WAAW,IAAI,OAAO,OAAO,IAAI,EAAE,EAC3B,IAAI,eAAe,IAAI;GACnD,MAAM,SAAS,OAAO,UAAU,MAAM,MAAW,EAAE,SAAS,aAAa;AACzE,OAAI,OACF,QAAO,aAAa;IAClB,OAAO,SAAS;IAChB,QAAQ,SAAS;IACjB,UAAU,IAAI;IACd,UAAU,IAAI;IACd,cAAc,IAAI;IACnB;GAGH,MAAM,eACJ,IAAI,gBAAgB,IAAI,WAAW,QAAQ,OAAO,GAAG,CAAC,QAAQ,QAAQ,GAAG;AAE3E,OAAI,CAAC,KAAK,UAAU,IAAI,OAAO,OAAO,CACpC,MAAK,UAAU,IAAI,OAAO,QAAQ,EAAE,CAAC;AAEvC,QAAK,UAAU,IAAI,OAAO,OAAO,CAAE,KAAK;IACtC,MAAM;KAAE,OAAO,OAAO;KAAQ,QAAQ;KAAc;IACpD,IAAI;KAAE,OAAO,SAAS;KAAO,QAAQ,SAAS;KAAQ;IACtD;IACD,CAAC;AAEF,OAAI,CAAC,KAAK,UAAU,IAAI,SAAS,MAAM,CACrC,MAAK,UAAU,IAAI,SAAS,OAAO,EAAE,CAAC;GAExC,MAAM,sBAAsB,cAAc,IAAI,OAAO,OAAO,IAAI,OAAO;AACvE,QAAK,UAAU,IAAI,SAAS,MAAM,CAAE,KAAK;IACvC,MAAM;KAAE,OAAO,SAAS;KAAO,QAAQ,SAAS;KAAQ;IACxD,IAAI;KAAE,OAAO,OAAO;KAAQ,QAAQ;KAAc;IAClD,cAAc;IACf,CAAC;;;;;;;;CAUR,SAAS,MAAyC;AAChD,SAAO,KAAK,OAAO,IAAI,KAAK;;;;;;CAO9B,eAA2C;AACzC,SAAO,KAAK;;;;;;;CAQd,aAAa,WAIV;AACD,SAAO,KAAK,UAAU,IAAI,UAAU,IAAI,EAAE;;;;;;;CAQ5C,cAAc,WAAkC;EAC9C,MAAM,QAAQ,KAAK,OAAO,IAAI,UAAU;AACxC,MAAI,CAAC,MACH,QAAO;AAET,OAAK,MAAM,OAAO,MAAM,QACtB,KAAI,IAAI,WACN,QAAO,IAAI;AAGf,SAAO;;;;;;;CAQT,aAAa,WAA2C;AACtD,SAAO,KAAK,WAAW,IAAI,UAAU,IAAI,EAAE;;;;;;;CAQ7C,oBAAoB,WAA2C;AAC7D,SAAO,KAAK,kBAAkB,IAAI,UAAU,IAAI,EAAE"}
@@ -14,7 +14,7 @@ declare class SchemaRegistry {
14
14
  * Register table definitions and resolve all deferred references
15
15
  * @param {readonly TableDefinition[]} schemas - Table definitions to register
16
16
  */
17
- register(schemas: readonly TableDefinition<any, any, any, any>[]): void;
17
+ register(schemas: readonly TableDefinition<any, any, any, any>[], schemaKeyMap?: Map<string, string>): void;
18
18
  /**
19
19
  * Get table metadata by name
20
20
  * @param {string} name - Table name
@@ -14,7 +14,7 @@ declare class SchemaRegistry {
14
14
  * Register table definitions and resolve all deferred references
15
15
  * @param {readonly TableDefinition[]} schemas - Table definitions to register
16
16
  */
17
- register(schemas: readonly TableDefinition<any, any, any, any>[]): void;
17
+ register(schemas: readonly TableDefinition<any, any, any, any>[], schemaKeyMap?: Map<string, string>): void;
18
18
  /**
19
19
  * Get table metadata by name
20
20
  * @param {string} name - Table name
@@ -14,7 +14,7 @@ var init_registry = __esmMin((() => {
14
14
  * Register table definitions and resolve all deferred references
15
15
  * @param {readonly TableDefinition[]} schemas - Table definitions to register
16
16
  */
17
- register(schemas) {
17
+ register(schemas, schemaKeyMap) {
18
18
  for (const schema of schemas) {
19
19
  if (!schema.__table || !schema.__name) throw new SchemaError("Invalid table definition");
20
20
  this.definitions.set(schema.__name, schema);
@@ -55,7 +55,7 @@ var init_registry = __esmMin((() => {
55
55
  relationName
56
56
  });
57
57
  if (!this.relations.has(resolved.table)) this.relations.set(resolved.table, []);
58
- const reverseRelationName = schema.__name;
58
+ const reverseRelationName = schemaKeyMap?.get(schema.__name) ?? schema.__name;
59
59
  this.relations.get(resolved.table).push({
60
60
  from: {
61
61
  table: resolved.table,
@@ -1 +1 @@
1
- {"version":3,"file":"registry.mjs","names":[],"sources":["../../src/schema/registry.ts"],"sourcesContent":["import { SchemaError } from \"../errors\";\nimport type { TableDefinition, TableMetadata } from \"../types\";\n\n/**\n * Schema registry that manages table definitions and resolves references\n */\nexport class SchemaRegistry {\n private tables = new Map<string, TableMetadata>();\n private definitions = new Map<string, TableDefinition>();\n private columnMaps = new Map<string, Record<string, string>>();\n private reverseColumnMaps = new Map<string, Record<string, string>>();\n private relations = new Map<\n string,\n Array<{\n from: { table: string; column: string };\n to: { table: string; column: string };\n relationName: string;\n }>\n >();\n\n /**\n * Register table definitions and resolve all deferred references\n * @param {readonly TableDefinition[]} schemas - Table definitions to register\n */\n register(schemas: readonly TableDefinition<any, any, any, any>[]): void {\n for (const schema of schemas) {\n if (!schema.__table || !schema.__name) {\n throw new SchemaError(\"Invalid table definition\");\n }\n\n this.definitions.set(schema.__name, schema);\n this.tables.set(schema.__name, {\n name: schema.__name,\n columns: [...schema.__columns],\n });\n\n const colMap: Record<string, string> = schema.__columnMap ?? {};\n this.columnMaps.set(schema.__name, colMap);\n const reverseMap: Record<string, string> = {};\n for (const [codeKey, dbName] of Object.entries(colMap)) {\n reverseMap[dbName] = codeKey;\n }\n this.reverseColumnMaps.set(schema.__name, reverseMap);\n }\n\n for (const schema of schemas) {\n for (const ref of schema.__deferredRefs) {\n const resolved = ref.resolve();\n if (!resolved.table || !resolved.column) {\n throw new SchemaError(\n `Failed to resolve reference for ${schema.__name}.${ref.columnName}`,\n );\n }\n\n if (!this.tables.has(resolved.table)) {\n throw new SchemaError(\n `Referenced table \"${resolved.table}\" does not exist in schema registry`,\n );\n }\n\n const colMap = this.columnMaps.get(schema.__name) ?? {};\n const dbColumnName = colMap[ref.columnName] ?? ref.columnName;\n const column = schema.__columns.find((c: any) => c.name === dbColumnName);\n if (column) {\n column.references = {\n table: resolved.table,\n column: resolved.column,\n onDelete: ref.onDelete,\n onUpdate: ref.onUpdate,\n relationName: ref.relationName,\n };\n }\n\n const relationName =\n ref.relationName || ref.columnName.replace(/Id$/, \"\").replace(/_id$/, \"\");\n\n if (!this.relations.has(schema.__name)) {\n this.relations.set(schema.__name, []);\n }\n this.relations.get(schema.__name)!.push({\n from: { table: schema.__name, column: dbColumnName },\n to: { table: resolved.table, column: resolved.column },\n relationName,\n });\n\n if (!this.relations.has(resolved.table)) {\n this.relations.set(resolved.table, []);\n }\n const reverseRelationName = schema.__name;\n this.relations.get(resolved.table)!.push({\n from: { table: resolved.table, column: resolved.column },\n to: { table: schema.__name, column: dbColumnName },\n relationName: reverseRelationName,\n });\n }\n }\n }\n\n /**\n * Get table metadata by name\n * @param {string} name - Table name\n * @returns {TableMetadata | undefined} The table metadata\n */\n getTable(name: string): TableMetadata | undefined {\n return this.tables.get(name);\n }\n\n /**\n * Get all registered table metadata\n * @returns {Map<string, TableMetadata>} All registered tables\n */\n getAllTables(): Map<string, TableMetadata> {\n return this.tables;\n }\n\n /**\n * Get relations for a table\n * @param {string} tableName - Table name\n * @returns {Array<object>} Relations for the table\n */\n getRelations(tableName: string): Array<{\n from: { table: string; column: string };\n to: { table: string; column: string };\n relationName: string;\n }> {\n return this.relations.get(tableName) ?? [];\n }\n\n /**\n * Get the primary key column name for a table (returns DB column name)\n * @param {string} tableName - Table name\n * @returns {string | null} The primary key column name or null\n */\n getPrimaryKey(tableName: string): string | null {\n const table = this.tables.get(tableName);\n if (!table) {\n return null;\n }\n for (const col of table.columns) {\n if (col.primaryKey) {\n return col.name;\n }\n }\n return null;\n }\n\n /**\n * Get the column name map (code key -> DB column name) for a table\n * @param {string} tableName - Table name\n * @returns {Record<string, string>} Column name map\n */\n getColumnMap(tableName: string): Record<string, string> {\n return this.columnMaps.get(tableName) ?? {};\n }\n\n /**\n * Get the reverse column name map (DB column name -> code key) for a table\n * @param {string} tableName - Table name\n * @returns {Record<string, string>} Reverse column name map\n */\n getReverseColumnMap(tableName: string): Record<string, string> {\n return this.reverseColumnMaps.get(tableName) ?? {};\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"registry.mjs","names":[],"sources":["../../src/schema/registry.ts"],"sourcesContent":["import { SchemaError } from \"../errors\";\nimport type { TableDefinition, TableMetadata } from \"../types\";\n\n/**\n * Schema registry that manages table definitions and resolves references\n */\nexport class SchemaRegistry {\n private tables = new Map<string, TableMetadata>();\n private definitions = new Map<string, TableDefinition>();\n private columnMaps = new Map<string, Record<string, string>>();\n private reverseColumnMaps = new Map<string, Record<string, string>>();\n private relations = new Map<\n string,\n Array<{\n from: { table: string; column: string };\n to: { table: string; column: string };\n relationName: string;\n }>\n >();\n\n /**\n * Register table definitions and resolve all deferred references\n * @param {readonly TableDefinition[]} schemas - Table definitions to register\n */\n register(\n schemas: readonly TableDefinition<any, any, any, any>[],\n schemaKeyMap?: Map<string, string>,\n ): void {\n for (const schema of schemas) {\n if (!schema.__table || !schema.__name) {\n throw new SchemaError(\"Invalid table definition\");\n }\n\n this.definitions.set(schema.__name, schema);\n this.tables.set(schema.__name, {\n name: schema.__name,\n columns: [...schema.__columns],\n });\n\n const colMap: Record<string, string> = schema.__columnMap ?? {};\n this.columnMaps.set(schema.__name, colMap);\n const reverseMap: Record<string, string> = {};\n for (const [codeKey, dbName] of Object.entries(colMap)) {\n reverseMap[dbName] = codeKey;\n }\n this.reverseColumnMaps.set(schema.__name, reverseMap);\n }\n\n for (const schema of schemas) {\n for (const ref of schema.__deferredRefs) {\n const resolved = ref.resolve();\n if (!resolved.table || !resolved.column) {\n throw new SchemaError(\n `Failed to resolve reference for ${schema.__name}.${ref.columnName}`,\n );\n }\n\n if (!this.tables.has(resolved.table)) {\n throw new SchemaError(\n `Referenced table \"${resolved.table}\" does not exist in schema registry`,\n );\n }\n\n const colMap = this.columnMaps.get(schema.__name) ?? {};\n const dbColumnName = colMap[ref.columnName] ?? ref.columnName;\n const column = schema.__columns.find((c: any) => c.name === dbColumnName);\n if (column) {\n column.references = {\n table: resolved.table,\n column: resolved.column,\n onDelete: ref.onDelete,\n onUpdate: ref.onUpdate,\n relationName: ref.relationName,\n };\n }\n\n const relationName =\n ref.relationName || ref.columnName.replace(/Id$/, \"\").replace(/_id$/, \"\");\n\n if (!this.relations.has(schema.__name)) {\n this.relations.set(schema.__name, []);\n }\n this.relations.get(schema.__name)!.push({\n from: { table: schema.__name, column: dbColumnName },\n to: { table: resolved.table, column: resolved.column },\n relationName,\n });\n\n if (!this.relations.has(resolved.table)) {\n this.relations.set(resolved.table, []);\n }\n const reverseRelationName = schemaKeyMap?.get(schema.__name) ?? schema.__name;\n this.relations.get(resolved.table)!.push({\n from: { table: resolved.table, column: resolved.column },\n to: { table: schema.__name, column: dbColumnName },\n relationName: reverseRelationName,\n });\n }\n }\n }\n\n /**\n * Get table metadata by name\n * @param {string} name - Table name\n * @returns {TableMetadata | undefined} The table metadata\n */\n getTable(name: string): TableMetadata | undefined {\n return this.tables.get(name);\n }\n\n /**\n * Get all registered table metadata\n * @returns {Map<string, TableMetadata>} All registered tables\n */\n getAllTables(): Map<string, TableMetadata> {\n return this.tables;\n }\n\n /**\n * Get relations for a table\n * @param {string} tableName - Table name\n * @returns {Array<object>} Relations for the table\n */\n getRelations(tableName: string): Array<{\n from: { table: string; column: string };\n to: { table: string; column: string };\n relationName: string;\n }> {\n return this.relations.get(tableName) ?? [];\n }\n\n /**\n * Get the primary key column name for a table (returns DB column name)\n * @param {string} tableName - Table name\n * @returns {string | null} The primary key column name or null\n */\n getPrimaryKey(tableName: string): string | null {\n const table = this.tables.get(tableName);\n if (!table) {\n return null;\n }\n for (const col of table.columns) {\n if (col.primaryKey) {\n return col.name;\n }\n }\n return null;\n }\n\n /**\n * Get the column name map (code key -> DB column name) for a table\n * @param {string} tableName - Table name\n * @returns {Record<string, string>} Column name map\n */\n getColumnMap(tableName: string): Record<string, string> {\n return this.columnMaps.get(tableName) ?? {};\n }\n\n /**\n * Get the reverse column name map (DB column name -> code key) for a table\n * @param {string} tableName - Table name\n * @returns {Record<string, string>} Reverse column name map\n */\n getReverseColumnMap(tableName: string): Record<string, string> {\n return this.reverseColumnMaps.get(tableName) ?? {};\n }\n}\n"],"mappings":"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"}
package/dist/types.d.cts CHANGED
@@ -5,7 +5,7 @@ type ColumnDataType = "integer" | "varchar" | "text" | "boolean" | "json" | "arr
5
5
  * Database type identifier — can be a simple string shorthand or an object
6
6
  * specifying both the database name and the driver provider to use
7
7
  */
8
- type DatabaseType = "mysql" | "mariadb" | "sqlite" | "file" | {
8
+ type DatabaseType = "mysql" | "mariadb" | "sqlite" | "file" | "s3" | {
9
9
  name: "mysql";
10
10
  provider: "mysql" | "mysql2";
11
11
  } | {
@@ -17,6 +17,9 @@ type DatabaseType = "mysql" | "mariadb" | "sqlite" | "file" | {
17
17
  } | {
18
18
  name: "file";
19
19
  provider: string;
20
+ } | {
21
+ name: "s3";
22
+ provider: string;
20
23
  };
21
24
  /** Metadata describing a single database column */
22
25
  interface ColumnMetadata {
@@ -217,8 +220,23 @@ interface FileConnectionConfig {
217
220
  /** Directory where data files are stored */
218
221
  directory: string;
219
222
  }
223
+ /** Connection configuration for S3-based storage */
224
+ interface S3ConnectionConfig {
225
+ /** S3 bucket name */
226
+ bucket: string;
227
+ /** S3 endpoint URL */
228
+ endpoint?: string;
229
+ /** AWS region */
230
+ region?: string;
231
+ /** S3 access key ID */
232
+ accessKeyId?: string;
233
+ /** S3 secret access key */
234
+ secretAccessKey?: string;
235
+ /** Key prefix for stored objects */
236
+ prefix?: string;
237
+ }
220
238
  /** Union of all supported connection configurations */
221
- type ConnectionConfig = MySQLConnectionConfig | SQLiteConnectionConfig | FileConnectionConfig;
239
+ type ConnectionConfig = MySQLConnectionConfig | SQLiteConnectionConfig | FileConnectionConfig | S3ConnectionConfig;
222
240
  /**
223
241
  * Global cache configuration for the database instance.
224
242
  * Controls query result caching and entity caching behavior.
@@ -361,16 +379,18 @@ type SchemaByName<S extends readonly AnyTableDef[], N extends string> = Extract<
361
379
  type StripIdSuffix<S extends string> = S extends `${infer Base}Id` ? Base : S extends `${infer Base}_id` ? Base : S;
362
380
  type UnionToIntersection<U> = (U extends any ? (x: U) => void : never) extends ((x: infer I) => void) ? I : never;
363
381
  type Simplify<T> = { [K in keyof T]: T[K] } & {};
364
- type ForwardRelationEntries<S extends readonly AnyTableDef[], T extends AnyTableDef> = TableRefs<T> extends infer R ? R extends DeferredRefMeta<infer Col, infer ToTable, any, infer Name> ? { [K in Name extends string ? Name : StripIdSuffix<Col>]: {
365
- table: SchemaByName<S, ToTable>;
382
+ type IsArray<T> = T extends readonly any[] ? true : false;
383
+ type SchemaKey<S, T extends AnyTableDef> = IsArray<S> extends true ? TableName<T> : { [K in keyof S]: S[K] extends T ? K : never }[keyof S];
384
+ type ForwardRelationEntries<S, T extends AnyTableDef> = TableRefs<T> extends infer R ? R extends DeferredRefMeta<infer Col, infer ToTable, any, infer Name> ? { [K in Name extends string ? Name : StripIdSuffix<Col>]: {
385
+ table: SchemaByName<InferSchemas<S>, ToTable>;
366
386
  many: false;
367
387
  } } : never : never;
368
- type ReverseRelationEntry<U extends AnyTableDef, TargetName extends string> = TableRefs<U> extends infer R ? R extends DeferredRefMeta<any, TargetName, any, any> ? { [K in TableName<U>]: {
388
+ type ReverseRelationEntry<S, U extends AnyTableDef, TargetName extends string> = TableRefs<U> extends infer R ? R extends DeferredRefMeta<any, TargetName, any, any> ? { [K in SchemaKey<S, U> & string]: {
369
389
  table: U;
370
390
  many: true;
371
391
  } } : never : never;
372
- type ReverseRelationEntries<S extends readonly AnyTableDef[], T extends AnyTableDef> = ReverseRelationEntry<S[number], TableName<T>>;
373
- type RelationsFor<S extends readonly AnyTableDef[], T extends AnyTableDef> = Simplify<UnionToIntersection<ForwardRelationEntries<S, T> | ReverseRelationEntries<S, T>>>;
392
+ type ReverseRelationEntries<S, T extends AnyTableDef> = ReverseRelationEntry<S, InferSchemas<S>[number], TableName<T>>;
393
+ type RelationsFor<S, T extends AnyTableDef> = Simplify<UnionToIntersection<ForwardRelationEntries<S, T> | ReverseRelationEntries<S, T>>>;
374
394
  type InferSchemas<T> = T extends readonly AnyTableDef[] ? T : T extends Record<string, any> ? Array<{ [K in keyof T]: T[K] extends AnyTableDef ? T[K] : never }[keyof T]> : readonly AnyTableDef[];
375
395
  type DepthPrev = [never, 0, 1, 2, 3];
376
396
  type ExtractRelationRow<Rel> = Rel extends {
@@ -379,17 +399,17 @@ type ExtractRelationRow<Rel> = Rel extends {
379
399
  type ExtractRelationMany<Rel> = Rel extends {
380
400
  many: true;
381
401
  } ? true : false;
382
- type RelationQueryMap<S extends readonly AnyTableDef[], T extends AnyTableDef, D extends number = 3> = [D] extends [never] ? {} : { [K in keyof RelationsFor<S, T>]: {
402
+ type RelationQueryMap<S, T extends AnyTableDef, D extends number = 3> = [D] extends [never] ? {} : { [K in keyof RelationsFor<S, T>]: {
383
403
  row: ExtractRelationRow<RelationsFor<S, T>[K]>;
384
404
  many: ExtractRelationMany<RelationsFor<S, T>[K]>;
385
405
  relations: RelationsFor<S, T>[K] extends {
386
406
  table: infer R extends AnyTableDef;
387
407
  } ? RelationQueryMap<S, R, DepthPrev[D]> : {};
388
408
  } };
389
- type ResolveWith<S extends readonly AnyTableDef[], T extends AnyTableDef, W> = [W] extends [undefined] ? {} : W extends Record<string, any> ? { [K in keyof W & keyof RelationsFor<S, T>]: ExtractRelationMany<RelationsFor<S, T>[K]> extends true ? ExtractRelationRow<RelationsFor<S, T>[K]>[] : ExtractRelationRow<RelationsFor<S, T>[K]> | null } : {};
390
- type ResolveResult<S extends readonly AnyTableDef[], T extends AnyTableDef, O> = InferRow<T> & ResolveWith<S, T, O extends {
409
+ type ResolveWith<S, T extends AnyTableDef, W> = [W] extends [undefined] ? {} : W extends Record<string, any> ? { [K in keyof W & keyof RelationsFor<S, T>]: ExtractRelationMany<RelationsFor<S, T>[K]> extends true ? ExtractRelationRow<RelationsFor<S, T>[K]>[] : ExtractRelationRow<RelationsFor<S, T>[K]> | null } : {};
410
+ type ResolveResult<S, T extends AnyTableDef, O> = InferRow<T> & ResolveWith<S, T, O extends {
391
411
  with: infer W;
392
412
  } ? W : undefined>;
393
413
  //#endregion
394
- export { AnyTableDef, CacheConfig, ColumnDataType, ColumnMetadata, ConnectionConfig, DatabaseConfig, DatabaseDriver, DatabaseType, DeferredRefMeta, DeleteOptions, FileConnectionConfig, InferInsert, InferRow, InferSchemas, InferUpdate, MigrationContext, MigrationDefinition, MySQLConnectionConfig, QueryOptions, ReferenceAction, RelationQueryMap, RelationsFor, Repository, ResolveResult, SQLiteConnectionConfig, TableCacheConfig, TableDefinition, TableMetadata, UpdateOptions, WhereClause, WhereCondition };
414
+ export { AnyTableDef, CacheConfig, ColumnDataType, ColumnMetadata, ConnectionConfig, DatabaseConfig, DatabaseDriver, DatabaseType, DeferredRefMeta, DeleteOptions, FileConnectionConfig, InferInsert, InferRow, InferUpdate, MigrationContext, MigrationDefinition, MySQLConnectionConfig, QueryOptions, ReferenceAction, RelationQueryMap, RelationsFor, Repository, ResolveResult, S3ConnectionConfig, SQLiteConnectionConfig, TableCacheConfig, TableDefinition, TableMetadata, UpdateOptions, WhereClause, WhereCondition };
395
415
  //# sourceMappingURL=types.d.cts.map