@warlock.js/cascade 4.0.158 → 4.0.162
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.
- package/esm/context/database-data-source-context.d.ts +29 -0
- package/esm/context/database-data-source-context.d.ts.map +1 -0
- package/esm/context/database-data-source-context.js +28 -0
- package/esm/context/database-data-source-context.js.map +1 -0
- package/esm/context/database-transaction-context.d.ts +35 -0
- package/esm/context/database-transaction-context.d.ts.map +1 -0
- package/esm/context/database-transaction-context.js +40 -0
- package/esm/context/database-transaction-context.js.map +1 -0
- package/esm/contracts/database-driver.contract.d.ts +450 -0
- package/esm/contracts/database-driver.contract.d.ts.map +1 -0
- package/esm/contracts/database-id-generator.contract.d.ts +109 -0
- package/esm/contracts/database-id-generator.contract.d.ts.map +1 -0
- package/esm/contracts/database-remover.contract.d.ts +104 -0
- package/esm/contracts/database-remover.contract.d.ts.map +1 -0
- package/esm/contracts/database-restorer.contract.d.ts +143 -0
- package/esm/contracts/database-restorer.contract.d.ts.map +1 -0
- package/esm/contracts/database-writer.contract.d.ts +119 -0
- package/esm/contracts/database-writer.contract.d.ts.map +1 -0
- package/esm/contracts/driver-blueprint.contract.d.ts +49 -0
- package/esm/contracts/driver-blueprint.contract.d.ts.map +1 -0
- package/esm/contracts/index.d.ts +10 -0
- package/esm/contracts/index.d.ts.map +1 -0
- package/esm/contracts/migration-driver.contract.d.ts +522 -0
- package/esm/contracts/migration-driver.contract.d.ts.map +1 -0
- package/esm/contracts/query-builder.contract.d.ts +1609 -0
- package/esm/contracts/query-builder.contract.d.ts.map +1 -0
- package/esm/contracts/sync-adapter.contract.d.ts +58 -0
- package/esm/contracts/sync-adapter.contract.d.ts.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Context } from "@warlock.js/context";
|
|
2
|
+
import type { DataSource } from "../data-source/data-source";
|
|
3
|
+
type DataSourceContextValue = string | DataSource;
|
|
4
|
+
type DataSourceContextStore = {
|
|
5
|
+
dataSource?: DataSourceContextValue;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Database DataSource Context
|
|
9
|
+
*
|
|
10
|
+
* Manages the active database connection/data source using AsyncLocalStorage.
|
|
11
|
+
* Extends the base Context class for consistent API.
|
|
12
|
+
*/
|
|
13
|
+
declare class DatabaseDataSourceContext extends Context<DataSourceContextStore> {
|
|
14
|
+
/**
|
|
15
|
+
* Get the current data source
|
|
16
|
+
*/
|
|
17
|
+
getDataSource(): DataSourceContextValue | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Set the data source in context
|
|
20
|
+
*/
|
|
21
|
+
setDataSource(dataSource: DataSourceContextValue): void;
|
|
22
|
+
/**
|
|
23
|
+
* Build the initial data source store with defaults
|
|
24
|
+
*/
|
|
25
|
+
buildStore(): DataSourceContextStore;
|
|
26
|
+
}
|
|
27
|
+
export declare const databaseDataSourceContext: DatabaseDataSourceContext;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=database-data-source-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-data-source-context.d.ts","sourceRoot":"","sources":["../../src/context/database-data-source-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAkB,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D,KAAK,sBAAsB,GAAG,MAAM,GAAG,UAAU,CAAC;AAElD,KAAK,sBAAsB,GAAG;IAC5B,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC,CAAC;AAEF;;;;;GAKG;AACH,cAAM,yBAA0B,SAAQ,OAAO,CAAC,sBAAsB,CAAC;IACrE;;OAEG;IACI,aAAa,IAAI,sBAAsB,GAAG,SAAS;IAI1D;;OAEG;IACI,aAAa,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI;IAI9D;;OAEG;IACI,UAAU,IAAI,sBAAsB;CAG5C;AAED,eAAO,MAAM,yBAAyB,2BAAkC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import {contextManager,Context}from'@warlock.js/context';/**
|
|
2
|
+
* Database DataSource Context
|
|
3
|
+
*
|
|
4
|
+
* Manages the active database connection/data source using AsyncLocalStorage.
|
|
5
|
+
* Extends the base Context class for consistent API.
|
|
6
|
+
*/
|
|
7
|
+
class DatabaseDataSourceContext extends Context {
|
|
8
|
+
/**
|
|
9
|
+
* Get the current data source
|
|
10
|
+
*/
|
|
11
|
+
getDataSource() {
|
|
12
|
+
return this.get("dataSource");
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Set the data source in context
|
|
16
|
+
*/
|
|
17
|
+
setDataSource(dataSource) {
|
|
18
|
+
this.set("dataSource", dataSource);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Build the initial data source store with defaults
|
|
22
|
+
*/
|
|
23
|
+
buildStore() {
|
|
24
|
+
return { dataSource: undefined };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const databaseDataSourceContext = new DatabaseDataSourceContext();
|
|
28
|
+
contextManager.register("db.datasource", databaseDataSourceContext);export{databaseDataSourceContext};//# sourceMappingURL=database-data-source-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-data-source-context.js","sources":["../../src/context/database-data-source-context.ts"],"sourcesContent":[null],"names":[],"mappings":"yDASA;;;;;AAKG;AACH,MAAM,yBAA0B,SAAQ,OAA+B,CAAA;AACrE;;AAEG;IACI,aAAa,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;KAC/B;AAED;;AAEG;AACI,IAAA,aAAa,CAAC,UAAkC,EAAA;AACrD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;KACpC;AAED;;AAEG;IACI,UAAU,GAAA;AACf,QAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;KAClC;AACF,CAAA;AAEY,MAAA,yBAAyB,GAAG,IAAI,yBAAyB,GAAG;AAEzE,cAAc,CAAC,QAAQ,CAAC,eAAe,EAAE,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Context } from "@warlock.js/context";
|
|
2
|
+
interface TransactionContextStore {
|
|
3
|
+
session?: unknown;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Database Transaction Context
|
|
7
|
+
*
|
|
8
|
+
* Manages database transaction sessions using AsyncLocalStorage.
|
|
9
|
+
* Extends the base Context class for consistent API.
|
|
10
|
+
*/
|
|
11
|
+
declare class DatabaseTransactionContext extends Context<TransactionContextStore> {
|
|
12
|
+
/**
|
|
13
|
+
* Get the current transaction session
|
|
14
|
+
*/
|
|
15
|
+
getSession<TSession = unknown>(): TSession | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Check if there's an active transaction in the current context
|
|
18
|
+
*/
|
|
19
|
+
hasActiveTransaction(): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Set the transaction session in context
|
|
22
|
+
*/
|
|
23
|
+
setSession(session: unknown): void;
|
|
24
|
+
/**
|
|
25
|
+
* Exit the transaction context
|
|
26
|
+
*/
|
|
27
|
+
exit(): void;
|
|
28
|
+
/**
|
|
29
|
+
* Build the initial transaction store with defaults
|
|
30
|
+
*/
|
|
31
|
+
buildStore(): TransactionContextStore;
|
|
32
|
+
}
|
|
33
|
+
export declare const databaseTransactionContext: DatabaseTransactionContext;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=database-transaction-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-transaction-context.d.ts","sourceRoot":"","sources":["../../src/context/database-transaction-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAkB,MAAM,qBAAqB,CAAC;AAE9D,UAAU,uBAAuB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,cAAM,0BAA2B,SAAQ,OAAO,CAAC,uBAAuB,CAAC;IACvE;;OAEG;IACI,UAAU,CAAC,QAAQ,GAAG,OAAO,KAAK,QAAQ,GAAG,SAAS;IAI7D;;OAEG;IACI,oBAAoB,IAAI,OAAO;IAItC;;OAEG;IACI,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIzC;;OAEG;IACI,IAAI,IAAI,IAAI;IAInB;;OAEG;IACI,UAAU,IAAI,uBAAuB;CAG7C;AAED,eAAO,MAAM,0BAA0B,4BAAmC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import {contextManager,Context}from'@warlock.js/context';/**
|
|
2
|
+
* Database Transaction Context
|
|
3
|
+
*
|
|
4
|
+
* Manages database transaction sessions using AsyncLocalStorage.
|
|
5
|
+
* Extends the base Context class for consistent API.
|
|
6
|
+
*/
|
|
7
|
+
class DatabaseTransactionContext extends Context {
|
|
8
|
+
/**
|
|
9
|
+
* Get the current transaction session
|
|
10
|
+
*/
|
|
11
|
+
getSession() {
|
|
12
|
+
return this.get("session");
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Check if there's an active transaction in the current context
|
|
16
|
+
*/
|
|
17
|
+
hasActiveTransaction() {
|
|
18
|
+
return this.getSession() !== undefined;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Set the transaction session in context
|
|
22
|
+
*/
|
|
23
|
+
setSession(session) {
|
|
24
|
+
this.set("session", session);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Exit the transaction context
|
|
28
|
+
*/
|
|
29
|
+
exit() {
|
|
30
|
+
this.clear();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Build the initial transaction store with defaults
|
|
34
|
+
*/
|
|
35
|
+
buildStore() {
|
|
36
|
+
return { session: undefined };
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const databaseTransactionContext = new DatabaseTransactionContext();
|
|
40
|
+
contextManager.register("db.transaction", databaseTransactionContext);export{databaseTransactionContext};//# sourceMappingURL=database-transaction-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-transaction-context.js","sources":["../../src/context/database-transaction-context.ts"],"sourcesContent":[null],"names":[],"mappings":"yDAMA;;;;;AAKG;AACH,MAAM,0BAA2B,SAAQ,OAAgC,CAAA;AACvE;;AAEG;IACI,UAAU,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAyB,CAAC;KACpD;AAED;;AAEG;IACI,oBAAoB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,KAAK,SAAS,CAAC;KACxC;AAED;;AAEG;AACI,IAAA,UAAU,CAAC,OAAgB,EAAA;AAChC,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;KAC9B;AAED;;AAEG;IACI,IAAI,GAAA;QACT,IAAI,CAAC,KAAK,EAAE,CAAC;KACd;AAED;;AAEG;IACI,UAAU,GAAA;AACf,QAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;KAC/B;AACF,CAAA;AAEY,MAAA,0BAA0B,GAAG,IAAI,0BAA0B,GAAG;AAE3E,cAAc,CAAC,QAAQ,CAAC,gBAAgB,EAAE,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
import type { DatabaseDirtyTracker } from "../database-dirty-tracker";
|
|
2
|
+
import type { ModelDefaults } from "../types";
|
|
3
|
+
import { DatabaseDriver } from "../utils/connect-to-database";
|
|
4
|
+
import { DriverBlueprintContract } from "./driver-blueprint.contract";
|
|
5
|
+
import type { MigrationDriverContract } from "./migration-driver.contract";
|
|
6
|
+
import type { QueryBuilderContract } from "./query-builder.contract";
|
|
7
|
+
import type { SyncAdapterContract } from "./sync-adapter.contract";
|
|
8
|
+
/** Supported driver lifecycle events. */
|
|
9
|
+
export type DriverEvent = "connected" | "disconnected" | string;
|
|
10
|
+
/** Listener signature for driver lifecycle events. */
|
|
11
|
+
export type DriverEventListener = (...args: unknown[]) => void;
|
|
12
|
+
/** Representation of an opened transaction (manual pattern). */
|
|
13
|
+
export interface DriverTransactionContract<TContext = unknown> {
|
|
14
|
+
/** Driver-specific transaction context (session, connection, ...). */
|
|
15
|
+
context: TContext;
|
|
16
|
+
/** Commit the transaction. */
|
|
17
|
+
commit(): Promise<void>;
|
|
18
|
+
/** Rollback the transaction. */
|
|
19
|
+
rollback(): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Transaction context passed to callback-based transaction functions.
|
|
23
|
+
*
|
|
24
|
+
* Provides explicit rollback capability - calling rollback() will
|
|
25
|
+
* throw a TransactionRollbackError to exit the transaction scope.
|
|
26
|
+
*/
|
|
27
|
+
export interface TransactionContext {
|
|
28
|
+
/**
|
|
29
|
+
* Explicitly rollback the transaction.
|
|
30
|
+
*
|
|
31
|
+
* Throws TransactionRollbackError to immediately exit the transaction callback.
|
|
32
|
+
* The transaction will be rolled back and the error will be re-thrown.
|
|
33
|
+
*
|
|
34
|
+
* @param reason - Optional reason for rollback (for logging/debugging)
|
|
35
|
+
* @throws {TransactionRollbackError}
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* await driver.transaction(async (ctx) => {
|
|
40
|
+
* if (!isValid) {
|
|
41
|
+
* ctx.rollback("Invalid data");
|
|
42
|
+
* }
|
|
43
|
+
* });
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
rollback(reason?: string): never;
|
|
47
|
+
}
|
|
48
|
+
/** Result returned after insert operations. */
|
|
49
|
+
export type InsertResult<TDocument = unknown> = {
|
|
50
|
+
document: TDocument;
|
|
51
|
+
};
|
|
52
|
+
/** Result returned after update operations. */
|
|
53
|
+
export type UpdateResult = {
|
|
54
|
+
modifiedCount: number;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Database-agnostic update operations.
|
|
58
|
+
*
|
|
59
|
+
* Drivers translate these to their native syntax:
|
|
60
|
+
* - MongoDB: Used as-is (e.g., `{ $set: { age: 31 } }`)
|
|
61
|
+
* - SQL: Translated to SET/NULL statements (e.g., `SET age = 31`)
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```typescript
|
|
65
|
+
* // Set fields
|
|
66
|
+
* { $set: { age: 31, name: "Alice" } }
|
|
67
|
+
*
|
|
68
|
+
* // Remove fields (MongoDB: delete, SQL: SET NULL)
|
|
69
|
+
* { $unset: { tempField: 1 } }
|
|
70
|
+
*
|
|
71
|
+
* // Increment numeric fields
|
|
72
|
+
* { $inc: { views: 1, likes: 5 } }
|
|
73
|
+
*
|
|
74
|
+
* // Combined operations
|
|
75
|
+
* {
|
|
76
|
+
* $set: { status: "active" },
|
|
77
|
+
* $unset: { tempData: 1 },
|
|
78
|
+
* $inc: { loginCount: 1 }
|
|
79
|
+
* }
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export type UpdateOperations = {
|
|
83
|
+
/** Set field values */
|
|
84
|
+
$set?: Record<string, unknown>;
|
|
85
|
+
/** Remove/unset fields (MongoDB: delete field, SQL: SET NULL) */
|
|
86
|
+
$unset?: Record<string, 1 | true>;
|
|
87
|
+
/** Increment numeric fields */
|
|
88
|
+
$inc?: Record<string, number>;
|
|
89
|
+
/** Decrement numeric fields */
|
|
90
|
+
$dec?: Record<string, number>;
|
|
91
|
+
/** Push to arrays (NoSQL only, SQL drivers may ignore) */
|
|
92
|
+
$push?: Record<string, unknown>;
|
|
93
|
+
/** Pull from arrays (NoSQL only, SQL drivers may ignore) */
|
|
94
|
+
$pull?: Record<string, unknown>;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Unified driver contract used by the model layer.
|
|
98
|
+
*/
|
|
99
|
+
export interface DriverContract {
|
|
100
|
+
/**
|
|
101
|
+
* The name of the driver.
|
|
102
|
+
*
|
|
103
|
+
* Used for identification, logging, and debugging.
|
|
104
|
+
*
|
|
105
|
+
* @example "mongodb", "postgres", "mysql"
|
|
106
|
+
*/
|
|
107
|
+
readonly name: DatabaseDriver;
|
|
108
|
+
/**
|
|
109
|
+
* Database blueprint (Information Schema)
|
|
110
|
+
*/
|
|
111
|
+
readonly blueprint: DriverBlueprintContract;
|
|
112
|
+
/**
|
|
113
|
+
* Driver-specific model defaults.
|
|
114
|
+
*
|
|
115
|
+
* These defaults are applied to all models using this driver,
|
|
116
|
+
* unless overridden by database config or model static properties.
|
|
117
|
+
*
|
|
118
|
+
* Examples:
|
|
119
|
+
* - MongoDB: camelCase naming (createdAt, updatedAt)
|
|
120
|
+
* - PostgreSQL: snake_case naming (created_at, updated_at)
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* // PostgreSQL driver
|
|
125
|
+
* readonly modelDefaults: Partial<ModelDefaults> = {
|
|
126
|
+
* namingConvention: "snake_case",
|
|
127
|
+
* createdAtColumn: "created_at",
|
|
128
|
+
* updatedAtColumn: "updated_at",
|
|
129
|
+
* timestamps: true,
|
|
130
|
+
* };
|
|
131
|
+
* ```
|
|
132
|
+
*/
|
|
133
|
+
readonly modelDefaults?: Partial<ModelDefaults>;
|
|
134
|
+
/** Whether the underlying connection is currently established. */
|
|
135
|
+
readonly isConnected: boolean;
|
|
136
|
+
/** Establish the underlying database connection/pool. */
|
|
137
|
+
connect(): Promise<void>;
|
|
138
|
+
/** Close the underlying database connection/pool. */
|
|
139
|
+
disconnect(): Promise<void>;
|
|
140
|
+
/** Get database native client */
|
|
141
|
+
getClient<Client = unknown>(): Client;
|
|
142
|
+
/**
|
|
143
|
+
* Serialize the given data
|
|
144
|
+
*/
|
|
145
|
+
serialize(data: Record<string, unknown>): Record<string, unknown>;
|
|
146
|
+
/**
|
|
147
|
+
* Deserialize the given data
|
|
148
|
+
*/
|
|
149
|
+
deserialize(data: Record<string, unknown>): Record<string, unknown>;
|
|
150
|
+
/**
|
|
151
|
+
* Get the dirty tracker for this driver.
|
|
152
|
+
*
|
|
153
|
+
* @param data The initial data snapshot to track
|
|
154
|
+
*/
|
|
155
|
+
getDirtyTracker(data: Record<string, unknown>): DatabaseDirtyTracker;
|
|
156
|
+
/** Register event listeners (connected/disconnected/custom). */
|
|
157
|
+
on(event: DriverEvent, listener: DriverEventListener): void;
|
|
158
|
+
/** Insert a single document/row into the given table. */
|
|
159
|
+
insert(table: string, document: Record<string, unknown>, options?: Record<string, unknown>): Promise<InsertResult>;
|
|
160
|
+
/** Insert multiple documents/rows into the given table. */
|
|
161
|
+
insertMany(table: string, documents: Record<string, unknown>[], options?: Record<string, unknown>): Promise<InsertResult[]>;
|
|
162
|
+
/** Update documents/rows matching the filter. */
|
|
163
|
+
update(table: string, filter: Record<string, unknown>, update: UpdateOperations, options?: Record<string, unknown>): Promise<UpdateResult>;
|
|
164
|
+
/** Update many documents/rows matching the filter. */
|
|
165
|
+
updateMany(table: string, filter: Record<string, unknown>, update: UpdateOperations, options?: Record<string, unknown>): Promise<UpdateResult>;
|
|
166
|
+
/** Replace a single document that matches the provided filter. */
|
|
167
|
+
replace<T = unknown>(table: string, filter: Record<string, unknown>, document: Record<string, unknown>, options?: Record<string, unknown>): Promise<T | null>;
|
|
168
|
+
/** Find one and update a single document that matches the provided filter and return the updated document */
|
|
169
|
+
findOneAndUpdate<T = unknown>(table: string, filter: Record<string, unknown>, update: Record<string, unknown>, options?: Record<string, unknown>): Promise<T | null>;
|
|
170
|
+
/**
|
|
171
|
+
* Upsert (insert or update) a single document/row.
|
|
172
|
+
*
|
|
173
|
+
* If a document matching the filter exists, it will be updated.
|
|
174
|
+
* If no document matches, a new one will be inserted.
|
|
175
|
+
*
|
|
176
|
+
* @param table - Target table/collection name
|
|
177
|
+
* @param filter - Filter conditions to find existing document
|
|
178
|
+
* @param document - Document data to insert or update
|
|
179
|
+
* @param options - Driver-specific options (conflict columns for SQL, etc.)
|
|
180
|
+
* @returns The upserted document
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* ```typescript
|
|
184
|
+
* // PostgreSQL: upsert on unique email
|
|
185
|
+
* await driver.upsert('users', { email: 'user@example.com' }, {
|
|
186
|
+
* email: 'user@example.com',
|
|
187
|
+
* name: 'John Doe',
|
|
188
|
+
* updatedAt: new Date()
|
|
189
|
+
* }, { conflictColumns: ['email'] });
|
|
190
|
+
*
|
|
191
|
+
* // MongoDB: upsert by filter
|
|
192
|
+
* await driver.upsert('users', { email: 'user@example.com' }, {
|
|
193
|
+
* email: 'user@example.com',
|
|
194
|
+
* name: 'John Doe'
|
|
195
|
+
* });
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
198
|
+
upsert<T = unknown>(table: string, filter: Record<string, unknown>, document: Record<string, unknown>, options?: Record<string, unknown>): Promise<T>;
|
|
199
|
+
/**
|
|
200
|
+
* Find one and delete a single document that matches the provided filter and return the deleted document.
|
|
201
|
+
*
|
|
202
|
+
* @param table - Target table/collection name
|
|
203
|
+
* @param filter - Filter conditions
|
|
204
|
+
* @param options - Optional delete options
|
|
205
|
+
* @returns The deleted document or null if not found
|
|
206
|
+
*
|
|
207
|
+
* @example
|
|
208
|
+
* ```typescript
|
|
209
|
+
* const deleted = await driver.findOneAndDelete('users', { id: 1 });
|
|
210
|
+
* if (deleted) {
|
|
211
|
+
* console.log('Deleted user:', deleted);
|
|
212
|
+
* }
|
|
213
|
+
* ```
|
|
214
|
+
*/
|
|
215
|
+
findOneAndDelete<T = unknown>(table: string, filter: Record<string, unknown>, options?: Record<string, unknown>): Promise<T | null>;
|
|
216
|
+
/** Delete a single document that matches the provided filter. */
|
|
217
|
+
delete(table: string, filter?: Record<string, unknown>, options?: Record<string, unknown>): Promise<number>;
|
|
218
|
+
/** Delete documents/rows matching the filter. */
|
|
219
|
+
deleteMany(table: string, filter?: Record<string, unknown>, options?: Record<string, unknown>): Promise<number>;
|
|
220
|
+
/**
|
|
221
|
+
* Remove all records from a table/collection.
|
|
222
|
+
*
|
|
223
|
+
* This is a destructive operation that deletes all documents/rows.
|
|
224
|
+
* Use with caution, especially in production environments.
|
|
225
|
+
*
|
|
226
|
+
* @param table - Table/collection name to truncate
|
|
227
|
+
* @param options - Driver-specific options
|
|
228
|
+
* @returns Number of records deleted
|
|
229
|
+
*
|
|
230
|
+
* @example
|
|
231
|
+
* ```typescript
|
|
232
|
+
* // Clear all users
|
|
233
|
+
* await driver.truncateTable("users");
|
|
234
|
+
*
|
|
235
|
+
* // Use in seeders for test data cleanup
|
|
236
|
+
* await driver.truncateTable("test_data");
|
|
237
|
+
* ```
|
|
238
|
+
*/
|
|
239
|
+
truncateTable(table: string, options?: Record<string, unknown>): Promise<number>;
|
|
240
|
+
/** Obtain a query builder for custom querying. */
|
|
241
|
+
queryBuilder<T = unknown>(table: string): QueryBuilderContract<T>;
|
|
242
|
+
/**
|
|
243
|
+
* Start a new transaction scope (manual pattern).
|
|
244
|
+
*
|
|
245
|
+
* Returns a transaction object with commit/rollback methods.
|
|
246
|
+
* You are responsible for calling commit() or rollback() and handling cleanup.
|
|
247
|
+
*
|
|
248
|
+
* For most use cases, prefer the `transaction()` method which handles
|
|
249
|
+
* commit/rollback/cleanup automatically.
|
|
250
|
+
*
|
|
251
|
+
* @param options - Driver-specific transaction options
|
|
252
|
+
* @returns Transaction contract with commit/rollback methods
|
|
253
|
+
*
|
|
254
|
+
* @example
|
|
255
|
+
* ```typescript
|
|
256
|
+
* const tx = await driver.beginTransaction();
|
|
257
|
+
* try {
|
|
258
|
+
* await driver.insert('users', { name: 'Alice' });
|
|
259
|
+
* await tx.commit();
|
|
260
|
+
* } catch (error) {
|
|
261
|
+
* await tx.rollback();
|
|
262
|
+
* throw error;
|
|
263
|
+
* }
|
|
264
|
+
* ```
|
|
265
|
+
*/
|
|
266
|
+
beginTransaction(options?: Record<string, unknown>): Promise<DriverTransactionContract>;
|
|
267
|
+
/**
|
|
268
|
+
* Execute a function within a transaction scope (recommended pattern).
|
|
269
|
+
*
|
|
270
|
+
* Automatically commits on success, rolls back on any error, and guarantees
|
|
271
|
+
* resource cleanup. This is the recommended way to use transactions.
|
|
272
|
+
*
|
|
273
|
+
* **Features:**
|
|
274
|
+
* - Auto-commit on successful callback completion
|
|
275
|
+
* - Auto-rollback on any thrown error
|
|
276
|
+
* - Explicit rollback via `ctx.rollback()`
|
|
277
|
+
* - Guaranteed resource cleanup (connection/session release)
|
|
278
|
+
* - Returns the callback's return value
|
|
279
|
+
*
|
|
280
|
+
* **Limitations:**
|
|
281
|
+
* - Nested `transaction()` calls are not supported (use `beginTransaction()` with savepoints)
|
|
282
|
+
* - MongoDB: Requires replica set configuration
|
|
283
|
+
*
|
|
284
|
+
* @param fn - Async function to execute within transaction
|
|
285
|
+
* @param options - Driver-specific transaction options (same as beginTransaction)
|
|
286
|
+
* @returns The return value of the callback function
|
|
287
|
+
* @throws {Error} If transaction fails or is explicitly rolled back
|
|
288
|
+
*
|
|
289
|
+
* @example
|
|
290
|
+
* ```typescript
|
|
291
|
+
* // Auto-commit on success
|
|
292
|
+
* const user = await driver.transaction(async (ctx) => {
|
|
293
|
+
* const result = await driver.insert('users', { name: 'Alice' });
|
|
294
|
+
* return result.document;
|
|
295
|
+
* });
|
|
296
|
+
*
|
|
297
|
+
* // Explicit rollback
|
|
298
|
+
* await driver.transaction(async (ctx) => {
|
|
299
|
+
* if (!isValid) {
|
|
300
|
+
* ctx.rollback('Validation failed');
|
|
301
|
+
* }
|
|
302
|
+
* });
|
|
303
|
+
*
|
|
304
|
+
* // Auto-rollback on error
|
|
305
|
+
* await driver.transaction(async (ctx) => {
|
|
306
|
+
* throw new Error('Oops'); // Automatically rolls back
|
|
307
|
+
* });
|
|
308
|
+
* ```
|
|
309
|
+
*/
|
|
310
|
+
transaction<T>(fn: (ctx: TransactionContext) => Promise<T>, options?: Record<string, unknown>): Promise<T>;
|
|
311
|
+
/** Perform atomic updates matching the filter. */
|
|
312
|
+
atomic(table: string, filter: Record<string, unknown>, operations: UpdateOperations, options?: Record<string, unknown>): Promise<UpdateResult>;
|
|
313
|
+
/** Access the sync adapter used for bulk denormalized updates. */
|
|
314
|
+
syncAdapter(): SyncAdapterContract;
|
|
315
|
+
/** Access the migration driver for schema operations. */
|
|
316
|
+
migrationDriver(): MigrationDriverContract;
|
|
317
|
+
/**
|
|
318
|
+
* Return a SQL serializer for this driver's dialect.
|
|
319
|
+
* Used by Migration.toSQL() to convert pending operations to SQL strings.
|
|
320
|
+
*/
|
|
321
|
+
getSQLSerializer(): import("../migration/sql-serializer").SQLSerializer;
|
|
322
|
+
/**
|
|
323
|
+
* Execute a raw SQL query.
|
|
324
|
+
* Used by the runner to execute phase-ordered SQL.
|
|
325
|
+
*
|
|
326
|
+
* @param sql - SQL query string
|
|
327
|
+
* @param params - Optional query parameters
|
|
328
|
+
* @returns Query result
|
|
329
|
+
*/
|
|
330
|
+
query<T = unknown>(sql: string, params?: unknown[]): Promise<any>;
|
|
331
|
+
/**
|
|
332
|
+
* Create a new database.
|
|
333
|
+
*
|
|
334
|
+
* Used for multi-tenant scenarios where each tenant gets their own database.
|
|
335
|
+
*
|
|
336
|
+
* @param name - Database name to create
|
|
337
|
+
* @param options - Driver-specific options (encoding, template, etc.)
|
|
338
|
+
* @returns true if created, false if already exists
|
|
339
|
+
*
|
|
340
|
+
* @example
|
|
341
|
+
* ```typescript
|
|
342
|
+
* // Create a tenant database
|
|
343
|
+
* const created = await driver.createDatabase("tenant_xyz");
|
|
344
|
+
* if (created) {
|
|
345
|
+
* console.log("Database created successfully");
|
|
346
|
+
* }
|
|
347
|
+
* ```
|
|
348
|
+
*/
|
|
349
|
+
createDatabase(name: string, options?: CreateDatabaseOptions): Promise<boolean>;
|
|
350
|
+
/**
|
|
351
|
+
* Drop a database.
|
|
352
|
+
*
|
|
353
|
+
* Use with caution - this permanently deletes the database and all its data.
|
|
354
|
+
*
|
|
355
|
+
* @param name - Database name to drop
|
|
356
|
+
* @param options - Driver-specific options (force, etc.)
|
|
357
|
+
* @returns true if dropped, false if didn't exist
|
|
358
|
+
*
|
|
359
|
+
* @example
|
|
360
|
+
* ```typescript
|
|
361
|
+
* // Remove a tenant database
|
|
362
|
+
* await driver.dropDatabase("tenant_xyz");
|
|
363
|
+
* ```
|
|
364
|
+
*/
|
|
365
|
+
dropDatabase(name: string, options?: DropDatabaseOptions): Promise<boolean>;
|
|
366
|
+
/**
|
|
367
|
+
* Check if a database exists.
|
|
368
|
+
*
|
|
369
|
+
* @param name - Database name to check
|
|
370
|
+
* @returns true if database exists
|
|
371
|
+
*
|
|
372
|
+
* @example
|
|
373
|
+
* ```typescript
|
|
374
|
+
* const exists = await driver.databaseExists("tenant_xyz");
|
|
375
|
+
* if (!exists) {
|
|
376
|
+
* await driver.createDatabase("tenant_xyz");
|
|
377
|
+
* }
|
|
378
|
+
* ```
|
|
379
|
+
*/
|
|
380
|
+
databaseExists(name: string): Promise<boolean>;
|
|
381
|
+
/**
|
|
382
|
+
* List all databases.
|
|
383
|
+
*
|
|
384
|
+
* @returns Array of database names
|
|
385
|
+
*/
|
|
386
|
+
listDatabases(): Promise<string[]>;
|
|
387
|
+
/**
|
|
388
|
+
* Drop a table/collection.
|
|
389
|
+
*
|
|
390
|
+
* Throws an error if the table doesn't exist.
|
|
391
|
+
*
|
|
392
|
+
* @param name - Table/collection name to drop
|
|
393
|
+
*
|
|
394
|
+
* @example
|
|
395
|
+
* ```typescript
|
|
396
|
+
* await driver.dropTable("temp_data");
|
|
397
|
+
* ```
|
|
398
|
+
*/
|
|
399
|
+
dropTable(name: string): Promise<void>;
|
|
400
|
+
/**
|
|
401
|
+
* Drop a table/collection if it exists.
|
|
402
|
+
*
|
|
403
|
+
* Does not throw an error if the table doesn't exist.
|
|
404
|
+
*
|
|
405
|
+
* @param name - Table/collection name to drop
|
|
406
|
+
*
|
|
407
|
+
* @example
|
|
408
|
+
* ```typescript
|
|
409
|
+
* await driver.dropTableIfExists("temp_data");
|
|
410
|
+
* ```
|
|
411
|
+
*/
|
|
412
|
+
dropTableIfExists(name: string): Promise<void>;
|
|
413
|
+
/**
|
|
414
|
+
* Drop all tables/collections in the current database.
|
|
415
|
+
*
|
|
416
|
+
* Use with extreme caution - this permanently deletes all tables and data.
|
|
417
|
+
* Typically used for `migrate:fresh` command or test suite resets.
|
|
418
|
+
*
|
|
419
|
+
* @example
|
|
420
|
+
* ```typescript
|
|
421
|
+
* // Reset entire database schema
|
|
422
|
+
* await driver.dropAllTables();
|
|
423
|
+
* await runMigrations();
|
|
424
|
+
* ```
|
|
425
|
+
*/
|
|
426
|
+
dropAllTables(): Promise<void>;
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Options for creating a database.
|
|
430
|
+
*/
|
|
431
|
+
export type CreateDatabaseOptions = {
|
|
432
|
+
/** Database encoding (PostgreSQL: UTF8, LATIN1, etc.) */
|
|
433
|
+
encoding?: string;
|
|
434
|
+
/** Template database (PostgreSQL) */
|
|
435
|
+
template?: string;
|
|
436
|
+
/** Locale/collation settings */
|
|
437
|
+
locale?: string;
|
|
438
|
+
/** Owner of the new database */
|
|
439
|
+
owner?: string;
|
|
440
|
+
};
|
|
441
|
+
/**
|
|
442
|
+
* Options for dropping a database.
|
|
443
|
+
*/
|
|
444
|
+
export type DropDatabaseOptions = {
|
|
445
|
+
/** Force drop even if there are active connections */
|
|
446
|
+
force?: boolean;
|
|
447
|
+
/** Skip error if database doesn't exist */
|
|
448
|
+
ifExists?: boolean;
|
|
449
|
+
};
|
|
450
|
+
//# sourceMappingURL=database-driver.contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-driver.contract.d.ts","sourceRoot":"","sources":["../../src/contracts/database-driver.contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,yCAAyC;AACzC,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,cAAc,GAAG,MAAM,CAAC;AAEhE,sDAAsD;AACtD,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAE/D,gEAAgE;AAChE,MAAM,WAAW,yBAAyB,CAAC,QAAQ,GAAG,OAAO;IAC3D,sEAAsE;IACtE,OAAO,EAAE,QAAQ,CAAC;IAClB,8BAA8B;IAC9B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,gCAAgC;IAChC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CAClC;AAED,+CAA+C;AAC/C,MAAM,MAAM,YAAY,CAAC,SAAS,GAAG,OAAO,IAAI;IAC9C,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,+CAA+C;AAC/C,MAAM,MAAM,YAAY,GAAG;IACzB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,uBAAuB;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAClC,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,uBAAuB,CAAC;IAE5C;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAEhD,kEAAkE;IAClE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAE9B,yDAAyD;IACzD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,qDAAqD;IACrD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,iCAAiC;IACjC,SAAS,CAAC,MAAM,GAAG,OAAO,KAAK,MAAM,CAAC;IAEtC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAElE;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEpE;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,oBAAoB,CAAC;IAErE,gEAAgE;IAChE,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAE5D,yDAAyD;IACzD,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB,2DAA2D;IAC3D,UAAU,CACR,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAE3B,iDAAiD;IACjD,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,gBAAgB,EACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB,sDAAsD;IACtD,UAAU,CACR,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,gBAAgB,EACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB,kEAAkE;IAClE,OAAO,CAAC,CAAC,GAAG,OAAO,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAErB,6GAA6G;IAC7G,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAErB;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,MAAM,CAAC,CAAC,GAAG,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEd;;;;;;;;;;;;;;;OAeG;IACH,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAErB,iEAAiE;IACjE,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,iDAAiD;IACjD,UAAU,CACR,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEjF,kDAAkD;IAClD,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAElE;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAExF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CG;IACH,WAAW,CAAC,CAAC,EACX,EAAE,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,CAAC,CAAC,CAAC,EAC3C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEd,kDAAkD;IAClD,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,EAAE,gBAAgB,EAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB,kEAAkE;IAClE,WAAW,IAAI,mBAAmB,CAAC;IAEnC,yDAAyD;IACzD,eAAe,IAAI,uBAAuB,CAAC;IAE3C;;;OAGG;IACH,gBAAgB,IAAI,OAAO,6BAA6B,EAAE,aAAa,CAAC;IAExE;;;;;;;OAOG;IACH,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAMlE;;;;;;;;;;;;;;;;;OAiBG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhF;;;;;;;;;;;;;;OAcG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE5E;;;;;;;;;;;;;OAaG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/C;;;;OAIG;IACH,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAMnC;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C;;;;;;;;;;;;OAYG;IACH,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,sDAAsD;IACtD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC"}
|