@cubejs-backend/schema-compiler 1.6.68 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/src/adapter/BaseMeasure.d.ts.map +1 -1
  2. package/dist/src/adapter/BaseMeasure.js +1 -7
  3. package/dist/src/adapter/BaseMeasure.js.map +1 -1
  4. package/dist/src/adapter/BaseQuery.d.ts +0 -1
  5. package/dist/src/adapter/BaseQuery.d.ts.map +1 -1
  6. package/dist/src/adapter/BaseQuery.js +4 -15
  7. package/dist/src/adapter/BaseQuery.js.map +1 -1
  8. package/dist/src/adapter/BigqueryQuery.d.ts +0 -6
  9. package/dist/src/adapter/BigqueryQuery.d.ts.map +1 -1
  10. package/dist/src/adapter/BigqueryQuery.js +1 -12
  11. package/dist/src/adapter/BigqueryQuery.js.map +1 -1
  12. package/dist/src/adapter/ClickHouseQuery.d.ts.map +1 -1
  13. package/dist/src/adapter/ClickHouseQuery.js +1 -0
  14. package/dist/src/adapter/ClickHouseQuery.js.map +1 -1
  15. package/dist/src/adapter/MssqlQuery.d.ts.map +1 -1
  16. package/dist/src/adapter/MssqlQuery.js +1 -0
  17. package/dist/src/adapter/MssqlQuery.js.map +1 -1
  18. package/dist/src/adapter/MysqlQuery.d.ts.map +1 -1
  19. package/dist/src/adapter/MysqlQuery.js +1 -0
  20. package/dist/src/adapter/MysqlQuery.js.map +1 -1
  21. package/dist/src/adapter/OracleQuery.d.ts.map +1 -1
  22. package/dist/src/adapter/OracleQuery.js +1 -0
  23. package/dist/src/adapter/OracleQuery.js.map +1 -1
  24. package/dist/src/adapter/PostgresQuery.d.ts.map +1 -1
  25. package/dist/src/adapter/PostgresQuery.js +1 -0
  26. package/dist/src/adapter/PostgresQuery.js.map +1 -1
  27. package/dist/src/adapter/PrestodbQuery.d.ts.map +1 -1
  28. package/dist/src/adapter/PrestodbQuery.js +1 -0
  29. package/dist/src/adapter/PrestodbQuery.js.map +1 -1
  30. package/dist/src/adapter/QueryBuilder.d.ts.map +1 -1
  31. package/dist/src/adapter/QueryBuilder.js +0 -4
  32. package/dist/src/adapter/QueryBuilder.js.map +1 -1
  33. package/dist/src/adapter/RedshiftQuery.d.ts.map +1 -1
  34. package/dist/src/adapter/RedshiftQuery.js +3 -0
  35. package/dist/src/adapter/RedshiftQuery.js.map +1 -1
  36. package/dist/src/adapter/SnowflakeQuery.d.ts.map +1 -1
  37. package/dist/src/adapter/SnowflakeQuery.js +1 -0
  38. package/dist/src/adapter/SnowflakeQuery.js.map +1 -1
  39. package/dist/src/adapter/index.js +0 -2
  40. package/dist/src/adapter/index.js.map +1 -1
  41. package/dist/src/compiler/CubeSymbols.d.ts +0 -1
  42. package/dist/src/compiler/CubeSymbols.d.ts.map +1 -1
  43. package/dist/src/compiler/CubeSymbols.js.map +1 -1
  44. package/dist/src/compiler/CubeValidator.d.ts.map +1 -1
  45. package/dist/src/compiler/CubeValidator.js +6 -9
  46. package/dist/src/compiler/CubeValidator.js.map +1 -1
  47. package/package.json +9 -9
  48. package/dist/src/adapter/AWSElasticSearchQuery.d.ts +0 -9
  49. package/dist/src/adapter/AWSElasticSearchQuery.d.ts.map +0 -1
  50. package/dist/src/adapter/AWSElasticSearchQuery.js +0 -41
  51. package/dist/src/adapter/AWSElasticSearchQuery.js.map +0 -1
  52. package/dist/src/adapter/ElasticSearchQuery.d.ts +0 -23
  53. package/dist/src/adapter/ElasticSearchQuery.d.ts.map +0 -1
  54. package/dist/src/adapter/ElasticSearchQuery.js +0 -123
  55. package/dist/src/adapter/ElasticSearchQuery.js.map +0 -1
