@grnsft/if 0.4.0-beta.0 → 0.4.0

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 (181) hide show
  1. package/CONTRIBUTING.md +3 -0
  2. package/README.md +6 -0
  3. package/build/builtins/coefficient/index.d.ts +3 -0
  4. package/build/builtins/coefficient/index.js +51 -0
  5. package/build/builtins/coefficient/types.d.ts +5 -0
  6. package/build/builtins/coefficient/types.js +3 -0
  7. package/build/builtins/csv-lookup/index.d.ts +2 -0
  8. package/build/builtins/csv-lookup/index.js +181 -0
  9. package/build/builtins/divide/index.d.ts +2 -0
  10. package/build/builtins/divide/index.js +67 -0
  11. package/build/builtins/exponent/index.d.ts +3 -0
  12. package/build/builtins/exponent/index.js +72 -0
  13. package/build/builtins/exponent/types.d.ts +5 -0
  14. package/build/builtins/exponent/types.js +3 -0
  15. package/build/builtins/export-csv-raw.js +4 -1
  16. package/build/builtins/export-csv.js +4 -1
  17. package/build/builtins/export-log.js +4 -2
  18. package/build/builtins/export-yaml.js +4 -1
  19. package/build/builtins/index.d.ts +13 -0
  20. package/build/builtins/index.js +28 -2
  21. package/build/builtins/interpolation/index.d.ts +2 -0
  22. package/build/builtins/interpolation/index.js +146 -0
  23. package/build/builtins/interpolation/types.d.ts +5 -0
  24. package/build/builtins/interpolation/types.js +10 -0
  25. package/build/builtins/mock-observations/helpers/common-generator.d.ts +3 -0
  26. package/build/builtins/mock-observations/helpers/common-generator.js +32 -0
  27. package/build/builtins/mock-observations/helpers/rand-int-generator.d.ts +3 -0
  28. package/build/builtins/mock-observations/helpers/rand-int-generator.js +58 -0
  29. package/build/builtins/mock-observations/index.d.ts +3 -0
  30. package/build/builtins/mock-observations/index.js +116 -0
  31. package/build/builtins/mock-observations/interfaces/index.d.ts +6 -0
  32. package/build/builtins/mock-observations/interfaces/index.js +3 -0
  33. package/build/builtins/mock-observations/types.d.ts +13 -0
  34. package/build/builtins/mock-observations/types.js +3 -0
  35. package/build/builtins/multiply/index.d.ts +3 -0
  36. package/build/builtins/multiply/index.js +63 -0
  37. package/build/builtins/multiply/types.d.ts +4 -0
  38. package/build/builtins/multiply/types.js +3 -0
  39. package/build/builtins/regex/index.d.ts +3 -0
  40. package/build/builtins/regex/index.js +78 -0
  41. package/build/builtins/sci/config.d.ts +1 -0
  42. package/build/builtins/sci/config.js +44 -0
  43. package/build/builtins/sci/index.d.ts +3 -0
  44. package/build/builtins/sci/index.js +69 -0
  45. package/build/builtins/sci-embodied/index.d.ts +2 -0
  46. package/build/builtins/sci-embodied/index.js +115 -0
  47. package/build/builtins/shell/index.d.ts +3 -0
  48. package/build/builtins/shell/index.js +58 -0
  49. package/build/builtins/subtract/index.d.ts +3 -0
  50. package/build/builtins/subtract/index.js +75 -0
  51. package/build/builtins/subtract/types.d.ts +4 -0
  52. package/build/builtins/subtract/types.js +3 -0
  53. package/build/builtins/sum/index.d.ts +3 -0
  54. package/build/builtins/sum/index.js +61 -0
  55. package/build/builtins/sum/types.d.ts +4 -0
  56. package/build/builtins/sum/types.js +3 -0
  57. package/build/config/config.d.ts +8 -2
  58. package/build/config/config.js +34 -1
  59. package/build/config/strings.d.ts +22 -0
  60. package/build/config/strings.js +23 -1
  61. package/build/diff.d.ts +2 -0
  62. package/build/diff.js +46 -0
  63. package/build/index.js +8 -4
  64. package/build/lib/aggregate.js +5 -1
  65. package/build/lib/compare.d.ts +10 -0
  66. package/build/lib/compare.js +56 -0
  67. package/build/lib/compute.js +9 -1
  68. package/build/lib/environment.js +9 -3
  69. package/build/lib/exhaust.js +3 -2
  70. package/build/lib/initialize.js +5 -2
  71. package/build/lib/load.d.ts +48 -0
  72. package/build/lib/load.js +49 -2
  73. package/build/lib/parameterize.js +8 -4
  74. package/build/types/common.d.ts +4 -0
  75. package/build/types/common.js +3 -0
  76. package/build/types/helpers.d.ts +4 -0
  77. package/build/types/helpers.js +3 -0
  78. package/build/types/interface.d.ts +2 -1
  79. package/build/types/interface.js +1 -1
  80. package/build/types/lib/compare.d.ts +7 -0
  81. package/build/types/lib/compare.js +3 -0
  82. package/build/types/process-args.d.ts +7 -1
  83. package/build/types/process-args.js +1 -1
  84. package/build/types/util/args.d.ts +5 -0
  85. package/build/types/util/args.js +3 -0
  86. package/build/util/args.d.ts +7 -2
  87. package/build/util/args.js +49 -11
  88. package/build/util/debug-logger.d.ts +4 -0
  89. package/build/util/debug-logger.js +117 -0
  90. package/build/util/errors.d.ts +1 -1
  91. package/build/util/errors.js +6 -1
  92. package/build/util/helpers.d.ts +23 -0
  93. package/build/util/helpers.js +116 -2
  94. package/build/util/log-memoize.d.ts +1 -1
  95. package/build/util/log-memoize.js +1 -1
  96. package/build/util/validations.d.ts +59 -51
  97. package/build/util/validations.js +49 -18
  98. package/github-processes.md +39 -0
  99. package/package.json +1 -1
  100. package/.env +0 -5
  101. package/coverage/clover.xml +0 -1590
  102. package/coverage/coverage-final.json +0 -50
  103. package/coverage/lcov-report/base.css +0 -224
  104. package/coverage/lcov-report/block-navigation.js +0 -87
  105. package/coverage/lcov-report/builtins/coefficient/index.html +0 -116
  106. package/coverage/lcov-report/builtins/coefficient/index.ts.html +0 -295
  107. package/coverage/lcov-report/builtins/csv-lookup/index.html +0 -116
  108. package/coverage/lcov-report/builtins/csv-lookup/index.ts.html +0 -832
  109. package/coverage/lcov-report/builtins/divide/index.html +0 -116
  110. package/coverage/lcov-report/builtins/divide/index.ts.html +0 -361
  111. package/coverage/lcov-report/builtins/exponent/index.html +0 -116
  112. package/coverage/lcov-report/builtins/exponent/index.ts.html +0 -355
  113. package/coverage/lcov-report/builtins/export-csv-raw.ts.html +0 -553
  114. package/coverage/lcov-report/builtins/export-csv.ts.html +0 -433
  115. package/coverage/lcov-report/builtins/export-log.ts.html +0 -145
  116. package/coverage/lcov-report/builtins/export-yaml.ts.html +0 -184
  117. package/coverage/lcov-report/builtins/group-by.ts.html +0 -364
  118. package/coverage/lcov-report/builtins/index.html +0 -206
  119. package/coverage/lcov-report/builtins/index.ts.html +0 -130
  120. package/coverage/lcov-report/builtins/interpolation/index.html +0 -131
  121. package/coverage/lcov-report/builtins/interpolation/index.ts.html +0 -670
  122. package/coverage/lcov-report/builtins/interpolation/types.ts.html +0 -100
  123. package/coverage/lcov-report/builtins/mock-observations/helpers/common-generator.ts.html +0 -181
  124. package/coverage/lcov-report/builtins/mock-observations/helpers/index.html +0 -131
  125. package/coverage/lcov-report/builtins/mock-observations/helpers/rand-int-generator.ts.html +0 -295
  126. package/coverage/lcov-report/builtins/mock-observations/index.html +0 -116
  127. package/coverage/lcov-report/builtins/mock-observations/index.ts.html +0 -613
  128. package/coverage/lcov-report/builtins/multiply/index.html +0 -116
  129. package/coverage/lcov-report/builtins/multiply/index.ts.html +0 -337
  130. package/coverage/lcov-report/builtins/regex/index.html +0 -116
  131. package/coverage/lcov-report/builtins/regex/index.ts.html +0 -379
  132. package/coverage/lcov-report/builtins/sci/config.ts.html +0 -205
  133. package/coverage/lcov-report/builtins/sci/index.html +0 -116
  134. package/coverage/lcov-report/builtins/sci/index.ts.html +0 -331
  135. package/coverage/lcov-report/builtins/sci-embodied/index.html +0 -116
  136. package/coverage/lcov-report/builtins/sci-embodied/index.ts.html +0 -481
  137. package/coverage/lcov-report/builtins/shell/index.html +0 -116
  138. package/coverage/lcov-report/builtins/shell/index.ts.html +0 -283
  139. package/coverage/lcov-report/builtins/subtract/index.html +0 -116
  140. package/coverage/lcov-report/builtins/subtract/index.ts.html +0 -373
  141. package/coverage/lcov-report/builtins/sum/index.html +0 -116
  142. package/coverage/lcov-report/builtins/sum/index.ts.html +0 -340
  143. package/coverage/lcov-report/builtins/time-sync.ts.html +0 -1459
  144. package/coverage/lcov-report/config/config.ts.html +0 -334
  145. package/coverage/lcov-report/config/index.html +0 -161
  146. package/coverage/lcov-report/config/index.ts.html +0 -94
  147. package/coverage/lcov-report/config/params.ts.html +0 -697
  148. package/coverage/lcov-report/config/strings.ts.html +0 -415
  149. package/coverage/lcov-report/favicon.png +0 -0
  150. package/coverage/lcov-report/index.html +0 -386
  151. package/coverage/lcov-report/lib/aggregate.ts.html +0 -331
  152. package/coverage/lcov-report/lib/compare.ts.html +0 -283
  153. package/coverage/lcov-report/lib/compute.ts.html +0 -391
  154. package/coverage/lcov-report/lib/environment.ts.html +0 -343
  155. package/coverage/lcov-report/lib/exhaust.ts.html +0 -283
  156. package/coverage/lcov-report/lib/index.html +0 -221
  157. package/coverage/lcov-report/lib/initialize.ts.html +0 -388
  158. package/coverage/lcov-report/lib/load.ts.html +0 -268
  159. package/coverage/lcov-report/lib/parameterize.ts.html +0 -283
  160. package/coverage/lcov-report/prettify.css +0 -1
  161. package/coverage/lcov-report/prettify.js +0 -2
  162. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  163. package/coverage/lcov-report/sorter.js +0 -196
  164. package/coverage/lcov-report/types/aggregation.ts.html +0 -94
  165. package/coverage/lcov-report/types/index.html +0 -146
  166. package/coverage/lcov-report/types/interface.ts.html +0 -181
  167. package/coverage/lcov-report/types/parameters.ts.html +0 -106
  168. package/coverage/lcov-report/util/aggregation-helper.ts.html +0 -286
  169. package/coverage/lcov-report/util/args.ts.html +0 -508
  170. package/coverage/lcov-report/util/errors.ts.html +0 -232
  171. package/coverage/lcov-report/util/helpers.ts.html +0 -613
  172. package/coverage/lcov-report/util/index.html +0 -266
  173. package/coverage/lcov-report/util/json.ts.html +0 -115
  174. package/coverage/lcov-report/util/log-memoize.ts.html +0 -145
  175. package/coverage/lcov-report/util/logger.ts.html +0 -151
  176. package/coverage/lcov-report/util/os-checker.ts.html +0 -421
  177. package/coverage/lcov-report/util/plugin-storage.ts.html +0 -199
  178. package/coverage/lcov-report/util/validations.ts.html +0 -526
  179. package/coverage/lcov-report/util/yaml.ts.html +0 -193
  180. package/coverage/lcov.info +0 -2811
  181. package/src/__tests__/integration/manifest/sci-e.yaml +0 -23
