@acorex/connectivity 21.0.0-next.3 → 21.0.0-next.5

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 (24) hide show
  1. package/fesm2022/acorex-connectivity-mock-get-application-versions-chart-data.query-C3eQfF0A.mjs +115 -0
  2. package/fesm2022/acorex-connectivity-mock-get-application-versions-chart-data.query-C3eQfF0A.mjs.map +1 -0
  3. package/fesm2022/acorex-connectivity-mock-get-application-versions-timeline.query-CLzDz9ob.mjs +163 -0
  4. package/fesm2022/acorex-connectivity-mock-get-application-versions-timeline.query-CLzDz9ob.mjs.map +1 -0
  5. package/fesm2022/acorex-connectivity-mock-get-product-chart-data.query-DDVVFeYN.mjs +97 -0
  6. package/fesm2022/acorex-connectivity-mock-get-product-chart-data.query-DDVVFeYN.mjs.map +1 -0
  7. package/fesm2022/acorex-connectivity-mock-get-product-list.query-ChtYlSTt.mjs +157 -0
  8. package/fesm2022/acorex-connectivity-mock-get-product-list.query-ChtYlSTt.mjs.map +1 -0
  9. package/fesm2022/acorex-connectivity-mock-get-subscriptions-chart-data.query-HxX_bCT8.mjs +56 -0
  10. package/fesm2022/acorex-connectivity-mock-get-subscriptions-chart-data.query-HxX_bCT8.mjs.map +1 -0
  11. package/fesm2022/acorex-connectivity-mock-get-subscriptions-timeline.query-dp08JqLP.mjs +168 -0
  12. package/fesm2022/acorex-connectivity-mock-get-subscriptions-timeline.query-dp08JqLP.mjs.map +1 -0
  13. package/fesm2022/acorex-connectivity-mock-get-tenant-application-access.query-IATTXcAV.mjs +180 -0
  14. package/fesm2022/acorex-connectivity-mock-get-tenant-application-access.query-IATTXcAV.mjs.map +1 -0
  15. package/fesm2022/acorex-connectivity-mock-get-tenant-registration-chart-data.query-DlXi4Rcg.mjs +56 -0
  16. package/fesm2022/acorex-connectivity-mock-get-tenant-registration-chart-data.query-DlXi4Rcg.mjs.map +1 -0
  17. package/fesm2022/acorex-connectivity-mock-get-tenant-registration-timeline.query-hskw8Ioa.mjs +216 -0
  18. package/fesm2022/acorex-connectivity-mock-get-tenant-registration-timeline.query-hskw8Ioa.mjs.map +1 -0
  19. package/fesm2022/acorex-connectivity-mock-get-tenant-user-distribution.query-Bs5U5tze.mjs +134 -0
  20. package/fesm2022/acorex-connectivity-mock-get-tenant-user-distribution.query-Bs5U5tze.mjs.map +1 -0
  21. package/fesm2022/acorex-connectivity-mock.mjs +4585 -6501
  22. package/fesm2022/acorex-connectivity-mock.mjs.map +1 -1
  23. package/mock/index.d.ts +35 -253
  24. package/package.json +2 -2
