@spinajs/orm-postgres 2.0.528

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,385 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ /* eslint-disable security/detect-object-injection */
11
+ import { NewInstance, Inject, Container, Autoinject } from '@spinajs/di';
12
+ import { NotSupported } from '@spinajs/exceptions';
13
+ import { Logger, Log } from '@spinajs/log';
14
+ import { RawQuery, OnDuplicateQueryBuilder, InsertQueryBuilder, TableExistsQueryBuilder, OrmException, LimitQueryCompiler, LimitBuilder, CreateDatabaseCompiler, CreateDatabaseQueryBuilder, IdentifierQuoter, ColumnQueryCompiler, TableAliasCompiler } from '@spinajs/orm';
15
+ import { SqlInsertQueryCompiler, SqlColumnQueryCompiler, SqlAlterColumnQueryCompiler, SqlOnDuplicateQueryCompiler, SqlDefaultValueBuilder, escapeStringLiteral, assertCharsetName } from '@spinajs/orm-sql';
16
+ import _ from 'lodash';
17
+ let PostgresTableExistsCompiler = class PostgresTableExistsCompiler {
18
+ constructor(builder) {
19
+ this.builder = builder;
20
+ if (builder === null) {
21
+ throw new Error('table exists query builder cannot be null');
22
+ }
23
+ }
24
+ compile() {
25
+ // `Database` on this builder plays the role a schema plays in postgres: one server
26
+ // database holds many schemas, and a connection cannot ask about another database at
27
+ // all. Unqualified checks go against current_schema() — the head of search_path —
28
+ // which is where an unqualified CREATE TABLE would land the table.
29
+ if (this.builder.Database) {
30
+ return {
31
+ bindings: [this.builder.Table, this.builder.Database],
32
+ expression: `SELECT table_name FROM information_schema.tables WHERE table_name = ? AND table_schema = ? LIMIT 1`,
33
+ };
34
+ }
35
+ return {
36
+ bindings: [this.builder.Table],
37
+ expression: `SELECT table_name FROM information_schema.tables WHERE table_name = ? AND table_schema = current_schema() LIMIT 1`,
38
+ };
39
+ }
40
+ };
41
+ PostgresTableExistsCompiler = __decorate([
42
+ NewInstance(),
43
+ __metadata("design:paramtypes", [TableExistsQueryBuilder])
44
+ ], PostgresTableExistsCompiler);
45
+ export { PostgresTableExistsCompiler };
46
+ /**
47
+ * LIMIT / OFFSET the postgres way. The shared compiler emits MySQL's
48
+ * `LIMIT 18446744073709551615` for an offset without a limit — a literal larger than
49
+ * BIGINT, which postgres rejects outright. Postgres accepts a bare OFFSET, so the
50
+ * workaround is simply dropped.
51
+ */
52
+ let PostgresLimitQueryCompiler = class PostgresLimitQueryCompiler extends LimitQueryCompiler {
53
+ constructor(builder) {
54
+ super();
55
+ if (!builder) {
56
+ throw new Error('builder cannot be null or undefined');
57
+ }
58
+ this._builder = builder;
59
+ }
60
+ compile() {
61
+ const limits = this._builder.getLimits();
62
+ const bindings = [];
63
+ let stmt = '';
64
+ if ((limits.limit ?? 0) > 0) {
65
+ stmt += ` LIMIT ?`;
66
+ bindings.push(limits.limit);
67
+ }
68
+ if ((limits.offset ?? 0) > 0) {
69
+ stmt += ` OFFSET ?`;
70
+ bindings.push(limits.offset);
71
+ }
72
+ return {
73
+ bindings,
74
+ expression: stmt,
75
+ };
76
+ }
77
+ };
78
+ PostgresLimitQueryCompiler = __decorate([
79
+ NewInstance(),
80
+ __metadata("design:paramtypes", [LimitBuilder])
81
+ ], PostgresLimitQueryCompiler);
82
+ export { PostgresLimitQueryCompiler };
83
+ /**
84
+ * Upsert, spelled `ON CONFLICT (...) DO UPDATE`. MySQL's `ON DUPLICATE KEY UPDATE` and its
85
+ * `VALUES(col)` reference are both rejected by postgres; the row that failed to insert is
86
+ * reachable as `EXCLUDED` instead, which — like VALUES(col) — applies each conflicting
87
+ * row's own values in a multi row upsert and needs no bindings.
88
+ */
89
+ let PostgresOnDuplicateQueryCompiler = class PostgresOnDuplicateQueryCompiler extends SqlOnDuplicateQueryCompiler {
90
+ constructor(builder) {
91
+ super(builder);
92
+ }
93
+ compile() {
94
+ if (this._builder.getColumn().length === 0) {
95
+ throw new OrmException(`no unique or primary key columns defined in table ${this._builder.getParent().Table}`);
96
+ }
97
+ const conflictTarget = this._builder
98
+ .getColumn()
99
+ .map((c) => this.Quoter.quote(c))
100
+ .join(',');
101
+ const columns = this._builder
102
+ .getColumnsToUpdate()
103
+ .map((c) => {
104
+ if (_.isString(c)) {
105
+ return `${this.Quoter.quote(c)} = EXCLUDED.${this.Quoter.quote(c)}`;
106
+ }
107
+ else {
108
+ return c.Query;
109
+ }
110
+ })
111
+ .join(',');
112
+ const bindings = _.flatMap(this._builder.getColumnsToUpdate(), (c) => {
113
+ return _.isString(c) ? [] : c.Bindings ?? [];
114
+ });
115
+ const returning = this._builder.getReturning();
116
+ const returningExpression = returning.length === 0 ? '' : ` RETURNING ${returning[0] === '*' ? '*' : returning.map((c) => this.Quoter.quote(c)).join(',')}`;
117
+ return {
118
+ bindings,
119
+ expression: `ON CONFLICT (${conflictTarget}) DO UPDATE SET ${columns}${returningExpression}`,
120
+ };
121
+ }
122
+ };
123
+ PostgresOnDuplicateQueryCompiler = __decorate([
124
+ NewInstance(),
125
+ __metadata("design:paramtypes", [OnDuplicateQueryBuilder])
126
+ ], PostgresOnDuplicateQueryCompiler);
127
+ export { PostgresOnDuplicateQueryCompiler };
128
+ let PostgresInsertQueryCompiler = class PostgresInsertQueryCompiler extends SqlInsertQueryCompiler {
129
+ constructor(container, builder) {
130
+ super(container, builder);
131
+ }
132
+ compile() {
133
+ const into = this.into();
134
+ const columns = this.columns();
135
+ const values = this.values();
136
+ const upsort = this.upsort();
137
+ const ignore = this.ignore();
138
+ const returning = this.returning();
139
+ return {
140
+ bindings: values.bindings.concat(upsort.bindings),
141
+ expression: `${into} ${columns} ${values.data}${ignore} ${upsort.expression}${returning}`.trim(),
142
+ };
143
+ }
144
+ /**
145
+ * An identity column rejects an explicit NULL — postgres wants the DEFAULT keyword where
146
+ * MySQL and SQLite read NULL as "assign the key".
147
+ */
148
+ autoIncrementPlaceholder() {
149
+ return 'DEFAULT';
150
+ }
151
+ /**
152
+ * `INSERT IGNORE` is MySQL; the postgres spelling of "silently skip the conflicting row"
153
+ * is `ON CONFLICT DO NOTHING`, which comes AFTER the values. Skipped when an upsert
154
+ * clause is present — the ON CONFLICT compiler emits its own conflict handling and two
155
+ * such clauses are invalid SQL.
156
+ */
157
+ ignore() {
158
+ return this._builder.Ignore && !this._builder.Update ? ' ON CONFLICT DO NOTHING' : '';
159
+ }
160
+ /**
161
+ * RETURNING on a plain INSERT. Skipped when an upsert clause is present — the ON CONFLICT
162
+ * compiler emits its own RETURNING and two would be invalid SQL.
163
+ */
164
+ returning() {
165
+ if (this._builder.Update || this._builder.Returning.length === 0) {
166
+ return '';
167
+ }
168
+ const cols = this._builder.Returning[0] === '*' ? ['*'] : this._builder.Returning.map((c) => this.Quoter.quote(c));
169
+ return ` RETURNING ${cols.join(',')}`;
170
+ }
171
+ into() {
172
+ // no INSERT IGNORE here — see ignore() above
173
+ return `INSERT INTO ${this._container.resolve(TableAliasCompiler).compile(this._builder)}`;
174
+ }
175
+ };
176
+ PostgresInsertQueryCompiler = __decorate([
177
+ NewInstance(),
178
+ Inject(Container),
179
+ __metadata("design:paramtypes", [Object, InsertQueryBuilder])
180
+ ], PostgresInsertQueryCompiler);
181
+ export { PostgresInsertQueryCompiler };
182
+ /**
183
+ * Column DDL in the postgres dialect. Differences from the shared (MySQL) compiler, each
184
+ * with the postgres answer:
185
+ *
186
+ * - AUTO_INCREMENT does not exist: an integer-family column renders as
187
+ * `GENERATED BY DEFAULT AS IDENTITY` ( BY DEFAULT, not ALWAYS, because the ORM's batch
188
+ * insert path may supply an explicit key for some rows of a batch ).
189
+ * - ENUM and SET are not inline types: both render as TEXT, an enum additionally carrying
190
+ * a CHECK constraint over its members. SET stays plain TEXT because the shared
191
+ * SqlSetConverter stores a comma-joined string and the LIKE-based InSet statement reads
192
+ * it back.
193
+ * - UNSIGNED, CHARACTER SET and inline COMMENT have no postgres spelling and are dropped;
194
+ * COLLATE is kept ( postgres collations are identifiers, so it is quoted ).
195
+ * - MySQL type names map to their postgres equivalents ( DATETIME → TIMESTAMP,
196
+ * DOUBLE → DOUBLE PRECISION, BLOB → BYTEA, JSON → JSONB ).
197
+ */
198
+ let PostgresColumnQueryCompiler = class PostgresColumnQueryCompiler extends SqlColumnQueryCompiler {
199
+ compile() {
200
+ const _stmt = [];
201
+ _stmt.push(this.Quoter.quote(this.builder.Name));
202
+ _stmt.push(this.typeExpression());
203
+ if (this.builder.AutoIncrement) {
204
+ if (!['int', 'smallint', 'tinyint', 'mediumint', 'bigint'].includes(this.builder.Type)) {
205
+ throw new OrmException(`postgres cannot auto-increment column ${this.builder.Name}: identity requires an integer type, got ${this.builder.Type}`);
206
+ }
207
+ _stmt.push('GENERATED BY DEFAULT AS IDENTITY');
208
+ }
209
+ if (this.builder.Collation) {
210
+ _stmt.push(`COLLATE ${this.Quoter.quote(this.builder.Collation)}`);
211
+ }
212
+ if (this.builder.NotNull) {
213
+ _stmt.push('NOT NULL');
214
+ }
215
+ if (this.builder.Default) {
216
+ _stmt.push(this._defaultCompiler());
217
+ }
218
+ if (this.builder.Type === 'enum') {
219
+ const members = this.builder.Args[0].map((a) => `'${escapeStringLiteral(a)}'`).join(',');
220
+ _stmt.push(`CHECK (${this.Quoter.quote(this.builder.Name)} IN (${members}))`);
221
+ }
222
+ if (this.builder.Unique) {
223
+ _stmt.push('UNIQUE');
224
+ }
225
+ return {
226
+ bindings: [],
227
+ expression: _stmt.filter((x) => !_.isEmpty(x)).join(' '),
228
+ };
229
+ }
230
+ /**
231
+ * The `DEFAULT ...` fragment of the column body, or '' when none is set — public because
232
+ * the ALTER COLUMN compiler rebuilds it into `ALTER COLUMN x SET DEFAULT ...`.
233
+ */
234
+ defaultExpression() {
235
+ return this._defaultCompiler();
236
+ }
237
+ /**
238
+ * The bare type, without constraints — public because the ALTER COLUMN compiler needs
239
+ * exactly this piece for `ALTER COLUMN x TYPE t`.
240
+ */
241
+ typeExpression() {
242
+ switch (this.builder.Type) {
243
+ case 'string':
244
+ return `VARCHAR(${this.builder.Args[0] ? this.builder.Args[0] : 255})`;
245
+ case 'text':
246
+ case 'tinytext':
247
+ case 'mediumtext':
248
+ case 'longtext':
249
+ case 'set':
250
+ case 'enum':
251
+ return 'TEXT';
252
+ case 'boolean':
253
+ return 'BOOLEAN';
254
+ case 'float':
255
+ return 'REAL';
256
+ case 'double':
257
+ return 'DOUBLE PRECISION';
258
+ case 'decimal': {
259
+ const precision = this.builder.Args[0] ? this.builder.Args[0] : 8;
260
+ const scale = this.builder.Args[1] ? this.builder.Args[1] : 2;
261
+ return `NUMERIC(${precision},${scale})`;
262
+ }
263
+ case 'tinyint':
264
+ case 'smallint':
265
+ return 'SMALLINT';
266
+ case 'int':
267
+ case 'mediumint':
268
+ return 'INTEGER';
269
+ case 'bigint':
270
+ return 'BIGINT';
271
+ case 'binary':
272
+ case 'tinyblob':
273
+ case 'mediumblob':
274
+ case 'longblob':
275
+ return 'BYTEA';
276
+ case 'bit':
277
+ return 'BIT';
278
+ case 'date':
279
+ return 'DATE';
280
+ case 'time':
281
+ return 'TIME';
282
+ case 'dateTime':
283
+ case 'timestamp':
284
+ return 'TIMESTAMP';
285
+ case 'json':
286
+ return 'JSONB';
287
+ default:
288
+ throw new OrmException(`type ${this.builder.Type} is not supported by the postgres driver`);
289
+ }
290
+ }
291
+ };
292
+ PostgresColumnQueryCompiler = __decorate([
293
+ NewInstance()
294
+ ], PostgresColumnQueryCompiler);
295
+ export { PostgresColumnQueryCompiler };
296
+ /**
297
+ * ALTER COLUMN, postgres style.
298
+ *
299
+ * MySQL's MODIFY restates the whole column in one clause; postgres alters each attribute
300
+ * with its own action, and — matching MODIFY's semantics, where any omitted attribute is
301
+ * dropped — an absent NOT NULL / DEFAULT drops the constraint rather than leaving it.
302
+ * The actions are comma-joined, so the parent compiler's `ALTER TABLE t ` prefix yields
303
+ * one valid multi-action statement.
304
+ */
305
+ let PostgresAlterColumnQueryCompiler = class PostgresAlterColumnQueryCompiler extends SqlAlterColumnQueryCompiler {
306
+ _columnDefinition() {
307
+ return this.container.resolve(ColumnQueryCompiler, [this.builder]).compile();
308
+ }
309
+ _add(definition) {
310
+ if (this.builder.AfterColumn) {
311
+ // AFTER is MySQL-only; postgres appends columns at the end and offers no placement
312
+ this.Log.warn(`postgres cannot place column '${this.builder.Name}' AFTER '${this.builder.AfterColumn}' - the column is appended at the end of the table`);
313
+ }
314
+ return `ADD COLUMN ${definition}`;
315
+ }
316
+ _modify(_definition) {
317
+ const column = this.Quoter.quote(this.builder.Name);
318
+ const compiler = this.container.resolve(ColumnQueryCompiler, [this.builder]);
319
+ const actions = [`ALTER COLUMN ${column} TYPE ${compiler.typeExpression()}`];
320
+ actions.push(this.builder.NotNull ? `ALTER COLUMN ${column} SET NOT NULL` : `ALTER COLUMN ${column} DROP NOT NULL`);
321
+ const defaultExpression = compiler.defaultExpression();
322
+ actions.push(defaultExpression ? `ALTER COLUMN ${column} SET ${defaultExpression}` : `ALTER COLUMN ${column} DROP DEFAULT`);
323
+ return actions.join(', ');
324
+ }
325
+ };
326
+ __decorate([
327
+ Logger('ORM'),
328
+ __metadata("design:type", Log)
329
+ ], PostgresAlterColumnQueryCompiler.prototype, "Log", void 0);
330
+ PostgresAlterColumnQueryCompiler = __decorate([
331
+ NewInstance(),
332
+ Inject(Container)
333
+ ], PostgresAlterColumnQueryCompiler);
334
+ export { PostgresAlterColumnQueryCompiler };
335
+ /**
336
+ * Postgres spells database DDL its own way: encoding is `ENCODING`, not CHARACTER SET,
337
+ * and CREATE DATABASE has no IF NOT EXISTS at all — existence has to be checked by the
338
+ * caller, so the flag is refused rather than silently dropped.
339
+ */
340
+ let PostgresCreateDatabaseQueryCompiler = class PostgresCreateDatabaseQueryCompiler extends CreateDatabaseCompiler {
341
+ constructor(container, builder) {
342
+ super();
343
+ this.container = container;
344
+ this.builder = builder;
345
+ }
346
+ compile() {
347
+ if (this.builder.Exists) {
348
+ throw new NotSupported('postgres does not support CREATE DATABASE IF NOT EXISTS - check pg_database yourself before creating');
349
+ }
350
+ const encoding = this.builder.Charset ? ` ENCODING '${assertCharsetName(this.builder.Charset, 'encoding')}'` : '';
351
+ const collation = this.builder.Collation ? ` LC_COLLATE '${escapeStringLiteral(this.builder.Collation)}'` : '';
352
+ return {
353
+ bindings: [],
354
+ expression: `CREATE DATABASE ${this.Quoter.quote(this.builder.Name)}${encoding}${collation}`,
355
+ };
356
+ }
357
+ };
358
+ __decorate([
359
+ Autoinject(IdentifierQuoter),
360
+ __metadata("design:type", IdentifierQuoter)
361
+ ], PostgresCreateDatabaseQueryCompiler.prototype, "Quoter", void 0);
362
+ PostgresCreateDatabaseQueryCompiler = __decorate([
363
+ NewInstance(),
364
+ Inject(Container),
365
+ __metadata("design:paramtypes", [Container, CreateDatabaseQueryBuilder])
366
+ ], PostgresCreateDatabaseQueryCompiler);
367
+ export { PostgresCreateDatabaseQueryCompiler };
368
+ // No PostgresDropDatabaseQueryCompiler: `DROP DATABASE IF EXISTS "x"` is exactly what the
369
+ // shared SqlDropDatabaseQueryCompiler emits once this driver's quoter is injected, so the
370
+ // driver claims the shared compiler instead of duplicating it.
371
+ /**
372
+ * `CURRENT_DATE()` — with the parentheses the shared builder emits — is a syntax error in
373
+ * postgres: both CURRENT_DATE and CURRENT_TIMESTAMP are niladic keywords there.
374
+ */
375
+ let PostgresDefaultValueBuilder = class PostgresDefaultValueBuilder extends SqlDefaultValueBuilder {
376
+ date() {
377
+ this.Query = RawQuery.create('CURRENT_DATE');
378
+ return this.Owner;
379
+ }
380
+ };
381
+ PostgresDefaultValueBuilder = __decorate([
382
+ NewInstance()
383
+ ], PostgresDefaultValueBuilder);
384
+ export { PostgresDefaultValueBuilder };
385
+ //# sourceMappingURL=compilers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compilers.js","sourceRoot":"","sources":["../../src/compilers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { QueryContext, OrmDriver, IColumnDescriptor, ServerResponseMapper, ISupportedFeature, IsolationLevel, ITransactionContext, ITransactionOptions, IPoolMetrics } from '@spinajs/orm';
2
+ import { SqlDriver } from '@spinajs/orm-sql';
3
+ import pg from 'pg';
4
+ export * from './compilers.js';
5
+ export * from './statements.js';
6
+ export interface IPostgresTransactionContext extends ITransactionContext {
7
+ connection: pg.PoolClient;
8
+ }
9
+ /**
10
+ * Rewrites the `?` placeholders every compiler emits into the `$1..$n` positional
11
+ * parameters the pg protocol requires. Same brute-force walk the MSSQL driver does for
12
+ * its `@p` parameters — the compilers bind every user value, so a literal `?` does not
13
+ * appear in generated SQL outside of a placeholder position.
14
+ */
15
+ export declare function toPositionalParameters(stmt: string): string;
16
+ export declare class PostgresServerResponseMapper extends ServerResponseMapper {
17
+ read(data: any, pkNames?: string[]): {
18
+ RowsAffected: any;
19
+ LastInsertId: any;
20
+ Returning: any;
21
+ };
22
+ }
23
+ export declare class PostgresOrmDriver extends SqlDriver {
24
+ protected Pool: pg.Pool;
25
+ /**
26
+ * Postgres parses all four standard levels; READ UNCOMMITTED is accepted and behaves as
27
+ * READ COMMITTED, which is the standard-permitted upgrade, so it is not refused here.
28
+ */
29
+ readonly SupportedIsolationLevels: IsolationLevel[];
30
+ /**
31
+ * pg hands NUMERIC/DECIMAL and BIGINT back as STRINGS: both can exceed 2^53, where a
32
+ * float loses exactly the precision those types exist to keep, so node-postgres refuses
33
+ * to guess. No converter along the way changes that, so the RESPONSE schema has to say
34
+ * the same thing as the runtime. Reads only — on the request side these stay numbers.
35
+ */
36
+ readonly ResponseSchemaTypes: Readonly<Record<string, unknown>>;
37
+ executeOnDb(stmt: string, params: any[], context: QueryContext): Promise<any>;
38
+ protected isRetryableError(err: unknown): boolean;
39
+ protected _executeOnDbOnce(stmt: string, params: any[], context: QueryContext): Promise<any>;
40
+ supportedFeatures(): ISupportedFeature;
41
+ resolve(): void;
42
+ /** pg.Pool publishes its bookkeeping — no private-field spelunking needed here. */
43
+ poolMetrics(): IPoolMetrics;
44
+ ping(): Promise<boolean>;
45
+ connect(): Promise<OrmDriver>;
46
+ disconnect(): Promise<OrmDriver>;
47
+ tableInfo(name: string, schema?: string): Promise<IColumnDescriptor[]>;
48
+ /**
49
+ * Pulls the pooled client out of a transaction context. The base class only ever hands
50
+ * us contexts this driver's own `_begin` produced.
51
+ */
52
+ private txConnection;
53
+ protected _begin(options?: ITransactionOptions): Promise<ITransactionContext>;
54
+ protected _commit(ctx: ITransactionContext): Promise<void>;
55
+ protected _rollback(ctx: ITransactionContext): Promise<void>;
56
+ protected _savepoint(ctx: ITransactionContext, name: string): Promise<void>;
57
+ protected _releaseSavepoint(ctx: ITransactionContext, name: string): Promise<void>;
58
+ protected _rollbackToSavepoint(ctx: ITransactionContext, name: string): Promise<void>;
59
+ protected _dispose(ctx: ITransactionContext): Promise<void>;
60
+ }
61
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAqC,oBAAoB,EAAE,iBAAiB,EAAE,cAAc,EAAE,mBAAmB,EAAE,mBAAmB,EAAmB,YAAY,EAAsR,MAAM,cAAc,CAAC;AACngB,OAAO,EAAE,SAAS,EAAqH,MAAM,kBAAkB,CAAC;AAChK,OAAO,EAAE,MAAM,IAAI,CAAC;AAKpB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAEhC,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;IACtE,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;CAC3B;AASD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,qBAAa,4BAA6B,SAAQ,oBAAoB;IAC7D,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE;;;;MAqBxC;CACF;AAED,qBAEa,iBAAkB,SAAQ,SAAS;IAC9C,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;IAExB;;;OAGG;IACH,SAAgB,wBAAwB,EAAE,cAAc,EAAE,CAA6E;IAEvI;;;;;OAKG;IACH,SAAgB,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAIpE;IAEK,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAInF;IAED,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAsBhD;IAED,UAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CA4DjG;IAEM,iBAAiB,IAAI,iBAAiB,CAW5C;IAEM,OAAO,SA+Bb;IAED,mFAAmF;IAC5E,WAAW,IAAI,YAAY,CAMjC;IAEY,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CASpC;IAEY,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CA6CzC;IAEY,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC,CAU5C;IAEY,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAyDlF;IAED;;;OAGG;IACH,OAAO,CAAC,YAAY;IAIpB,UAAgB,MAAM,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAiBlF;IAED,UAAgB,OAAO,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/D;IAED,UAAgB,SAAS,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjE;IAID,UAAgB,UAAU,CAAC,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhF;IAED,UAAgB,iBAAiB,CAAC,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvF;IAED,UAAgB,oBAAoB,CAAC,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1F;IAED,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1D;CACF"}