@provoly/dashboard 0.15.9 → 0.15.10

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.
@@ -72,7 +72,7 @@ const namedQueriesUses = createSelector(globalManifest, (manifest) => manifest.w
72
72
  const presentation = createSelector(feature, (state) => state?.presentation);
73
73
  const isCurrentPresentationModified = createSelector(presentation, globalManifest, (state, global) => !equal(global, state.initial));
74
74
  const isCurrentPresentationOwner = createSelector(presentation, (state) => !!state.current && state.current.owner);
75
- const filters = createSelector(feature, (state) => state?.manifests.manifest.filters ?? {});
75
+ const filters = createSelector(feature, (state) => state?.manifests.manifest.filters ?? []);
76
76
  const datasourceFilters = createSelector(feature, (state) => state?.manifests.manifest.filters
77
77
  ? state?.manifests.manifest.filters.reduce((obj, filter) => (filter.attributes.forEach((attribute) => (obj[attribute.datasource] || (obj[attribute.datasource] = [])).push({
78
78
  attribute: attribute.id,
@@ -123,4 +123,4 @@ export const DashboardSelectors = {
123
123
  displayOptions,
124
124
  capabilities
125
125
  };
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLnNlbGVjdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9kYXNoYm9hcmQvc3RvcmUvZGFzaGJvYXJkLnNlbGVjdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFvQixNQUFNLGFBQWEsQ0FBQztBQUN0RixPQUFPLEtBQUssTUFBTSxxQkFBcUIsQ0FBQztBQUd4QyxPQUFPLEVBQ0wsbUJBQW1CLEVBS3BCLE1BQU0scUNBQXFDLENBQUM7QUFLN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFN0IsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQWlCLGdCQUFnQixDQUFDLENBQUM7QUFDeEUsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQXFCLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN2RixNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNwRyxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN4RixNQUFNLGNBQWMsR0FBRyxjQUFjLENBQ25DLFNBQVM7QUFDVCxhQUFhO0FBQ2IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBcUIsQ0FBQyxDQUNoRyxDQUFDO0FBQ0YsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUMsY0FBYyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDdEUsYUFBYSxDQUFDLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxDQUNyRCxDQUFDO0FBQ0YsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUNuQyxTQUFTO0FBQ1QsYUFBYTtBQUNiLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxHQUFHLFNBQVMsRUFBRSxjQUFjLEVBQUUsSUFBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQXFCLENBQUMsQ0FDdEcsQ0FBQztBQUNGLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDL0UsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNqRyxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQ25DLGNBQWMsRUFDZCxJQUFJLEVBQ0osQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUF1QixFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FDakYsQ0FBQztBQUNGLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FDL0IsY0FBYyxFQUNkLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLG1CQUFtQixDQUFDLE1BQU0sQ0FDekUsQ0FBQztBQUNGLE1BQU0scUJBQXFCLEdBQUcsRUFBUyxDQUFDO0FBQ3hDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDdkMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2pDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxHQUFHLGNBQWMsQ0FDM0MsY0FBYyxFQUNkLENBQUMsY0FBaUMsRUFBRSxFQUFFLENBQ3BDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQzVCO2dCQUNDLElBQUksRUFBRSxhQUFhO2dCQUNuQixNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO2FBQ3pCLENBQ3ZCLENBQUM7S0FDSDtJQUNELE9BQU8scUJBQXFCLENBQUMsS0FBSyxDQUF3RCxDQUFDO0FBQzdGLENBQUMsQ0FBQztBQUNGLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvRSxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFjLEVBQUUsQ0FBQyxDQUFDO0FBQzVGLE1BQU0sb0JBQW9CLEdBQUcsY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUNoRixpQkFBaUI7SUFDakIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUssRUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDO0NBQ2hHLENBQUMsQ0FBQztBQUNILE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFxQixFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbkYsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSyxFQUFpQixDQUFDLENBQUM7QUFDbEcsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjLENBQ3JDLE9BQU8sRUFDUCxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixJQUFLLEVBQTJDLENBQ3RGLENBQUM7QUFDRixNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFpQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFjLEVBQUUsQ0FBQyxDQUFDO0FBQ2hILE1BQU0scUJBQXFCLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO0lBQ2hFLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBYyxFQUFFLENBQUM7QUFDakgsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLHNCQUFzQixHQUFHLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxTQUFTLENBQUMsQ0FBQztBQUM1RyxNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxJQUFLLEVBQWUsQ0FBQyxDQUFDO0FBQ3hHLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLElBQUssRUFBNkIsQ0FBQyxDQUFDO0FBQ3BILE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUssRUFBb0MsQ0FBQyxDQUFDO0FBQ3JILE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNuRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7S0FDNUIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDYixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO0tBQ3pDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDM0UsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUN0QztLQUNBLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDdEMsQ0FBQztBQUNGLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBYSxFQUFFLEVBQUUsQ0FDdEMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JGLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FDbEMsZUFBZSxFQUNmLFFBQVEsRUFDUixDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSyxFQUFhLENBQzFHLENBQUM7QUFDRixNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBcUIsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM3RixNQUFNLG1CQUFtQixHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQXlCLEVBQUUsQ0FBQyxDQUFDO0FBQ2xILE1BQU0sb0JBQW9CLEdBQUcsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsQ0FBQztBQUN0RyxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUNuRSxRQUFRLENBQUMsT0FBTztLQUNiLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUNyRSxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNyQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUN6RSxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUM7S0FDeEMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLE1BQU07SUFDTixXQUFXO0lBQ1gsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO0lBQ2pCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtDQUN0QixDQUFDLENBQUMsQ0FDTixDQUNGO0tBQ0EsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztLQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0tBQ2xDLE1BQU0sQ0FDTCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUNoRixFQUF1RyxDQUN4RyxDQUNKLENBQUM7QUFDRixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBcUIsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzdGLE1BQU0sNkJBQTZCLEdBQUcsY0FBYyxDQUNsRCxZQUFZLEVBQ1osY0FBYyxFQUNkLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FDakQsQ0FBQztBQUNGLE1BQU0sMEJBQTBCLEdBQUcsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUVuSCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBcUIsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzVHLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQXFCLEVBQUUsRUFBRSxDQUMxRSxLQUFLLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPO0lBQy9CLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUN0QyxDQUFDLEdBQWdELEVBQUUsTUFBYyxFQUFFLEVBQUUsQ0FBQyxDQUNwRSxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQ3RDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3ZCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUU7UUFDL0IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO0tBQ3BCLENBQUMsQ0FDSDtRQUNELEdBQUcsQ0FDSixFQUNELEVBQUUsQ0FDSDtJQUNILENBQUMsQ0FBQyxFQUFFLENBQ1AsQ0FBQztBQUNGLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFxQixFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDM0YsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQXFCLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMxRixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBcUIsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBRTdGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQ2hDLE9BQU87SUFDUCxJQUFJO0lBQ0osaUJBQWlCO0lBQ2pCLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsWUFBWTtJQUNaLGNBQWM7SUFDZCxjQUFjO0lBQ2QsYUFBYTtJQUNiLFVBQVU7SUFDVixPQUFPO0lBQ1AsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLHFCQUFxQjtJQUNyQixzQkFBc0I7SUFDdEIsZUFBZTtJQUNmLFFBQVE7SUFDUixhQUFhO0lBQ2IsYUFBYTtJQUNiLGFBQWE7SUFDYixvQkFBb0I7SUFDcEIsU0FBUztJQUNULG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsY0FBYztJQUNkLE9BQU87SUFDUCxVQUFVO0lBQ1YsWUFBWTtJQUNaLE9BQU87SUFDUCw2QkFBNkI7SUFDN0IsMEJBQTBCO0lBQzFCLGlCQUFpQjtJQUNqQixXQUFXO0lBQ1gsY0FBYztJQUNkLFlBQVk7Q0FDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlRmVhdHVyZVNlbGVjdG9yLCBjcmVhdGVTZWxlY3RvciwgTWVtb2l6ZWRTZWxlY3RvciB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCBlcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwvZXM2JztcbmltcG9ydCB7IEZpbHRlciwgRmlsdGVyQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWwvZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC9pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBEYXNoYm9hcmRHcmlkTGF5b3V0LFxuICBEYXNoYm9hcmRNYW5pZmVzdCxcbiAgR2xvYmFsTWFuaWZlc3QsXG4gIFdpZGdldExheW91dCxcbiAgV2lkZ2V0TWFuaWZlc3Rcbn0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC9tYW5pZmVzdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVzdWx0T3JkZXIgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVsL3Jlc3VsdC1vcmRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVzdWx0U2V0LCBSZXN1bHRTZXRzIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC9yZXN1bHQtc2V0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDZWxsUGFyYW1zLCBWaWV3TW9kZSB9IGZyb20gJy4vZGFzaGJvYXJkLmFjdGlvbnMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkU3RhdGUgfSBmcm9tICcuL2Rhc2hib2FyZC5yZWR1Y2Vycyc7XG5pbXBvcnQgeyBNYW5pZmVzdFV0aWxzIH0gZnJvbSAnLi9tYW5pZmVzdC11dGlscy5jbGFzcyc7XG5cbmNvbnN0IE5FV19XSU5ET1dfVEFSR0VUID0gLTE7XG5cbmNvbnN0IGZlYXR1cmUgPSBjcmVhdGVGZWF0dXJlU2VsZWN0b3I8RGFzaGJvYXJkU3RhdGU+KCdAcHJ5L2Rhc2hib2FyZCcpO1xuY29uc3QgbWFuaWZlc3RzID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/Lm1hbmlmZXN0cyk7XG5jb25zdCByYW5rID0gY3JlYXRlU2VsZWN0b3IobWFuaWZlc3RzLCAobWFuaWZlc3RzKSA9PiBtYW5pZmVzdHM/LnRlbmFudHMuaW5kZXhPZihtYW5pZmVzdHMuc2VuZGVyKSk7XG5jb25zdCBjdXJyZW50TWFuaWZlc3RJZCA9IGNyZWF0ZVNlbGVjdG9yKG1hbmlmZXN0cywgKG1hbmlmZXN0cykgPT4gbWFuaWZlc3RzLmN1cnJlbnRJZCk7XG5jb25zdCBnbG9iYWxNYW5pZmVzdCA9IGNyZWF0ZVNlbGVjdG9yKFxuICBtYW5pZmVzdHMsXG4gIC8vIEB0cy1pZ25vcmVcbiAgKG1hbmlmZXN0cykgPT4gKHsgd2luZG93czogW10sIC4uLm1hbmlmZXN0cz8ubWFuaWZlc3QgfSA/PyAoeyB3aW5kb3dzOiBbXSB9IGFzIEdsb2JhbE1hbmlmZXN0KSlcbik7XG5jb25zdCBtYW5pZmVzdERhdGFzb3VyY2VzID0gY3JlYXRlU2VsZWN0b3IoZ2xvYmFsTWFuaWZlc3QsIChtYW5pZmVzdCkgPT5cbiAgTWFuaWZlc3RVdGlscy5nZXREYXRhc291cmNlc1VzZWRCeU1hbmlmZXN0KG1hbmlmZXN0KVxuKTtcbmNvbnN0IHN0YXRpY01hbmlmZXN0ID0gY3JlYXRlU2VsZWN0b3IoXG4gIG1hbmlmZXN0cyxcbiAgLy8gQHRzLWlnbm9yZVxuICAobWFuaWZlc3RzKSA9PiAoeyB3aW5kb3dzOiBbXSwgLi4ubWFuaWZlc3RzPy5zdGF0aWNNYW5pZmVzdCB9ID8/ICh7IHdpbmRvd3M6IFtdIH0gYXMgR2xvYmFsTWFuaWZlc3QpKVxuKTtcbmNvbnN0IGxvYWRpbmcgPSBjcmVhdGVTZWxlY3RvcihtYW5pZmVzdHMsIChtYW5pZmVzdHMpID0+ICEhbWFuaWZlc3RzPy5sb2FkaW5nKTtcbmNvbnN0IHJlZnJlc2hSYXRlcyA9IGNyZWF0ZVNlbGVjdG9yKGdsb2JhbE1hbmlmZXN0LCAobWFuaWZlc3RzKSA9PiBtYW5pZmVzdHMucmVmcmVzaFJhdGVzID8/IHt9KTtcbmNvbnN0IHdpbmRvd01hbmlmZXN0ID0gY3JlYXRlU2VsZWN0b3IoXG4gIGdsb2JhbE1hbmlmZXN0LFxuICByYW5rLFxuICAobWFuaWZlc3QsIHJhbmspID0+IG1hbmlmZXN0LndpbmRvd3NbcmFua10gPz8gPERhc2hib2FyZE1hbmlmZXN0Pnsgd2lkZ2V0czogW10gfVxuKTtcbmNvbnN0IGdyaWRMYXlvdXQgPSBjcmVhdGVTZWxlY3RvcihcbiAgd2luZG93TWFuaWZlc3QsXG4gIChtYW5pZmVzdCkgPT4gKG1hbmlmZXN0LmdyaWQgPz8ge30pLmxheW91dCA/PyBEYXNoYm9hcmRHcmlkTGF5b3V0Lk1BTlVBTFxuKTtcbmNvbnN0IG1lbW9pemVXaWRnZXRNYW5pZmVzdCA9IHt9IGFzIGFueTtcbmNvbnN0IHdpZGdldE1hbmlmZXN0ID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgaWYgKCFtZW1vaXplV2lkZ2V0TWFuaWZlc3RbaW5kZXhdKSB7XG4gICAgbWVtb2l6ZVdpZGdldE1hbmlmZXN0W2luZGV4XSA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgd2luZG93TWFuaWZlc3QsXG4gICAgICAod2luZG93TWFuaWZlc3Q6IERhc2hib2FyZE1hbmlmZXN0KSA9PlxuICAgICAgICB3aW5kb3dNYW5pZmVzdC53aWRnZXRzW2luZGV4XSA/P1xuICAgICAgICAoe1xuICAgICAgICAgIHR5cGU6ICdwbGFjZWhvbGRlcicsXG4gICAgICAgICAgbGF5b3V0OiB7IHg6IDEsIHk6IDEsIHdpZHRoOiAxLCBoZWlnaHQ6IDEgfVxuICAgICAgICB9IGFzIFdpZGdldE1hbmlmZXN0KVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG1lbW9pemVXaWRnZXRNYW5pZmVzdFtpbmRleF0gYXMgTWVtb2l6ZWRTZWxlY3RvcjxEYXNoYm9hcmRNYW5pZmVzdCwgV2lkZ2V0TWFuaWZlc3Q+O1xufTtcbmNvbnN0IG1hbmlmZXN0c0xpc3QgPSBjcmVhdGVTZWxlY3RvcihtYW5pZmVzdHMsIChtYW5pZmVzdHMpID0+IG1hbmlmZXN0cy5saXN0KTtcbmNvbnN0IHRlbmFudHMgPSBjcmVhdGVTZWxlY3RvcihtYW5pZmVzdHMsIChtYW5pZmVzdHMpID0+IG1hbmlmZXN0cy50ZW5hbnRzID8/IDxzdHJpbmdbXT5bXSk7XG5jb25zdCB0YXJnZXRUZW5hbnRzSW5kZXhlcyA9IGNyZWF0ZVNlbGVjdG9yKG1hbmlmZXN0cywgcmFuaywgKG1hbmlmZXN0cywgcmFuaykgPT4gW1xuICBORVdfV0lORE9XX1RBUkdFVCxcbiAgLi4uKG1hbmlmZXN0cy50ZW5hbnRzID8/IChbXSBhcyBzdHJpbmdbXSkpLm1hcCgodGVuLCBpZHgpID0+IGlkeCkuZmlsdGVyKChpZHgpID0+IGlkeCAhPT0gcmFuaylcbl0pO1xuY29uc3QgcmVzdWx0cyA9IGNyZWF0ZVNlbGVjdG9yKGZlYXR1cmUsIChzdGF0ZTogRGFzaGJvYXJkU3RhdGUpID0+IHN0YXRlPy5yZXN1bHRzKTtcbmNvbnN0IHJlc3VsdFNldHMgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT4gcmVzdWx0cy5yZXN1bHRTZXRzID8/ICh7fSBhcyBSZXN1bHRTZXRzKSk7XG5jb25zdCByZXN1bHRTZXRzUGFyYW1zID0gY3JlYXRlU2VsZWN0b3IoXG4gIHJlc3VsdHMsXG4gIChyZXN1bHRzKSA9PiByZXN1bHRzLnJlc3VsdFNldHNQYXJhbXMgPz8gKHt9IGFzIHsgW2lkOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSlcbik7XG5jb25zdCBuYW1lZFF1ZXJpZXNOYW1lcyA9IGNyZWF0ZVNlbGVjdG9yKHJlc3VsdFNldHMsIChzdGF0ZTogUmVzdWx0U2V0cykgPT4gT2JqZWN0LmtleXMoc3RhdGUpID8/IDxzdHJpbmdbXT5bXSk7XG5jb25zdCBhdmFpbGFibGVOYW1lZFF1ZXJpZXMgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT4ge1xuICByZXR1cm4gWy4uLm5ldyBTZXQoWy4uLnJlc3VsdHMuYXZhaWxhYmxlRGF0YXNvdXJjZU5hbWVzLCAuLi5PYmplY3Qua2V5cyhyZXN1bHRzLnJlc3VsdFNldHMpXSldID8/IDxzdHJpbmdbXT5bXTtcbn0pO1xuY29uc3QgZGVmYXVsdERhdGFzb3VyY2VOYW1lcyA9IGNyZWF0ZVNlbGVjdG9yKHJlc3VsdHMsIChyZXN1bHRzKSA9PiByZXN1bHRzLmRlZmF1bHREYXRhc291cmNlID8/ICdjdXJyZW50Jyk7XG5jb25zdCBzZWxlY3RlZEl0ZW1JZHMgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT4gcmVzdWx0cy5zZWxlY3RlZEl0ZW1zID8/IChbXSBhcyBzdHJpbmdbXSkpO1xuY29uc3Qgb2JqZWN0RGV0YWlscyA9IGNyZWF0ZVNlbGVjdG9yKHJlc3VsdHMsIChyZXN1bHRzKSA9PiByZXN1bHRzLm9iamVjdERldGFpbHMgPz8gKHt9IGFzIHsgW2lkOiBzdHJpbmddOiBJdGVtIH0pKTtcbmNvbnN0IHF1aWNrT3JkZXIgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT4gcmVzdWx0cy5xdWlja09yZGVyID8/ICh7fSBhcyB7IFtpZDogc3RyaW5nXTogUmVzdWx0T3JkZXIgfSkpO1xuY29uc3QgYWxsSXRlbXMgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT5cbiAgT2JqZWN0LmtleXMocmVzdWx0cy5yZXN1bHRTZXRzKVxuICAgIC5tYXAoKHJzS2V5KSA9PlxuICAgICAgT2JqZWN0LmtleXMocmVzdWx0cy5yZXN1bHRTZXRzW3JzS2V5XS5pdGVtcylcbiAgICAgICAgLm1hcCgoY2xhc3NLZXkpID0+IChyZXN1bHRzLnJlc3VsdFNldHNbcnNLZXldIGFzIFJlc3VsdFNldCkuaXRlbXNbY2xhc3NLZXldKVxuICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuICAgIClcbiAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuKTtcbmNvbnN0IGdldEl0ZW1zQnlJZHMgPSAoaWRzOiBzdHJpbmdbXSkgPT5cbiAgY3JlYXRlU2VsZWN0b3IoYWxsSXRlbXMsIChpdGVtcykgPT4gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpZHMuaW5jbHVkZXMoaXRlbS5pZCkpKTtcbmNvbnN0IHNlbGVjdGVkSXRlbXMgPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0ZWRJdGVtSWRzLFxuICBhbGxJdGVtcyxcbiAgKGl0ZW1OYW1lcywgYWxsSXRlbXMpID0+IGl0ZW1OYW1lcy5tYXAoKG5hbWUpID0+IGFsbEl0ZW1zLmZpbmQoKGl0KSA9PiBpdC5pZCA9PT0gbmFtZSkpID8/IChbXSBhcyBJdGVtW10pXG4pO1xuY29uc3QgZGFzaGJvYXJkID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/LmRhc2hib2FyZCA/PyB7fSk7XG5jb25zdCBkYXNoYm9hcmRDZWxsUGFyYW1zID0gY3JlYXRlU2VsZWN0b3IoZGFzaGJvYXJkLCAoZGFzaGJvYXJkKSA9PiBkYXNoYm9hcmQucGFyYW1zID8/IDxEYXNoYm9hcmRDZWxsUGFyYW1zPnt9KTtcbmNvbnN0IGRhc2hib2FyZEVkaXRpb25Nb2RlID0gY3JlYXRlU2VsZWN0b3IoZGFzaGJvYXJkLCAoZGFzaGJvYXJkKSA9PiBkYXNoYm9hcmQuZWRpdGlvbk1vZGUgPz8gZmFsc2UpO1xuY29uc3QgbmFtZWRRdWVyaWVzVXNlcyA9IGNyZWF0ZVNlbGVjdG9yKGdsb2JhbE1hbmlmZXN0LCAobWFuaWZlc3QpID0+XG4gIG1hbmlmZXN0LndpbmRvd3NcbiAgICAubWFwKCh3aW5kb3csIGlkeCkgPT4gKHsgd2luZG93SW5kZXg6IGlkeCwgd2lkZ2V0czogd2luZG93LndpZGdldHMgfSkpXG4gICAgLm1hcCgoeyB3aW5kb3dJbmRleCwgd2lkZ2V0cyB9KSA9PlxuICAgICAgd2lkZ2V0cy5tYXAoKHdpZGdldCkgPT5cbiAgICAgICAgKEFycmF5LmlzQXJyYXkod2lkZ2V0LmRhdGFzb3VyY2UpID8gd2lkZ2V0LmRhdGFzb3VyY2UgOiBbd2lkZ2V0LmRhdGFzb3VyY2VdKVxuICAgICAgICAgIC5maWx0ZXIoKHJzTmFtZSkgPT4gcnNOYW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgLm1hcCgocnNOYW1lKSA9PiAoe1xuICAgICAgICAgICAgcnNOYW1lLFxuICAgICAgICAgICAgd2luZG93SW5kZXgsXG4gICAgICAgICAgICB0eXBlOiB3aWRnZXQudHlwZSxcbiAgICAgICAgICAgIGxheW91dDogd2lkZ2V0LmxheW91dFxuICAgICAgICAgIH0pKVxuICAgICAgKVxuICAgIClcbiAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10pXG4gICAgLnJlZHVjZShcbiAgICAgIChwLCBjKSA9PiAoeyAuLi5wLCBbYy5yc05hbWUgPz8gJyddOiBbLi4uKHBbYy5yc05hbWUgPz8gJyddIHx8IFtdKSwgeyAuLi5jIH1dIH0pLFxuICAgICAge30gYXMgeyBba2V5OiBzdHJpbmddOiB7IHdpbmRvd0luZGV4OiBudW1iZXI7IHR5cGU6IHN0cmluZzsgbGF5b3V0OiBXaWRnZXRMYXlvdXQ7IHJzTmFtZT86IHN0cmluZyB9W10gfVxuICAgIClcbik7XG5jb25zdCBwcmVzZW50YXRpb24gPSBjcmVhdGVTZWxlY3RvcihmZWF0dXJlLCAoc3RhdGU6IERhc2hib2FyZFN0YXRlKSA9PiBzdGF0ZT8ucHJlc2VudGF0aW9uKTtcbmNvbnN0IGlzQ3VycmVudFByZXNlbnRhdGlvbk1vZGlmaWVkID0gY3JlYXRlU2VsZWN0b3IoXG4gIHByZXNlbnRhdGlvbixcbiAgZ2xvYmFsTWFuaWZlc3QsXG4gIChzdGF0ZSwgZ2xvYmFsKSA9PiAhZXF1YWwoZ2xvYmFsLCBzdGF0ZS5pbml0aWFsKVxuKTtcbmNvbnN0IGlzQ3VycmVudFByZXNlbnRhdGlvbk93bmVyID0gY3JlYXRlU2VsZWN0b3IocHJlc2VudGF0aW9uLCAoc3RhdGUpID0+ICEhc3RhdGUuY3VycmVudCAmJiBzdGF0ZS5jdXJyZW50Lm93bmVyKTtcblxuY29uc3QgZmlsdGVycyA9IGNyZWF0ZVNlbGVjdG9yKGZlYXR1cmUsIChzdGF0ZTogRGFzaGJvYXJkU3RhdGUpID0+IHN0YXRlPy5tYW5pZmVzdHMubWFuaWZlc3QuZmlsdGVycyA/PyB7fSk7XG5jb25zdCBkYXRhc291cmNlRmlsdGVycyA9IGNyZWF0ZVNlbGVjdG9yKGZlYXR1cmUsIChzdGF0ZTogRGFzaGJvYXJkU3RhdGUpID0+XG4gIHN0YXRlPy5tYW5pZmVzdHMubWFuaWZlc3QuZmlsdGVyc1xuICAgID8gc3RhdGU/Lm1hbmlmZXN0cy5tYW5pZmVzdC5maWx0ZXJzLnJlZHVjZShcbiAgICAgICAgKG9iajogeyBbZGF0YXNvdXJjZUlkOiBzdHJpbmddOiBGaWx0ZXJDb250ZXh0W10gfSwgZmlsdGVyOiBGaWx0ZXIpID0+IChcbiAgICAgICAgICBmaWx0ZXIuYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyaWJ1dGUpID0+XG4gICAgICAgICAgICAob2JqW2F0dHJpYnV0ZS5kYXRhc291cmNlXSB8fCAob2JqW2F0dHJpYnV0ZS5kYXRhc291cmNlXSA9IFtdKSkucHVzaCh7XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZTogYXR0cmlidXRlLmlkLFxuICAgICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yID8/ICcnLFxuICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyLnZhbHVlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICksXG4gICAgICAgICAgb2JqXG4gICAgICAgICksXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgOiB7fVxuKTtcbmNvbnN0IHdtc0ZlYXR1cmVzID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/Lndtc0ZlYXR1cmVzKTtcbmNvbnN0IGRpc3BsYXlPcHRpb25zID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/LmRpc3BsYXkpO1xuY29uc3QgY2FwYWJpbGl0aWVzID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/LmNhcGFiaWxpdGllcyk7XG5cbmV4cG9ydCBjb25zdCBEYXNoYm9hcmRTZWxlY3RvcnMgPSB7XG4gIGZlYXR1cmUsXG4gIHJhbmssXG4gIGN1cnJlbnRNYW5pZmVzdElkLFxuICBnbG9iYWxNYW5pZmVzdCxcbiAgbWFuaWZlc3REYXRhc291cmNlcyxcbiAgcmVmcmVzaFJhdGVzLFxuICB3aW5kb3dNYW5pZmVzdCxcbiAgd2lkZ2V0TWFuaWZlc3QsXG4gIG1hbmlmZXN0c0xpc3QsXG4gIGdyaWRMYXlvdXQsXG4gIHRlbmFudHMsXG4gIHJlc3VsdFNldHMsXG4gIHJlc3VsdFNldHNQYXJhbXMsXG4gIG5hbWVkUXVlcmllc05hbWVzLFxuICBuYW1lZFF1ZXJpZXNVc2VzLFxuICBhdmFpbGFibGVOYW1lZFF1ZXJpZXMsXG4gIGRlZmF1bHREYXRhc291cmNlTmFtZXMsXG4gIHNlbGVjdGVkSXRlbUlkcyxcbiAgYWxsSXRlbXMsXG4gIGdldEl0ZW1zQnlJZHMsXG4gIHNlbGVjdGVkSXRlbXMsXG4gIG9iamVjdERldGFpbHMsXG4gIHRhcmdldFRlbmFudHNJbmRleGVzLFxuICBkYXNoYm9hcmQsXG4gIGRhc2hib2FyZENlbGxQYXJhbXMsXG4gIGRhc2hib2FyZEVkaXRpb25Nb2RlLFxuICBzdGF0aWNNYW5pZmVzdCxcbiAgbG9hZGluZyxcbiAgcXVpY2tPcmRlcixcbiAgcHJlc2VudGF0aW9uLFxuICBmaWx0ZXJzLFxuICBpc0N1cnJlbnRQcmVzZW50YXRpb25Nb2RpZmllZCxcbiAgaXNDdXJyZW50UHJlc2VudGF0aW9uT3duZXIsXG4gIGRhdGFzb3VyY2VGaWx0ZXJzLFxuICB3bXNGZWF0dXJlcyxcbiAgZGlzcGxheU9wdGlvbnMsXG4gIGNhcGFiaWxpdGllc1xufTtcbiJdfQ==
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLnNlbGVjdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9kYXNoYm9hcmQvc3RvcmUvZGFzaGJvYXJkLnNlbGVjdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFvQixNQUFNLGFBQWEsQ0FBQztBQUN0RixPQUFPLEtBQUssTUFBTSxxQkFBcUIsQ0FBQztBQUd4QyxPQUFPLEVBQ0wsbUJBQW1CLEVBS3BCLE1BQU0scUNBQXFDLENBQUM7QUFLN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFN0IsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQWlCLGdCQUFnQixDQUFDLENBQUM7QUFDeEUsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQXFCLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN2RixNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNwRyxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN4RixNQUFNLGNBQWMsR0FBRyxjQUFjLENBQ25DLFNBQVM7QUFDVCxhQUFhO0FBQ2IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFL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QUM7QUFDM0YsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQXFCLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMxRixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBcUIsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBRTdGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQ2hDLE9BQU87SUFDUCxJQUFJO0lBQ0osaUJBQWlCO0lBQ2pCLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsWUFBWTtJQUNaLGNBQWM7SUFDZCxjQUFjO0lBQ2QsYUFBYTtJQUNiLFVBQVU7SUFDVixPQUFPO0lBQ1AsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLHFCQUFxQjtJQUNyQixzQkFBc0I7SUFDdEIsZUFBZTtJQUNmLFFBQVE7SUFDUixhQUFhO0lBQ2IsYUFBYTtJQUNiLGFBQWE7SUFDYixvQkFBb0I7SUFDcEIsU0FBUztJQUNULG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsY0FBYztJQUNkLE9BQU87SUFDUCxVQUFVO0lBQ1YsWUFBWTtJQUNaLE9BQU87SUFDUCw2QkFBNkI7SUFDN0IsMEJBQTBCO0lBQzFCLGlCQUFpQjtJQUNqQixXQUFXO0lBQ1gsY0FBYztJQUNkLFlBQVk7Q0FDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlRmVhdHVyZVNlbGVjdG9yLCBjcmVhdGVTZWxlY3RvciwgTWVtb2l6ZWRTZWxlY3RvciB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCBlcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwvZXM2JztcbmltcG9ydCB7IEZpbHRlciwgRmlsdGVyQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWwvZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJdGVtIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC9pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBEYXNoYm9hcmRHcmlkTGF5b3V0LFxuICBEYXNoYm9hcmRNYW5pZmVzdCxcbiAgR2xvYmFsTWFuaWZlc3QsXG4gIFdpZGdldExheW91dCxcbiAgV2lkZ2V0TWFuaWZlc3Rcbn0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC9tYW5pZmVzdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVzdWx0T3JkZXIgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVsL3Jlc3VsdC1vcmRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVzdWx0U2V0LCBSZXN1bHRTZXRzIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC9yZXN1bHQtc2V0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDZWxsUGFyYW1zLCBWaWV3TW9kZSB9IGZyb20gJy4vZGFzaGJvYXJkLmFjdGlvbnMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkU3RhdGUgfSBmcm9tICcuL2Rhc2hib2FyZC5yZWR1Y2Vycyc7XG5pbXBvcnQgeyBNYW5pZmVzdFV0aWxzIH0gZnJvbSAnLi9tYW5pZmVzdC11dGlscy5jbGFzcyc7XG5cbmNvbnN0IE5FV19XSU5ET1dfVEFSR0VUID0gLTE7XG5cbmNvbnN0IGZlYXR1cmUgPSBjcmVhdGVGZWF0dXJlU2VsZWN0b3I8RGFzaGJvYXJkU3RhdGU+KCdAcHJ5L2Rhc2hib2FyZCcpO1xuY29uc3QgbWFuaWZlc3RzID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/Lm1hbmlmZXN0cyk7XG5jb25zdCByYW5rID0gY3JlYXRlU2VsZWN0b3IobWFuaWZlc3RzLCAobWFuaWZlc3RzKSA9PiBtYW5pZmVzdHM/LnRlbmFudHMuaW5kZXhPZihtYW5pZmVzdHMuc2VuZGVyKSk7XG5jb25zdCBjdXJyZW50TWFuaWZlc3RJZCA9IGNyZWF0ZVNlbGVjdG9yKG1hbmlmZXN0cywgKG1hbmlmZXN0cykgPT4gbWFuaWZlc3RzLmN1cnJlbnRJZCk7XG5jb25zdCBnbG9iYWxNYW5pZmVzdCA9IGNyZWF0ZVNlbGVjdG9yKFxuICBtYW5pZmVzdHMsXG4gIC8vIEB0cy1pZ25vcmVcbiAgKG1hbmlmZXN0cykgPT4gKHsgd2luZG93czogW10sIC4uLm1hbmlmZXN0cz8ubWFuaWZlc3QgfSA/PyAoeyB3aW5kb3dzOiBbXSB9IGFzIEdsb2JhbE1hbmlmZXN0KSlcbik7XG5jb25zdCBtYW5pZmVzdERhdGFzb3VyY2VzID0gY3JlYXRlU2VsZWN0b3IoZ2xvYmFsTWFuaWZlc3QsIChtYW5pZmVzdCkgPT5cbiAgTWFuaWZlc3RVdGlscy5nZXREYXRhc291cmNlc1VzZWRCeU1hbmlmZXN0KG1hbmlmZXN0KVxuKTtcbmNvbnN0IHN0YXRpY01hbmlmZXN0ID0gY3JlYXRlU2VsZWN0b3IoXG4gIG1hbmlmZXN0cyxcbiAgLy8gQHRzLWlnbm9yZVxuICAobWFuaWZlc3RzKSA9PiAoeyB3aW5kb3dzOiBbXSwgLi4ubWFuaWZlc3RzPy5zdGF0aWNNYW5pZmVzdCB9ID8/ICh7IHdpbmRvd3M6IFtdIH0gYXMgR2xvYmFsTWFuaWZlc3QpKVxuKTtcbmNvbnN0IGxvYWRpbmcgPSBjcmVhdGVTZWxlY3RvcihtYW5pZmVzdHMsIChtYW5pZmVzdHMpID0+ICEhbWFuaWZlc3RzPy5sb2FkaW5nKTtcbmNvbnN0IHJlZnJlc2hSYXRlcyA9IGNyZWF0ZVNlbGVjdG9yKGdsb2JhbE1hbmlmZXN0LCAobWFuaWZlc3RzKSA9PiBtYW5pZmVzdHMucmVmcmVzaFJhdGVzID8/IHt9KTtcbmNvbnN0IHdpbmRvd01hbmlmZXN0ID0gY3JlYXRlU2VsZWN0b3IoXG4gIGdsb2JhbE1hbmlmZXN0LFxuICByYW5rLFxuICAobWFuaWZlc3QsIHJhbmspID0+IG1hbmlmZXN0LndpbmRvd3NbcmFua10gPz8gPERhc2hib2FyZE1hbmlmZXN0Pnsgd2lkZ2V0czogW10gfVxuKTtcbmNvbnN0IGdyaWRMYXlvdXQgPSBjcmVhdGVTZWxlY3RvcihcbiAgd2luZG93TWFuaWZlc3QsXG4gIChtYW5pZmVzdCkgPT4gKG1hbmlmZXN0LmdyaWQgPz8ge30pLmxheW91dCA/PyBEYXNoYm9hcmRHcmlkTGF5b3V0Lk1BTlVBTFxuKTtcbmNvbnN0IG1lbW9pemVXaWRnZXRNYW5pZmVzdCA9IHt9IGFzIGFueTtcbmNvbnN0IHdpZGdldE1hbmlmZXN0ID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgaWYgKCFtZW1vaXplV2lkZ2V0TWFuaWZlc3RbaW5kZXhdKSB7XG4gICAgbWVtb2l6ZVdpZGdldE1hbmlmZXN0W2luZGV4XSA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgd2luZG93TWFuaWZlc3QsXG4gICAgICAod2luZG93TWFuaWZlc3Q6IERhc2hib2FyZE1hbmlmZXN0KSA9PlxuICAgICAgICB3aW5kb3dNYW5pZmVzdC53aWRnZXRzW2luZGV4XSA/P1xuICAgICAgICAoe1xuICAgICAgICAgIHR5cGU6ICdwbGFjZWhvbGRlcicsXG4gICAgICAgICAgbGF5b3V0OiB7IHg6IDEsIHk6IDEsIHdpZHRoOiAxLCBoZWlnaHQ6IDEgfVxuICAgICAgICB9IGFzIFdpZGdldE1hbmlmZXN0KVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG1lbW9pemVXaWRnZXRNYW5pZmVzdFtpbmRleF0gYXMgTWVtb2l6ZWRTZWxlY3RvcjxEYXNoYm9hcmRNYW5pZmVzdCwgV2lkZ2V0TWFuaWZlc3Q+O1xufTtcbmNvbnN0IG1hbmlmZXN0c0xpc3QgPSBjcmVhdGVTZWxlY3RvcihtYW5pZmVzdHMsIChtYW5pZmVzdHMpID0+IG1hbmlmZXN0cy5saXN0KTtcbmNvbnN0IHRlbmFudHMgPSBjcmVhdGVTZWxlY3RvcihtYW5pZmVzdHMsIChtYW5pZmVzdHMpID0+IG1hbmlmZXN0cy50ZW5hbnRzID8/IDxzdHJpbmdbXT5bXSk7XG5jb25zdCB0YXJnZXRUZW5hbnRzSW5kZXhlcyA9IGNyZWF0ZVNlbGVjdG9yKG1hbmlmZXN0cywgcmFuaywgKG1hbmlmZXN0cywgcmFuaykgPT4gW1xuICBORVdfV0lORE9XX1RBUkdFVCxcbiAgLi4uKG1hbmlmZXN0cy50ZW5hbnRzID8/IChbXSBhcyBzdHJpbmdbXSkpLm1hcCgodGVuLCBpZHgpID0+IGlkeCkuZmlsdGVyKChpZHgpID0+IGlkeCAhPT0gcmFuaylcbl0pO1xuY29uc3QgcmVzdWx0cyA9IGNyZWF0ZVNlbGVjdG9yKGZlYXR1cmUsIChzdGF0ZTogRGFzaGJvYXJkU3RhdGUpID0+IHN0YXRlPy5yZXN1bHRzKTtcbmNvbnN0IHJlc3VsdFNldHMgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT4gcmVzdWx0cy5yZXN1bHRTZXRzID8/ICh7fSBhcyBSZXN1bHRTZXRzKSk7XG5jb25zdCByZXN1bHRTZXRzUGFyYW1zID0gY3JlYXRlU2VsZWN0b3IoXG4gIHJlc3VsdHMsXG4gIChyZXN1bHRzKSA9PiByZXN1bHRzLnJlc3VsdFNldHNQYXJhbXMgPz8gKHt9IGFzIHsgW2lkOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSlcbik7XG5jb25zdCBuYW1lZFF1ZXJpZXNOYW1lcyA9IGNyZWF0ZVNlbGVjdG9yKHJlc3VsdFNldHMsIChzdGF0ZTogUmVzdWx0U2V0cykgPT4gT2JqZWN0LmtleXMoc3RhdGUpID8/IDxzdHJpbmdbXT5bXSk7XG5jb25zdCBhdmFpbGFibGVOYW1lZFF1ZXJpZXMgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT4ge1xuICByZXR1cm4gWy4uLm5ldyBTZXQoWy4uLnJlc3VsdHMuYXZhaWxhYmxlRGF0YXNvdXJjZU5hbWVzLCAuLi5PYmplY3Qua2V5cyhyZXN1bHRzLnJlc3VsdFNldHMpXSldID8/IDxzdHJpbmdbXT5bXTtcbn0pO1xuY29uc3QgZGVmYXVsdERhdGFzb3VyY2VOYW1lcyA9IGNyZWF0ZVNlbGVjdG9yKHJlc3VsdHMsIChyZXN1bHRzKSA9PiByZXN1bHRzLmRlZmF1bHREYXRhc291cmNlID8/ICdjdXJyZW50Jyk7XG5jb25zdCBzZWxlY3RlZEl0ZW1JZHMgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT4gcmVzdWx0cy5zZWxlY3RlZEl0ZW1zID8/IChbXSBhcyBzdHJpbmdbXSkpO1xuY29uc3Qgb2JqZWN0RGV0YWlscyA9IGNyZWF0ZVNlbGVjdG9yKHJlc3VsdHMsIChyZXN1bHRzKSA9PiByZXN1bHRzLm9iamVjdERldGFpbHMgPz8gKHt9IGFzIHsgW2lkOiBzdHJpbmddOiBJdGVtIH0pKTtcbmNvbnN0IHF1aWNrT3JkZXIgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT4gcmVzdWx0cy5xdWlja09yZGVyID8/ICh7fSBhcyB7IFtpZDogc3RyaW5nXTogUmVzdWx0T3JkZXIgfSkpO1xuY29uc3QgYWxsSXRlbXMgPSBjcmVhdGVTZWxlY3RvcihyZXN1bHRzLCAocmVzdWx0cykgPT5cbiAgT2JqZWN0LmtleXMocmVzdWx0cy5yZXN1bHRTZXRzKVxuICAgIC5tYXAoKHJzS2V5KSA9PlxuICAgICAgT2JqZWN0LmtleXMocmVzdWx0cy5yZXN1bHRTZXRzW3JzS2V5XS5pdGVtcylcbiAgICAgICAgLm1hcCgoY2xhc3NLZXkpID0+IChyZXN1bHRzLnJlc3VsdFNldHNbcnNLZXldIGFzIFJlc3VsdFNldCkuaXRlbXNbY2xhc3NLZXldKVxuICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuICAgIClcbiAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuKTtcbmNvbnN0IGdldEl0ZW1zQnlJZHMgPSAoaWRzOiBzdHJpbmdbXSkgPT5cbiAgY3JlYXRlU2VsZWN0b3IoYWxsSXRlbXMsIChpdGVtcykgPT4gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpZHMuaW5jbHVkZXMoaXRlbS5pZCkpKTtcbmNvbnN0IHNlbGVjdGVkSXRlbXMgPSBjcmVhdGVTZWxlY3RvcihcbiAgc2VsZWN0ZWRJdGVtSWRzLFxuICBhbGxJdGVtcyxcbiAgKGl0ZW1OYW1lcywgYWxsSXRlbXMpID0+IGl0ZW1OYW1lcy5tYXAoKG5hbWUpID0+IGFsbEl0ZW1zLmZpbmQoKGl0KSA9PiBpdC5pZCA9PT0gbmFtZSkpID8/IChbXSBhcyBJdGVtW10pXG4pO1xuY29uc3QgZGFzaGJvYXJkID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/LmRhc2hib2FyZCA/PyB7fSk7XG5jb25zdCBkYXNoYm9hcmRDZWxsUGFyYW1zID0gY3JlYXRlU2VsZWN0b3IoZGFzaGJvYXJkLCAoZGFzaGJvYXJkKSA9PiBkYXNoYm9hcmQucGFyYW1zID8/IDxEYXNoYm9hcmRDZWxsUGFyYW1zPnt9KTtcbmNvbnN0IGRhc2hib2FyZEVkaXRpb25Nb2RlID0gY3JlYXRlU2VsZWN0b3IoZGFzaGJvYXJkLCAoZGFzaGJvYXJkKSA9PiBkYXNoYm9hcmQuZWRpdGlvbk1vZGUgPz8gZmFsc2UpO1xuY29uc3QgbmFtZWRRdWVyaWVzVXNlcyA9IGNyZWF0ZVNlbGVjdG9yKGdsb2JhbE1hbmlmZXN0LCAobWFuaWZlc3QpID0+XG4gIG1hbmlmZXN0LndpbmRvd3NcbiAgICAubWFwKCh3aW5kb3csIGlkeCkgPT4gKHsgd2luZG93SW5kZXg6IGlkeCwgd2lkZ2V0czogd2luZG93LndpZGdldHMgfSkpXG4gICAgLm1hcCgoeyB3aW5kb3dJbmRleCwgd2lkZ2V0cyB9KSA9PlxuICAgICAgd2lkZ2V0cy5tYXAoKHdpZGdldCkgPT5cbiAgICAgICAgKEFycmF5LmlzQXJyYXkod2lkZ2V0LmRhdGFzb3VyY2UpID8gd2lkZ2V0LmRhdGFzb3VyY2UgOiBbd2lkZ2V0LmRhdGFzb3VyY2VdKVxuICAgICAgICAgIC5maWx0ZXIoKHJzTmFtZSkgPT4gcnNOYW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgLm1hcCgocnNOYW1lKSA9PiAoe1xuICAgICAgICAgICAgcnNOYW1lLFxuICAgICAgICAgICAgd2luZG93SW5kZXgsXG4gICAgICAgICAgICB0eXBlOiB3aWRnZXQudHlwZSxcbiAgICAgICAgICAgIGxheW91dDogd2lkZ2V0LmxheW91dFxuICAgICAgICAgIH0pKVxuICAgICAgKVxuICAgIClcbiAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10pXG4gICAgLnJlZHVjZShcbiAgICAgIChwLCBjKSA9PiAoeyAuLi5wLCBbYy5yc05hbWUgPz8gJyddOiBbLi4uKHBbYy5yc05hbWUgPz8gJyddIHx8IFtdKSwgeyAuLi5jIH1dIH0pLFxuICAgICAge30gYXMgeyBba2V5OiBzdHJpbmddOiB7IHdpbmRvd0luZGV4OiBudW1iZXI7IHR5cGU6IHN0cmluZzsgbGF5b3V0OiBXaWRnZXRMYXlvdXQ7IHJzTmFtZT86IHN0cmluZyB9W10gfVxuICAgIClcbik7XG5jb25zdCBwcmVzZW50YXRpb24gPSBjcmVhdGVTZWxlY3RvcihmZWF0dXJlLCAoc3RhdGU6IERhc2hib2FyZFN0YXRlKSA9PiBzdGF0ZT8ucHJlc2VudGF0aW9uKTtcbmNvbnN0IGlzQ3VycmVudFByZXNlbnRhdGlvbk1vZGlmaWVkID0gY3JlYXRlU2VsZWN0b3IoXG4gIHByZXNlbnRhdGlvbixcbiAgZ2xvYmFsTWFuaWZlc3QsXG4gIChzdGF0ZSwgZ2xvYmFsKSA9PiAhZXF1YWwoZ2xvYmFsLCBzdGF0ZS5pbml0aWFsKVxuKTtcbmNvbnN0IGlzQ3VycmVudFByZXNlbnRhdGlvbk93bmVyID0gY3JlYXRlU2VsZWN0b3IocHJlc2VudGF0aW9uLCAoc3RhdGUpID0+ICEhc3RhdGUuY3VycmVudCAmJiBzdGF0ZS5jdXJyZW50Lm93bmVyKTtcblxuY29uc3QgZmlsdGVycyA9IGNyZWF0ZVNlbGVjdG9yKGZlYXR1cmUsIChzdGF0ZTogRGFzaGJvYXJkU3RhdGUpID0+IHN0YXRlPy5tYW5pZmVzdHMubWFuaWZlc3QuZmlsdGVycyA/PyBbXSk7XG5jb25zdCBkYXRhc291cmNlRmlsdGVycyA9IGNyZWF0ZVNlbGVjdG9yKGZlYXR1cmUsIChzdGF0ZTogRGFzaGJvYXJkU3RhdGUpID0+XG4gIHN0YXRlPy5tYW5pZmVzdHMubWFuaWZlc3QuZmlsdGVyc1xuICAgID8gc3RhdGU/Lm1hbmlmZXN0cy5tYW5pZmVzdC5maWx0ZXJzLnJlZHVjZShcbiAgICAgICAgKG9iajogeyBbZGF0YXNvdXJjZUlkOiBzdHJpbmddOiBGaWx0ZXJDb250ZXh0W10gfSwgZmlsdGVyOiBGaWx0ZXIpID0+IChcbiAgICAgICAgICBmaWx0ZXIuYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyaWJ1dGUpID0+XG4gICAgICAgICAgICAob2JqW2F0dHJpYnV0ZS5kYXRhc291cmNlXSB8fCAob2JqW2F0dHJpYnV0ZS5kYXRhc291cmNlXSA9IFtdKSkucHVzaCh7XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZTogYXR0cmlidXRlLmlkLFxuICAgICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yID8/ICcnLFxuICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyLnZhbHVlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICksXG4gICAgICAgICAgb2JqXG4gICAgICAgICksXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgOiB7fVxuKTtcbmNvbnN0IHdtc0ZlYXR1cmVzID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/Lndtc0ZlYXR1cmVzKTtcbmNvbnN0IGRpc3BsYXlPcHRpb25zID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/LmRpc3BsYXkpO1xuY29uc3QgY2FwYWJpbGl0aWVzID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZSwgKHN0YXRlOiBEYXNoYm9hcmRTdGF0ZSkgPT4gc3RhdGU/LmNhcGFiaWxpdGllcyk7XG5cbmV4cG9ydCBjb25zdCBEYXNoYm9hcmRTZWxlY3RvcnMgPSB7XG4gIGZlYXR1cmUsXG4gIHJhbmssXG4gIGN1cnJlbnRNYW5pZmVzdElkLFxuICBnbG9iYWxNYW5pZmVzdCxcbiAgbWFuaWZlc3REYXRhc291cmNlcyxcbiAgcmVmcmVzaFJhdGVzLFxuICB3aW5kb3dNYW5pZmVzdCxcbiAgd2lkZ2V0TWFuaWZlc3QsXG4gIG1hbmlmZXN0c0xpc3QsXG4gIGdyaWRMYXlvdXQsXG4gIHRlbmFudHMsXG4gIHJlc3VsdFNldHMsXG4gIHJlc3VsdFNldHNQYXJhbXMsXG4gIG5hbWVkUXVlcmllc05hbWVzLFxuICBuYW1lZFF1ZXJpZXNVc2VzLFxuICBhdmFpbGFibGVOYW1lZFF1ZXJpZXMsXG4gIGRlZmF1bHREYXRhc291cmNlTmFtZXMsXG4gIHNlbGVjdGVkSXRlbUlkcyxcbiAgYWxsSXRlbXMsXG4gIGdldEl0ZW1zQnlJZHMsXG4gIHNlbGVjdGVkSXRlbXMsXG4gIG9iamVjdERldGFpbHMsXG4gIHRhcmdldFRlbmFudHNJbmRleGVzLFxuICBkYXNoYm9hcmQsXG4gIGRhc2hib2FyZENlbGxQYXJhbXMsXG4gIGRhc2hib2FyZEVkaXRpb25Nb2RlLFxuICBzdGF0aWNNYW5pZmVzdCxcbiAgbG9hZGluZyxcbiAgcXVpY2tPcmRlcixcbiAgcHJlc2VudGF0aW9uLFxuICBmaWx0ZXJzLFxuICBpc0N1cnJlbnRQcmVzZW50YXRpb25Nb2RpZmllZCxcbiAgaXNDdXJyZW50UHJlc2VudGF0aW9uT3duZXIsXG4gIGRhdGFzb3VyY2VGaWx0ZXJzLFxuICB3bXNGZWF0dXJlcyxcbiAgZGlzcGxheU9wdGlvbnMsXG4gIGNhcGFiaWxpdGllc1xufTtcbiJdfQ==
@@ -21,8 +21,8 @@ class DateFilterComponent extends BaseFilterComponent {
21
21
  }
22
22
  ngOnInit() {
23
23
  if (this.filter?.hasDateRange) {
24
- this.date1 = (this.filter?.value ?? '').split(',')[0];
25
- this.date2 = (this.filter?.value ?? '').split(',')[1];
24
+ this.date1 = (this.filter?.value ?? '').toString().split(',')[0];
25
+ this.date2 = (this.filter?.value ?? '').toString().split(',')[1];
26
26
  // subscription responsible for sending api requests
27
27
  this.subscriptions.add(combineLatest([
28
28
  this.date1$.pipe(debounceTime(1000), startWith(this.date1)),
@@ -1 +1 @@
1
- {"version":3,"file":"provoly-dashboard-filters-date.mjs","sources":["../../../../projects/provoly/dashboard/filters/date/date-filter.component.ts","../../../../projects/provoly/dashboard/filters/date/date-filter.component.html","../../../../projects/provoly/dashboard/filters/date/date-filter.module.ts","../../../../projects/provoly/dashboard/filters/date/provoly-dashboard-filters-date.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { BaseFilterComponent, SubscriptionnerDirective } from '@provoly/dashboard';\nimport { combineLatest, debounceTime, startWith, Subject } from 'rxjs';\nimport { distinctUntilChanged, skipWhile } from 'rxjs/operators';\n\n@Component({\n selector: 'pry-date-filter',\n templateUrl: './date-filter.component.html'\n})\nexport class DateFilterComponent extends BaseFilterComponent implements SubscriptionnerDirective, OnInit {\n value$ = new Subject<string>();\n date1?: string;\n date2?: string;\n date1$ = new Subject<string>();\n date2$ = new Subject<string>();\n\n constructor(store: Store) {\n super(store);\n this.type = 'date';\n }\n\n ngOnInit() {\n if (this.filter?.hasDateRange) {\n this.date1 = (this.filter?.value ?? '').split(',')[0];\n this.date2 = (this.filter?.value ?? '').split(',')[1];\n // subscription responsible for sending api requests\n this.subscriptions.add(\n combineLatest([\n this.date1$.pipe(debounceTime(1000), startWith(this.date1)),\n this.date2$.pipe(debounceTime(1000), startWith(this.date2))\n ])\n .pipe(skipWhile(([date1, date2]) => date1 === this.date1 && date2 === this.date2))\n .subscribe(([date1, date2]) => {\n if (date1 && date2) {\n this.setFilter(date1 + ',' + date2);\n } else if (!date1 && !date2) {\n this.setFilter('');\n }\n })\n );\n // subscription responsible for updating the ui\n this.subscriptions.add(\n combineLatest([this.date1$.pipe(startWith(this.date1)), this.date2$.pipe(startWith(this.date2))])\n .pipe(skipWhile(([date1, date2]) => date1 === this.date1 && date2 === this.date2))\n .subscribe(([date1, date2]) => {\n this.date1 = date1 ? date1 : '';\n this.date2 = date2 ? date2 : '';\n })\n );\n } else {\n this.subscriptions.add(\n this.value$.pipe(distinctUntilChanged(), debounceTime(1000)).subscribe((value) => this.setFilter(value))\n );\n }\n }\n\n setFilter(value: string) {\n super.updateFilter(value);\n }\n\n clearDate(index: number) {\n if (index === 1) {\n this.date1$.next('');\n } else {\n this.date2$.next('');\n }\n }\n}\n","<div *ngIf=\"filter\" class=\"m-filter\">\n <div *ngIf=\"!filter?.hasDateRange; else dateRange\">\n <label class=\"a-label\" for=\"{{ filter.name }}\">{{ filter.name }}</label>\n <div class=\"m-filter__wrapper\">\n <input\n [ngModel]=\"filter.value\"\n (ngModelChange)=\"this.value$.next($event)\"\n type=\"date\"\n class=\"a-form-field\"\n [id]=\"filter.name\"\n />\n <span\n *ngIf=\"!!filter.value\"\n class=\"m-filter__clear-wrapper m-filter__clear-wrapper--date\"\n (click)=\"setFilter('')\"\n [title]=\"'@pry.filters.clear' | i18n\"\n >\n <span class=\"m-filter__clear\">x</span>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </span>\n </div>\n </div>\n <ng-template #dateRange>\n <label class=\"a-label\" for=\"{{ filter.name }}\">{{ filter.name }}</label>\n <div class=\"m-filter__wrapper\">\n <div class=\"m-filter__wrapper\">\n <input\n [ngModel]=\"date1\"\n (ngModelChange)=\"date1$.next($event)\"\n type=\"date\"\n class=\"a-form-field\"\n [id]=\"filter.name + '1'\"\n />\n <span\n *ngIf=\"!!date1\"\n class=\"m-filter__clear-wrapper m-filter__clear-wrapper--date\"\n (click)=\"clearDate(1)\"\n [title]=\"'@pry.filters.clear' | i18n\"\n >\n <span class=\"m-filter__clear\">x</span>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </span>\n </div>\n <div class=\"m-filter__wrapper\">\n <input\n [ngModel]=\"date2\"\n (ngModelChange)=\"date2$.next($event)\"\n type=\"date\"\n class=\"a-form-field\"\n [id]=\"filter.name + '2'\"\n />\n <span\n *ngIf=\"!!date2\"\n class=\"m-filter__clear-wrapper m-filter__clear-wrapper--date\"\n (click)=\"clearDate(2)\"\n [title]=\"'@pry.filters.clear' | i18n\"\n >\n <span class=\"m-filter__clear\">×</span>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </span>\n </div>\n </div>\n </ng-template>\n</div>\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n BaseFilterComponent,\n BaseFilterModule,\n PryCoreModule,\n PryDatePickerModule,\n PryI18nModule,\n PryIconModule\n} from '@provoly/dashboard';\nimport { DateFilterComponent } from './date-filter.component';\n\n@NgModule({\n declarations: [DateFilterComponent],\n imports: [CommonModule, FormsModule, OverlayModule, PryCoreModule, PryI18nModule, PryDatePickerModule, PryIconModule],\n exports: [DateFilterComponent]\n})\nexport class PryDateFilterModule extends BaseFilterModule {\n override getComponent() {\n return DateFilterComponent as Type<BaseFilterComponent>;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provoly-dashboard-filters-date.mjs","sources":["../../../../projects/provoly/dashboard/filters/date/date-filter.component.ts","../../../../projects/provoly/dashboard/filters/date/date-filter.component.html","../../../../projects/provoly/dashboard/filters/date/date-filter.module.ts","../../../../projects/provoly/dashboard/filters/date/provoly-dashboard-filters-date.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { BaseFilterComponent, SubscriptionnerDirective } from '@provoly/dashboard';\nimport { combineLatest, debounceTime, startWith, Subject } from 'rxjs';\nimport { distinctUntilChanged, skipWhile } from 'rxjs/operators';\n\n@Component({\n selector: 'pry-date-filter',\n templateUrl: './date-filter.component.html'\n})\nexport class DateFilterComponent extends BaseFilterComponent implements SubscriptionnerDirective, OnInit {\n value$ = new Subject<string>();\n date1?: string;\n date2?: string;\n date1$ = new Subject<string>();\n date2$ = new Subject<string>();\n\n constructor(store: Store) {\n super(store);\n this.type = 'date';\n }\n\n ngOnInit() {\n if (this.filter?.hasDateRange) {\n this.date1 = (this.filter?.value ?? '').toString().split(',')[0];\n this.date2 = (this.filter?.value ?? '').toString().split(',')[1];\n // subscription responsible for sending api requests\n this.subscriptions.add(\n combineLatest([\n this.date1$.pipe(debounceTime(1000), startWith(this.date1)),\n this.date2$.pipe(debounceTime(1000), startWith(this.date2))\n ])\n .pipe(skipWhile(([date1, date2]) => date1 === this.date1 && date2 === this.date2))\n .subscribe(([date1, date2]) => {\n if (date1 && date2) {\n this.setFilter(date1 + ',' + date2);\n } else if (!date1 && !date2) {\n this.setFilter('');\n }\n })\n );\n // subscription responsible for updating the ui\n this.subscriptions.add(\n combineLatest([this.date1$.pipe(startWith(this.date1)), this.date2$.pipe(startWith(this.date2))])\n .pipe(skipWhile(([date1, date2]) => date1 === this.date1 && date2 === this.date2))\n .subscribe(([date1, date2]) => {\n this.date1 = date1 ? date1 : '';\n this.date2 = date2 ? date2 : '';\n })\n );\n } else {\n this.subscriptions.add(\n this.value$.pipe(distinctUntilChanged(), debounceTime(1000)).subscribe((value) => this.setFilter(value))\n );\n }\n }\n\n setFilter(value: string) {\n super.updateFilter(value);\n }\n\n clearDate(index: number) {\n if (index === 1) {\n this.date1$.next('');\n } else {\n this.date2$.next('');\n }\n }\n}\n","<div *ngIf=\"filter\" class=\"m-filter\">\n <div *ngIf=\"!filter?.hasDateRange; else dateRange\">\n <label class=\"a-label\" for=\"{{ filter.name }}\">{{ filter.name }}</label>\n <div class=\"m-filter__wrapper\">\n <input\n [ngModel]=\"filter.value\"\n (ngModelChange)=\"this.value$.next($event)\"\n type=\"date\"\n class=\"a-form-field\"\n [id]=\"filter.name\"\n />\n <span\n *ngIf=\"!!filter.value\"\n class=\"m-filter__clear-wrapper m-filter__clear-wrapper--date\"\n (click)=\"setFilter('')\"\n [title]=\"'@pry.filters.clear' | i18n\"\n >\n <span class=\"m-filter__clear\">x</span>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </span>\n </div>\n </div>\n <ng-template #dateRange>\n <label class=\"a-label\" for=\"{{ filter.name }}\">{{ filter.name }}</label>\n <div class=\"m-filter__wrapper\">\n <div class=\"m-filter__wrapper\">\n <input\n [ngModel]=\"date1\"\n (ngModelChange)=\"date1$.next($event)\"\n type=\"date\"\n class=\"a-form-field\"\n [id]=\"filter.name + '1'\"\n />\n <span\n *ngIf=\"!!date1\"\n class=\"m-filter__clear-wrapper m-filter__clear-wrapper--date\"\n (click)=\"clearDate(1)\"\n [title]=\"'@pry.filters.clear' | i18n\"\n >\n <span class=\"m-filter__clear\">x</span>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </span>\n </div>\n <div class=\"m-filter__wrapper\">\n <input\n [ngModel]=\"date2\"\n (ngModelChange)=\"date2$.next($event)\"\n type=\"date\"\n class=\"a-form-field\"\n [id]=\"filter.name + '2'\"\n />\n <span\n *ngIf=\"!!date2\"\n class=\"m-filter__clear-wrapper m-filter__clear-wrapper--date\"\n (click)=\"clearDate(2)\"\n [title]=\"'@pry.filters.clear' | i18n\"\n >\n <span class=\"m-filter__clear\">×</span>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </span>\n </div>\n </div>\n </ng-template>\n</div>\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n BaseFilterComponent,\n BaseFilterModule,\n PryCoreModule,\n PryDatePickerModule,\n PryI18nModule,\n PryIconModule\n} from '@provoly/dashboard';\nimport { DateFilterComponent } from './date-filter.component';\n\n@NgModule({\n declarations: [DateFilterComponent],\n imports: [CommonModule, FormsModule, OverlayModule, PryCoreModule, PryI18nModule, PryDatePickerModule, PryIconModule],\n exports: [DateFilterComponent]\n})\nexport class PryDateFilterModule extends BaseFilterModule {\n override getComponent() {\n return DateFilterComponent as Type<BaseFilterComponent>;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -2573,7 +2573,7 @@ class PryModalStatusComponent {
2573
2573
  .flat()
2574
2574
  .map((preview) => ({
2575
2575
  ...preview,
2576
- name: preview.name.split(',').join(', ')
2576
+ name: (preview.name ?? '').split(',').join(', ')
2577
2577
  }))));
2578
2578
  this.messageCount$ = this.store.select(DataSourceSelectors.datasetPreviews).pipe(map((previews) => {
2579
2579
  return previews.map((preview) => preview.count).reduce((p, c) => p + c, 0);
@@ -3856,7 +3856,7 @@ const namedQueriesUses = createSelector(globalManifest, (manifest) => manifest.w
3856
3856
  const presentation = createSelector(feature$4, (state) => state?.presentation);
3857
3857
  const isCurrentPresentationModified = createSelector(presentation, globalManifest, (state, global) => !equal(global, state.initial));
3858
3858
  const isCurrentPresentationOwner = createSelector(presentation, (state) => !!state.current && state.current.owner);
3859
- const filters = createSelector(feature$4, (state) => state?.manifests.manifest.filters ?? {});
3859
+ const filters = createSelector(feature$4, (state) => state?.manifests.manifest.filters ?? []);
3860
3860
  const datasourceFilters = createSelector(feature$4, (state) => state?.manifests.manifest.filters
3861
3861
  ? state?.manifests.manifest.filters.reduce((obj, filter) => (filter.attributes.forEach((attribute) => (obj[attribute.datasource] || (obj[attribute.datasource] = [])).push({
3862
3862
  attribute: attribute.id,
@@ -5285,195 +5285,261 @@ class ResultsetUtils {
5285
5285
  }
5286
5286
  }
5287
5287
 
5288
- class PryFrontendAggregationService extends PryAggregationService {
5289
- constructor(store) {
5290
- super();
5291
- this.store = store;
5288
+ class AggregationUtils {
5289
+ static getAxisAttribute(classes, options, axis) {
5290
+ return classes
5291
+ .map((clazz) => clazz.attributes.find((attr) => attr.id === options[axis].attribute))
5292
+ .find((attr) => !!attr)?.name;
5292
5293
  }
5293
- // @ts-ignore
5294
- aggregate(datasource, options) {
5295
- return combineLatest([
5296
- this.store.select(DashboardSelectors.resultSets),
5297
- this.store.select(ClassSelectors.classes)
5298
- ]).pipe(map(([resultSets, classes]) => {
5299
- const abscissa = classes
5300
- .map((clazz) => clazz.attributes.find((attr) => attr.id === options.abscissa.attribute))
5301
- .find((attr) => !!attr)?.name;
5302
- const ordinate = classes
5303
- .map((clazz) => clazz.attributes.find((attr) => attr.id === options.ordinate.attribute))
5304
- .find((attr) => !!attr)?.name;
5305
- if (!abscissa || !ordinate) {
5306
- throw new Error('abscissaorodinateinvalid');
5307
- }
5308
- let data = datasource.map((rsName) => resultSets[rsName ?? '']).filter((rsName) => !!rsName);
5309
- const resultSet = data.reduce((rs1, rs2) => ResultsetUtils.mergeResultSets(rs1, rs2), {
5310
- items: {},
5311
- relations: [],
5312
- merged: data.length
5313
- });
5314
- let items = Object.keys(resultSet.items)
5315
- .map((classId) => resultSet.items[classId])
5316
- .reduce((prev, curr) => [...prev, ...curr], []);
5317
- if (!!options.groupBy) {
5318
- const groupBy = classes
5319
- .map((clazz) => clazz.attributes.find((attr) => attr.id === options.groupBy?.attribute))
5320
- .find((attr) => !!attr)?.name;
5321
- if (!groupBy) {
5322
- throw new Error('groupByAttributeisinvalid');
5323
- }
5324
- const itemsGrouped = this.groupBy(items, groupBy);
5325
- const values = [];
5326
- Object.keys(itemsGrouped).forEach((key) => {
5327
- values.push({
5328
- key,
5329
- groupBy: this.getValueFromOperation(itemsGrouped[key], options.ordinate.operation, abscissa, ordinate, options.abscissa.limit)
5330
- });
5331
- });
5332
- return { operation: options.ordinate.operation, values: values };
5333
- }
5334
- const values = this.getValueFromOperation(items, options.ordinate.operation, abscissa, ordinate, options.abscissa.limit);
5335
- return { operation: options.ordinate.operation, values: values };
5336
- }));
5294
+ static getChartDatasourceResultSet(datasources, resultSets) {
5295
+ return datasources
5296
+ .filter((rsName) => rsName in resultSets)
5297
+ .map((rsName) => resultSets[rsName])
5298
+ .reduce((rs1, rs2) => ResultsetUtils.mergeResultSets(rs1, rs2), {
5299
+ items: {},
5300
+ relations: [],
5301
+ merged: datasources.filter((rsName) => rsName in resultSets).length
5302
+ });
5303
+ }
5304
+ static getAggregatedValue(operation, groupedItems, abscissaAttribute, ordinateAttribute) {
5305
+ return this.getAggregatedValueForOperation(operation, groupedItems[abscissaAttribute].map((item) => this.getValueFromAttribute(item, ordinateAttribute).value));
5337
5306
  }
5338
- getValueFromOperation(items, operation, abscissa, ordinate, limit) {
5339
- let result = [];
5340
- const groupByAbscissa = this.groupBy(items, abscissa);
5341
- groupByAbscissa.map((test) => console.log(groupByAbscissa[test]));
5307
+ static getValueFromAttribute(item, attribute) {
5308
+ let value = ItemUtils.getAttributeValue(item, attribute);
5309
+ return Array.isArray(value) ? value[0] : value;
5310
+ }
5311
+ static getAggregatedValueForOperation(operation, values) {
5342
5312
  switch (operation) {
5343
5313
  case Operation.COUNT:
5344
- result.push(...Object.keys(groupByAbscissa).map((key) => ({
5345
- key: key,
5346
- value: groupByAbscissa[key].length
5347
- })));
5348
- break;
5314
+ return values.length;
5349
5315
  case Operation.SUM:
5350
- result.push(...Object.keys(groupByAbscissa).map((key) => ({
5351
- key: key,
5352
- value: this.getSum(groupByAbscissa[key], ordinate)
5353
- })));
5354
- break;
5316
+ return values.reduce((acc, val) => acc + val, 0);
5355
5317
  case Operation.DISTINCT:
5356
- result.push(...Object.keys(groupByAbscissa).map((key) => ({
5357
- key: key,
5358
- value: this.getDistinct(groupByAbscissa[key], ordinate)
5359
- })));
5360
- break;
5318
+ return [...new Set(values)].length;
5361
5319
  case Operation.AVERAGE:
5362
- result.push(...Object.keys(groupByAbscissa).map((key) => ({
5363
- key: key,
5364
- value: this.getAverage(groupByAbscissa[key], ordinate)
5365
- })));
5366
- break;
5320
+ return values.reduce((acc, val) => acc + val, 0) / values.length;
5367
5321
  case Operation.MEDIAN:
5368
- result.push(...Object.keys(groupByAbscissa).map((key) => ({
5369
- key: key,
5370
- value: this.getQuartile(groupByAbscissa[key], ordinate, 0.5)
5371
- })));
5372
- break;
5322
+ return this.getQuartile(values, 0.5);
5373
5323
  case Operation.Q1:
5374
- result.push(...Object.keys(groupByAbscissa).map((key) => ({
5375
- key: key,
5376
- value: this.getQuartile(groupByAbscissa[key], ordinate, 0.25)
5377
- })));
5378
- break;
5324
+ return this.getQuartile(values, 0.25);
5379
5325
  case Operation.Q3:
5380
- result.push(...Object.keys(groupByAbscissa).map((key) => ({
5381
- key: key,
5382
- value: this.getQuartile(groupByAbscissa[key], ordinate, 0.75)
5383
- })));
5384
- break;
5326
+ return this.getQuartile(values, 0.75);
5385
5327
  case Operation.MIN:
5386
- result.push(...Object.keys(groupByAbscissa).map((key) => ({
5387
- key: key,
5388
- value: this.getMin(groupByAbscissa[key], ordinate)
5389
- })));
5390
- break;
5328
+ return Math.min(...values);
5329
+ case Operation.MAX:
5330
+ return Math.max(...values);
5391
5331
  default:
5392
- result.push(...Object.keys(groupByAbscissa).map((key) => ({
5393
- key: key,
5394
- value: this.getMax(groupByAbscissa[key], ordinate)
5395
- })));
5396
- break;
5332
+ return -1;
5397
5333
  }
5398
- if (limit) {
5399
- result = this.formatByLimit(result, limit);
5334
+ }
5335
+ static getQuartile(values, q) {
5336
+ if (values.length === 0)
5337
+ return 0;
5338
+ values.sort((a, b) => a - b);
5339
+ let pos = (values.length - 1) * q;
5340
+ if (pos % 1 === 0) {
5341
+ return values[pos];
5400
5342
  }
5401
- return result;
5343
+ pos = Math.floor(pos);
5344
+ return values[pos + 1] !== undefined ? (values[pos] + values[pos + 1]) / 2 : values[pos];
5402
5345
  }
5403
- groupBy(items, attribute) {
5404
- let distincts = [];
5405
- items.forEach((item) => {
5406
- let value = this.getValueFromAttribute(item, attribute);
5407
- if (distincts[value.value]) {
5408
- distincts[value.value].push(item);
5346
+ static formatByLimit(data, limit, operation) {
5347
+ if (!limit.isTimeLimit) {
5348
+ data
5349
+ .sort((a, b) => (limit.order === 'asc' ? (a.value > b.value ? 1 : -1) : a.value < b.value ? 1 : -1))
5350
+ .splice(limit.at);
5351
+ return data;
5352
+ }
5353
+ return this.formatDataByTimeLimit(data, limit, operation);
5354
+ }
5355
+ static formatDataByTimeLimit(data, limit, operation) {
5356
+ let distinctValues = [];
5357
+ data
5358
+ .map((obj) => ({ ...obj, key: this.getKeyValueForTimeInterval(obj.key, limit.interval) }))
5359
+ .forEach((obj) => {
5360
+ const isNotDistinct = distinctValues.find((distinct) => obj.key === distinct.key);
5361
+ if (!!isNotDistinct) {
5362
+ isNotDistinct.values.push(obj.value);
5409
5363
  }
5410
5364
  else {
5411
- distincts[value.value] = [item];
5365
+ distinctValues.push({ key: obj.key, values: [] });
5412
5366
  }
5413
5367
  });
5414
- return distincts;
5415
- }
5416
- getValueFromAttribute(item, attribute) {
5417
- let value = ItemUtils.getAttributeValue(item, attribute);
5418
- return Array.isArray(value) ? value[0] : value;
5419
- }
5420
- getSum(items, attribute) {
5421
- let sum = 0;
5422
- items.forEach((item) => {
5423
- sum += this.getValueFromAttribute(item, attribute).value;
5424
- });
5425
- return sum;
5368
+ return distinctValues.map((obj) => ({
5369
+ ...obj,
5370
+ value: AggregationUtils.getAggregatedValueForOperation(operation, obj.values)
5371
+ }));
5426
5372
  }
5427
- getMin(items, attribute) {
5428
- const result = items.reduce((prev, curr) => {
5429
- const prevValue = this.getValueFromAttribute(prev, attribute).value;
5430
- const currValue = this.getValueFromAttribute(curr, attribute).value;
5431
- return prevValue < currValue ? prev : curr;
5432
- });
5433
- return this.getValueFromAttribute(result, attribute).value;
5373
+ static getKeyValueForTimeInterval(key, interval) {
5374
+ const date = new Date(key);
5375
+ switch (interval) {
5376
+ case 'second':
5377
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()).toISOString();
5378
+ case 'minute':
5379
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes()).toISOString();
5380
+ case 'hour':
5381
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours()).toISOString();
5382
+ case 'day':
5383
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate()).toISOString();
5384
+ case 'week':
5385
+ const daysToSubtract = (7 + date.getUTCDay()) % 7;
5386
+ date.setUTCDate(date.getUTCDate() - daysToSubtract);
5387
+ return date.toISOString();
5388
+ case 'quarter':
5389
+ const quarterStartMonths = [0, 3, 6, 9]; // January, April, July, October
5390
+ const quarter = Math.floor(date.getUTCMonth() / 3);
5391
+ const year = date.getUTCFullYear();
5392
+ const startOfQuarter = new Date(Date.UTC(year, quarterStartMonths[quarter], 1, 0, 0, 0, 0));
5393
+ return startOfQuarter.toISOString();
5394
+ case 'year':
5395
+ return new Date(new Date(key).getFullYear(), 0, 1).toISOString();
5396
+ default:
5397
+ return date.toISOString();
5398
+ }
5434
5399
  }
5435
- getMax(items, attribute) {
5436
- const result = items.reduce((prev, curr) => {
5437
- const prevValue = this.getValueFromAttribute(prev, attribute).value;
5438
- const currValue = this.getValueFromAttribute(curr, attribute).value;
5439
- return prevValue > currValue ? prev : curr;
5440
- });
5441
- return this.getValueFromAttribute(result, attribute).value;
5400
+ static filterItems(items, filters) {
5401
+ let filtersByAttribute = filters
5402
+ .map((filter) => filter.attributes.map((attribute) => ({
5403
+ ...filter,
5404
+ attribute: attribute.id,
5405
+ attributes: undefined
5406
+ })))
5407
+ .flat();
5408
+ return filters.length > 0
5409
+ ? [
5410
+ ...new Set(filtersByAttribute
5411
+ .map((filter) => items.filter((item) => this.doesItemValuePassFilter(item, filter.attribute, filter.operator, filter.value)))
5412
+ .flat())
5413
+ ]
5414
+ : items;
5415
+ }
5416
+ static doesItemValuePassFilter(item, attribute, operator, filterValue) {
5417
+ let value = AggregationUtils.getValueFromAttribute(item, attribute)?.value;
5418
+ let date1, date2;
5419
+ console.log(operator);
5420
+ switch (operator) {
5421
+ case 'EQUALS':
5422
+ return value === filterValue;
5423
+ case 'NOT_EQUALS':
5424
+ return value !== filterValue;
5425
+ case 'CONTAINS':
5426
+ return value.includes(filterValue);
5427
+ case 'START_WITH':
5428
+ return value.startsWith(filterValue);
5429
+ case 'END_WITH':
5430
+ return value.endsWith(filterValue);
5431
+ case 'GREATER_THAN':
5432
+ if (typeof filterValue === 'number') {
5433
+ return value > filterValue;
5434
+ }
5435
+ else if (typeof filterValue === 'string') {
5436
+ return new Date(value) > new Date(filterValue);
5437
+ }
5438
+ else {
5439
+ return false;
5440
+ }
5441
+ case 'LOWER_THAN':
5442
+ if (typeof filterValue === 'number') {
5443
+ return value < filterValue;
5444
+ }
5445
+ else if (typeof filterValue === 'string') {
5446
+ return new Date(value) < new Date(filterValue);
5447
+ }
5448
+ else {
5449
+ return false;
5450
+ }
5451
+ case 'INSIDE':
5452
+ [date1, date2] = [
5453
+ new Date(filterValue.split(',')[0]),
5454
+ new Date(filterValue.split(',')[1])
5455
+ ];
5456
+ return new Date(value) > new Date(date1) && new Date(value) < new Date(date2);
5457
+ case 'OUTSIDE':
5458
+ [date1, date2] = [
5459
+ new Date(filterValue.split(',')[0]),
5460
+ new Date(filterValue.split(',')[1])
5461
+ ];
5462
+ return new Date(value) < new Date(date1) && new Date(value) > new Date(date2);
5463
+ default:
5464
+ return true;
5465
+ }
5442
5466
  }
5443
- getAverage(items, attribute) {
5444
- const allValues = items.map((item) => this.getValueFromAttribute(item, attribute).value);
5445
- return allValues.reduce((acc, val) => acc + val, 0) / allValues.length;
5467
+ }
5468
+
5469
+ class PryFrontendAggregationService extends PryAggregationService {
5470
+ constructor(store) {
5471
+ super();
5472
+ this.store = store;
5446
5473
  }
5447
- getDistinct(items, attribute) {
5448
- return [...new Set(items.map((item) => this.getValueFromAttribute(item, attribute).value))].length;
5474
+ aggregate(datasources, options) {
5475
+ return combineLatest([
5476
+ this.store.select(DashboardSelectors.resultSets),
5477
+ this.store.select(ClassSelectors.classes),
5478
+ this.store.select(DashboardSelectors.filters)
5479
+ ]).pipe(map(([resultSets, classes, filters]) => {
5480
+ const resultSet = AggregationUtils.getChartDatasourceResultSet(datasources, resultSets);
5481
+ let items = Object.keys(resultSet.items)
5482
+ .map((classId) => resultSet.items[classId])
5483
+ .reduce((prev, curr) => [...prev, ...curr], []);
5484
+ items = AggregationUtils.filterItems(items, filters);
5485
+ return this.getAggregationResult(options, classes, items);
5486
+ }));
5449
5487
  }
5450
- getQuartile(items, attribute, q) {
5451
- const allValues = items.map((item) => this.getValueFromAttribute(item, attribute).value);
5452
- const allValuesSorted = allValues.sort((a, b) => a - b);
5453
- let pos = (allValuesSorted.length - 1) * q;
5454
- if (pos % 1 === 0) {
5455
- return allValuesSorted[pos];
5488
+ getAggregationResult(options, classes, items) {
5489
+ const [abscissa, ordinate] = [
5490
+ AggregationUtils.getAxisAttribute(classes, options, 'abscissa') ?? '',
5491
+ AggregationUtils.getAxisAttribute(classes, options, 'ordinate') ?? ''
5492
+ ];
5493
+ const aggregationResult = {
5494
+ operation: options.ordinate.operation,
5495
+ values: []
5496
+ };
5497
+ if (!options.groupBy) {
5498
+ if (!!options.ordinate.operation)
5499
+ console.warn('no ordinate operation selected');
5500
+ aggregationResult.values = this.getChartDataBasedOnOperation(items, options.ordinate.operation, abscissa, ordinate, options.abscissa.limit);
5501
+ console.log(aggregationResult.values);
5456
5502
  }
5457
- pos = Math.floor(pos);
5458
- if (allValuesSorted[pos + 1] !== undefined) {
5459
- return (allValuesSorted[pos] + allValuesSorted[pos + 1]) / 2;
5503
+ else {
5504
+ const groupByAttribute = classes
5505
+ .map((clazz) => clazz.attributes.find((attr) => attr.id === options.groupBy?.attribute))
5506
+ .find((attr) => !!attr)?.name ?? '';
5507
+ const itemsGrouped = this.getItemsGroupedByAttributeValue(items, groupByAttribute);
5508
+ aggregationResult.values = Object.keys(itemsGrouped).map((key) => ({
5509
+ key,
5510
+ groupBy: this.getChartDataBasedOnOperation(itemsGrouped[key], options.ordinate.operation, abscissa, ordinate, options.abscissa.limit)
5511
+ }));
5460
5512
  }
5461
- return allValuesSorted[pos];
5462
- }
5463
- getPercentile(items, attribute, q) {
5464
- const allValues = items.map((item) => this.getValueFromAttribute(item, attribute).value);
5465
- const allValuesSorted = allValues.sort((a, b) => a - b);
5466
- return ((100 * allValuesSorted.reduce((acc, v) => acc + (v < q ? 1 : 0) + (v === q ? 0.5 : 0), 0)) /
5467
- allValuesSorted.length);
5513
+ return aggregationResult;
5468
5514
  }
5469
- formatByLimit(data, limit) {
5470
- if (!limit.isTimeLimit) {
5471
- data
5472
- .sort((a, b) => (limit.order === 'asc' ? (a.value > b.value ? 1 : -1) : a.value < b.value ? 1 : -1))
5473
- .splice(limit.at);
5474
- return data;
5475
- }
5476
- return data;
5515
+ getItemsGroupedByAttributeValue(items, attribute) {
5516
+ if (attribute === '')
5517
+ console.warn('groupBy attribute not found');
5518
+ let distinctValues = {};
5519
+ items.forEach((item) => {
5520
+ let value = AggregationUtils.getValueFromAttribute(item, attribute)?.value;
5521
+ if (!!value)
5522
+ distinctValues[value] = [...(distinctValues[value] ?? []), item];
5523
+ });
5524
+ return distinctValues;
5525
+ }
5526
+ // get { key, value } object list that will be our data to show in the chart
5527
+ getChartDataBasedOnOperation(items, operation, abscissa, ordinate, limit) {
5528
+ if (abscissa === '' || ordinate === '')
5529
+ console.warn('abscissa or ordinate attribute not found');
5530
+ const groupByAbscissa = this.getItemsGroupedByAttributeValue(items, abscissa);
5531
+ let result = [
5532
+ ...Object.keys(groupByAbscissa).map((abscissaAttribute) => {
5533
+ console.log(AggregationUtils.getAggregatedValue(operation, groupByAbscissa, abscissaAttribute, ordinate ?? ''));
5534
+ return {
5535
+ key: +abscissaAttribute || abscissaAttribute,
5536
+ value: AggregationUtils.getAggregatedValue(operation, groupByAbscissa, abscissaAttribute, ordinate ?? '')
5537
+ };
5538
+ })
5539
+ ];
5540
+ if (limit)
5541
+ result = AggregationUtils.formatByLimit(result, limit, operation);
5542
+ return result;
5477
5543
  }
5478
5544
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryFrontendAggregationService, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
5479
5545
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryFrontendAggregationService, providedIn: 'root' }); }