@@ -0,0 +1,157 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { AXPEntityService } from '@acorex/platform/layout/entity';
4
+ import { RootConfig } from '@acorex/modules/product-catalog';
5
+
6
+ //#endregion
7
+ class GetProductListQuery {
8
+ constructor() {
9
+ this.entityService = inject(AXPEntityService);
10
+ this.productService = this.entityService.withEntity(`${RootConfig.module.name}.${RootConfig.entities.product.name}`).data();
11
+ }
12
+ async fetch(input) {
13
+ // Separate custom filters from entity filters
14
+ const entityFilters = [];
15
+ let priceRangeFilter;
16
+ if (input.filters && input.filters.length > 0) {
17
+ for (const filter of input.filters) {
18
+ if (filter.field === 'priceRange') {
19
+ priceRangeFilter = filter.value;
20
+ }
21
+ else {
22
+ entityFilters.push(filter);
23
+ }
24
+ }
25
+ }
26
+ // Get all products from storage with entity filters
27
+ const allProductsResult = await this.productService.query({
28
+ skip: 0,
29
+ take: 10000, // Get all products for aggregation
30
+ filter: entityFilters.length > 0
31
+ ? {
32
+ logic: input.logic || 'and',
33
+ filters: entityFilters,
34
+ }
35
+ : undefined,
36
+ });
37
+ let allProducts = allProductsResult.items;
38
+ // Apply custom price range filter after fetching
39
+ if (priceRangeFilter && priceRangeFilter !== 'all') {
40
+ allProducts = this.applyPriceRangeFilter(allProducts, priceRangeFilter);
41
+ }
42
+ // Group products by brand
43
+ const brandGroups = new Map();
44
+ for (const product of allProducts) {
45
+ const brandKey = product.brand?.title || product.brandId || 'Unknown';
46
+ if (!brandGroups.has(brandKey)) {
47
+ brandGroups.set(brandKey, []);
48
+ }
49
+ brandGroups.get(brandKey).push(product);
50
+ }
51
+ // Aggregate data by brand
52
+ const aggregatedResults = [];
53
+ for (const [brandName, products] of brandGroups.entries()) {
54
+ const prices = products.map((p) => p.basePrice || 0).filter((p) => p > 0);
55
+ const totalValue = prices.reduce((sum, price) => sum + price, 0);
56
+ const productCount = products.length;
57
+ const averagePrice = productCount > 0 ? totalValue / productCount : 0;
58
+ const minPrice = prices.length > 0 ? Math.min(...prices) : 0;
59
+ const maxPrice = prices.length > 0 ? Math.max(...prices) : 0;
60
+ // Get unique categories
61
+ const categorySet = new Set();
62
+ for (const product of products) {
63
+ if (product.categories && Array.isArray(product.categories)) {
64
+ for (const cat of product.categories) {
65
+ if (cat.title) {
66
+ categorySet.add(cat.title);
67
+ }
68
+ }
69
+ }
70
+ }
71
+ const categories = Array.from(categorySet).join(', ');
72
+ // Get brand ID from first product
73
+ const brandId = products[0]?.brandId || products[0]?.brand?.id;
74
+ // Get manufacturer from first product (assuming all products in a brand have same manufacturer)
75
+ const manufacturerName = products[0]?.manufacturer?.title || products[0]?.manufacturerId || 'Unknown';
76
+ const manufacturerId = products[0]?.manufacturerId || products[0]?.manufacturer?.id;
77
+ aggregatedResults.push({
78
+ brand: brandName,
79
+ brandId,
80
+ manufacturer: manufacturerName,
81
+ manufacturerId,
82
+ productCount,
83
+ totalValue: Number(totalValue.toFixed(2)),
84
+ averagePrice: Number(averagePrice.toFixed(2)),
85
+ minPrice: Number(minPrice.toFixed(2)),
86
+ maxPrice: Number(maxPrice.toFixed(2)),
87
+ categories,
88
+ });
89
+ }
90
+ // Apply sorting if provided
91
+ if (input.sort && input.sort.length > 0) {
92
+ aggregatedResults.sort((a, b) => {
93
+ for (const sortField of input.sort) {
94
+ const field = sortField.field;
95
+ const aValue = a[field];
96
+ const bValue = b[field];
97
+ const dir = sortField.dir === 'asc' ? 1 : -1;
98
+ // Handle undefined values
99
+ if (aValue === undefined && bValue === undefined)
100
+ continue;
101
+ if (aValue === undefined)
102
+ return 1 * dir;
103
+ if (bValue === undefined)
104
+ return -1 * dir;
105
+ if (aValue < bValue)
106
+ return -1 * dir;
107
+ if (aValue > bValue)
108
+ return 1 * dir;
109
+ }
110
+ return 0;
111
+ });
112
+ }
113
+ // Apply pagination
114
+ const skip = input.skip || 0;
115
+ const take = input.take || 10;
116
+ const total = aggregatedResults.length;
117
+ const items = aggregatedResults.slice(skip, skip + take);
118
+ return {
119
+ items,
120
+ total,
121
+ };
122
+ }
123
+ //#region ---- Custom Filter Handlers ----
124
+ /**
125
+ * Apply custom price range filter to products
126
+ */
127
+ applyPriceRangeFilter(products, priceRange) {
128
+ return products.filter((product) => {
129
+ const price = product.basePrice || 0;
130
+ switch (priceRange) {
131
+ case 'under-50':
132
+ return price < 50;
133
+ case '50-100':
134
+ return price >= 50 && price < 100;
135
+ case '100-500':
136
+ return price >= 100 && price < 500;
137
+ case '500-1000':
138
+ return price >= 500 && price < 1000;
139
+ case 'over-1000':
140
+ return price >= 1000;
141
+ default:
142
+ return true;
143
+ }
144
+ });
145
+ }
146
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: GetProductListQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
147
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: GetProductListQuery, providedIn: 'root' }); }
148
+ }
149
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: GetProductListQuery, decorators: [{
150
+ type: Injectable,
151
+ args: [{
152
+ providedIn: 'root',
153
+ }]
154
+ }] });
155
+
156
+ export { GetProductListQuery };
157
+ //# sourceMappingURL=acorex-connectivity-mock-get-product-list.query-ChtYlSTt.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-connectivity-mock-get-product-list.query-ChtYlSTt.mjs","sources":["../tmp-esm2022/mock/lib/product-catalog/reports/get-product-list.query.js"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '@acorex/modules/product-catalog';\nimport * as i0 from \"@angular/core\";\n//#endregion\nexport class GetProductListQuery {\n constructor() {\n this.entityService = inject(AXPEntityService);\n this.productService = this.entityService.withEntity(`${RootConfig.module.name}.${RootConfig.entities.product.name}`).data();\n }\n async fetch(input) {\n // Separate custom filters from entity filters\n const entityFilters = [];\n let priceRangeFilter;\n if (input.filters && input.filters.length > 0) {\n for (const filter of input.filters) {\n if (filter.field === 'priceRange') {\n priceRangeFilter = filter.value;\n }\n else {\n entityFilters.push(filter);\n }\n }\n }\n // Get all products from storage with entity filters\n const allProductsResult = await this.productService.query({\n skip: 0,\n take: 10000, // Get all products for aggregation\n filter: entityFilters.length > 0\n ? {\n logic: input.logic || 'and',\n filters: entityFilters,\n }\n : undefined,\n });\n let allProducts = allProductsResult.items;\n // Apply custom price range filter after fetching\n if (priceRangeFilter && priceRangeFilter !== 'all') {\n allProducts = this.applyPriceRangeFilter(allProducts, priceRangeFilter);\n }\n // Group products by brand\n const brandGroups = new Map();\n for (const product of allProducts) {\n const brandKey = product.brand?.title || product.brandId || 'Unknown';\n if (!brandGroups.has(brandKey)) {\n brandGroups.set(brandKey, []);\n }\n brandGroups.get(brandKey).push(product);\n }\n // Aggregate data by brand\n const aggregatedResults = [];\n for (const [brandName, products] of brandGroups.entries()) {\n const prices = products.map((p) => p.basePrice || 0).filter((p) => p > 0);\n const totalValue = prices.reduce((sum, price) => sum + price, 0);\n const productCount = products.length;\n const averagePrice = productCount > 0 ? totalValue / productCount : 0;\n const minPrice = prices.length > 0 ? Math.min(...prices) : 0;\n const maxPrice = prices.length > 0 ? Math.max(...prices) : 0;\n // Get unique categories\n const categorySet = new Set();\n for (const product of products) {\n if (product.categories && Array.isArray(product.categories)) {\n for (const cat of product.categories) {\n if (cat.title) {\n categorySet.add(cat.title);\n }\n }\n }\n }\n const categories = Array.from(categorySet).join(', ');\n // Get brand ID from first product\n const brandId = products[0]?.brandId || products[0]?.brand?.id;\n // Get manufacturer from first product (assuming all products in a brand have same manufacturer)\n const manufacturerName = products[0]?.manufacturer?.title || products[0]?.manufacturerId || 'Unknown';\n const manufacturerId = products[0]?.manufacturerId || products[0]?.manufacturer?.id;\n aggregatedResults.push({\n brand: brandName,\n brandId,\n manufacturer: manufacturerName,\n manufacturerId,\n productCount,\n totalValue: Number(totalValue.toFixed(2)),\n averagePrice: Number(averagePrice.toFixed(2)),\n minPrice: Number(minPrice.toFixed(2)),\n maxPrice: Number(maxPrice.toFixed(2)),\n categories,\n });\n }\n // Apply sorting if provided\n if (input.sort && input.sort.length > 0) {\n aggregatedResults.sort((a, b) => {\n for (const sortField of input.sort) {\n const field = sortField.field;\n const aValue = a[field];\n const bValue = b[field];\n const dir = sortField.dir === 'asc' ? 1 : -1;\n // Handle undefined values\n if (aValue === undefined && bValue === undefined)\n continue;\n if (aValue === undefined)\n return 1 * dir;\n if (bValue === undefined)\n return -1 * dir;\n if (aValue < bValue)\n return -1 * dir;\n if (aValue > bValue)\n return 1 * dir;\n }\n return 0;\n });\n }\n // Apply pagination\n const skip = input.skip || 0;\n const take = input.take || 10;\n const total = aggregatedResults.length;\n const items = aggregatedResults.slice(skip, skip + take);\n return {\n items,\n total,\n };\n }\n //#region ---- Custom Filter Handlers ----\n /**\n * Apply custom price range filter to products\n */\n applyPriceRangeFilter(products, priceRange) {\n return products.filter((product) => {\n const price = product.basePrice || 0;\n switch (priceRange) {\n case 'under-50':\n return price < 50;\n case '50-100':\n return price >= 50 && price < 100;\n case '100-500':\n return price >= 100 && price < 500;\n case '500-1000':\n return price >= 500 && price < 1000;\n case 'over-1000':\n return price >= 1000;\n default:\n return true;\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: GetProductListQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: GetProductListQuery, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: GetProductListQuery, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXByb2R1Y3QtbGlzdC5xdWVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29ubmVjdGl2aXR5L21vY2svc3JjL2xpYi9wcm9kdWN0LWNhdGFsb2cvcmVwb3J0cy9nZXQtcHJvZHVjdC1saXN0LnF1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFtQyxNQUFNLGVBQWUsQ0FBQztBQUVwRixPQUFPLEVBQTRCLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOztBQW1DN0QsWUFBWTtBQUtaLE1BQU0sT0FBTyxtQkFBbUI7SUFIaEM7UUFJbUIsa0JBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRCxtQkFBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQStDLENBQUM7S0E4SjdLO0lBNUpDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBK0I7UUFDekMsOENBQThDO1FBQzlDLE1BQU0sYUFBYSxHQUF3QyxFQUFFLENBQUM7UUFDOUQsSUFBSSxnQkFBb0MsQ0FBQztRQUV6QyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUMsS0FBSyxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ25DLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxZQUFZLEVBQUUsQ0FBQztvQkFDbEMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztn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Q0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQTdKVSxtQkFBbUI7bUhBQW5CLG1CQUFtQixjQUZsQixNQUFNOzs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBRdWVyeSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vcnVudGltZSc7XG5pbXBvcnQgeyBBWE1FbnRpdHlDcnVkU2VydmljZUltcGwsIEFYUEVudGl0eVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgQVhNUHJvZHVjdENhdGFsb2dQcm9kdWN0RW50aXR5TW9kZWwgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvcHJvZHVjdC1jYXRhbG9nJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvcHJvZHVjdC1jYXRhbG9nJztcbmltcG9ydCB7IGFwcGx5RmlsdGVyQXJyYXkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuXG4vLyNyZWdpb24gLS0tLSAgIFF1ZXJ5IElucHV0L091dHB1dCBUeXBlcyAgIC0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRQcm9kdWN0TGlzdFF1ZXJ5SW5wdXQge1xuICBza2lwPzogbnVtYmVyO1xuICB0YWtlPzogbnVtYmVyO1xuICBzb3J0PzogQXJyYXk8eyBmaWVsZDogc3RyaW5nOyBkaXI6ICdhc2MnIHwgJ2Rlc2MnIH0+O1xuICBmaWx0ZXJzPzogQXJyYXk8e1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgb3BlcmF0b3I6IHsgdHlwZTogc3RyaW5nIH07XG4gICAgdmFsdWU6IGFueTtcbiAgfT47XG4gIGxvZ2ljPzogJ2FuZCcgfCAnb3InO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2R1Y3RCeUJyYW5kUmVzdWx0IHtcbiAgYnJhbmQ6IHN0cmluZztcbiAgYnJhbmRJZD86IHN0cmluZztcbiAgbWFudWZhY3R1cmVyOiBzdHJpbmc7XG4gIG1hbnVmYWN0dXJlcklkPzogc3RyaW5nO1xuICBwcm9kdWN0Q291bnQ6IG51bWJlcjtcbiAgdG90YWxWYWx1ZTogbnVtYmVyO1xuICBhdmVyYWdlUHJpY2U6IG51bWJlcjtcbiAgbWluUHJpY2U6IG51bWJlcjtcbiAgbWF4UHJpY2U6IG51bWJlcjtcbiAgY2F0ZWdvcmllczogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFByb2R1Y3RMaXN0UXVlcnlSZXN1bHQge1xuICBpdGVtczogUHJvZHVjdEJ5QnJhbmRSZXN1bHRbXTtcbiAgdG90YWw6IG51bWJlcjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHZXRQcm9kdWN0TGlzdFF1ZXJ5IGltcGxlbWVudHMgQVhQUXVlcnk8R2V0UHJvZHVjdExpc3RRdWVyeUlucHV0LCBHZXRQcm9kdWN0TGlzdFF1ZXJ5UmVzdWx0PiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50aXR5U2VydmljZSA9IGluamVjdChBWFBFbnRpdHlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBwcm9kdWN0U2VydmljZSA9IHRoaXMuZW50aXR5U2VydmljZS53aXRoRW50aXR5KGAke1Jvb3RDb25maWcubW9kdWxlLm5hbWV9LiR7Um9vdENvbmZpZy5lbnRpdGllcy5wcm9kdWN0Lm5hbWV9YCkuZGF0YTxzdHJpbmcsIEFYTVByb2R1Y3RDYXRhbG9nUHJvZHVjdEVudGl0eU1vZGVsPigpO1xuXG4gIGFzeW5jIGZldGNoKGlucHV0OiBHZXRQcm9kdWN0TGlzdFF1ZXJ5SW5wdXQpOiBQcm9taXNlPEdldFByb2R1Y3RMaXN0UXVlcnlSZXN1bHQ+IHtcbiAgICAvLyBTZXBhcmF0ZSBjdXN0b20gZmlsdGVycyBmcm9tIGVudGl0eSBmaWx0ZXJzXG4gICAgY29uc3QgZW50aXR5RmlsdGVyczogR2V0UHJvZHVjdExpc3RRdWVyeUlucHV0WydmaWx0ZXJzJ10gPSBbXTtcbiAgICBsZXQgcHJpY2VSYW5nZUZpbHRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKGlucHV0LmZpbHRlcnMgJiYgaW5wdXQuZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBpbnB1dC5maWx0ZXJzKSB7XG4gICAgICAgIGlmIChmaWx0ZXIuZmllbGQgPT09ICdwcmljZVJhbmdlJykge1xuICAgICAgICAgIHByaWNlUmFuZ2VGaWx0ZXIgPSBmaWx0ZXIudmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW50aXR5RmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgYWxsIHByb2R1Y3RzIGZyb20gc3RvcmFnZSB3aXRoIGVudGl0eSBmaWx0ZXJzXG4gICAgY29uc3QgYWxsUHJvZHVjdHNSZXN1bHQgPSBhd2FpdCB0aGlzLnByb2R1Y3RTZXJ2aWNlLnF1ZXJ5KHtcbiAgICAgIHNraXA6IDAsXG4gICAgICB0YWtlOiAxMDAwMCwgLy8gR2V0IGFsbCBwcm9kdWN0cyBmb3IgYWdncmVnYXRpb25cbiAgICAgIGZpbHRlcjpcbiAgICAgICAgZW50aXR5RmlsdGVycy5sZW5ndGggPiAwXG4gICAgICAgICAgPyAoe1xuICAgICAgICAgICAgbG9naWM6IGlucHV0LmxvZ2ljIHx8ICdhbmQnLFxuICAgICAgICAgICAgZmlsdGVyczogZW50aXR5RmlsdGVycyxcbiAgICAgICAgICB9IGFzIGFueSlcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIGxldCBhbGxQcm9kdWN0cyA9IGFsbFByb2R1Y3RzUmVzdWx0Lml0ZW1zO1xuXG4gICAgLy8gQXBwbHkgY3VzdG9tIHByaWNlIHJhbmdlIGZpbHRlciBhZnRlciBmZXRjaGluZ1xuICAgIGlmIChwcmljZVJhbmdlRmlsdGVyICYmIHByaWNlUmFuZ2VGaWx0ZXIgIT09ICdhbGwnKSB7XG4gICAgICBhbGxQcm9kdWN0cyA9IHRoaXMuYXBwbHlQcmljZVJhbmdlRmlsdGVyKGFsbFByb2R1Y3RzLCBwcmljZVJhbmdlRmlsdGVyKTtcbiAgICB9XG5cbiAgICAvLyBHcm91cCBwcm9kdWN0cyBieSBicmFuZFxuICAgIGNvbnN0IGJyYW5kR3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIEFYTVByb2R1Y3RDYXRhbG9nUHJvZHVjdEVudGl0eU1vZGVsW10+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHByb2R1Y3Qgb2YgYWxsUHJvZHVjdHMpIHtcbiAgICAgIGNvbnN0IGJyYW5kS2V5ID0gcHJvZHVjdC5icmFuZD8udGl0bGUgfHwgcHJvZHVjdC5icmFuZElkIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFicmFuZEdyb3Vwcy5oYXMoYnJhbmRLZXkpKSB7XG4gICAgICAgIGJyYW5kR3JvdXBzLnNldChicmFuZEtleSwgW10pO1xuICAgICAgfVxuXG4gICAgICBicmFuZEdyb3Vwcy5nZXQoYnJhbmRLZXkpIS5wdXNoKHByb2R1Y3QpO1xuICAgIH1cblxuICAgIC8vIEFnZ3JlZ2F0ZSBkYXRhIGJ5IGJyYW5kXG4gICAgY29uc3QgYWdncmVnYXRlZFJlc3VsdHM6IFByb2R1Y3RCeUJyYW5kUmVzdWx0W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2JyYW5kTmFtZSwgcHJvZHVjdHNdIG9mIGJyYW5kR3JvdXBzLmVudHJpZXMoKSkge1xuICAgICAgY29uc3QgcHJpY2VzID0gcHJvZHVjdHMubWFwKChwKSA9PiBwLmJhc2VQcmljZSB8fCAwKS5maWx0ZXIoKHApID0+IHAgPiAwKTtcbiAgICAgIGNvbnN0IHRvdGFsVmFsdWUgPSBwcmljZXMucmVkdWNlKChzdW0sIHByaWNlKSA9PiBzdW0gKyBwcmljZSwgMCk7XG4gICAgICBjb25zdCBwcm9kdWN0Q291bnQgPSBwcm9kdWN0cy5sZW5ndGg7XG4gICAgICBjb25zdCBhdmVyYWdlUHJpY2UgPSBwcm9kdWN0Q291bnQgPiAwID8gdG90YWxWYWx1ZSAvIHByb2R1Y3RDb3VudCA6IDA7XG4gICAgICBjb25zdCBtaW5QcmljZSA9IHByaWNlcy5sZW5ndGggPiAwID8gTWF0aC5taW4oLi4ucHJpY2VzKSA6IDA7XG4gICAgICBjb25zdCBtYXhQcmljZSA9IHByaWNlcy5sZW5ndGggPiAwID8gTWF0aC5tYXgoLi4ucHJpY2VzKSA6IDA7XG5cbiAgICAgIC8vIEdldCB1bmlxdWUgY2F0ZWdvcmllc1xuICAgICAgY29uc3QgY2F0ZWdvcnlTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgIGZvciAoY29uc3QgcHJvZHVjdCBvZiBwcm9kdWN0cykge1xuICAgICAgICBpZiAocHJvZHVjdC5jYXRlZ29yaWVzICYmIEFycmF5LmlzQXJyYXkocHJvZHVjdC5jYXRlZ29yaWVzKSkge1xuICAgICAgICAgIGZvciAoY29uc3QgY2F0IG9mIHByb2R1Y3QuY2F0ZWdvcmllcykge1xuICAgICAgICAgICAgaWYgKGNhdC50aXRsZSkge1xuICAgICAgICAgICAgICBjYXRlZ29yeVNldC5hZGQoY2F0LnRpdGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBBcnJheS5mcm9tKGNhdGVnb3J5U2V0KS5qb2luKCcsICcpO1xuXG4gICAgICAvLyBHZXQgYnJhbmQgSUQgZnJvbSBmaXJzdCBwcm9kdWN0XG4gICAgICBjb25zdCBicmFuZElkID0gcHJvZHVjdHNbMF0/LmJyYW5kSWQgfHwgcHJvZHVjdHNbMF0/LmJyYW5kPy5pZDtcblxuICAgICAgLy8gR2V0IG1hbnVmYWN0dXJlciBmcm9tIGZpcnN0IHByb2R1Y3QgKGFzc3VtaW5nIGFsbCBwcm9kdWN0cyBpbiBhIGJyYW5kIGhhdmUgc2FtZSBtYW51ZmFjdHVyZXIpXG4gICAgICBjb25zdCBtYW51ZmFjdHVyZXJOYW1lID0gcHJvZHVjdHNbMF0/Lm1hbnVmYWN0dXJlcj8udGl0bGUgfHwgcHJvZHVjdHNbMF0/Lm1hbnVmYWN0dXJlcklkIHx8ICdVbmtub3duJztcbiAgICAgIGNvbnN0IG1hbnVmYWN0dXJlcklkID0gcHJvZHVjdHNbMF0/Lm1hbnVmYWN0dXJlcklkIHx8IHByb2R1Y3RzWzBdPy5tYW51ZmFjdHVyZXI/LmlkO1xuXG4gICAgICBhZ2dyZWdhdGVkUmVzdWx0cy5wdXNoKHtcbiAgICAgICAgYnJhbmQ6IGJyYW5kTmFtZSxcbiAgICAgICAgYnJhbmRJZCxcbiAgICAgICAgbWFudWZhY3R1cmVyOiBtYW51ZmFjdHVyZXJOYW1lLFxuICAgICAgICBtYW51ZmFjdHVyZXJJZCxcbiAgICAgICAgcHJvZHVjdENvdW50LFxuICAgICAgICB0b3RhbFZhbHVlOiBOdW1iZXIodG90YWxWYWx1ZS50b0ZpeGVkKDIpKSxcbiAgICAgICAgYXZlcmFnZVByaWNlOiBOdW1iZXIoYXZlcmFnZVByaWNlLnRvRml4ZWQoMikpLFxuICAgICAgICBtaW5QcmljZTogTnVtYmVyKG1pblByaWNlLnRvRml4ZWQoMikpLFxuICAgICAgICBtYXhQcmljZTogTnVtYmVyKG1heFByaWNlLnRvRml4ZWQoMikpLFxuICAgICAgICBjYXRlZ29yaWVzLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgc29ydGluZyBpZiBwcm92aWRlZFxuICAgIGlmIChpbnB1dC5zb3J0ICYmIGlucHV0LnNvcnQubGVuZ3RoID4gMCkge1xuICAgICAgYWdncmVnYXRlZFJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHNvcnRGaWVsZCBvZiBpbnB1dC5zb3J0ISkge1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gc29ydEZpZWxkLmZpZWxkIGFzIGtleW9mIFByb2R1Y3RCeUJyYW5kUmVzdWx0O1xuICAgICAgICAgIGNvbnN0IGFWYWx1ZSA9IGFbZmllbGRdO1xuICAgICAgICAgIGNvbnN0IGJWYWx1ZSA9IGJbZmllbGRdO1xuICAgICAgICAgIGNvbnN0IGRpciA9IHNvcnRGaWVsZC5kaXIgPT09ICdhc2MnID8gMSA6IC0xO1xuXG4gICAgICAgICAgLy8gSGFuZGxlIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICAgICAgICBpZiAoYVZhbHVlID09PSB1bmRlZmluZWQgJiYgYlZhbHVlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChhVmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDEgKiBkaXI7XG4gICAgICAgICAgaWYgKGJWYWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gLTEgKiBkaXI7XG5cbiAgICAgICAgICBpZiAoYVZhbHVlIDwgYlZhbHVlKSByZXR1cm4gLTEgKiBkaXI7XG4gICAgICAgICAgaWYgKGFWYWx1ZSA+IGJWYWx1ZSkgcmV0dXJuIDEgKiBkaXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBwYWdpbmF0aW9uXG4gICAgY29uc3Qgc2tpcCA9IGlucHV0LnNraXAgfHwgMDtcbiAgICBjb25zdCB0YWtlID0gaW5wdXQudGFrZSB8fCAxMDtcbiAgICBjb25zdCB0b3RhbCA9IGFnZ3JlZ2F0ZWRSZXN1bHRzLmxlbmd0aDtcbiAgICBjb25zdCBpdGVtcyA9IGFnZ3JlZ2F0ZWRSZXN1bHRzLnNsaWNlKHNraXAsIHNraXAgKyB0YWtlKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpdGVtcyxcbiAgICAgIHRvdGFsLFxuICAgIH07XG4gIH1cblxuICAvLyNyZWdpb24gLS0tLSAgIEN1c3RvbSBGaWx0ZXIgSGFuZGxlcnMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEFwcGx5IGN1c3RvbSBwcmljZSByYW5nZSBmaWx0ZXIgdG8gcHJvZHVjdHNcbiAgICovXG4gIHByaXZhdGUgYXBwbHlQcmljZVJhbmdlRmlsdGVyKFxuICAgIHByb2R1Y3RzOiBBWE1Qcm9kdWN0Q2F0YWxvZ1Byb2R1Y3RFbnRpdHlNb2RlbFtdLFxuICAgIHByaWNlUmFuZ2U6IHN0cmluZ1xuICApOiBBWE1Qcm9kdWN0Q2F0YWxvZ1Byb2R1Y3RFbnRpdHlNb2RlbFtdIHtcbiAgICByZXR1cm4gcHJvZHVjdHMuZmlsdGVyKChwcm9kdWN0KSA9PiB7XG4gICAgICBjb25zdCBwcmljZSA9IHByb2R1Y3QuYmFzZVByaWNlIHx8IDA7XG5cbiAgICAgIHN3aXRjaCAocHJpY2VSYW5nZSkge1xuICAgICAgICBjYXNlICd1bmRlci01MCc6XG4gICAgICAgICAgcmV0dXJuIHByaWNlIDwgNTA7XG4gICAgICAgIGNhc2UgJzUwLTEwMCc6XG4gICAgICAgICAgcmV0dXJuIHByaWNlID49IDUwICYmIHByaWNlIDwgMTAwO1xuICAgICAgICBjYXNlICcxMDAtNTAwJzpcbiAgICAgICAgICByZXR1cm4gcHJpY2UgPj0gMTAwICYmIHByaWNlIDwgNTAwO1xuICAgICAgICBjYXNlICc1MDAtMTAwMCc6XG4gICAgICAgICAgcmV0dXJuIHByaWNlID49IDUwMCAmJiBwcmljZSA8IDEwMDA7XG4gICAgICAgIGNhc2UgJ292ZXItMTAwMCc6XG4gICAgICAgICAgcmV0dXJuIHByaWNlID49IDEwMDA7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { GetSubscriptionsTimelineQuery } from './acorex-connectivity-mock-get-subscriptions-timeline.query-dp08JqLP.mjs';
4
+
5
+ //#endregion
6
+ class GetSubscriptionsChartDataQuery {
7
+ constructor() {
8
+ this.subscriptionsTimelineQuery = inject(GetSubscriptionsTimelineQuery);
9
+ }
10
+ async fetch(input) {
11
+ // Get all subscription timeline data (no pagination for charts)
12
+ const timelineResult = await this.subscriptionsTimelineQuery.fetch({
13
+ skip: 0,
14
+ take: 10000,
15
+ filters: input.filters,
16
+ logic: input.logic,
17
+ });
18
+ // Group by month
19
+ const monthGroups = new Map();
20
+ for (const item of timelineResult.items) {
21
+ const monthKey = `${item.year}-${String(item.monthNumber).padStart(2, '0')}`;
22
+ if (!monthGroups.has(monthKey)) {
23
+ monthGroups.set(monthKey, {
24
+ month: item.month,
25
+ year: item.year,
26
+ quarter: item.quarter,
27
+ subscriptionCount: 0,
28
+ });
29
+ }
30
+ const group = monthGroups.get(monthKey);
31
+ group.subscriptionCount++;
32
+ }
33
+ // Convert to array and sort by date
34
+ const results = Array.from(monthGroups.values()).sort((a, b) => {
35
+ if (a.year !== b.year)
36
+ return a.year - b.year;
37
+ const monthA = new Date(`${a.month} 1, ${a.year}`).getMonth();
38
+ const monthB = new Date(`${b.month} 1, ${b.year}`).getMonth();
39
+ return monthA - monthB;
40
+ });
41
+ return {
42
+ items: results,
43
+ };
44
+ }
45
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: GetSubscriptionsChartDataQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
46
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: GetSubscriptionsChartDataQuery, providedIn: 'root' }); }
47
+ }
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: GetSubscriptionsChartDataQuery, decorators: [{
49
+ type: Injectable,
50
+ args: [{
51
+ providedIn: 'root',
52
+ }]
53
+ }] });
54
+
55
+ export { GetSubscriptionsChartDataQuery };
56
+ //# sourceMappingURL=acorex-connectivity-mock-get-subscriptions-chart-data.query-HxX_bCT8.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-connectivity-mock-get-subscriptions-chart-data.query-HxX_bCT8.mjs","sources":["../tmp-esm2022/mock/lib/tenant-management/reports/get-subscriptions-chart-data.query.js"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { GetSubscriptionsTimelineQuery } from './get-subscriptions-timeline.query';\nimport * as i0 from \"@angular/core\";\n//#endregion\nexport class GetSubscriptionsChartDataQuery {\n constructor() {\n this.subscriptionsTimelineQuery = inject(GetSubscriptionsTimelineQuery);\n }\n async fetch(input) {\n // Get all subscription timeline data (no pagination for charts)\n const timelineResult = await this.subscriptionsTimelineQuery.fetch({\n skip: 0,\n take: 10000,\n filters: input.filters,\n logic: input.logic,\n });\n // Group by month\n const monthGroups = new Map();\n for (const item of timelineResult.items) {\n const monthKey = `${item.year}-${String(item.monthNumber).padStart(2, '0')}`;\n if (!monthGroups.has(monthKey)) {\n monthGroups.set(monthKey, {\n month: item.month,\n year: item.year,\n quarter: item.quarter,\n subscriptionCount: 0,\n });\n }\n const group = monthGroups.get(monthKey);\n group.subscriptionCount++;\n }\n // Convert to array and sort by date\n const results = Array.from(monthGroups.values()).sort((a, b) => {\n if (a.year !== b.year)\n return a.year - b.year;\n const monthA = new Date(`${a.month} 1, ${a.year}`).getMonth();\n const monthB = new Date(`${b.month} 1, ${b.year}`).getMonth();\n return monthA - monthB;\n });\n return {\n items: results,\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: GetSubscriptionsChartDataQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: GetSubscriptionsChartDataQuery, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: GetSubscriptionsChartDataQuery, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXN1YnNjcmlwdGlvbnMtY2hhcnQtZGF0YS5xdWVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29ubmVjdGl2aXR5L21vY2svc3JjL2xpYi90ZW5hbnQtbWFuYWdlbWVudC9yZXBvcnRzL2dldC1zdWJzY3JpcHRpb25zLWNoYXJ0LWRhdGEucXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBd0JuRixZQUFZO0FBS1osTUFBTSxPQUFPLDhCQUE4QjtJQUgzQztRQU1tQiwrQkFBMEIsR0FBRyxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQztLQTBDckY7SUF4Q0MsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUEwQztRQUNwRCxnRUFBZ0U7UUFDaEUsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDO1lBQ2pFLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxFQUFFLEtBQUs7WUFDWCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1NBQ25CLENBQUMsQ0FBQztRQUVILGlCQUFpQjtRQUNqQixNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBd0MsQ0FBQztRQUVwRSxLQUFLLE1BQU0sSUFBSSxJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4QyxNQUFNLFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFFN0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUU7b0JBQ3hCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDckIsaUJBQWlCLEVBQUUsQ0FBQztpQkFDckIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFFLENBQUM7WUFDekMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUVELG9DQUFvQztRQUNwQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3RCxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUk7Z0JBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDOUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlELE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5RCxPQUFPLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPO1lBQ0wsS0FBSyxFQUFFLE9BQU87U0FDZixDQUFDO0lBQ0osQ0FBQzsrR0E1Q1UsOEJBQThCO21IQUE5Qiw4QkFBOEIsY0FGN0IsTUFBTTs7NEZBRVAsOEJBQThCO2tCQUgxQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQUXVlcnkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3J1bnRpbWUnO1xuaW1wb3J0IHsgR2V0U3Vic2NyaXB0aW9uc1RpbWVsaW5lUXVlcnlJbnB1dCB9IGZyb20gJy4vZ2V0LXN1YnNjcmlwdGlvbnMtdGltZWxpbmUucXVlcnknO1xuaW1wb3J0IHsgR2V0U3Vic2NyaXB0aW9uc1RpbWVsaW5lUXVlcnkgfSBmcm9tICcuL2dldC1zdWJzY3JpcHRpb25zLXRpbWVsaW5lLnF1ZXJ5JztcblxuLy8jcmVnaW9uIC0tLS0gICBRdWVyeSBJbnB1dC9PdXRwdXQgVHlwZXMgICAtLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0U3Vic2NyaXB0aW9uc0NoYXJ0RGF0YVF1ZXJ5SW5wdXQge1xuICBmaWx0ZXJzPzogQXJyYXk8e1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgb3BlcmF0b3I6IHsgdHlwZTogc3RyaW5nIH07XG4gICAgdmFsdWU6IGFueTtcbiAgfT47XG4gIGxvZ2ljPzogJ2FuZCcgfCAnb3InO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YnNjcmlwdGlvbnNDaGFydERhdGFSZXN1bHQge1xuICBtb250aDogc3RyaW5nO1xuICB5ZWFyOiBudW1iZXI7XG4gIHF1YXJ0ZXI6IHN0cmluZztcbiAgc3Vic2NyaXB0aW9uQ291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRTdWJzY3JpcHRpb25zQ2hhcnREYXRhUXVlcnlSZXN1bHQge1xuICBpdGVtczogU3Vic2NyaXB0aW9uc0NoYXJ0RGF0YVJlc3VsdFtdO1xufVxuXG4vLyNlbmRyZWdpb25cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEdldFN1YnNjcmlwdGlvbnNDaGFydERhdGFRdWVyeVxuICBpbXBsZW1lbnRzIEFYUFF1ZXJ5PEdldFN1YnNjcmlwdGlvbnNDaGFydERhdGFRdWVyeUlucHV0LCBHZXRTdWJzY3JpcHRpb25zQ2hhcnREYXRhUXVlcnlSZXN1bHQ+XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgc3Vic2NyaXB0aW9uc1RpbWVsaW5lUXVlcnkgPSBpbmplY3QoR2V0U3Vic2NyaXB0aW9uc1RpbWVsaW5lUXVlcnkpO1xuXG4gIGFzeW5jIGZldGNoKGlucHV0OiBHZXRTdWJzY3JpcHRpb25zQ2hhcnREYXRhUXVlcnlJbnB1dCk6IFByb21pc2U8R2V0U3Vic2NyaXB0aW9uc0NoYXJ0RGF0YVF1ZXJ5UmVzdWx0PiB7XG4gICAgLy8gR2V0IGFsbCBzdWJzY3JpcHRpb24gdGltZWxpbmUgZGF0YSAobm8gcGFnaW5hdGlvbiBmb3IgY2hhcnRzKVxuICAgIGNvbnN0IHRpbWVsaW5lUmVzdWx0ID0gYXdhaXQgdGhpcy5zdWJzY3JpcHRpb25zVGltZWxpbmVRdWVyeS5mZXRjaCh7XG4gICAgICBza2lwOiAwLFxuICAgICAgdGFrZTogMTAwMDAsXG4gICAgICBmaWx0ZXJzOiBpbnB1dC5maWx0ZXJzLFxuICAgICAgbG9naWM6IGlucHV0LmxvZ2ljLFxuICAgIH0pO1xuXG4gICAgLy8gR3JvdXAgYnkgbW9udGhcbiAgICBjb25zdCBtb250aEdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBTdWJzY3JpcHRpb25zQ2hhcnREYXRhUmVzdWx0PigpO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRpbWVsaW5lUmVzdWx0Lml0ZW1zKSB7XG4gICAgICBjb25zdCBtb250aEtleSA9IGAke2l0ZW0ueWVhcn0tJHtTdHJpbmcoaXRlbS5tb250aE51bWJlcikucGFkU3RhcnQoMiwgJzAnKX1gO1xuXG4gICAgICBpZiAoIW1vbnRoR3JvdXBzLmhhcyhtb250aEtleSkpIHtcbiAgICAgICAgbW9udGhHcm91cHMuc2V0KG1vbnRoS2V5LCB7XG4gICAgICAgICAgbW9udGg6IGl0ZW0ubW9udGgsXG4gICAgICAgICAgeWVhcjogaXRlbS55ZWFyLFxuICAgICAgICAgIHF1YXJ0ZXI6IGl0ZW0ucXVhcnRlcixcbiAgICAgICAgICBzdWJzY3JpcHRpb25Db3VudDogMCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdyb3VwID0gbW9udGhHcm91cHMuZ2V0KG1vbnRoS2V5KSE7XG4gICAgICBncm91cC5zdWJzY3JpcHRpb25Db3VudCsrO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgdG8gYXJyYXkgYW5kIHNvcnQgYnkgZGF0ZVxuICAgIGNvbnN0IHJlc3VsdHMgPSBBcnJheS5mcm9tKG1vbnRoR3JvdXBzLnZhbHVlcygpKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoYS55ZWFyICE9PSBiLnllYXIpIHJldHVybiBhLnllYXIgLSBiLnllYXI7XG4gICAgICBjb25zdCBtb250aEEgPSBuZXcgRGF0ZShgJHthLm1vbnRofSAxLCAke2EueWVhcn1gKS5nZXRNb250aCgpO1xuICAgICAgY29uc3QgbW9udGhCID0gbmV3IERhdGUoYCR7Yi5tb250aH0gMSwgJHtiLnllYXJ9YCkuZ2V0TW9udGgoKTtcbiAgICAgIHJldHVybiBtb250aEEgLSBtb250aEI7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHJlc3VsdHMsXG4gICAgfTtcbiAgfVxufVxuXG4iXX0="],"names":[],"mappings":"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"}
@@ -0,0 +1,168 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { AXPEntityService } from '@acorex/platform/layout/entity';
4
+ import { AXPSystemStatusType } from '@acorex/platform/common';
5
+ import { RootConfig } from '@acorex/modules/subscription-management';
6
+ import { RootConfig as RootConfig$1 } from '@acorex/modules/tenant-management';
7
+
8
+ //#endregion
9
+ class GetSubscriptionsTimelineQuery {
10
+ constructor() {
11
+ this.entityService = inject(AXPEntityService);
12
+ this.subscriptionService = this.entityService
13
+ .withEntity(`${RootConfig.module.name}.${RootConfig.entities.subscription.name}`)
14
+ .data();
15
+ this.tenantService = this.entityService
16
+ .withEntity(`${RootConfig$1.module.name}.${RootConfig$1.entities.tenant.name}`)
17
+ .data();
18
+ }
19
+ async fetch(input) {
20
+ // Get all subscriptions
21
+ const subscriptionsResult = await this.subscriptionService.query({
22
+ skip: 0,
23
+ take: 10000,
24
+ filter: input.filters && input.filters.length > 0
25
+ ? {
26
+ logic: input.logic || 'and',
27
+ filters: input.filters.filter((f) => f.field !== 'dateRange'),
28
+ }
29
+ : undefined,
30
+ });
31
+ let subscriptions = subscriptionsResult.items.filter((s) => s.subscriberType === 'Tenant');
32
+ // Get all tenants for lookup
33
+ const tenantsResult = await this.tenantService.query({
34
+ skip: 0,
35
+ take: 10000,
36
+ });
37
+ const tenants = tenantsResult.items;
38
+ const tenantMap = new Map(tenants.map((t) => [t.id, t]));
39
+ // Apply date range filter if provided
40
+ if (input.filters) {
41
+ for (const filter of input.filters) {
42
+ if (filter.field === 'dateRange' && filter.value) {
43
+ subscriptions = this.applyDateRangeFilter(subscriptions, filter.value);
44
+ }
45
+ }
46
+ }
47
+ const now = new Date();
48
+ // Build results
49
+ const results = [];
50
+ for (const subscription of subscriptions) {
51
+ const startDate = new Date(subscription.startDate);
52
+ const endDate = subscription.endDate ? new Date(subscription.endDate) : undefined;
53
+ // Calculate duration in days
54
+ const durationDays = endDate
55
+ ? Math.ceil((endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24))
56
+ : Math.ceil((now.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24));
57
+ // Extract time period info from start date
58
+ const year = startDate.getFullYear();
59
+ const month = startDate.getMonth() + 1;
60
+ const monthName = startDate.toLocaleString('en-US', { month: 'long' });
61
+ const quarter = Math.ceil(month / 3);
62
+ const quarterName = `Q${quarter}`;
63
+ // Check if subscription is currently active
64
+ const isActive = subscription.statusId === AXPSystemStatusType.Active &&
65
+ startDate <= now &&
66
+ (!endDate || endDate >= now);
67
+ // Get tenant name
68
+ const tenant = tenantMap.get(subscription.subscriberId);
69
+ results.push({
70
+ subscriptionId: subscription.id,
71
+ subscriptionTitle: subscription.title || `${tenant?.title || 'Unknown'} - ${subscription.plan?.title || 'Unknown Plan'}`,
72
+ tenantId: subscription.subscriberId,
73
+ tenantName: tenant?.title || 'Unknown',
74
+ planId: subscription.planId,
75
+ planName: subscription.plan?.title || 'Unknown',
76
+ status: subscription.statusId || 'Unknown',
77
+ startDate: startDate,
78
+ startDateStr: startDate.toISOString(),
79
+ endDate: endDate,
80
+ endDateStr: endDate?.toISOString(),
81
+ durationDays: durationDays,
82
+ month: monthName,
83
+ monthNumber: month,
84
+ quarter: quarterName,
85
+ year: year,
86
+ isActive: isActive,
87
+ });
88
+ }
89
+ // Apply sorting if provided
90
+ if (input.sort && input.sort.length > 0) {
91
+ results.sort((a, b) => {
92
+ for (const sortField of input.sort) {
93
+ const field = sortField.field;
94
+ const aValue = a[field];
95
+ const bValue = b[field];
96
+ const dir = sortField.dir === 'asc' ? 1 : -1;
97
+ if (aValue === undefined && bValue === undefined)
98
+ continue;
99
+ if (aValue === undefined)
100
+ return 1 * dir;
101
+ if (bValue === undefined)
102
+ return -1 * dir;
103
+ // Handle date comparison
104
+ if (field === 'startDate') {
105
+ const aDate = a.startDate.getTime();
106
+ const bDate = b.startDate.getTime();
107
+ if (aDate < bDate)
108
+ return -1 * dir;
109
+ if (aDate > bDate)
110
+ return 1 * dir;
111
+ continue;
112
+ }
113
+ if (aValue < bValue)
114
+ return -1 * dir;
115
+ if (aValue > bValue)
116
+ return 1 * dir;
117
+ }
118
+ return 0;
119
+ });
120
+ }
121
+ else {
122
+ // Default sort by start date descending (newest first)
123
+ results.sort((a, b) => {
124
+ return b.startDate.getTime() - a.startDate.getTime();
125
+ });
126
+ }
127
+ // Apply pagination
128
+ const skip = input.skip || 0;
129
+ const take = input.take || 10;
130
+ const total = results.length;
131
+ const items = results.slice(skip, skip + take);
132
+ return {
133
+ items,
134
+ total,
135
+ };
136
+ }
137
+ //#region ---- Custom Filter Handlers ----
138
+ /**
139
+ * Apply date range filter to subscriptions
140
+ */
141
+ applyDateRangeFilter(subscriptions, dateRange) {
142
+ if (!dateRange || !dateRange.start || !dateRange.end) {
143
+ return subscriptions;
144
+ }
145
+ const startDate = new Date(dateRange.start);
146
+ const endDate = new Date(dateRange.end);
147
+ endDate.setHours(23, 59, 59, 999);
148
+ return subscriptions.filter((subscription) => {
149
+ const subStartDate = new Date(subscription.startDate);
150
+ const subEndDate = subscription.endDate ? new Date(subscription.endDate) : null;
151
+ // Check if subscription overlaps with the date range
152
+ return ((subStartDate >= startDate && subStartDate <= endDate) ||
153
+ (subEndDate && subEndDate >= startDate && subEndDate <= endDate) ||
154
+ (subStartDate <= startDate && (!subEndDate || subEndDate >= endDate)));
155
+ });
156
+ }
157
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: GetSubscriptionsTimelineQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
158
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: GetSubscriptionsTimelineQuery, providedIn: 'root' }); }
159
+ }
160
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: GetSubscriptionsTimelineQuery, decorators: [{
161
+ type: Injectable,
162
+ args: [{
163
+ providedIn: 'root',
164
+ }]
165
+ }] });
166
+
167
+ export { GetSubscriptionsTimelineQuery };
168
+ //# sourceMappingURL=acorex-connectivity-mock-get-subscriptions-timeline.query-dp08JqLP.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-connectivity-mock-get-subscriptions-timeline.query-dp08JqLP.mjs","sources":["../tmp-esm2022/mock/lib/tenant-management/reports/get-subscriptions-timeline.query.js"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPSystemStatusType } from '@acorex/platform/common';\nimport { RootConfig as SubscriptionRootConfig } from '@acorex/modules/subscription-management';\nimport { RootConfig as TenantRootConfig } from '@acorex/modules/tenant-management';\nimport * as i0 from \"@angular/core\";\n//#endregion\nexport class GetSubscriptionsTimelineQuery {\n constructor() {\n this.entityService = inject(AXPEntityService);\n this.subscriptionService = this.entityService\n .withEntity(`${SubscriptionRootConfig.module.name}.${SubscriptionRootConfig.entities.subscription.name}`)\n .data();\n this.tenantService = this.entityService\n .withEntity(`${TenantRootConfig.module.name}.${TenantRootConfig.entities.tenant.name}`)\n .data();\n }\n async fetch(input) {\n // Get all subscriptions\n const subscriptionsResult = await this.subscriptionService.query({\n skip: 0,\n take: 10000,\n filter: input.filters && input.filters.length > 0\n ? {\n logic: input.logic || 'and',\n filters: input.filters.filter((f) => f.field !== 'dateRange'),\n }\n : undefined,\n });\n let subscriptions = subscriptionsResult.items.filter((s) => s.subscriberType === 'Tenant');\n // Get all tenants for lookup\n const tenantsResult = await this.tenantService.query({\n skip: 0,\n take: 10000,\n });\n const tenants = tenantsResult.items;\n const tenantMap = new Map(tenants.map((t) => [t.id, t]));\n // Apply date range filter if provided\n if (input.filters) {\n for (const filter of input.filters) {\n if (filter.field === 'dateRange' && filter.value) {\n subscriptions = this.applyDateRangeFilter(subscriptions, filter.value);\n }\n }\n }\n const now = new Date();\n // Build results\n const results = [];\n for (const subscription of subscriptions) {\n const startDate = new Date(subscription.startDate);\n const endDate = subscription.endDate ? new Date(subscription.endDate) : undefined;\n // Calculate duration in days\n const durationDays = endDate\n ? Math.ceil((endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24))\n : Math.ceil((now.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24));\n // Extract time period info from start date\n const year = startDate.getFullYear();\n const month = startDate.getMonth() + 1;\n const monthName = startDate.toLocaleString('en-US', { month: 'long' });\n const quarter = Math.ceil(month / 3);\n const quarterName = `Q${quarter}`;\n // Check if subscription is currently active\n const isActive = subscription.statusId === AXPSystemStatusType.Active &&\n startDate <= now &&\n (!endDate || endDate >= now);\n // Get tenant name\n const tenant = tenantMap.get(subscription.subscriberId);\n results.push({\n subscriptionId: subscription.id,\n subscriptionTitle: subscription.title || `${tenant?.title || 'Unknown'} - ${subscription.plan?.title || 'Unknown Plan'}`,\n tenantId: subscription.subscriberId,\n tenantName: tenant?.title || 'Unknown',\n planId: subscription.planId,\n planName: subscription.plan?.title || 'Unknown',\n status: subscription.statusId || 'Unknown',\n startDate: startDate,\n startDateStr: startDate.toISOString(),\n endDate: endDate,\n endDateStr: endDate?.toISOString(),\n durationDays: durationDays,\n month: monthName,\n monthNumber: month,\n quarter: quarterName,\n year: year,\n isActive: isActive,\n });\n }\n // Apply sorting if provided\n if (input.sort && input.sort.length > 0) {\n results.sort((a, b) => {\n for (const sortField of input.sort) {\n const field = sortField.field;\n const aValue = a[field];\n const bValue = b[field];\n const dir = sortField.dir === 'asc' ? 1 : -1;\n if (aValue === undefined && bValue === undefined)\n continue;\n if (aValue === undefined)\n return 1 * dir;\n if (bValue === undefined)\n return -1 * dir;\n // Handle date comparison\n if (field === 'startDate') {\n const aDate = a.startDate.getTime();\n const bDate = b.startDate.getTime();\n if (aDate < bDate)\n return -1 * dir;\n if (aDate > bDate)\n return 1 * dir;\n continue;\n }\n if (aValue < bValue)\n return -1 * dir;\n if (aValue > bValue)\n return 1 * dir;\n }\n return 0;\n });\n }\n else {\n // Default sort by start date descending (newest first)\n results.sort((a, b) => {\n return b.startDate.getTime() - a.startDate.getTime();\n });\n }\n // Apply pagination\n const skip = input.skip || 0;\n const take = input.take || 10;\n const total = results.length;\n const items = results.slice(skip, skip + take);\n return {\n items,\n total,\n };\n }\n //#region ---- Custom Filter Handlers ----\n /**\n * Apply date range filter to subscriptions\n */\n applyDateRangeFilter(subscriptions, dateRange) {\n if (!dateRange || !dateRange.start || !dateRange.end) {\n return subscriptions;\n }\n const startDate = new Date(dateRange.start);\n const endDate = new Date(dateRange.end);\n endDate.setHours(23, 59, 59, 999);\n return subscriptions.filter((subscription) => {\n const subStartDate = new Date(subscription.startDate);\n const subEndDate = subscription.endDate ? new Date(subscription.endDate) : null;\n // Check if subscription overlaps with the date range\n return ((subStartDate >= startDate && subStartDate <= endDate) ||\n (subEndDate && subEndDate >= startDate && subEndDate <= endDate) ||\n (subStartDate <= startDate && (!subEndDate || subEndDate >= endDate)));\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: GetSubscriptionsTimelineQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: GetSubscriptionsTimelineQuery, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: GetSubscriptionsTimelineQuery, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXN1YnNjcmlwdGlvbnMtdGltZWxpbmUucXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nvbm5lY3Rpdml0eS9tb2NrL3NyYy9saWIvdGVuYW50LW1hbmFnZW1lbnQvcmVwb3J0cy9nZXQtc3Vic2NyaXB0aW9ucy10aW1lbGluZS5xdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUdsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxJQUFJLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDL0YsT0FBTyxFQUFFLFVBQVUsSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztBQXlDbkYsWUFBWTtBQUtaLE1BQU0sT0FBTyw2QkFBNkI7SUFIMUM7UUFNbUIsa0JBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRCx3QkFBbUIsR0FBRyxJQUFJLENBQUMsYUFBYTthQUM3QyxVQUFVLENBQUMsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDeEcsSUFBSSxFQUE0RCxDQUFDO1FBQzVELGtCQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWE7YUFDdkMsVUFBVSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3RGLElBQUksRUFBZ0QsQ0FBQztLQW1LekQ7SUFqS0MsS0FBSyxDQUFDLEtBQUss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aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBRdWVyeSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vcnVudGltZSc7XG5pbXBvcnQgeyBBWFBFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEFYTVN1YnNjcmlwdGlvbk1hbmFnZW1lbnRTdWJzY3JpcHRpb25FbnRpdHlNb2RlbCB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy9zdWJzY3JpcHRpb24tbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBBWE1UZW5hbnRNYW5hZ2VtZW50VGVuYW50RW50aXR5TW9kZWwgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvdGVuYW50LW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgQVhQU3lzdGVtU3RhdHVzVHlwZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IFJvb3RDb25maWcgYXMgU3Vic2NyaXB0aW9uUm9vdENvbmZpZyB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy9zdWJzY3JpcHRpb24tbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBSb290Q29uZmlnIGFzIFRlbmFudFJvb3RDb25maWcgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvdGVuYW50LW1hbmFnZW1lbnQnO1xuXG4vLyNyZWdpb24gLS0tLSAgIFF1ZXJ5IElucHV0L091dHB1dCBUeXBlcyAgIC0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRTdWJzY3JpcHRpb25zVGltZWxpbmVRdWVyeUlucHV0IHtcbiAgc2tpcD86IG51bWJlcjtcbiAgdGFrZT86IG51bWJlcjtcbiAgc29ydD86IEFycmF5PHsgZmllbGQ6IHN0cmluZzsgZGlyOiAnYXNjJyB8ICdkZXNjJyB9PjtcbiAgZmlsdGVycz86IEFycmF5PHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIG9wZXJhdG9yOiB7IHR5cGU6IHN0cmluZyB9O1xuICAgIHZhbHVlOiBhbnk7XG4gIH0+O1xuICBsb2dpYz86ICdhbmQnIHwgJ29yJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJzY3JpcHRpb25zVGltZWxpbmVSZXN1bHQge1xuICBzdWJzY3JpcHRpb25JZDogc3RyaW5nO1xuICBzdWJzY3JpcHRpb25UaXRsZTogc3RyaW5nO1xuICB0ZW5hbnRJZDogc3RyaW5nO1xuICB0ZW5hbnROYW1lOiBzdHJpbmc7XG4gIHBsYW5JZD86IHN0cmluZztcbiAgcGxhbk5hbWU6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIHN0YXJ0RGF0ZTogRGF0ZTtcbiAgc3RhcnREYXRlU3RyOiBzdHJpbmc7XG4gIGVuZERhdGU/OiBEYXRlO1xuICBlbmREYXRlU3RyPzogc3RyaW5nO1xuICBkdXJhdGlvbkRheXM6IG51bWJlcjtcbiAgbW9udGg6IHN0cmluZztcbiAgbW9udGhOdW1iZXI6IG51bWJlcjtcbiAgcXVhcnRlcjogc3RyaW5nO1xuICB5ZWFyOiBudW1iZXI7XG4gIGlzQWN0aXZlOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFN1YnNjcmlwdGlvbnNUaW1lbGluZVF1ZXJ5UmVzdWx0IHtcbiAgaXRlbXM6IFN1YnNjcmlwdGlvbnNUaW1lbGluZVJlc3VsdFtdO1xuICB0b3RhbDogbnVtYmVyO1xufVxuXG4vLyNlbmRyZWdpb25cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEdldFN1YnNjcmlwdGlvbnNUaW1lbGluZVF1ZXJ5XG4gIGltcGxlbWVudHMgQVhQUXVlcnk8R2V0U3Vic2NyaXB0aW9uc1RpbWVsaW5lUXVlcnlJbnB1dCwgR2V0U3Vic2NyaXB0aW9uc1RpbWVsaW5lUXVlcnlSZXN1bHQ+XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50aXR5U2VydmljZSA9IGluamVjdChBWFBFbnRpdHlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25TZXJ2aWNlID0gdGhpcy5lbnRpdHlTZXJ2aWNlXG4gICAgLndpdGhFbnRpdHkoYCR7U3Vic2NyaXB0aW9uUm9vdENvbmZpZy5tb2R1bGUubmFtZX0uJHtTdWJzY3JpcHRpb25Sb290Q29uZmlnLmVudGl0aWVzLnN1YnNjcmlwdGlvbi5uYW1lfWApXG4gICAgLmRhdGE8c3RyaW5nLCBBWE1TdWJzY3JpcHRpb25NYW5hZ2VtZW50U3Vic2NyaXB0aW9uRW50aXR5TW9kZWw+KCk7XG4gIHByaXZhdGUgdGVuYW50U2VydmljZSA9IHRoaXMuZW50aXR5U2VydmljZVxuICAgIC53aXRoRW50aXR5KGAke1RlbmFudFJvb3RDb25maWcubW9kdWxlLm5hbWV9LiR7VGVuYW50Um9vdENvbmZpZy5lbnRpdGllcy50ZW5hbnQubmFtZX1gKVxuICAgIC5kYXRhPHN0cmluZywgQVhNVGVuYW50TWFuYWdlbWVudFRlbmFudEVudGl0eU1vZGVsPigpO1xuXG4gIGFzeW5jIGZldGNoKGlucHV0OiBHZXRTdWJzY3JpcHRpb25zVGltZWxpbmVRdWVyeUlucHV0KTogUHJvbWlzZTxHZXRTdWJzY3JpcHRpb25zVGltZWxpbmVRdWVyeVJlc3VsdD4ge1xuICAgIC8vIEdldCBhbGwgc3Vic2NyaXB0aW9uc1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbnNSZXN1bHQgPSBhd2FpdCB0aGlzLnN1YnNjcmlwdGlvblNlcnZpY2UucXVlcnkoe1xuICAgICAgc2tpcDogMCxcbiAgICAgIHRha2U6IDEwMDAwLFxuICAgICAgZmlsdGVyOlxuICAgICAgICBpbnB1dC5maWx0ZXJzICYmIGlucHV0LmZpbHRlcnMubGVuZ3RoID4gMFxuICAgICAgICAgID8gKHtcbiAgICAgICAgICAgICAgbG9naWM6IGlucHV0LmxvZ2ljIHx8ICdhbmQnLFxuICAgICAgICAgICAgICBmaWx0ZXJzOiBpbnB1dC5maWx0ZXJzLmZpbHRlcigoZikgPT4gZi5maWVsZCAhPT0gJ2RhdGVSYW5nZScpLFxuICAgICAgICAgICAgfSBhcyBhbnkpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBsZXQgc3Vic2NyaXB0aW9ucyA9IHN1YnNjcmlwdGlvbnNSZXN1bHQuaXRlbXMuZmlsdGVyKChzKSA9PiBzLnN1YnNjcmliZXJUeXBlID09PSAnVGVuYW50Jyk7XG5cbiAgICAvLyBHZXQgYWxsIHRlbmFudHMgZm9yIGxvb2t1cFxuICAgIGNvbnN0IHRlbmFudHNSZXN1bHQgPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UucXVlcnkoe1xuICAgICAgc2tpcDogMCxcbiAgICAgIHRha2U6IDEwMDAwLFxuICAgIH0pO1xuICAgIGNvbnN0IHRlbmFudHMgPSB0ZW5hbnRzUmVzdWx0Lml0ZW1zO1xuICAgIGNvbnN0IHRlbmFudE1hcCA9IG5ldyBNYXAodGVuYW50cy5tYXAoKHQpID0+IFt0LmlkLCB0XSkpO1xuXG4gICAgLy8gQXBwbHkgZGF0ZSByYW5nZSBmaWx0ZXIgaWYgcHJvdmlkZWRcbiAgICBpZiAoaW5wdXQuZmlsdGVycykge1xuICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgaW5wdXQuZmlsdGVycykge1xuICAgICAgICBpZiAoZmlsdGVyLmZpZWxkID09PSAnZGF0ZVJhbmdlJyAmJiBmaWx0ZXIudmFsdWUpIHtcbiAgICAgICAgICBzdWJzY3JpcHRpb25zID0gdGhpcy5hcHBseURhdGVSYW5nZUZpbHRlcihzdWJzY3JpcHRpb25zLCBmaWx0ZXIudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcblxuICAgIC8vIEJ1aWxkIHJlc3VsdHNcbiAgICBjb25zdCByZXN1bHRzOiBTdWJzY3JpcHRpb25zVGltZWxpbmVSZXN1bHRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9ucykge1xuICAgICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoc3Vic2NyaXB0aW9uLnN0YXJ0RGF0ZSk7XG4gICAgICBjb25zdCBlbmREYXRlID0gc3Vic2NyaXB0aW9uLmVuZERhdGUgPyBuZXcgRGF0ZShzdWJzY3JpcHRpb24uZW5kRGF0ZSkgOiB1bmRlZmluZWQ7XG5cbiAgICAgIC8vIENhbGN1bGF0ZSBkdXJhdGlvbiBpbiBkYXlzXG4gICAgICBjb25zdCBkdXJhdGlvbkRheXMgPSBlbmREYXRlXG4gICAgICAgID8gTWF0aC5jZWlsKChlbmREYXRlLmdldFRpbWUoKSAtIHN0YXJ0RGF0ZS5nZXRUaW1lKCkpIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpKVxuICAgICAgICA6IE1hdGguY2VpbCgobm93LmdldFRpbWUoKSAtIHN0YXJ0RGF0ZS5nZXRUaW1lKCkpIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpKTtcblxuICAgICAgLy8gRXh0cmFjdCB0aW1lIHBlcmlvZCBpbmZvIGZyb20gc3RhcnQgZGF0ZVxuICAgICAgY29uc3QgeWVhciA9IHN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgY29uc3QgbW9udGggPSBzdGFydERhdGUuZ2V0TW9udGgoKSArIDE7XG4gICAgICBjb25zdCBtb250aE5hbWUgPSBzdGFydERhdGUudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtb250aDogJ2xvbmcnIH0pO1xuICAgICAgY29uc3QgcXVhcnRlciA9IE1hdGguY2VpbChtb250aCAvIDMpO1xuICAgICAgY29uc3QgcXVhcnRlck5hbWUgPSBgUSR7cXVhcnRlcn1gO1xuXG4gICAgICAvLyBDaGVjayBpZiBzdWJzY3JpcHRpb24gaXMgY3VycmVudGx5IGFjdGl2ZVxuICAgICAgY29uc3QgaXNBY3RpdmUgPVxuICAgICAgICBzdWJzY3JpcHRpb24uc3RhdHVzSWQgPT09IEFYUFN5c3RlbVN0YXR1c1R5cGUuQWN0aXZlICYmXG4gICAgICAgIHN0YXJ0RGF0ZSA8PSBub3cgJiZcbiAgICAgICAgKCFlbmREYXRlIHx8IGVuZERhdGUgPj0gbm93KTtcblxuICAgICAgLy8gR2V0IHRlbmFudCBuYW1lXG4gICAgICBjb25zdCB0ZW5hbnQgPSB0ZW5hbnRNYXAuZ2V0KHN1YnNjcmlwdGlvbi5zdWJzY3JpYmVySWQpO1xuXG4gICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICBzdWJzY3JpcHRpb25JZDogc3Vic2NyaXB0aW9uLmlkLFxuICAgICAgICBzdWJzY3JpcHRpb25UaXRsZTogc3Vic2NyaXB0aW9uLnRpdGxlIHx8IGAke3RlbmFudD8udGl0bGUgfHwgJ1Vua25vd24nfSAtICR7c3Vic2NyaXB0aW9uLnBsYW4/LnRpdGxlIHx8ICdVbmtub3duIFBsYW4nfWAsXG4gICAgICAgIHRlbmFudElkOiBzdWJzY3JpcHRpb24uc3Vic2NyaWJlcklkLFxuICAgICAgICB0ZW5hbnROYW1lOiB0ZW5hbnQ/LnRpdGxlIHx8ICdVbmtub3duJyxcbiAgICAgICAgcGxhbklkOiBzdWJzY3JpcHRpb24ucGxhbklkLFxuICAgICAgICBwbGFuTmFtZTogc3Vic2NyaXB0aW9uLnBsYW4/LnRpdGxlIHx8ICdVbmtub3duJyxcbiAgICAgICAgc3RhdHVzOiBzdWJzY3JpcHRpb24uc3RhdHVzSWQgfHwgJ1Vua25vd24nLFxuICAgICAgICBzdGFydERhdGU6IHN0YXJ0RGF0ZSxcbiAgICAgICAgc3RhcnREYXRlU3RyOiBzdGFydERhdGUudG9JU09TdHJpbmcoKSxcbiAgICAgICAgZW5kRGF0ZTogZW5kRGF0ZSxcbiAgICAgICAgZW5kRGF0ZVN0cjogZW5kRGF0ZT8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgZHVyYXRpb25EYXlzOiBkdXJhdGlvbkRheXMsXG4gICAgICAgIG1vbnRoOiBtb250aE5hbWUsXG4gICAgICAgIG1vbnRoTnVtYmVyOiBtb250aCxcbiAgICAgICAgcXVhcnRlcjogcXVhcnRlck5hbWUsXG4gICAgICAgIHllYXI6IHllYXIsXG4gICAgICAgIGlzQWN0aXZlOiBpc0FjdGl2ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHNvcnRpbmcgaWYgcHJvdmlkZWRcbiAgICBpZiAoaW5wdXQuc29ydCAmJiBpbnB1dC5zb3J0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHNvcnRGaWVsZCBvZiBpbnB1dC5zb3J0ISkge1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gc29ydEZpZWxkLmZpZWxkIGFzIGtleW9mIFN1YnNjcmlwdGlvbnNUaW1lbGluZVJlc3VsdDtcbiAgICAgICAgICBjb25zdCBhVmFsdWUgPSBhW2ZpZWxkXTtcbiAgICAgICAgICBjb25zdCBiVmFsdWUgPSBiW2ZpZWxkXTtcbiAgICAgICAgICBjb25zdCBkaXIgPSBzb3J0RmllbGQuZGlyID09PSAnYXNjJyA/IDEgOiAtMTtcblxuICAgICAgICAgIGlmIChhVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBiVmFsdWUgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICAgICAgaWYgKGFWYWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMSAqIGRpcjtcbiAgICAgICAgICBpZiAoYlZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAtMSAqIGRpcjtcblxuICAgICAgICAgIC8vIEhhbmRsZSBkYXRlIGNvbXBhcmlzb25cbiAgICAgICAgICBpZiAoZmllbGQgPT09ICdzdGFydERhdGUnKSB7XG4gICAgICAgICAgICBjb25zdCBhRGF0ZSA9IGEuc3RhcnREYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICAgIGNvbnN0IGJEYXRlID0gYi5zdGFydERhdGUuZ2V0VGltZSgpO1xuICAgICAgICAgICAgaWYgKGFEYXRlIDwgYkRhdGUpIHJldHVybiAtMSAqIGRpcjtcbiAgICAgICAgICAgIGlmIChhRGF0ZSA+IGJEYXRlKSByZXR1cm4gMSAqIGRpcjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhVmFsdWUgPCBiVmFsdWUpIHJldHVybiAtMSAqIGRpcjtcbiAgICAgICAgICBpZiAoYVZhbHVlID4gYlZhbHVlKSByZXR1cm4gMSAqIGRpcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0IHNvcnQgYnkgc3RhcnQgZGF0ZSBkZXNjZW5kaW5nIChuZXdlc3QgZmlyc3QpXG4gICAgICByZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgcmV0dXJuIGIuc3RhcnREYXRlLmdldFRpbWUoKSAtIGEuc3RhcnREYXRlLmdldFRpbWUoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHBhZ2luYXRpb25cbiAgICBjb25zdCBza2lwID0gaW5wdXQuc2tpcCB8fCAwO1xuICAgIGNvbnN0IHRha2UgPSBpbnB1dC50YWtlIHx8IDEwO1xuICAgIGNvbnN0IHRvdGFsID0gcmVzdWx0cy5sZW5ndGg7XG4gICAgY29uc3QgaXRlbXMgPSByZXN1bHRzLnNsaWNlKHNraXAsIHNraXAgKyB0YWtlKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpdGVtcyxcbiAgICAgIHRvdGFsLFxuICAgIH07XG4gIH1cblxuICAvLyNyZWdpb24gLS0tLSAgIEN1c3RvbSBGaWx0ZXIgSGFuZGxlcnMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEFwcGx5IGRhdGUgcmFuZ2UgZmlsdGVyIHRvIHN1YnNjcmlwdGlvbnNcbiAgICovXG4gIHByaXZhdGUgYXBwbHlEYXRlUmFuZ2VGaWx0ZXIoXG4gICAgc3Vic2NyaXB0aW9uczogQVhNU3Vic2NyaXB0aW9uTWFuYWdlbWVudFN1YnNjcmlwdGlvbkVudGl0eU1vZGVsW10sXG4gICAgZGF0ZVJhbmdlOiBhbnlcbiAgKTogQVhNU3Vic2NyaXB0aW9uTWFuYWdlbWVudFN1YnNjcmlwdGlvbkVudGl0eU1vZGVsW10ge1xuICAgIGlmICghZGF0ZVJhbmdlIHx8ICFkYXRlUmFuZ2Uuc3RhcnQgfHwgIWRhdGVSYW5nZS5lbmQpIHtcbiAgICAgIHJldHVybiBzdWJzY3JpcHRpb25zO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKGRhdGVSYW5nZS5zdGFydCk7XG4gICAgY29uc3QgZW5kRGF0ZSA9IG5ldyBEYXRlKGRhdGVSYW5nZS5lbmQpO1xuICAgIGVuZERhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcblxuICAgIHJldHVybiBzdWJzY3JpcHRpb25zLmZpbHRlcigoc3Vic2NyaXB0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzdWJTdGFydERhdGUgPSBuZXcgRGF0ZShzdWJzY3JpcHRpb24uc3RhcnREYXRlKTtcbiAgICAgIGNvbnN0IHN1YkVuZERhdGUgPSBzdWJzY3JpcHRpb24uZW5kRGF0ZSA/IG5ldyBEYXRlKHN1YnNjcmlwdGlvbi5lbmREYXRlKSA6IG51bGw7XG5cbiAgICAgIC8vIENoZWNrIGlmIHN1YnNjcmlwdGlvbiBvdmVybGFwcyB3aXRoIHRoZSBkYXRlIHJhbmdlXG4gICAgICByZXR1cm4gKFxuICAgICAgICAoc3ViU3RhcnREYXRlID49IHN0YXJ0RGF0ZSAmJiBzdWJTdGFydERhdGUgPD0gZW5kRGF0ZSkgfHxcbiAgICAgICAgKHN1YkVuZERhdGUgJiYgc3ViRW5kRGF0ZSA+PSBzdGFydERhdGUgJiYgc3ViRW5kRGF0ZSA8PSBlbmREYXRlKSB8fFxuICAgICAgICAoc3ViU3RhcnREYXRlIDw9IHN0YXJ0RGF0ZSAmJiAoIXN1YkVuZERhdGUgfHwgc3ViRW5kRGF0ZSA+PSBlbmREYXRlKSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19"],"names":["SubscriptionRootConfig","TenantRootConfig"],"mappings":"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"}