@grnsft/if 1.0.2 → 1.1.0-beta.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 (107) hide show
  1. package/.dockerignore +10 -0
  2. package/CONTAINER.md +148 -0
  3. package/Dockerfile +73 -0
  4. package/HELM_CHART.md +96 -0
  5. package/README.md +56 -0
  6. package/bin/docker-entrypoint.sh +15 -0
  7. package/build/common/types/manifest.d.ts +1 -0
  8. package/build/common/types/manifest.js +1 -1
  9. package/build/common/util/debug-logger.js +4 -18
  10. package/build/common/util/storage.d.ts +9 -0
  11. package/build/common/util/storage.js +24 -0
  12. package/build/if-api/config/config.d.ts +9 -0
  13. package/build/if-api/config/config.js +58 -0
  14. package/build/if-api/config/index.d.ts +2 -0
  15. package/build/if-api/config/index.js +8 -0
  16. package/build/if-api/config/strings.d.ts +16 -0
  17. package/build/if-api/config/strings.js +20 -0
  18. package/build/if-api/index.d.ts +2 -0
  19. package/build/if-api/index.js +268 -0
  20. package/build/if-api/types/process-args.d.ts +18 -0
  21. package/build/if-api/types/process-args.js +3 -0
  22. package/build/if-api/util/args.d.ts +5 -0
  23. package/build/if-api/util/args.js +42 -0
  24. package/build/if-metadata-check/config/config.d.ts +5 -0
  25. package/build/if-metadata-check/config/config.js +26 -0
  26. package/build/if-metadata-check/config/strings.d.ts +5 -0
  27. package/build/if-metadata-check/config/strings.js +9 -0
  28. package/build/if-metadata-check/index.d.ts +2 -0
  29. package/build/if-metadata-check/index.js +30 -0
  30. package/build/if-metadata-check/types/plugin.d.ts +7 -0
  31. package/build/if-metadata-check/types/plugin.js +3 -0
  32. package/build/if-metadata-check/types/process-args.d.ts +5 -0
  33. package/build/if-metadata-check/types/process-args.js +3 -0
  34. package/build/if-metadata-check/util/args.d.ts +57 -0
  35. package/build/if-metadata-check/util/args.js +29 -0
  36. package/build/if-metadata-check/util/metadata-checker.d.ts +44 -0
  37. package/build/if-metadata-check/util/metadata-checker.js +99 -0
  38. package/build/if-run/index.js +1 -1
  39. package/build/if-run/lib/aggregate.d.ts +2 -2
  40. package/build/if-run/lib/aggregate.js +5 -19
  41. package/build/if-run/lib/compute.d.ts +1 -1
  42. package/build/if-run/lib/compute.js +10 -9
  43. package/build/if-run/lib/environment.d.ts +5 -1
  44. package/build/if-run/lib/environment.js +21 -16
  45. package/build/if-run/lib/initialize.d.ts +12 -0
  46. package/build/if-run/lib/initialize.js +37 -3
  47. package/build/if-run/lib/regroup.d.ts +3 -2
  48. package/build/if-run/lib/regroup.js +13 -9
  49. package/build/if-run/types/compute.d.ts +1 -1
  50. package/build/if-run/types/compute.js +1 -1
  51. package/helm-chart/.helmignore +23 -0
  52. package/helm-chart/Chart.yaml +24 -0
  53. package/helm-chart/templates/NOTES.txt +22 -0
  54. package/helm-chart/templates/_helpers.tpl +62 -0
  55. package/helm-chart/templates/additionalPlugins.yaml +13 -0
  56. package/helm-chart/templates/deployment.yaml +144 -0
  57. package/helm-chart/templates/disabledPlugins.yaml +11 -0
  58. package/helm-chart/templates/env-configmap.yaml +10 -0
  59. package/helm-chart/templates/env-secret.yaml +10 -0
  60. package/helm-chart/templates/hpa.yaml +32 -0
  61. package/helm-chart/templates/ingress.yaml +43 -0
  62. package/helm-chart/templates/npmrc.yaml +11 -0
  63. package/helm-chart/templates/service.yaml +24 -0
  64. package/helm-chart/templates/serviceaccount.yaml +13 -0
  65. package/helm-chart/templates/tests/test-connection.yaml +15 -0
  66. package/helm-chart/values.yaml +175 -0
  67. package/manifests/examples/bugs/aggregation-error-wrong-metric.yml +173 -0
  68. package/manifests/examples/bugs/input-error-missing-duration.yml +25 -0
  69. package/manifests/examples/bugs/mock-observations-failure-duration-is-zero.yml +33 -0
  70. package/manifests/examples/bugs/pipeline-error-naming-mismatch.yml +32 -0
  71. package/manifests/examples/bugs/pipeline-error-uninitialized-plugin.yml +33 -0
  72. package/manifests/examples/bugs/pipeline-ordering-error.yml +91 -0
  73. package/manifests/examples/builtins/divide/success-denominator-equal-zero.yml +36 -0
  74. package/manifests/examples/builtins/mock-observations/failure-invalid-config-cpu-range.yml +0 -1
  75. package/manifests/examples/builtins/mock-observations/failure-invalid-memory-utilization-range.yml +0 -1
  76. package/manifests/examples/builtins/mock-observations/failure-missing-timestamp-from-param.yml +0 -1
  77. package/manifests/examples/builtins/mock-observations/success.yml +0 -1
  78. package/manifests/examples/builtins/sci/failure-invalid-config-value.yml +0 -1
  79. package/manifests/examples/builtins/sci/failure-missing-input-param.yml +0 -1
  80. package/manifests/examples/builtins/sci/success.yml +0 -1
  81. package/manifests/examples/builtins/sci-embodied/failure-invalid-default-emission-value.yml +22 -0
  82. package/manifests/examples/builtins/time-sync/failure-missing-config.yml +0 -2
  83. package/manifests/examples/builtins/time-sync/success.yml +0 -2
  84. package/manifests/examples/features/aggregate-failure-invalid-metrics.yml +50 -0
  85. package/manifests/examples/features/aggregate-failure-missing-metric-in-inputs.yml +50 -0
  86. package/manifests/examples/features/aggregate-horizontal.yml +58 -0
  87. package/manifests/examples/features/aggregate-vertical.yml +58 -0
  88. package/manifests/examples/features/aggregate.yml +58 -0
  89. package/manifests/examples/pipelines/cloud-metadata-divide.yml +36 -0
  90. package/manifests/examples/pipelines/pipeline-with-mocks.yml +0 -1
  91. package/manifests/examples/pipelines/scenario-5.yml +0 -1
  92. package/manifests/outputs/bugs/mock-observations-failure-duration-is-zero.yaml +0 -1
  93. package/manifests/outputs/builtins/mock-observations/failure-invalid-config-cpu-range.yaml +0 -1
  94. package/manifests/outputs/builtins/mock-observations/failure-invalid-memory-utilization-range.yaml +0 -1
  95. package/manifests/outputs/builtins/mock-observations/failure-missing-timestamp-from-param.yaml +0 -1
  96. package/manifests/outputs/builtins/sci/failure-invalid-config-value.yaml +0 -1
  97. package/manifests/outputs/builtins/sci/failure-missing-input-param.yaml +0 -1
  98. package/manifests/outputs/builtins/time-sync/failure-missing-config.yaml +0 -2
  99. package/manifests/outputs/features/regroup/success.yaml +72 -0
  100. package/manifests/outputs/pipelines/pipeline-with-aggregate.yaml +1291 -0
  101. package/manifests/outputs/pipelines/scenario-3.yaml +126 -0
  102. package/openapi.yaml +424 -0
  103. package/package.json +8 -3
  104. package/with-plugins/Dockerfile +59 -0
  105. package/manifests/outputs/builtins/interpolation/interpolation.yaml +0 -81
  106. package/manifests/outputs/features/failure-invalid-regroup.yaml +0 -87
  107. package/manifests/outputs/features/failure-missing-cloud-instance-type.yaml +0 -86
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.initialize = void 0;
26
+ exports.initialize = exports.setDisabledPlugins = exports.setExternalPluginWarning = void 0;
27
27
  const path = __importStar(require("node:path"));
28
28
  const utils_1 = require("@grnsft/if-core/utils");
29
29
  const aggregate_1 = require("./aggregate");
@@ -34,6 +34,32 @@ const config_1 = require("../config");
34
34
  const { PluginInitializationError, MissingPluginMethodError, MissingPluginPathError, } = utils_1.ERRORS;
35
35
  const { GITHUB_PATH, NATIVE_PLUGIN } = config_1.CONFIG;
36
36
  const { MISSING_METHOD, MISSING_PATH, NOT_NATIVE_PLUGIN, INVALID_MODULE_PATH, LOADING_PLUGIN_FROM_PATH, INITIALIZING_PLUGIN, INITIALIZING_PLUGINS, } = config_1.STRINGS;
37
+ /**
38
+ * Whether to output warnings for external plugins
39
+ */
40
+ let enableExternalPluginWarning = true;
41
+ /**
42
+ * Set whether to output warnings for external plugins.
43
+ * @param enable true if warnings for external plugins should be output
44
+ */
45
+ const setExternalPluginWarning = (enable) => {
46
+ enableExternalPluginWarning = enable;
47
+ };
48
+ exports.setExternalPluginWarning = setExternalPluginWarning;
49
+ /**
50
+ * List of plugins to disable
51
+ */
52
+ let disabledPlugins = new Set();
53
+ /**
54
+ * Set plugins to be disabled.
55
+ * Each element is specified in the format `plugin-path:method-name`.
56
+ * Built-in plugins are specified as `builtin:method-name`.
57
+ * @param pluginsToBeDisabled List of plugins to be disabled
58
+ */
59
+ const setDisabledPlugins = (pluginsToBeDisabled) => {
60
+ disabledPlugins = pluginsToBeDisabled;
61
+ };
62
+ exports.setDisabledPlugins = setDisabledPlugins;
37
63
  /**
38
64
  * Imports module by given `path`.
39
65
  */