@@ -34,9 +34,11 @@ const ExportLog = () => {
34
34
  ...context,
35
35
  tree,
36
36
  };
37
- console.log(YAML.dump(outputFile, { noRefs: true }));
37
+ console.log(`# start
38
+ ${YAML.dump(outputFile, { noRefs: true })}
39
+ # end`);
38
40
  };
39
41
  return { execute };
40
42
  };
41
43
  exports.ExportLog = ExportLog;
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsdGlucy9leHBvcnQtbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOENBQWdDO0FBR3pCLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRTtJQUM1Qjs7T0FFRztJQUNILE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxJQUFTLEVBQUUsT0FBZ0IsRUFBRSxFQUFFO1FBQ3BELE1BQU0sVUFBVSxHQUFHO1lBQ2pCLEdBQUcsT0FBTztZQUNWLElBQUk7U0FDTCxDQUFDO1FBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQyxDQUFDO0lBRUYsT0FBTyxFQUFDLE9BQU8sRUFBQyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQWJXLFFBQUEsU0FBUyxhQWFwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFlBTUwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uL3R5cGVzL21hbmlmZXN0JztcblxuZXhwb3J0IGNvbnN0IEV4cG9ydExvZyA9ICgpID0+IHtcbiAgLyoqXG4gICAqIExvZ3Mgb3V0cHV0IG1hbmlmZXN0IGluIGNvbnNvbGUuXG4gICAqL1xuICBjb25zdCBleGVjdXRlID0gYXN5bmMgKHRyZWU6IGFueSwgY29udGV4dDogQ29udGV4dCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dEZpbGUgPSB7XG4gICAgICAuLi5jb250ZXh0LFxuICAgICAgdHJlZSxcbiAgICB9O1xuICAgIGNvbnNvbGUubG9nKFlBTUwuZHVtcChvdXRwdXRGaWxlLCB7bm9SZWZzOiB0cnVlfSkpO1xuICB9O1xuXG4gIHJldHVybiB7ZXhlY3V0ZX07XG59O1xuIl19
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsdGlucy9leHBvcnQtbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOENBQWdDO0FBR3pCLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRTtJQUM1Qjs7T0FFRztJQUNILE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxJQUFTLEVBQUUsT0FBZ0IsRUFBRSxFQUFFO1FBQ3BELE1BQU0sVUFBVSxHQUFHO1lBQ2pCLEdBQUcsT0FBTztZQUNWLElBQUk7U0FDTCxDQUFDO1FBRUYsT0FBTyxDQUFDLEdBQUcsQ0FBQztFQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDO01BQ2pDLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztJQUVGLE9BQU8sRUFBQyxPQUFPLEVBQUMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFoQlcsUUFBQSxTQUFTLGFBZ0JwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFlBTUwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uL3R5cGVzL21hbmlmZXN0JztcblxuZXhwb3J0IGNvbnN0IEV4cG9ydExvZyA9ICgpID0+IHtcbiAgLyoqXG4gICAqIExvZ3Mgb3V0cHV0IG1hbmlmZXN0IGluIGNvbnNvbGUuXG4gICAqL1xuICBjb25zdCBleGVjdXRlID0gYXN5bmMgKHRyZWU6IGFueSwgY29udGV4dDogQ29udGV4dCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dEZpbGUgPSB7XG4gICAgICAuLi5jb250ZXh0LFxuICAgICAgdHJlZSxcbiAgICB9O1xuXG4gICAgY29uc29sZS5sb2coYCMgc3RhcnRcbiR7WUFNTC5kdW1wKG91dHB1dEZpbGUsIHtub1JlZnM6IHRydWV9KX1cbiMgZW5kYCk7XG4gIH07XG5cbiAgcmV0dXJuIHtleGVjdXRlfTtcbn07XG4iXX0=
@@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ExportYaml = void 0;
4
4
  const yaml_1 = require("../util/yaml");
5
5
  const errors_1 = require("../util/errors");
6
+ const strings_1 = require("../config/strings");
6
7
  const { ExhaustError } = errors_1.ERRORS;
8
+ const { EXPORTING_TO_YAML_FILE } = strings_1.STRINGS;
7
9
  const ExportYaml = () => {
8
10
  /** Takes string before hashtag. */
9
11
  const stripHashtag = (path) => path.split('#')[0];
@@ -19,9 +21,10 @@ const ExportYaml = () => {
19
21
  tree,
20
22
  };
21
23
  const path = stripHashtag(outputPath);
24
+ console.debug(EXPORTING_TO_YAML_FILE(path));
22
25
  await (0, yaml_1.saveYamlFileAs)(outputFile, `${path}.yaml`);
23
26
  };
24
27
  return { execute };
25
28
  };
26
29
  exports.ExportYaml = ExportYaml;
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LXlhbWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVpbHRpbnMvZXhwb3J0LXlhbWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQTRDO0FBQzVDLDJDQUFzQztBQUl0QyxNQUFNLEVBQUMsWUFBWSxFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRXZCLE1BQU0sVUFBVSxHQUFHLEdBQUcsRUFBRTtJQUM3QixtQ0FBbUM7SUFDbkMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFMUQ7O09BRUc7SUFDSCxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsSUFBUyxFQUFFLE9BQWdCLEVBQUUsVUFBa0IsRUFBRSxFQUFFO1FBQ3hFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixNQUFNLElBQUksWUFBWSxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDcEQ7UUFFRCxNQUFNLFVBQVUsR0FBRztZQUNqQixHQUFHLE9BQU87WUFDVixJQUFJO1NBQ0wsQ0FBQztRQUNGLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV0QyxNQUFNLElBQUEscUJBQWMsRUFBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELENBQUMsQ0FBQztJQUVGLE9BQU8sRUFBQyxPQUFPLEVBQUMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUF0QlcsUUFBQSxVQUFVLGNBc0JyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c2F2ZVlhbWxGaWxlQXN9IGZyb20gJy4uL3V0aWwveWFtbCc7XG5pbXBvcnQge0VSUk9SU30gZnJvbSAnLi4vdXRpbC9lcnJvcnMnO1xuXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uL3R5cGVzL21hbmlmZXN0JztcblxuY29uc3Qge0V4aGF1c3RFcnJvcn0gPSBFUlJPUlM7XG5cbmV4cG9ydCBjb25zdCBFeHBvcnRZYW1sID0gKCkgPT4ge1xuICAvKiogVGFrZXMgc3RyaW5nIGJlZm9yZSBoYXNodGFnLiAqL1xuICBjb25zdCBzdHJpcEhhc2h0YWcgPSAocGF0aDogc3RyaW5nKSA9PiBwYXRoLnNwbGl0KCcjJylbMF07XG5cbiAgLyoqXG4gICAqIFNhdmVzIG91dHB1dCBmaWxlIGluIFlBTUwgZm9ybWF0LlxuICAgKi9cbiAgY29uc3QgZXhlY3V0ZSA9IGFzeW5jICh0cmVlOiBhbnksIGNvbnRleHQ6IENvbnRleHQsIG91dHB1dFBhdGg6IHN0cmluZykgPT4ge1xuICAgIGlmICghb3V0cHV0UGF0aCkge1xuICAgICAgdGhyb3cgbmV3IEV4aGF1c3RFcnJvcignT3V0cHV0IHBhdGggaXMgcmVxdWlyZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0RmlsZSA9IHtcbiAgICAgIC4uLmNvbnRleHQsXG4gICAgICB0cmVlLFxuICAgIH07XG4gICAgY29uc3QgcGF0aCA9IHN0cmlwSGFzaHRhZyhvdXRwdXRQYXRoKTtcblxuICAgIGF3YWl0IHNhdmVZYW1sRmlsZUFzKG91dHB1dEZpbGUsIGAke3BhdGh9LnlhbWxgKTtcbiAgfTtcblxuICByZXR1cm4ge2V4ZWN1dGV9O1xufTtcbiJdfQ==
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LXlhbWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVpbHRpbnMvZXhwb3J0LXlhbWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQTRDO0FBQzVDLDJDQUFzQztBQUl0QywrQ0FBMEM7QUFFMUMsTUFBTSxFQUFDLFlBQVksRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUM5QixNQUFNLEVBQUMsc0JBQXNCLEVBQUMsR0FBRyxpQkFBTyxDQUFDO0FBRWxDLE1BQU0sVUFBVSxHQUFHLEdBQUcsRUFBRTtJQUM3QixtQ0FBbUM7SUFDbkMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFMUQ7O09BRUc7SUFDSCxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsSUFBUyxFQUFFLE9BQWdCLEVBQUUsVUFBa0IsRUFBRSxFQUFFO1FBQ3hFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixNQUFNLElBQUksWUFBWSxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDcEQ7UUFFRCxNQUFNLFVBQVUsR0FBRztZQUNqQixHQUFHLE9BQU87WUFDVixJQUFJO1NBQ0wsQ0FBQztRQUNGLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV0QyxPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFNUMsTUFBTSxJQUFBLHFCQUFjLEVBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUM7SUFFRixPQUFPLEVBQUMsT0FBTyxFQUFDLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBeEJXLFFBQUEsVUFBVSxjQXdCckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3NhdmVZYW1sRmlsZUFzfSBmcm9tICcuLi91dGlsL3lhbWwnO1xuaW1wb3J0IHtFUlJPUlN9IGZyb20gJy4uL3V0aWwvZXJyb3JzJztcblxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi90eXBlcy9tYW5pZmVzdCc7XG5cbmltcG9ydCB7U1RSSU5HU30gZnJvbSAnLi4vY29uZmlnL3N0cmluZ3MnO1xuXG5jb25zdCB7RXhoYXVzdEVycm9yfSA9IEVSUk9SUztcbmNvbnN0IHtFWFBPUlRJTkdfVE9fWUFNTF9GSUxFfSA9IFNUUklOR1M7XG5cbmV4cG9ydCBjb25zdCBFeHBvcnRZYW1sID0gKCkgPT4ge1xuICAvKiogVGFrZXMgc3RyaW5nIGJlZm9yZSBoYXNodGFnLiAqL1xuICBjb25zdCBzdHJpcEhhc2h0YWcgPSAocGF0aDogc3RyaW5nKSA9PiBwYXRoLnNwbGl0KCcjJylbMF07XG5cbiAgLyoqXG4gICAqIFNhdmVzIG91dHB1dCBmaWxlIGluIFlBTUwgZm9ybWF0LlxuICAgKi9cbiAgY29uc3QgZXhlY3V0ZSA9IGFzeW5jICh0cmVlOiBhbnksIGNvbnRleHQ6IENvbnRleHQsIG91dHB1dFBhdGg6IHN0cmluZykgPT4ge1xuICAgIGlmICghb3V0cHV0UGF0aCkge1xuICAgICAgdGhyb3cgbmV3IEV4aGF1c3RFcnJvcignT3V0cHV0IHBhdGggaXMgcmVxdWlyZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0RmlsZSA9IHtcbiAgICAgIC4uLmNvbnRleHQsXG4gICAgICB0cmVlLFxuICAgIH07XG4gICAgY29uc3QgcGF0aCA9IHN0cmlwSGFzaHRhZyhvdXRwdXRQYXRoKTtcblxuICAgIGNvbnNvbGUuZGVidWcoRVhQT1JUSU5HX1RPX1lBTUxfRklMRShwYXRoKSk7XG5cbiAgICBhd2FpdCBzYXZlWWFtbEZpbGVBcyhvdXRwdXRGaWxlLCBgJHtwYXRofS55YW1sYCk7XG4gIH07XG5cbiAgcmV0dXJuIHtleGVjdXRlfTtcbn07XG4iXX0=
@@ -1,2 +1,15 @@
1
1
  export { GroupBy } from './group-by';
