@revisium/core 2.5.0-alpha.1 → 2.5.0-alpha.2

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 (57) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/__generated__/sql/countTableDiffsBetweenRevisions.edge.js +3 -0
  3. package/dist/src/__generated__/sql/countTableDiffsBetweenRevisions.edge.mjs +3 -0
  4. package/dist/src/__generated__/sql/countTableDiffsBetweenRevisions.js +3 -0
  5. package/dist/src/__generated__/sql/countTableDiffsBetweenRevisions.mjs +3 -0
  6. package/dist/src/__generated__/sql/getTableDiffsPaginatedBetweenRevisions.edge.js +3 -0
  7. package/dist/src/__generated__/sql/getTableDiffsPaginatedBetweenRevisions.edge.mjs +3 -0
  8. package/dist/src/__generated__/sql/getTableDiffsPaginatedBetweenRevisions.js +3 -0
  9. package/dist/src/__generated__/sql/getTableDiffsPaginatedBetweenRevisions.mjs +3 -0
  10. package/dist/src/__generated__/sql/hasRowDiffsBetweenRevisions.edge.js +3 -0
  11. package/dist/src/__generated__/sql/hasRowDiffsBetweenRevisions.edge.mjs +3 -0
  12. package/dist/src/__generated__/sql/hasRowDiffsBetweenRevisions.js +3 -0
  13. package/dist/src/__generated__/sql/hasRowDiffsBetweenRevisions.mjs +3 -0
  14. package/dist/src/__generated__/sql/hasTableDiffsBetweenRevisions.edge.js +3 -0
  15. package/dist/src/__generated__/sql/hasTableDiffsBetweenRevisions.edge.mjs +3 -0
  16. package/dist/src/__generated__/sql/hasTableDiffsBetweenRevisions.js +3 -0
  17. package/dist/src/__generated__/sql/hasTableDiffsBetweenRevisions.mjs +3 -0
  18. package/dist/src/__generated__/sql/index.edge.js +3 -0
  19. package/dist/src/__generated__/sql/index.edge.mjs +3 -0
  20. package/dist/src/__generated__/sql/index.js +3 -0
  21. package/dist/src/__generated__/sql/index.mjs +3 -0
  22. package/dist/src/api/graphql-api/graphql-api.module.js +2 -0
  23. package/dist/src/api/graphql-api/graphql-api.module.js.map +1 -1
  24. package/dist/src/api/graphql-api/row/inputs/search-rows.input.d.ts +6 -0
  25. package/dist/src/api/graphql-api/row/inputs/search-rows.input.js +36 -0
  26. package/dist/src/api/graphql-api/row/inputs/search-rows.input.js.map +1 -0
  27. package/dist/src/api/graphql-api/row/model/search-result.model.d.ts +12 -0
  28. package/dist/src/api/graphql-api/row/model/search-result.model.js +53 -0
  29. package/dist/src/api/graphql-api/row/model/search-result.model.js.map +1 -0
  30. package/dist/src/api/graphql-api/row/model/search-results-connection.model.d.ts +5 -0
  31. package/dist/src/api/graphql-api/row/model/search-results-connection.model.js +19 -0
  32. package/dist/src/api/graphql-api/row/model/search-results-connection.model.js.map +1 -0
  33. package/dist/src/api/graphql-api/row/resolver/search-rows.resolver.d.ts +8 -0
  34. package/dist/src/api/graphql-api/row/resolver/search-rows.resolver.js +56 -0
  35. package/dist/src/api/graphql-api/row/resolver/search-rows.resolver.js.map +1 -0
  36. package/dist/src/features/draft/commands/handlers/__tests__/utils.js +6 -0
  37. package/dist/src/features/draft/commands/handlers/__tests__/utils.js.map +1 -1
  38. package/dist/src/features/row/queries/handlers/index.d.ts +2 -1
  39. package/dist/src/features/row/queries/handlers/index.js +2 -0
  40. package/dist/src/features/row/queries/handlers/index.js.map +1 -1
  41. package/dist/src/features/row/queries/handlers/search-rows.handler.d.ts +14 -0
  42. package/dist/src/features/row/queries/handlers/search-rows.handler.js +79 -0
  43. package/dist/src/features/row/queries/handlers/search-rows.handler.js.map +1 -0
  44. package/dist/src/features/row/queries/impl/index.d.ts +1 -0
  45. package/dist/src/features/row/queries/impl/index.js +1 -0
  46. package/dist/src/features/row/queries/impl/index.js.map +1 -1
  47. package/dist/src/features/row/queries/impl/search-rows.query.d.ts +28 -0
  48. package/dist/src/features/row/queries/impl/search-rows.query.js +10 -0
  49. package/dist/src/features/row/queries/impl/search-rows.query.js.map +1 -0
  50. package/dist/src/features/row/utils/extract-matches-fallback.d.ts +3 -0
  51. package/dist/src/features/row/utils/extract-matches-fallback.js +89 -0
  52. package/dist/src/features/row/utils/extract-matches-fallback.js.map +1 -0
  53. package/dist/src/features/row/utils/search-rows-sql.d.ts +16 -0
  54. package/dist/src/features/row/utils/search-rows-sql.js +111 -0
  55. package/dist/src/features/row/utils/search-rows-sql.js.map +1 -0
  56. package/dist/tsconfig.build.tsbuildinfo +1 -1
  57. package/package.json +1 -1
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SearchRowsHandler = void 0;
13
+ const cqrs_1 = require("@nestjs/cqrs");
14
+ const plugin_service_1 = require("../../../plugin/plugin.service");
15
+ const impl_1 = require("../impl");
16
+ const extract_matches_fallback_1 = require("../../utils/extract-matches-fallback");
17
+ const search_rows_sql_1 = require("../../utils/search-rows-sql");
18
+ const getOffsetPagination_1 = require("../../../share/commands/utils/getOffsetPagination");
19
+ const transaction_prisma_service_1 = require("../../../../infrastructure/database/transaction-prisma.service");
20
+ let SearchRowsHandler = class SearchRowsHandler {
21
+ constructor(transactionService, pluginService) {
22
+ this.transactionService = transactionService;
23
+ this.pluginService = pluginService;
24
+ }
25
+ get transaction() {
26
+ return this.transactionService.getTransactionOrPrisma();
27
+ }
28
+ async execute({ data }) {
29
+ return (0, getOffsetPagination_1.getOffsetPagination)({
30
+ pageData: { first: data.first || 20, after: data.after },
31
+ findMany: async (args) => {
32
+ return this.searchInRevision(data, args.take, args.skip);
33
+ },
34
+ count: async () => {
35
+ return this.countInRevision(data);
36
+ },
37
+ });
38
+ }
39
+ async computeRowsForTables(processedRows, revisionId) {
40
+ const rowsByTable = new Map();
41
+ processedRows.forEach(({ row, table }) => {
42
+ if (!rowsByTable.has(table.id)) {
43
+ rowsByTable.set(table.id, []);
44
+ }
45
+ rowsByTable.get(table.id)?.push(row);
46
+ });
47
+ await Promise.all(Array.from(rowsByTable.entries()).map(([tableId, tableRows]) => this.pluginService.computeRows({
48
+ revisionId,
49
+ tableId,
50
+ rows: tableRows,
51
+ })));
52
+ }
53
+ async searchInRevision(data, limit, skip) {
54
+ if (limit <= 0 || skip < 0) {
55
+ return [];
56
+ }
57
+ const rows = (0, search_rows_sql_1.convertRawRowsToEntities)(await this.transaction.$queryRaw((0, search_rows_sql_1.searchRowsSql)(data.revisionId, data.query, limit, skip)));
58
+ if (rows.length === 0) {
59
+ return [];
60
+ }
61
+ await this.computeRowsForTables(rows, data.revisionId);
62
+ return rows.map(({ row, table }) => ({
63
+ matches: (0, extract_matches_fallback_1.extractMatchesFallback)(row.data, data.query),
64
+ row,
65
+ table,
66
+ }));
67
+ }
68
+ async countInRevision(data) {
69
+ const countResult = await this.transaction.$queryRaw((0, search_rows_sql_1.searchRowsCountSql)(data.revisionId, data.query));
70
+ return Number(countResult[0].count);
71
+ }
72
+ };
73
+ exports.SearchRowsHandler = SearchRowsHandler;
74
+ exports.SearchRowsHandler = SearchRowsHandler = __decorate([
75
+ (0, cqrs_1.QueryHandler)(impl_1.SearchRowsQuery),
76
+ __metadata("design:paramtypes", [transaction_prisma_service_1.TransactionPrismaService,
77
+ plugin_service_1.PluginService])
78
+ ], SearchRowsHandler);
79
+ //# sourceMappingURL=search-rows.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-rows.handler.js","sourceRoot":"","sources":["../../../../../../src/features/row/queries/handlers/search-rows.handler.ts"],"names":[],"mappings":"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"}
@@ -5,3 +5,4 @@ export * from '../../../../features/row/queries/impl/resolve-row-count-foreign-k
5
5
  export * from '../../../../features/row/queries/impl/resolve-row-count-foreign-keys-by.query';