@@ -58,6 +84,9 @@ const importAndVerifyModule = async (method, path) => {
58
84
  const handModule = (method, pluginPath) => {
59
85
  console.debug(LOADING_PLUGIN_FROM_PATH(method, pluginPath), '\n');
60
86
  if (pluginPath === 'builtin') {
87
+ if (disabledPlugins.has('builtin:' + method)) {
88
+ throw new PluginInitializationError(INVALID_MODULE_PATH(`builtin:${method}`));
89
+ }
61
90
  pluginPath = path.normalize(`${__dirname}/../builtins`);
62
91
  }
63
92
  else {
@@ -65,7 +94,12 @@ const handModule = (method, pluginPath) => {
65
94
  const parts = pluginPath.split('/');
66
95
  pluginPath = parts[parts.length - 1];
67
96
  }
68
- if (!pluginPath.includes(NATIVE_PLUGIN)) {
97
+ pluginPath = path.normalize(pluginPath);
98
+ if (pluginPath.startsWith('../') ||
99
+ disabledPlugins.has(`${pluginPath}:${method}`)) {
100
+ throw new PluginInitializationError(INVALID_MODULE_PATH(`${pluginPath}:${method}`));
101
+ }
102
+ if (enableExternalPluginWarning && !pluginPath.includes(NATIVE_PLUGIN)) {
69
103
  (0, log_memoize_1.memoizedLog)(logger_1.logger.warn, NOT_NATIVE_PLUGIN(pluginPath));
70
104
  }
71
105
  }
@@ -110,4 +144,4 @@ const initialize = async (context) => {
110
144
  return storage;
111
145
  };
112
146
  exports.initialize = initialize;
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdGlhbGl6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pZi1ydW4vbGliL2luaXRpYWxpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBa0M7QUFFbEMsaURBQTZDO0FBRzdDLDJDQUFvRDtBQUVwRCxxREFBZ0Q7QUFDaEQscURBQWdEO0FBQ2hELDJEQUFxRDtBQUVyRCxzQ0FBMEM7QUFLMUMsTUFBTSxFQUNKLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIsc0JBQXNCLEdBQ3ZCLEdBQUcsY0FBTSxDQUFDO0FBRVgsTUFBTSxFQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFDNUMsTUFBTSxFQUNKLGNBQWMsRUFDZCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQix3QkFBd0IsRUFDeEIsbUJBQW1CLEVBQ25CLG9CQUFvQixHQUNyQixHQUFHLGdCQUFPLENBQUM7QUFFWjs7R0FFRztBQUNILE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxFQUFFLElBQVksRUFBRSxFQUFFO0lBQzlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sbUJBQU8sSUFBSSx3Q0FBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDOUMsTUFBTSxJQUFJLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHLEtBQUssRUFBRSxNQUFjLEVBQUUsSUFBWSxFQUFFLEVBQUU7SUFDbkUsTUFBTSxZQUFZLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVsRCxPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QixDQUFD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QUNqQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQXZCVyxRQUFBLFVBQVUsY0F1QnJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQge0VSUk9SU30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3V0aWxzJztcbmltcG9ydCB7UGx1Z2luSW50ZXJmYWNlfSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdHlwZXMnO1xuXG5pbXBvcnQge3N0b3JlQWdncmVnYXRpb25NZXRyaWNzfSBmcm9tICcuL2FnZ3JlZ2F0ZSc7XG5cbmltcG9ydCB7bG9nZ2VyfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbC9sb2dnZXInO1xuaW1wb3J0IHttZW1vaXplZExvZ30gZnJvbSAnLi4vdXRpbC9sb2ctbWVtb2l6ZSc7XG5pbXBvcnQge3BsdWdpblN0b3JhZ2V9IGZyb20gJy4uL3V0aWwvcGx1Z2luLXN0b3JhZ2UnO1xuXG5pbXBvcnQge0NPTkZJRywgU1RSSU5HU30gZnJvbSAnLi4vY29uZmlnJztcblxuaW1wb3J0IHtDb250ZXh0LCBQbHVnaW5PcHRpb25zfSBmcm9tICcuLi8uLi9jb21tb24vdHlwZXMvbWFuaWZlc3QnO1xuaW1wb3J0IHtQbHVnaW5TdG9yYWdlSW50ZXJmYWNlfSBmcm9tICcuLi90eXBlcy9wbHVnaW4tc3RvcmFnZSc7XG5cbmNvbnN0IHtcbiAgUGx1Z2luSW5pdGlhbGl6YXRpb25FcnJvcixcbiAgTWlzc2luZ1BsdWdpbk1ldGhvZEVycm9yLFxuICBNaXNzaW5nUGx1Z2luUGF0aEVycm9yLFxufSA9IEVSUk9SUztcblxuY29uc3Qge0dJVEhVQl9QQVRILCBOQVRJVkVfUExVR0lOfSA9IENPTkZJRztcbmNvbnN0IHtcbiAgTUlTU0lOR19NRVRIT0QsXG4gIE1JU1NJTkdfUEFUSCxcbiAgTk9UX05BVElWRV9QTFVHSU4sXG4gIElOVkFMSURfTU9EVUxFX1BBVEgsXG4gIExPQURJTkdfUExVR0lOX0ZST01fUEFUSCxcbiAgSU5JVElBTElaSU5HX1BMVUdJTixcbiAgSU5JVElBTElaSU5HX1BMVUdJTlMsXG59ID0gU1RSSU5HUztcblxuLyoqXG4gKiBJbXBvcnRzIG1vZHVsZSBieSBnaXZlbiBgcGF0aGAuXG4gKi9cbmNvbnN0IGltcG9ydE1vZHVsZUZyb20gPSBhc3luYyAocGF0aDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChwYXRoKS5jYXRjaChlcnJvciA9PiB7XG4gICAgdGhyb3cgbmV3IFBsdWdpbkluaXRpYWxpemF0aW9uRXJyb3IoSU5WQUxJRF9NT0RVTEVfUEFUSChwYXRoLCBlcnJvcikpO1xuICB9KTtcblxuICByZXR1cm4gbW9kdWxlO1xufTtcblxuLyoqXG4gKiBJbXBvcnRzIGBtb2R1bGVgIGZyb20gZ2l2ZW4gYHBhdGhgIGFuZCByZXR1cm5zIHJlcXVlc3RlZCBgbWV0aG9kYC5cbiAqL1xuY29uc3QgaW1wb3J0QW5kVmVyaWZ5TW9kdWxlID0gYXN5bmMgKG1ldGhvZDogc3RyaW5nLCBwYXRoOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgcGx1Z2luTW9kdWxlID0gYXdhaXQgaW1wb3J0TW9kdWxlRnJvbShwYXRoKTtcblxuICByZXR1cm4gcGx1Z2luTW9kdWxlW21ldGhvZF07XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBwbHVnaW4gaXMgbWlzc2luZyB0aGVuIHJlamVjdHMgd2l0aCBlcnJvci5cbiAqIFRoZW4gY2hlY2tzIGlmIGBwYXRoYCBpcyBzdGFydGluZyB3aXRoIGdpdGh1YiwgdGhlbiBncmFicyB0aGUgcmVwb3NpdG9yeSBuYW1lLlxuICogSW1wb3J0cyBtb2R1bGUsIHRoZW4gY2hlY2tzIGlmIGl0J3MgYSB2YWxpZCBwbHVnaW4uXG4gKi9cbmNvbnN0IGhhbmRNb2R1bGUgPSAobWV0aG9kOiBzdHJpbmcsIHBsdWdpblBhdGg6IHN0cmluZykgPT4ge1xuICBjb25zb2xlLmRlYnVnKExPQURJTkdfUExVR0lOX0ZST01fUEFUSChtZXRob2QsIHBsdWdpblBhdGgpLCAnXFxuJyk7XG5cbiAgaWYgKHBsdWdpblBhdGggPT09ICdidWlsdGluJykge1xuICAgIHBsdWdpblBhdGggPSBwYXRoLm5vcm1hbGl6ZShgJHtfX2Rpcm5hbWV9Ly4uL2J1aWx0aW5zYCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHBsdWdpblBhdGg/LnN0YXJ0c1dpdGgoR0lUSFVCX1BBVEgpKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHBsdWdpblBhdGguc3BsaXQoJy8nKTtcbiAgICAgIHBsdWdpblBhdGggPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbiAgICB9XG5cbiAgICBpZiAoIXBsdWdpblBhdGguaW5jbHVkZXMoTkFUSVZFX1BMVUdJTikpIHtcbiAgICAgIG1lbW9pemVkTG9nKGxvZ2dlci53YXJuLCBOT1RfTkFUSVZFX1BMVUdJTihwbHVnaW5QYXRoKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGltcG9ydEFuZFZlcmlmeU1vZHVsZShtZXRob2QsIHBsdWdpblBhdGgpO1xufTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBwbHVnaW4gd2l0aCBjb25maWcuXG4gKi9cbmNvbnN0IGluaXRQbHVnaW4gPSBhc3luYyAoXG4gIGluaXRQbHVnaW5QYXJhbXM6IFBsdWdpbk9wdGlvbnNcbik6IFByb21pc2U8UGx1Z2luSW50ZXJmYWNlPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBtZXRob2QsXG4gICAgcGF0aCxcbiAgICBtYXBwaW5nLFxuICAgIGNvbmZpZyxcbiAgICAncGFyYW1ldGVyLW1ldGFkYXRhJzogcGFyYW1ldGVyTWV0YWRhdGEsXG4gIH0gPSBpbml0UGx1Z2luUGFyYW1zITtcblxuICBpZiAoIW1ldGhvZCkge1xuICAgIHRocm93IG5ldyBNaXNzaW5nUGx1Z2luTWV0aG9kRXJyb3IoTUlTU0lOR19NRVRIT0QpO1xuICB9XG5cbiAgaWYgKCFwYXRoKSB7XG4gICAgdGhyb3cgbmV3IE1pc3NpbmdQbHVnaW5QYXRoRXJyb3IoTUlTU0lOR19QQVRIKTtcbiAgfVxuXG4gIGNvbnN0IHBsdWdpbiA9IGF3YWl0IGhhbmRNb2R1bGUobWV0aG9kLCBwYXRoKTtcblxuICByZXR1cm4gcGx1Z2luKGNvbmZpZywgcGFyYW1ldGVyTWV0YWRhdGEsIG1hcHBpbmcpO1xufTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYWxsIHBsdWdpbnMgZnJvbSBgbWFuaWZlc3RgLmBpbml0aWFsaXplYCBwcm9wZXJ0eS5cbiAqIDEuIEluaXRhbGl6ZXMgcGx1Z2luIHN0b3JhZ2UuXG4gKiAyLiBJdGVyYXRlcyBvdmVyIHBsdWdpbiBuYW1lcyBhcnJheS5cbiAqIDMuIFdoaWxlIGl0ZXJhdGlvbiwgaW5pdGFsaXplcyBjdXJyZW50IHBsdWdpbiwgZ2F0aGVycyBpdCdzIHBhcmFtZXRlcnMgKGlucHV0L291dHB1dCkuXG4gKiAgICBUaGVuIHN0b3JlcyB0aGUgYWdncmVnYXRpb24gbWV0cmljcyBmb3IgZWFjaCBwYXJhbWV0ZXIgdG8gb3ZlcnJpZGUgc3R1YiB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBpbml0aWFsaXplID0gYXN5bmMgKFxuICBjb250ZXh0OiBDb250ZXh0XG4pOiBQcm9taXNlPFBsdWdpblN0b3JhZ2VJbnRlcmZhY2U+ID0+IHtcbiAgY29uc29sZS5kZWJ1ZyhJTklUSUFMSVpJTkdfUExVR0lOUywgJ1xcbicpO1xuICBjb25zdCB7cGx1Z2luc30gPSBjb250ZXh0LmluaXRpYWxpemU7XG4gIGNvbnN0IHN0b3JhZ2UgPSBwbHVnaW5TdG9yYWdlKCk7XG5cbiAgZm9yIGF3YWl0IChjb25zdCBwbHVnaW5OYW1lIG9mIE9iamVjdC5rZXlzKHBsdWdpbnMpKSB7XG4gICAgY29uc29sZS5kZWJ1ZyhJTklUSUFMSVpJTkdfUExVR0lOKHBsdWdpbk5hbWUpKTtcblxuICAgIGNvbnN0IHBsdWdpbiA9IGF3YWl0IGluaXRQbHVnaW4ocGx1Z2luc1twbHVnaW5OYW1lXSk7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHsuLi5wbHVnaW4ubWV0YWRhdGEuaW5wdXRzLCAuLi5wbHVnaW4ubWV0YWRhdGEub3V0cHV0c307XG5cbiAgICBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5mb3JFYWNoKGN1cnJlbnQgPT4ge1xuICAgICAgc3RvcmVBZ2dyZWdhdGlvbk1ldHJpY3Moe1xuICAgICAgICBbY3VycmVudF06IHBhcmFtZXRlcnNbY3VycmVudF1bJ2FnZ3JlZ2F0aW9uLW1ldGhvZCddLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzdG9yYWdlLnNldChwbHVnaW5OYW1lLCBwbHVnaW4pO1xuICB9XG5cbiAgcmV0dXJuIHN0b3JhZ2U7XG59O1xuIl19
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdGlhbGl6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pZi1ydW4vbGliL2luaXRpYWxpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBa0M7QUFFbEMsaURBQTZDO0FBRzdDLDJDQUFvRDtBQUVwRCxxREFBZ0Q7QUFDaEQscURBQWdEO0FBQ2hELDJEQUFxRDtBQUVyRCxzQ0FBMEM7QUFLMUMsTUFBTSxFQUNKLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIsc0JBQXNCLEdBQ3ZCLEdBQUcsY0FBTSxDQUFDO0FBRVgsTUFBTSxFQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFDNUMsTUFBTSxFQUNKLGNBQWMsRUFDZCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQix3QkFBd0IsRUFDeEIsbUJBQW1CLEVBQ25CLG9CQUFvQixHQUNyQixHQUFHLGdCQUFPLENBQUM7QUFFWjs7R0FFRztBQUNILElBQUksMkJBQTJCLEdBQUcsSUFBSSxDQUFDO0FBRXZDOzs7R0FHRztBQUNJLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxNQUFlLEVBQUUsRUFBRTtJQUMxRCwyQkFBMkIsR0FBRyxNQUFNLENBQUM7QUFDdkMsQ0FBQyxDQUFDO0FBRlcsUUFBQSx3QkFBd0IsNEJBRW5DO0FBRUY7O0dBRUc7QUFDSCxJQUFJLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0FBRXhDOzs7OztHQUtHO0FBQ0ksTUFBTSxrQkFBa0IsR0FBRyxDQUFDLG1CQUFnQyxFQUFFLEVBQUU7SUFDckUsZUFBZSxHQUFHLG1CQUFtQixDQUFDO0FBQ3hDLENBQUMsQ0FBQztBQUZXLFFBQUEsa0JBQWtCLHNCQUU3QjtBQUVGOztHQUVHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLEVBQUUsSUFBWSxFQUFFLEVBQUU7SUFDOUMsTUFBTSxNQUFNLEdB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SSxNQUFNLFVBQVUsR0FBRyxLQUFLLEVBQzdCLE9BQWdCLEVBQ2lCLEVBQUU7SUFDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxQyxNQUFNLEVBQUMsT0FBTyxFQUFDLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFBLDhCQUFhLEdBQUUsQ0FBQztJQUVoQyxJQUFJLEtBQUssRUFBRSxNQUFNLFVBQVUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ25ELE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUUvQyxNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLFVBQVUsR0FBRyxFQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBQyxDQUFDO1FBRTNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3hDLElBQUEsbUNBQXVCLEVBQUM7Z0JBQ3RCLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLG9CQUFvQixDQUFDO2FBQ3JELENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDakM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUM7QUF2QlcsUUFBQSxVQUFVLGNBdUJyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHtFUlJPUlN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS91dGlscyc7XG5pbXBvcnQge1BsdWdpbkludGVyZmFjZX0gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3R5cGVzJztcblxuaW1wb3J0IHtzdG9yZUFnZ3JlZ2F0aW9uTWV0cmljc30gZnJvbSAnLi9hZ2dyZWdhdGUnO1xuXG5pbXBvcnQge2xvZ2dlcn0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWwvbG9nZ2VyJztcbmltcG9ydCB7bWVtb2l6ZWRMb2d9IGZyb20gJy4uL3V0aWwvbG9nLW1lbW9pemUnO1xuaW1wb3J0IHtwbHVnaW5TdG9yYWdlfSBmcm9tICcuLi91dGlsL3BsdWdpbi1zdG9yYWdlJztcblxuaW1wb3J0IHtDT05GSUcsIFNUUklOR1N9IGZyb20gJy4uL2NvbmZpZyc7XG5cbmltcG9ydCB7Q29udGV4dCwgUGx1Z2luT3B0aW9uc30gZnJvbSAnLi4vLi4vY29tbW9uL3R5cGVzL21hbmlmZXN0JztcbmltcG9ydCB7UGx1Z2luU3RvcmFnZUludGVyZmFjZX0gZnJvbSAnLi4vdHlwZXMvcGx1Z2luLXN0b3JhZ2UnO1xuXG5jb25zdCB7XG4gIFBsdWdpbkluaXRpYWxpemF0aW9uRXJyb3IsXG4gIE1pc3NpbmdQbHVnaW5NZXRob2RFcnJvcixcbiAgTWlzc2luZ1BsdWdpblBhdGhFcnJvcixcbn0gPSBFUlJPUlM7XG5cbmNvbnN0IHtHSVRIVUJfUEFUSCwgTkFUSVZFX1BMVUdJTn0gPSBDT05GSUc7XG5jb25zdCB7XG4gIE1JU1NJTkdfTUVUSE9ELFxuICBNSVNTSU5HX1BBVEgsXG4gIE5PVF9OQVRJVkVfUExVR0lOLFxuICBJTlZBTElEX01PRFVMRV9QQVRILFxuICBMT0FESU5HX1BMVUdJTl9GUk9NX1BBVEgsXG4gIElOSVRJQUxJWklOR19QTFVHSU4sXG4gIElOSVRJQUxJWklOR19QTFVHSU5TLFxufSA9IFNUUklOR1M7XG5cbi8qKlxuICogV2hldGhlciB0byBvdXRwdXQgd2FybmluZ3MgZm9yIGV4dGVybmFsIHBsdWdpbnNcbiAqL1xubGV0IGVuYWJsZUV4dGVybmFsUGx1Z2luV2FybmluZyA9IHRydWU7XG5cbi8qKlxuICogU2V0IHdoZXRoZXIgdG8gb3V0cHV0IHdhcm5pbmdzIGZvciBleHRlcm5hbCBwbHVnaW5zLlxuICogQHBhcmFtIGVuYWJsZSB0cnVlIGlmIHdhcm5pbmdzIGZvciBleHRlcm5hbCBwbHVnaW5zIHNob3VsZCBiZSBvdXRwdXRcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4dGVybmFsUGx1Z2luV2FybmluZyA9IChlbmFibGU6IGJvb2xlYW4pID0+IHtcbiAgZW5hYmxlRXh0ZXJuYWxQbHVnaW5XYXJuaW5nID0gZW5hYmxlO1xufTtcblxuLyoqXG4gKiBMaXN0IG9mIHBsdWdpbnMgdG8gZGlzYWJsZVxuICovXG5sZXQgZGlzYWJsZWRQbHVnaW5zID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbi8qKlxuICogU2V0IHBsdWdpbnMgdG8gYmUgZGlzYWJsZWQuXG4gKiBFYWNoIGVsZW1lbnQgaXMgc3BlY2lmaWVkIGluIHRoZSBmb3JtYXQgYHBsdWdpbi1wYXRoOm1ldGhvZC1uYW1lYC5cbiAqIEJ1aWx0LWluIHBsdWdpbnMgYXJlIHNwZWNpZmllZCBhcyBgYnVpbHRpbjptZXRob2QtbmFtZWAuXG4gKiBAcGFyYW0gcGx1Z2luc1RvQmVEaXNhYmxlZCBMaXN0IG9mIHBsdWdpbnMgdG8gYmUgZGlzYWJsZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHNldERpc2FibGVkUGx1Z2lucyA9IChwbHVnaW5zVG9CZURpc2FibGVkOiBTZXQ8c3RyaW5nPikgPT4ge1xuICBkaXNhYmxlZFBsdWdpbnMgPSBwbHVnaW5zVG9CZURpc2FibGVkO1xufTtcblxuLyoqXG4gKiBJbXBvcnRzIG1vZHVsZSBieSBnaXZlbiBgcGF0aGAuXG4gKi9cbmNvbnN0IGltcG9ydE1vZHVsZUZyb20gPSBhc3luYyAocGF0aDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChwYXRoKS5jYXRjaChlcnJvciA9PiB7XG4gICAgdGhyb3cgbmV3IFBsdWdpbkluaXRpYWxpemF0aW9uRXJyb3IoSU5WQUxJRF9NT0RVTEVfUEFUSChwYXRoLCBlcnJvcikpO1xuICB9KTtcblxuICByZXR1cm4gbW9kdWxlO1xufTtcblxuLyoqXG4gKiBJbXBvcnRzIGBtb2R1bGVgIGZyb20gZ2l2ZW4gYHBhdGhgIGFuZCByZXR1cm5zIHJlcXVlc3RlZCBgbWV0aG9kYC5cbiAqL1xuY29uc3QgaW1wb3J0QW5kVmVyaWZ5TW9kdWxlID0gYXN5bmMgKG1ldGhvZDogc3RyaW5nLCBwYXRoOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgcGx1Z2luTW9kdWxlID0gYXdhaXQgaW1wb3J0TW9kdWxlRnJvbShwYXRoKTtcblxuICByZXR1cm4gcGx1Z2luTW9kdWxlW21ldGhvZF07XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBwbHVnaW4gaXMgbWlzc2luZyB0aGVuIHJlamVjdHMgd2l0aCBlcnJvci5cbiAqIFRoZW4gY2hlY2tzIGlmIGBwYXRoYCBpcyBzdGFydGluZyB3aXRoIGdpdGh1YiwgdGhlbiBncmFicyB0aGUgcmVwb3NpdG9yeSBuYW1lLlxuICogSW1wb3J0cyBtb2R1bGUsIHRoZW4gY2hlY2tzIGlmIGl0J3MgYSB2YWxpZCBwbHVnaW4uXG4gKi9cbmNvbnN0IGhhbmRNb2R1bGUgPSAobWV0aG9kOiBzdHJpbmcsIHBsdWdpblBhdGg6IHN0cmluZykgPT4ge1xuICBjb25zb2xlLmRlYnVnKExPQURJTkdfUExVR0lOX0ZST01fUEFUSChtZXRob2QsIHBsdWdpblBhdGgpLCAnXFxuJyk7XG5cbiAgaWYgKHBsdWdpblBhdGggPT09ICdidWlsdGluJykge1xuICAgIGlmIChkaXNhYmxlZFBsdWdpbnMuaGFzKCdidWlsdGluOicgKyBtZXRob2QpKSB7XG4gICAgICB0aHJvdyBuZXcgUGx1Z2luSW5pdGlhbGl6YXRpb25FcnJvcihcbiAgICAgICAgSU5WQUxJRF9NT0RVTEVfUEFUSChgYnVpbHRpbjoke21ldGhvZH1gKVxuICAgICAgKTtcbiAgICB9XG4gICAgcGx1Z2luUGF0aCA9IHBhdGgubm9ybWFsaXplKGAke19fZGlybmFtZX0vLi4vYnVpbHRpbnNgKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocGx1Z2luUGF0aD8uc3RhcnRzV2l0aChHSVRIVUJfUEFUSCkpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gcGx1Z2luUGF0aC5zcGxpdCgnLycpO1xuICAgICAgcGx1Z2luUGF0aCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuICAgIH1cblxuICAgIHBsdWdpblBhdGggPSBwYXRoLm5vcm1hbGl6ZShwbHVnaW5QYXRoKTtcbiAgICBpZiAoXG4gICAgICBwbHVnaW5QYXRoLnN0YXJ0c1dpdGgoJy4uLycpIHx8XG4gICAgICBkaXNhYmxlZFBsdWdpbnMuaGFzKGAke3BsdWdpblBhdGh9OiR7bWV0aG9kfWApXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgUGx1Z2luSW5pdGlhbGl6YXRpb25FcnJvcihcbiAgICAgICAgSU5WQUxJRF9NT0RVTEVfUEFUSChgJHtwbHVnaW5QYXRofToke21ldGhvZH1gKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZW5hYmxlRXh0ZXJuYWxQbHVnaW5XYXJuaW5nICYmICFwbHVnaW5QYXRoLmluY2x1ZGVzKE5BVElWRV9QTFVHSU4pKSB7XG4gICAgICBtZW1vaXplZExvZyhsb2dnZXIud2FybiwgTk9UX05BVElWRV9QTFVHSU4ocGx1Z2luUGF0aCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbXBvcnRBbmRWZXJpZnlNb2R1bGUobWV0aG9kLCBwbHVnaW5QYXRoKTtcbn07XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgcGx1Z2luIHdpdGggY29uZmlnLlxuICovXG5jb25zdCBpbml0UGx1Z2luID0gYXN5bmMgKFxuICBpbml0UGx1Z2luUGFyYW1zOiBQbHVnaW5PcHRpb25zXG4pOiBQcm9taXNlPFBsdWdpbkludGVyZmFjZT4gPT4ge1xuICBjb25zdCB7XG4gICAgbWV0aG9kLFxuICAgIHBhdGgsXG4gICAgbWFwcGluZyxcbiAgICBjb25maWcsXG4gICAgJ3BhcmFtZXRlci1tZXRhZGF0YSc6IHBhcmFtZXRlck1ldGFkYXRhLFxuICB9ID0gaW5pdFBsdWdpblBhcmFtcyE7XG5cbiAgaWYgKCFtZXRob2QpIHtcbiAgICB0aHJvdyBuZXcgTWlzc2luZ1BsdWdpbk1ldGhvZEVycm9yKE1JU1NJTkdfTUVUSE9EKTtcbiAgfVxuXG4gIGlmICghcGF0aCkge1xuICAgIHRocm93IG5ldyBNaXNzaW5nUGx1Z2luUGF0aEVycm9yKE1JU1NJTkdfUEFUSCk7XG4gIH1cblxuICBjb25zdCBwbHVnaW4gPSBhd2FpdCBoYW5kTW9kdWxlKG1ldGhvZCwgcGF0aCk7XG5cbiAgcmV0dXJuIHBsdWdpbihjb25maWcsIHBhcmFtZXRlck1ldGFkYXRhLCBtYXBwaW5nKTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGFsbCBwbHVnaW5zIGZyb20gYG1hbmlmZXN0YC5gaW5pdGlhbGl6ZWAgcHJvcGVydHkuXG4gKiAxLiBJbml0YWxpemVzIHBsdWdpbiBzdG9yYWdlLlxuICogMi4gSXRlcmF0ZXMgb3ZlciBwbHVnaW4gbmFtZXMgYXJyYXkuXG4gKiAzLiBXaGlsZSBpdGVyYXRpb24sIGluaXRhbGl6ZXMgY3VycmVudCBwbHVnaW4sIGdhdGhlcnMgaXQncyBwYXJhbWV0ZXJzIChpbnB1dC9vdXRwdXQpLlxuICogICAgVGhlbiBzdG9yZXMgdGhlIGFnZ3JlZ2F0aW9uIG1ldHJpY3MgZm9yIGVhY2ggcGFyYW1ldGVyIHRvIG92ZXJyaWRlIHN0dWIgdmFsdWVzLlxuICovXG5leHBvcnQgY29uc3QgaW5pdGlhbGl6ZSA9IGFzeW5jIChcbiAgY29udGV4dDogQ29udGV4dFxuKTogUHJvbWlzZTxQbHVnaW5TdG9yYWdlSW50ZXJmYWNlPiA9PiB7XG4gIGNvbnNvbGUuZGVidWcoSU5JVElBTElaSU5HX1BMVUdJTlMsICdcXG4nKTtcbiAgY29uc3Qge3BsdWdpbnN9ID0gY29udGV4dC5pbml0aWFsaXplO1xuICBjb25zdCBzdG9yYWdlID0gcGx1Z2luU3RvcmFnZSgpO1xuXG4gIGZvciBhd2FpdCAoY29uc3QgcGx1Z2luTmFtZSBvZiBPYmplY3Qua2V5cyhwbHVnaW5zKSkge1xuICAgIGNvbnNvbGUuZGVidWcoSU5JVElBTElaSU5HX1BMVUdJTihwbHVnaW5OYW1lKSk7XG5cbiAgICBjb25zdCBwbHVnaW4gPSBhd2FpdCBpbml0UGx1Z2luKHBsdWdpbnNbcGx1Z2luTmFtZV0pO1xuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7Li4ucGx1Z2luLm1ldGFkYXRhLmlucHV0cywgLi4ucGx1Z2luLm1ldGFkYXRhLm91dHB1dHN9O1xuXG4gICAgT2JqZWN0LmtleXMocGFyYW1ldGVycykuZm9yRWFjaChjdXJyZW50ID0+IHtcbiAgICAgIHN0b3JlQWdncmVnYXRpb25NZXRyaWNzKHtcbiAgICAgICAgW2N1cnJlbnRdOiBwYXJhbWV0ZXJzW2N1cnJlbnRdWydhZ2dyZWdhdGlvbi1tZXRob2QnXSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgc3RvcmFnZS5zZXQocGx1Z2luTmFtZSwgcGx1Z2luKTtcbiAgfVxuXG4gIHJldHVybiBzdG9yYWdlO1xufTtcbiJdfQ==
@@ -1,10 +1,11 @@
1
1
  import { PluginParams } from '@grnsft/if-core/types';
2
+ import type { Node } from '../types/compute';
2
3
  /**
3
4
  * Regroups inputs and outputs based on the given group keys.
4
5
  */
5
- export declare const Regroup: (inputs: PluginParams[], outputs: PluginParams[], groups: string[]) => any;
6
+ export declare const Regroup: (inputs: PluginParams[], outputs: PluginParams[], groups: string[]) => Record<string, Node>;
6
7
  /**
7
8
  * Grabs all the values according to grouping criteria, then
8
9
  * checks if regroup values are present in the children list.
9
10
  */
10
- export declare const isRegrouped: (groups: string[], outputStorage: PluginParams[], childNames: Set<string>) => boolean;
11
+ export declare const isRegrouped: (groups: readonly string[], inputs: readonly PluginParams[], childNames: readonly string[]) => boolean;
@@ -11,14 +11,15 @@ const { INVALID_GROUP_KEY, REGROUP_ERROR } = config_1.STRINGS;
11
11
  * Creates structure to insert inputs by groups.
12
12
  */
13
13
  const appendGroup = (value, object, target, groups) => {
14
+ var _a;
14
15
  if (groups.length === 0) {
15
- object[target] = object[target] || [];
16
+ object[target] || (object[target] = []);
16
17
  object[target].push(value);
17
18
  return object;
18
19
  }
19
20
  const group = groups.shift();
20
- object.children = object.children || {};
21
- object.children[group] = object.children[group] || {};
21
+ object.children || (object.children = {});
22
+ (_a = object.children)[group] || (_a[group] = {});
22
23
  return appendGroup(value, object.children[group], target, groups);
23
24
  };
24
25
  /**
@@ -60,12 +61,15 @@ exports.Regroup = Regroup;
60
61
  * Grabs all the values according to grouping criteria, then
61
62
  * checks if regroup values are present in the children list.
62
63
  */
63
- const isRegrouped = (groups, outputStorage, childNames) => {
64
+ const isRegrouped = (groups, inputs, childNames) => {
64
65
  const validatedGroups = validateGroups(groups);
65
- const regroupValues = validatedGroups
66
- .map(group => [...new Set(outputStorage.map(output => output[group]))])
67
- .flat();
68
- return regroupValues.every(one => [...childNames].includes(one));
66
+ if (childNames.length < validatedGroups.length) {
67
+ return false;
68
+ }
69
+ else if (childNames.length > validatedGroups.length) {
70
+ childNames = childNames.slice(-validatedGroups.length);
71
+ }
72
+ return inputs.every(input => validatedGroups.every((group, index) => input[group] === childNames[index]));
69
73
  };
70
74
  exports.isRegrouped = isRegrouped;
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVncm91cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pZi1ydW4vbGliL3JlZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXNCO0FBQ3RCLGlEQUE2QztBQUc3QywrREFBdUQ7QUFFdkQsc0NBQWtDO0FBRWxDLE1BQU0sRUFBQyxvQkFBb0IsRUFBQyxHQUFHLGNBQU0sQ0FBQztBQUN0QyxNQUFNLEVBQUMsaUJBQWlCLEVBQUUsYUFBYSxFQUFDLEdBQUcsZ0JBQU8sQ0FBQztBQUVuRDs7R0FFRztBQUNILE1BQU0sV0FBVyxHQUFHLENBQ2xCLEtBQW1CLEVBQ25CLE1BQVcsRUFDWCxNQUFjLEVBQ2QsTUFBZ0IsRUFDWCxFQUFFO0lBQ1AsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN2QixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLE9BQU8sTUFBTSxDQUFDO0tBQ2Y7SUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFHLENBQUM7SUFDOUIsTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztJQUN4QyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBRXRELE9BQU8sV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNwRSxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBZ0IsRUFBWSxFQUFFO0lBQ3BELE1BQU0sU0FBUyxHQUFHLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBQyxDQUFDO0lBQ3BDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FDL0IsT0FBQyxDQUFDLE1BQU0sRUFBRSxFQUNWLE9BQUMsQ0FBQyxLQUFLLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUMsT0FBTyxFQUFFLGFBQWEsRUFBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNyRCxDQUFDO0lBRUYsSUFBQSxzQkFBUSxFQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXRDLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFtQixFQUFFLFFBQWdCLEVBQVUsRUFBRTtJQUN2RSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3BCLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0tBQzdEO0lBRUQsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSSxNQUFNLE9BQU8sR0FBRyxDQUNyQixNQUFzQixFQUN0QixPQUF1QixFQUN2QixNQUFnQixFQUNYLEVBQUU7SUFDUCxNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFL0MsTUFBTSxtQkFBbUIsR0FBRyxDQUMxQixLQUFxQixFQUNyQixHQUFRLEVBQ1IsTUFBYyxFQUNkLEVBQUU7UUFDRixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtZQUN4QixNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQ3BELGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQy9CLENBQUM7WUFDRixXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDLENBQUM7SUFFRixNQUFNLEdBQUcsR0FBRyxFQUFTLENBQUM7SUFDdEIsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRTdDLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUN0QixDQUFDLENBQUM7QUF6QlcsUUFBQSxPQUFPLFdBeUJsQjtBQUVGOzs7R0FHRztBQUNJLE1BQU0sV0FBVyxHQUFHLENBQ3pCLE1BQWdCLEVBQ2hCLGFBQTZCLEVBQzdCLFVBQXVCLEVBQ3ZCLEVBQUU7SUFDRixNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsTUFBTSxhQUFhLEdBQUcsZUFBZTtTQUNsQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0RSxJQUFJLEVBQUUsQ0FBQztJQUVWLE9BQU8sYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRSxDQUFDLENBQUM7QUFYVyxRQUFBLFdBQVcsZUFXdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5pbXBvcnQge0VSUk9SU30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3V0aWxzJztcbmltcG9ydCB7UGx1Z2luUGFyYW1zfSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdHlwZXMnO1xuXG5pbXBvcnQge3ZhbGlkYXRlfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbC92YWxpZGF0aW9ucyc7XG5cbmltcG9ydCB7U1RSSU5HU30gZnJvbSAnLi4vY29uZmlnJztcblxuY29uc3Qge0ludmFsaWRHcm91cGluZ0Vycm9yfSA9IEVSUk9SUztcbmNvbnN0IHtJTlZBTElEX0dST1VQX0tFWSwgUkVHUk9VUF9FUlJPUn0gPSBTVFJJTkdTO1xuXG4vKipcbiAqIENyZWF0ZXMgc3RydWN0dXJlIHRvIGluc2VydCBpbnB1dHMgYnkgZ3JvdXBzLlxuICovXG5jb25zdCBhcHBlbmRHcm91cCA9IChcbiAgdmFsdWU6IFBsdWdpblBhcmFtcyxcbiAgb2JqZWN0OiBhbnksXG4gIHRhcmdldDogc3RyaW5nLFxuICBncm91cHM6IHN0cmluZ1tdXG4pOiBhbnkgPT4ge1xuICBpZiAoZ3JvdXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIG9iamVjdFt0YXJnZXRdID0gb2JqZWN0W3RhcmdldF0gfHwgW107XG4gICAgb2JqZWN0W3RhcmdldF0ucHVzaCh2YWx1ZSk7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIGNvbnN0IGdyb3VwID0gZ3JvdXBzLnNoaWZ0KCkhO1xuICBvYmplY3QuY2hpbGRyZW4gPSBvYmplY3QuY2hpbGRyZW4gfHwge307XG4gIG9iamVjdC5jaGlsZHJlbltncm91cF0gPSBvYmplY3QuY2hpbGRyZW5bZ3JvdXBdIHx8IHt9O1xuXG4gIHJldHVybiBhcHBlbmRHcm91cCh2YWx1ZSwgb2JqZWN0LmNoaWxkcmVuW2dyb3VwXSwgdGFyZ2V0LCBncm91cHMpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGdyb3VwcyBhcnJheS5cbiAqL1xuY29uc3QgdmFsaWRhdGVHcm91cHMgPSAoZ3JvdXBzOiBzdHJpbmdbXSk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgaW5wdXREYXRhID0ge3JlZ3JvdXA6IGdyb3Vwc307XG4gIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPSB6LnJlY29yZChcbiAgICB6LnN0cmluZygpLFxuICAgIHouYXJyYXkoei5zdHJpbmcoKSwge21lc3NhZ2U6IFJFR1JPVVBfRVJST1J9KS5taW4oMSlcbiAgKTtcblxuICB2YWxpZGF0ZSh2YWxpZGF0aW9uU2NoZW1hLCBpbnB1dERhdGEpO1xuXG4gIHJldHVybiBncm91cHM7XG59O1xuXG4vKipcbiAqIExvb2tzIHVwIGEgZ3JvdXAga2V5IHZhbHVlIGluIHRoZSBpbnB1dC5cbiAqL1xuY29uc3QgbG9va3VwR3JvdXBLZXkgPSAoaW5wdXQ6IFBsdWdpblBhcmFtcywgZ3JvdXBLZXk6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmICghaW5wdXRbZ3JvdXBLZXldKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRHcm91cGluZ0Vycm9yKElOVkFMSURfR1JPVVBfS0VZKGdyb3VwS2V5KSk7XG4gIH1cblxuICByZXR1cm4gaW5wdXRbZ3JvdXBLZXldO1xufTtcblxuLyoqXG4gKiBSZWdyb3VwcyBpbnB1dHMgYW5kIG91dHB1dHMgYmFzZWQgb24gdGhlIGdpdmVuIGdyb3VwIGtleXMuXG4gKi9cbmV4cG9ydCBjb25zdCBSZWdyb3VwID0gKFxuICBpbnB1dHM6IFBsdWdpblBhcmFtc1tdLFxuICBvdXRwdXRzOiBQbHVnaW5QYXJhbXNbXSxcbiAgZ3JvdXBzOiBzdHJpbmdbXVxuKTogYW55ID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkR3JvdXBzID0gdmFsaWRhdGVHcm91cHMoZ3JvdXBzKTtcblxuICBjb25zdCBhcHBlbmRUb0FjY3VtdWxhdG9yID0gKFxuICAgIGl0ZW1zOiBQbHVnaW5QYXJhbXNbXSxcbiAgICBhY2M6IGFueSxcbiAgICB0YXJnZXQ6IHN0cmluZ1xuICApID0+IHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGNvbnN0IGdyb3Vwc1dpdGhEYXRhID0gdmFsaWRhdGVkR3JvdXBzLm1hcChncm91cEtleSA9PlxuICAgICAgICBsb29rdXBHcm91cEtleShpdGVtLCBncm91cEtleSlcbiAgICAgICk7XG4gICAgICBhcHBlbmRHcm91cChpdGVtLCBhY2MsIHRhcmdldCwgZ3JvdXBzV2l0aERhdGEpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhY2MgPSB7fSBhcyBhbnk7XG4gIGFwcGVuZFRvQWNjdW11bGF0b3IoaW5wdXRzLCBhY2MsICdpbnB1dHMnKTtcbiAgYXBwZW5kVG9BY2N1bXVsYXRvcihvdXRwdXRzLCBhY2MsICdvdXRwdXRzJyk7XG5cbiAgcmV0dXJuIGFjYy5jaGlsZHJlbjtcbn07XG5cbi8qKlxuICogR3JhYnMgYWxsIHRoZSB2YWx1ZXMgYWNjb3JkaW5nIHRvIGdyb3VwaW5nIGNyaXRlcmlhLCB0aGVuXG4gKiAgY2hlY2tzIGlmIHJlZ3JvdXAgdmFsdWVzIGFyZSBwcmVzZW50IGluIHRoZSBjaGlsZHJlbiBsaXN0LlxuICovXG5leHBvcnQgY29uc3QgaXNSZWdyb3VwZWQgPSAoXG4gIGdyb3Vwczogc3RyaW5nW10sXG4gIG91dHB1dFN0b3JhZ2U6IFBsdWdpblBhcmFtc1tdLFxuICBjaGlsZE5hbWVzOiBTZXQ8c3RyaW5nPlxuKSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZEdyb3VwcyA9IHZhbGlkYXRlR3JvdXBzKGdyb3Vwcyk7XG4gIGNvbnN0IHJlZ3JvdXBWYWx1ZXMgPSB2YWxpZGF0ZWRHcm91cHNcbiAgICAubWFwKGdyb3VwID0+IFsuLi5uZXcgU2V0KG91dHB1dFN0b3JhZ2UubWFwKG91dHB1dCA9PiBvdXRwdXRbZ3JvdXBdKSldKVxuICAgIC5mbGF0KCk7XG5cbiAgcmV0dXJuIHJlZ3JvdXBWYWx1ZXMuZXZlcnkob25lID0+IFsuLi5jaGlsZE5hbWVzXS5pbmNsdWRlcyhvbmUpKTtcbn07XG4iXX0=
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVncm91cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pZi1ydW4vbGliL3JlZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXNCO0FBQ3RCLGlEQUE2QztBQUc3QywrREFBdUQ7QUFHdkQsc0NBQWtDO0FBRWxDLE1BQU0sRUFBQyxvQkFBb0IsRUFBQyxHQUFHLGNBQU0sQ0FBQztBQUN0QyxNQUFNLEVBQUMsaUJBQWlCLEVBQUUsYUFBYSxFQUFDLEdBQUcsZ0JBQU8sQ0FBQztBQUVuRDs7R0FFRztBQUNILE1BQU0sV0FBVyxHQUFHLENBQ2xCLEtBQW1CLEVBQ25CLE1BQVksRUFDWixNQUE0QixFQUM1QixNQUFnQixFQUNWLEVBQUU7O0lBQ1IsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN2QixNQUFNLENBQUMsTUFBTSxNQUFiLE1BQU0sQ0FBQyxNQUFNLElBQU0sRUFBRSxFQUFDO1FBQ3RCLE1BQU0sQ0FBQyxNQUFNLENBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxNQUFNLENBQUM7S0FDZjtJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUcsQ0FBQztJQUM5QixNQUFNLENBQUMsUUFBUSxLQUFmLE1BQU0sQ0FBQyxRQUFRLEdBQUssRUFBRSxFQUFDO0lBQ3ZCLE1BQUEsTUFBTSxDQUFDLFFBQVEsRUFBQyxLQUFLLFNBQUwsS0FBSyxJQUFNLEVBQUUsRUFBQztJQUU5QixPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDcEUsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLE1BQXlCLEVBQXFCLEVBQUU7SUFDdEUsTUFBTSxTQUFTLEdBQUcsRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFDLENBQUM7SUFDcEMsTUFBTSxnQkFBZ0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUMvQixPQUFDLENBQUMsTUFBTSxFQUFFLEVBQ1YsT0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBQyxPQUFPLEVBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQ3JELENBQUM7SUFFRixJQUFBLHNCQUFRLEVBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFdEMsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQW1CLEVBQUUsUUFBZ0IsRUFBVSxFQUFFO0lBQ3ZFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDcEIsTUFBTSxJQUFJLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7S0FDN0Q7SUFFRCxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6QixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNJLE1BQU0sT0FBTyxHQUFHLENBQ3JCLE1BQXNCLEVBQ3RCLE9BQXVCLEVBQ3ZCLE1BQWdCLEVBQ00sRUFBRTtJQUN4QixNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFL0MsTUFBTSxtQkFBbUIsR0FBRyxDQUMxQixLQUFxQixFQUNyQixHQUFTLEVBQ1QsTUFBNEIsRUFDdEIsRUFBRTtRQUNSLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3hCLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FDcEQsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FDL0IsQ0FBQztZQUNGLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztTQUNoRDtJQUNILENBQUMsQ0FBQztJQUVGLE1BQU0sR0FBRyxHQUFTLEVBQUUsQ0FBQztJQUNyQixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFN0MsT0FBTyxHQUFHLENBQUMsUUFBUyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQXpCVyxRQUFBLE9BQU8sV0F5QmxCO0FBRUY7OztHQUdHO0FBQ0ksTUFBTSxXQUFXLEdBQUcsQ0FDekIsTUFBeUIsRUFDekIsTUFBK0IsRUFDL0IsVUFBNkIsRUFDcEIsRUFBRTtJQUNYLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRTtRQUM5QyxPQUFPLEtBQUssQ0FBQztLQUNkO1NBQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUU7UUFDckQsVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDeEQ7SUFDRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDMUIsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDNUUsQ0FBQztBQUNKLENBQUMsQ0FBQztBQWRXLFFBQUEsV0FBVyxlQWN0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7en0gZnJvbSAnem9kJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdXRpbHMnO1xuaW1wb3J0IHtQbHVnaW5QYXJhbXN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS90eXBlcyc7XG5cbmltcG9ydCB7dmFsaWRhdGV9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlsL3ZhbGlkYXRpb25zJztcbmltcG9ydCB0eXBlIHtOb2RlfSBmcm9tICcuLi90eXBlcy9jb21wdXRlJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi9jb25maWcnO1xuXG5jb25zdCB7SW52YWxpZEdyb3VwaW5nRXJyb3J9ID0gRVJST1JTO1xuY29uc3Qge0lOVkFMSURfR1JPVVBfS0VZLCBSRUdST1VQX0VSUk9SfSA9IFNUUklOR1M7XG5cbi8qKlxuICogQ3JlYXRlcyBzdHJ1Y3R1cmUgdG8gaW5zZXJ0IGlucHV0cyBieSBncm91cHMuXG4gKi9cbmNvbnN0IGFwcGVuZEdyb3VwID0gKFxuICB2YWx1ZTogUGx1Z2luUGFyYW1zLFxuICBvYmplY3Q6IE5vZGUsXG4gIHRhcmdldDogJ2lucHV0cycgfCAnb3V0cHV0cycsXG4gIGdyb3Vwczogc3RyaW5nW11cbik6IE5vZGUgPT4ge1xuICBpZiAoZ3JvdXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIG9iamVjdFt0YXJnZXRdIHx8PSBbXTtcbiAgICBvYmplY3RbdGFyZ2V0XSEucHVzaCh2YWx1ZSk7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIGNvbnN0IGdyb3VwID0gZ3JvdXBzLnNoaWZ0KCkhO1xuICBvYmplY3QuY2hpbGRyZW4gfHw9IHt9O1xuICBvYmplY3QuY2hpbGRyZW5bZ3JvdXBdIHx8PSB7fTtcblxuICByZXR1cm4gYXBwZW5kR3JvdXAodmFsdWUsIG9iamVjdC5jaGlsZHJlbltncm91cF0sIHRhcmdldCwgZ3JvdXBzKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBncm91cHMgYXJyYXkuXG4gKi9cbmNvbnN0IHZhbGlkYXRlR3JvdXBzID0gKGdyb3VwczogcmVhZG9ubHkgc3RyaW5nW10pOiByZWFkb25seSBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IGlucHV0RGF0YSA9IHtyZWdyb3VwOiBncm91cHN9O1xuICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gei5yZWNvcmQoXG4gICAgei5zdHJpbmcoKSxcbiAgICB6LmFycmF5KHouc3RyaW5nKCksIHttZXNzYWdlOiBSRUdST1VQX0VSUk9SfSkubWluKDEpXG4gICk7XG5cbiAgdmFsaWRhdGUodmFsaWRhdGlvblNjaGVtYSwgaW5wdXREYXRhKTtcblxuICByZXR1cm4gZ3JvdXBzO1xufTtcblxuLyoqXG4gKiBMb29rcyB1cCBhIGdyb3VwIGtleSB2YWx1ZSBpbiB0aGUgaW5wdXQuXG4gKi9cbmNvbnN0IGxvb2t1cEdyb3VwS2V5ID0gKGlucHV0OiBQbHVnaW5QYXJhbXMsIGdyb3VwS2V5OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBpZiAoIWlucHV0W2dyb3VwS2V5XSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkR3JvdXBpbmdFcnJvcihJTlZBTElEX0dST1VQX0tFWShncm91cEtleSkpO1xuICB9XG5cbiAgcmV0dXJuIGlucHV0W2dyb3VwS2V5XTtcbn07XG5cbi8qKlxuICogUmVncm91cHMgaW5wdXRzIGFuZCBvdXRwdXRzIGJhc2VkIG9uIHRoZSBnaXZlbiBncm91cCBrZXlzLlxuICovXG5leHBvcnQgY29uc3QgUmVncm91cCA9IChcbiAgaW5wdXRzOiBQbHVnaW5QYXJhbXNbXSxcbiAgb3V0cHV0czogUGx1Z2luUGFyYW1zW10sXG4gIGdyb3Vwczogc3RyaW5nW11cbik6IFJlY29yZDxzdHJpbmcsIE5vZGU+ID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkR3JvdXBzID0gdmFsaWRhdGVHcm91cHMoZ3JvdXBzKTtcblxuICBjb25zdCBhcHBlbmRUb0FjY3VtdWxhdG9yID0gKFxuICAgIGl0ZW1zOiBQbHVnaW5QYXJhbXNbXSxcbiAgICBhY2M6IE5vZGUsXG4gICAgdGFyZ2V0OiAnaW5wdXRzJyB8ICdvdXRwdXRzJ1xuICApOiB2b2lkID0+IHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGNvbnN0IGdyb3Vwc1dpdGhEYXRhID0gdmFsaWRhdGVkR3JvdXBzLm1hcChncm91cEtleSA9PlxuICAgICAgICBsb29rdXBHcm91cEtleShpdGVtLCBncm91cEtleSlcbiAgICAgICk7XG4gICAgICBhcHBlbmRHcm91cChpdGVtLCBhY2MsIHRhcmdldCwgZ3JvdXBzV2l0aERhdGEpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhY2M6IE5vZGUgPSB7fTtcbiAgYXBwZW5kVG9BY2N1bXVsYXRvcihpbnB1dHMsIGFjYywgJ2lucHV0cycpO1xuICBhcHBlbmRUb0FjY3VtdWxhdG9yKG91dHB1dHMsIGFjYywgJ291dHB1dHMnKTtcblxuICByZXR1cm4gYWNjLmNoaWxkcmVuITtcbn07XG5cbi8qKlxuICogR3JhYnMgYWxsIHRoZSB2YWx1ZXMgYWNjb3JkaW5nIHRvIGdyb3VwaW5nIGNyaXRlcmlhLCB0aGVuXG4gKiAgY2hlY2tzIGlmIHJlZ3JvdXAgdmFsdWVzIGFyZSBwcmVzZW50IGluIHRoZSBjaGlsZHJlbiBsaXN0LlxuICovXG5leHBvcnQgY29uc3QgaXNSZWdyb3VwZWQgPSAoXG4gIGdyb3VwczogcmVhZG9ubHkgc3RyaW5nW10sXG4gIGlucHV0czogcmVhZG9ubHkgUGx1Z2luUGFyYW1zW10sXG4gIGNoaWxkTmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdXG4pOiBib29sZWFuID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkR3JvdXBzID0gdmFsaWRhdGVHcm91cHMoZ3JvdXBzKTtcbiAgaWYgKGNoaWxkTmFtZXMubGVuZ3RoIDwgdmFsaWRhdGVkR3JvdXBzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChjaGlsZE5hbWVzLmxlbmd0aCA+IHZhbGlkYXRlZEdyb3Vwcy5sZW5ndGgpIHtcbiAgICBjaGlsZE5hbWVzID0gY2hpbGROYW1lcy5zbGljZSgtdmFsaWRhdGVkR3JvdXBzLmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIGlucHV0cy5ldmVyeShpbnB1dCA9PlxuICAgIHZhbGlkYXRlZEdyb3Vwcy5ldmVyeSgoZ3JvdXAsIGluZGV4KSA9PiBpbnB1dFtncm91cF0gPT09IGNoaWxkTmFtZXNbaW5kZXhdKVxuICApO1xufTtcbiJdfQ==
@@ -24,7 +24,7 @@ export type ComputeParams = {
24
24
  append?: boolean;
25
25
  };
26
26
  export type Node = {
27
- children?: any;
27
+ children?: Record<string, Node>;
28
28
  pipeline?: PhasedPipeline;
29
29
  config?: NodeConfig;
30
30
  defaults?: PluginParams;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pZi1ydW4vdHlwZXMvY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQbHVnaW5QYXJhbXN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS90eXBlcyc7XG5cbmltcG9ydCB7UGx1Z2luU3RvcmFnZUludGVyZmFjZX0gZnJvbSAnLi9wbHVnaW4tc3RvcmFnZSc7XG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uLy4uL2NvbW1vbi90eXBlcy9tYW5pZmVzdCc7XG5cbi8qKlxuICogQHRvZG86IHJlbW92ZSBOb2RlQ29uZmlnIGFmdGVyIHNvbWUgcGVyaW9kXG4gKi9cbmV4cG9ydCB0eXBlIE5vZGVDb25maWcgPSB7XG4gIFtrZXk6IHN0cmluZ106IFJlY29yZDxzdHJpbmcsIGFueT47XG59O1xuXG5leHBvcnQgdHlwZSBQaGFzZWRQaXBlbGluZSA9IHtcbiAgb2JzZXJ2ZT86IHN0cmluZ1tdO1xuICByZWdyb3VwPzogc3RyaW5nW107XG4gIGNvbXB1dGU/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIENvbXB1dGVQYXJhbXMgPSB7XG4gIHBsdWdpblN0b3JhZ2U6IFBsdWdpblN0b3JhZ2VJbnRlcmZhY2U7XG4gIGNvbnRleHQ6IENvbnRleHQ7XG4gIHBpcGVsaW5lPzogUGhhc2VkUGlwZWxpbmU7XG4gIGNvbmZpZz86IE5vZGVDb25maWc7XG4gIGRlZmF1bHRzPzogUGx1Z2luUGFyYW1zO1xuICBvYnNlcnZlPzogQm9vbGVhbjtcbiAgcmVncm91cD86IEJvb2xlYW47XG4gIGNvbXB1dGU/OiBCb29sZWFuO1xuICBhcHBlbmQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTm9kZSA9IHtcbiAgY2hpbGRyZW4/OiBhbnk7XG4gIHBpcGVsaW5lPzogUGhhc2VkUGlwZWxpbmU7XG4gIGNvbmZpZz86IE5vZGVDb25maWc7XG4gIGRlZmF1bHRzPzogUGx1Z2luUGFyYW1zO1xuICBpbnB1dHM/OiBQbHVnaW5QYXJhbXNbXTtcbiAgb3V0cHV0cz86IFBsdWdpblBhcmFtc1tdO1xufTtcbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pZi1ydW4vdHlwZXMvY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQbHVnaW5QYXJhbXN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS90eXBlcyc7XG5cbmltcG9ydCB7UGx1Z2luU3RvcmFnZUludGVyZmFjZX0gZnJvbSAnLi9wbHVnaW4tc3RvcmFnZSc7XG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uLy4uL2NvbW1vbi90eXBlcy9tYW5pZmVzdCc7XG5cbi8qKlxuICogQHRvZG86IHJlbW92ZSBOb2RlQ29uZmlnIGFmdGVyIHNvbWUgcGVyaW9kXG4gKi9cbmV4cG9ydCB0eXBlIE5vZGVDb25maWcgPSB7XG4gIFtrZXk6IHN0cmluZ106IFJlY29yZDxzdHJpbmcsIGFueT47XG59O1xuXG5leHBvcnQgdHlwZSBQaGFzZWRQaXBlbGluZSA9IHtcbiAgb2JzZXJ2ZT86IHN0cmluZ1tdO1xuICByZWdyb3VwPzogc3RyaW5nW107XG4gIGNvbXB1dGU/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIENvbXB1dGVQYXJhbXMgPSB7XG4gIHBsdWdpblN0b3JhZ2U6IFBsdWdpblN0b3JhZ2VJbnRlcmZhY2U7XG4gIGNvbnRleHQ6IENvbnRleHQ7XG4gIHBpcGVsaW5lPzogUGhhc2VkUGlwZWxpbmU7XG4gIGNvbmZpZz86IE5vZGVDb25maWc7XG4gIGRlZmF1bHRzPzogUGx1Z2luUGFyYW1zO1xuICBvYnNlcnZlPzogQm9vbGVhbjtcbiAgcmVncm91cD86IEJvb2xlYW47XG4gIGNvbXB1dGU/OiBCb29sZWFuO1xuICBhcHBlbmQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTm9kZSA9IHtcbiAgY2hpbGRyZW4/OiBSZWNvcmQ8c3RyaW5nLCBOb2RlPjtcbiAgcGlwZWxpbmU/OiBQaGFzZWRQaXBlbGluZTtcbiAgY29uZmlnPzogTm9kZUNvbmZpZztcbiAgZGVmYXVsdHM/OiBQbHVnaW5QYXJhbXM7XG4gIGlucHV0cz86IFBsdWdpblBhcmFtc1tdO1xuICBvdXRwdXRzPzogUGx1Z2luUGFyYW1zW107XG59O1xuIl19
@@ -0,0 +1,23 @@
1
+ # Patterns to ignore when building packages.
2
+ # This supports shell glob matching, relative path matching, and
3
+ # negation (prefixed with !). Only one pattern per line.
4
+ .DS_Store
5
+ # Common VCS dirs
6
+ .git/
7
+ .gitignore
8
+ .bzr/
9
+ .bzrignore
10
+ .hg/
11
+ .hgignore
12
+ .svn/
13
+ # Common backup files
14
+ *.swp
15
+ *.bak
16
+ *.tmp
17
+ *.orig
18
+ *~
19
+ # Various IDEs
20
+ .project
21
+ .idea/
22
+ *.tmproj
23
+ .vscode/
@@ -0,0 +1,24 @@
1
+ apiVersion: v2
2
+ name: if
3
+ description: A Helm chart for Kubernetes
4
+
5
+ # A chart can be either an 'application' or a 'library' chart.
6
+ #
7
+ # Application charts are a collection of templates that can be packaged into versioned archives
8
+ # to be deployed.
9
+ #
10
+ # Library charts provide useful utilities or functions for the chart developer. They're included as
11
+ # a dependency of application charts to inject those utilities and functions into the rendering
12
+ # pipeline. Library charts do not define any templates and therefore cannot be deployed.
13
+ type: application
14
+
15
+ # This is the chart version. This version number should be incremented each time you make changes
16
+ # to the chart and its templates, including the app version.
17
+ # Versions are expected to follow Semantic Versioning (https://semver.org/)
18
+ version: 1.0.0
19
+
20
+ # This is the version number of the application being deployed. This version number should be
21
+ # incremented each time you make changes to the application. Versions are not expected to
22
+ # follow Semantic Versioning. They should reflect the version the application is using.
23
+ # It is recommended to use it with quotes.
24
+ appVersion:
@@ -0,0 +1,22 @@
1
+ 1. Get the application URL by running these commands:
2
+ {{- if .Values.ingress.enabled }}
3
+ {{- range $host := .Values.ingress.hosts }}
4
+ {{- range .paths }}
5
+ http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }}
6
+ {{- end }}
7
+ {{- end }}
8
+ {{- else if contains "NodePort" .Values.service.type }}
9
+ export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "if.fullname" . }})
10
+ export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
11
+ echo http://$NODE_IP:$NODE_PORT
12
+ {{- else if contains "LoadBalancer" .Values.service.type }}
13
+ NOTE: It may take a few minutes for the LoadBalancer IP to be available.
14
+ You can watch its status by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "if.fullname" . }}'
15
+ export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "if.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
16
+ echo http://$SERVICE_IP:{{ .Values.service.port }}
17
+ {{- else if contains "ClusterIP" .Values.service.type }}
18
+ export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "if.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
19
+ export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
20
+ echo "Visit http://127.0.0.1:3000 to use your application"
21
+ kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 3000:$CONTAINER_PORT
22
+ {{- end }}
@@ -0,0 +1,62 @@
1
+ {{/*
2
+ Expand the name of the chart.
3
+ */}}
4
+ {{- define "if.name" -}}
5
+ {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
6
+ {{- end }}
7
+
8
+ {{/*
9
+ Create a default fully qualified app name.
10
+ We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
11
+ If release name contains chart name it will be used as a full name.
12
+ */}}
13
+ {{- define "if.fullname" -}}
14
+ {{- if .Values.fullnameOverride }}
15
+ {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
16
+ {{- else }}
17
+ {{- $name := default .Chart.Name .Values.nameOverride }}
18
+ {{- if contains $name .Release.Name }}
19
+ {{- .Release.Name | trunc 63 | trimSuffix "-" }}
20
+ {{- else }}
21
+ {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
22
+ {{- end }}
23
+ {{- end }}
24
+ {{- end }}
25
+
26
+ {{/*
27
+ Create chart name and version as used by the chart label.
28
+ */}}
29
+ {{- define "if.chart" -}}
30
+ {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
31
+ {{- end }}
32
+
33
+ {{/*
34
+ Common labels
35
+ */}}
36
+ {{- define "if.labels" -}}
37
+ helm.sh/chart: {{ include "if.chart" . }}
38
+ {{ include "if.selectorLabels" . }}
39
+ {{- if .Chart.AppVersion }}
40
+ app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
41
+ {{- end }}
42
+ app.kubernetes.io/managed-by: {{ .Release.Service }}
43
+ {{- end }}
44
+
45
+ {{/*
46
+ Selector labels
47
+ */}}
48
+ {{- define "if.selectorLabels" -}}
49
+ app.kubernetes.io/name: {{ include "if.name" . }}
50
+ app.kubernetes.io/instance: {{ .Release.Name }}
51
+ {{- end }}
52
+
53
+ {{/*
54
+ Create the name of the service account to use
55
+ */}}
56
+ {{- define "if.serviceAccountName" -}}
57
+ {{- if .Values.serviceAccount.create }}
58
+ {{- default (include "if.fullname" .) .Values.serviceAccount.name }}
59
+ {{- else }}
60
+ {{- default "default" .Values.serviceAccount.name }}
61
+ {{- end }}
62
+ {{- end }}
@@ -0,0 +1,13 @@
1
+ {{- if .Values.additionalPlugins -}}
2
+ apiVersion: v1
3
+ kind: ConfigMap
4
+ metadata:
5
+ name: additional-plugins
6
+ labels:
7
+ {{- include "if.labels" . | nindent 4 }}
8
+ data:
9
+ plugins.txt: |
10
+ {{- range .Values.additionalPlugins }}
11
+ {{- . | nindent 4 }}
12
+ {{- end }}
13
+ {{- end }}
@@ -0,0 +1,144 @@
1
+ apiVersion: apps/v1
2
+ kind: Deployment
3
+ metadata:
4
+ name: {{ include "if.fullname" . }}
5
+ labels:
6
+ {{- include "if.labels" . | nindent 4 }}
7
+ spec:
8
+ {{- if not .Values.autoscaling.enabled }}
9
+ replicas: {{ .Values.replicaCount }}
10
+ {{- end }}
11
+ selector:
12
+ matchLabels:
13
+ {{- include "if.selectorLabels" . | nindent 6 }}
14
+ template:
15
+ metadata:
16
+ {{- with .Values.podAnnotations }}
17
+ annotations:
18
+ {{- toYaml . | nindent 8 }}
19
+ {{- end }}
20
+ labels:
21
+ {{- include "if.labels" . | nindent 8 }}
22
+ {{- with .Values.podLabels }}
23
+ {{- toYaml . | nindent 8 }}
24
+ {{- end }}
25
+ spec:
26
+ {{- with .Values.imagePullSecrets }}
27
+ imagePullSecrets:
28
+ {{- toYaml . | nindent 8 }}
29
+ {{- end }}
30
+ serviceAccountName: {{ include "if.serviceAccountName" . }}
31
+ {{- with .Values.podSecurityContext }}
32
+ securityContext:
33
+ {{- toYaml . | nindent 8 }}
34
+ {{- end }}
35
+ containers:
36
+ - name: {{ .Chart.Name }}
37
+ {{- with .Values.securityContext }}
38
+ securityContext:
39
+ {{- toYaml . | nindent 10 }}
40
+ {{- end }}
41
+ image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
42
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
43
+ args:
44
+ {{- range .Values.args }}
45
+ - {{ . }}
46
+ {{- end }}
47
+ {{- if .Values.disableExternalPluginWarning }}
48
+ - --disableExternalPluginWarning
49
+ {{- end }}
50
+ {{- if .Values.debug }}
51
+ - --debug
52
+ {{- end }}
53
+ ports:
54
+ - name: http
55
+ containerPort: 3000
56
+ {{- with .Values.livenessProbe }}
57
+ livenessProbe:
58
+ {{- toYaml . | nindent 10 }}
59
+ {{- end }}
60
+ {{- with .Values.readinessProbe }}
61
+ readinessProbe:
62
+ {{- toYaml . | nindent 10 }}
63
+ {{- end }}
64
+ {{- with .Values.startupProbe }}
65
+ startupProbe:
66
+ {{- toYaml . | nindent 10 }}
67
+ {{- end }}
68
+ {{- with .Values.resources }}
69
+ resources:
70
+ {{- toYaml . | nindent 10 }}
71
+ {{- end }}
72
+ {{- with .Values.env }}
73
+ {{- if or .secret .configMap .existingSecret.name .existingConfigMap.name }}
74
+ envFrom:
75
+ {{- end }}
76
+ {{- if .secret }}
77
+ - secretRef:
78
+ name: env-vars
79
+ {{- end }}
80
+ {{- if .configMap }}
81
+ - configMapRef:
82
+ name: env-vars
83
+ {{- end }}
84
+ {{- if .existingSecret.name }}
85
+ - secretRef:
86
+ name: {{ .existingSecret.name }}
87
+ {{- with .existingSecret.prefix }}
88
+ prefix: {{ . }}
89
+ {{- end }}
90
+ {{- end }}
91
+ {{- if .existingConfigMap.name }}
92
+ - configMapRef:
93
+ name: {{ .existingConfigMap.name }}
94
+ {{- with .existingConfigMap.prefix }}
95
+ prefix: {{ . }}
96
+ {{- end }}
97
+ {{- end }}
98
+ {{- end }}
99
+ volumeMounts:
100
+ - name: disabled-plugins
101
+ mountPath: /app/disabledPlugins.txt
102
+ subPath: disabledPlugins.txt
103
+ {{- if .Values.additionalPlugins }}
104
+ - name: additional-plugins
105
+ mountPath: /app/plugins.txt
106
+ subPath: plugins.txt
107
+ {{- end }}
108
+ {{- if .Values.npmrc }}
109
+ - name: npmrc
110
+ mountPath: /app/.npmrc
111
+ subPath: .npmrc
112
+ {{- end }}
113
+ {{- with .Values.volumeMounts }}
114
+ {{- toYaml . | nindent 8 }}
115
+ {{- end }}
116
+ volumes:
117
+ - name: disabled-plugins
118
+ configMap:
119
+ name: disabled-plugins
120
+ {{- if .Values.additionalPlugins }}
121
+ - name: additional-plugins
122
+ configMap:
123
+ name: additional-plugins
124
+ {{- end }}
125
+ {{- if .Values.npmrc }}
126
+ - name: npmrc
127
+ secret:
128
+ secretName: npmrc
129
+ {{- end }}
130
+ {{- with .Values.volumes }}
131
+ {{- toYaml . | nindent 6 }}
132
+ {{- end }}
133
+ {{- with .Values.nodeSelector }}
134
+ nodeSelector:
135
+ {{- toYaml . | nindent 8 }}
136
+ {{- end }}
137
+ {{- with .Values.affinity }}
138
+ affinity:
139
+ {{- toYaml . | nindent 8 }}
140
+ {{- end }}
141
+ {{- with .Values.tolerations }}
142
+ tolerations:
143
+ {{- toYaml . | nindent 6 }}
144
+ {{- end }}
@@ -0,0 +1,11 @@
1
+ apiVersion: v1
2
+ kind: ConfigMap
3
+ metadata:
4
+ name: disabled-plugins
5
+ labels:
6
+ {{- include "if.labels" . | nindent 4 }}
7
+ data:
8
+ disabledPlugins.txt: |
9
+ {{- range .Values.disabledPlugins }}
10
+ {{- . | nindent 4 }}
11
+ {{- end }}
@@ -0,0 +1,10 @@
1
+ {{- with .Values.env.configMap -}}
2
+ apiVersion: v1
3
+ kind: ConfigMap
4
+ metadata:
5
+ name: env-vars
6
+ labels:
7
+ {{- include "if.labels" $ | nindent 4 }}
8
+ data:
9
+ {{- toYaml . | nindent 2 }}
10
+ {{- end }}
@@ -0,0 +1,10 @@
1
+ {{- with .Values.env.secret -}}
2
+ apiVersion: v1
3
+ kind: Secret
4
+ metadata:
5
+ name: env-vars
6
+ labels:
7
+ {{- include "if.labels" $ | nindent 4 }}
8
+ stringData:
9
+ {{- toYaml . | nindent 2 }}
10
+ {{- end }}
@@ -0,0 +1,32 @@
1
+ {{- if .Values.autoscaling.enabled }}
2
+ apiVersion: autoscaling/v2
3
+ kind: HorizontalPodAutoscaler
4
+ metadata:
5
+ name: {{ include "if.fullname" . }}
6
+ labels:
7
+ {{- include "if.labels" . | nindent 4 }}
8
+ spec:
9
+ scaleTargetRef:
10
+ apiVersion: apps/v1
11
+ kind: Deployment
12
+ name: {{ include "if.fullname" . }}
13
+ minReplicas: {{ .Values.autoscaling.minReplicas }}
14
+ maxReplicas: {{ .Values.autoscaling.maxReplicas }}
15
+ metrics:
16
+ {{- with .Values.autoscaling.targetCPUUtilizationPercentage }}
17
+ - type: Resource
18
+ resource:
19
+ name: cpu
20
+ target:
21
+ type: Utilization
22
+ averageUtilization: {{ . }}
23
+ {{- end }}
24
+ {{- with .Values.autoscaling.targetMemoryUtilizationPercentage }}
25
+ - type: Resource
26
+ resource:
27
+ name: memory
28
+ target:
29
+ type: Utilization
30
+ averageUtilization: {{ . }}
31
+ {{- end }}
32
+ {{- end }}
@@ -0,0 +1,43 @@
1
+ {{- if .Values.ingress.enabled -}}
2
+ apiVersion: networking.k8s.io/v1
3
+ kind: Ingress
4
+ metadata:
5
+ name: {{ include "if.fullname" . }}
6
+ labels:
7
+ {{- include "if.labels" . | nindent 4 }}
8
+ {{- with .Values.ingress.annotations }}
9
+ annotations:
10
+ {{- toYaml . | nindent 4 }}
11
+ {{- end }}
12
+ spec:
13
+ {{- with .Values.ingress.className }}
14
+ ingressClassName: {{ . }}
15
+ {{- end }}
16
+ {{- if .Values.ingress.tls }}
17
+ tls:
18
+ {{- range .Values.ingress.tls }}
19
+ - hosts:
20
+ {{- range .hosts }}
21
+ - {{ . | quote }}
22
+ {{- end }}
23
+ secretName: {{ .secretName }}
24
+ {{- end }}
25
+ {{- end }}
26
+ rules:
27
+ {{- range .Values.ingress.hosts }}
28
+ - host: {{ .host | quote }}
29
+ http:
30
+ paths:
31
+ {{- range .paths }}
32
+ - path: {{ .path }}
33
+ {{- with .pathType }}
34
+ pathType: {{ . }}
35
+ {{- end }}
36
+ backend:
37
+ service:
38
+ name: {{ include "if.fullname" $ }}
39
+ port:
40
+ number: {{ $.Values.service.port }}
41
+ {{- end }}
42
+ {{- end }}
43
+ {{- end }}
@@ -0,0 +1,11 @@
1
+ {{- if .Values.npmrc -}}
2
+ apiVersion: v1
3
+ kind: Secret
4
+ metadata:
5
+ name: npmrc
6
+ labels:
7
+ {{- include "if.labels" . | nindent 4 }}
8
+ stringData:
9
+ .npmrc: |
10
+ {{- .Values.npmrc | nindent 4 }}
11
+ {{- end }}