@@ -1,9 +0,0 @@
1
- import { ElasticSearchQuery } from './ElasticSearchQuery';
2
- export declare class AWSElasticSearchQuery extends ElasticSearchQuery {
3
- newFilter(filter: any): any;
4
- subtractInterval(date: any, interval: any): string;
5
- addInterval(date: any, interval: any): string;
6
- timeGroupedColumn(granularity: any, dimension: any): any;
7
- unixTimestampSql(): string;
8
- }
9
- //# sourceMappingURL=AWSElasticSearchQuery.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AWSElasticSearchQuery.d.ts","sourceRoot":"","sources":["../../../src/adapter/AWSElasticSearchQuery.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAqB1D,qBAAa,qBAAsB,SAAQ,kBAAkB;IAC3C,SAAS,CAAC,MAAM,KAAA;IAIhB,gBAAgB,CAAC,IAAI,KAAA,EAAE,QAAQ,KAAA;IAI/B,WAAW,CAAC,IAAI,KAAA,EAAE,QAAQ,KAAA;IAI1B,iBAAiB,CAAC,WAAW,KAAA,EAAE,SAAS,KAAA;IAIxC,gBAAgB;CAGjC"}
@@ -1,41 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AWSElasticSearchQuery = void 0;
4
- const BaseFilter_1 = require("./BaseFilter");
5
- const ElasticSearchQuery_1 = require("./ElasticSearchQuery");
6
- const GRANULARITY_TO_INTERVAL = {
7
- day: (date) => `DATE_FORMAT(${date}, 'yyyy-MM-dd 00:00:00.000')`,
8
- // eslint-disable-next-line no-unused-vars,@typescript-eslint/no-unused-vars
9
- week: (date) => { throw new Error('Week is unsupported'); },
10
- hour: (date) => `DATE_FORMAT(${date}, 'yyyy-MM-dd HH:00:00.000')`,
11
- minute: (date) => `DATE_FORMAT(${date}, 'yyyy-MM-dd HH:mm:00.000')`,
12
- second: (date) => `DATE_FORMAT(${date}, 'yyyy-MM-dd HH:mm:ss.000')`,
13
- month: (date) => `DATE_FORMAT(${date}, 'yyyy-MM-01 00:00:00.000')`,
14
- year: (date) => `DATE_FORMAT(${date}, 'yyyy-01-01 00:00:00.000')`
15
- };
16
- class AWSElasticSearchQueryFilter extends BaseFilter_1.BaseFilter {
17
- likeIgnoreCase(column, not, param, type) {
18
- const p = (!type || type === 'contains' || type === 'ends') ? '%' : '';
19
- const s = (!type || type === 'contains' || type === 'starts') ? '%' : '';
20
- return `${column}${not ? ' NOT' : ''} LIKE CONCAT('${p}', ${this.allocateParam(param)}, '${s}')`;
21
- }
22
- }
23
- class AWSElasticSearchQuery extends ElasticSearchQuery_1.ElasticSearchQuery {
24
- newFilter(filter) {
25
- return new AWSElasticSearchQueryFilter(this, filter);
26
- }
27
- subtractInterval(date, interval) {
28
- return `DATE_SUB(${date}, INTERVAL ${interval})`;
29
- }
30
- addInterval(date, interval) {
31
- return `DATE_ADD(${date}, INTERVAL ${interval})`;
32
- }
33
- timeGroupedColumn(granularity, dimension) {
34
- return GRANULARITY_TO_INTERVAL[granularity](dimension);
35
- }
36
- unixTimestampSql() {
37
- return 'EXTRACT(EPOCH FROM NOW())';
38
- }
39
- }
40
- exports.AWSElasticSearchQuery = AWSElasticSearchQuery;
41
- //# sourceMappingURL=AWSElasticSearchQuery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AWSElasticSearchQuery.js","sourceRoot":"","sources":["../../../src/adapter/AWSElasticSearchQuery.ts"],"names":[],"mappings":";;;AAAA,6CAA0C;AAC1C,6DAA0D;AAE1D,MAAM,uBAAuB,GAAG;IAC9B,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,IAAI,8BAA8B;IAChE,4EAA4E;IAC5E,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC3D,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,IAAI,8BAA8B;IACjE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,IAAI,8BAA8B;IACnE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,IAAI,8BAA8B;IACnE,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,IAAI,8BAA8B;IAClE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,IAAI,8BAA8B;CAClE,CAAC;AAEF,MAAM,2BAA4B,SAAQ,uBAAU;IAC3C,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI;QAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,OAAO,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;IACnG,CAAC;CACF;AAED,MAAa,qBAAsB,SAAQ,uCAAkB;IAC3C,SAAS,CAAC,MAAM;QAC9B,OAAO,IAAI,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC;IAEe,gBAAgB,CAAC,IAAI,EAAE,QAAQ;QAC7C,OAAO,YAAY,IAAI,cAAc,QAAQ,GAAG,CAAC;IACnD,CAAC;IAEe,WAAW,CAAC,IAAI,EAAE,QAAQ;QACxC,OAAO,YAAY,IAAI,cAAc,QAAQ,GAAG,CAAC;IACnD,CAAC;IAEe,iBAAiB,CAAC,WAAW,EAAE,SAAS;QACtD,OAAO,uBAAuB,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;IAEe,gBAAgB;QAC9B,OAAO,2BAA2B,CAAC;IACrC,CAAC;CACF;AApBD,sDAoBC"}
@@ -1,23 +0,0 @@
1
- import { BaseQuery } from './BaseQuery';
2
- export declare class ElasticSearchQuery extends BaseQuery {
3
- newFilter(filter: any): any;
4
- convertTz(field: any): string;
5
- timeStampCast(value: any): string;
6
- dateTimeCast(value: any): string;
7
- subtractInterval(date: any, interval: any): string;
8
- addInterval(date: any, interval: any): string;
9
- timeGroupedColumn(granularity: any, dimension: any): any;
10
- unixTimestampSql(): string;
11
- groupByClause(): string;
12
- orderHashToString(hash: {
13
- id: string;
14
- desc: boolean;
15
- }): string | null;
16
- /**
17
- * This implementation is a bit different from the one in BaseQuery
18
- * as it uses dimensionSql() as ordering expression
19
- */
20
- getFieldAlias(id: string): string | null;
21
- escapeColumnName(name: any): string;
22
- }
23
- //# sourceMappingURL=ElasticSearchQuery.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ElasticSearchQuery.d.ts","sourceRoot":"","sources":["../../../src/adapter/ElasticSearchQuery.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AA6BxC,qBAAa,kBAAmB,SAAQ,SAAS;IAC/B,SAAS,CAAC,MAAM,KAAA;IAIhB,SAAS,CAAC,KAAK,KAAA;IAIf,aAAa,CAAC,KAAK,KAAA;IAInB,YAAY,CAAC,KAAK,KAAA;IAIlB,gBAAgB,CAAC,IAAI,KAAA,EAAE,QAAQ,KAAA;IAK/B,WAAW,CAAC,IAAI,KAAA,EAAE,QAAQ,KAAA;IAK1B,iBAAiB,CAAC,WAAW,KAAA,EAAE,SAAS,KAAA;IAIxC,gBAAgB;IAIhB,aAAa;IAYb,iBAAiB,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE;IAerE;;;OAGG;IACI,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAsD/B,gBAAgB,CAAC,IAAI,KAAA;CAGtC"}
@@ -1,123 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ElasticSearchQuery = void 0;
7
- /* eslint-disable max-classes-per-file */
8
- const ramda_1 = __importDefault(require("ramda"));
9
- const shared_1 = require("@cubejs-backend/shared");
10
- const BaseQuery_1 = require("./BaseQuery");
11
- const BaseFilter_1 = require("./BaseFilter");
12
- const GRANULARITY_TO_INTERVAL = {
13
- day: date => `DATE_TRUNC('day', ${date}::datetime)`,
14
- week: date => `DATE_TRUNC('week', ${date}::datetime)`,
15
- hour: date => `DATE_TRUNC('hour', ${date}::datetime)`,
16
- minute: date => `DATE_TRUNC('minute', ${date}::datetime)`,
17
- second: date => `DATE_TRUNC('second', ${date}::datetime)`,
18
- month: date => `DATE_TRUNC('month', ${date}::datetime)`,
19
- quarter: date => `DATE_TRUNC('quarter', ${date}::datetime)`,
20
- year: date => `DATE_TRUNC('year', ${date}::datetime)`
21
- };
22
- class ElasticSearchQueryFilter extends BaseFilter_1.BaseFilter {
23
- likeIgnoreCase(column, not, param, type) {
24
- if (type === 'starts') {
25
- return `${not ? ' NOT' : ''} WHERE ${column} LIKE ${this.allocateParam(param)}%`;
26
- }
27
- else if (type === 'ends') {
28
- return `${not ? ' NOT' : ''} WHERE ${column} LIKE %${this.allocateParam(param)}`;
29
- }
30
- else {
31
- return `${not ? ' NOT' : ''} MATCH(${column}, ${this.allocateParam(param)}, 'fuzziness=AUTO:1,5')`;
32
- }
33
- }
34
- }
35
- class ElasticSearchQuery extends BaseQuery_1.BaseQuery {
36
- newFilter(filter) {
37
- return new ElasticSearchQueryFilter(this, filter);
38
- }
39
- convertTz(field) {
40
- return `${field}`; // TODO
41
- }
42
- timeStampCast(value) {
43
- return `${value}`;
44
- }
45
- dateTimeCast(value) {
46
- return `${value}`; // TODO
47
- }
48
- subtractInterval(date, interval) {
49
- // TODO: Test this, note sure how value gets populated here
50
- return `${date} - INTERVAL ${interval}`;
51
- }
52
- addInterval(date, interval) {
53
- // TODO: Test this, note sure how value gets populated here
54
- return `${date} + INTERVAL ${interval}`;
55
- }
56
- timeGroupedColumn(granularity, dimension) {
57
- return GRANULARITY_TO_INTERVAL[granularity](dimension);
58
- }
59
- unixTimestampSql() {
60
- return 'TIMESTAMP_DIFF(\'seconds\', \'1970-01-01T00:00:00.000Z\'::datetime, CURRENT_TIMESTAMP())';
61
- }
62
- groupByClause() {
63
- if (this.ungrouped) {
64
- return '';
65
- }
66
- const dimensionsForSelect = this.dimensionsForSelect();
67
- const dimensionColumns = ramda_1.default.flatten(dimensionsForSelect.map(s => s.selectColumns() && s.dimensionSql())).filter(s => !!s);
68
- return dimensionColumns.length ? ` GROUP BY ${dimensionColumns.join(', ')}` : '';
69
- }
70
- orderHashToString(hash) {
71
- if (!hash || !hash.id) {
72
- return null;
73
- }
74
- const fieldAlias = this.getFieldAlias(hash.id);
75
- if (fieldAlias === null) {
76
- return null;
77
- }
78
- const direction = hash.desc ? 'DESC' : 'ASC';
79
- return `${fieldAlias} ${direction}`;
80
- }
81
- /**
82
- * This implementation is a bit different from the one in BaseQuery
83
- * as it uses dimensionSql() as ordering expression
84
- */
85
- getFieldAlias(id) {
86
- const equalIgnoreCase = (a, b) => (typeof a === 'string' && typeof b === 'string' && a.toUpperCase() === b.toUpperCase());
87
- let field;
88
- const path = id.split('.');
89
- // Granularity is specified
90
- if (path.length === 3) {
91
- const memberName = path.slice(0, 2).join('.');
92
- const granularity = path[2];
93
- field = this.timeDimensions
94
- // Not all time dimensions are used in select list, some are just filters,
95
- // but they exist in this.timeDimensions, so need to filter them out
96
- .filter(d => d.selectColumns())
97
- .find(d => ((equalIgnoreCase(d.dimension, memberName) && (d.granularityObj?.granularity === granularity)) ||
98
- equalIgnoreCase(d.expressionName, memberName)));
99
- if (field) {
100
- return field.dimensionSql();
101
- }
102
- return null;
103
- }
104
- const dimensionsForSelect = this.dimensionsForSelect()
105
- // Not all time dimensions are used in select list, some are just filters,
106
- // but they exist in this.timeDimensions, so need to filter them out
107
- .filter(d => d.selectColumns());
108
- const found = (0, shared_1.findMinGranularityDimension)(id, dimensionsForSelect);
109
- if (found?.dimension) {
110
- return found.dimension.dimensionSql();
111
- }
112
- field = this.measures.find(d => equalIgnoreCase(d.measure, id) || equalIgnoreCase(d.expressionName, id));
113
- if (field) {
114
- return field.aliasName(); // TODO isn't supported
115
- }
116
- return null;
117
- }
118
- escapeColumnName(name) {
119
- return `${name}`;
120
- }
121
- }
122
- exports.ElasticSearchQuery = ElasticSearchQuery;
123
- //# sourceMappingURL=ElasticSearchQuery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ElasticSearchQuery.js","sourceRoot":"","sources":["../../../src/adapter/ElasticSearchQuery.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAyC;AACzC,kDAAsB;AAEtB,mDAAqE;AACrE,2CAAwC;AACxC,6CAA0C;AAK1C,MAAM,uBAAuB,GAAG;IAC9B,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,qBAAqB,IAAI,aAAa;IACnD,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,sBAAsB,IAAI,aAAa;IACrD,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,sBAAsB,IAAI,aAAa;IACrD,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,wBAAwB,IAAI,aAAa;IACzD,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,wBAAwB,IAAI,aAAa;IACzD,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,uBAAuB,IAAI,aAAa;IACvD,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,yBAAyB,IAAI,aAAa;IAC3D,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,sBAAsB,IAAI,aAAa;CACtD,CAAC;AAEF,MAAM,wBAAyB,SAAQ,uBAAU;IACxC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI;QAC5C,IAAI,IAAI,KAAK,QAAQ,EAAE;YACrB,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,MAAM,SAAS,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;SAClF;aAAM,IAAI,IAAI,KAAK,MAAM,EAAE;YAC1B,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,MAAM,UAAU,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;SAClF;aAAM;YACL,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,yBAAyB,CAAC;SACpG;IACH,CAAC;CACF;AAED,MAAa,kBAAmB,SAAQ,qBAAS;IAC/B,SAAS,CAAC,MAAM;QAC9B,OAAO,IAAI,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAEe,SAAS,CAAC,KAAK;QAC7B,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,OAAO;IAC5B,CAAC;IAEe,aAAa,CAAC,KAAK;QACjC,OAAO,GAAG,KAAK,EAAE,CAAC;IACpB,CAAC;IAEe,YAAY,CAAC,KAAK;QAChC,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,OAAO;IAC5B,CAAC;IAEe,gBAAgB,CAAC,IAAI,EAAE,QAAQ;QAC7C,2DAA2D;QAC3D,OAAO,GAAG,IAAI,eAAe,QAAQ,EAAE,CAAC;IAC1C,CAAC;IAEe,WAAW,CAAC,IAAI,EAAE,QAAQ;QACxC,2DAA2D;QAC3D,OAAO,GAAG,IAAI,eAAe,QAAQ,EAAE,CAAC;IAC1C,CAAC;IAEe,iBAAiB,CAAC,WAAW,EAAE,SAAS;QACtD,OAAO,uBAAuB,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;IAEe,gBAAgB;QAC9B,OAAO,0FAA0F,CAAC;IACpG,CAAC;IAEe,aAAa;QAC3B,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,OAAO,EAAE,CAAC;SACX;QACD,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,gBAAgB,GAAG,eAAC,CAAC,OAAO,CAChC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,CACpE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnB,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,CAAC;IAEe,iBAAiB,CAAC,IAAmC;QACnE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;YACrB,OAAO,IAAI,CAAC;SACb;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE/C,IAAI,UAAU,KAAK,IAAI,EAAE;YACvB,OAAO,IAAI,CAAC;SACb;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7C,OAAO,GAAG,UAAU,IAAI,SAAS,EAAE,CAAC;IACtC,CAAC;IAED;;;OAGG;IACI,aAAa,CAAC,EAAU;QAC7B,MAAM,eAAe,GAAG,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE,CAAC,CAC1C,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CACtF,CAAC;QAEF,IAAI,KAA8C,CAAC;QAEnD,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE3B,2BAA2B;QAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACrB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAE5B,KAAK,GAAG,IAAI,CAAC,cAAc;gBACzB,0EAA0E;gBAC1E,oEAAoE;iBACnE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;iBAC9B,IAAI,CACH,CAAC,CAAC,EAAE,CAAC,CACH,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,WAAW,KAAK,WAAW,CAAC,CAAC;gBAC7F,eAAe,CAAC,CAAC,CAAC,cAAc,EAAE,UAAU,CAAC,CAC9C,CACF,CAAC;YAEJ,IAAI,KAAK,EAAE;gBACT,OAAO,KAAK,CAAC,YAAY,EAAE,CAAC;aAC7B;YAED,OAAO,IAAI,CAAC;SACb;QAED,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,EAAE;YACpD,0EAA0E;YAC1E,oEAAoE;aACnE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;QAElC,MAAM,KAAK,GAAG,IAAA,oCAA2B,EAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;QAEnE,IAAI,KAAK,EAAE,SAAS,EAAE;YACpB,OAAQ,KAAK,CAAC,SAA2B,CAAC,YAAY,EAAE,CAAC;SAC1D;QAED,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CACxB,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAC7E,CAAC;QAEF,IAAI,KAAK,EAAE;YACT,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,uBAAuB;SAClD;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,gBAAgB,CAAC,IAAI;QACnC,OAAO,GAAG,IAAI,EAAE,CAAC;IACnB,CAAC;CACF;AA3HD,gDA2HC"}