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.
Files changed (180) hide show
  1. package/.medusa/server/src/admin/composite.png +0 -0
  2. package/.medusa/server/src/admin/index.js +10512 -0
  3. package/.medusa/server/src/admin/index.mjs +10510 -0
  4. package/.medusa/server/src/admin/params.png +0 -0
  5. package/.medusa/server/src/admin/view.png +0 -0
  6. package/.medusa/server/src/admin/visualizations.png +0 -0
  7. package/.medusa/server/src/api/admin/statistics/alert-logs/[id]/route.d.ts +6 -0
  8. package/.medusa/server/src/api/admin/statistics/alert-logs/[id]/route.js +18 -0
  9. package/.medusa/server/src/api/admin/statistics/alert-logs/route.d.ts +6 -0
  10. package/.medusa/server/src/api/admin/statistics/alert-logs/route.js +33 -0
  11. package/.medusa/server/src/api/admin/statistics/alerts/[id]/logs/route.d.ts +6 -0
  12. package/.medusa/server/src/api/admin/statistics/alerts/[id]/logs/route.js +23 -0
  13. package/.medusa/server/src/api/admin/statistics/alerts/[id]/route.d.ts +17 -0
  14. package/.medusa/server/src/api/admin/statistics/alerts/[id]/route.js +64 -0
  15. package/.medusa/server/src/api/admin/statistics/alerts/[id]/toggle/route.d.ts +6 -0
  16. package/.medusa/server/src/api/admin/statistics/alerts/[id]/toggle/route.js +18 -0
  17. package/.medusa/server/src/api/admin/statistics/alerts/route.d.ts +12 -0
  18. package/.medusa/server/src/api/admin/statistics/alerts/route.js +94 -0
  19. package/.medusa/server/src/api/admin/statistics/charts/[id]/route.d.ts +17 -0
  20. package/.medusa/server/src/api/admin/statistics/charts/[id]/route.js +50 -0
  21. package/.medusa/server/src/api/admin/statistics/charts/[id]/statistics/route.d.ts +15 -0
  22. package/.medusa/server/src/api/admin/statistics/charts/[id]/statistics/route.js +40 -0
  23. package/.medusa/server/src/api/admin/statistics/charts/route.d.ts +4 -0
  24. package/.medusa/server/src/api/admin/statistics/charts/route.js +55 -0
  25. package/.medusa/server/src/api/admin/statistics/options/[id]/calculate/route.d.ts +7 -0
  26. package/.medusa/server/src/api/admin/statistics/options/[id]/calculate/route.js +23 -0
  27. package/.medusa/server/src/api/admin/statistics/options/[id]/clone/route.d.ts +7 -0
  28. package/.medusa/server/src/api/admin/statistics/options/[id]/clone/route.js +15 -0
  29. package/.medusa/server/src/api/admin/statistics/options/[id]/route.d.ts +17 -0
  30. package/.medusa/server/src/api/admin/statistics/options/[id]/route.js +69 -0
  31. package/.medusa/server/src/api/admin/statistics/options/route.d.ts +12 -0
  32. package/.medusa/server/src/api/admin/statistics/options/route.js +87 -0
  33. package/.medusa/server/src/api/admin/statistics/providers/[id]/route.d.ts +6 -0
  34. package/.medusa/server/src/api/admin/statistics/providers/[id]/route.js +18 -0
  35. package/.medusa/server/src/api/admin/statistics/providers/[id]/statistics/route.d.ts +6 -0
  36. package/.medusa/server/src/api/admin/statistics/providers/[id]/statistics/route.js +18 -0
  37. package/.medusa/server/src/api/admin/statistics/providers/route.d.ts +7 -0
  38. package/.medusa/server/src/api/admin/statistics/providers/route.js +57 -0
  39. package/.medusa/server/src/api/admin/statistics/utils/option-graph.d.ts +3 -0
  40. package/.medusa/server/src/api/admin/statistics/utils/option-graph.js +34 -0
  41. package/.medusa/server/src/api/admin/statistics/views/[id]/calculate/route.d.ts +7 -0
  42. package/.medusa/server/src/api/admin/statistics/views/[id]/calculate/route.js +21 -0
  43. package/.medusa/server/src/api/admin/statistics/views/[id]/clone/route.d.ts +7 -0
  44. package/.medusa/server/src/api/admin/statistics/views/[id]/clone/route.js +21 -0
  45. package/.medusa/server/src/api/admin/statistics/views/[id]/route.d.ts +17 -0
  46. package/.medusa/server/src/api/admin/statistics/views/[id]/route.js +71 -0
  47. package/.medusa/server/src/api/admin/statistics/views/route.d.ts +12 -0
  48. package/.medusa/server/src/api/admin/statistics/views/route.js +74 -0
  49. package/.medusa/server/src/api/middlewares.d.ts +2 -0
  50. package/.medusa/server/src/api/middlewares.js +194 -0
  51. package/.medusa/server/src/api/validation/statistics/schemas.d.ts +1013 -0
  52. package/.medusa/server/src/api/validation/statistics/schemas.js +288 -0
  53. package/.medusa/server/src/index.d.ts +1 -0
  54. package/.medusa/server/src/index.js +18 -0
  55. package/.medusa/server/src/jobs/evaluate-statistics-alerts.d.ts +6 -0
  56. package/.medusa/server/src/jobs/evaluate-statistics-alerts.js +110 -0
  57. package/.medusa/server/src/links/statistics-alert-user.d.ts +2 -0
  58. package/.medusa/server/src/links/statistics-alert-user.js +16 -0
  59. package/.medusa/server/src/links/statistics-option-user.d.ts +2 -0
  60. package/.medusa/server/src/links/statistics-option-user.js +16 -0
  61. package/.medusa/server/src/loaders/statistics/index.d.ts +5 -0
  62. package/.medusa/server/src/loaders/statistics/index.js +47 -0
  63. package/.medusa/server/src/modules/statistics/index.d.ts +107 -0
  64. package/.medusa/server/src/modules/statistics/index.js +32 -0
  65. package/.medusa/server/src/modules/statistics/migrations/Migration20260223131741.d.ts +5 -0
  66. package/.medusa/server/src/modules/statistics/migrations/Migration20260223131741.js +57 -0
  67. package/.medusa/server/src/modules/statistics/models/alert-log.d.ts +74 -0
  68. package/.medusa/server/src/modules/statistics/models/alert-log.js +16 -0
  69. package/.medusa/server/src/modules/statistics/models/alert.d.ts +74 -0
  70. package/.medusa/server/src/modules/statistics/models/alert.js +24 -0
  71. package/.medusa/server/src/modules/statistics/models/chart.d.ts +81 -0
  72. package/.medusa/server/src/modules/statistics/models/chart.js +28 -0
  73. package/.medusa/server/src/modules/statistics/models/index.d.ts +7 -0
  74. package/.medusa/server/src/modules/statistics/models/index.js +24 -0
  75. package/.medusa/server/src/modules/statistics/models/option-input.d.ts +135 -0
  76. package/.medusa/server/src/modules/statistics/models/option-input.js +27 -0
  77. package/.medusa/server/src/modules/statistics/models/option.d.ts +78 -0
  78. package/.medusa/server/src/modules/statistics/models/option.js +41 -0
  79. package/.medusa/server/src/modules/statistics/models/provider.d.ts +75 -0
  80. package/.medusa/server/src/modules/statistics/models/provider.js +15 -0
  81. package/.medusa/server/src/modules/statistics/models/view.d.ts +79 -0
  82. package/.medusa/server/src/modules/statistics/models/view.js +30 -0
  83. package/.medusa/server/src/modules/statistics/providers/index.d.ts +1 -0
  84. package/.medusa/server/src/modules/statistics/providers/index.js +18 -0
  85. package/.medusa/server/src/modules/statistics/providers/provider.d.ts +254 -0
  86. package/.medusa/server/src/modules/statistics/providers/provider.js +307 -0
  87. package/.medusa/server/src/modules/statistics/service.d.ts +953 -0
  88. package/.medusa/server/src/modules/statistics/service.js +190 -0
  89. package/.medusa/server/src/modules/statistics/utils/dependency-option-map.d.ts +13 -0
  90. package/.medusa/server/src/modules/statistics/utils/dependency-option-map.js +67 -0
  91. package/.medusa/server/src/modules/statistics/utils/period-utils.d.ts +23 -0
  92. package/.medusa/server/src/modules/statistics/utils/period-utils.js +78 -0
  93. package/.medusa/server/src/modules/statistics/utils/time-series-utils.d.ts +6 -0
  94. package/.medusa/server/src/modules/statistics/utils/time-series-utils.js +8 -0
  95. package/.medusa/server/src/providers/common/index.d.ts +2 -0
  96. package/.medusa/server/src/providers/common/index.js +1232 -0
  97. package/.medusa/server/src/providers/composite/index.d.ts +2 -0
  98. package/.medusa/server/src/providers/composite/index.js +147 -0
  99. package/.medusa/server/src/workflows/statistics/calculate-single-statistic.d.ts +15 -0
  100. package/.medusa/server/src/workflows/statistics/calculate-single-statistic.js +28 -0
  101. package/.medusa/server/src/workflows/statistics/calculate-statistics.d.ts +20 -0
  102. package/.medusa/server/src/workflows/statistics/calculate-statistics.js +15 -0
  103. package/.medusa/server/src/workflows/statistics/calculate-view.d.ts +31 -0
  104. package/.medusa/server/src/workflows/statistics/calculate-view.js +30 -0
  105. package/.medusa/server/src/workflows/statistics/clone-view.d.ts +227 -0
  106. package/.medusa/server/src/workflows/statistics/clone-view.js +10 -0
  107. package/.medusa/server/src/workflows/statistics/create-alert.d.ts +139 -0
  108. package/.medusa/server/src/workflows/statistics/create-alert.js +12 -0
  109. package/.medusa/server/src/workflows/statistics/create-chart.d.ts +122 -0
  110. package/.medusa/server/src/workflows/statistics/create-chart.js +14 -0
  111. package/.medusa/server/src/workflows/statistics/create-view-with-options.d.ts +1342 -0
  112. package/.medusa/server/src/workflows/statistics/create-view-with-options.js +29 -0
  113. package/.medusa/server/src/workflows/statistics/delete-chart.d.ts +10 -0
  114. package/.medusa/server/src/workflows/statistics/delete-chart.js +14 -0
  115. package/.medusa/server/src/workflows/statistics/evaluate-alerts.d.ts +28 -0
  116. package/.medusa/server/src/workflows/statistics/evaluate-alerts.js +67 -0
  117. package/.medusa/server/src/workflows/statistics/get-available-statistics.d.ts +5 -0
  118. package/.medusa/server/src/workflows/statistics/get-available-statistics.js +10 -0
  119. package/.medusa/server/src/workflows/statistics/index.d.ts +14 -0
  120. package/.medusa/server/src/workflows/statistics/index.js +31 -0
  121. package/.medusa/server/src/workflows/statistics/manage-chart-statistics.d.ts +12 -0
  122. package/.medusa/server/src/workflows/statistics/manage-chart-statistics.js +14 -0
  123. package/.medusa/server/src/workflows/statistics/steps/calculate-statistics.d.ts +37 -0
  124. package/.medusa/server/src/workflows/statistics/steps/calculate-statistics.js +222 -0
  125. package/.medusa/server/src/workflows/statistics/steps/clone-view.d.ts +227 -0
  126. package/.medusa/server/src/workflows/statistics/steps/clone-view.js +39 -0
  127. package/.medusa/server/src/workflows/statistics/steps/create-alert-log-entries.d.ts +17 -0
  128. package/.medusa/server/src/workflows/statistics/steps/create-alert-log-entries.js +50 -0
  129. package/.medusa/server/src/workflows/statistics/steps/create-alert.d.ts +120 -0
  130. package/.medusa/server/src/workflows/statistics/steps/create-alert.js +21 -0
  131. package/.medusa/server/src/workflows/statistics/steps/create-chart.d.ts +118 -0
  132. package/.medusa/server/src/workflows/statistics/steps/create-chart.js +19 -0
  133. package/.medusa/server/src/workflows/statistics/steps/create-statistics-options.d.ts +117 -0
  134. package/.medusa/server/src/workflows/statistics/steps/create-statistics-options.js +16 -0
  135. package/.medusa/server/src/workflows/statistics/steps/create-statistics-view.d.ts +119 -0
  136. package/.medusa/server/src/workflows/statistics/steps/create-statistics-view.js +16 -0
  137. package/.medusa/server/src/workflows/statistics/steps/dedupe-alerts.d.ts +22 -0
  138. package/.medusa/server/src/workflows/statistics/steps/dedupe-alerts.js +64 -0
  139. package/.medusa/server/src/workflows/statistics/steps/delete-chart.d.ts +6 -0
  140. package/.medusa/server/src/workflows/statistics/steps/delete-chart.js +17 -0
  141. package/.medusa/server/src/workflows/statistics/steps/emit-alert-events.d.ts +17 -0
  142. package/.medusa/server/src/workflows/statistics/steps/emit-alert-events.js +41 -0
  143. package/.medusa/server/src/workflows/statistics/steps/evaluate-each-condition.d.ts +15 -0
  144. package/.medusa/server/src/workflows/statistics/steps/evaluate-each-condition.js +109 -0
  145. package/.medusa/server/src/workflows/statistics/steps/extract-alert-values.d.ts +12 -0
  146. package/.medusa/server/src/workflows/statistics/steps/extract-alert-values.js +86 -0
  147. package/.medusa/server/src/workflows/statistics/steps/fetch-active-alerts-for-option.d.ts +112 -0
  148. package/.medusa/server/src/workflows/statistics/steps/fetch-active-alerts-for-option.js +16 -0
  149. package/.medusa/server/src/workflows/statistics/steps/fetch-available-statistics.d.ts +4 -0
  150. package/.medusa/server/src/workflows/statistics/steps/fetch-available-statistics.js +39 -0
  151. package/.medusa/server/src/workflows/statistics/steps/fetch-option-with-relations.d.ts +112 -0
  152. package/.medusa/server/src/workflows/statistics/steps/fetch-option-with-relations.js +11 -0
  153. package/.medusa/server/src/workflows/statistics/steps/fetch-view-with-options.d.ts +112 -0
  154. package/.medusa/server/src/workflows/statistics/steps/fetch-view-with-options.js +20 -0
  155. package/.medusa/server/src/workflows/statistics/steps/manage-chart-statistics.d.ts +8 -0
  156. package/.medusa/server/src/workflows/statistics/steps/manage-chart-statistics.js +26 -0
  157. package/.medusa/server/src/workflows/statistics/steps/update-chart.d.ts +117 -0
  158. package/.medusa/server/src/workflows/statistics/steps/update-chart.js +32 -0
  159. package/.medusa/server/src/workflows/statistics/steps/update-view.d.ts +120 -0
  160. package/.medusa/server/src/workflows/statistics/steps/update-view.js +18 -0
  161. package/.medusa/server/src/workflows/statistics/steps/validate-alert-input.d.ts +1 -0
  162. package/.medusa/server/src/workflows/statistics/steps/validate-alert-input.js +34 -0
  163. package/.medusa/server/src/workflows/statistics/steps/validate-option-parameters.d.ts +21 -0
  164. package/.medusa/server/src/workflows/statistics/steps/validate-option-parameters.js +43 -0
  165. package/.medusa/server/src/workflows/statistics/steps/validate-view-input.d.ts +10 -0
  166. package/.medusa/server/src/workflows/statistics/steps/validate-view-input.js +15 -0
  167. package/.medusa/server/src/workflows/statistics/update-chart.d.ts +120 -0
  168. package/.medusa/server/src/workflows/statistics/update-chart.js +13 -0
  169. package/.medusa/server/src/workflows/statistics/update-view-configuration.d.ts +128 -0
  170. package/.medusa/server/src/workflows/statistics/update-view-configuration.js +18 -0
  171. package/.medusa/server/src/workflows/statistics/utils/cache-utils.d.ts +60 -0
  172. package/.medusa/server/src/workflows/statistics/utils/cache-utils.js +66 -0
  173. package/.medusa/server/src/workflows/statistics/utils/dependency-graph.d.ts +51 -0
  174. package/.medusa/server/src/workflows/statistics/utils/dependency-graph.js +131 -0
  175. package/.medusa/server/src/workflows/statistics/utils/parameter-utils.d.ts +54 -0
  176. package/.medusa/server/src/workflows/statistics/utils/parameter-utils.js +147 -0
  177. package/.medusa/server/src/workflows/statistics/validate-option-configuration.d.ts +9 -0
  178. package/.medusa/server/src/workflows/statistics/validate-option-configuration.js +35 -0
  179. package/README.md +310 -0
  180. 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,6 @@
1
+ /**
2
+ * Utility functions for creating and aggregating time series data.
3
+ * These helpers optimize performance by sorting data once and iterating sequentially (O(n+m))
4
+ * instead of repeatedly filtering (O(n*m)).
5
+ */
6
+ export {};
@@ -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=
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@medusajs/types").ModuleProviderExports;
2
+ export default _default;