6
6
  export * from '../../../../features/row/queries/impl/resolve-row-foreign-keys-by.query';
7
7
  export * from '../../../../features/row/queries/impl/resolve-row-foreign-keys-to.query';
8
+ export * from '../../../../features/row/queries/impl/search-rows.query';
@@ -21,4 +21,5 @@ __exportStar(require("./resolve-row-count-foreign-keys-to.query"), exports);
21
21
  __exportStar(require("./resolve-row-count-foreign-keys-by.query"), exports);
22
22
  __exportStar(require("./resolve-row-foreign-keys-by.query"), exports);
23
23
  __exportStar(require("./resolve-row-foreign-keys-to.query"), exports);
24
+ __exportStar(require("./search-rows.query"), exports);
24
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/features/row/queries/impl/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAA4D;AAC5D,wDAAkE;AAClE,mDAA6D;AAC7D,4EAAsF;AACtF,4EAAsF;AACtF,sEAAgF;AAChF,sEAAgF"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/features/row/queries/impl/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAA4D;AAC5D,wDAAkE;AAClE,mDAA6D;AAC7D,4EAAsF;AACtF,4EAAsF;AACtF,sEAAgF;AAChF,sEAAgF;AAChF,sDAAgE"}
@@ -0,0 +1,28 @@
1
+ import { Row, Table } from '@prisma/client';
2
+ import { IPaginatedType } from '../../../../features/share/pagination.interface';
3
+ export type SearchRowResult = {
4
+ row: Row;
5
+ table: Table;
6
+ matches: SearchMatch[];
7
+ };
8
+ export type SearchMatch = {
9
+ path: string;
10
+ value: any;
11
+ highlight?: string;
12
+ };
13
+ export type SearchRowsResponse = IPaginatedType<SearchRowResult>;
14
+ export declare class SearchRowsQuery {
15
+ readonly data: {
16
+ readonly revisionId: string;
17
+ readonly query: string;
18
+ readonly first?: number;
19
+ readonly after?: string;
20
+ };
21
+ constructor(data: {
22
+ readonly revisionId: string;
23
+ readonly query: string;
24
+ readonly first?: number;
25
+ readonly after?: string;
26
+ });
27
+ }
28
+ export type SearchRowsQueryData = SearchRowsQuery['data'];
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SearchRowsQuery = void 0;
4
+ class SearchRowsQuery {
5
+ constructor(data) {
6
+ this.data = data;
7
+ }
8
+ }
9
+ exports.SearchRowsQuery = SearchRowsQuery;
10
+ //# sourceMappingURL=search-rows.query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-rows.query.js","sourceRoot":"","sources":["../../../../../../src/features/row/queries/impl/search-rows.query.ts"],"names":[],"mappings":";;;AAiBA,MAAa,eAAe;IAC1B,YACkB,IAKf;QALe,SAAI,GAAJ,IAAI,CAKnB;IACA,CAAC;CACL;AATD,0CASC"}
@@ -0,0 +1,3 @@
1
+ import { Prisma } from '@prisma/client';
2
+ import { SearchMatch } from '../../../features/row/queries/impl';
3
+ export declare function extractMatchesFallback(data: Prisma.JsonValue, query: string): SearchMatch[];
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractMatchesFallback = extractMatchesFallback;
4
+ function extractMatchesFallback(data, query) {
5
+ const matches = [];
6
+ const queryTokens = query
7
+ .toLowerCase()
8
+ .split(/[\s_-]+/)
9
+ .filter((t) => t.length > 0);
10
+ const searchInObject = (obj, path = '') => {
11
+ if (obj === null || obj === undefined) {
12
+ return;
13
+ }
14
+ if (typeof obj === 'string') {
15
+ const lowerValue = obj.toLowerCase();
16
+ const valueTokens = lowerValue
17
+ .split(/[\s_-]+/)
18
+ .filter((t) => t.length > 0);
19
+ const hasMatch = queryTokens.some((queryToken) => valueTokens.some((valueToken) => valueToken.includes(queryToken)));
20
+ if (hasMatch) {
21
+ let relevance = 0;
22
+ const exactMatch = queryTokens.every((queryToken) => valueTokens.some((valueToken) => valueToken === queryToken));
23
+ const startsWithMatch = queryTokens.some((queryToken) => valueTokens.some((valueToken) => valueToken.startsWith(queryToken)));
24
+ if (exactMatch) {
25
+ relevance = 100;
26
+ }
27
+ else if (startsWithMatch) {
28
+ relevance = 50;
29
+ }
30
+ else {
31
+ relevance = 10;
32
+ }
33
+ relevance += Math.max(0, 20 - obj.length);
34
+ matches.push({
35
+ match: {
36
+ path: path || 'data',
37
+ value: obj,
38
+ highlight: highlightText(obj, queryTokens),
39
+ },
40
+ relevance,
41
+ });
42
+ }
43
+ }
44
+ else if (typeof obj === 'number' || typeof obj === 'boolean') {
45
+ const stringValue = String(obj);
46
+ const lowerValue = stringValue.toLowerCase();
47
+ if (queryTokens.some((token) => lowerValue.includes(token))) {
48
+ matches.push({
49
+ match: {
50
+ path: path || 'data',
51
+ value: stringValue,
52
+ highlight: highlightText(stringValue, queryTokens),
53
+ },
54
+ relevance: 30,
55
+ });
56
+ }
57
+ }
58
+ else if (typeof obj === 'object') {
59
+ if (Array.isArray(obj)) {
60
+ obj.forEach((item, index) => {
61
+ searchInObject(item, path ? `${path}[${index}]` : `[${index}]`);
62
+ });
63
+ }
64
+ else {
65
+ Object.entries(obj).forEach(([key, value]) => {
66
+ searchInObject(value, path ? `${path}.${key}` : key);
67
+ });
68
+ }
69
+ }
70
+ };
71
+ searchInObject(data);
72
+ return matches
73
+ .sort((a, b) => b.relevance - a.relevance)
74
+ .slice(0, 5)
75
+ .map((item) => item.match);
76
+ }
77
+ function escapeRegExp(string) {
78
+ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
79
+ }
80
+ function highlightText(text, terms) {
81
+ let highlighted = text;
82
+ terms.forEach((term) => {
83
+ const escapedTerm = escapeRegExp(term);
84
+ const regex = new RegExp(`(${escapedTerm})`, 'gi');
85
+ highlighted = highlighted.replace(regex, '<mark>$1</mark>');
86
+ });
87
+ return highlighted;
88
+ }
89
+ //# sourceMappingURL=extract-matches-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-matches-fallback.js","sourceRoot":"","sources":["../../../../../src/features/row/utils/extract-matches-fallback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Prisma, Row, Table } from '@prisma/client';
2
+ export type RowWithTable = Row & {
3
+ table_versionId: string;
4
+ table_createdId: string;
5
+ table_id: string;
6
+ table_readonly: boolean;
7
+ table_createdAt: Date;
8
+ table_updatedAt: Date;
9
+ table_system: boolean;
10
+ };
11
+ export declare function searchRowsSql(revisionId: string, searchQuery: string, take: number, skip: number): Prisma.Sql;
12
+ export declare function searchRowsCountSql(revisionId: string, searchQuery: string): Prisma.Sql;
13
+ export declare function convertRawRowsToEntities(rows: RowWithTable[]): Array<{
14
+ row: Row;
15
+ table: Table;
16
+ }>;
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.searchRowsSql = searchRowsSql;
4
+ exports.searchRowsCountSql = searchRowsCountSql;
5
+ exports.convertRawRowsToEntities = convertRawRowsToEntities;
6
+ const client_1 = require("@prisma/client");
7
+ const prisma_pg_json_1 = require("@revisium/prisma-pg-json");
8
+ const get_rows_sql_1 = require("./get-rows-sql");
9
+ function searchRowsSql(revisionId, searchQuery, take, skip) {
10
+ const searchFilter = {
11
+ path: [],
12
+ search: searchQuery,
13
+ searchLanguage: 'simple',
14
+ searchType: 'plain',
15
+ searchIn: 'values',
16
+ };
17
+ const whereConditions = {
18
+ data: searchFilter,
19
+ };
20
+ const whereClause = (0, prisma_pg_json_1.generateWhere)({
21
+ where: whereConditions,
22
+ fieldConfig: get_rows_sql_1.DEFAULT_ROW_FIELDS,
23
+ tableAlias: 'r',
24
+ });
25
+ return client_1.Prisma.sql `
26
+ SELECT
27
+ r."versionId",
28
+ r."createdId",
29
+ r."id",
30
+ r."readonly",
31
+ r."createdAt",
32
+ r."updatedAt",
33
+ r."publishedAt",
34
+ r."data",
35
+ r."meta",
36
+ r."hash",
37
+ r."schemaHash",
38
+ t."versionId" as "table_versionId",
39
+ t."createdId" as "table_createdId",
40
+ t."id" as "table_id",
41
+ t."readonly" as "table_readonly",
42
+ t."createdAt" as "table_createdAt",
43
+ t."updatedAt" as "table_updatedAt",
44
+ t."system" as "table_system"
45
+ FROM "Row" r
46
+ INNER JOIN "_RowToTable" rt ON r."versionId" = rt."A"
47
+ INNER JOIN "Table" t ON rt."B" = t."versionId"
48
+ INNER JOIN "_RevisionToTable" rvt ON t."versionId" = rvt."B"
49
+ WHERE rvt."A" = ${revisionId}
50
+ AND t."system" = false
51
+ AND (${whereClause})
52
+ ORDER BY r."createdAt" DESC
53
+ LIMIT ${take}
54
+ OFFSET ${skip}
55
+ `;
56
+ }
57
+ function searchRowsCountSql(revisionId, searchQuery) {
58
+ const searchFilter = {
59
+ path: [],
60
+ search: searchQuery,
61
+ searchLanguage: 'simple',
62
+ searchType: 'plain',
63
+ searchIn: 'values',
64
+ };
65
+ const whereConditions = {
66
+ data: searchFilter,
67
+ };
68
+ const whereClause = (0, prisma_pg_json_1.generateWhere)({
69
+ where: whereConditions,
70
+ fieldConfig: get_rows_sql_1.DEFAULT_ROW_FIELDS,
71
+ tableAlias: 'r',
72
+ });
73
+ return client_1.Prisma.sql `
74
+ SELECT COUNT(*) as count
75
+ FROM "Row" r
76
+ INNER JOIN "_RowToTable" rt ON r."versionId" = rt."A"
77
+ INNER JOIN "Table" t ON rt."B" = t."versionId"
78
+ INNER JOIN "_RevisionToTable" rvt ON t."versionId" = rvt."B"
79
+ WHERE rvt."A" = ${revisionId}
80
+ AND t."system" = false
81
+ AND (${whereClause})
82
+ `;
83
+ }
84
+ function convertRawRowsToEntities(rows) {
85
+ return rows.map((rawRow) => {
86
+ const row = {
87
+ versionId: rawRow.versionId,
88
+ createdId: rawRow.createdId,
89
+ id: rawRow.id,
90
+ readonly: rawRow.readonly,
91
+ createdAt: rawRow.createdAt,
92
+ updatedAt: rawRow.updatedAt,
93
+ publishedAt: rawRow.publishedAt,
94
+ data: rawRow.data,
95
+ meta: rawRow.meta,
96
+ hash: rawRow.hash,
97
+ schemaHash: rawRow.schemaHash,
98
+ };
99
+ const table = {
100
+ versionId: rawRow.table_versionId,
101
+ createdId: rawRow.table_createdId,
102
+ id: rawRow.table_id,
103
+ readonly: rawRow.table_readonly,
104
+ createdAt: rawRow.table_createdAt,
105
+ updatedAt: rawRow.table_updatedAt,
106
+ system: rawRow.table_system,
107
+ };
108
+ return { row, table };
109
+ });
110
+ }
111
+ //# sourceMappingURL=search-rows-sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-rows-sql.js","sourceRoot":"","sources":["../../../../../src/features/row/utils/search-rows-sql.ts"],"names":[],"mappings":";;AAkBA,sCAuDC;AAED,gDAgCC;AAED,4DA8BC;AA3ID,2CAAoD;AACpD,6DAIkC;AAClC,iDAAoD;AAYpD,SAAgB,aAAa,CAC3B,UAAkB,EAClB,WAAmB,EACnB,IAAY,EACZ,IAAY;IAEZ,MAAM,YAAY,GAAe;QAC/B,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,WAAW;QACnB,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,OAAO;QACnB,QAAQ,EAAE,QAAQ;KACnB,CAAC;IAEF,MAAM,eAAe,GAAoD;QACvE,IAAI,EAAE,YAAY;KACnB,CAAC;IAEF,MAAM,WAAW,GAAG,IAAA,8BAAa,EAAC;QAChC,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,iCAAkB;QAC/B,UAAU,EAAE,GAAG;KAChB,CAAC,CAAC;IAEH,OAAO,eAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;sBAwBG,UAAU;;aAEnB,WAAW;;YAEZ,IAAI;aACH,IAAI;GACd,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB,CAChC,UAAkB,EAClB,WAAmB;IAEnB,MAAM,YAAY,GAAe;QAC/B,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,WAAW;QACnB,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,OAAO;QACnB,QAAQ,EAAE,QAAQ;KACnB,CAAC;IAEF,MAAM,eAAe,GAAoD;QACvE,IAAI,EAAE,YAAY;KACnB,CAAC;IAEF,MAAM,WAAW,GAAG,IAAA,8BAAa,EAAC;QAChC,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,iCAAkB;QAC/B,UAAU,EAAE,GAAG;KAChB,CAAC,CAAC;IAEH,OAAO,eAAM,CAAC,GAAG,CAAA;;;;;;sBAMG,UAAU;;aAEnB,WAAW;GACrB,CAAC;AACJ,CAAC;AAED,SAAgB,wBAAwB,CACtC,IAAoB;IAEpB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACzB,MAAM,GAAG,GAAQ;YACf,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;QAEF,MAAM,KAAK,GAAU;YACnB,SAAS,EAAE,MAAM,CAAC,eAAe;YACjC,SAAS,EAAE,MAAM,CAAC,eAAe;YACjC,EAAE,EAAE,MAAM,CAAC,QAAQ;YACnB,QAAQ,EAAE,MAAM,CAAC,cAAc;YAC/B,SAAS,EAAE,MAAM,CAAC,eAAe;YACjC,SAAS,EAAE,MAAM,CAAC,eAAe;YACjC,MAAM,EAAE,MAAM,CAAC,YAAY;SAC5B,CAAC;QAEF,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC"}