@acorex/connectivity 21.0.0-next.2 → 21.0.0-next.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/index.d.ts +6 -65
- package/fesm2022/{acorex-connectivity-api-execute.command-CQt_HF1B.mjs → acorex-connectivity-api-execute.command-Di850KiF.mjs} +7 -7
- package/fesm2022/acorex-connectivity-api-execute.command-Di850KiF.mjs.map +1 -0
- package/fesm2022/acorex-connectivity-api.mjs +128 -206
- package/fesm2022/acorex-connectivity-api.mjs.map +1 -1
- package/fesm2022/acorex-connectivity-mock-assign-to-manager.command-T6-ao4e9.mjs +66 -0
- package/fesm2022/acorex-connectivity-mock-assign-to-manager.command-T6-ao4e9.mjs.map +1 -0
- package/fesm2022/{acorex-connectivity-mock-category-with-items.query-Dsxj98tX.mjs → acorex-connectivity-mock-category-with-items.query-KB7GIYeb.mjs} +4 -4
- package/fesm2022/{acorex-connectivity-mock-category-with-items.query-Dsxj98tX.mjs.map → acorex-connectivity-mock-category-with-items.query-KB7GIYeb.mjs.map} +1 -1
- package/fesm2022/acorex-connectivity-mock-check-permission.command-C-AZTcHP.mjs +53 -0
- package/fesm2022/acorex-connectivity-mock-check-permission.command-C-AZTcHP.mjs.map +1 -0
- package/fesm2022/acorex-connectivity-mock-complete-signature-process.command-CHci1rOa.mjs +80 -0
- package/fesm2022/acorex-connectivity-mock-complete-signature-process.command-CHci1rOa.mjs.map +1 -0
- package/fesm2022/{acorex-connectivity-mock-distribution-record.command-DRiDwlqN.mjs → acorex-connectivity-mock-distribution-record.command-DMoZvago.mjs} +4 -4
- package/fesm2022/{acorex-connectivity-mock-distribution-record.command-DRiDwlqN.mjs.map → acorex-connectivity-mock-distribution-record.command-DMoZvago.mjs.map} +1 -1
- package/fesm2022/acorex-connectivity-mock-get-application-versions-chart-data.query-B1TrIBvU.mjs +115 -0
- package/fesm2022/acorex-connectivity-mock-get-application-versions-chart-data.query-B1TrIBvU.mjs.map +1 -0
- package/fesm2022/acorex-connectivity-mock-get-application-versions-timeline.query-CvNjA4OH.mjs +163 -0
- package/fesm2022/acorex-connectivity-mock-get-application-versions-timeline.query-CvNjA4OH.mjs.map +1 -0
- package/fesm2022/acorex-connectivity-mock-get-employee-list.query--f2M5RgC.mjs +213 -0
- package/fesm2022/acorex-connectivity-mock-get-employee-list.query--f2M5RgC.mjs.map +1 -0
- package/fesm2022/acorex-connectivity-mock-get-location-list.query-Cz55arFF.mjs +209 -0
- package/fesm2022/acorex-connectivity-mock-get-location-list.query-Cz55arFF.mjs.map +1 -0
- package/fesm2022/acorex-connectivity-mock-get-product-chart-data.query-C7v7D4ep.mjs +186 -0
- package/fesm2022/acorex-connectivity-mock-get-product-chart-data.query-C7v7D4ep.mjs.map +1 -0
- package/fesm2022/acorex-connectivity-mock-get-product-list.query-DTj8RYwR.mjs +246 -0
- package/fesm2022/acorex-connectivity-mock-get-product-list.query-DTj8RYwR.mjs.map +1 -0
- package/fesm2022/acorex-connectivity-mock-get-product-pdf-data.query-DdLhRbP5.mjs +192 -0
- package/fesm2022/acorex-connectivity-mock-get-product-pdf-data.query-DdLhRbP5.mjs.map +1 -0
- package/fesm2022/acorex-connectivity-mock-get-subscriptions-chart-data.query-ybmzmVl5.mjs +56 -0
- package/fesm2022/acorex-connectivity-mock-get-subscriptions-chart-data.query-ybmzmVl5.mjs.map +1 -0
- package/fesm2022/acorex-connectivity-mock-get-subscriptions-timeline.query-kciEUx7d.mjs +246 -0
- package/fesm2022/acorex-connectivity-mock-get-subscriptions-timeline.query-kciEUx7d.mjs.map +1 -0
- package/fesm2022/acorex-connectivity-mock-get-tenant-application-access.query-BDfrwf5Z.mjs +258 -0
- package/fesm2022/acorex-connectivity-mock-get-tenant-application-access.query-BDfrwf5Z.mjs.map +1 -0
- package/fesm2022/acorex-connectivity-mock-get-tenant-registration-chart-data.query-BD4T2loB.mjs +56 -0
- package/fesm2022/acorex-connectivity-mock-get-tenant-registration-chart-data.query-BD4T2loB.mjs.map +1 -0
- package/fesm2022/acorex-connectivity-mock-get-tenant-registration-timeline.query-CMJ8W3Ns.mjs +294 -0
- package/fesm2022/acorex-connectivity-mock-get-tenant-registration-timeline.query-CMJ8W3Ns.mjs.map +1 -0
- package/fesm2022/acorex-connectivity-mock-get-tenant-user-distribution.query-C-gCUjbX.mjs +212 -0
- package/fesm2022/acorex-connectivity-mock-get-tenant-user-distribution.query-C-gCUjbX.mjs.map +1 -0
- package/fesm2022/acorex-connectivity-mock-notify-signers.command-DLMsWjWQ.mjs +69 -0
- package/fesm2022/acorex-connectivity-mock-notify-signers.command-DLMsWjWQ.mjs.map +1 -0
- package/fesm2022/acorex-connectivity-mock-request-signature.command-JNkj9-Yz.mjs +72 -0
- package/fesm2022/acorex-connectivity-mock-request-signature.command-JNkj9-Yz.mjs.map +1 -0
- package/fesm2022/{acorex-connectivity-mock-sample.command-CkH5bmEs.mjs → acorex-connectivity-mock-sample.command-CyrjdvEA.mjs} +4 -4
- package/fesm2022/{acorex-connectivity-mock-sample.command-CkH5bmEs.mjs.map → acorex-connectivity-mock-sample.command-CyrjdvEA.mjs.map} +1 -1
- package/fesm2022/acorex-connectivity-mock-validate-all-signatures.command-xKr94NrA.mjs +81 -0
- package/fesm2022/acorex-connectivity-mock-validate-all-signatures.command-xKr94NrA.mjs.map +1 -0
- package/fesm2022/acorex-connectivity-mock.mjs +63874 -45210
- package/fesm2022/acorex-connectivity-mock.mjs.map +1 -1
- package/fesm2022/acorex-connectivity-utils.mjs +7 -7
- package/fesm2022/acorex-connectivity-utils.mjs.map +1 -1
- package/mock/index.d.ts +986 -1839
- package/package.json +6 -6
- package/fesm2022/acorex-connectivity-api-execute.command-CQt_HF1B.mjs.map +0 -1
package/fesm2022/acorex-connectivity-mock-get-application-versions-chart-data.query-B1TrIBvU.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-connectivity-mock-get-application-versions-chart-data.query-B1TrIBvU.mjs","sources":["../tmp-esm2022/mock/lib/application-management/reports/get-application-versions-chart-data.query.js"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '@acorex/modules/application-management';\nimport * as i0 from \"@angular/core\";\n//#endregion\nexport class GetApplicationVersionsChartDataQuery {\n constructor() {\n this.entityService = inject(AXPEntityService);\n this.appVersionService = this.entityService\n .withEntity(`${RootConfig.module.name}.${RootConfig.entities.appVersion.name}`)\n .data();\n }\n async fetch(input) {\n // Get all app versions from storage (no pagination for charts)\n const allVersionsResult = await this.appVersionService.query({\n skip: 0,\n take: 10000, // Get all versions for aggregation\n filter: input.filters && input.filters.length > 0\n ? {\n logic: input.logic || 'and',\n filters: input.filters,\n }\n : undefined,\n });\n let allVersions = allVersionsResult.items;\n // Apply custom filters after fetching\n if (input.filters) {\n for (const filter of input.filters) {\n if (filter.field === 'dateRange' && filter.value) {\n allVersions = this.applyDateRangeFilter(allVersions, filter.value);\n }\n if (filter.field === 'versionNumber' && filter.value) {\n allVersions = this.applyVersionNumberFilter(allVersions, filter.value);\n }\n }\n }\n // Group versions by month for chart aggregation\n const monthGroups = new Map();\n for (const version of allVersions) {\n const publishDate = new Date(version.publishDate);\n const year = publishDate.getFullYear();\n const month = publishDate.getMonth() + 1;\n const monthKey = `${year}-${String(month).padStart(2, '0')}`;\n if (!monthGroups.has(monthKey)) {\n monthGroups.set(monthKey, []);\n }\n monthGroups.get(monthKey).push(version);\n }\n // Aggregate data by month for chart\n const chartResults = [];\n for (const [monthKey, versions] of monthGroups.entries()) {\n const [year, month] = monthKey.split('-');\n const publishDate = new Date(parseInt(year), parseInt(month) - 1, 1);\n const monthName = publishDate.toLocaleString('en-US', { month: 'long' });\n const quarter = Math.ceil(parseInt(month) / 3);\n const quarterName = `Q${quarter}`;\n chartResults.push({\n publishDate: publishDate.toISOString(),\n month: monthName,\n year: parseInt(year),\n quarter: quarterName,\n versionCount: versions.length,\n });\n }\n // Sort by date ascending for timeline\n chartResults.sort((a, b) => {\n const dateA = new Date(a.publishDate).getTime();\n const dateB = new Date(b.publishDate).getTime();\n return dateA - dateB;\n });\n return {\n items: chartResults,\n };\n }\n //#region ---- Custom Filter Handlers ----\n /**\n * Apply date range filter to versions\n */\n applyDateRangeFilter(versions, dateRange) {\n if (!dateRange || !dateRange.start || !dateRange.end) {\n return versions;\n }\n const startDate = new Date(dateRange.start);\n const endDate = new Date(dateRange.end);\n endDate.setHours(23, 59, 59, 999); // Include the entire end date\n return versions.filter((version) => {\n const publishDate = new Date(version.publishDate);\n return publishDate >= startDate && publishDate <= endDate;\n });\n }\n /**\n * Apply version number filter to versions\n */\n applyVersionNumberFilter(versions, versionNumber) {\n if (!versionNumber) {\n return versions;\n }\n const searchTerm = versionNumber.toLowerCase().trim();\n return versions.filter((version) => {\n return version.versionNumber.toLowerCase().includes(searchTerm);\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetApplicationVersionsChartDataQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetApplicationVersionsChartDataQuery, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetApplicationVersionsChartDataQuery, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWFwcGxpY2F0aW9uLXZlcnNpb25zLWNoYXJ0LWRhdGEucXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nvbm5lY3Rpdml0eS9tb2NrL3NyYy9saWIvYXBwbGljYXRpb24tbWFuYWdlbWVudC9yZXBvcnRzL2dldC1hcHBsaWNhdGlvbi12ZXJzaW9ucy1jaGFydC1kYXRhLnF1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7QUEwQnBFLFlBQVk7QUFLWixNQUFNLE9BQU8sb0NBQW9DO0lBSGpEO1FBTW1CLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbEQsc0JBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWE7YUFDM0MsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDOUUsSUFBSSxFQUFvQyxDQUFDO0tBc0g3QztJQXBIQyxLQUFLLENBQUMsS0FBSyxDQUNULEtBQWdEO1FBRWhELCtEQUErRDtRQUMvRCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQztZQUMzRCxJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksRUFBRSxLQUFLLEVBQUUsbUNBQW1DO1lBQ2hELE1BQU0sRUFDSixLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3ZDLENBQUMsQ0FBRTtvQkFDQyxLQUFLLEVBQUUsS0FBSyxD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QUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssd0JBQXdCLENBQzlCLFFBQW9DLEVBQ3BDLGFBQXFCO1FBRXJCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRXRELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2pDLE9BQU8sT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQXpIVSxvQ0FBb0M7bUhBQXBDLG9DQUFvQyxjQUZuQyxNQUFNOzs0RkFFUCxvQ0FBb0M7a0JBSGhELFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBRdWVyeSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vcnVudGltZSc7XG5pbXBvcnQgeyBBWFBFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEFYTUFwcFZlcnNpb25FbnRpdHlNb2RlbCB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy9hcHBsaWNhdGlvbi1tYW5hZ2VtZW50JztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvYXBwbGljYXRpb24tbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBHZXRBcHBsaWNhdGlvblZlcnNpb25zVGltZWxpbmVRdWVyeUlucHV0IH0gZnJvbSAnLi9nZXQtYXBwbGljYXRpb24tdmVyc2lvbnMtdGltZWxpbmUucXVlcnknO1xuXG4vLyNyZWdpb24gLS0tLSAgIFF1ZXJ5IElucHV0L091dHB1dCBUeXBlcyAgIC0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRBcHBsaWNhdGlvblZlcnNpb25zQ2hhcnREYXRhUXVlcnlJbnB1dCB7XG4gIGZpbHRlcnM/OiBBcnJheTx7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICBvcGVyYXRvcjogeyB0eXBlOiBzdHJpbmcgfTtcbiAgICB2YWx1ZTogYW55O1xuICB9PjtcbiAgbG9naWM/OiAnYW5kJyB8ICdvcic7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25WZXJzaW9uQ2hhcnREYXRhUmVzdWx0IHtcbiAgcHVibGlzaERhdGU6IHN0cmluZztcbiAgbW9udGg6IHN0cmluZztcbiAgeWVhcjogbnVtYmVyO1xuICBxdWFydGVyOiBzdHJpbmc7XG4gIHZlcnNpb25Db3VudDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldEFwcGxpY2F0aW9uVmVyc2lvbnNDaGFydERhdGFRdWVyeVJlc3VsdCB7XG4gIGl0ZW1zOiBBcHBsaWNhdGlvblZlcnNpb25DaGFydERhdGFSZXN1bHRbXTtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHZXRBcHBsaWNhdGlvblZlcnNpb25zQ2hhcnREYXRhUXVlcnlcbiAgaW1wbGVtZW50cyBBWFBRdWVyeTxHZXRBcHBsaWNhdGlvblZlcnNpb25zQ2hhcnREYXRhUXVlcnlJbnB1dCwgR2V0QXBwbGljYXRpb25WZXJzaW9uc0NoYXJ0RGF0YVF1ZXJ5UmVzdWx0Plxue1xuICBwcml2YXRlIHJlYWRvbmx5IGVudGl0eVNlcnZpY2UgPSBpbmplY3QoQVhQRW50aXR5U2VydmljZSk7XG4gIHByaXZhdGUgYXBwVmVyc2lvblNlcnZpY2UgPSB0aGlzLmVudGl0eVNlcnZpY2VcbiAgICAud2l0aEVudGl0eShgJHtSb290Q29uZmlnLm1vZHVsZS5uYW1lfS4ke1Jvb3RDb25maWcuZW50aXRpZXMuYXBwVmVyc2lvbi5uYW1lfWApXG4gICAgLmRhdGE8c3RyaW5nLCBBWE1BcHBWZXJzaW9uRW50aXR5TW9kZWw+KCk7XG5cbiAgYXN5bmMgZmV0Y2goXG4gICAgaW5wdXQ6IEdldEFwcGxpY2F0aW9uVmVyc2lvbnNDaGFydERhdGFRdWVyeUlucHV0XG4gICk6IFByb21pc2U8R2V0QXBwbGljYXRpb25WZXJzaW9uc0NoYXJ0RGF0YVF1ZXJ5UmVzdWx0PiB7XG4gICAgLy8gR2V0IGFsbCBhcHAgdmVyc2lvbnMgZnJvbSBzdG9yYWdlIChubyBwYWdpbmF0aW9uIGZvciBjaGFydHMpXG4gICAgY29uc3QgYWxsVmVyc2lvbnNSZXN1bHQgPSBhd2FpdCB0aGlzLmFwcFZlcnNpb25TZXJ2aWNlLnF1ZXJ5KHtcbiAgICAgIHNraXA6IDAsXG4gICAgICB0YWtlOiAxMDAwMCwgLy8gR2V0IGFsbCB2ZXJzaW9ucyBmb3IgYWdncmVnYXRpb25cbiAgICAgIGZpbHRlcjpcbiAgICAgICAgaW5wdXQuZmlsdGVycyAmJiBpbnB1dC5maWx0ZXJzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/ICh7XG4gICAgICAgICAgICAgIGxvZ2ljOiBpbnB1dC5sb2dpYyB8fCAnYW5kJyxcbiAgICAgICAgICAgICAgZmlsdGVyczogaW5wdXQuZmlsdGVycyxcbiAgICAgICAgICAgIH0gYXMgYW55KVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgbGV0IGFsbFZlcnNpb25zID0gYWxsVmVyc2lvbnNSZXN1bHQuaXRlbXM7XG5cbiAgICAvLyBBcHBseSBjdXN0b20gZmlsdGVycyBhZnRlciBmZXRjaGluZ1xuICAgIGlmIChpbnB1dC5maWx0ZXJzKSB7XG4gICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBpbnB1dC5maWx0ZXJzKSB7XG4gICAgICAgIGlmIChmaWx0ZXIuZmllbGQgPT09ICdkYXRlUmFuZ2UnICYmIGZpbHRlci52YWx1ZSkge1xuICAgICAgICAgIGFsbFZlcnNpb25zID0gdGhpcy5hcHBseURhdGVSYW5nZUZpbHRlcihhbGxWZXJzaW9ucywgZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVyLmZpZWxkID09PSAndmVyc2lvbk51bWJlcicgJiYgZmlsdGVyLnZhbHVlKSB7XG4gICAgICAgICAgYWxsVmVyc2lvbnMgPSB0aGlzLmFwcGx5VmVyc2lvbk51bWJlckZpbHRlcihhbGxWZXJzaW9ucywgZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdyb3VwIHZlcnNpb25zIGJ5IG1vbnRoIGZvciBjaGFydCBhZ2dyZWdhdGlvblxuICAgIGNvbnN0IG1vbnRoR3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIEFYTUFwcFZlcnNpb25FbnRpdHlNb2RlbFtdPigpO1xuXG4gICAgZm9yIChjb25zdCB2ZXJzaW9uIG9mIGFsbFZlcnNpb25zKSB7XG4gICAgICBjb25zdCBwdWJsaXNoRGF0ZSA9IG5ldyBEYXRlKHZlcnNpb24ucHVibGlzaERhdGUpO1xuICAgICAgY29uc3QgeWVhciA9IHB1Ymxpc2hEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICBjb25zdCBtb250aCA9IHB1Ymxpc2hEYXRlLmdldE1vbnRoKCkgKyAxO1xuICAgICAgY29uc3QgbW9udGhLZXkgPSBgJHt5ZWFyfS0ke1N0cmluZyhtb250aCkucGFkU3RhcnQoMiwgJzAnKX1gO1xuXG4gICAgICBpZiAoIW1vbnRoR3JvdXBzLmhhcyhtb250aEtleSkpIHtcbiAgICAgICAgbW9udGhHcm91cHMuc2V0KG1vbnRoS2V5LCBbXSk7XG4gICAgICB9XG5cbiAgICAgIG1vbnRoR3JvdXBzLmdldChtb250aEtleSkhLnB1c2godmVyc2lvbik7XG4gICAgfVxuXG4gICAgLy8gQWdncmVnYXRlIGRhdGEgYnkgbW9udGggZm9yIGNoYXJ0XG4gICAgY29uc3QgY2hhcnRSZXN1bHRzOiBBcHBsaWNhdGlvblZlcnNpb25DaGFydERhdGFSZXN1bHRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbbW9udGhLZXksIHZlcnNpb25zXSBvZiBtb250aEdyb3Vwcy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IFt5ZWFyLCBtb250aF0gPSBtb250aEtleS5zcGxpdCgnLScpO1xuICAgICAgY29uc3QgcHVibGlzaERhdGUgPSBuZXcgRGF0ZShwYXJzZUludCh5ZWFyKSwgcGFyc2VJbnQobW9udGgpIC0gMSwgMSk7XG4gICAgICBjb25zdCBtb250aE5hbWUgPSBwdWJsaXNoRGF0ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnbG9uZycgfSk7XG4gICAgICBjb25zdCBxdWFydGVyID0gTWF0aC5jZWlsKHBhcnNlSW50KG1vbnRoKSAvIDMpO1xuICAgICAgY29uc3QgcXVhcnRlck5hbWUgPSBgUSR7cXVhcnRlcn1gO1xuXG4gICAgICBjaGFydFJlc3VsdHMucHVzaCh7XG4gICAgICAgIHB1Ymxpc2hEYXRlOiBwdWJsaXNoRGF0ZS50b0lTT1N0cmluZygpLFxuICAgICAgICBtb250aDogbW9udGhOYW1lLFxuICAgICAgICB5ZWFyOiBwYXJzZUludCh5ZWFyKSxcbiAgICAgICAgcXVhcnRlcjogcXVhcnRlck5hbWUsXG4gICAgICAgIHZlcnNpb25Db3VudDogdmVyc2lvbnMubGVuZ3RoLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBieSBkYXRlIGFzY2VuZGluZyBmb3IgdGltZWxpbmVcbiAgICBjaGFydFJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgZGF0ZUEgPSBuZXcgRGF0ZShhLnB1Ymxpc2hEYXRlKS5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBkYXRlQiA9IG5ldyBEYXRlKGIucHVibGlzaERhdGUpLmdldFRpbWUoKTtcbiAgICAgIHJldHVybiBkYXRlQSAtIGRhdGVCO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiBjaGFydFJlc3VsdHMsXG4gICAgfTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQ3VzdG9tIEZpbHRlciBIYW5kbGVycyAgIC0tLS1cblxuICAvKipcbiAgICogQXBwbHkgZGF0ZSByYW5nZSBmaWx0ZXIgdG8gdmVyc2lvbnNcbiAgICovXG4gIHByaXZhdGUgYXBwbHlEYXRlUmFuZ2VGaWx0ZXIodmVyc2lvbnM6IEFYTUFwcFZlcnNpb25FbnRpdHlNb2RlbFtdLCBkYXRlUmFuZ2U6IGFueSk6IEFYTUFwcFZlcnNpb25FbnRpdHlNb2RlbFtdIHtcbiAgICBpZiAoIWRhdGVSYW5nZSB8fCAhZGF0ZVJhbmdlLnN0YXJ0IHx8ICFkYXRlUmFuZ2UuZW5kKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbnM7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoZGF0ZVJhbmdlLnN0YXJ0KTtcbiAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoZGF0ZVJhbmdlLmVuZCk7XG4gICAgZW5kRGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpOyAvLyBJbmNsdWRlIHRoZSBlbnRpcmUgZW5kIGRhdGVcblxuICAgIHJldHVybiB2ZXJzaW9ucy5maWx0ZXIoKHZlcnNpb24pID0+IHtcbiAgICAgIGNvbnN0IHB1Ymxpc2hEYXRlID0gbmV3IERhdGUodmVyc2lvbi5wdWJsaXNoRGF0ZSk7XG4gICAgICByZXR1cm4gcHVibGlzaERhdGUgPj0gc3RhcnREYXRlICYmIHB1Ymxpc2hEYXRlIDw9IGVuZERhdGU7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdmVyc2lvbiBudW1iZXIgZmlsdGVyIHRvIHZlcnNpb25zXG4gICAqL1xuICBwcml2YXRlIGFwcGx5VmVyc2lvbk51bWJlckZpbHRlcihcbiAgICB2ZXJzaW9uczogQVhNQXBwVmVyc2lvbkVudGl0eU1vZGVsW10sXG4gICAgdmVyc2lvbk51bWJlcjogc3RyaW5nXG4gICk6IEFYTUFwcFZlcnNpb25FbnRpdHlNb2RlbFtdIHtcbiAgICBpZiAoIXZlcnNpb25OdW1iZXIpIHtcbiAgICAgIHJldHVybiB2ZXJzaW9ucztcbiAgICB9XG5cbiAgICBjb25zdCBzZWFyY2hUZXJtID0gdmVyc2lvbk51bWJlci50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgIHJldHVybiB2ZXJzaW9ucy5maWx0ZXIoKHZlcnNpb24pID0+IHtcbiAgICAgIHJldHVybiB2ZXJzaW9uLnZlcnNpb25OdW1iZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXJtKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG4iXX0="],"names":[],"mappings":"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"}
|
package/fesm2022/acorex-connectivity-mock-get-application-versions-timeline.query-CvNjA4OH.mjs
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
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/application-management';
|
|
5
|
+
|
|
6
|
+
//#endregion
|
|
7
|
+
class GetApplicationVersionsTimelineQuery {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.entityService = inject(AXPEntityService);
|
|
10
|
+
this.appVersionService = this.entityService
|
|
11
|
+
.withEntity(`${RootConfig.module.name}.${RootConfig.entities.appVersion.name}`)
|
|
12
|
+
.data();
|
|
13
|
+
}
|
|
14
|
+
async fetch(input) {
|
|
15
|
+
// Get all app versions from storage
|
|
16
|
+
const allVersionsResult = await this.appVersionService.query({
|
|
17
|
+
skip: 0,
|
|
18
|
+
take: 10000, // Get all versions for aggregation
|
|
19
|
+
filter: input.filters && input.filters.length > 0
|
|
20
|
+
? {
|
|
21
|
+
logic: input.logic || 'and',
|
|
22
|
+
filters: input.filters,
|
|
23
|
+
}
|
|
24
|
+
: undefined,
|
|
25
|
+
});
|
|
26
|
+
let allVersions = allVersionsResult.items;
|
|
27
|
+
// Apply date range filter if provided
|
|
28
|
+
if (input.filters) {
|
|
29
|
+
for (const filter of input.filters) {
|
|
30
|
+
if (filter.field === 'dateRange' && filter.value) {
|
|
31
|
+
allVersions = this.applyDateRangeFilter(allVersions, filter.value);
|
|
32
|
+
}
|
|
33
|
+
if (filter.field === 'versionNumber' && filter.value) {
|
|
34
|
+
allVersions = this.applyVersionNumberFilter(allVersions, filter.value);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Group versions by time period (month/quarter/year)
|
|
39
|
+
const periodGroups = new Map();
|
|
40
|
+
for (const version of allVersions) {
|
|
41
|
+
const publishDate = new Date(version.publishDate);
|
|
42
|
+
const year = publishDate.getFullYear();
|
|
43
|
+
const month = publishDate.getMonth() + 1;
|
|
44
|
+
const quarter = Math.ceil(month / 3);
|
|
45
|
+
const monthName = publishDate.toLocaleString('en-US', { month: 'long' });
|
|
46
|
+
const quarterName = `Q${quarter}`;
|
|
47
|
+
const periodKey = `${year}-${String(month).padStart(2, '0')}`;
|
|
48
|
+
if (!periodGroups.has(periodKey)) {
|
|
49
|
+
periodGroups.set(periodKey, []);
|
|
50
|
+
}
|
|
51
|
+
periodGroups.get(periodKey).push(version);
|
|
52
|
+
}
|
|
53
|
+
// Create timeline results
|
|
54
|
+
const timelineResults = [];
|
|
55
|
+
for (const version of allVersions) {
|
|
56
|
+
const publishDate = new Date(version.publishDate);
|
|
57
|
+
const year = publishDate.getFullYear();
|
|
58
|
+
const month = publishDate.getMonth() + 1;
|
|
59
|
+
const quarter = Math.ceil(month / 3);
|
|
60
|
+
const monthName = publishDate.toLocaleString('en-US', { month: 'long' });
|
|
61
|
+
const quarterName = `Q${quarter}`;
|
|
62
|
+
const periodKey = `${year}-${String(month).padStart(2, '0')}`;
|
|
63
|
+
const versionsInPeriod = periodGroups.get(periodKey)?.length || 0;
|
|
64
|
+
timelineResults.push({
|
|
65
|
+
versionNumber: version.versionNumber,
|
|
66
|
+
publishDate: version.publishDate,
|
|
67
|
+
publishDateObj: publishDate,
|
|
68
|
+
year,
|
|
69
|
+
month: monthName,
|
|
70
|
+
monthNumber: month,
|
|
71
|
+
quarter: quarterName,
|
|
72
|
+
versionCount: versionsInPeriod,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
// Apply sorting if provided
|
|
76
|
+
if (input.sort && input.sort.length > 0) {
|
|
77
|
+
timelineResults.sort((a, b) => {
|
|
78
|
+
for (const sortField of input.sort) {
|
|
79
|
+
const field = sortField.field;
|
|
80
|
+
const aValue = a[field];
|
|
81
|
+
const bValue = b[field];
|
|
82
|
+
const dir = sortField.dir === 'asc' ? 1 : -1;
|
|
83
|
+
// Handle undefined values
|
|
84
|
+
if (aValue === undefined && bValue === undefined)
|
|
85
|
+
continue;
|
|
86
|
+
if (aValue === undefined)
|
|
87
|
+
return 1 * dir;
|
|
88
|
+
if (bValue === undefined)
|
|
89
|
+
return -1 * dir;
|
|
90
|
+
// Handle date comparison
|
|
91
|
+
if (field === 'publishDateObj') {
|
|
92
|
+
const aDate = a.publishDateObj.getTime();
|
|
93
|
+
const bDate = b.publishDateObj.getTime();
|
|
94
|
+
if (aDate < bDate)
|
|
95
|
+
return -1 * dir;
|
|
96
|
+
if (aDate > bDate)
|
|
97
|
+
return 1 * dir;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (aValue < bValue)
|
|
101
|
+
return -1 * dir;
|
|
102
|
+
if (aValue > bValue)
|
|
103
|
+
return 1 * dir;
|
|
104
|
+
}
|
|
105
|
+
return 0;
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
// Default sort by publish date descending (newest first)
|
|
110
|
+
timelineResults.sort((a, b) => {
|
|
111
|
+
return b.publishDateObj.getTime() - a.publishDateObj.getTime();
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
// Apply pagination
|
|
115
|
+
const skip = input.skip || 0;
|
|
116
|
+
const take = input.take || 10;
|
|
117
|
+
const total = timelineResults.length;
|
|
118
|
+
const items = timelineResults.slice(skip, skip + take);
|
|
119
|
+
return {
|
|
120
|
+
items,
|
|
121
|
+
total,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
//#region ---- Custom Filter Handlers ----
|
|
125
|
+
/**
|
|
126
|
+
* Apply date range filter to versions
|
|
127
|
+
*/
|
|
128
|
+
applyDateRangeFilter(versions, dateRange) {
|
|
129
|
+
if (!dateRange || !dateRange.start || !dateRange.end) {
|
|
130
|
+
return versions;
|
|
131
|
+
}
|
|
132
|
+
const startDate = new Date(dateRange.start);
|
|
133
|
+
const endDate = new Date(dateRange.end);
|
|
134
|
+
endDate.setHours(23, 59, 59, 999); // Include the entire end date
|
|
135
|
+
return versions.filter((version) => {
|
|
136
|
+
const publishDate = new Date(version.publishDate);
|
|
137
|
+
return publishDate >= startDate && publishDate <= endDate;
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Apply version number filter to versions
|
|
142
|
+
*/
|
|
143
|
+
applyVersionNumberFilter(versions, versionNumber) {
|
|
144
|
+
if (!versionNumber) {
|
|
145
|
+
return versions;
|
|
146
|
+
}
|
|
147
|
+
const searchTerm = versionNumber.toLowerCase().trim();
|
|
148
|
+
return versions.filter((version) => {
|
|
149
|
+
return version.versionNumber.toLowerCase().includes(searchTerm);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetApplicationVersionsTimelineQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
153
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetApplicationVersionsTimelineQuery, providedIn: 'root' }); }
|
|
154
|
+
}
|
|
155
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetApplicationVersionsTimelineQuery, decorators: [{
|
|
156
|
+
type: Injectable,
|
|
157
|
+
args: [{
|
|
158
|
+
providedIn: 'root',
|
|
159
|
+
}]
|
|
160
|
+
}] });
|
|
161
|
+
|
|
162
|
+
export { GetApplicationVersionsTimelineQuery };
|
|
163
|
+
//# sourceMappingURL=acorex-connectivity-mock-get-application-versions-timeline.query-CvNjA4OH.mjs.map
|
package/fesm2022/acorex-connectivity-mock-get-application-versions-timeline.query-CvNjA4OH.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-connectivity-mock-get-application-versions-timeline.query-CvNjA4OH.mjs","sources":["../tmp-esm2022/mock/lib/application-management/reports/get-application-versions-timeline.query.js"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '@acorex/modules/application-management';\nimport * as i0 from \"@angular/core\";\n//#endregion\nexport class GetApplicationVersionsTimelineQuery {\n constructor() {\n this.entityService = inject(AXPEntityService);\n this.appVersionService = this.entityService\n .withEntity(`${RootConfig.module.name}.${RootConfig.entities.appVersion.name}`)\n .data();\n }\n async fetch(input) {\n // Get all app versions from storage\n const allVersionsResult = await this.appVersionService.query({\n skip: 0,\n take: 10000, // Get all versions for aggregation\n filter: input.filters && input.filters.length > 0\n ? {\n logic: input.logic || 'and',\n filters: input.filters,\n }\n : undefined,\n });\n let allVersions = allVersionsResult.items;\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 allVersions = this.applyDateRangeFilter(allVersions, filter.value);\n }\n if (filter.field === 'versionNumber' && filter.value) {\n allVersions = this.applyVersionNumberFilter(allVersions, filter.value);\n }\n }\n }\n // Group versions by time period (month/quarter/year)\n const periodGroups = new Map();\n for (const version of allVersions) {\n const publishDate = new Date(version.publishDate);\n const year = publishDate.getFullYear();\n const month = publishDate.getMonth() + 1;\n const quarter = Math.ceil(month / 3);\n const monthName = publishDate.toLocaleString('en-US', { month: 'long' });\n const quarterName = `Q${quarter}`;\n const periodKey = `${year}-${String(month).padStart(2, '0')}`;\n if (!periodGroups.has(periodKey)) {\n periodGroups.set(periodKey, []);\n }\n periodGroups.get(periodKey).push(version);\n }\n // Create timeline results\n const timelineResults = [];\n for (const version of allVersions) {\n const publishDate = new Date(version.publishDate);\n const year = publishDate.getFullYear();\n const month = publishDate.getMonth() + 1;\n const quarter = Math.ceil(month / 3);\n const monthName = publishDate.toLocaleString('en-US', { month: 'long' });\n const quarterName = `Q${quarter}`;\n const periodKey = `${year}-${String(month).padStart(2, '0')}`;\n const versionsInPeriod = periodGroups.get(periodKey)?.length || 0;\n timelineResults.push({\n versionNumber: version.versionNumber,\n publishDate: version.publishDate,\n publishDateObj: publishDate,\n year,\n month: monthName,\n monthNumber: month,\n quarter: quarterName,\n versionCount: versionsInPeriod,\n });\n }\n // Apply sorting if provided\n if (input.sort && input.sort.length > 0) {\n timelineResults.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 // Handle date comparison\n if (field === 'publishDateObj') {\n const aDate = a.publishDateObj.getTime();\n const bDate = b.publishDateObj.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 publish date descending (newest first)\n timelineResults.sort((a, b) => {\n return b.publishDateObj.getTime() - a.publishDateObj.getTime();\n });\n }\n // Apply pagination\n const skip = input.skip || 0;\n const take = input.take || 10;\n const total = timelineResults.length;\n const items = timelineResults.slice(skip, skip + take);\n return {\n items,\n total,\n };\n }\n //#region ---- Custom Filter Handlers ----\n /**\n * Apply date range filter to versions\n */\n applyDateRangeFilter(versions, dateRange) {\n if (!dateRange || !dateRange.start || !dateRange.end) {\n return versions;\n }\n const startDate = new Date(dateRange.start);\n const endDate = new Date(dateRange.end);\n endDate.setHours(23, 59, 59, 999); // Include the entire end date\n return versions.filter((version) => {\n const publishDate = new Date(version.publishDate);\n return publishDate >= startDate && publishDate <= endDate;\n });\n }\n /**\n * Apply version number filter to versions\n */\n applyVersionNumberFilter(versions, versionNumber) {\n if (!versionNumber) {\n return versions;\n }\n const searchTerm = versionNumber.toLowerCase().trim();\n return versions.filter((version) => {\n return version.versionNumber.toLowerCase().includes(searchTerm);\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetApplicationVersionsTimelineQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetApplicationVersionsTimelineQuery, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetApplicationVersionsTimelineQuery, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWFwcGxpY2F0aW9uLXZlcnNpb25zLXRpbWVsaW5lLnF1ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb25uZWN0aXZpdHkvbW9jay9zcmMvbGliL2FwcGxpY2F0aW9uLW1hbmFnZW1lbnQvcmVwb3J0cy9nZXQtYXBwbGljYXRpb24tdmVyc2lvbnMtdGltZWxpbmUucXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOztBQWdDcEUsWUFBWTtBQUtaLE1BQU0sT0FBTyxtQ0FBbUM7SUFIaEQ7UUFPbUIsa0JBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRCxzQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYTthQUMzQyxVQUFVLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUM5RSxJQUFJLEVBQW9DLENBQUM7S0FpSzdDO0lBL0pDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBK0M7UUFDekQsb0NBQW9DO1FBQ3BDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1lBQzNELElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxFQUFFLEtBQUssRUFBRSxtQ0FBbUM7WUFDaEQsTUFBTSxFQUNKLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDdkMsQ0FBQyxDQUFFO29CQUNELEtBQUssRUFBRSxLQUFLLENBQUMs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TyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDakMsT0FBTyxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBcktVLG1DQUFtQzttSEFBbkMsbUNBQW1DLGNBRmxDLE1BQU07OzRGQUVQLG1DQUFtQztrQkFIL0MsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFF1ZXJ5IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7IEFYUEVudGl0eVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgQVhNQXBwVmVyc2lvbkVudGl0eU1vZGVsIH0gZnJvbSAnQGFjb3JleC9tb2R1bGVzL2FwcGxpY2F0aW9uLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgUm9vdENvbmZpZyB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy9hcHBsaWNhdGlvbi1tYW5hZ2VtZW50JztcblxuLy8jcmVnaW9uIC0tLS0gICBRdWVyeSBJbnB1dC9PdXRwdXQgVHlwZXMgICAtLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXBwbGljYXRpb25WZXJzaW9uc1RpbWVsaW5lUXVlcnlJbnB1dCB7XG4gIHNraXA/OiBudW1iZXI7XG4gIHRha2U/OiBudW1iZXI7XG4gIHNvcnQ/OiBBcnJheTx7IGZpZWxkOiBzdHJpbmc7IGRpcjogJ2FzYycgfCAnZGVzYycgfT47XG4gIGZpbHRlcnM/OiBBcnJheTx7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICBvcGVyYXRvcjogeyB0eXBlOiBzdHJpbmcgfTtcbiAgICB2YWx1ZTogYW55O1xuICB9PjtcbiAgbG9naWM/OiAnYW5kJyB8ICdvcic7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25WZXJzaW9uVGltZWxpbmVSZXN1bHQge1xuICB2ZXJzaW9uTnVtYmVyOiBzdHJpbmc7XG4gIHB1Ymxpc2hEYXRlOiBzdHJpbmc7XG4gIHB1Ymxpc2hEYXRlT2JqOiBEYXRlO1xuICB5ZWFyOiBudW1iZXI7XG4gIG1vbnRoOiBzdHJpbmc7XG4gIG1vbnRoTnVtYmVyOiBudW1iZXI7XG4gIHF1YXJ0ZXI6IHN0cmluZztcbiAgdmVyc2lvbkNvdW50OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXBwbGljYXRpb25WZXJzaW9uc1RpbWVsaW5lUXVlcnlSZXN1bHQge1xuICBpdGVtczogQXBwbGljYXRpb25WZXJzaW9uVGltZWxpbmVSZXN1bHRbXTtcbiAgdG90YWw6IG51bWJlcjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHZXRBcHBsaWNhdGlvblZlcnNpb25zVGltZWxpbmVRdWVyeVxuICBpbXBsZW1lbnRzIEFYUFF1ZXJ5PEdldEFwcGxpY2F0aW9uVmVyc2lvbnNUaW1lbGluZVF1ZXJ5SW5wdXQsIEdldEFwcGxpY2F0aW9uVmVyc2lvbnNUaW1lbGluZVF1ZXJ5UmVzdWx0PiB7XG5cblxuICBwcml2YXRlIHJlYWRvbmx5IGVudGl0eVNlcnZpY2UgPSBpbmplY3QoQVhQRW50aXR5U2VydmljZSk7XG4gIHByaXZhdGUgYXBwVmVyc2lvblNlcnZpY2UgPSB0aGlzLmVudGl0eVNlcnZpY2VcbiAgICAud2l0aEVudGl0eShgJHtSb290Q29uZmlnLm1vZHVsZS5uYW1lfS4ke1Jvb3RDb25maWcuZW50aXRpZXMuYXBwVmVyc2lvbi5uYW1lfWApXG4gICAgLmRhdGE8c3RyaW5nLCBBWE1BcHBWZXJzaW9uRW50aXR5TW9kZWw+KCk7XG5cbiAgYXN5bmMgZmV0Y2goaW5wdXQ6IEdldEFwcGxpY2F0aW9uVmVyc2lvbnNUaW1lbGluZVF1ZXJ5SW5wdXQpOiBQcm9taXNlPEdldEFwcGxpY2F0aW9uVmVyc2lvbnNUaW1lbGluZVF1ZXJ5UmVzdWx0PiB7XG4gICAgLy8gR2V0IGFsbCBhcHAgdmVyc2lvbnMgZnJvbSBzdG9yYWdlXG4gICAgY29uc3QgYWxsVmVyc2lvbnNSZXN1bHQgPSBhd2FpdCB0aGlzLmFwcFZlcnNpb25TZXJ2aWNlLnF1ZXJ5KHtcbiAgICAgIHNraXA6IDAsXG4gICAgICB0YWtlOiAxMDAwMCwgLy8gR2V0IGFsbCB2ZXJzaW9ucyBmb3IgYWdncmVnYXRpb25cbiAgICAgIGZpbHRlcjpcbiAgICAgICAgaW5wdXQuZmlsdGVycyAmJiBpbnB1dC5maWx0ZXJzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/ICh7XG4gICAgICAgICAgICBsb2dpYzogaW5wdXQubG9naWMgfHwgJ2FuZCcsXG4gICAgICAgICAgICBmaWx0ZXJzOiBpbnB1dC5maWx0ZXJzLFxuICAgICAgICAgIH0gYXMgYW55KVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgbGV0IGFsbFZlcnNpb25zID0gYWxsVmVyc2lvbnNSZXN1bHQuaXRlbXM7XG5cbiAgICAvLyBBcHBseSBkYXRlIHJhbmdlIGZpbHRlciBpZiBwcm92aWRlZFxuICAgIGlmIChpbnB1dC5maWx0ZXJzKSB7XG4gICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBpbnB1dC5maWx0ZXJzKSB7XG4gICAgICAgIGlmIChmaWx0ZXIuZmllbGQgPT09ICdkYXRlUmFuZ2UnICYmIGZpbHRlci52YWx1ZSkge1xuICAgICAgICAgIGFsbFZlcnNpb25zID0gdGhpcy5hcHBseURhdGVSYW5nZUZpbHRlcihhbGxWZXJzaW9ucywgZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVyLmZpZWxkID09PSAndmVyc2lvbk51bWJlcicgJiYgZmlsdGVyLnZhbHVlKSB7XG4gICAgICAgICAgYWxsVmVyc2lvbnMgPSB0aGlzLmFwcGx5VmVyc2lvbk51bWJlckZpbHRlcihhbGxWZXJzaW9ucywgZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdyb3VwIHZlcnNpb25zIGJ5IHRpbWUgcGVyaW9kIChtb250aC9xdWFydGVyL3llYXIpXG4gICAgY29uc3QgcGVyaW9kR3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIEFYTUFwcFZlcnNpb25FbnRpdHlNb2RlbFtdPigpO1xuXG4gICAgZm9yIChjb25zdCB2ZXJzaW9uIG9mIGFsbFZlcnNpb25zKSB7XG4gICAgICBjb25zdCBwdWJsaXNoRGF0ZSA9IG5ldyBEYXRlKHZlcnNpb24ucHVibGlzaERhdGUpO1xuICAgICAgY29uc3QgeWVhciA9IHB1Ymxpc2hEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICBjb25zdCBtb250aCA9IHB1Ymxpc2hEYXRlLmdldE1vbnRoKCkgKyAxO1xuICAgICAgY29uc3QgcXVhcnRlciA9IE1hdGguY2VpbChtb250aCAvIDMpO1xuICAgICAgY29uc3QgbW9udGhOYW1lID0gcHVibGlzaERhdGUudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtb250aDogJ2xvbmcnIH0pO1xuICAgICAgY29uc3QgcXVhcnRlck5hbWUgPSBgUSR7cXVhcnRlcn1gO1xuICAgICAgY29uc3QgcGVyaW9kS2V5ID0gYCR7eWVhcn0tJHtTdHJpbmcobW9udGgpLnBhZFN0YXJ0KDIsICcwJyl9YDtcblxuICAgICAgaWYgKCFwZXJpb2RHcm91cHMuaGFzKHBlcmlvZEtleSkpIHtcbiAgICAgICAgcGVyaW9kR3JvdXBzLnNldChwZXJpb2RLZXksIFtdKTtcbiAgICAgIH1cblxuICAgICAgcGVyaW9kR3JvdXBzLmdldChwZXJpb2RLZXkpIS5wdXNoKHZlcnNpb24pO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aW1lbGluZSByZXN1bHRzXG4gICAgY29uc3QgdGltZWxpbmVSZXN1bHRzOiBBcHBsaWNhdGlvblZlcnNpb25UaW1lbGluZVJlc3VsdFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHZlcnNpb24gb2YgYWxsVmVyc2lvbnMpIHtcbiAgICAgIGNvbnN0IHB1Ymxpc2hEYXRlID0gbmV3IERhdGUodmVyc2lvbi5wdWJsaXNoRGF0ZSk7XG4gICAgICBjb25zdCB5ZWFyID0gcHVibGlzaERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgIGNvbnN0IG1vbnRoID0gcHVibGlzaERhdGUuZ2V0TW9udGgoKSArIDE7XG4gICAgICBjb25zdCBxdWFydGVyID0gTWF0aC5jZWlsKG1vbnRoIC8gMyk7XG4gICAgICBjb25zdCBtb250aE5hbWUgPSBwdWJsaXNoRGF0ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnbG9uZycgfSk7XG4gICAgICBjb25zdCBxdWFydGVyTmFtZSA9IGBRJHtxdWFydGVyfWA7XG4gICAgICBjb25zdCBwZXJpb2RLZXkgPSBgJHt5ZWFyfS0ke1N0cmluZyhtb250aCkucGFkU3RhcnQoMiwgJzAnKX1gO1xuXG4gICAgICBjb25zdCB2ZXJzaW9uc0luUGVyaW9kID0gcGVyaW9kR3JvdXBzLmdldChwZXJpb2RLZXkpPy5sZW5ndGggfHwgMDtcblxuICAgICAgdGltZWxpbmVSZXN1bHRzLnB1c2goe1xuICAgICAgICB2ZXJzaW9uTnVtYmVyOiB2ZXJzaW9uLnZlcnNpb25OdW1iZXIsXG4gICAgICAgIHB1Ymxpc2hEYXRlOiB2ZXJzaW9uLnB1Ymxpc2hEYXRlLFxuICAgICAgICBwdWJsaXNoRGF0ZU9iajogcHVibGlzaERhdGUsXG4gICAgICAgIHllYXIsXG4gICAgICAgIG1vbnRoOiBtb250aE5hbWUsXG4gICAgICAgIG1vbnRoTnVtYmVyOiBtb250aCxcbiAgICAgICAgcXVhcnRlcjogcXVhcnRlck5hbWUsXG4gICAgICAgIHZlcnNpb25Db3VudDogdmVyc2lvbnNJblBlcmlvZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHNvcnRpbmcgaWYgcHJvdmlkZWRcbiAgICBpZiAoaW5wdXQuc29ydCAmJiBpbnB1dC5zb3J0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRpbWVsaW5lUmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qgc29ydEZpZWxkIG9mIGlucHV0LnNvcnQhKSB7XG4gICAgICAgICAgY29uc3QgZmllbGQgPSBzb3J0RmllbGQuZmllbGQgYXMga2V5b2YgQXBwbGljYXRpb25WZXJzaW9uVGltZWxpbmVSZXN1bHQ7XG4gICAgICAgICAgY29uc3QgYVZhbHVlID0gYVtmaWVsZF07XG4gICAgICAgICAgY29uc3QgYlZhbHVlID0gYltmaWVsZF07XG4gICAgICAgICAgY29uc3QgZGlyID0gc29ydEZpZWxkLmRpciA9PT0gJ2FzYycgPyAxIDogLTE7XG5cbiAgICAgICAgICAvLyBIYW5kbGUgdW5kZWZpbmVkIHZhbHVlc1xuICAgICAgICAgIGlmIChhVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBiVmFsdWUgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICAgICAgaWYgKGFWYWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMSAqIGRpcjtcbiAgICAgICAgICBpZiAoYlZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAtMSAqIGRpcjtcblxuICAgICAgICAgIC8vIEhhbmRsZSBkYXRlIGNvbXBhcmlzb25cbiAgICAgICAgICBpZiAoZmllbGQgPT09ICdwdWJsaXNoRGF0ZU9iaicpIHtcbiAgICAgICAgICAgIGNvbnN0IGFEYXRlID0gYS5wdWJsaXNoRGF0ZU9iai5nZXRUaW1lKCk7XG4gICAgICAgICAgICBjb25zdCBiRGF0ZSA9IGIucHVibGlzaERhdGVPYmouZ2V0VGltZSgpO1xuICAgICAgICAgICAgaWYgKGFEYXRlIDwgYkRhdGUpIHJldHVybiAtMSAqIGRpcjtcbiAgICAgICAgICAgIGlmIChhRGF0ZSA+IGJEYXRlKSByZXR1cm4gMSAqIGRpcjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhVmFsdWUgPCBiVmFsdWUpIHJldHVybiAtMSAqIGRpcjtcbiAgICAgICAgICBpZiAoYVZhbHVlID4gYlZhbHVlKSByZXR1cm4gMSAqIGRpcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0IHNvcnQgYnkgcHVibGlzaCBkYXRlIGRlc2NlbmRpbmcgKG5ld2VzdCBmaXJzdClcbiAgICAgIHRpbWVsaW5lUmVzdWx0cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIHJldHVybiBiLnB1Ymxpc2hEYXRlT2JqLmdldFRpbWUoKSAtIGEucHVibGlzaERhdGVPYmouZ2V0VGltZSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgcGFnaW5hdGlvblxuICAgIGNvbnN0IHNraXAgPSBpbnB1dC5za2lwIHx8IDA7XG4gICAgY29uc3QgdGFrZSA9IGlucHV0LnRha2UgfHwgMTA7XG4gICAgY29uc3QgdG90YWwgPSB0aW1lbGluZVJlc3VsdHMubGVuZ3RoO1xuICAgIGNvbnN0IGl0ZW1zID0gdGltZWxpbmVSZXN1bHRzLnNsaWNlKHNraXAsIHNraXAgKyB0YWtlKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpdGVtcyxcbiAgICAgIHRvdGFsLFxuICAgIH07XG4gIH1cblxuICAvLyNyZWdpb24gLS0tLSAgIEN1c3RvbSBGaWx0ZXIgSGFuZGxlcnMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEFwcGx5IGRhdGUgcmFuZ2UgZmlsdGVyIHRvIHZlcnNpb25zXG4gICAqL1xuICBwcml2YXRlIGFwcGx5RGF0ZVJhbmdlRmlsdGVyKHZlcnNpb25zOiBBWE1BcHBWZXJzaW9uRW50aXR5TW9kZWxbXSwgZGF0ZVJhbmdlOiBhbnkpOiBBWE1BcHBWZXJzaW9uRW50aXR5TW9kZWxbXSB7XG4gICAgaWYgKCFkYXRlUmFuZ2UgfHwgIWRhdGVSYW5nZS5zdGFydCB8fCAhZGF0ZVJhbmdlLmVuZCkge1xuICAgICAgcmV0dXJuIHZlcnNpb25zO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKGRhdGVSYW5nZS5zdGFydCk7XG4gICAgY29uc3QgZW5kRGF0ZSA9IG5ldyBEYXRlKGRhdGVSYW5nZS5lbmQpO1xuICAgIGVuZERhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsgLy8gSW5jbHVkZSB0aGUgZW50aXJlIGVuZCBkYXRlXG5cbiAgICByZXR1cm4gdmVyc2lvbnMuZmlsdGVyKCh2ZXJzaW9uKSA9PiB7XG4gICAgICBjb25zdCBwdWJsaXNoRGF0ZSA9IG5ldyBEYXRlKHZlcnNpb24ucHVibGlzaERhdGUpO1xuICAgICAgcmV0dXJuIHB1Ymxpc2hEYXRlID49IHN0YXJ0RGF0ZSAmJiBwdWJsaXNoRGF0ZSA8PSBlbmREYXRlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IHZlcnNpb24gbnVtYmVyIGZpbHRlciB0byB2ZXJzaW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVZlcnNpb25OdW1iZXJGaWx0ZXIoXG4gICAgdmVyc2lvbnM6IEFYTUFwcFZlcnNpb25FbnRpdHlNb2RlbFtdLFxuICAgIHZlcnNpb25OdW1iZXI6IHN0cmluZ1xuICApOiBBWE1BcHBWZXJzaW9uRW50aXR5TW9kZWxbXSB7XG4gICAgaWYgKCF2ZXJzaW9uTnVtYmVyKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbnM7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VhcmNoVGVybSA9IHZlcnNpb25OdW1iZXIudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICByZXR1cm4gdmVyc2lvbnMuZmlsdGVyKCh2ZXJzaW9uKSA9PiB7XG4gICAgICByZXR1cm4gdmVyc2lvbi52ZXJzaW9uTnVtYmVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19"],"names":[],"mappings":";;;;;AAIA;AACO,MAAM,mCAAmC,CAAC;AACjD,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACrD,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AACtC,aAAa,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1F,aAAa,IAAI,EAAE;AACnB,IAAI;AACJ,IAAI,MAAM,KAAK,CAAC,KAAK,EAAE;AACvB;AACA,QAAQ,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACrE,YAAY,IAAI,EAAE,CAAC;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,MAAM,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG;AAC5D,kBAAkB;AAClB,oBAAoB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK;AAC/C,oBAAoB,OAAO,EAAE,KAAK,CAAC,OAAO;AAC1C;AACA,kBAAkB,SAAS;AAC3B,SAAS,CAAC;AACV,QAAQ,IAAI,WAAW,GAAG,iBAAiB,CAAC,KAAK;AACjD;AACA,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE;AAC3B,YAAY,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE;AAChD,gBAAgB,IAAI,MAAM,CAAC,KAAK,KAAK,WAAW,IAAI,MAAM,CAAC,KAAK,EAAE;AAClE,oBAAoB,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC;AACtF,gBAAgB;AAChB,gBAAgB,IAAI,MAAM,CAAC,KAAK,KAAK,eAAe,IAAI,MAAM,CAAC,KAAK,EAAE;AACtE,oBAAoB,WAAW,GAAG,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC;AAC1F,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,MAAM,YAAY,GAAG,IAAI,GAAG,EAAE;AACtC,QAAQ,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE;AAC3C,YAAY,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAC7D,YAAY,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,EAAE;AAClD,YAAY,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC;AACpD,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAChD,YAAY,MAAM,SAAS,GAAG,WAAW,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACpF,YAAY,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC7C,YAAY,MAAM,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACzE,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAC9C,gBAAgB,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC;AAC/C,YAAY;AACZ,YAAY,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;AACrD,QAAQ;AACR;AACA,QAAQ,MAAM,eAAe,GAAG,EAAE;AAClC,QAAQ,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE;AAC3C,YAAY,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAC7D,YAAY,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,EAAE;AAClD,YAAY,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC;AACpD,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAChD,YAAY,MAAM,SAAS,GAAG,WAAW,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACpF,YAAY,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC7C,YAAY,MAAM,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACzE,YAAY,MAAM,gBAAgB,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;AAC7E,YAAY,eAAe,CAAC,IAAI,CAAC;AACjC,gBAAgB,aAAa,EAAE,OAAO,CAAC,aAAa;AACpD,gBAAgB,WAAW,EAAE,OAAO,CAAC,WAAW;AAChD,gBAAgB,cAAc,EAAE,WAAW;AAC3C,gBAAgB,IAAI;AACpB,gBAAgB,KAAK,EAAE,SAAS;AAChC,gBAAgB,WAAW,EAAE,KAAK;AAClC,gBAAgB,OAAO,EAAE,WAAW;AACpC,gBAAgB,YAAY,EAAE,gBAAgB;AAC9C,aAAa,CAAC;AACd,QAAQ;AACR;AACA,QAAQ,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACjD,YAAY,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC3C,gBAAgB,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE;AACpD,oBAAoB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK;AACjD,oBAAoB,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;AAC3C,oBAAoB,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;AAC3C,oBAAoB,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AAChE;AACA,oBAAoB,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;AACpE,wBAAwB;AACxB,oBAAoB,IAAI,MAAM,KAAK,SAAS;AAC5C,wBAAwB,OAAO,CAAC,GAAG,GAAG;AACtC,oBAAoB,IAAI,MAAM,KAAK,SAAS;AAC5C,wBAAwB,OAAO,CAAC,CAAC,GAAG,GAAG;AACvC;AACA,oBAAoB,IAAI,KAAK,KAAK,gBAAgB,EAAE;AACpD,wBAAwB,MAAM,KAAK,GAAG,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE;AAChE,wBAAwB,MAAM,KAAK,GAAG,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE;AAChE,wBAAwB,IAAI,KAAK,GAAG,KAAK;AACzC,4BAA4B,OAAO,CAAC,CAAC,GAAG,GAAG;AAC3C,wBAAwB,IAAI,KAAK,GAAG,KAAK;AACzC,4BAA4B,OAAO,CAAC,GAAG,GAAG;AAC1C,wBAAwB;AACxB,oBAAoB;AACpB,oBAAoB,IAAI,MAAM,GAAG,MAAM;AACvC,wBAAwB,OAAO,CAAC,CAAC,GAAG,GAAG;AACvC,oBAAoB,IAAI,MAAM,GAAG,MAAM;AACvC,wBAAwB,OAAO,CAAC,GAAG,GAAG;AACtC,gBAAgB;AAChB,gBAAgB,OAAO,CAAC;AACxB,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,aAAa;AACb;AACA,YAAY,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC3C,gBAAgB,OAAO,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE;AAC9E,YAAY,CAAC,CAAC;AACd,QAAQ;AACR;AACA,QAAQ,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC;AACpC,QAAQ,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE;AACrC,QAAQ,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM;AAC5C,QAAQ,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;AAC9D,QAAQ,OAAO;AACf,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,QAAQ,EAAE,SAAS,EAAE;AAC9C,QAAQ,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;AAC9D,YAAY,OAAO,QAAQ;AAC3B,QAAQ;AACR,QAAQ,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACnD,QAAQ,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AAC/C,QAAQ,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AAC1C,QAAQ,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK;AAC5C,YAAY,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAC7D,YAAY,OAAO,WAAW,IAAI,SAAS,IAAI,WAAW,IAAI,OAAO;AACrE,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA;AACA;AACA,IAAI,wBAAwB,CAAC,QAAQ,EAAE,aAAa,EAAE;AACtD,QAAQ,IAAI,CAAC,aAAa,EAAE;AAC5B,YAAY,OAAO,QAAQ;AAC3B,QAAQ;AACR,QAAQ,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;AAC7D,QAAQ,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK;AAC5C,YAAY,OAAO,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;AAC3E,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AACvM,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AAC9K;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE,UAAU,EAAE,CAAC;AAC9I,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;;;"}
|
|
@@ -0,0 +1,213 @@
|
|
|
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/human-capital-management';
|
|
5
|
+
|
|
6
|
+
//#endregion
|
|
7
|
+
class GetEmployeeListQuery {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.entityService = inject(AXPEntityService);
|
|
10
|
+
this.employeeService = this.entityService
|
|
11
|
+
.withEntity(`${RootConfig.module.name}.${RootConfig.entities.employee.name}`)
|
|
12
|
+
.data();
|
|
13
|
+
}
|
|
14
|
+
async fetch(input) {
|
|
15
|
+
// Extract employee-specific filters from AXPFilterClause format
|
|
16
|
+
const extractedFilters = this.extractEmployeeFilters(input.filters);
|
|
17
|
+
// Separate custom filters from entity filters
|
|
18
|
+
const entityFilters = [];
|
|
19
|
+
if (extractedFilters && extractedFilters.length > 0) {
|
|
20
|
+
for (const filter of extractedFilters) {
|
|
21
|
+
entityFilters.push(filter);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// Get all employees from storage with entity filters
|
|
25
|
+
const allEmployeesResult = await this.employeeService.query({
|
|
26
|
+
skip: 0,
|
|
27
|
+
take: 10000, // Get all employees for aggregation
|
|
28
|
+
filter: entityFilters.length > 0
|
|
29
|
+
? {
|
|
30
|
+
logic: input.logic || 'and',
|
|
31
|
+
filters: entityFilters,
|
|
32
|
+
}
|
|
33
|
+
: undefined,
|
|
34
|
+
});
|
|
35
|
+
const allEmployees = allEmployeesResult.items;
|
|
36
|
+
// Group employees by department and team
|
|
37
|
+
const departmentGroups = new Map();
|
|
38
|
+
for (const employee of allEmployees) {
|
|
39
|
+
// Get department from position (assuming position has departmentId)
|
|
40
|
+
const departmentId = employee.position?.departmentId || employee.departmentId || 'unknown';
|
|
41
|
+
const departmentTitle = employee.position?.department?.title || 'Unknown Department';
|
|
42
|
+
// Get team from team memberships (assuming employee has teamId or teamMemberships)
|
|
43
|
+
const teamId = employee.teamId || employee.teamMemberships?.[0]?.teamId || undefined;
|
|
44
|
+
const teamTitle = employee.team?.title || employee.teamMemberships?.[0]?.team?.title || undefined;
|
|
45
|
+
const teamKey = teamId || 'no-team';
|
|
46
|
+
if (!departmentGroups.has(departmentId)) {
|
|
47
|
+
departmentGroups.set(departmentId, new Map());
|
|
48
|
+
}
|
|
49
|
+
const teamMap = departmentGroups.get(departmentId);
|
|
50
|
+
if (!teamMap.has(teamKey)) {
|
|
51
|
+
teamMap.set(teamKey, []);
|
|
52
|
+
}
|
|
53
|
+
teamMap.get(teamKey).push(employee);
|
|
54
|
+
}
|
|
55
|
+
// Aggregate data by department and team
|
|
56
|
+
const aggregatedResults = [];
|
|
57
|
+
for (const [departmentId, teamMap] of departmentGroups.entries()) {
|
|
58
|
+
const firstEmployee = Array.from(teamMap.values())[0]?.[0];
|
|
59
|
+
const departmentTitle = firstEmployee?.position?.department?.title || 'Unknown Department';
|
|
60
|
+
for (const [teamKey, employees] of teamMap.entries()) {
|
|
61
|
+
const teamId = teamKey !== 'no-team' ? teamKey : undefined;
|
|
62
|
+
const teamTitle = teamKey !== 'no-team' ? employees[0]?.team?.title || employees[0]?.teamMemberships?.[0]?.team?.title : undefined;
|
|
63
|
+
// Calculate average experience (years since hire date)
|
|
64
|
+
const now = new Date();
|
|
65
|
+
const experiences = employees
|
|
66
|
+
.map((emp) => {
|
|
67
|
+
if (!emp.hireDate)
|
|
68
|
+
return 0;
|
|
69
|
+
const hireDate = new Date(emp.hireDate);
|
|
70
|
+
const diffTime = Math.abs(now.getTime() - hireDate.getTime());
|
|
71
|
+
return diffTime / (1000 * 60 * 60 * 24 * 365.25); // Convert to years
|
|
72
|
+
})
|
|
73
|
+
.filter((exp) => exp > 0);
|
|
74
|
+
const averageExperience = experiences.length > 0 ? experiences.reduce((sum, exp) => sum + exp, 0) / experiences.length : 0;
|
|
75
|
+
// Get unique employment types
|
|
76
|
+
const employmentTypeSet = new Set();
|
|
77
|
+
for (const employee of employees) {
|
|
78
|
+
if (employee.employmentType?.title) {
|
|
79
|
+
employmentTypeSet.add(employee.employmentType.title);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const employmentTypes = Array.from(employmentTypeSet).join(', ') || 'N/A';
|
|
83
|
+
aggregatedResults.push({
|
|
84
|
+
departmentId,
|
|
85
|
+
departmentTitle,
|
|
86
|
+
teamId,
|
|
87
|
+
teamTitle,
|
|
88
|
+
employeeCount: employees.length,
|
|
89
|
+
employmentTypes,
|
|
90
|
+
averageExperience: Number(averageExperience.toFixed(2)),
|
|
91
|
+
totalEmployees: employees.length,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Apply sorting if provided
|
|
96
|
+
if (input.sort && input.sort.length > 0) {
|
|
97
|
+
aggregatedResults.sort((a, b) => {
|
|
98
|
+
for (const sortField of input.sort) {
|
|
99
|
+
const field = sortField.field;
|
|
100
|
+
const aValue = a[field];
|
|
101
|
+
const bValue = b[field];
|
|
102
|
+
const dir = sortField.dir === 'asc' ? 1 : -1;
|
|
103
|
+
// Handle undefined values
|
|
104
|
+
if (aValue === undefined && bValue === undefined)
|
|
105
|
+
continue;
|
|
106
|
+
if (aValue === undefined)
|
|
107
|
+
return 1 * dir;
|
|
108
|
+
if (bValue === undefined)
|
|
109
|
+
return -1 * dir;
|
|
110
|
+
if (aValue < bValue)
|
|
111
|
+
return -1 * dir;
|
|
112
|
+
if (aValue > bValue)
|
|
113
|
+
return 1 * dir;
|
|
114
|
+
}
|
|
115
|
+
return 0;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
// Apply pagination
|
|
119
|
+
const skip = input.skip || 0;
|
|
120
|
+
const take = input.take || 10;
|
|
121
|
+
const total = aggregatedResults.length;
|
|
122
|
+
const items = aggregatedResults.slice(skip, skip + take);
|
|
123
|
+
return {
|
|
124
|
+
items,
|
|
125
|
+
total,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
//#region ---- Filter Extraction ----
|
|
129
|
+
/**
|
|
130
|
+
* Extract employee-specific filters from AXPFilterClause format
|
|
131
|
+
* Maps report parameter paths to employee entity field names
|
|
132
|
+
*/
|
|
133
|
+
extractEmployeeFilters(parameters) {
|
|
134
|
+
const filters = [];
|
|
135
|
+
const paramsAny = parameters;
|
|
136
|
+
if (!paramsAny?.filters || !Array.isArray(paramsAny.filters)) {
|
|
137
|
+
return filters;
|
|
138
|
+
}
|
|
139
|
+
for (const filter of paramsAny.filters) {
|
|
140
|
+
if (!filter?.field || filter?.value === undefined || filter?.value === null) {
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
const field = filter.field;
|
|
144
|
+
const value = filter.value;
|
|
145
|
+
const operator = filter.operator || { type: 'equal' };
|
|
146
|
+
// Handle employee-specific field mappings
|
|
147
|
+
if (field === 'department') {
|
|
148
|
+
// Department filter - can be array of IDs or single ID
|
|
149
|
+
if (Array.isArray(value) && value.length > 0) {
|
|
150
|
+
filters.push({
|
|
151
|
+
field: 'position.departmentId', // Assuming position has departmentId
|
|
152
|
+
operator: { type: 'in' },
|
|
153
|
+
value: value,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
else if (value) {
|
|
157
|
+
filters.push({
|
|
158
|
+
field: 'position.departmentId',
|
|
159
|
+
operator: { type: 'equal' },
|
|
160
|
+
value: value,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else if (field === 'team') {
|
|
165
|
+
// Team filter - can be array of IDs or single ID
|
|
166
|
+
if (Array.isArray(value) && value.length > 0) {
|
|
167
|
+
filters.push({
|
|
168
|
+
field: 'teamId', // Assuming employee has teamId or teamMemberships
|
|
169
|
+
operator: { type: 'in' },
|
|
170
|
+
value: value,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
else if (value) {
|
|
174
|
+
filters.push({
|
|
175
|
+
field: 'teamId',
|
|
176
|
+
operator: { type: 'equal' },
|
|
177
|
+
value: value,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else if (field === 'employmentType') {
|
|
182
|
+
// Employment type filter - skip 'all' value
|
|
183
|
+
if (value && value !== 'all') {
|
|
184
|
+
filters.push({
|
|
185
|
+
field: 'employmentTypeId',
|
|
186
|
+
operator: { type: 'equal' },
|
|
187
|
+
value: value,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
// Direct field mapping
|
|
193
|
+
filters.push({
|
|
194
|
+
field: field,
|
|
195
|
+
operator: operator,
|
|
196
|
+
value: value,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return filters;
|
|
201
|
+
}
|
|
202
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetEmployeeListQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
203
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetEmployeeListQuery, providedIn: 'root' }); }
|
|
204
|
+
}
|
|
205
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetEmployeeListQuery, decorators: [{
|
|
206
|
+
type: Injectable,
|
|
207
|
+
args: [{
|
|
208
|
+
providedIn: 'root',
|
|
209
|
+
}]
|
|
210
|
+
}] });
|
|
211
|
+
|
|
212
|
+
export { GetEmployeeListQuery };
|
|
213
|
+
//# sourceMappingURL=acorex-connectivity-mock-get-employee-list.query--f2M5RgC.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-connectivity-mock-get-employee-list.query--f2M5RgC.mjs","sources":["../tmp-esm2022/mock/lib/report-management/samples/get-employee-list.query.js"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig as HumanCapitalRootConfig } from '@acorex/modules/human-capital-management';\nimport * as i0 from \"@angular/core\";\n//#endregion\nexport class GetEmployeeListQuery {\n constructor() {\n this.entityService = inject(AXPEntityService);\n this.employeeService = this.entityService\n .withEntity(`${HumanCapitalRootConfig.module.name}.${HumanCapitalRootConfig.entities.employee.name}`)\n .data();\n }\n async fetch(input) {\n // Extract employee-specific filters from AXPFilterClause format\n const extractedFilters = this.extractEmployeeFilters(input.filters);\n // Separate custom filters from entity filters\n const entityFilters = [];\n if (extractedFilters && extractedFilters.length > 0) {\n for (const filter of extractedFilters) {\n entityFilters.push(filter);\n }\n }\n // Get all employees from storage with entity filters\n const allEmployeesResult = await this.employeeService.query({\n skip: 0,\n take: 10000, // Get all employees for aggregation\n filter: entityFilters.length > 0\n ? {\n logic: input.logic || 'and',\n filters: entityFilters,\n }\n : undefined,\n });\n const allEmployees = allEmployeesResult.items;\n // Group employees by department and team\n const departmentGroups = new Map();\n for (const employee of allEmployees) {\n // Get department from position (assuming position has departmentId)\n const departmentId = employee.position?.departmentId || employee.departmentId || 'unknown';\n const departmentTitle = employee.position?.department?.title || 'Unknown Department';\n // Get team from team memberships (assuming employee has teamId or teamMemberships)\n const teamId = employee.teamId || employee.teamMemberships?.[0]?.teamId || undefined;\n const teamTitle = employee.team?.title || employee.teamMemberships?.[0]?.team?.title || undefined;\n const teamKey = teamId || 'no-team';\n if (!departmentGroups.has(departmentId)) {\n departmentGroups.set(departmentId, new Map());\n }\n const teamMap = departmentGroups.get(departmentId);\n if (!teamMap.has(teamKey)) {\n teamMap.set(teamKey, []);\n }\n teamMap.get(teamKey).push(employee);\n }\n // Aggregate data by department and team\n const aggregatedResults = [];\n for (const [departmentId, teamMap] of departmentGroups.entries()) {\n const firstEmployee = Array.from(teamMap.values())[0]?.[0];\n const departmentTitle = firstEmployee?.position?.department?.title || 'Unknown Department';\n for (const [teamKey, employees] of teamMap.entries()) {\n const teamId = teamKey !== 'no-team' ? teamKey : undefined;\n const teamTitle = teamKey !== 'no-team' ? employees[0]?.team?.title || employees[0]?.teamMemberships?.[0]?.team?.title : undefined;\n // Calculate average experience (years since hire date)\n const now = new Date();\n const experiences = employees\n .map((emp) => {\n if (!emp.hireDate)\n return 0;\n const hireDate = new Date(emp.hireDate);\n const diffTime = Math.abs(now.getTime() - hireDate.getTime());\n return diffTime / (1000 * 60 * 60 * 24 * 365.25); // Convert to years\n })\n .filter((exp) => exp > 0);\n const averageExperience = experiences.length > 0 ? experiences.reduce((sum, exp) => sum + exp, 0) / experiences.length : 0;\n // Get unique employment types\n const employmentTypeSet = new Set();\n for (const employee of employees) {\n if (employee.employmentType?.title) {\n employmentTypeSet.add(employee.employmentType.title);\n }\n }\n const employmentTypes = Array.from(employmentTypeSet).join(', ') || 'N/A';\n aggregatedResults.push({\n departmentId,\n departmentTitle,\n teamId,\n teamTitle,\n employeeCount: employees.length,\n employmentTypes,\n averageExperience: Number(averageExperience.toFixed(2)),\n totalEmployees: employees.length,\n });\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 ---- Filter Extraction ----\n /**\n * Extract employee-specific filters from AXPFilterClause format\n * Maps report parameter paths to employee entity field names\n */\n extractEmployeeFilters(parameters) {\n const filters = [];\n const paramsAny = parameters;\n if (!paramsAny?.filters || !Array.isArray(paramsAny.filters)) {\n return filters;\n }\n for (const filter of paramsAny.filters) {\n if (!filter?.field || filter?.value === undefined || filter?.value === null) {\n continue;\n }\n const field = filter.field;\n const value = filter.value;\n const operator = filter.operator || { type: 'equal' };\n // Handle employee-specific field mappings\n if (field === 'department') {\n // Department filter - can be array of IDs or single ID\n if (Array.isArray(value) && value.length > 0) {\n filters.push({\n field: 'position.departmentId', // Assuming position has departmentId\n operator: { type: 'in' },\n value: value,\n });\n }\n else if (value) {\n filters.push({\n field: 'position.departmentId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n }\n else if (field === 'team') {\n // Team filter - can be array of IDs or single ID\n if (Array.isArray(value) && value.length > 0) {\n filters.push({\n field: 'teamId', // Assuming employee has teamId or teamMemberships\n operator: { type: 'in' },\n value: value,\n });\n }\n else if (value) {\n filters.push({\n field: 'teamId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n }\n else if (field === 'employmentType') {\n // Employment type filter - skip 'all' value\n if (value && value !== 'all') {\n filters.push({\n field: 'employmentTypeId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n }\n else {\n // Direct field mapping\n filters.push({\n field: field,\n operator: operator,\n value: value,\n });\n }\n }\n return filters;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetEmployeeListQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetEmployeeListQuery, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetEmployeeListQuery, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWVtcGxveWVlLWxpc3QucXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nvbm5lY3Rpdml0eS9tb2NrL3NyYy9saWIvcmVwb3J0LW1hbmFnZW1lbnQvc2FtcGxlcy9nZXQtZW1wbG95ZWUtbGlzdC5xdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVsRSxPQUFPLEVBQUUsVUFBVSxJQUFJLHNCQUFzQixFQUFFLE1BQU0sMENBQTBDLENBQUM7O0FBaUNoRyxZQUFZO0FBS1osTUFBTSxPQUFPLG9CQUFvQjtJQUhqQztRQUltQixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xELG9CQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWE7YUFDekMsVUFBVSxDQUFDLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3BHLElBQUksRUFBd0QsQ0FBQztLQXFOakU7SUFuTkMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFzQztRQUNoRCxnRUFBZ0U7UUFDaEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXBFLDhDQUE4QztRQUM5QyxNQUFNLGFBQWEsR0FBeUMsRUFBRSxDQUFDO1FBRS9ELElBQUksZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BELEtBQUssTUFBTSxNQUFNLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDdEMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFN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O2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQUXVlcnkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3J1bnRpbWUnO1xuaW1wb3J0IHsgQVhQRW50aXR5U2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2VudGl0eSc7XG5pbXBvcnQgeyBBWE1IdW1hbkNhcGl0YWxNYW5hZ2VtZW50RW1wbG95ZWVFbnRpdHlNb2RlbCB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy9odW1hbi1jYXBpdGFsLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgUm9vdENvbmZpZyBhcyBIdW1hbkNhcGl0YWxSb290Q29uZmlnIH0gZnJvbSAnQGFjb3JleC9tb2R1bGVzL2h1bWFuLWNhcGl0YWwtbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBSb290Q29uZmlnIGFzIE9yZ2FuaXphdGlvblJvb3RDb25maWcgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQnO1xuXG4vLyNyZWdpb24gLS0tLSAgIFF1ZXJ5IElucHV0L091dHB1dCBUeXBlcyAgIC0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRFbXBsb3llZUxpc3RRdWVyeUlucHV0IHtcbiAgc2tpcD86IG51bWJlcjtcbiAgdGFrZT86IG51bWJlcjtcbiAgc29ydD86IEFycmF5PHsgZmllbGQ6IHN0cmluZzsgZGlyOiAnYXNjJyB8ICdkZXNjJyB9PjtcbiAgZmlsdGVycz86IEFycmF5PHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIG9wZXJhdG9yOiB7IHR5cGU6IHN0cmluZyB9O1xuICAgIHZhbHVlOiBhbnk7XG4gIH0+O1xuICBsb2dpYz86ICdhbmQnIHwgJ29yJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbXBsb3llZUJ5RGVwYXJ0bWVudFJlc3VsdCB7XG4gIGRlcGFydG1lbnRJZDogc3RyaW5nO1xuICBkZXBhcnRtZW50VGl0bGU6IHN0cmluZztcbiAgdGVhbUlkPzogc3RyaW5nO1xuICB0ZWFtVGl0bGU/OiBzdHJpbmc7XG4gIGVtcGxveWVlQ291bnQ6IG51bWJlcjtcbiAgZW1wbG95bWVudFR5cGVzOiBzdHJpbmc7XG4gIGF2ZXJhZ2VFeHBlcmllbmNlOiBudW1iZXI7XG4gIHRvdGFsRW1wbG95ZWVzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RW1wbG95ZWVMaXN0UXVlcnlSZXN1bHQge1xuICBpdGVtczogRW1wbG95ZWVCeURlcGFydG1lbnRSZXN1bHRbXTtcbiAgdG90YWw6IG51bWJlcjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHZXRFbXBsb3llZUxpc3RRdWVyeSBpbXBsZW1lbnRzIEFYUFF1ZXJ5PEdldEVtcGxveWVlTGlzdFF1ZXJ5SW5wdXQsIEdldEVtcGxveWVlTGlzdFF1ZXJ5UmVzdWx0PiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50aXR5U2VydmljZSA9IGluamVjdChBWFBFbnRpdHlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBlbXBsb3llZVNlcnZpY2UgPSB0aGlzLmVudGl0eVNlcnZpY2VcbiAgICAud2l0aEVudGl0eShgJHtIdW1hbkNhcGl0YWxSb290Q29uZmlnLm1vZHVsZS5uYW1lfS4ke0h1bWFuQ2FwaXRhbFJvb3RDb25maWcuZW50aXRpZXMuZW1wbG95ZWUubmFtZX1gKVxuICAgIC5kYXRhPHN0cmluZywgQVhNSHVtYW5DYXBpdGFsTWFuYWdlbWVudEVtcGxveWVlRW50aXR5TW9kZWw+KCk7XG5cbiAgYXN5bmMgZmV0Y2goaW5wdXQ6IEdldEVtcGxveWVlTGlzdFF1ZXJ5SW5wdXQgfCBhbnkpOiBQcm9taXNlPEdldEVtcGxveWVlTGlzdFF1ZXJ5UmVzdWx0PiB7XG4gICAgLy8gRXh0cmFjdCBlbXBsb3llZS1zcGVjaWZpYyBmaWx0ZXJzIGZyb20gQVhQRmlsdGVyQ2xhdXNlIGZvcm1hdFxuICAgIGNvbnN0IGV4dHJhY3RlZEZpbHRlcnMgPSB0aGlzLmV4dHJhY3RFbXBsb3llZUZpbHRlcnMoaW5wdXQuZmlsdGVycyk7XG5cbiAgICAvLyBTZXBhcmF0ZSBjdXN0b20gZmlsdGVycyBmcm9tIGVudGl0eSBmaWx0ZXJzXG4gICAgY29uc3QgZW50aXR5RmlsdGVyczogR2V0RW1wbG95ZWVMaXN0UXVlcnlJbnB1dFsnZmlsdGVycyddID0gW107XG5cbiAgICBpZiAoZXh0cmFjdGVkRmlsdGVycyAmJiBleHRyYWN0ZWRGaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGV4dHJhY3RlZEZpbHRlcnMpIHtcbiAgICAgICAgZW50aXR5RmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2V0IGFsbCBlbXBsb3llZXMgZnJvbSBzdG9yYWdlIHdpdGggZW50aXR5IGZpbHRlcnNcbiAgICBjb25zdCBhbGxFbXBsb3llZXNSZXN1bHQgPSBhd2FpdCB0aGlzLmVtcGxveWVlU2VydmljZS5xdWVyeSh7XG4gICAgICBza2lwOiAwLFxuICAgICAgdGFrZTogMTAwMDAsIC8vIEdldCBhbGwgZW1wbG95ZWVzIGZvciBhZ2dyZWdhdGlvblxuICAgICAgZmlsdGVyOlxuICAgICAgICBlbnRpdHlGaWx0ZXJzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/ICh7XG4gICAgICAgICAgICAgIGxvZ2ljOiBpbnB1dC5sb2dpYyB8fCAnYW5kJyxcbiAgICAgICAgICAgICAgZmlsdGVyczogZW50aXR5RmlsdGVycyxcbiAgICAgICAgICAgIH0gYXMgYW55KVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYWxsRW1wbG95ZWVzID0gYWxsRW1wbG95ZWVzUmVzdWx0Lml0ZW1zO1xuXG4gICAgLy8gR3JvdXAgZW1wbG95ZWVzIGJ5IGRlcGFydG1lbnQgYW5kIHRlYW1cbiAgICBjb25zdCBkZXBhcnRtZW50R3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIEFYTUh1bWFuQ2FwaXRhbE1hbmFnZW1lbnRFbXBsb3llZUVudGl0eU1vZGVsW10+PigpO1xuXG4gICAgZm9yIChjb25zdCBlbXBsb3llZSBvZiBhbGxFbXBsb3llZXMpIHtcbiAgICAgIC8vIEdldCBkZXBhcnRtZW50IGZyb20gcG9zaXRpb24gKGFzc3VtaW5nIHBvc2l0aW9uIGhhcyBkZXBhcnRtZW50SWQpXG4gICAgICBjb25zdCBkZXBhcnRtZW50SWQgPSAoZW1wbG95ZWUgYXMgYW55KS5wb3NpdGlvbj8uZGVwYXJ0bWVudElkIHx8IChlbXBsb3llZSBhcyBhbnkpLmRlcGFydG1lbnRJZCB8fCAndW5rbm93bic7XG4gICAgICBjb25zdCBkZXBhcnRtZW50VGl0bGUgPSAoZW1wbG95ZWUgYXMgYW55KS5wb3NpdGlvbj8uZGVwYXJ0bWVudD8udGl0bGUgfHwgJ1Vua25vd24gRGVwYXJ0bWVudCc7XG5cbiAgICAgIC8vIEdldCB0ZWFtIGZyb20gdGVhbSBtZW1iZXJzaGlwcyAoYXNzdW1pbmcgZW1wbG95ZWUgaGFzIHRlYW1JZCBvciB0ZWFtTWVtYmVyc2hpcHMpXG4gICAgICBjb25zdCB0ZWFtSWQgPSAoZW1wbG95ZWUgYXMgYW55KS50ZWFtSWQgfHwgKGVtcGxveWVlIGFzIGFueSkudGVhbU1lbWJlcnNoaXBzPy5bMF0/LnRlYW1JZCB8fCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB0ZWFtVGl0bGUgPSAoZW1wbG95ZWUgYXMgYW55KS50ZWFtPy50aXRsZSB8fCAoZW1wbG95ZWUgYXMgYW55KS50ZWFtTWVtYmVyc2hpcHM/LlswXT8udGVhbT8udGl0bGUgfHwgdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCB0ZWFtS2V5ID0gdGVhbUlkIHx8ICduby10ZWFtJztcblxuICAgICAgaWYgKCFkZXBhcnRtZW50R3JvdXBzLmhhcyhkZXBhcnRtZW50SWQpKSB7XG4gICAgICAgIGRlcGFydG1lbnRHcm91cHMuc2V0KGRlcGFydG1lbnRJZCwgbmV3IE1hcCgpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVhbU1hcCA9IGRlcGFydG1lbnRHcm91cHMuZ2V0KGRlcGFydG1lbnRJZCkhO1xuICAgICAgaWYgKCF0ZWFtTWFwLmhhcyh0ZWFtS2V5KSkge1xuICAgICAgICB0ZWFtTWFwLnNldCh0ZWFtS2V5LCBbXSk7XG4gICAgICB9XG5cbiAgICAgIHRlYW1NYXAuZ2V0KHRlYW1LZXkpIS5wdXNoKGVtcGxveWVlKTtcbiAgICB9XG5cbiAgICAvLyBBZ2dyZWdhdGUgZGF0YSBieSBkZXBhcnRtZW50IGFuZCB0ZWFtXG4gICAgY29uc3QgYWdncmVnYXRlZFJlc3VsdHM6IEVtcGxveWVlQnlEZXBhcnRtZW50UmVzdWx0W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2RlcGFydG1lbnRJZCwgdGVhbU1hcF0gb2YgZGVwYXJ0bWVudEdyb3Vwcy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IGZpcnN0RW1wbG95ZWUgPSBBcnJheS5mcm9tKHRlYW1NYXAudmFsdWVzKCkpWzBdPy5bMF07XG4gICAgICBjb25zdCBkZXBhcnRtZW50VGl0bGUgPSAoZmlyc3RFbXBsb3llZSBhcyBhbnkpPy5wb3NpdGlvbj8uZGVwYXJ0bWVudD8udGl0bGUgfHwgJ1Vua25vd24gRGVwYXJ0bWVudCc7XG5cbiAgICAgIGZvciAoY29uc3QgW3RlYW1LZXksIGVtcGxveWVlc10gb2YgdGVhbU1hcC5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3QgdGVhbUlkID0gdGVhbUtleSAhPT0gJ25vLXRlYW0nID8gdGVhbUtleSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdGVhbVRpdGxlID1cbiAgICAgICAgICB0ZWFtS2V5ICE9PSAnbm8tdGVhbScgPyAoZW1wbG95ZWVzWzBdIGFzIGFueSk/LnRlYW0/LnRpdGxlIHx8IChlbXBsb3llZXNbMF0gYXMgYW55KT8udGVhbU1lbWJlcnNoaXBzPy5bMF0/LnRlYW0/LnRpdGxlIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSBhdmVyYWdlIGV4cGVyaWVuY2UgKHllYXJzIHNpbmNlIGhpcmUgZGF0ZSlcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc3QgZXhwZXJpZW5jZXMgPSBlbXBsb3llZXNcbiAgICAgICAgICAubWFwKChlbXApID0+IHtcbiAgICAgICAgICAgIGlmICghZW1wLmhpcmVEYXRlKSByZXR1cm4gMDtcbiAgICAgICAgICAgIGNvbnN0IGhpcmVEYXRlID0gbmV3IERhdGUoZW1wLmhpcmVEYXRlKTtcbiAgICAgICAgICAgIGNvbnN0IGRpZmZUaW1lID0gTWF0aC5hYnMobm93LmdldFRpbWUoKSAtIGhpcmVEYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICByZXR1cm4gZGlmZlRpbWUgLyAoMTAwMCAqIDYwICogNjAgKiAyNCAqIDM2NS4yNSk7IC8vIENvbnZlcnQgdG8geWVhcnNcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoKGV4cCkgPT4gZXhwID4gMCk7XG5cbiAgICAgICAgY29uc3QgYXZlcmFnZUV4cGVyaWVuY2UgPSBleHBlcmllbmNlcy5sZW5ndGggPiAwID8gZXhwZXJpZW5jZXMucmVkdWNlKChzdW0sIGV4cCkgPT4gc3VtICsgZXhwLCAwKSAvIGV4cGVyaWVuY2VzLmxlbmd0aCA6IDA7XG5cbiAgICAgICAgLy8gR2V0IHVuaXF1ZSBlbXBsb3ltZW50IHR5cGVzXG4gICAgICAgIGNvbnN0IGVtcGxveW1lbnRUeXBlU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGZvciAoY29uc3QgZW1wbG95ZWUgb2YgZW1wbG95ZWVzKSB7XG4gICAgICAgICAgaWYgKChlbXBsb3llZSBhcyBhbnkpLmVtcGxveW1lbnRUeXBlPy50aXRsZSkge1xuICAgICAgICAgICAgZW1wbG95bWVudFR5cGVTZXQuYWRkKChlbXBsb3llZSBhcyBhbnkpLmVtcGxveW1lbnRUeXBlLnRpdGxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW1wbG95bWVudFR5cGVzID0gQXJyYXkuZnJvbShlbXBsb3ltZW50VHlwZVNldCkuam9pbignLCAnKSB8fCAnTi9BJztcblxuICAgICAgICBhZ2dyZWdhdGVkUmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICBkZXBhcnRtZW50SWQsXG4gICAgICAgICAgZGVwYXJ0bWVudFRpdGxlLFxuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICB0ZWFtVGl0bGUsXG4gICAgICAgICAgZW1wbG95ZWVDb3VudDogZW1wbG95ZWVzLmxlbmd0aCxcbiAgICAgICAgICBlbXBsb3ltZW50VHlwZXMsXG4gICAgICAgICAgYXZlcmFnZUV4cGVyaWVuY2U6IE51bWJlcihhdmVyYWdlRXhwZXJpZW5jZS50b0ZpeGVkKDIpKSxcbiAgICAgICAgICB0b3RhbEVtcGxveWVlczogZW1wbG95ZWVzLmxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgc29ydGluZyBpZiBwcm92aWRlZFxuICAgIGlmIChpbnB1dC5zb3J0ICYmIGlucHV0LnNvcnQubGVuZ3RoID4gMCkge1xuICAgICAgYWdncmVnYXRlZFJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHNvcnRGaWVsZCBvZiBpbnB1dC5zb3J0ISkge1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gc29ydEZpZWxkLmZpZWxkIGFzIGtleW9mIEVtcGxveWVlQnlEZXBhcnRtZW50UmVzdWx0O1xuICAgICAgICAgIGNvbnN0IGFWYWx1ZSA9IGFbZmllbGRdO1xuICAgICAgICAgIGNvbnN0IGJWYWx1ZSA9IGJbZmllbGRdO1xuICAgICAgICAgIGNvbnN0IGRpciA9IHNvcnRGaWVsZC5kaXIgPT09ICdhc2MnID8gMSA6IC0xO1xuXG4gICAgICAgICAgLy8gSGFuZGxlIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICAgICAgICBpZiAoYVZhbHVlID09PSB1bmRlZmluZWQgJiYgYlZhbHVlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChhVmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDEgKiBkaXI7XG4gICAgICAgICAgaWYgKGJWYWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gLTEgKiBkaXI7XG5cbiAgICAgICAgICBpZiAoYVZhbHVlIDwgYlZhbHVlKSByZXR1cm4gLTEgKiBkaXI7XG4gICAgICAgICAgaWYgKGFWYWx1ZSA+IGJWYWx1ZSkgcmV0dXJuIDEgKiBkaXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBwYWdpbmF0aW9uXG4gICAgY29uc3Qgc2tpcCA9IGlucHV0LnNraXAgfHwgMDtcbiAgICBjb25zdCB0YWtlID0gaW5wdXQudGFrZSB8fCAxMDtcbiAgICBjb25zdCB0b3RhbCA9IGFnZ3JlZ2F0ZWRSZXN1bHRzLmxlbmd0aDtcbiAgICBjb25zdCBpdGVtcyA9IGFnZ3JlZ2F0ZWRSZXN1bHRzLnNsaWNlKHNraXAsIHNraXAgKyB0YWtlKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpdGVtcyxcbiAgICAgIHRvdGFsLFxuICAgIH07XG4gIH1cblxuICAvLyNyZWdpb24gLS0tLSAgIEZpbHRlciBFeHRyYWN0aW9uICAgLS0tLVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IGVtcGxveWVlLXNwZWNpZmljIGZpbHRlcnMgZnJvbSBBWFBGaWx0ZXJDbGF1c2UgZm9ybWF0XG4gICAqIE1hcHMgcmVwb3J0IHBhcmFtZXRlciBwYXRocyB0byBlbXBsb3llZSBlbnRpdHkgZmllbGQgbmFtZXNcbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdEVtcGxveWVlRmlsdGVycyhwYXJhbWV0ZXJzOiBhbnkpOiBHZXRFbXBsb3llZUxpc3RRdWVyeUlucHV0WydmaWx0ZXJzJ10ge1xuICAgIGNvbnN0IGZpbHRlcnM6IEdldEVtcGxveWVlTGlzdFF1ZXJ5SW5wdXRbJ2ZpbHRlcnMnXSA9IFtdO1xuICAgIGNvbnN0IHBhcmFtc0FueSA9IHBhcmFtZXRlcnMgYXMgYW55O1xuXG4gICAgaWYgKCFwYXJhbXNBbnk/LmZpbHRlcnMgfHwgIUFycmF5LmlzQXJyYXkocGFyYW1zQW55LmZpbHRlcnMpKSB7XG4gICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBwYXJhbXNBbnkuZmlsdGVycykge1xuICAgICAgaWYgKCFmaWx0ZXI/LmZpZWxkIHx8IGZpbHRlcj8udmFsdWUgPT09IHVuZGVmaW5lZCB8fCBmaWx0ZXI/LnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWVsZCA9IGZpbHRlci5maWVsZDtcbiAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyLnZhbHVlO1xuICAgICAgY29uc3Qgb3BlcmF0b3IgPSBmaWx0ZXIub3BlcmF0b3IgfHwgeyB0eXBlOiAnZXF1YWwnIH07XG5cbiAgICAgIC8vIEhhbmRsZSBlbXBsb3llZS1zcGVjaWZpYyBmaWVsZCBtYXBwaW5nc1xuICAgICAgaWYgKGZpZWxkID09PSAnZGVwYXJ0bWVudCcpIHtcbiAgICAgICAgLy8gRGVwYXJ0bWVudCBmaWx0ZXIgLSBjYW4gYmUgYXJyYXkgb2YgSURzIG9yIHNpbmdsZSBJRFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogJ3Bvc2l0aW9uLmRlcGFydG1lbnRJZCcsIC8vIEFzc3VtaW5nIHBvc2l0aW9uIGhhcyBkZXBhcnRtZW50SWRcbiAgICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdpbicgfSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogJ3Bvc2l0aW9uLmRlcGFydG1lbnRJZCcsXG4gICAgICAgICAgICBvcGVyYXRvcjogeyB0eXBlOiAnZXF1YWwnIH0sXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmllbGQgPT09ICd0ZWFtJykge1xuICAgICAgICAvLyBUZWFtIGZpbHRlciAtIGNhbiBiZSBhcnJheSBvZiBJRHMgb3Igc2luZ2xlIElEXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiAndGVhbUlkJywgLy8gQXNzdW1pbmcgZW1wbG95ZWUgaGFzIHRlYW1JZCBvciB0ZWFtTWVtYmVyc2hpcHNcbiAgICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdpbicgfSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogJ3RlYW1JZCcsXG4gICAgICAgICAgICBvcGVyYXRvcjogeyB0eXBlOiAnZXF1YWwnIH0sXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmllbGQgPT09ICdlbXBsb3ltZW50VHlwZScpIHtcbiAgICAgICAgLy8gRW1wbG95bWVudCB0eXBlIGZpbHRlciAtIHNraXAgJ2FsbCcgdmFsdWVcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSAnYWxsJykge1xuICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogJ2VtcGxveW1lbnRUeXBlSWQnLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHsgdHlwZTogJ2VxdWFsJyB9LFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEaXJlY3QgZmllbGQgbWFwcGluZ1xuICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVycztcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuIl19"],"names":["HumanCapitalRootConfig"],"mappings":"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"}
|