2
2
  export { TimeSync } from './time-sync';
3
+ export { Interpolation } from './interpolation';
4
+ export { MockObservations } from './mock-observations';
5
+ export { Divide } from './divide';
6
+ export { Subtract } from './subtract';
7
+ export { Coefficient } from './coefficient';
8
+ export { Multiply } from './multiply';
9
+ export { Sum } from './sum';
10
+ export { SciEmbodied } from './sci-embodied';
11
+ export { Sci } from './sci';
12
+ export { Exponent } from './exponent';
13
+ export { CSVLookup } from './csv-lookup';
14
+ export { Shell } from './shell';
15
+ export { Regex } from './regex';
@@ -1,8 +1,34 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TimeSync = exports.GroupBy = void 0;
3
+ exports.Regex = exports.Shell = exports.CSVLookup = exports.Exponent = exports.Sci = exports.SciEmbodied = exports.Sum = exports.Multiply = exports.Coefficient = exports.Subtract = exports.Divide = exports.MockObservations = exports.Interpolation = exports.TimeSync = exports.GroupBy = void 0;
4
4
  var group_by_1 = require("./group-by");
5
5
  Object.defineProperty(exports, "GroupBy", { enumerable: true, get: function () { return group_by_1.GroupBy; } });
6
6
  var time_sync_1 = require("./time-sync");
