exisjs 0.5.9 → 0.5.11
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/dist/auth/index.d.ts +3 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +4 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/oauth/core.d.ts +96 -0
- package/dist/auth/oauth/core.d.ts.map +1 -0
- package/dist/auth/oauth/core.js +203 -0
- package/dist/auth/oauth/core.js.map +1 -0
- package/dist/auth/oauth/index.d.ts +45 -0
- package/dist/auth/oauth/index.d.ts.map +1 -0
- package/dist/auth/oauth/index.js +64 -0
- package/dist/auth/oauth/index.js.map +1 -0
- package/dist/auth/oauth/middleware.d.ts +63 -0
- package/dist/auth/oauth/middleware.d.ts.map +1 -0
- package/dist/auth/oauth/middleware.js +164 -0
- package/dist/auth/oauth/middleware.js.map +1 -0
- package/dist/auth/oauth/providers/custom.d.ts +41 -0
- package/dist/auth/oauth/providers/custom.d.ts.map +1 -0
- package/dist/auth/oauth/providers/custom.js +204 -0
- package/dist/auth/oauth/providers/custom.js.map +1 -0
- package/dist/auth/oauth/providers/discord.d.ts +23 -0
- package/dist/auth/oauth/providers/discord.d.ts.map +1 -0
- package/dist/auth/oauth/providers/discord.js +130 -0
- package/dist/auth/oauth/providers/discord.js.map +1 -0
- package/dist/auth/oauth/providers/facebook.d.ts +28 -0
- package/dist/auth/oauth/providers/facebook.d.ts.map +1 -0
- package/dist/auth/oauth/providers/facebook.js +124 -0
- package/dist/auth/oauth/providers/facebook.js.map +1 -0
- package/dist/auth/oauth/providers/github.d.ts +25 -0
- package/dist/auth/oauth/providers/github.d.ts.map +1 -0
- package/dist/auth/oauth/providers/github.js +132 -0
- package/dist/auth/oauth/providers/github.js.map +1 -0
- package/dist/auth/oauth/providers/google.d.ts +23 -0
- package/dist/auth/oauth/providers/google.d.ts.map +1 -0
- package/dist/auth/oauth/providers/google.js +134 -0
- package/dist/auth/oauth/providers/google.js.map +1 -0
- package/dist/auth/oauth/providers/microsoft.d.ts +28 -0
- package/dist/auth/oauth/providers/microsoft.d.ts.map +1 -0
- package/dist/auth/oauth/providers/microsoft.js +136 -0
- package/dist/auth/oauth/providers/microsoft.js.map +1 -0
- package/dist/auth/oauth/types.d.ts +158 -0
- package/dist/auth/oauth/types.d.ts.map +1 -0
- package/dist/auth/oauth/types.js +4 -0
- package/dist/auth/oauth/types.js.map +1 -0
- package/dist/auth/session.d.ts +4 -1
- package/dist/auth/session.d.ts.map +1 -1
- package/dist/auth/session.js +33 -5
- package/dist/auth/session.js.map +1 -1
- package/dist/cache/store.d.ts +11 -3
- package/dist/cache/store.d.ts.map +1 -1
- package/dist/cache/store.js +87 -19
- package/dist/cache/store.js.map +1 -1
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +4 -6
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/database/adapters/mongodb.d.ts +58 -0
- package/dist/database/adapters/mongodb.d.ts.map +1 -0
- package/dist/database/adapters/mongodb.js +264 -0
- package/dist/database/adapters/mongodb.js.map +1 -0
- package/dist/database/adapters/mysql.d.ts +27 -0
- package/dist/database/adapters/mysql.d.ts.map +1 -0
- package/dist/database/adapters/mysql.js +188 -0
- package/dist/database/adapters/mysql.js.map +1 -0
- package/dist/database/adapters/postgres.d.ts +28 -0
- package/dist/database/adapters/postgres.d.ts.map +1 -0
- package/dist/database/adapters/postgres.js +174 -0
- package/dist/database/adapters/postgres.js.map +1 -0
- package/dist/database/adapters/sqlite.d.ts +27 -0
- package/dist/database/adapters/sqlite.d.ts.map +1 -0
- package/dist/database/adapters/sqlite.js +149 -0
- package/dist/database/adapters/sqlite.js.map +1 -0
- package/dist/database/index.d.ts +42 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +58 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/manager.d.ts +114 -0
- package/dist/database/manager.d.ts.map +1 -0
- package/dist/database/manager.js +269 -0
- package/dist/database/manager.js.map +1 -0
- package/dist/database/migration.d.ts +57 -0
- package/dist/database/migration.d.ts.map +1 -0
- package/dist/database/migration.js +329 -0
- package/dist/database/migration.js.map +1 -0
- package/dist/database/query-builder.d.ts +89 -0
- package/dist/database/query-builder.d.ts.map +1 -0
- package/dist/database/query-builder.js +353 -0
- package/dist/database/query-builder.js.map +1 -0
- package/dist/database/types.d.ts +184 -0
- package/dist/database/types.d.ts.map +1 -0
- package/dist/database/types.js +4 -0
- package/dist/database/types.js.map +1 -0
- package/dist/docs/ARCHITECTURE.md +349 -0
- package/dist/docs/BENCHMARKS.md +36 -0
- package/dist/docs/README.md +34 -0
- package/dist/docs/content/README.md +44 -0
- package/dist/docs/content/adapters.mdx +199 -0
- package/dist/docs/content/cache.mdx +239 -0
- package/dist/docs/content/circuit-breaker.mdx +130 -0
- package/dist/docs/content/cli/commands.mdx +214 -0
- package/dist/docs/content/cli/overview.mdx +92 -0
- package/dist/docs/content/cli/usage.mdx +61 -0
- package/dist/docs/content/config.mdx +214 -0
- package/dist/docs/content/controllers.mdx +241 -0
- package/dist/docs/content/cron.mdx +109 -0
- package/dist/docs/content/database.mdx +209 -0
- package/dist/docs/content/dataloader.mdx +170 -0
- package/dist/docs/content/decorators.mdx +204 -0
- package/dist/docs/content/errors.mdx +344 -0
- package/dist/docs/content/gateways.mdx +376 -0
- package/dist/docs/content/installation.mdx +210 -0
- package/dist/docs/content/introduction.mdx +96 -0
- package/dist/docs/content/middleware.mdx +441 -0
- package/dist/docs/content/modules.mdx +144 -0
- package/dist/docs/content/oauth.mdx +179 -0
- package/dist/docs/content/providers.mdx +147 -0
- package/dist/docs/content/queues.mdx +177 -0
- package/dist/docs/content/requests.mdx +293 -0
- package/dist/docs/content/responses.mdx +271 -0
- package/dist/docs/content/routing.mdx +541 -0
- package/dist/docs/content/rpc.mdx +146 -0
- package/dist/docs/content/security.mdx +294 -0
- package/dist/docs/content/sse.mdx +159 -0
- package/dist/docs/content/structure.mdx +116 -0
- package/dist/docs/content/testing.mdx +139 -0
- package/dist/docs/content/validation.mdx +249 -0
- package/dist/docs/content/websockets.mdx +289 -0
- package/dist/docs/integrations/README.md +23 -0
- package/dist/docs/integrations/jwt.mdx +151 -0
- package/dist/docs/integrations/mongo.mdx +183 -0
- package/dist/docs/integrations/observability.mdx +125 -0
- package/dist/docs/integrations/openai.mdx +108 -0
- package/dist/docs/integrations/postgres.mdx +190 -0
- package/dist/docs/integrations/posthog.mdx +122 -0
- package/dist/docs/integrations/redis.mdx +141 -0
- package/dist/docs/integrations/resend.mdx +117 -0
- package/dist/docs/integrations/s3.mdx +122 -0
- package/dist/docs/integrations/swagger.mdx +113 -0
- package/dist/docs/reference/README.md +3 -0
- package/dist/docs/reference/adapters.mdx +130 -0
- package/dist/docs/reference/auth.mdx +183 -0
- package/dist/docs/reference/cache.mdx +132 -0
- package/dist/docs/reference/circuit-breaker.mdx +71 -0
- package/dist/docs/reference/config.mdx +118 -0
- package/dist/docs/reference/context.mdx +168 -0
- package/dist/docs/reference/dataloader.mdx +91 -0
- package/dist/docs/reference/decorators.mdx +293 -0
- package/dist/docs/reference/di.mdx +123 -0
- package/dist/docs/reference/error.mdx +170 -0
- package/dist/docs/reference/exis.mdx +124 -0
- package/dist/docs/reference/middleware.mdx +304 -0
- package/dist/docs/reference/plugin.mdx +113 -0
- package/dist/docs/reference/queue.mdx +155 -0
- package/dist/docs/reference/router.mdx +248 -0
- package/dist/docs/reference/sanitize.mdx +130 -0
- package/dist/docs/reference/storage.mdx +116 -0
- package/dist/docs/reference/swagger.mdx +132 -0
- package/dist/docs/reference/testing.mdx +145 -0
- package/dist/docs/reference/validator.mdx +186 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware/backpressure.d.ts.map +1 -1
- package/dist/middleware/backpressure.js +21 -12
- package/dist/middleware/backpressure.js.map +1 -1
- package/dist/middleware/cache.d.ts +6 -0
- package/dist/middleware/cache.d.ts.map +1 -1
- package/dist/middleware/cache.js +84 -28
- package/dist/middleware/cache.js.map +1 -1
- package/dist/middleware/idempotency.d.ts +4 -1
- package/dist/middleware/idempotency.d.ts.map +1 -1
- package/dist/middleware/idempotency.js +29 -4
- package/dist/middleware/idempotency.js.map +1 -1
- package/dist/middleware/ip-filter.d.ts.map +1 -1
- package/dist/middleware/ip-filter.js +16 -0
- package/dist/middleware/ip-filter.js.map +1 -1
- package/dist/middleware/rate-limit.d.ts.map +1 -1
- package/dist/middleware/rate-limit.js +29 -12
- package/dist/middleware/rate-limit.js.map +1 -1
- package/dist/queue/drivers/MemoryDriver.d.ts +6 -3
- package/dist/queue/drivers/MemoryDriver.d.ts.map +1 -1
- package/dist/queue/drivers/MemoryDriver.js +76 -23
- package/dist/queue/drivers/MemoryDriver.js.map +1 -1
- package/dist/server/bootstrapper.d.ts +3 -0
- package/dist/server/bootstrapper.d.ts.map +1 -1
- package/dist/server/bootstrapper.js +56 -8
- package/dist/server/bootstrapper.js.map +1 -1
- package/dist/server/bun-adapter.d.ts +2 -0
- package/dist/server/bun-adapter.d.ts.map +1 -1
- package/dist/server/bun-adapter.js +23 -12
- package/dist/server/bun-adapter.js.map +1 -1
- package/dist/server/request-handler.d.ts +0 -2
- package/dist/server/request-handler.d.ts.map +1 -1
- package/dist/server/request-handler.js +2 -24
- package/dist/server/request-handler.js.map +1 -1
- package/dist/server/request.d.ts.map +1 -1
- package/dist/server/request.js +24 -11
- package/dist/server/request.js.map +1 -1
- package/dist/server/uws-adapter.d.ts +80 -0
- package/dist/server/uws-adapter.d.ts.map +1 -0
- package/dist/server/uws-adapter.js +357 -0
- package/dist/server/uws-adapter.js.map +1 -0
- package/dist/server/ws-orchestrator.d.ts +1 -0
- package/dist/server/ws-orchestrator.d.ts.map +1 -1
- package/dist/server/ws-orchestrator.js +83 -0
- package/dist/server/ws-orchestrator.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/validator/tex.d.ts +21 -16
- package/dist/validator/tex.d.ts.map +1 -1
- package/dist/validator/tex.js.map +1 -1
- package/package.json +11 -3
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MongoDB Database Adapter.
|
|
3
|
+
*
|
|
4
|
+
* Uses the `mongodb` npm package for native MongoDB driver support.
|
|
5
|
+
* Maps the relational-style DatabaseAdapter interface to document-oriented operations.
|
|
6
|
+
*
|
|
7
|
+
* For MongoDB, `query()` executes raw commands or aggregation pipelines,
|
|
8
|
+
* and `execute()` handles insert/update/delete operations.
|
|
9
|
+
*
|
|
10
|
+
* Peer Dependencies required:
|
|
11
|
+
* npm install mongodb
|
|
12
|
+
*/
|
|
13
|
+
import type { DatabaseAdapter, DatabaseConfig, QueryResult, ExecuteResult, Transaction } from '../types';
|
|
14
|
+
export declare class MongodbAdapter implements DatabaseAdapter {
|
|
15
|
+
readonly dialect: "mongodb";
|
|
16
|
+
private client;
|
|
17
|
+
private database;
|
|
18
|
+
private config;
|
|
19
|
+
constructor(config: DatabaseConfig);
|
|
20
|
+
connect(): Promise<void>;
|
|
21
|
+
disconnect(): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Execute a MongoDB find query.
|
|
24
|
+
*
|
|
25
|
+
* For MongoDB, `sql` is treated as a JSON command string:
|
|
26
|
+
* `{ "collection": "users", "filter": { "role": "admin" }, "options": { "limit": 10 } }`
|
|
27
|
+
*
|
|
28
|
+
* Or simply pass the collection name as `sql` and the filter as `params[0]`:
|
|
29
|
+
* query('users', [{ role: 'admin' }])
|
|
30
|
+
*/
|
|
31
|
+
query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<QueryResult<T>>;
|
|
32
|
+
/**
|
|
33
|
+
* Execute a MongoDB write operation.
|
|
34
|
+
*
|
|
35
|
+
* The `sql` parameter is a JSON command string:
|
|
36
|
+
* `{ "collection": "users", "operation": "insertOne", "document": { ... } }`
|
|
37
|
+
* `{ "collection": "users", "operation": "updateOne", "filter": { ... }, "update": { ... } }`
|
|
38
|
+
* `{ "collection": "users", "operation": "deleteOne", "filter": { ... } }`
|
|
39
|
+
*
|
|
40
|
+
* Or use the shorthand: execute('users.insertOne', [document])
|
|
41
|
+
*/
|
|
42
|
+
execute(sql: string, params?: unknown[]): Promise<ExecuteResult>;
|
|
43
|
+
transaction<T>(fn: (tx: Transaction) => Promise<T>): Promise<T>;
|
|
44
|
+
isHealthy(): Promise<boolean>;
|
|
45
|
+
getRawClient(): unknown;
|
|
46
|
+
/**
|
|
47
|
+
* Get the raw MongoDB database instance for native operations.
|
|
48
|
+
*/
|
|
49
|
+
getDatabase(): unknown;
|
|
50
|
+
private executeJsonCommand;
|
|
51
|
+
private executeOperation;
|
|
52
|
+
private ensureConnected;
|
|
53
|
+
private buildConnectionUrl;
|
|
54
|
+
private extractDbName;
|
|
55
|
+
private logQuery;
|
|
56
|
+
private log;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=mongodb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../../src/database/adapters/mongodb.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,EACZ,MAAM,UAAU,CAAA;AAEjB,qBAAa,cAAe,YAAW,eAAe;IACpD,QAAQ,CAAC,OAAO,EAAG,SAAS,CAAS;IAErC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,cAAc;IAI5B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAiDxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IASjC;;;;;;;;OAQG;IACG,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,EAAO,GACrB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAuB1B;;;;;;;;;OASG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAsBpE,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAwD/D,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAUnC,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,WAAW,IAAI,OAAO;YAMR,kBAAkB;YAWlB,gBAAgB;IA2C9B,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,GAAG;CAMZ"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MongoDB Database Adapter.
|
|
4
|
+
*
|
|
5
|
+
* Uses the `mongodb` npm package for native MongoDB driver support.
|
|
6
|
+
* Maps the relational-style DatabaseAdapter interface to document-oriented operations.
|
|
7
|
+
*
|
|
8
|
+
* For MongoDB, `query()` executes raw commands or aggregation pipelines,
|
|
9
|
+
* and `execute()` handles insert/update/delete operations.
|
|
10
|
+
*
|
|
11
|
+
* Peer Dependencies required:
|
|
12
|
+
* npm install mongodb
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.MongodbAdapter = void 0;
|
|
16
|
+
class MongodbAdapter {
|
|
17
|
+
constructor(config) {
|
|
18
|
+
this.dialect = 'mongodb';
|
|
19
|
+
this.client = null;
|
|
20
|
+
this.database = null;
|
|
21
|
+
this.config = config;
|
|
22
|
+
}
|
|
23
|
+
async connect() {
|
|
24
|
+
let MongoClient;
|
|
25
|
+
try {
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
27
|
+
MongoClient = require('mongodb').MongoClient;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
throw new Error('Missing dependency. Please run: npm install mongodb');
|
|
31
|
+
}
|
|
32
|
+
const url = this.config.url || this.buildConnectionUrl();
|
|
33
|
+
const poolConfig = this.config.pool || {};
|
|
34
|
+
this.client = new MongoClient(url, {
|
|
35
|
+
maxPoolSize: poolConfig.max ?? 10,
|
|
36
|
+
minPoolSize: poolConfig.min ?? 2,
|
|
37
|
+
maxIdleTimeMS: poolConfig.idleTimeoutMs ?? 30000,
|
|
38
|
+
connectTimeoutMS: this.config.connectTimeoutMs ?? 5000,
|
|
39
|
+
serverSelectionTimeoutMS: this.config.connectTimeoutMs ?? 5000,
|
|
40
|
+
tls: this.config.ssl === true ? true : undefined,
|
|
41
|
+
...(typeof this.config.ssl === 'object'
|
|
42
|
+
? {
|
|
43
|
+
tls: true,
|
|
44
|
+
tlsCAFile: typeof this.config.ssl.ca === 'string'
|
|
45
|
+
? this.config.ssl.ca
|
|
46
|
+
: undefined,
|
|
47
|
+
tlsCertificateKeyFile: typeof this.config.ssl.key === 'string'
|
|
48
|
+
? this.config.ssl.key
|
|
49
|
+
: undefined,
|
|
50
|
+
}
|
|
51
|
+
: {}),
|
|
52
|
+
});
|
|
53
|
+
await this.client.connect();
|
|
54
|
+
const dbName = this.config.database || this.extractDbName(url);
|
|
55
|
+
if (!dbName) {
|
|
56
|
+
throw new Error('MongoDB requires a database name. Provide it via `database` config or in the connection URL.');
|
|
57
|
+
}
|
|
58
|
+
this.database = this.client.db(dbName);
|
|
59
|
+
this.log('MongoDB connection established');
|
|
60
|
+
}
|
|
61
|
+
async disconnect() {
|
|
62
|
+
if (this.client) {
|
|
63
|
+
await this.client.close();
|
|
64
|
+
this.client = null;
|
|
65
|
+
this.database = null;
|
|
66
|
+
this.log('MongoDB connection closed');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Execute a MongoDB find query.
|
|
71
|
+
*
|
|
72
|
+
* For MongoDB, `sql` is treated as a JSON command string:
|
|
73
|
+
* `{ "collection": "users", "filter": { "role": "admin" }, "options": { "limit": 10 } }`
|
|
74
|
+
*
|
|
75
|
+
* Or simply pass the collection name as `sql` and the filter as `params[0]`:
|
|
76
|
+
* query('users', [{ role: 'admin' }])
|
|
77
|
+
*/
|
|
78
|
+
async query(sql, params = []) {
|
|
79
|
+
this.ensureConnected();
|
|
80
|
+
this.logQuery(sql, params);
|
|
81
|
+
// If sql looks like a JSON command
|
|
82
|
+
if (sql.trim().startsWith('{')) {
|
|
83
|
+
const cmd = JSON.parse(sql);
|
|
84
|
+
const collection = this.database.collection(cmd.collection);
|
|
85
|
+
const filter = cmd.filter || {};
|
|
86
|
+
const options = cmd.options || {};
|
|
87
|
+
const rows = (await collection.find(filter, options).toArray());
|
|
88
|
+
return { rows, rowCount: rows.length, fields: [] };
|
|
89
|
+
}
|
|
90
|
+
// Otherwise, treat sql as collection name, params[0] as filter, params[1] as options
|
|
91
|
+
const collection = this.database.collection(sql);
|
|
92
|
+
const filter = params[0] || {};
|
|
93
|
+
const options = params[1] || {};
|
|
94
|
+
const rows = (await collection.find(filter, options).toArray());
|
|
95
|
+
return { rows, rowCount: rows.length, fields: [] };
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Execute a MongoDB write operation.
|
|
99
|
+
*
|
|
100
|
+
* The `sql` parameter is a JSON command string:
|
|
101
|
+
* `{ "collection": "users", "operation": "insertOne", "document": { ... } }`
|
|
102
|
+
* `{ "collection": "users", "operation": "updateOne", "filter": { ... }, "update": { ... } }`
|
|
103
|
+
* `{ "collection": "users", "operation": "deleteOne", "filter": { ... } }`
|
|
104
|
+
*
|
|
105
|
+
* Or use the shorthand: execute('users.insertOne', [document])
|
|
106
|
+
*/
|
|
107
|
+
async execute(sql, params = []) {
|
|
108
|
+
this.ensureConnected();
|
|
109
|
+
this.logQuery(sql, params);
|
|
110
|
+
// JSON command mode
|
|
111
|
+
if (sql.trim().startsWith('{')) {
|
|
112
|
+
return this.executeJsonCommand(sql);
|
|
113
|
+
}
|
|
114
|
+
// Shorthand mode: 'collection.operation'
|
|
115
|
+
const dotIndex = sql.indexOf('.');
|
|
116
|
+
if (dotIndex !== -1) {
|
|
117
|
+
const collectionName = sql.substring(0, dotIndex);
|
|
118
|
+
const operation = sql.substring(dotIndex + 1);
|
|
119
|
+
return this.executeOperation(collectionName, operation, params);
|
|
120
|
+
}
|
|
121
|
+
throw new Error(`MongoDB execute: Unrecognized command format. Use JSON or 'collection.operation' syntax.`);
|
|
122
|
+
}
|
|
123
|
+
async transaction(fn) {
|
|
124
|
+
this.ensureConnected();
|
|
125
|
+
const session = this.client.startSession();
|
|
126
|
+
try {
|
|
127
|
+
let result;
|
|
128
|
+
await session.withTransaction(async () => {
|
|
129
|
+
const tx = {
|
|
130
|
+
query: async (queryStr, params = []) => {
|
|
131
|
+
// For transactions, inject session into the query
|
|
132
|
+
return this.query(queryStr, params);
|
|
133
|
+
},
|
|
134
|
+
execute: async (queryStr, params = []) => {
|
|
135
|
+
return this.execute(queryStr, params);
|
|
136
|
+
},
|
|
137
|
+
savepoint: async () => {
|
|
138
|
+
// MongoDB does not support savepoints
|
|
139
|
+
throw new Error('MongoDB does not support savepoints within transactions');
|
|
140
|
+
},
|
|
141
|
+
rollbackTo: async () => {
|
|
142
|
+
throw new Error('MongoDB does not support savepoints within transactions');
|
|
143
|
+
},
|
|
144
|
+
commit: async () => {
|
|
145
|
+
// Handled by session.withTransaction
|
|
146
|
+
},
|
|
147
|
+
rollback: async () => {
|
|
148
|
+
await session.abortTransaction();
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
result = await fn(tx);
|
|
152
|
+
});
|
|
153
|
+
return result;
|
|
154
|
+
}
|
|
155
|
+
finally {
|
|
156
|
+
await session.endSession();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
async isHealthy() {
|
|
160
|
+
try {
|
|
161
|
+
this.ensureConnected();
|
|
162
|
+
await this.database.command({ ping: 1 });
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
getRawClient() {
|
|
170
|
+
return this.client;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get the raw MongoDB database instance for native operations.
|
|
174
|
+
*/
|
|
175
|
+
getDatabase() {
|
|
176
|
+
return this.database;
|
|
177
|
+
}
|
|
178
|
+
// ─── Private Helpers ───────────────────────────────────────────────────────
|
|
179
|
+
async executeJsonCommand(json) {
|
|
180
|
+
const cmd = JSON.parse(json);
|
|
181
|
+
const collection = this.database.collection(cmd.collection);
|
|
182
|
+
return this.executeOperation(cmd.collection, cmd.operation, [cmd.document || cmd.filter, cmd.update].filter(Boolean), collection);
|
|
183
|
+
}
|
|
184
|
+
async executeOperation(collectionName, operation, params, collection) {
|
|
185
|
+
const coll = collection || this.database.collection(collectionName);
|
|
186
|
+
switch (operation) {
|
|
187
|
+
case 'insertOne': {
|
|
188
|
+
const result = await coll.insertOne(params[0]);
|
|
189
|
+
return { affectedRows: 1, insertId: result.insertedId?.toString() };
|
|
190
|
+
}
|
|
191
|
+
case 'insertMany': {
|
|
192
|
+
const docs = params[0];
|
|
193
|
+
const result = await coll.insertMany(docs);
|
|
194
|
+
return { affectedRows: result.insertedCount };
|
|
195
|
+
}
|
|
196
|
+
case 'updateOne': {
|
|
197
|
+
const result = await coll.updateOne(params[0], params[1]);
|
|
198
|
+
return { affectedRows: result.modifiedCount };
|
|
199
|
+
}
|
|
200
|
+
case 'updateMany': {
|
|
201
|
+
const result = await coll.updateMany(params[0], params[1]);
|
|
202
|
+
return { affectedRows: result.modifiedCount };
|
|
203
|
+
}
|
|
204
|
+
case 'deleteOne': {
|
|
205
|
+
const result = await coll.deleteOne(params[0]);
|
|
206
|
+
return { affectedRows: result.deletedCount };
|
|
207
|
+
}
|
|
208
|
+
case 'deleteMany': {
|
|
209
|
+
const result = await coll.deleteMany(params[0]);
|
|
210
|
+
return { affectedRows: result.deletedCount };
|
|
211
|
+
}
|
|
212
|
+
case 'replaceOne': {
|
|
213
|
+
const result = await coll.replaceOne(params[0], params[1]);
|
|
214
|
+
return { affectedRows: result.modifiedCount };
|
|
215
|
+
}
|
|
216
|
+
default:
|
|
217
|
+
throw new Error(`MongoDB: Unsupported operation '${operation}'`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
ensureConnected() {
|
|
221
|
+
if (!this.client || !this.database) {
|
|
222
|
+
throw new Error('MongoDB adapter is not connected. Call connect() first.');
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
buildConnectionUrl() {
|
|
226
|
+
const { host, port, username, password, authSource } = this.config;
|
|
227
|
+
if (!host) {
|
|
228
|
+
throw new Error('MongoDB requires either a `url` or `host` in the config.');
|
|
229
|
+
}
|
|
230
|
+
const auth = username
|
|
231
|
+
? password
|
|
232
|
+
? `${encodeURIComponent(username)}:${encodeURIComponent(password)}@`
|
|
233
|
+
: `${encodeURIComponent(username)}@`
|
|
234
|
+
: '';
|
|
235
|
+
const authSrc = authSource ? `?authSource=${authSource}` : '';
|
|
236
|
+
return `mongodb://${auth}${host}:${port || 27017}${authSrc}`;
|
|
237
|
+
}
|
|
238
|
+
extractDbName(url) {
|
|
239
|
+
try {
|
|
240
|
+
const parsed = new URL(url);
|
|
241
|
+
const path = parsed.pathname;
|
|
242
|
+
return path && path.length > 1 ? path.substring(1) : undefined;
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
return undefined;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
logQuery(sql, params) {
|
|
249
|
+
if (!this.config.logging)
|
|
250
|
+
return;
|
|
251
|
+
if (typeof this.config.logging === 'function') {
|
|
252
|
+
this.config.logging(sql, params);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
log(message) {
|
|
256
|
+
if (!this.config.logging)
|
|
257
|
+
return;
|
|
258
|
+
if (typeof this.config.logging === 'function') {
|
|
259
|
+
this.config.logging(message);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
exports.MongodbAdapter = MongodbAdapter;
|
|
264
|
+
//# sourceMappingURL=mongodb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongodb.js","sourceRoot":"","sources":["../../../src/database/adapters/mongodb.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MySQL Database Adapter.
|
|
3
|
+
*
|
|
4
|
+
* Uses the `mysql2` npm package for high-performance prepared statements,
|
|
5
|
+
* connection pooling, and transaction support.
|
|
6
|
+
*
|
|
7
|
+
* Peer Dependencies required:
|
|
8
|
+
* npm install mysql2
|
|
9
|
+
*/
|
|
10
|
+
import type { DatabaseAdapter, DatabaseConfig, QueryResult, ExecuteResult, Transaction } from '../types';
|
|
11
|
+
export declare class MysqlAdapter implements DatabaseAdapter {
|
|
12
|
+
readonly dialect: "mysql";
|
|
13
|
+
private pool;
|
|
14
|
+
private config;
|
|
15
|
+
constructor(config: DatabaseConfig);
|
|
16
|
+
connect(): Promise<void>;
|
|
17
|
+
disconnect(): Promise<void>;
|
|
18
|
+
query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<QueryResult<T>>;
|
|
19
|
+
execute(sql: string, params?: unknown[]): Promise<ExecuteResult>;
|
|
20
|
+
transaction<T>(fn: (tx: Transaction) => Promise<T>): Promise<T>;
|
|
21
|
+
isHealthy(): Promise<boolean>;
|
|
22
|
+
getRawClient(): unknown;
|
|
23
|
+
private ensureConnected;
|
|
24
|
+
private logQuery;
|
|
25
|
+
private log;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=mysql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../../src/database/adapters/mysql.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,EAEZ,MAAM,UAAU,CAAA;AAEjB,qBAAa,YAAa,YAAW,eAAe;IAClD,QAAQ,CAAC,OAAO,EAAG,OAAO,CAAS;IAEnC,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,cAAc;IAI5B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqDxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,EAAO,GACrB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAqBpB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAYpE,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAoE/D,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAUnC,YAAY,IAAI,OAAO;IAMvB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,GAAG;CAMZ"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MySQL Database Adapter.
|
|
4
|
+
*
|
|
5
|
+
* Uses the `mysql2` npm package for high-performance prepared statements,
|
|
6
|
+
* connection pooling, and transaction support.
|
|
7
|
+
*
|
|
8
|
+
* Peer Dependencies required:
|
|
9
|
+
* npm install mysql2
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.MysqlAdapter = void 0;
|
|
13
|
+
class MysqlAdapter {
|
|
14
|
+
constructor(config) {
|
|
15
|
+
this.dialect = 'mysql';
|
|
16
|
+
this.pool = null;
|
|
17
|
+
this.config = config;
|
|
18
|
+
}
|
|
19
|
+
async connect() {
|
|
20
|
+
let mysql;
|
|
21
|
+
try {
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
23
|
+
mysql = require('mysql2/promise');
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
throw new Error('Missing dependency. Please run: npm install mysql2');
|
|
27
|
+
}
|
|
28
|
+
const poolConfig = this.config.pool || {};
|
|
29
|
+
if (this.config.url) {
|
|
30
|
+
this.pool = mysql.createPool({
|
|
31
|
+
uri: this.config.url,
|
|
32
|
+
waitForConnections: true,
|
|
33
|
+
connectionLimit: poolConfig.max ?? 10,
|
|
34
|
+
idleTimeout: poolConfig.idleTimeoutMs ?? 30000,
|
|
35
|
+
connectTimeout: this.config.connectTimeoutMs ?? 5000,
|
|
36
|
+
ssl: this.config.ssl === true
|
|
37
|
+
? {}
|
|
38
|
+
: typeof this.config.ssl === 'object'
|
|
39
|
+
? this.config.ssl
|
|
40
|
+
: undefined,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this.pool = mysql.createPool({
|
|
45
|
+
host: this.config.host || 'localhost',
|
|
46
|
+
port: this.config.port || 3306,
|
|
47
|
+
database: this.config.database,
|
|
48
|
+
user: this.config.username,
|
|
49
|
+
password: this.config.password,
|
|
50
|
+
waitForConnections: true,
|
|
51
|
+
connectionLimit: poolConfig.max ?? 10,
|
|
52
|
+
idleTimeout: poolConfig.idleTimeoutMs ?? 30000,
|
|
53
|
+
connectTimeout: this.config.connectTimeoutMs ?? 5000,
|
|
54
|
+
ssl: this.config.ssl === true
|
|
55
|
+
? {}
|
|
56
|
+
: typeof this.config.ssl === 'object'
|
|
57
|
+
? this.config.ssl
|
|
58
|
+
: undefined,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
// Test the connection
|
|
62
|
+
const conn = await this.pool.getConnection();
|
|
63
|
+
conn.release();
|
|
64
|
+
this.log('MySQL connection pool established');
|
|
65
|
+
}
|
|
66
|
+
async disconnect() {
|
|
67
|
+
if (this.pool) {
|
|
68
|
+
await this.pool.end();
|
|
69
|
+
this.pool = null;
|
|
70
|
+
this.log('MySQL connection pool closed');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async query(sql, params = []) {
|
|
74
|
+
this.ensureConnected();
|
|
75
|
+
this.logQuery(sql, params);
|
|
76
|
+
const [rows, columns] = await this.pool.execute(sql, params);
|
|
77
|
+
const fields = Array.isArray(columns)
|
|
78
|
+
? columns.map((col) => ({
|
|
79
|
+
name: col.name,
|
|
80
|
+
dataType: col.type?.toString(),
|
|
81
|
+
tableId: col.table?.length ? undefined : undefined,
|
|
82
|
+
}))
|
|
83
|
+
: [];
|
|
84
|
+
return {
|
|
85
|
+
rows: rows,
|
|
86
|
+
rowCount: Array.isArray(rows) ? rows.length : 0,
|
|
87
|
+
fields,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
async execute(sql, params = []) {
|
|
91
|
+
this.ensureConnected();
|
|
92
|
+
this.logQuery(sql, params);
|
|
93
|
+
const [result] = await this.pool.execute(sql, params);
|
|
94
|
+
return {
|
|
95
|
+
affectedRows: result.affectedRows ?? 0,
|
|
96
|
+
insertId: result.insertId ?? undefined,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
async transaction(fn) {
|
|
100
|
+
this.ensureConnected();
|
|
101
|
+
const conn = await this.pool.getConnection();
|
|
102
|
+
try {
|
|
103
|
+
await conn.beginTransaction();
|
|
104
|
+
const tx = {
|
|
105
|
+
query: async (queryStr, params = []) => {
|
|
106
|
+
this.logQuery(queryStr, params);
|
|
107
|
+
const [rows, columns] = await conn.execute(queryStr, params);
|
|
108
|
+
const fields = Array.isArray(columns)
|
|
109
|
+
? columns.map((col) => ({
|
|
110
|
+
name: col.name,
|
|
111
|
+
dataType: col.type?.toString(),
|
|
112
|
+
}))
|
|
113
|
+
: [];
|
|
114
|
+
return {
|
|
115
|
+
rows: rows,
|
|
116
|
+
rowCount: Array.isArray(rows) ? rows.length : 0,
|
|
117
|
+
fields,
|
|
118
|
+
};
|
|
119
|
+
},
|
|
120
|
+
execute: async (queryStr, params = []) => {
|
|
121
|
+
this.logQuery(queryStr, params);
|
|
122
|
+
const [result] = await conn.execute(queryStr, params);
|
|
123
|
+
return {
|
|
124
|
+
affectedRows: result.affectedRows ?? 0,
|
|
125
|
+
insertId: result.insertId ?? undefined,
|
|
126
|
+
};
|
|
127
|
+
},
|
|
128
|
+
savepoint: async (name) => {
|
|
129
|
+
await conn.execute(`SAVEPOINT ${name}`);
|
|
130
|
+
},
|
|
131
|
+
rollbackTo: async (name) => {
|
|
132
|
+
await conn.execute(`ROLLBACK TO SAVEPOINT ${name}`);
|
|
133
|
+
},
|
|
134
|
+
commit: async () => {
|
|
135
|
+
await conn.commit();
|
|
136
|
+
},
|
|
137
|
+
rollback: async () => {
|
|
138
|
+
await conn.rollback();
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
const result = await fn(tx);
|
|
142
|
+
await conn.commit();
|
|
143
|
+
return result;
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
await conn.rollback();
|
|
147
|
+
throw err;
|
|
148
|
+
}
|
|
149
|
+
finally {
|
|
150
|
+
conn.release();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
async isHealthy() {
|
|
154
|
+
try {
|
|
155
|
+
this.ensureConnected();
|
|
156
|
+
await this.pool.execute('SELECT 1');
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
getRawClient() {
|
|
164
|
+
return this.pool;
|
|
165
|
+
}
|
|
166
|
+
// ─── Private Helpers ───────────────────────────────────────────────────────
|
|
167
|
+
ensureConnected() {
|
|
168
|
+
if (!this.pool) {
|
|
169
|
+
throw new Error('MySQL adapter is not connected. Call connect() first.');
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
logQuery(sql, params) {
|
|
173
|
+
if (!this.config.logging)
|
|
174
|
+
return;
|
|
175
|
+
if (typeof this.config.logging === 'function') {
|
|
176
|
+
this.config.logging(sql, params);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
log(message) {
|
|
180
|
+
if (!this.config.logging)
|
|
181
|
+
return;
|
|
182
|
+
if (typeof this.config.logging === 'function') {
|
|
183
|
+
this.config.logging(message);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
exports.MysqlAdapter = MysqlAdapter;
|
|
188
|
+
//# sourceMappingURL=mysql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../../src/database/adapters/mysql.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PostgreSQL Database Adapter.
|
|
3
|
+
*
|
|
4
|
+
* Uses the `postgres` (postgres.js) npm package for high-performance connection pooling,
|
|
5
|
+
* parameterized queries, and transaction support.
|
|
6
|
+
*
|
|
7
|
+
* Peer Dependencies required:
|
|
8
|
+
* npm install postgres
|
|
9
|
+
*/
|
|
10
|
+
import type { DatabaseAdapter, DatabaseConfig, QueryResult, ExecuteResult, Transaction } from '../types';
|
|
11
|
+
export declare class PostgresAdapter implements DatabaseAdapter {
|
|
12
|
+
readonly dialect: "postgres";
|
|
13
|
+
private client;
|
|
14
|
+
private config;
|
|
15
|
+
constructor(config: DatabaseConfig);
|
|
16
|
+
connect(): Promise<void>;
|
|
17
|
+
disconnect(): Promise<void>;
|
|
18
|
+
query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<QueryResult<T>>;
|
|
19
|
+
execute(sql: string, params?: unknown[]): Promise<ExecuteResult>;
|
|
20
|
+
transaction<T>(fn: (tx: Transaction) => Promise<T>): Promise<T>;
|
|
21
|
+
isHealthy(): Promise<boolean>;
|
|
22
|
+
getRawClient(): unknown;
|
|
23
|
+
private ensureConnected;
|
|
24
|
+
private buildConnectionUrl;
|
|
25
|
+
private logQuery;
|
|
26
|
+
private log;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=postgres.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/database/adapters/postgres.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,EAEZ,MAAM,UAAU,CAAA;AAEjB,qBAAa,eAAgB,YAAW,eAAe;IACrD,QAAQ,CAAC,OAAO,EAAG,UAAU,CAAS;IAEtC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,cAAc;IAI5B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqCxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,EAAO,GACrB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAqBpB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAYpE,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA0D/D,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAUnC,YAAY,IAAI,OAAO;IAMvB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,GAAG;CAMZ"}
|