medusa-stats 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/admin/composite.png +0 -0
- package/.medusa/server/src/admin/index.js +10512 -0
- package/.medusa/server/src/admin/index.mjs +10510 -0
- package/.medusa/server/src/admin/params.png +0 -0
- package/.medusa/server/src/admin/view.png +0 -0
- package/.medusa/server/src/admin/visualizations.png +0 -0
- package/.medusa/server/src/api/admin/statistics/alert-logs/[id]/route.d.ts +6 -0
- package/.medusa/server/src/api/admin/statistics/alert-logs/[id]/route.js +18 -0
- package/.medusa/server/src/api/admin/statistics/alert-logs/route.d.ts +6 -0
- package/.medusa/server/src/api/admin/statistics/alert-logs/route.js +33 -0
- package/.medusa/server/src/api/admin/statistics/alerts/[id]/logs/route.d.ts +6 -0
- package/.medusa/server/src/api/admin/statistics/alerts/[id]/logs/route.js +23 -0
- package/.medusa/server/src/api/admin/statistics/alerts/[id]/route.d.ts +17 -0
- package/.medusa/server/src/api/admin/statistics/alerts/[id]/route.js +64 -0
- package/.medusa/server/src/api/admin/statistics/alerts/[id]/toggle/route.d.ts +6 -0
- package/.medusa/server/src/api/admin/statistics/alerts/[id]/toggle/route.js +18 -0
- package/.medusa/server/src/api/admin/statistics/alerts/route.d.ts +12 -0
- package/.medusa/server/src/api/admin/statistics/alerts/route.js +94 -0
- package/.medusa/server/src/api/admin/statistics/charts/[id]/route.d.ts +17 -0
- package/.medusa/server/src/api/admin/statistics/charts/[id]/route.js +50 -0
- package/.medusa/server/src/api/admin/statistics/charts/[id]/statistics/route.d.ts +15 -0
- package/.medusa/server/src/api/admin/statistics/charts/[id]/statistics/route.js +40 -0
- package/.medusa/server/src/api/admin/statistics/charts/route.d.ts +4 -0
- package/.medusa/server/src/api/admin/statistics/charts/route.js +55 -0
- package/.medusa/server/src/api/admin/statistics/options/[id]/calculate/route.d.ts +7 -0
- package/.medusa/server/src/api/admin/statistics/options/[id]/calculate/route.js +23 -0
- package/.medusa/server/src/api/admin/statistics/options/[id]/clone/route.d.ts +7 -0
- package/.medusa/server/src/api/admin/statistics/options/[id]/clone/route.js +15 -0
- package/.medusa/server/src/api/admin/statistics/options/[id]/route.d.ts +17 -0
- package/.medusa/server/src/api/admin/statistics/options/[id]/route.js +69 -0
- package/.medusa/server/src/api/admin/statistics/options/route.d.ts +12 -0
- package/.medusa/server/src/api/admin/statistics/options/route.js +87 -0
- package/.medusa/server/src/api/admin/statistics/providers/[id]/route.d.ts +6 -0
- package/.medusa/server/src/api/admin/statistics/providers/[id]/route.js +18 -0
- package/.medusa/server/src/api/admin/statistics/providers/[id]/statistics/route.d.ts +6 -0
- package/.medusa/server/src/api/admin/statistics/providers/[id]/statistics/route.js +18 -0
- package/.medusa/server/src/api/admin/statistics/providers/route.d.ts +7 -0
- package/.medusa/server/src/api/admin/statistics/providers/route.js +57 -0
- package/.medusa/server/src/api/admin/statistics/utils/option-graph.d.ts +3 -0
- package/.medusa/server/src/api/admin/statistics/utils/option-graph.js +34 -0
- package/.medusa/server/src/api/admin/statistics/views/[id]/calculate/route.d.ts +7 -0
- package/.medusa/server/src/api/admin/statistics/views/[id]/calculate/route.js +21 -0
- package/.medusa/server/src/api/admin/statistics/views/[id]/clone/route.d.ts +7 -0
- package/.medusa/server/src/api/admin/statistics/views/[id]/clone/route.js +21 -0
- package/.medusa/server/src/api/admin/statistics/views/[id]/route.d.ts +17 -0
- package/.medusa/server/src/api/admin/statistics/views/[id]/route.js +71 -0
- package/.medusa/server/src/api/admin/statistics/views/route.d.ts +12 -0
- package/.medusa/server/src/api/admin/statistics/views/route.js +74 -0
- package/.medusa/server/src/api/middlewares.d.ts +2 -0
- package/.medusa/server/src/api/middlewares.js +194 -0
- package/.medusa/server/src/api/validation/statistics/schemas.d.ts +1013 -0
- package/.medusa/server/src/api/validation/statistics/schemas.js +288 -0
- package/.medusa/server/src/index.d.ts +1 -0
- package/.medusa/server/src/index.js +18 -0
- package/.medusa/server/src/jobs/evaluate-statistics-alerts.d.ts +6 -0
- package/.medusa/server/src/jobs/evaluate-statistics-alerts.js +110 -0
- package/.medusa/server/src/links/statistics-alert-user.d.ts +2 -0
- package/.medusa/server/src/links/statistics-alert-user.js +16 -0
- package/.medusa/server/src/links/statistics-option-user.d.ts +2 -0
- package/.medusa/server/src/links/statistics-option-user.js +16 -0
- package/.medusa/server/src/loaders/statistics/index.d.ts +5 -0
- package/.medusa/server/src/loaders/statistics/index.js +47 -0
- package/.medusa/server/src/modules/statistics/index.d.ts +107 -0
- package/.medusa/server/src/modules/statistics/index.js +32 -0
- package/.medusa/server/src/modules/statistics/migrations/Migration20260223131741.d.ts +5 -0
- package/.medusa/server/src/modules/statistics/migrations/Migration20260223131741.js +57 -0
- package/.medusa/server/src/modules/statistics/models/alert-log.d.ts +74 -0
- package/.medusa/server/src/modules/statistics/models/alert-log.js +16 -0
- package/.medusa/server/src/modules/statistics/models/alert.d.ts +74 -0
- package/.medusa/server/src/modules/statistics/models/alert.js +24 -0
- package/.medusa/server/src/modules/statistics/models/chart.d.ts +81 -0
- package/.medusa/server/src/modules/statistics/models/chart.js +28 -0
- package/.medusa/server/src/modules/statistics/models/index.d.ts +7 -0
- package/.medusa/server/src/modules/statistics/models/index.js +24 -0
- package/.medusa/server/src/modules/statistics/models/option-input.d.ts +135 -0
- package/.medusa/server/src/modules/statistics/models/option-input.js +27 -0
- package/.medusa/server/src/modules/statistics/models/option.d.ts +78 -0
- package/.medusa/server/src/modules/statistics/models/option.js +41 -0
- package/.medusa/server/src/modules/statistics/models/provider.d.ts +75 -0
- package/.medusa/server/src/modules/statistics/models/provider.js +15 -0
- package/.medusa/server/src/modules/statistics/models/view.d.ts +79 -0
- package/.medusa/server/src/modules/statistics/models/view.js +30 -0
- package/.medusa/server/src/modules/statistics/providers/index.d.ts +1 -0
- package/.medusa/server/src/modules/statistics/providers/index.js +18 -0
- package/.medusa/server/src/modules/statistics/providers/provider.d.ts +254 -0
- package/.medusa/server/src/modules/statistics/providers/provider.js +307 -0
- package/.medusa/server/src/modules/statistics/service.d.ts +953 -0
- package/.medusa/server/src/modules/statistics/service.js +190 -0
- package/.medusa/server/src/modules/statistics/utils/dependency-option-map.d.ts +13 -0
- package/.medusa/server/src/modules/statistics/utils/dependency-option-map.js +67 -0
- package/.medusa/server/src/modules/statistics/utils/period-utils.d.ts +23 -0
- package/.medusa/server/src/modules/statistics/utils/period-utils.js +78 -0
- package/.medusa/server/src/modules/statistics/utils/time-series-utils.d.ts +6 -0
- package/.medusa/server/src/modules/statistics/utils/time-series-utils.js +8 -0
- package/.medusa/server/src/providers/common/index.d.ts +2 -0
- package/.medusa/server/src/providers/common/index.js +1232 -0
- package/.medusa/server/src/providers/composite/index.d.ts +2 -0
- package/.medusa/server/src/providers/composite/index.js +147 -0
- package/.medusa/server/src/workflows/statistics/calculate-single-statistic.d.ts +15 -0
- package/.medusa/server/src/workflows/statistics/calculate-single-statistic.js +28 -0
- package/.medusa/server/src/workflows/statistics/calculate-statistics.d.ts +20 -0
- package/.medusa/server/src/workflows/statistics/calculate-statistics.js +15 -0
- package/.medusa/server/src/workflows/statistics/calculate-view.d.ts +31 -0
- package/.medusa/server/src/workflows/statistics/calculate-view.js +30 -0
- package/.medusa/server/src/workflows/statistics/clone-view.d.ts +227 -0
- package/.medusa/server/src/workflows/statistics/clone-view.js +10 -0
- package/.medusa/server/src/workflows/statistics/create-alert.d.ts +139 -0
- package/.medusa/server/src/workflows/statistics/create-alert.js +12 -0
- package/.medusa/server/src/workflows/statistics/create-chart.d.ts +122 -0
- package/.medusa/server/src/workflows/statistics/create-chart.js +14 -0
- package/.medusa/server/src/workflows/statistics/create-view-with-options.d.ts +1342 -0
- package/.medusa/server/src/workflows/statistics/create-view-with-options.js +29 -0
- package/.medusa/server/src/workflows/statistics/delete-chart.d.ts +10 -0
- package/.medusa/server/src/workflows/statistics/delete-chart.js +14 -0
- package/.medusa/server/src/workflows/statistics/evaluate-alerts.d.ts +28 -0
- package/.medusa/server/src/workflows/statistics/evaluate-alerts.js +67 -0
- package/.medusa/server/src/workflows/statistics/get-available-statistics.d.ts +5 -0
- package/.medusa/server/src/workflows/statistics/get-available-statistics.js +10 -0
- package/.medusa/server/src/workflows/statistics/index.d.ts +14 -0
- package/.medusa/server/src/workflows/statistics/index.js +31 -0
- package/.medusa/server/src/workflows/statistics/manage-chart-statistics.d.ts +12 -0
- package/.medusa/server/src/workflows/statistics/manage-chart-statistics.js +14 -0
- package/.medusa/server/src/workflows/statistics/steps/calculate-statistics.d.ts +37 -0
- package/.medusa/server/src/workflows/statistics/steps/calculate-statistics.js +222 -0
- package/.medusa/server/src/workflows/statistics/steps/clone-view.d.ts +227 -0
- package/.medusa/server/src/workflows/statistics/steps/clone-view.js +39 -0
- package/.medusa/server/src/workflows/statistics/steps/create-alert-log-entries.d.ts +17 -0
- package/.medusa/server/src/workflows/statistics/steps/create-alert-log-entries.js +50 -0
- package/.medusa/server/src/workflows/statistics/steps/create-alert.d.ts +120 -0
- package/.medusa/server/src/workflows/statistics/steps/create-alert.js +21 -0
- package/.medusa/server/src/workflows/statistics/steps/create-chart.d.ts +118 -0
- package/.medusa/server/src/workflows/statistics/steps/create-chart.js +19 -0
- package/.medusa/server/src/workflows/statistics/steps/create-statistics-options.d.ts +117 -0
- package/.medusa/server/src/workflows/statistics/steps/create-statistics-options.js +16 -0
- package/.medusa/server/src/workflows/statistics/steps/create-statistics-view.d.ts +119 -0
- package/.medusa/server/src/workflows/statistics/steps/create-statistics-view.js +16 -0
- package/.medusa/server/src/workflows/statistics/steps/dedupe-alerts.d.ts +22 -0
- package/.medusa/server/src/workflows/statistics/steps/dedupe-alerts.js +64 -0
- package/.medusa/server/src/workflows/statistics/steps/delete-chart.d.ts +6 -0
- package/.medusa/server/src/workflows/statistics/steps/delete-chart.js +17 -0
- package/.medusa/server/src/workflows/statistics/steps/emit-alert-events.d.ts +17 -0
- package/.medusa/server/src/workflows/statistics/steps/emit-alert-events.js +41 -0
- package/.medusa/server/src/workflows/statistics/steps/evaluate-each-condition.d.ts +15 -0
- package/.medusa/server/src/workflows/statistics/steps/evaluate-each-condition.js +109 -0
- package/.medusa/server/src/workflows/statistics/steps/extract-alert-values.d.ts +12 -0
- package/.medusa/server/src/workflows/statistics/steps/extract-alert-values.js +86 -0
- package/.medusa/server/src/workflows/statistics/steps/fetch-active-alerts-for-option.d.ts +112 -0
- package/.medusa/server/src/workflows/statistics/steps/fetch-active-alerts-for-option.js +16 -0
- package/.medusa/server/src/workflows/statistics/steps/fetch-available-statistics.d.ts +4 -0
- package/.medusa/server/src/workflows/statistics/steps/fetch-available-statistics.js +39 -0
- package/.medusa/server/src/workflows/statistics/steps/fetch-option-with-relations.d.ts +112 -0
- package/.medusa/server/src/workflows/statistics/steps/fetch-option-with-relations.js +11 -0
- package/.medusa/server/src/workflows/statistics/steps/fetch-view-with-options.d.ts +112 -0
- package/.medusa/server/src/workflows/statistics/steps/fetch-view-with-options.js +20 -0
- package/.medusa/server/src/workflows/statistics/steps/manage-chart-statistics.d.ts +8 -0
- package/.medusa/server/src/workflows/statistics/steps/manage-chart-statistics.js +26 -0
- package/.medusa/server/src/workflows/statistics/steps/update-chart.d.ts +117 -0
- package/.medusa/server/src/workflows/statistics/steps/update-chart.js +32 -0
- package/.medusa/server/src/workflows/statistics/steps/update-view.d.ts +120 -0
- package/.medusa/server/src/workflows/statistics/steps/update-view.js +18 -0
- package/.medusa/server/src/workflows/statistics/steps/validate-alert-input.d.ts +1 -0
- package/.medusa/server/src/workflows/statistics/steps/validate-alert-input.js +34 -0
- package/.medusa/server/src/workflows/statistics/steps/validate-option-parameters.d.ts +21 -0
- package/.medusa/server/src/workflows/statistics/steps/validate-option-parameters.js +43 -0
- package/.medusa/server/src/workflows/statistics/steps/validate-view-input.d.ts +10 -0
- package/.medusa/server/src/workflows/statistics/steps/validate-view-input.js +15 -0
- package/.medusa/server/src/workflows/statistics/update-chart.d.ts +120 -0
- package/.medusa/server/src/workflows/statistics/update-chart.js +13 -0
- package/.medusa/server/src/workflows/statistics/update-view-configuration.d.ts +128 -0
- package/.medusa/server/src/workflows/statistics/update-view-configuration.js +18 -0
- package/.medusa/server/src/workflows/statistics/utils/cache-utils.d.ts +60 -0
- package/.medusa/server/src/workflows/statistics/utils/cache-utils.js +66 -0
- package/.medusa/server/src/workflows/statistics/utils/dependency-graph.d.ts +51 -0
- package/.medusa/server/src/workflows/statistics/utils/dependency-graph.js +131 -0
- package/.medusa/server/src/workflows/statistics/utils/parameter-utils.d.ts +54 -0
- package/.medusa/server/src/workflows/statistics/utils/parameter-utils.js +147 -0
- package/.medusa/server/src/workflows/statistics/validate-option-configuration.d.ts +9 -0
- package/.medusa/server/src/workflows/statistics/validate-option-configuration.js +35 -0
- package/README.md +310 -0
- package/package.json +87 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
4
|
+
const models_1 = require("./models");
|
|
5
|
+
const framework_1 = require("@medusajs/framework");
|
|
6
|
+
class StatisticsService extends (0, utils_1.MedusaService)({
|
|
7
|
+
StatisticsView: models_1.StatisticsView,
|
|
8
|
+
StatisticsOption: models_1.StatisticsOption,
|
|
9
|
+
StatisticsProvider: models_1.StatisticsProvider,
|
|
10
|
+
StatisticsAlert: models_1.StatisticsAlert,
|
|
11
|
+
StatisticsAlertLog: models_1.StatisticsAlertLog,
|
|
12
|
+
StatisticsChart: models_1.StatisticsChart,
|
|
13
|
+
StatisticOptionInput: models_1.StatisticOptionInput
|
|
14
|
+
}) {
|
|
15
|
+
constructor({ statisticsProviderRepository, ...container }) {
|
|
16
|
+
super(...arguments);
|
|
17
|
+
this.providerRepository_ = statisticsProviderRepository;
|
|
18
|
+
this.container_ = container;
|
|
19
|
+
}
|
|
20
|
+
async upsertStatisticsProviders(data, context) {
|
|
21
|
+
return this.providerRepository_.upsert(data, context);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get provider instance with QueryModule injected via child container
|
|
25
|
+
*/
|
|
26
|
+
getProvider(providerId, query) {
|
|
27
|
+
const ProviderClass = this.container_[providerId];
|
|
28
|
+
if (!ProviderClass) {
|
|
29
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Provider ${providerId} not found`);
|
|
30
|
+
}
|
|
31
|
+
const childContainer = {
|
|
32
|
+
...framework_1.container,
|
|
33
|
+
[utils_1.ContainerRegistrationKeys.QUERY]: query,
|
|
34
|
+
};
|
|
35
|
+
return new ProviderClass(childContainer);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Add statistics (series) to a chart
|
|
39
|
+
*/
|
|
40
|
+
async addStatisticsToChart(chartId, statisticIds) {
|
|
41
|
+
const chart = await this.retrieveStatisticsChart(chartId, { relations: ["statistics"] });
|
|
42
|
+
const updatedChart = await this.updateStatisticsCharts({
|
|
43
|
+
id: chartId,
|
|
44
|
+
statistics: [
|
|
45
|
+
...(chart.statistics.map(s => s.id) || []),
|
|
46
|
+
...statisticIds.map(id => (id))
|
|
47
|
+
]
|
|
48
|
+
});
|
|
49
|
+
return { chart: updatedChart };
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Remove statistics (series) from a chart
|
|
53
|
+
*/
|
|
54
|
+
async removeStatisticsFromChart(chartId, statisticIds) {
|
|
55
|
+
const chart = await this.retrieveStatisticsChart(chartId, { relations: ["statistics"] });
|
|
56
|
+
const updatedChart = await this.updateStatisticsCharts({
|
|
57
|
+
id: chartId,
|
|
58
|
+
statistics: [
|
|
59
|
+
...(chart.statistics.map(s => s.id) || []).filter(id => !statisticIds.includes(id))
|
|
60
|
+
]
|
|
61
|
+
});
|
|
62
|
+
return { chart: updatedChart };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Validate if an option can be deleted (check dependencies)
|
|
66
|
+
* Throws error if option is used as input by other composite statistics
|
|
67
|
+
*/
|
|
68
|
+
async validateOptionDeletion(ids) {
|
|
69
|
+
const idArray = Array.isArray(ids) ? ids : [ids];
|
|
70
|
+
for (const id of idArray) {
|
|
71
|
+
const option = await this.retrieveStatisticsOption(id, {
|
|
72
|
+
relations: ["dependent_composites"],
|
|
73
|
+
});
|
|
74
|
+
if (option.dependent_composites && option.dependent_composites.length > 0) {
|
|
75
|
+
const dependentNames = option.dependent_composites
|
|
76
|
+
.map((c) => c.local_option_name)
|
|
77
|
+
.join(", ");
|
|
78
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, `Cannot delete option "${option.local_option_name}" because it is used as input by the following composite statistics: ${dependentNames}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Clone a statistics option with all its configuration and dependencies
|
|
84
|
+
* Creates an independent copy that can be customized
|
|
85
|
+
*/
|
|
86
|
+
async cloneOption(sourceId, overrides = {}) {
|
|
87
|
+
const clonedIdBySourceId = new Map();
|
|
88
|
+
const cloningStack = new Set();
|
|
89
|
+
const cloneRecursive = async (optionId, isRoot = false) => {
|
|
90
|
+
const existingCloneId = clonedIdBySourceId.get(optionId);
|
|
91
|
+
if (existingCloneId) {
|
|
92
|
+
return this.retrieveStatisticsOption(existingCloneId, {
|
|
93
|
+
relations: ["input_dependencies", "provider"],
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
if (cloningStack.has(optionId)) {
|
|
97
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Circular dependency detected while cloning option ${optionId}`);
|
|
98
|
+
}
|
|
99
|
+
cloningStack.add(optionId);
|
|
100
|
+
const source = await this.retrieveStatisticsOption(optionId, {
|
|
101
|
+
relations: ["input_dependencies", "provider"],
|
|
102
|
+
});
|
|
103
|
+
const clonedInputDependencies = [];
|
|
104
|
+
if (source.input_dependencies && source.input_dependencies.length > 0) {
|
|
105
|
+
for (const dep of source.input_dependencies) {
|
|
106
|
+
const sourceInputId = dep.input_option?.id || dep.input_option_id;
|
|
107
|
+
if (!sourceInputId) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
const clonedInput = await cloneRecursive(sourceInputId, false);
|
|
111
|
+
clonedInputDependencies.push({
|
|
112
|
+
input_option_id: clonedInput.id,
|
|
113
|
+
parameter_name: dep.parameter_name,
|
|
114
|
+
order: dep.order,
|
|
115
|
+
metadata: dep.metadata,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const cloneData = {
|
|
120
|
+
provider_option_name: source.provider_option_name,
|
|
121
|
+
local_option_name: isRoot
|
|
122
|
+
? (overrides.local_option_name || source.local_option_name)
|
|
123
|
+
: source.local_option_name,
|
|
124
|
+
data: source.data,
|
|
125
|
+
visualization_config: source.visualization_config,
|
|
126
|
+
cache_options: source.cache_options,
|
|
127
|
+
parameter_config: isRoot
|
|
128
|
+
? (overrides.parameter_config ?? source.parameter_config)
|
|
129
|
+
: source.parameter_config,
|
|
130
|
+
preset: isRoot
|
|
131
|
+
? (overrides.preset !== undefined ? overrides.preset : false)
|
|
132
|
+
: false,
|
|
133
|
+
provider: source.provider?.id,
|
|
134
|
+
};
|
|
135
|
+
if (clonedInputDependencies.length > 0) {
|
|
136
|
+
cloneData.input_dependencies = clonedInputDependencies;
|
|
137
|
+
}
|
|
138
|
+
const clone = await this.createStatisticsOptions(cloneData);
|
|
139
|
+
clonedIdBySourceId.set(optionId, clone.id);
|
|
140
|
+
cloningStack.delete(optionId);
|
|
141
|
+
return clone;
|
|
142
|
+
};
|
|
143
|
+
return await cloneRecursive(sourceId, true);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Get complete dependency graph for an option
|
|
147
|
+
* Recursively builds tree structure for visualization
|
|
148
|
+
*/
|
|
149
|
+
async getDependencyGraph(optionId) {
|
|
150
|
+
const visited = new Set();
|
|
151
|
+
const buildTree = async (id, depth = 0) => {
|
|
152
|
+
if (visited.has(id)) {
|
|
153
|
+
return { id, circular: true, depth };
|
|
154
|
+
}
|
|
155
|
+
visited.add(id);
|
|
156
|
+
const option = await this.retrieveStatisticsOption(id, {
|
|
157
|
+
relations: ["input_dependencies", "input_dependencies.input_option"],
|
|
158
|
+
});
|
|
159
|
+
const node = {
|
|
160
|
+
id: option.id,
|
|
161
|
+
name: option.local_option_name,
|
|
162
|
+
provider_option_name: option.provider_option_name,
|
|
163
|
+
depth,
|
|
164
|
+
dependencies: [],
|
|
165
|
+
};
|
|
166
|
+
if (option.input_dependencies && option.input_dependencies.length > 0) {
|
|
167
|
+
for (const dep of option.input_dependencies) {
|
|
168
|
+
const inputId = dep.input_option?.id || dep.input_option_id;
|
|
169
|
+
const paramName = dep.parameter_name;
|
|
170
|
+
const childNode = await buildTree(inputId, depth + 1);
|
|
171
|
+
node.dependencies.push({
|
|
172
|
+
parameter_name: paramName,
|
|
173
|
+
...childNode,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return node;
|
|
178
|
+
};
|
|
179
|
+
return buildTree(optionId);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* List preset options available for cloning
|
|
183
|
+
* Convenience method for filtering preset options
|
|
184
|
+
*/
|
|
185
|
+
async listPresets(filters = {}, config = {}) {
|
|
186
|
+
return this.listStatisticsOptions({ ...filters, preset: true }, config);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
exports.default = StatisticsService;
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3N0YXRpc3RpY3Mvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUFnSTtBQUNoSSxxQ0FBNEo7QUFJNUosbURBQWdGO0FBS2hGLE1BQXFCLGlCQUFrQixTQUFRLElBQUEscUJBQWEsRUFBQztJQUN6RCxjQUFjLEVBQWQsdUJBQWM7SUFDZCxnQkFBZ0IsRUFBaEIseUJBQWdCO0lBQ2hCLGtCQUFrQixFQUFsQiwyQkFBa0I7SUFDbEIsZUFBZSxFQUFmLHdCQUFlO0lBQ2Ysa0JBQWtCLEVBQWxCLDJCQUFrQjtJQUNsQixlQUFlLEVBQWYsd0JBQWU7SUFDZixvQkFBb0IsRUFBcEIsNkJBQW9CO0NBQ3ZCLENBQUM7SUFJRSxZQUFZLEVBQ1IsNEJBQTRCLEVBQzVCLEdBQUcsU0FBUyxFQUdmO1FBQ0csS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLDRCQUE0QixDQUFDO1FBQ3hELElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBZ0IsQ0FBQztJQUN2QyxDQUFDO0lBRUQsS0FBSyxDQUFDLHlCQUF5QixDQUFDLElBQVcsRUFBRSxPQUFhO1FBQ3RELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVyxDQUFDLFVBQWtCLEVBQUUsS0FBWTtRQUN4QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksbUJBQVcsQ0FDakIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUMzQixZQUFZLFVBQVUsWUFBWSxDQUNyQyxDQUFDO1FBQ04s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
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type DependencyEdge = {
|
|
2
|
+
input_option_id?: string | null;
|
|
3
|
+
input_option?: {
|
|
4
|
+
id?: string | null;
|
|
5
|
+
} | null;
|
|
6
|
+
};
|
|
7
|
+
export type DependencyOptionLike = {
|
|
8
|
+
id: string;
|
|
9
|
+
input_dependencies?: DependencyEdge[];
|
|
10
|
+
};
|
|
11
|
+
export declare const buildDependencyOptionMap: <T extends DependencyOptionLike>(rootIds: string[], seedOptions: T[], fetchByIds: (ids: string[]) => Promise<T[]>) => Promise<Map<string, T>>;
|
|
12
|
+
export declare const hydrateDependencyInputOptions: <T extends DependencyOptionLike>(optionMap: Map<string, T>) => void;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hydrateDependencyInputOptions = exports.buildDependencyOptionMap = void 0;
|
|
4
|
+
const getDependencyIds = (option) => {
|
|
5
|
+
if (!option.input_dependencies?.length) {
|
|
6
|
+
return [];
|
|
7
|
+
}
|
|
8
|
+
return option.input_dependencies
|
|
9
|
+
.map((dep) => dep?.input_option?.id || dep?.input_option_id)
|
|
10
|
+
.filter((id) => Boolean(id));
|
|
11
|
+
};
|
|
12
|
+
const buildDependencyOptionMap = async (rootIds, seedOptions, fetchByIds) => {
|
|
13
|
+
const optionMap = new Map();
|
|
14
|
+
const pendingIds = new Set();
|
|
15
|
+
seedOptions.forEach((option) => {
|
|
16
|
+
if (!option?.id) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
optionMap.set(option.id, option);
|
|
20
|
+
getDependencyIds(option).forEach((dependencyId) => {
|
|
21
|
+
if (!optionMap.has(dependencyId)) {
|
|
22
|
+
pendingIds.add(dependencyId);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
rootIds.forEach((id) => {
|
|
27
|
+
if (id && !optionMap.has(id)) {
|
|
28
|
+
pendingIds.add(id);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
while (pendingIds.size > 0) {
|
|
32
|
+
const idsToFetch = Array.from(pendingIds).filter((id) => !optionMap.has(id));
|
|
33
|
+
pendingIds.clear();
|
|
34
|
+
if (idsToFetch.length === 0) {
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
const fetchedOptions = await fetchByIds(idsToFetch);
|
|
38
|
+
fetchedOptions.forEach((option) => {
|
|
39
|
+
if (!option?.id) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
optionMap.set(option.id, option);
|
|
43
|
+
});
|
|
44
|
+
fetchedOptions.forEach((option) => {
|
|
45
|
+
getDependencyIds(option).forEach((dependencyId) => {
|
|
46
|
+
if (!optionMap.has(dependencyId)) {
|
|
47
|
+
pendingIds.add(dependencyId);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return optionMap;
|
|
53
|
+
};
|
|
54
|
+
exports.buildDependencyOptionMap = buildDependencyOptionMap;
|
|
55
|
+
const hydrateDependencyInputOptions = (optionMap) => {
|
|
56
|
+
optionMap.forEach((option) => {
|
|
57
|
+
if (!option.input_dependencies) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
option.input_dependencies = option.input_dependencies.map((dep) => ({
|
|
61
|
+
...dep,
|
|
62
|
+
input_option: optionMap.get(dep.input_option?.id || dep.input_option_id || "") || dep.input_option || null,
|
|
63
|
+
}));
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
exports.hydrateDependencyInputOptions = hydrateDependencyInputOptions;
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jeS1vcHRpb24tbWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvc3RhdGlzdGljcy91dGlscy9kZXBlbmRlbmN5LW9wdGlvbi1tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBWUEsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE1BQTRCLEVBQVksRUFBRTtJQUNoRSxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3JDLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLGtCQUFrQjtTQUMzQixHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxlQUFlLENBQUM7U0FDM0QsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkQsQ0FBQyxDQUFDO0FBRUssTUFBTSx3QkFBd0IsR0FBRyxLQUFLLEVBQ3pDLE9BQWlCLEVBQ2pCLFdBQWdCLEVBQ2hCLFVBQTJDLEVBQzdDLEVBQUU7SUFDQSxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBYSxDQUFDO0lBQ3ZDLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFFckMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQzNCLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDZCxPQUFPO1FBQ1gsQ0FBQztRQUVELFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVqQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUM5QyxJ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
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for calculating date ranges from period strategies
|
|
3
|
+
*/
|
|
4
|
+
export type PeriodType = 'calendar' | 'custom';
|
|
5
|
+
export interface CalendarPeriodConfig {
|
|
6
|
+
reference: 'today' | 'yesterday' | 'wtd' | 'lastweek' | 'mtd' | 'lastmonth' | 'qtd' | 'lastquarter' | 'ytd' | 'lastyear';
|
|
7
|
+
}
|
|
8
|
+
export interface CustomPeriodConfig {
|
|
9
|
+
start: string | Date;
|
|
10
|
+
end: string | Date;
|
|
11
|
+
}
|
|
12
|
+
export interface PeriodStrategy {
|
|
13
|
+
type: PeriodType;
|
|
14
|
+
config: CalendarPeriodConfig | CustomPeriodConfig;
|
|
15
|
+
}
|
|
16
|
+
export interface DateRange {
|
|
17
|
+
start: Date;
|
|
18
|
+
end: Date;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Calculate date range from a period strategy
|
|
22
|
+
*/
|
|
23
|
+
export declare function calculateDatesFromPeriod(period: PeriodStrategy, referenceDate?: Date): DateRange;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Utility functions for calculating date ranges from period strategies
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.calculateDatesFromPeriod = calculateDatesFromPeriod;
|
|
7
|
+
/**
|
|
8
|
+
* Calculate date range from a period strategy
|
|
9
|
+
*/
|
|
10
|
+
function calculateDatesFromPeriod(period, referenceDate = new Date()) {
|
|
11
|
+
const now = new Date(referenceDate);
|
|
12
|
+
let start = new Date(now);
|
|
13
|
+
let end = new Date(now);
|
|
14
|
+
if (period.type === 'calendar') {
|
|
15
|
+
const config = period.config;
|
|
16
|
+
switch (config.reference) {
|
|
17
|
+
case 'today':
|
|
18
|
+
start.setHours(0, 0, 0, 0);
|
|
19
|
+
end.setHours(23, 59, 59, 999);
|
|
20
|
+
break;
|
|
21
|
+
case 'yesterday':
|
|
22
|
+
start.setDate(now.getDate() - 1);
|
|
23
|
+
start.setHours(0, 0, 0, 0);
|
|
24
|
+
end.setDate(now.getDate() - 1);
|
|
25
|
+
end.setHours(23, 59, 59, 999);
|
|
26
|
+
break;
|
|
27
|
+
case 'wtd':
|
|
28
|
+
const dayOfWeek = now.getDay();
|
|
29
|
+
const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1;
|
|
30
|
+
start.setDate(now.getDate() - daysToMonday);
|
|
31
|
+
start.setHours(0, 0, 0, 0);
|
|
32
|
+
break;
|
|
33
|
+
case 'lastweek':
|
|
34
|
+
const lastWeekStart = new Date(now);
|
|
35
|
+
const lastWeekDay = lastWeekStart.getDay();
|
|
36
|
+
const daysToLastMonday = lastWeekDay === 0 ? 13 : lastWeekDay + 6;
|
|
37
|
+
lastWeekStart.setDate(now.getDate() - daysToLastMonday);
|
|
38
|
+
lastWeekStart.setHours(0, 0, 0, 0);
|
|
39
|
+
start = lastWeekStart;
|
|
40
|
+
end = new Date(lastWeekStart);
|
|
41
|
+
end.setDate(lastWeekStart.getDate() + 6);
|
|
42
|
+
end.setHours(23, 59, 59, 999);
|
|
43
|
+
break;
|
|
44
|
+
case 'mtd':
|
|
45
|
+
start = new Date(now.getFullYear(), now.getMonth(), 1);
|
|
46
|
+
break;
|
|
47
|
+
case 'lastmonth':
|
|
48
|
+
start = new Date(now.getFullYear(), now.getMonth() - 1, 1);
|
|
49
|
+
end = new Date(now.getFullYear(), now.getMonth(), 0, 23, 59, 59, 999);
|
|
50
|
+
break;
|
|
51
|
+
case 'qtd':
|
|
52
|
+
const quarter = Math.floor(now.getMonth() / 3);
|
|
53
|
+
start = new Date(now.getFullYear(), quarter * 3, 1);
|
|
54
|
+
break;
|
|
55
|
+
case 'lastquarter':
|
|
56
|
+
const lastQuarter = Math.floor(now.getMonth() / 3) - 1;
|
|
57
|
+
const lastQuarterYear = lastQuarter < 0 ? now.getFullYear() - 1 : now.getFullYear();
|
|
58
|
+
const lastQuarterMonth = lastQuarter < 0 ? 9 : lastQuarter * 3;
|
|
59
|
+
start = new Date(lastQuarterYear, lastQuarterMonth, 1);
|
|
60
|
+
end = new Date(lastQuarterYear, lastQuarterMonth + 3, 0, 23, 59, 59, 999);
|
|
61
|
+
break;
|
|
62
|
+
case 'ytd':
|
|
63
|
+
start = new Date(now.getFullYear(), 0, 1);
|
|
64
|
+
break;
|
|
65
|
+
case 'lastyear':
|
|
66
|
+
start = new Date(now.getFullYear() - 1, 0, 1);
|
|
67
|
+
end = new Date(now.getFullYear() - 1, 11, 31, 23, 59, 59, 999);
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else if (period.type === 'custom') {
|
|
72
|
+
const config = period.config;
|
|
73
|
+
start = new Date(config.start);
|
|
74
|
+
end = new Date(config.end);
|
|
75
|
+
}
|
|
76
|
+
return { start, end };
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyaW9kLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvc3RhdGlzdGljcy91dGlscy9wZXJpb2QtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOztBQTBCSCw0REFvRUM7QUF2RUQ7O0dBRUc7QUFDSCxTQUFnQix3QkFBd0IsQ0FBQyxNQUFzQixFQUFFLGdCQUFzQixJQUFJLElBQUksRUFBRTtJQUM3RixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwQyxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV4QixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQThCLENBQUM7UUFDckQsUUFBUSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdkIsS0FBSyxPQUFPO2dCQUNSLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzlCLE1BQU07WUFDVixLQUFLLFdBQVc7Z0JBQ1osS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFH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
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Utility functions for creating and aggregating time series data.
|
|
4
|
+
* These helpers optimize performance by sorting data once and iterating sequentially (O(n+m))
|
|
5
|
+
* instead of repeatedly filtering (O(n*m)).
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1zZXJpZXMtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zdGF0aXN0aWNzL3V0aWxzL3RpbWUtc2VyaWVzLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHIn0=
|