7
7
  Object.defineProperty(exports, "TimeSync", { enumerable: true, get: function () { return time_sync_1.TimeSync; } });
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVpbHRpbnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQW1DO0FBQTNCLG1HQUFBLE9BQU8sT0FBQTtBQUNmLHlDQUFxQztBQUE3QixxR0FBQSxRQUFRLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge0dyb3VwQnl9IGZyb20gJy4vZ3JvdXAtYnknO1xuZXhwb3J0IHtUaW1lU3luY30gZnJvbSAnLi90aW1lLXN5bmMnO1xuIl19
8
+ var interpolation_1 = require("./interpolation");
9
+ Object.defineProperty(exports, "Interpolation", { enumerable: true, get: function () { return interpolation_1.Interpolation; } });
10
+ var mock_observations_1 = require("./mock-observations");
11
+ Object.defineProperty(exports, "MockObservations", { enumerable: true, get: function () { return mock_observations_1.MockObservations; } });
12
+ var divide_1 = require("./divide");
13
+ Object.defineProperty(exports, "Divide", { enumerable: true, get: function () { return divide_1.Divide; } });
14
+ var subtract_1 = require("./subtract");
15
+ Object.defineProperty(exports, "Subtract", { enumerable: true, get: function () { return subtract_1.Subtract; } });
16
+ var coefficient_1 = require("./coefficient");
17
+ Object.defineProperty(exports, "Coefficient", { enumerable: true, get: function () { return coefficient_1.Coefficient; } });
18
+ var multiply_1 = require("./multiply");
19
+ Object.defineProperty(exports, "Multiply", { enumerable: true, get: function () { return multiply_1.Multiply; } });
20
+ var sum_1 = require("./sum");
21
+ Object.defineProperty(exports, "Sum", { enumerable: true, get: function () { return sum_1.Sum; } });
22
+ var sci_embodied_1 = require("./sci-embodied");
23
+ Object.defineProperty(exports, "SciEmbodied", { enumerable: true, get: function () { return sci_embodied_1.SciEmbodied; } });
24
+ var sci_1 = require("./sci");
25
+ Object.defineProperty(exports, "Sci", { enumerable: true, get: function () { return sci_1.Sci; } });
26
+ var exponent_1 = require("./exponent");
27
+ Object.defineProperty(exports, "Exponent", { enumerable: true, get: function () { return exponent_1.Exponent; } });
28
+ var csv_lookup_1 = require("./csv-lookup");
29
+ Object.defineProperty(exports, "CSVLookup", { enumerable: true, get: function () { return csv_lookup_1.CSVLookup; } });
30
+ var shell_1 = require("./shell");
31
+ Object.defineProperty(exports, "Shell", { enumerable: true, get: function () { return shell_1.Shell; } });
32
+ var regex_1 = require("./regex");
33
+ Object.defineProperty(exports, "Regex", { enumerable: true, get: function () { return regex_1.Regex; } });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVpbHRpbnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQW1DO0FBQTNCLG1HQUFBLE9BQU8sT0FBQTtBQUNmLHlDQUFxQztBQUE3QixxR0FBQSxRQUFRLE9BQUE7QUFDaEIsaURBQThDO0FBQXRDLDhHQUFBLGFBQWEsT0FBQTtBQUNyQix5REFBcUQ7QUFBN0MscUhBQUEsZ0JBQWdCLE9BQUE7QUFDeEIsbUNBQWdDO0FBQXhCLGdHQUFBLE1BQU0sT0FBQTtBQUNkLHVDQUFvQztBQUE1QixvR0FBQSxRQUFRLE9BQUE7QUFDaEIsNkNBQTBDO0FBQWxDLDBHQUFBLFdBQVcsT0FBQTtBQUNuQix1Q0FBb0M7QUFBNUIsb0dBQUEsUUFBUSxPQUFBO0FBQ2hCLDZCQUEwQjtBQUFsQiwwRkFBQSxHQUFHLE9BQUE7QUFDWCwrQ0FBMkM7QUFBbkMsMkdBQUEsV0FBVyxPQUFBO0FBQ25CLDZCQUEwQjtBQUFsQiwwRkFBQSxHQUFHLE9BQUE7QUFDWCx1Q0FBb0M7QUFBNUIsb0dBQUEsUUFBUSxPQUFBO0FBQ2hCLDJDQUF1QztBQUEvQix1R0FBQSxTQUFTLE9BQUE7QUFDakIsaUNBQThCO0FBQXRCLDhGQUFBLEtBQUssT0FBQTtBQUNiLGlDQUE4QjtBQUF0Qiw4RkFBQSxLQUFLLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge0dyb3VwQnl9IGZyb20gJy4vZ3JvdXAtYnknO1xuZXhwb3J0IHtUaW1lU3luY30gZnJvbSAnLi90aW1lLXN5bmMnO1xuZXhwb3J0IHtJbnRlcnBvbGF0aW9ufSBmcm9tICcuL2ludGVycG9sYXRpb24nO1xuZXhwb3J0IHtNb2NrT2JzZXJ2YXRpb25zfSBmcm9tICcuL21vY2stb2JzZXJ2YXRpb25zJztcbmV4cG9ydCB7RGl2aWRlfSBmcm9tICcuL2RpdmlkZSc7XG5leHBvcnQge1N1YnRyYWN0fSBmcm9tICcuL3N1YnRyYWN0JztcbmV4cG9ydCB7Q29lZmZpY2llbnR9IGZyb20gJy4vY29lZmZpY2llbnQnO1xuZXhwb3J0IHtNdWx0aXBseX0gZnJvbSAnLi9tdWx0aXBseSc7XG5leHBvcnQge1N1bX0gZnJvbSAnLi9zdW0nO1xuZXhwb3J0IHtTY2lFbWJvZGllZH0gZnJvbSAnLi9zY2ktZW1ib2RpZWQnO1xuZXhwb3J0IHtTY2l9IGZyb20gJy4vc2NpJztcbmV4cG9ydCB7RXhwb25lbnR9IGZyb20gJy4vZXhwb25lbnQnO1xuZXhwb3J0IHtDU1ZMb29rdXB9IGZyb20gJy4vY3N2LWxvb2t1cCc7XG5leHBvcnQge1NoZWxsfSBmcm9tICcuL3NoZWxsJztcbmV4cG9ydCB7UmVnZXh9IGZyb20gJy4vcmVnZXgnO1xuIl19
@@ -0,0 +1,2 @@
1
+ import { ExecutePlugin, ConfigParams } from '../../types/interface';
2
+ export declare const Interpolation: (globalConfig: ConfigParams) => ExecutePlugin;
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Interpolation = void 0;
7
+ const typescript_cubic_spline_1 = __importDefault(require("typescript-cubic-spline"));
8
+ const zod_1 = require("zod");
9
+ const validations_1 = require("../../util/validations");
10
+ const errors_1 = require("../../util/errors");
11
+ const types_1 = require("./types");
12
+ const { ConfigNotFoundError } = errors_1.ERRORS;
13
+ const Interpolation = (globalConfig) => {
14
+ /**
15
+ * Executes the energy consumption calculation for an array of input parameters.
16
+ */
17
+ const execute = (inputs) => {
18
+ const validatedConfig = validateConfig();
19
+ return inputs.map((input, index) => {
20
+ const safeInput = validateInput(input, index);
21
+ const result = calculateResult(validatedConfig, safeInput);
22
+ return {
23
+ ...input,
24
+ [validatedConfig['output-parameter']]: result,
25
+ };
26
+ });
27
+ };
28
+ /**
29
+ * Calculates the appropriate interpolation value based on the specified method type in the config and input parameters.
30
+ */
31
+ const calculateResult = (config, input) => {
32
+ const methodType = {
33
+ linear: getLinearInterpolation(config, input),
34
+ spline: getSplineInterpolation(config, input),
35
+ polynomial: getPolynomialInterpolation(config, input),
36
+ };
37
+ return methodType[config.method];
38
+ };
39
+ /**
40
+ * Calculates the interpolation when the method is linear.
41
+ */
42
+ const getLinearInterpolation = (config, input) => {
43
+ const parameter = input[globalConfig['input-parameter']];
44
+ const xPoints = config.x;
45
+ const yPoints = config.y;
46
+ const result = xPoints.reduce((acc, xPoint, i) => {
47
+ if (parameter === xPoint) {
48
+ acc.baseCpu = xPoint;
49
+ acc.baseRate = yPoints[i];
50
+ }
51
+ else if (parameter > xPoint && parameter < xPoints[i + 1]) {
52
+ acc.baseCpu = xPoint;
53
+ acc.baseRate = yPoints[i];
54
+ acc.ratio = (yPoints[i + 1] - yPoints[i]) / (xPoints[i + 1] - xPoint);
55
+ }
56
+ return acc;
57
+ }, { baseRate: 0, baseCpu: 0, ratio: 0 });
58
+ return result.baseRate + (parameter - result.baseCpu) * result.ratio;
59
+ };
60
+ /**
61
+ * Calculates the interpolation when the method is spline.
62
+ */
63
+ const getSplineInterpolation = (config, input) => {
64
+ const parameter = input[globalConfig['input-parameter']];
65
+ const xPoints = config.x;
66
+ const yPoints = config.y;
67
+ const spline = new typescript_cubic_spline_1.default(xPoints, yPoints);
68
+ return spline.at(parameter);
69
+ };
70
+ /**
71
+ * Calculates the interpolation when the method is polynomial.
72
+ */
73
+ const getPolynomialInterpolation = (config, input) => {
74
+ const parameter = input[globalConfig['input-parameter']];
75
+ const xPoints = config.x;
76
+ const yPoints = config.y;
77
+ const result = xPoints.reduce((acc, x, i) => {
78
+ const term = yPoints[i] *
79
+ xPoints.reduce((prod, xPoint, j) => {
80
+ if (j !== i) {
81
+ return (prod * (parameter - xPoint)) / (x - xPoint);
82
+ }
83
+ return prod;
84
+ }, 1);
85
+ return acc + term;
86
+ }, 0);
87
+ return result;
88
+ };
89
+ /**
90
+ * Validates global config parameters.
91
+ * Sorts elements of `x` and `y`.
92
+ */
93
+ const validateConfig = () => {
94
+ if (!globalConfig) {
95
+ throw new ConfigNotFoundError('Global config is not provided.');
96
+ }
97
+ const schema = zod_1.z
98
+ .object({
99
+ method: zod_1.z.nativeEnum(types_1.Method),
100
+ x: zod_1.z.array(zod_1.z.number()),
101
+ y: zod_1.z.array(zod_1.z.number()),
102
+ 'input-parameter': zod_1.z.string(),
103
+ 'output-parameter': zod_1.z.string(),
104
+ })
105
+ .refine(data => data.x && data.y && data.x.length === data.y.length, {
106
+ message: 'The length of `x` and `y` should be equal',
107
+ })
108
+ .refine(data => data.x.length > 1 && data.y.length > 1, {
109
+ message: 'the length of the input arrays must be greater than 1',
110
+ });
111
+ const defaultMethod = globalConfig.method ?? types_1.Method.LINEAR;
112
+ const updatedConfig = Object.assign({}, { method: defaultMethod }, globalConfig, {
113
+ x: sortPoints(globalConfig.x),
114
+ y: sortPoints(globalConfig.y),
115
+ });
116
+ return (0, validations_1.validate)(schema, updatedConfig);
117
+ };
118
+ const sortPoints = (items) => items.sort((a, b) => {
119
+ return a - b;
120
+ });
121
+ /**
122
+ * Validates inputes parameters.
123
+ */
124
+ const validateInput = (input, index) => {
125
+ const inputParameter = globalConfig['input-parameter'];
126
+ const schema = zod_1.z
127
+ .object({
128
+ timestamp: zod_1.z.string().or(zod_1.z.date()),
129
+ duration: zod_1.z.number(),
130
+ [inputParameter]: zod_1.z.number().gt(0),
131
+ })
132
+ .refine(data => data[inputParameter] >= globalConfig.x[0] &&
133
+ data[inputParameter] <= globalConfig.x[globalConfig.x.length - 1], {
134
+ message: 'The target x value must be within the range of the given x values',
135
+ });
136
+ return (0, validations_1.validate)(schema, input, index);
137
+ };
138
+ return {
139
+ metadata: {
140
+ kind: 'execute',
141
+ },
142
+ execute,
143
+ };
144
+ };
145
+ exports.Interpolation = Interpolation;
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvaW50ZXJwb2xhdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzRkFBNkM7QUFDN0MsNkJBQXNCO0FBSXRCLHdEQUFnRDtBQUNoRCw4Q0FBeUM7QUFFekMsbUNBQStCO0FBRS9CLE1BQU0sRUFBQyxtQkFBbUIsRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUU5QixNQUFNLGFBQWEsR0FBRyxDQUFDLFlBQTBCLEVBQWlCLEVBQUU7SUFDekU7O09BRUc7SUFDSCxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQXNCLEVBQUUsRUFBRTtRQUN6QyxNQUFNLGVBQWUsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUV6QyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDakMsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5QyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRTNELE9BQU87Z0JBQ0wsR0FBRyxLQUFLO2dCQUNSLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxNQUFNO2FBQzlDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxlQUFlLEdBQUcsQ0FBQyxNQUFvQixFQUFFLEtBQW1CLEVBQUUsRUFBRTtRQUNwRSxNQUFNLFVBQVUsR0FBNEI7WUFDMUMsTUFBTSxFQUFFLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7WUFDN0MsTUFBTSxFQUFFLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7WUFDN0MsVUFBVSxFQUFFLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7U0FD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QUNELE1BQU0sQ0FDTCxJQUFJLENBQUMsRUFBRSxDQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDbkU7WUFDRSxPQUFPLEVBQ0wsbUVBQW1FO1NBQ3RFLENBQ0YsQ0FBQztRQUVKLE9BQU8sSUFBQSxzQkFBUSxFQUF5QixNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTCxRQUFRLEVBQUU7WUFDUixJQUFJLEVBQUUsU0FBUztTQUNoQjtRQUNELE9BQU87S0FDUixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBL0tXLFFBQUEsYUFBYSxpQkErS3hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFNwbGluZSBmcm9tICd0eXBlc2NyaXB0LWN1YmljLXNwbGluZSc7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RXhlY3V0ZVBsdWdpbiwgUGx1Z2luUGFyYW1zLCBDb25maWdQYXJhbXN9IGZyb20gJy4uLy4uL3R5cGVzL2ludGVyZmFjZSc7XG5cbmltcG9ydCB7dmFsaWRhdGV9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdGlvbnMnO1xuaW1wb3J0IHtFUlJPUlN9IGZyb20gJy4uLy4uL3V0aWwvZXJyb3JzJztcblxuaW1wb3J0IHtNZXRob2R9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCB7Q29uZmlnTm90Rm91bmRFcnJvcn0gPSBFUlJPUlM7XG5cbmV4cG9ydCBjb25zdCBJbnRlcnBvbGF0aW9uID0gKGdsb2JhbENvbmZpZzogQ29uZmlnUGFyYW1zKTogRXhlY3V0ZVBsdWdpbiA9PiB7XG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgZW5lcmd5IGNvbnN1bXB0aW9uIGNhbGN1bGF0aW9uIGZvciBhbiBhcnJheSBvZiBpbnB1dCBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgY29uc3QgZXhlY3V0ZSA9IChpbnB1dHM6IFBsdWdpblBhcmFtc1tdKSA9PiB7XG4gICAgY29uc3QgdmFsaWRhdGVkQ29uZmlnID0gdmFsaWRhdGVDb25maWcoKTtcblxuICAgIHJldHVybiBpbnB1dHMubWFwKChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHNhZmVJbnB1dCA9IHZhbGlkYXRlSW5wdXQoaW5wdXQsIGluZGV4KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZVJlc3VsdCh2YWxpZGF0ZWRDb25maWcsIHNhZmVJbnB1dCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmlucHV0LFxuICAgICAgICBbdmFsaWRhdGVkQ29uZmlnWydvdXRwdXQtcGFyYW1ldGVyJ11dOiByZXN1bHQsXG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBhcHByb3ByaWF0ZSBpbnRlcnBvbGF0aW9uIHZhbHVlIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgbWV0aG9kIHR5cGUgaW4gdGhlIGNvbmZpZyBhbmQgaW5wdXQgcGFyYW1ldGVycy5cbiAgICovXG4gIGNvbnN0IGNhbGN1bGF0ZVJlc3VsdCA9IChjb25maWc6IENvbmZpZ1BhcmFtcywgaW5wdXQ6IFBsdWdpblBhcmFtcykgPT4ge1xuICAgIGNvbnN0IG1ldGhvZFR5cGU6IHtba2V5OiBzdHJpbmddOiBudW1iZXJ9ID0ge1xuICAgICAgbGluZWFyOiBnZXRMaW5lYXJJbnRlcnBvbGF0aW9uKGNvbmZpZywgaW5wdXQpLFxuICAgICAgc3BsaW5lOiBnZXRTcGxpbmVJbnRlcnBvbGF0aW9uKGNvbmZpZywgaW5wdXQpLFxuICAgICAgcG9seW5vbWlhbDogZ2V0UG9seW5vbWlhbEludGVycG9sYXRpb24oY29uZmlnLCBpbnB1dCksXG4gICAgfTtcblxuICAgIHJldHVybiBtZXRob2RUeXBlW2NvbmZpZy5tZXRob2RdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBpbnRlcnBvbGF0aW9uIHdoZW4gdGhlIG1ldGhvZCBpcyBsaW5lYXIuXG4gICAqL1xuICBjb25zdCBnZXRMaW5lYXJJbnRlcnBvbGF0aW9uID0gKFxuICAgIGNvbmZpZzogQ29uZmlnUGFyYW1zLFxuICAgIGlucHV0OiBQbHVnaW5QYXJhbXNcbiAgKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gaW5wdXRbZ2xvYmFsQ29uZmlnWydpbnB1dC1wYXJhbWV0ZXInXV07XG4gICAgY29uc3QgeFBvaW50czogbnVtYmVyW10gPSBjb25maWcueDtcbiAgICBjb25zdCB5UG9pbnRzOiBudW1iZXJbXSA9IGNvbmZpZy55O1xuXG4gICAgY29uc3QgcmVzdWx0ID0geFBvaW50cy5yZWR1Y2UoXG4gICAgICAoYWNjLCB4UG9pbnQsIGkpID0+IHtcbiAgICAgICAgaWYgKHBhcmFtZXRlciA9PT0geFBvaW50KSB7XG4gICAgICAgICAgYWNjLmJhc2VDcHUgPSB4UG9pbnQ7XG4gICAgICAgICAgYWNjLmJhc2VSYXRlID0geVBvaW50c1tpXTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbWV0ZXIgPiB4UG9pbnQgJiYgcGFyYW1ldGVyIDwgeFBvaW50c1tpICsgMV0pIHtcbiAgICAgICAgICBhY2MuYmFzZUNwdSA9IHhQb2ludDtcbiAgICAgICAgICBhY2MuYmFzZVJhdGUgPSB5UG9pbnRzW2ldO1xuICAgICAgICAgIGFjYy5yYXRpbyA9ICh5UG9pbnRzW2kgKyAxXSAtIHlQb2ludHNbaV0pIC8gKHhQb2ludHNbaSArIDFdIC0geFBvaW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAge2Jhc2VSYXRlOiAwLCBiYXNlQ3B1OiAwLCByYXRpbzogMH1cbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5iYXNlUmF0ZSArIChwYXJhbWV0ZXIgLSByZXN1bHQuYmFzZUNwdSkgKiByZXN1bHQucmF0aW87XG4gIH07XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGludGVycG9sYXRpb24gd2hlbiB0aGUgbWV0aG9kIGlzIHNwbGluZS5cbiAgICovXG4gIGNvbnN0IGdldFNwbGluZUludGVycG9sYXRpb24gPSAoXG4gICAgY29uZmlnOiBDb25maWdQYXJhbXMsXG4gICAgaW5wdXQ6IFBsdWdpblBhcmFtc1xuICApID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSBpbnB1dFtnbG9iYWxDb25maWdbJ2lucHV0LXBhcmFtZXRlciddXTtcbiAgICBjb25zdCB4UG9pbnRzOiBudW1iZXJbXSA9IGNvbmZpZy54O1xuICAgIGNvbnN0IHlQb2ludHM6IG51bWJlcltdID0gY29uZmlnLnk7XG4gICAgY29uc3Qgc3BsaW5lOiBhbnkgPSBuZXcgU3BsaW5lKHhQb2ludHMsIHlQb2ludHMpO1xuXG4gICAgcmV0dXJuIHNwbGluZS5hdChwYXJhbWV0ZXIpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBpbnRlcnBvbGF0aW9uIHdoZW4gdGhlIG1ldGhvZCBpcyBwb2x5bm9taWFsLlxuICAgKi9cbiAgY29uc3QgZ2V0UG9seW5vbWlhbEludGVycG9sYXRpb24gPSAoXG4gICAgY29uZmlnOiBDb25maWdQYXJhbXMsXG4gICAgaW5wdXQ6IFBsdWdpblBhcmFtc1xuICApID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSBpbnB1dFtnbG9iYWxDb25maWdbJ2lucHV0LXBhcmFtZXRlciddXTtcbiAgICBjb25zdCB4UG9pbnRzOiBudW1iZXJbXSA9IGNvbmZpZy54O1xuICAgIGNvbnN0IHlQb2ludHM6IG51bWJlcltdID0gY29uZmlnLnk7XG5cbiAgICBjb25zdCByZXN1bHQgPSB4UG9pbnRzLnJlZHVjZSgoYWNjLCB4LCBpKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtID1cbiAgICAgICAgeVBvaW50c1tpXSAqXG4gICAgICAgIHhQb2ludHMucmVkdWNlKChwcm9kLCB4UG9pbnQsIGopID0+IHtcbiAgICAgICAgICBpZiAoaiAhPT0gaSkge1xuICAgICAgICAgICAgcmV0dXJuIChwcm9kICogKHBhcmFtZXRlciAtIHhQb2ludCkpIC8gKHggLSB4UG9pbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcHJvZDtcbiAgICAgICAgfSwgMSk7XG4gICAgICByZXR1cm4gYWNjICsgdGVybTtcbiAgICB9LCAwKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBnbG9iYWwgY29uZmlnIHBhcmFtZXRlcnMuXG4gICAqIFNvcnRzIGVsZW1lbnRzIG9mIGB4YCBhbmQgYHlgLlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVDb25maWcgPSAoKSA9PiB7XG4gICAgaWYgKCFnbG9iYWxDb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBDb25maWdOb3RGb3VuZEVycm9yKCdHbG9iYWwgY29uZmlnIGlzIG5vdCBwcm92aWRlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlbWEgPSB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgbWV0aG9kOiB6Lm5hdGl2ZUVudW0oTWV0aG9kKSxcbiAgICAgICAgeDogei5hcnJheSh6Lm51bWJlcigpKSxcbiAgICAgICAgeTogei5hcnJheSh6Lm51bWJlcigpKSxcbiAgICAgICAgJ2lucHV0LXBhcmFtZXRlcic6IHouc3RyaW5nKCksXG4gICAgICAgICdvdXRwdXQtcGFyYW1ldGVyJzogei5zdHJpbmcoKSxcbiAgICAgIH0pXG4gICAgICAucmVmaW5lKGRhdGEgPT4gZGF0YS54ICYmIGRhdGEueSAmJiBkYXRhLngubGVuZ3RoID09PSBkYXRhLnkubGVuZ3RoLCB7XG4gICAgICAgIG1lc3NhZ2U6ICdUaGUgbGVuZ3RoIG9mIGB4YCBhbmQgYHlgIHNob3VsZCBiZSBlcXVhbCcsXG4gICAgICB9KVxuICAgICAgLnJlZmluZShkYXRhID0+IGRhdGEueC5sZW5ndGggPiAxICYmIGRhdGEueS5sZW5ndGggPiAxLCB7XG4gICAgICAgIG1lc3NhZ2U6ICd0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBhcnJheXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMScsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IGRlZmF1bHRNZXRob2QgPSBnbG9iYWxDb25maWcubWV0aG9kID8/IE1ldGhvZC5MSU5FQVI7XG4gICAgY29uc3QgdXBkYXRlZENvbmZpZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHttZXRob2Q6IGRlZmF1bHRNZXRob2R9LFxuICAgICAgZ2xvYmFsQ29uZmlnLFxuICAgICAge1xuICAgICAgICB4OiBzb3J0UG9pbnRzKGdsb2JhbENvbmZpZy54KSxcbiAgICAgICAgeTogc29ydFBvaW50cyhnbG9iYWxDb25maWcueSksXG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiB2YWxpZGF0ZTx6LmluZmVyPHR5cGVvZiBzY2hlbWE+PihzY2hlbWEsIHVwZGF0ZWRDb25maWcpO1xuICB9O1xuXG4gIGNvbnN0IHNvcnRQb2ludHMgPSAoaXRlbXM6IG51bWJlcltdKSA9PlxuICAgIGl0ZW1zLnNvcnQoKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiB7XG4gICAgICByZXR1cm4gYSAtIGI7XG4gICAgfSk7XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBpbnB1dGVzIHBhcmFtZXRlcnMuXG4gICAqL1xuICBjb25zdCB2YWxpZGF0ZUlucHV0ID0gKGlucHV0OiBQbHVnaW5QYXJhbXMsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBpbnB1dFBhcmFtZXRlciA9IGdsb2JhbENvbmZpZ1snaW5wdXQtcGFyYW1ldGVyJ107XG4gICAgY29uc3Qgc2NoZW1hID0gelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIHRpbWVzdGFtcDogei5zdHJpbmcoKS5vcih6LmRhdGUoKSksXG4gICAgICAgIGR1cmF0aW9uOiB6Lm51bWJlcigpLFxuICAgICAgICBbaW5wdXRQYXJhbWV0ZXJdOiB6Lm51bWJlcigpLmd0KDApLFxuICAgICAgfSlcbiAgICAgIC5yZWZpbmUoXG4gICAgICAgIGRhdGEgPT5cbiAgICAgICAgICBkYXRhW2lucHV0UGFyYW1ldGVyXSA+PSBnbG9iYWxDb25maWcueFswXSAmJlxuICAgICAgICAgIGRhdGFbaW5wdXRQYXJhbWV0ZXJdIDw9IGdsb2JhbENvbmZpZy54W2dsb2JhbENvbmZpZy54Lmxlbmd0aCAtIDFdLFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICdUaGUgdGFyZ2V0IHggdmFsdWUgbXVzdCBiZSB3aXRoaW4gdGhlIHJhbmdlIG9mIHRoZSBnaXZlbiB4IHZhbHVlcycsXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGU8ei5pbmZlcjx0eXBlb2Ygc2NoZW1hPj4oc2NoZW1hLCBpbnB1dCwgaW5kZXgpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIGtpbmQ6ICdleGVjdXRlJyxcbiAgICB9LFxuICAgIGV4ZWN1dGUsXG4gIH07XG59O1xuIl19
@@ -0,0 +1,5 @@
1
+ export declare enum Method {
2
+ LINEAR = "linear",
3
+ SPLINE = "spline",
4
+ POLYNOMIAL = "polynomial"
5
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Method = void 0;
4
+ var Method;
5
+ (function (Method) {
6
+ Method["LINEAR"] = "linear";
7
+ Method["SPLINE"] = "spline";
8
+ Method["POLYNOMIAL"] = "polynomial";
9
+ })(Method || (exports.Method = Method = {}));
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvaW50ZXJwb2xhdGlvbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLE1BSVg7QUFKRCxXQUFZLE1BQU07SUFDaEIsMkJBQWlCLENBQUE7SUFDakIsMkJBQWlCLENBQUE7SUFDakIsbUNBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQUpXLE1BQU0sc0JBQU4sTUFBTSxRQUlqQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIE1ldGhvZCB7XG4gIExJTkVBUiA9ICdsaW5lYXInLFxuICBTUExJTkUgPSAnc3BsaW5lJyxcbiAgUE9MWU5PTUlBTCA9ICdwb2x5bm9taWFsJyxcbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import { KeyValuePair } from '../../../types/common';
2
+ import { Generator } from '../interfaces';
3
+ export declare const CommonGenerator: (config: KeyValuePair) => Generator;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CommonGenerator = void 0;
4
+ const errors_1 = require("../../../util/errors");
5
+ const helpers_1 = require("../../../util/helpers");
6
+ const { InputValidationError } = errors_1.ERRORS;
7
+ const CommonGenerator = (config) => {
8
+ const errorBuilder = (0, helpers_1.buildErrorMessage)(exports.CommonGenerator.name);
9
+ /**
10
+ * Creates new copy of the given `object`.
11
+ */
12
+ const copyObject = (object) => ({ ...object });
13
+ /**
14
+ * Validates the provided config is not null or empty.
15
+ * returns a copy of the validated config, otherwise throws an InputValidationError.
16
+ */
17
+ const validateConfig = (config) => {
18
+ if (!config || Object.keys(config).length === 0) {
19
+ throw new InputValidationError(errorBuilder({ message: 'Config must not be null or empty' }));
20
+ }
21
+ return copyObject(config);
22
+ };
23
+ /**
24
+ * Generates next value by copying the validated config.
25
+ */
26
+ const next = () => copyObject(validateConfig(config));
27
+ return {
28
+ next,
29
+ };
30
+ };
31
+ exports.CommonGenerator = CommonGenerator;
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9idWlsdGlucy9tb2NrLW9ic2VydmF0aW9ucy9oZWxwZXJzL2NvbW1vbi1nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaURBQTRDO0FBQzVDLG1EQUF3RDtBQUl4RCxNQUFNLEVBQUMsb0JBQW9CLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFFL0IsTUFBTSxlQUFlLEdBQUcsQ0FBQyxNQUFvQixFQUFhLEVBQUU7SUFDakUsTUFBTSxZQUFZLEdBQUcsSUFBQSwyQkFBaUIsRUFBQyx1QkFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTdEOztPQUVHO0lBQ0gsTUFBTSxVQUFVLEdBQUcsQ0FBSSxNQUFTLEVBQUssRUFBRSxDQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sRUFBQyxDQUFDLENBQUM7SUFFdEQ7OztPQUdHO0lBQ0gsTUFBTSxjQUFjLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtRQUN4QyxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMvQyxNQUFNLElBQUksb0JBQW9CLENBQzVCLFlBQVksQ0FBQyxFQUFDLE9BQU8sRUFBRSxrQ0FBa0MsRUFBQyxDQUFDLENBQzVELENBQUM7U0FDSDtRQUVELE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxJQUFJLEdBQUcsR0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRTlELE9BQU87UUFDTCxJQUFJO0tBQ0wsQ0FBQztBQUNKLENBQUMsQ0FBQztBQTlCVyxRQUFBLGVBQWUsbUJBOEIxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7S2V5VmFsdWVQYWlyfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb21tb24nO1xuaW1wb3J0IHtFUlJPUlN9IGZyb20gJy4uLy4uLy4uL3V0aWwvZXJyb3JzJztcbmltcG9ydCB7YnVpbGRFcnJvck1lc3NhZ2V9IGZyb20gJy4uLy4uLy4uL3V0aWwvaGVscGVycyc7XG5cbmltcG9ydCB7R2VuZXJhdG9yfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuY29uc3Qge0lucHV0VmFsaWRhdGlvbkVycm9yfSA9IEVSUk9SUztcblxuZXhwb3J0IGNvbnN0IENvbW1vbkdlbmVyYXRvciA9IChjb25maWc6IEtleVZhbHVlUGFpcik6IEdlbmVyYXRvciA9PiB7XG4gIGNvbnN0IGVycm9yQnVpbGRlciA9IGJ1aWxkRXJyb3JNZXNzYWdlKENvbW1vbkdlbmVyYXRvci5uYW1lKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBuZXcgY29weSBvZiB0aGUgZ2l2ZW4gYG9iamVjdGAuXG4gICAqL1xuICBjb25zdCBjb3B5T2JqZWN0ID0gPFQ+KG9iamVjdDogVCk6IFQgPT4gKHsuLi5vYmplY3R9KTtcblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBwcm92aWRlZCBjb25maWcgaXMgbm90IG51bGwgb3IgZW1wdHkuXG4gICAqIHJldHVybnMgYSBjb3B5IG9mIHRoZSB2YWxpZGF0ZWQgY29uZmlnLCBvdGhlcndpc2UgdGhyb3dzIGFuIElucHV0VmFsaWRhdGlvbkVycm9yLlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVDb25maWcgPSAoY29uZmlnOiBvYmplY3QpID0+IHtcbiAgICBpZiAoIWNvbmZpZyB8fCBPYmplY3Qua2V5cyhjb25maWcpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IElucHV0VmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBlcnJvckJ1aWxkZXIoe21lc3NhZ2U6ICdDb25maWcgbXVzdCBub3QgYmUgbnVsbCBvciBlbXB0eSd9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29weU9iamVjdChjb25maWcpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgbmV4dCB2YWx1ZSBieSBjb3B5aW5nIHRoZSB2YWxpZGF0ZWQgY29uZmlnLlxuICAgKi9cbiAgY29uc3QgbmV4dCA9ICgpOiBPYmplY3QgPT4gY29weU9iamVjdCh2YWxpZGF0ZUNvbmZpZyhjb25maWcpKTtcblxuICByZXR1cm4ge1xuICAgIG5leHQsXG4gIH07XG59O1xuIl19
@@ -0,0 +1,3 @@
1
+ import { KeyValuePair } from '../../../types/common';
2
+ import { Generator } from '../interfaces';
3
+ export declare const RandIntGenerator: (name: string, config: KeyValuePair) => Generator;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RandIntGenerator = void 0;
4
+ const errors_1 = require("../../../util/errors");
5
+ const helpers_1 = require("../../../util/helpers");
6
+ const { InputValidationError } = errors_1.ERRORS;
7
+ const RandIntGenerator = (name, config) => {
8
+ const errorBuilder = (0, helpers_1.buildErrorMessage)(exports.RandIntGenerator.name);
9
+ const next = () => ({
10
+ [validatedName]: generateRandInt(getFieldToPopulate()),
11
+ });
12
+ const validateName = (name) => {
13
+ if (!name || name.trim() === '') {
14
+ throw new InputValidationError(errorBuilder({
15
+ message: '`name` is empty or all spaces',
16
+ }));
17
+ }
18
+ return name;
19
+ };
20
+ const validateConfig = (config) => {
21
+ if (!config || Object.keys(config).length === 0) {
22
+ throw new InputValidationError(errorBuilder({
23
+ message: 'Config must not be null or empty',
24
+ }));
25
+ }
26
+ if (!config.min || !config.max) {
27
+ throw new InputValidationError(errorBuilder({
28
+ message: 'Config is missing min or max',
29
+ }));
30
+ }
31
+ if (config.min >= config.max) {
32
+ throw new InputValidationError(errorBuilder({
33
+ message: `Min value should not be greater than or equal to max value of ${validatedName}`,
34
+ }));
35
+ }
36
+ return { min: config.min, max: config.max };
37
+ };
38
+ const validatedName = validateName(name);
39
+ const validatedConfig = validateConfig(config);
40
+ const getFieldToPopulate = () => {
41
+ return {
42
+ name: validatedName,
43
+ min: validatedConfig.min,
44
+ max: validatedConfig.max,
45
+ };
46
+ };
47
+ const generateRandInt = (randIntGenerator) => {
48
+ const randomNumber = Math.random();
49
+ const scaledNumber = randomNumber * (randIntGenerator.max - randIntGenerator.min) +
50
+ randIntGenerator.min;
51
+ return Math.trunc(scaledNumber);
52
+ };
53
+ return {
54
+ next,
55
+ };
56
+ };
57
+ exports.RandIntGenerator = RandIntGenerator;
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZC1pbnQtZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2J1aWx0aW5zL21vY2stb2JzZXJ2YXRpb25zL2hlbHBlcnMvcmFuZC1pbnQtZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLGlEQUE0QztBQUM1QyxtREFBd0Q7QUFLeEQsTUFBTSxFQUFDLG9CQUFvQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRS9CLE1BQU0sZ0JBQWdCLEdBQUcsQ0FDOUIsSUFBWSxFQUNaLE1BQW9CLEVBQ1QsRUFBRTtJQUNiLE1BQU0sWUFBWSxHQUFHLElBQUEsMkJBQWlCLEVBQUMsd0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFOUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsQixDQUFDLGFBQWEsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0tBQ3ZELENBQUMsQ0FBQztJQUVILE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBbUIsRUFBVSxFQUFFO1FBQ25ELElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMvQixNQUFNLElBQUksb0JBQW9CLENBQzVCLFlBQVksQ0FBQztnQkFDWCxPQUFPLEVBQUUsK0JBQStCO2FBQ3pDLENBQUMsQ0FDSCxDQUFDO1NBQ0g7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztJQUVGLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBb0IsRUFBOEIsRUFBRTtRQUMxRSxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMvQyxNQUFNLElBQUksb0JBQW9CLENBQzVCLFlBQVksQ0FBQztnQkFDWCxPQUFPLEVBQUUsa0NBQWtDO2FBQzVDLENBQUMsQ0FDSCxDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDOUIsTUFBTSxJQUFJLG9CQUFvQixDQUM1QixZQUFZLENBQUM7Z0JBQ1gsT0FBTyxFQUFFLDhCQUE4QjthQUN4QyxDQUFDLENBQ0gsQ0FBQztTQUNIO1FBRUQsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDNUIsTUFBTSxJQUFJLG9CQUFvQixDQUM1QixZQUFZLENBQUM7Z0JBQ1gsT0FBTyxFQUFFLGlFQUFpRSxhQUFhLEVBQUU7YUFDMUYsQ0FBQyxDQUNILENBQUM7U0FDSDtRQUNELE9BQU8sRUFBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQztJQUVGLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFL0MsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLEVBQUU7UUFDOUIsT0FBTztZQUNMLElBQUksRUFBRSxhQUFhO1lBQ25CLEdBQUcsRUFBRSxlQUFlLENBQUMsR0FBRztZQUN4QixHQUFHLEVBQUUsZUFBZSxDQUFDLEdBQUc7U0FDekIsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLE1BQU0sZUFBZSxHQUFHLENBQ3RCLGdCQUF3QyxFQUNoQyxFQUFFO1FBQ1YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25DLE1BQU0sWUFBWSxHQUNoQixZQUFZLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDO1lBQzVELGdCQUFnQixDQUFDLEdBQUcsQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEMsQ0FBQyxDQUFDO0lBRUYsT0FBTztRQUNMLElBQUk7S0FDTCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBeEVXLFFBQUEsZ0JBQWdCLG9CQXdFM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0tleVZhbHVlUGFpcn0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29tbW9uJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICcuLi8uLi8uLi91dGlsL2Vycm9ycyc7XG5pbXBvcnQge2J1aWxkRXJyb3JNZXNzYWdlfSBmcm9tICcuLi8uLi8uLi91dGlsL2hlbHBlcnMnO1xuXG5pbXBvcnQge0dlbmVyYXRvcn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1JhbmRJbnRHZW5lcmF0b3JQYXJhbXN9IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3Qge0lucHV0VmFsaWRhdGlvbkVycm9yfSA9IEVSUk9SUztcblxuZXhwb3J0IGNvbnN0IFJhbmRJbnRHZW5lcmF0b3IgPSAoXG4gIG5hbWU6IHN0cmluZyxcbiAgY29uZmlnOiBLZXlWYWx1ZVBhaXJcbik6IEdlbmVyYXRvciA9PiB7XG4gIGNvbnN0IGVycm9yQnVpbGRlciA9IGJ1aWxkRXJyb3JNZXNzYWdlKFJhbmRJbnRHZW5lcmF0b3IubmFtZSk7XG5cbiAgY29uc3QgbmV4dCA9ICgpID0+ICh7XG4gICAgW3ZhbGlkYXRlZE5hbWVdOiBnZW5lcmF0ZVJhbmRJbnQoZ2V0RmllbGRUb1BvcHVsYXRlKCkpLFxuICB9KTtcblxuICBjb25zdCB2YWxpZGF0ZU5hbWUgPSAobmFtZTogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyA9PiB7XG4gICAgaWYgKCFuYW1lIHx8IG5hbWUudHJpbSgpID09PSAnJykge1xuICAgICAgdGhyb3cgbmV3IElucHV0VmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBlcnJvckJ1aWxkZXIoe1xuICAgICAgICAgIG1lc3NhZ2U6ICdgbmFtZWAgaXMgZW1wdHkgb3IgYWxsIHNwYWNlcycsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZTtcbiAgfTtcblxuICBjb25zdCB2YWxpZGF0ZUNvbmZpZyA9IChjb25maWc6IEtleVZhbHVlUGFpcik6IHttaW46IG51bWJlcjsgbWF4OiBudW1iZXJ9ID0+IHtcbiAgICBpZiAoIWNvbmZpZyB8fCBPYmplY3Qua2V5cyhjb25maWcpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IElucHV0VmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBlcnJvckJ1aWxkZXIoe1xuICAgICAgICAgIG1lc3NhZ2U6ICdDb25maWcgbXVzdCBub3QgYmUgbnVsbCBvciBlbXB0eScsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghY29uZmlnLm1pbiB8fCAhY29uZmlnLm1heCkge1xuICAgICAgdGhyb3cgbmV3IElucHV0VmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBlcnJvckJ1aWxkZXIoe1xuICAgICAgICAgIG1lc3NhZ2U6ICdDb25maWcgaXMgbWlzc2luZyBtaW4gb3IgbWF4JyxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5taW4gPj0gY29uZmlnLm1heCkge1xuICAgICAgdGhyb3cgbmV3IElucHV0VmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBlcnJvckJ1aWxkZXIoe1xuICAgICAgICAgIG1lc3NhZ2U6IGBNaW4gdmFsdWUgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWF4IHZhbHVlIG9mICR7dmFsaWRhdGVkTmFtZX1gLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHttaW46IGNvbmZpZy5taW4sIG1heDogY29uZmlnLm1heH07XG4gIH07XG5cbiAgY29uc3QgdmFsaWRhdGVkTmFtZSA9IHZhbGlkYXRlTmFtZShuYW1lKTtcbiAgY29uc3QgdmFsaWRhdGVkQ29uZmlnID0gdmFsaWRhdGVDb25maWcoY29uZmlnKTtcblxuICBjb25zdCBnZXRGaWVsZFRvUG9wdWxhdGUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHZhbGlkYXRlZE5hbWUsXG4gICAgICBtaW46IHZhbGlkYXRlZENvbmZpZy5taW4sXG4gICAgICBtYXg6IHZhbGlkYXRlZENvbmZpZy5tYXgsXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCBnZW5lcmF0ZVJhbmRJbnQgPSAoXG4gICAgcmFuZEludEdlbmVyYXRvcjogUmFuZEludEdlbmVyYXRvclBhcmFtc1xuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHJhbmRvbU51bWJlciA9IE1hdGgucmFuZG9tKCk7XG4gICAgY29uc3Qgc2NhbGVkTnVtYmVyID1cbiAgICAgIHJhbmRvbU51bWJlciAqIChyYW5kSW50R2VuZXJhdG9yLm1heCAtIHJhbmRJbnRHZW5lcmF0b3IubWluKSArXG4gICAgICByYW5kSW50R2VuZXJhdG9yLm1pbjtcbiAgICByZXR1cm4gTWF0aC50cnVuYyhzY2FsZWROdW1iZXIpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmV4dCxcbiAgfTtcbn07XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { ExecutePlugin } from '../../types/interface';
2
+ import { ConfigParams } from '../../types/common';
3
+ export declare const MockObservations: (globalConfig: ConfigParams) => ExecutePlugin;
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockObservations = void 0;
4
+ const luxon_1 = require("luxon");
5
+ const zod_1 = require("zod");
6
+ const validations_1 = require("../../util/validations");
7
+ const common_generator_1 = require("./helpers/common-generator");
8
+ const rand_int_generator_1 = require("./helpers/rand-int-generator");
9
+ const MockObservations = (globalConfig) => {
10
+ const metadata = {
11
+ kind: 'execute',
12
+ };
13
+ /**
14
+ * Generate sets of mocked observations based on config.
15
+ */
16
+ const execute = (inputs) => {
17
+ const { duration, timeBuckets, components, generators } = generateParamsFromConfig();
18
+ const generatorToHistory = new Map();
19
+ generators.forEach(generator => {
20
+ generatorToHistory.set(generator, []);
21
+ });
22
+ const defaults = inputs && inputs[0];
23
+ return Object.entries(components).reduce((acc, item) => {
24
+ const component = item[1];
25
+ timeBuckets.forEach(timeBucket => {
26
+ const observation = createObservation({ duration, component, timeBucket, generators }, generatorToHistory);
27
+ acc.push(Object.assign({}, defaults, observation));
28
+ });
29
+ return acc;
30
+ }, []);
31
+ };
32
+ /**
33
+ * Validates global config parameters.
34
+ */
35
+ const validateGlobalConfig = () => {
36
+ const schema = zod_1.z.object({
37
+ 'timestamp-from': zod_1.z.string(),
38
+ 'timestamp-to': zod_1.z.string(),
39
+ duration: zod_1.z.number(),
40
+ components: zod_1.z.array(zod_1.z.record(zod_1.z.string())),
41
+ generators: zod_1.z.object({
42
+ common: zod_1.z.record(zod_1.z.string().or(zod_1.z.number())),
43
+ randint: zod_1.z.record(zod_1.z.object({ min: zod_1.z.number(), max: zod_1.z.number() })),
44
+ }),
45
+ });
46
+ return (0, validations_1.validate)(schema, globalConfig);
47
+ };
48
+ /**
49
+ * Configures the MockObservations Plugin for IF
50
+ */
51
+ const generateParamsFromConfig = () => {
52
+ const { 'timestamp-from': timestampFrom, 'timestamp-to': timestampTo, duration, generators, components, } = validateGlobalConfig();
53
+ const convertedTimestampFrom = luxon_1.DateTime.fromISO(timestampFrom, {
54
+ zone: 'UTC',
55
+ });
56
+ const convertedTimestampTo = luxon_1.DateTime.fromISO(timestampTo, { zone: 'UTC' });
57
+ return {
58
+ duration,
59
+ timeBuckets: createTimeBuckets(convertedTimestampFrom, convertedTimestampTo, duration),
60
+ generators: createGenerators(generators),
61
+ components,
62
+ };
63
+ };
64
+ /*
65
+ * create time buckets based on start time, end time and duration of each bucket.
66
+ */
67
+ const createTimeBuckets = (timestampFrom, timestampTo, duration, timeBuckets = []) => {
68
+ if (timestampFrom < timestampTo ||
69
+ timestampFrom.plus(luxon_1.Duration.fromObject({ seconds: duration })) < timestampTo) {
70
+ return createTimeBuckets(timestampFrom.plus(luxon_1.Duration.fromObject({ seconds: duration })), timestampTo, duration, [...timeBuckets, timestampFrom]);
71
+ }
72
+ return timeBuckets;
73
+ };
74
+ /*
75
+ * create generators based on a given config
76
+ */
77
+ const createGenerators = (generatorsConfig) => {
78
+ const createCommonGenerator = (config) => [
79
+ (0, common_generator_1.CommonGenerator)(config),
80
+ ];
81
+ const createRandIntGenerators = (config) => {
82
+ return Object.entries(config).map(([fieldToPopulate, value]) => (0, rand_int_generator_1.RandIntGenerator)(fieldToPopulate, value));
83
+ };
84
+ return Object.entries(generatorsConfig).flatMap(([key, value]) => key === 'randint'
85
+ ? createRandIntGenerators(value).flat()
86
+ : createCommonGenerator(value));
87
+ };
88
+ /*
89
+ * Creates time buckets based on start time, end time and duration of each bucket.
90
+ */
91
+ const createObservation = (observationParams, generatorToHistory) => {
92
+ const { duration, component, timeBucket, generators } = observationParams;
93
+ const timestamp = timeBucket.toISO();
94
+ const generateObservation = (generator) => {
95
+ const history = generatorToHistory.get(generator) || [];
96
+ const generated = generator.next(history);
97
+ generatorToHistory.set(generator, [...history, generated.value]);
98
+ return generated;
99
+ };
100
+ const generateObservations = (gen) => generateObservation(gen);
101
+ const generatedValues = generators.map(generateObservations);
102
+ const initialObservation = {
103
+ timestamp,
104
+ duration,
105
+ ...component,
106
+ };
107
+ const generatedObservation = generatedValues.reduce((observation, generated) => Object.assign(observation, generated), initialObservation);
108
+ return generatedObservation;
109
+ };
110
+ return {
111
+ metadata,
112
+ execute,
113
+ };
114
+ };
115
+ exports.MockObservations = MockObservations;
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvbW9jay1vYnNlcnZhdGlvbnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQXlDO0FBQ3pDLDZCQUFzQjtBQUt0Qix3REFBZ0Q7QUFFaEQsaUVBQTJEO0FBQzNELHFFQUE4RDtBQUl2RCxNQUFNLGdCQUFnQixHQUFHLENBQUMsWUFBMEIsRUFBaUIsRUFBRTtJQUM1RSxNQUFNLFFBQVEsR0FBRztRQUNmLElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBc0IsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUMsR0FDbkQsd0JBQXdCLEVBQUUsQ0FBQztRQUM3QixNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO1FBRTFELFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDN0Isa0JBQWtCLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQW1CLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDckUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQy9CLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUNuQyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBQyxFQUM3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Q0FBQyxDQUFDO1lBRS9ELGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUVqRSxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQUM7UUFFRixNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBYyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxRSxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDN0QsTUFBTSxrQkFBa0IsR0FBaUI7WUFDdkMsU0FBUztZQUNULFFBQVE7WUFDUixHQUFHLFNBQVM7U0FDYixDQUFDO1FBQ0YsTUFBTSxvQkFBb0IsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUNqRCxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUNqRSxrQkFBa0IsQ0FDbkIsQ0FBQztRQUVGLE9BQU8sb0JBQW9DLENBQUM7SUFDOUMsQ0FBQyxDQUFDO0lBRUYsT0FBTztRQUNMLFFBQVE7UUFDUixPQUFPO0tBQ1IsQ0FBQztBQUNKLENBQUMsQ0FBQztBQWxLVyxRQUFBLGdCQUFnQixvQkFrSzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEYXRlVGltZSwgRHVyYXRpb259IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtFeGVjdXRlUGx1Z2luLCBQbHVnaW5QYXJhbXN9IGZyb20gJy4uLy4uL3R5cGVzL2ludGVyZmFjZSc7XG5pbXBvcnQge0NvbmZpZ1BhcmFtcywgS2V5VmFsdWVQYWlyfSBmcm9tICcuLi8uLi90eXBlcy9jb21tb24nO1xuXG5pbXBvcnQge3ZhbGlkYXRlfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRpb25zJztcblxuaW1wb3J0IHtDb21tb25HZW5lcmF0b3J9IGZyb20gJy4vaGVscGVycy9jb21tb24tZ2VuZXJhdG9yJztcbmltcG9ydCB7UmFuZEludEdlbmVyYXRvcn0gZnJvbSAnLi9oZWxwZXJzL3JhbmQtaW50LWdlbmVyYXRvcic7XG5pbXBvcnQge0dlbmVyYXRvcn0gZnJvbSAnLi9pbnRlcmZhY2VzL2luZGV4JztcbmltcG9ydCB7T2JzZXJ2YXRpb25QYXJhbXN9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgTW9ja09ic2VydmF0aW9ucyA9IChnbG9iYWxDb25maWc6IENvbmZpZ1BhcmFtcyk6IEV4ZWN1dGVQbHVnaW4gPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IHtcbiAgICBraW5kOiAnZXhlY3V0ZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHNldHMgb2YgbW9ja2VkIG9ic2VydmF0aW9ucyBiYXNlZCBvbiBjb25maWcuXG4gICAqL1xuICBjb25zdCBleGVjdXRlID0gKGlucHV0czogUGx1Z2luUGFyYW1zW10pID0+IHtcbiAgICBjb25zdCB7ZHVyYXRpb24sIHRpbWVCdWNrZXRzLCBjb21wb25lbnRzLCBnZW5lcmF0b3JzfSA9XG4gICAgICBnZW5lcmF0ZVBhcmFtc0Zyb21Db25maWcoKTtcbiAgICBjb25zdCBnZW5lcmF0b3JUb0hpc3RvcnkgPSBuZXcgTWFwPEdlbmVyYXRvciwgbnVtYmVyW10+KCk7XG5cbiAgICBnZW5lcmF0b3JzLmZvckVhY2goZ2VuZXJhdG9yID0+IHtcbiAgICAgIGdlbmVyYXRvclRvSGlzdG9yeS5zZXQoZ2VuZXJhdG9yLCBbXSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWZhdWx0cyA9IGlucHV0cyAmJiBpbnB1dHNbMF07XG5cbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykucmVkdWNlKChhY2M6IFBsdWdpblBhcmFtc1tdLCBpdGVtKSA9PiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBpdGVtWzFdO1xuICAgICAgdGltZUJ1Y2tldHMuZm9yRWFjaCh0aW1lQnVja2V0ID0+IHtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YXRpb24gPSBjcmVhdGVPYnNlcnZhdGlvbihcbiAgICAgICAgICB7ZHVyYXRpb24sIGNvbXBvbmVudCwgdGltZUJ1Y2tldCwgZ2VuZXJhdG9yc30sXG4gICAgICAgICAgZ2VuZXJhdG9yVG9IaXN0b3J5XG4gICAgICAgICk7XG5cbiAgICAgICAgYWNjLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIG9ic2VydmF0aW9uKSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBnbG9iYWwgY29uZmlnIHBhcmFtZXRlcnMuXG4gICAqL1xuICBjb25zdCB2YWxpZGF0ZUdsb2JhbENvbmZpZyA9ICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgICAndGltZXN0YW1wLWZyb20nOiB6LnN0cmluZygpLFxuICAgICAgJ3RpbWVzdGFtcC10byc6IHouc3RyaW5nKCksXG4gICAgICBkdXJhdGlvbjogei5udW1iZXIoKSxcbiAgICAgIGNvbXBvbmVudHM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSkpLFxuICAgICAgZ2VuZXJhdG9yczogei5vYmplY3Qoe1xuICAgICAgICBjb21tb246IHoucmVjb3JkKHouc3RyaW5nKCkub3Ioei5udW1iZXIoKSkpLFxuICAgICAgICByYW5kaW50OiB6LnJlY29yZCh6Lm9iamVjdCh7bWluOiB6Lm51bWJlcigpLCBtYXg6IHoubnVtYmVyKCl9KSksXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIHJldHVybiB2YWxpZGF0ZTx6LmluZmVyPHR5cGVvZiBzY2hlbWE+PihzY2hlbWEsIGdsb2JhbENvbmZpZyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZXMgdGhlIE1vY2tPYnNlcnZhdGlvbnMgUGx1Z2luIGZvciBJRlxuICAgKi9cbiAgY29uc3QgZ2VuZXJhdGVQYXJhbXNGcm9tQ29uZmlnID0gKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICd0aW1lc3RhbXAtZnJvbSc6IHRpbWVzdGFtcEZyb20sXG4gICAgICAndGltZXN0YW1wLXRvJzogdGltZXN0YW1wVG8sXG4gICAgICBkdXJhdGlvbixcbiAgICAgIGdlbmVyYXRvcnMsXG4gICAgICBjb21wb25lbnRzLFxuICAgIH0gPSB2YWxpZGF0ZUdsb2JhbENvbmZpZygpO1xuICAgIGNvbnN0IGNvbnZlcnRlZFRpbWVzdGFtcEZyb20gPSBEYXRlVGltZS5mcm9tSVNPKHRpbWVzdGFtcEZyb20sIHtcbiAgICAgIHpvbmU6ICdVVEMnLFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbnZlcnRlZFRpbWVzdGFtcFRvID0gRGF0ZVRpbWUuZnJvbUlTTyh0aW1lc3RhbXBUbywge3pvbmU6ICdVVEMnfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZHVyYXRpb24sXG4gICAgICB0aW1lQnVja2V0czogY3JlYXRlVGltZUJ1Y2tldHMoXG4gICAgICAgIGNvbnZlcnRlZFRpbWVzdGFtcEZyb20sXG4gICAgICAgIGNvbnZlcnRlZFRpbWVzdGFtcFRvLFxuICAgICAgICBkdXJhdGlvblxuICAgICAgKSxcbiAgICAgIGdlbmVyYXRvcnM6IGNyZWF0ZUdlbmVyYXRvcnMoZ2VuZXJhdG9ycyksXG4gICAgICBjb21wb25lbnRzLFxuICAgIH07XG4gIH07XG5cbiAgLypcbiAgICogY3JlYXRlIHRpbWUgYnVja2V0cyBiYXNlZCBvbiBzdGFydCB0aW1lLCBlbmQgdGltZSBhbmQgZHVyYXRpb24gb2YgZWFjaCBidWNrZXQuXG4gICAqL1xuICBjb25zdCBjcmVhdGVUaW1lQnVja2V0cyA9IChcbiAgICB0aW1lc3RhbXBGcm9tOiBEYXRlVGltZSxcbiAgICB0aW1lc3RhbXBUbzogRGF0ZVRpbWUsXG4gICAgZHVyYXRpb246IG51bWJlcixcbiAgICB0aW1lQnVja2V0czogRGF0ZVRpbWVbXSA9IFtdXG4gICk6IERhdGVUaW1lW10gPT4ge1xuICAgIGlmIChcbiAgICAgIHRpbWVzdGFtcEZyb20gPCB0aW1lc3RhbXBUbyB8fFxuICAgICAgdGltZXN0YW1wRnJvbS5wbHVzKER1cmF0aW9uLmZyb21PYmplY3Qoe3NlY29uZHM6IGR1cmF0aW9ufSkpIDwgdGltZXN0YW1wVG9cbiAgICApIHtcbiAgICAgIHJldHVybiBjcmVhdGVUaW1lQnVja2V0cyhcbiAgICAgICAgdGltZXN0YW1wRnJvbS5wbHVzKER1cmF0aW9uLmZyb21PYmplY3Qoe3NlY29uZHM6IGR1cmF0aW9ufSkpLFxuICAgICAgICB0aW1lc3RhbXBUbyxcbiAgICAgICAgZHVyYXRpb24sXG4gICAgICAgIFsuLi50aW1lQnVja2V0cywgdGltZXN0YW1wRnJvbV1cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aW1lQnVja2V0cztcbiAgfTtcblxuICAvKlxuICAgKiBjcmVhdGUgZ2VuZXJhdG9ycyBiYXNlZCBvbiBhIGdpdmVuIGNvbmZpZ1xuICAgKi9cbiAgY29uc3QgY3JlYXRlR2VuZXJhdG9ycyA9IChnZW5lcmF0b3JzQ29uZmlnOiBvYmplY3QpOiBHZW5lcmF0b3JbXSA9PiB7XG4gICAgY29uc3QgY3JlYXRlQ29tbW9uR2VuZXJhdG9yID0gKGNvbmZpZzogYW55KTogR2VuZXJhdG9yW10gPT4gW1xuICAgICAgQ29tbW9uR2VuZXJhdG9yKGNvbmZpZyksXG4gICAgXTtcblxuICAgIGNvbnN0IGNyZWF0ZVJhbmRJbnRHZW5lcmF0b3JzID0gKGNvbmZpZzogYW55KTogR2VuZXJhdG9yW10gPT4ge1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGNvbmZpZykubWFwKChbZmllbGRUb1BvcHVsYXRlLCB2YWx1ZV0pID0+XG4gICAgICAgIFJhbmRJbnRHZW5lcmF0b3IoZmllbGRUb1BvcHVsYXRlLCB2YWx1ZSBhcyBLZXlWYWx1ZVBhaXIpXG4gICAgICApO1xuICAgIH07XG5cbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZ2VuZXJhdG9yc0NvbmZpZykuZmxhdE1hcCgoW2tleSwgdmFsdWVdKSA9PlxuICAgICAga2V5ID09PSAncmFuZGludCdcbiAgICAgICAgPyBjcmVhdGVSYW5kSW50R2VuZXJhdG9ycyh2YWx1ZSkuZmxhdCgpXG4gICAgICAgIDogY3JlYXRlQ29tbW9uR2VuZXJhdG9yKHZhbHVlKVxuICAgICk7XG4gIH07XG5cbiAgLypcbiAgICogQ3JlYXRlcyB0aW1lIGJ1Y2tldHMgYmFzZWQgb24gc3RhcnQgdGltZSwgZW5kIHRpbWUgYW5kIGR1cmF0aW9uIG9mIGVhY2ggYnVja2V0LlxuICAgKi9cbiAgY29uc3QgY3JlYXRlT2JzZXJ2YXRpb24gPSAoXG4gICAgb2JzZXJ2YXRpb25QYXJhbXM6IE9ic2VydmF0aW9uUGFyYW1zLFxuICAgIGdlbmVyYXRvclRvSGlzdG9yeTogTWFwPEdlbmVyYXRvciwgbnVtYmVyW10+XG4gICk6IFBsdWdpblBhcmFtcyA9PiB7XG4gICAgY29uc3Qge2R1cmF0aW9uLCBjb21wb25lbnQsIHRpbWVCdWNrZXQsIGdlbmVyYXRvcnN9ID0gb2JzZXJ2YXRpb25QYXJhbXM7XG4gICAgY29uc3QgdGltZXN0YW1wID0gdGltZUJ1Y2tldC50b0lTTygpO1xuXG4gICAgY29uc3QgZ2VuZXJhdGVPYnNlcnZhdGlvbiA9IChnZW5lcmF0b3I6IEdlbmVyYXRvcikgPT4ge1xuICAgICAgY29uc3QgaGlzdG9yeSA9IGdlbmVyYXRvclRvSGlzdG9yeS5nZXQoZ2VuZXJhdG9yKSB8fCBbXTtcbiAgICAgIGNvbnN0IGdlbmVyYXRlZDogUmVjb3JkPHN0cmluZywgYW55PiA9IGdlbmVyYXRvci5uZXh0KGhpc3RvcnkpO1xuXG4gICAgICBnZW5lcmF0b3JUb0hpc3Rvcnkuc2V0KGdlbmVyYXRvciwgWy4uLmhpc3RvcnksIGdlbmVyYXRlZC52YWx1ZV0pO1xuXG4gICAgICByZXR1cm4gZ2VuZXJhdGVkO1xuICAgIH07XG5cbiAgICBjb25zdCBnZW5lcmF0ZU9ic2VydmF0aW9ucyA9IChnZW46IEdlbmVyYXRvcikgPT4gZ2VuZXJhdGVPYnNlcnZhdGlvbihnZW4pO1xuICAgIGNvbnN0IGdlbmVyYXRlZFZhbHVlcyA9IGdlbmVyYXRvcnMubWFwKGdlbmVyYXRlT2JzZXJ2YXRpb25zKTtcbiAgICBjb25zdCBpbml0aWFsT2JzZXJ2YXRpb246IFBsdWdpblBhcmFtcyA9IHtcbiAgICAgIHRpbWVzdGFtcCxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgLi4uY29tcG9uZW50LFxuICAgIH07XG4gICAgY29uc3QgZ2VuZXJhdGVkT2JzZXJ2YXRpb24gPSBnZW5lcmF0ZWRWYWx1ZXMucmVkdWNlKFxuICAgICAgKG9ic2VydmF0aW9uLCBnZW5lcmF0ZWQpID0+IE9iamVjdC5hc3NpZ24ob2JzZXJ2YXRpb24sIGdlbmVyYXRlZCksXG4gICAgICBpbml0aWFsT2JzZXJ2YXRpb25cbiAgICApO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRlZE9ic2VydmF0aW9uIGFzIFBsdWdpblBhcmFtcztcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG1ldGFkYXRhLFxuICAgIGV4ZWN1dGUsXG4gIH07XG59O1xuIl19
@@ -0,0 +1,6 @@
1
+ export type Generator = {
2
+ /**
3
+ * generate the next value, optionally based on historical values
4
+ */
5
+ next: (historical: Object[] | undefined) => Object;
6
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYnVpbHRpbnMvbW9jay1vYnNlcnZhdGlvbnMvaW50ZXJmYWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgR2VuZXJhdG9yID0ge1xuICAvKipcbiAgICogZ2VuZXJhdGUgdGhlIG5leHQgdmFsdWUsIG9wdGlvbmFsbHkgYmFzZWQgb24gaGlzdG9yaWNhbCB2YWx1ZXNcbiAgICovXG4gIG5leHQ6IChoaXN0b3JpY2FsOiBPYmplY3RbXSB8IHVuZGVmaW5lZCkgPT4gT2JqZWN0O1xufTtcbiJdfQ==
@@ -0,0 +1,13 @@
1
+ import { DateTime } from 'luxon';
2
+ import { Generator } from './interfaces/index';
3
+ export type ObservationParams = {
4
+ duration: number;
5
+ timeBucket: DateTime;
6
+ component: Record<string, string>;
7
+ generators: Generator[];
8
+ };
9
+ export type RandIntGeneratorParams = {
10
+ name: string;
11
+ min: number;
12
+ max: number;
13
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvbW9jay1vYnNlcnZhdGlvbnMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGF0ZVRpbWV9IGZyb20gJ2x1eG9uJztcblxuaW1wb3J0IHtHZW5lcmF0b3J9IGZyb20gJy4vaW50ZXJmYWNlcy9pbmRleCc7XG5cbmV4cG9ydCB0eXBlIE9ic2VydmF0aW9uUGFyYW1zID0ge1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICB0aW1lQnVja2V0OiBEYXRlVGltZTtcbiAgY29tcG9uZW50OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBnZW5lcmF0b3JzOiBHZW5lcmF0b3JbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFJhbmRJbnRHZW5lcmF0b3JQYXJhbXMgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbWluOiBudW1iZXI7XG4gIG1heDogbnVtYmVyO1xufTtcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import { ExecutePlugin } from '../../types/interface';
2
+ import { MultiplyConfig } from './types';
3
+ export declare const Multiply: (globalConfig: MultiplyConfig) => ExecutePlugin;