@grnsft/if 0.3.2 → 0.3.4

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 (187) hide show
  1. package/.commitlintrc.js +3 -0
  2. package/.env +5 -0
  3. package/.release-it.json +18 -0
  4. package/CONTRIBUTING.md +77 -4
  5. package/README.md +34 -26
  6. package/build/builtins/export-csv-raw.js +4 -4
  7. package/build/builtins/export-csv.js +5 -5
  8. package/build/builtins/export-log.js +26 -2
  9. package/build/builtins/export-yaml.js +3 -3
  10. package/build/config/config.d.ts +3 -3
  11. package/build/config/config.js +23 -27
  12. package/build/config/strings.d.ts +1 -0
  13. package/build/config/strings.js +8 -3
  14. package/build/index.js +23 -14
  15. package/build/lib/environment.d.ts +5 -0
  16. package/build/lib/environment.js +69 -0
  17. package/build/lib/exhaust.d.ts +2 -1
  18. package/build/lib/exhaust.js +11 -9
  19. package/build/lib/initialize.d.ts +2 -2
  20. package/build/lib/initialize.js +5 -5
  21. package/build/lib/load.d.ts +1 -29
  22. package/build/lib/load.js +2 -5
  23. package/build/types/environment.d.ts +18 -0
  24. package/build/types/environment.js +3 -0
  25. package/build/types/manifest.d.ts +1 -0
  26. package/build/types/manifest.js +1 -1
  27. package/build/types/process-args.d.ts +13 -1
  28. package/build/types/process-args.js +1 -1
  29. package/build/util/args.d.ts +3 -5
  30. package/build/util/args.js +14 -10
  31. package/build/util/errors.d.ts +1 -1
  32. package/build/util/errors.js +2 -3
  33. package/build/util/helpers.d.ts +6 -0
  34. package/build/util/helpers.js +9 -3
  35. package/build/util/os-checker.d.ts +7 -0
  36. package/build/util/os-checker.js +97 -0
  37. package/build/util/validations.d.ts +90 -4
  38. package/build/util/validations.js +14 -2
  39. package/coverage/clover.xml +1590 -0
  40. package/coverage/coverage-final.json +50 -0
  41. package/coverage/lcov-report/base.css +224 -0
  42. package/coverage/lcov-report/block-navigation.js +87 -0
  43. package/coverage/lcov-report/builtins/coefficient/index.html +116 -0
  44. package/coverage/lcov-report/builtins/coefficient/index.ts.html +295 -0
  45. package/coverage/lcov-report/builtins/csv-lookup/index.html +116 -0
  46. package/coverage/lcov-report/builtins/csv-lookup/index.ts.html +832 -0
  47. package/coverage/lcov-report/builtins/divide/index.html +116 -0
  48. package/coverage/lcov-report/builtins/divide/index.ts.html +361 -0
  49. package/coverage/lcov-report/builtins/exponent/index.html +116 -0
  50. package/coverage/lcov-report/builtins/exponent/index.ts.html +355 -0
  51. package/coverage/lcov-report/builtins/export-csv-raw.ts.html +553 -0
  52. package/coverage/lcov-report/builtins/export-csv.ts.html +433 -0
  53. package/coverage/lcov-report/builtins/export-log.ts.html +145 -0
  54. package/coverage/lcov-report/builtins/export-yaml.ts.html +184 -0
  55. package/coverage/lcov-report/builtins/group-by.ts.html +364 -0
  56. package/coverage/lcov-report/builtins/index.html +206 -0
  57. package/coverage/lcov-report/builtins/index.ts.html +130 -0
  58. package/coverage/lcov-report/builtins/interpolation/index.html +131 -0
  59. package/coverage/lcov-report/builtins/interpolation/index.ts.html +670 -0
  60. package/coverage/lcov-report/builtins/interpolation/types.ts.html +100 -0
  61. package/coverage/lcov-report/builtins/mock-observations/helpers/common-generator.ts.html +181 -0
  62. package/coverage/lcov-report/builtins/mock-observations/helpers/index.html +131 -0
  63. package/coverage/lcov-report/builtins/mock-observations/helpers/rand-int-generator.ts.html +295 -0
  64. package/coverage/lcov-report/builtins/mock-observations/index.html +116 -0
  65. package/coverage/lcov-report/builtins/mock-observations/index.ts.html +613 -0
  66. package/coverage/lcov-report/builtins/multiply/index.html +116 -0
  67. package/coverage/lcov-report/builtins/multiply/index.ts.html +337 -0
  68. package/coverage/lcov-report/builtins/regex/index.html +116 -0
  69. package/coverage/lcov-report/builtins/regex/index.ts.html +379 -0
  70. package/coverage/lcov-report/builtins/sci/config.ts.html +205 -0
  71. package/coverage/lcov-report/builtins/sci/index.html +116 -0
  72. package/coverage/lcov-report/builtins/sci/index.ts.html +331 -0
  73. package/coverage/lcov-report/builtins/sci-embodied/index.html +116 -0
  74. package/coverage/lcov-report/builtins/sci-embodied/index.ts.html +481 -0
  75. package/coverage/lcov-report/builtins/shell/index.html +116 -0
  76. package/coverage/lcov-report/builtins/shell/index.ts.html +283 -0
  77. package/coverage/lcov-report/builtins/subtract/index.html +116 -0
  78. package/coverage/lcov-report/builtins/subtract/index.ts.html +373 -0
  79. package/coverage/lcov-report/builtins/sum/index.html +116 -0
  80. package/coverage/lcov-report/builtins/sum/index.ts.html +340 -0
  81. package/coverage/lcov-report/builtins/time-sync.ts.html +1459 -0
  82. package/coverage/lcov-report/config/config.ts.html +334 -0
  83. package/coverage/lcov-report/config/index.html +161 -0
  84. package/coverage/lcov-report/config/index.ts.html +94 -0
  85. package/coverage/lcov-report/config/params.ts.html +697 -0
  86. package/coverage/lcov-report/config/strings.ts.html +415 -0
  87. package/coverage/lcov-report/favicon.png +0 -0
  88. package/coverage/lcov-report/index.html +386 -0
  89. package/coverage/lcov-report/lib/aggregate.ts.html +331 -0
  90. package/coverage/lcov-report/lib/compare.ts.html +283 -0
  91. package/coverage/lcov-report/lib/compute.ts.html +391 -0
  92. package/coverage/lcov-report/lib/environment.ts.html +343 -0
  93. package/coverage/lcov-report/lib/exhaust.ts.html +283 -0
  94. package/coverage/lcov-report/lib/index.html +221 -0
  95. package/coverage/lcov-report/lib/initialize.ts.html +388 -0
  96. package/coverage/lcov-report/lib/load.ts.html +268 -0
  97. package/coverage/lcov-report/lib/parameterize.ts.html +283 -0
  98. package/coverage/lcov-report/prettify.css +1 -0
  99. package/coverage/lcov-report/prettify.js +2 -0
  100. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  101. package/coverage/lcov-report/sorter.js +196 -0
  102. package/coverage/lcov-report/types/aggregation.ts.html +94 -0
  103. package/coverage/lcov-report/types/index.html +146 -0
  104. package/coverage/lcov-report/types/interface.ts.html +181 -0
  105. package/coverage/lcov-report/types/parameters.ts.html +106 -0
  106. package/coverage/lcov-report/util/aggregation-helper.ts.html +286 -0
  107. package/coverage/lcov-report/util/args.ts.html +508 -0
  108. package/coverage/lcov-report/util/errors.ts.html +232 -0
  109. package/coverage/lcov-report/util/helpers.ts.html +613 -0
  110. package/coverage/lcov-report/util/index.html +266 -0
  111. package/coverage/lcov-report/util/json.ts.html +115 -0
  112. package/coverage/lcov-report/util/log-memoize.ts.html +145 -0
  113. package/coverage/lcov-report/util/logger.ts.html +151 -0
  114. package/coverage/lcov-report/util/os-checker.ts.html +421 -0
  115. package/coverage/lcov-report/util/plugin-storage.ts.html +199 -0
  116. package/coverage/lcov-report/util/validations.ts.html +526 -0
  117. package/coverage/lcov-report/util/yaml.ts.html +193 -0
  118. package/coverage/lcov.info +2811 -0
  119. package/github-processes.md +10 -0
  120. package/{examples/manifests/pipeline-demo-2.yml → manifests/bugs/aggregation-error-wrong-metric.yml} +8 -34
  121. package/manifests/bugs/azure-importer-ignoring-defaults.yml +61 -0
  122. package/manifests/bugs/azure-importer-incorrect-calculation.yml +56 -0
  123. package/manifests/bugs/initialize-error-no-config.yml +27 -0
  124. package/manifests/bugs/initialize-error-no-path.yml +28 -0
  125. package/manifests/bugs/initialize-error-no-plugins.yml +23 -0
  126. package/manifests/bugs/input-error-missing-duration.yml +21 -0
  127. package/manifests/bugs/pipeline-error-naming-mismatch.yml +28 -0
  128. package/manifests/bugs/pipeline-error-uninitialized-plugin.yml +29 -0
  129. package/{examples/manifests/boavizta-pipeline.yml → manifests/bugs/pipeline-ordering-error.yml} +7 -10
  130. package/{examples/manifests → manifests/examples}/basic.yml +3 -2
  131. package/{examples/manifests → manifests/examples}/generics.yml +2 -2
  132. package/{examples/manifests/asim-demo.yml → manifests/examples/mock-cpu-util-to-carbon.yml} +3 -7
  133. package/{examples/manifests → manifests/examples}/nesting.yml +3 -2
  134. package/{examples/manifests → manifests/examples}/pipeline-teads-sci.yml +1 -1
  135. package/{examples/manifests/pipeline-demo.yml → manifests/examples/pipeline-with-aggregate.yml} +2 -2
  136. package/{examples/manifests → manifests/examples}/pipeline-with-mocks.yml +3 -2
  137. package/manifests/features/aggregate-horizontal.yml +44 -0
  138. package/manifests/features/aggregate-vertical.yml +44 -0
  139. package/manifests/features/aggregate.yml +44 -0
  140. package/manifests/integrations/mock-obs-groupby.yml +39 -0
  141. package/manifests/integrations/mock-obs-time-sync.yml +65 -0
  142. package/manifests/plugins/cloud-metadata/failure-invalid-vendor.yaml +21 -0
  143. package/{examples/manifests/cloud-metadata.yml → manifests/plugins/cloud-metadata/success.yml} +2 -1
  144. package/manifests/plugins/coefficient/failure-invalid-config-input-param.yml +24 -0
  145. package/{examples/manifests/coefficient.yml → manifests/plugins/coefficient/success.yml} +2 -1
  146. package/manifests/plugins/divide/failure-invalid-config-denominator.yml +39 -0
  147. package/manifests/plugins/divide/success.yml +39 -0
  148. package/manifests/plugins/groupby/failure-invalid-config-group.yml +47 -0
  149. package/{examples/manifests/group-by.yml → manifests/plugins/groupby/success.yml} +3 -2
  150. package/manifests/plugins/mock-observations/failure-invalid-config-cpu-range.yml +34 -0
  151. package/{examples/manifests/mock-observation.yml → manifests/plugins/mock-observations/success.yml} +2 -1
  152. package/manifests/plugins/multiply/failure-input-parameter-is-missing.yml +24 -0
  153. package/{examples/manifests/multiply.yml → manifests/plugins/multiply/success.yml} +3 -2
  154. package/manifests/plugins/regex/failure-missing-input-param.yml +24 -0
  155. package/{examples/manifests/regex.yml → manifests/plugins/regex/success.yml} +3 -2
  156. package/manifests/plugins/sci/failure-invalid-config-value.yml +28 -0
  157. package/{examples/manifests/sci.yml → manifests/plugins/sci/success.yml} +3 -2
  158. package/manifests/plugins/sci-m/failure-invalid-default-emission-value.yml +24 -0
  159. package/{examples/manifests/sci-m.yml → manifests/plugins/sci-m/success.yml} +2 -1
  160. package/manifests/plugins/shell/failure-invalid-command.yml +21 -0
  161. package/{examples/manifests/shell.yml → manifests/plugins/shell/success.yml} +3 -2
  162. package/manifests/plugins/sum/failure-missing-input-param.yml +24 -0
  163. package/{examples/manifests/sum.yml → manifests/plugins/sum/success.yml} +3 -2
  164. package/manifests/plugins/tdp-finder/failure-missing-input-param.yml +18 -0
  165. package/{examples/manifests/tdp-finder.yml → manifests/plugins/tdp-finder/success.yml} +2 -1
  166. package/manifests/plugins/time-sync/failure-config-start-later-end.yml +34 -0
  167. package/{examples/manifests/time-sync.yml → manifests/plugins/time-sync/success.yml} +4 -2
  168. package/package.json +4 -2
  169. package/src/__tests__/integration/manifest/sci-e.yaml +23 -0
  170. package/examples/manifests/azure-importer.yml +0 -24
  171. package/examples/manifests/basic-demo.yml +0 -70
  172. package/examples/manifests/boavizta-cloud.yml +0 -20
  173. package/examples/manifests/boavizta.yml +0 -26
  174. package/examples/manifests/ccf.yml +0 -20
  175. package/examples/manifests/cloud-metadata-teads.yml +0 -41
  176. package/examples/manifests/co2js.yml +0 -30
  177. package/examples/manifests/csv-export.yml +0 -34
  178. package/examples/manifests/e-mem.yml +0 -21
  179. package/examples/manifests/e-net.yml +0 -22
  180. package/examples/manifests/nesting-demo.yml +0 -89
  181. package/examples/manifests/pipeline-demo-1.yml +0 -85
  182. package/examples/manifests/pipeline-with-generics.yml +0 -152
  183. package/examples/manifests/sci-e.yml +0 -19
  184. package/examples/manifests/sci-o.yml +0 -26
  185. package/examples/manifests/teads-curve.yml +0 -20
  186. package/examples/manifests/watt-time.yml +0 -35
  187. /package/{examples/manifests/divide.yml → manifests/integrations/cloud-metadata-divide-boavizta.yml} +0 -0
@@ -3,8 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ERRORS = void 0;
4
4
  const CUSTOM_ERRORS = [
5
5
  'CliInputError',
6
- 'FileNotFoundError',
7
- 'MakeDirectoryError',
6
+ 'ExhaustError',
8
7
  'ManifestValidationError',
9
8
  'ModuleInitializationError',
10
9
  'InputValidationError',
@@ -26,4 +25,4 @@ exports.ERRORS = CUSTOM_ERRORS.reduce((acc, className) => {
26
25
  };
27
26
  return acc;
28
27
  }, {});
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsb0JBQW9CO0lBQ3BCLHlCQUF5QjtJQUN6QiwyQkFBMkI7SUFDM0Isc0JBQXNCO0lBQ3RCLCtCQUErQjtJQUMvQixzQkFBc0I7SUFDdEIsdUJBQXVCO0lBQ3ZCLDBCQUEwQjtJQUMxQixnQkFBZ0I7Q0FDUixDQUFDO0FBTUUsUUFBQSxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRTtJQUM1RCxHQUFHLEdBQUc7UUFDSixHQUFHLEdBQUc7UUFDTixDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQU0sU0FBUSxLQUFLO1lBQzlCLFlBQVksT0FBZTtnQkFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDcEMsQ0FBQztTQUNGO0tBQ0YsQ0FBQztJQUVGLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxFQUFFLEVBQWtCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IENVU1RPTV9FUlJPUlMgPSBbXG4gICdDbGlJbnB1dEVycm9yJyxcbiAgJ0ZpbGVOb3RGb3VuZEVycm9yJyxcbiAgJ01ha2VEaXJlY3RvcnlFcnJvcicsXG4gICdNYW5pZmVzdFZhbGlkYXRpb25FcnJvcicsXG4gICdNb2R1bGVJbml0aWFsaXphdGlvbkVycm9yJyxcbiAgJ0lucHV0VmFsaWRhdGlvbkVycm9yJyxcbiAgJ0ludmFsaWRBZ2dyZWdhdGlvblBhcmFtc0Vycm9yJyxcbiAgJ0ludmFsaWRHcm91cGluZ0Vycm9yJyxcbiAgJ1BsdWdpbkNyZWRlbnRpYWxFcnJvcicsXG4gICdQbHVnaW5Jbml0YWxpemF0aW9uRXJyb3InLFxuICAnV3JpdGVGaWxlRXJyb3InLFxuXSBhcyBjb25zdDtcblxudHlwZSBDdXN0b21FcnJvcnMgPSB7XG4gIFtLIGluICh0eXBlb2YgQ1VTVE9NX0VSUk9SUylbbnVtYmVyXV06IEVycm9yQ29uc3RydWN0b3I7XG59O1xuXG5leHBvcnQgY29uc3QgRVJST1JTID0gQ1VTVE9NX0VSUk9SUy5yZWR1Y2UoKGFjYywgY2xhc3NOYW1lKSA9PiB7XG4gIGFjYyA9IHtcbiAgICAuLi5hY2MsXG4gICAgW2NsYXNzTmFtZV06IGNsYXNzIGV4dGVuZHMgRXJyb3Ige1xuICAgICAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gYWNjO1xufSwge30gYXMgQ3VzdG9tRXJyb3JzKTtcbiJdfQ==
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLGVBQWU7SUFDZixjQUFjO0lBQ2QseUJBQXlCO0lBQ3pCLDJCQUEyQjtJQUMzQixzQkFBc0I7SUFDdEIsK0JBQStCO0lBQy9CLHNCQUFzQjtJQUN0Qix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLGdCQUFnQjtDQUNSLENBQUM7QUFNRSxRQUFBLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFO0lBQzVELEdBQUcsR0FBRztRQUNKLEdBQUcsR0FBRztRQUNOLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBTSxTQUFRLEtBQUs7WUFDOUIsWUFBWSxPQUFlO2dCQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNwQyxDQUFDO1NBQ0Y7S0FDRixDQUFDO0lBRUYsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLEVBQUUsRUFBa0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgQ1VTVE9NX0VSUk9SUyA9IFtcbiAgJ0NsaUlucHV0RXJyb3InLFxuICAnRXhoYXVzdEVycm9yJyxcbiAgJ01hbmlmZXN0VmFsaWRhdGlvbkVycm9yJyxcbiAgJ01vZHVsZUluaXRpYWxpemF0aW9uRXJyb3InLFxuICAnSW5wdXRWYWxpZGF0aW9uRXJyb3InLFxuICAnSW52YWxpZEFnZ3JlZ2F0aW9uUGFyYW1zRXJyb3InLFxuICAnSW52YWxpZEdyb3VwaW5nRXJyb3InLFxuICAnUGx1Z2luQ3JlZGVudGlhbEVycm9yJyxcbiAgJ1BsdWdpbkluaXRhbGl6YXRpb25FcnJvcicsXG4gICdXcml0ZUZpbGVFcnJvcicsXG5dIGFzIGNvbnN0O1xuXG50eXBlIEN1c3RvbUVycm9ycyA9IHtcbiAgW0sgaW4gKHR5cGVvZiBDVVNUT01fRVJST1JTKVtudW1iZXJdXTogRXJyb3JDb25zdHJ1Y3Rvcjtcbn07XG5cbmV4cG9ydCBjb25zdCBFUlJPUlMgPSBDVVNUT01fRVJST1JTLnJlZHVjZSgoYWNjLCBjbGFzc05hbWUpID0+IHtcbiAgYWNjID0ge1xuICAgIC4uLmFjYyxcbiAgICBbY2xhc3NOYW1lXTogY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG4gICAgICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBhY2M7XG59LCB7fSBhcyBDdXN0b21FcnJvcnMpO1xuIl19
@@ -1,3 +1,5 @@
1
+ /// <reference types="node" />
2
+ import { exec } from 'node:child_process';
1
3
  /**
2
4
  * Impact engine error handler. Logs errors and appends issue template if error is unknown.
3
5
  */
@@ -6,3 +8,7 @@ export declare const andHandle: (error: Error) => void;
6
8
  * Append entries from defaults which are missing from inputs.
7
9
  */
8
10
  export declare const mergeObjects: (defaults: any, input: any) => Record<string, any>;
11
+ /**
12
+ * Promise version of Node's `exec` from `child-process`.
13
+ */
14
+ export declare const execPromise: typeof exec.__promisify__;
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mergeObjects = exports.andHandle = void 0;
4
- const config_1 = require("../config");
3
+ exports.execPromise = exports.mergeObjects = exports.andHandle = void 0;
4
+ const node_child_process_1 = require("node:child_process");
5
+ const node_util_1 = require("node:util");
5
6
  const errors_1 = require("./errors");
6
7
  const logger_1 = require("./logger");
8
+ const config_1 = require("../config");
7
9
  const { ISSUE_TEMPLATE } = config_1.STRINGS;
8
10
  /**
9
11
  * Impact engine error handler. Logs errors and appends issue template if error is unknown.
@@ -32,4 +34,8 @@ const mergeObjects = (defaults, input) => {
32
34
  return merged;
33
35
  };
34
36
  exports.mergeObjects = mergeObjects;
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0NBQWtDO0FBQ2xDLHFDQUFnQztBQUNoQyxxQ0FBZ0M7QUFFaEMsTUFBTSxFQUFDLGNBQWMsRUFBQyxHQUFHLGdCQUFPLENBQUM7QUFFakM7O0dBRUc7QUFDSSxNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQVksRUFBRSxFQUFFO0lBQ3hDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBTSxDQUFDLENBQUM7SUFFeEMsZUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVwQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDckMsZUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztLQUM3QjtBQUNILENBQUMsQ0FBQztBQVJXLFFBQUEsU0FBUyxhQVFwQjtBQUVGOztHQUVHO0FBQ0ksTUFBTSxZQUFZLEdBQUcsQ0FBQyxRQUFhLEVBQUUsS0FBVSxFQUFFLEVBQUU7SUFDeEQsTUFBTSxNQUFNLEdBQXdCLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUzRCxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRTtRQUMxQixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDbkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM3QjtRQUVELElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3JELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDN0I7S0FDRjtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQWRXLFFBQUEsWUFBWSxnQkFjdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NUUklOR1N9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQge0VSUk9SU30gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHtsb2dnZXJ9IGZyb20gJy4vbG9nZ2VyJztcblxuY29uc3Qge0lTU1VFX1RFTVBMQVRFfSA9IFNUUklOR1M7XG5cbi8qKlxuICogSW1wYWN0IGVuZ2luZSBlcnJvciBoYW5kbGVyLiBMb2dzIGVycm9ycyBhbmQgYXBwZW5kcyBpc3N1ZSB0ZW1wbGF0ZSBpZiBlcnJvciBpcyB1bmtub3duLlxuICovXG5leHBvcnQgY29uc3QgYW5kSGFuZGxlID0gKGVycm9yOiBFcnJvcikgPT4ge1xuICBjb25zdCBrbm93bkVycm9ycyA9IE9iamVjdC5rZXlzKEVSUk9SUyk7XG5cbiAgbG9nZ2VyLmVycm9yKGVycm9yKTtcblxuICBpZiAoIWtub3duRXJyb3JzLmluY2x1ZGVzKGVycm9yLm5hbWUpKSB7XG4gICAgbG9nZ2VyLndhcm4oSVNTVUVfVEVNUExBVEUpO1xuICB9XG59O1xuXG4vKipcbiAqIEFwcGVuZCBlbnRyaWVzIGZyb20gZGVmYXVsdHMgd2hpY2ggYXJlIG1pc3NpbmcgZnJvbSBpbnB1dHMuXG4gKi9cbmV4cG9ydCBjb25zdCBtZXJnZU9iamVjdHMgPSAoZGVmYXVsdHM6IGFueSwgaW5wdXQ6IGFueSkgPT4ge1xuICBjb25zdCBtZXJnZWQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBzdHJ1Y3R1cmVkQ2xvbmUoaW5wdXQpO1xuXG4gIGZvciAoY29uc3Qga2V5IGluIGRlZmF1bHRzKSB7XG4gICAgaWYgKCEoa2V5IGluIGlucHV0KSkge1xuICAgICAgbWVyZ2VkW2tleV0gPSBkZWZhdWx0c1trZXldO1xuICAgIH1cblxuICAgIGlmIChtZXJnZWRba2V5XSA9PT0gdW5kZWZpbmVkIHx8IG1lcmdlZFtrZXldID09PSBudWxsKSB7XG4gICAgICBtZXJnZWRba2V5XSA9IGRlZmF1bHRzW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn07XG4iXX0=
37
+ /**
38
+ * Promise version of Node's `exec` from `child-process`.
39
+ */
40
+ exports.execPromise = (0, node_util_1.promisify)(node_child_process_1.exec);
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQXdDO0FBQ3hDLHlDQUFvQztBQUVwQyxxQ0FBZ0M7QUFDaEMscUNBQWdDO0FBRWhDLHNDQUFrQztBQUVsQyxNQUFNLEVBQUMsY0FBYyxFQUFDLEdBQUcsZ0JBQU8sQ0FBQztBQUVqQzs7R0FFRztBQUNJLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7SUFDeEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFNLENBQUMsQ0FBQztJQUV4QyxlQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXBCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNyQyxlQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0tBQzdCO0FBQ0gsQ0FBQyxDQUFDO0FBUlcsUUFBQSxTQUFTLGFBUXBCO0FBRUY7O0dBRUc7QUFDSSxNQUFNLFlBQVksR0FBRyxDQUFDLFFBQWEsRUFBRSxLQUFVLEVBQUUsRUFBRTtJQUN4RCxNQUFNLE1BQU0sR0FBd0IsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTNELEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFO1FBQzFCLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNuQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzdCO1FBRUQsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDckQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM3QjtLQUNGO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBZFcsUUFBQSxZQUFZLGdCQWN2QjtBQUVGOztHQUVHO0FBQ1UsUUFBQSxXQUFXLEdBQUcsSUFBQSxxQkFBUyxFQUFDLHlCQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZXhlY30gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7cHJvbWlzaWZ5fSBmcm9tICdub2RlOnV0aWwnO1xuXG5pbXBvcnQge0VSUk9SU30gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHtsb2dnZXJ9IGZyb20gJy4vbG9nZ2VyJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi9jb25maWcnO1xuXG5jb25zdCB7SVNTVUVfVEVNUExBVEV9ID0gU1RSSU5HUztcblxuLyoqXG4gKiBJbXBhY3QgZW5naW5lIGVycm9yIGhhbmRsZXIuIExvZ3MgZXJyb3JzIGFuZCBhcHBlbmRzIGlzc3VlIHRlbXBsYXRlIGlmIGVycm9yIGlzIHVua25vd24uXG4gKi9cbmV4cG9ydCBjb25zdCBhbmRIYW5kbGUgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gIGNvbnN0IGtub3duRXJyb3JzID0gT2JqZWN0LmtleXMoRVJST1JTKTtcblxuICBsb2dnZXIuZXJyb3IoZXJyb3IpO1xuXG4gIGlmICgha25vd25FcnJvcnMuaW5jbHVkZXMoZXJyb3IubmFtZSkpIHtcbiAgICBsb2dnZXIud2FybihJU1NVRV9URU1QTEFURSk7XG4gIH1cbn07XG5cbi8qKlxuICogQXBwZW5kIGVudHJpZXMgZnJvbSBkZWZhdWx0cyB3aGljaCBhcmUgbWlzc2luZyBmcm9tIGlucHV0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IG1lcmdlT2JqZWN0cyA9IChkZWZhdWx0czogYW55LCBpbnB1dDogYW55KSA9PiB7XG4gIGNvbnN0IG1lcmdlZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHN0cnVjdHVyZWRDbG9uZShpbnB1dCk7XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gZGVmYXVsdHMpIHtcbiAgICBpZiAoIShrZXkgaW4gaW5wdXQpKSB7XG4gICAgICBtZXJnZWRba2V5XSA9IGRlZmF1bHRzW2tleV07XG4gICAgfVxuXG4gICAgaWYgKG1lcmdlZFtrZXldID09PSB1bmRlZmluZWQgfHwgbWVyZ2VkW2tleV0gPT09IG51bGwpIHtcbiAgICAgIG1lcmdlZFtrZXldID0gZGVmYXVsdHNba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkO1xufTtcblxuLyoqXG4gKiBQcm9taXNlIHZlcnNpb24gb2YgTm9kZSdzIGBleGVjYCBmcm9tIGBjaGlsZC1wcm9jZXNzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGV4ZWNQcm9taXNlID0gcHJvbWlzaWZ5KGV4ZWMpO1xuIl19
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Finds operating system information like name and version.
3
+ */
4
+ export declare const osInfo: () => Promise<{
5
+ os: string;
6
+ 'os-version': string;
7
+ }>;
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.osInfo = void 0;
4
+ const os_1 = require("os");
5
+ const helpers_1 = require("./helpers");
6
+ /**
7
+ * Executes `lsb_release -a` command in terminal.
8
+ *
9
+ * ```
10
+ * Distributor ID: Ubuntu
11
+ * Description: Ubuntu 22.04.4 LTS
12
+ * Release: 22.04
13
+ * Codename: jammy
14
+ * ```
15
+ *
16
+ * Parses os and os-version from the response.
17
+ */
18
+ const getLinuxInfo = async () => {
19
+ const { stdout } = await (0, helpers_1.execPromise)('lsb_release -a');
20
+ const parseLinuxVersion = (lsbReleaseResponse) => {
21
+ const regex = /Distributor ID: ([^\n]+)\nDescription: +([^ ]+) +([^ ]+) +(.+)\n/;
22
+ const match = lsbReleaseResponse.match(regex);
23
+ return {
24
+ os: match ? match[1] : (0, os_1.platform)(),
25
+ 'os-version': match ? `${match[3]} ${match[4]}` : (0, os_1.release)(),
26
+ };
27
+ };
28
+ return parseLinuxVersion(stdout);
29
+ };
30
+ /**
31
+ * Executes in CMD `systeminfo | findstr /B /C:"OS Name" /B /C:"OS Version"` command.
32
+ *
33
+ * ```
34
+ * OS Name: Microsoft Windows 11 Enterprise
35
+ * OS Version: 10.0.22631 N/A Build 22631
36
+ * ```
37
+ *
38
+ * Parses os and os-version from the response.
39
+ */
40
+ const getWindowsInfo = async () => {
41
+ const { stdout } = await (0, helpers_1.execPromise)('systeminfo | findstr /B /C:"OS Name" /B /C:"OS Version"');
42
+ const parseWindowsInfo = (systemInfoResponse) => {
43
+ const regex = /OS Name:\s+([^\n]+)\nOS Version:\s+([\d.]+)\s+(N\/A\s+Build\s+(\d+))/;
44
+ const match = systemInfoResponse.match(regex);
45
+ return {
46
+ os: match ? match[1] : (0, os_1.platform)(),
47
+ 'os-version': match ? `${match[2]} ${match[3]}` : (0, os_1.release)(),
48
+ };
49
+ };
50
+ return parseWindowsInfo(stdout);
51
+ };
52
+ /**
53
+ * Executes `sw_vers` command in terminal.
54
+ *
55
+ * ```
56
+ * ProductName: macOS
57
+ * ProductVersion: 14.3.1
58
+ * BuildVersion: 23D60
59
+ * ```
60
+ *
61
+ * Parses os and os version from the response.
62
+ */
63
+ const getMacVersion = async () => {
64
+ const { stdout } = await (0, helpers_1.execPromise)('sw_vers');
65
+ const parseMacInfo = (swVersResponse) => {
66
+ const productNameRegex = /ProductName:\s*(.+)/;
67
+ const productVersionRegex = /ProductVersion:\s*(.+)/;
68
+ const nameMatch = swVersResponse.match(productNameRegex);
69
+ const versionMatch = swVersResponse.match(productVersionRegex);
70
+ return {
71
+ os: nameMatch ? nameMatch[1].trim() : (0, os_1.platform)(),
72
+ 'os-version': versionMatch ? versionMatch[1].trim() : (0, os_1.release)(),
73
+ };
74
+ };
75
+ return parseMacInfo(stdout);
76
+ };
77
+ /**
78
+ * Finds operating system information like name and version.
79
+ */
80
+ const osInfo = async () => {
81
+ const osKind = (0, os_1.platform)();
82
+ switch (osKind) {
83
+ case 'darwin':
84
+ return getMacVersion();
85
+ case 'linux':
86
+ return getLinuxInfo();
87
+ case 'win32':
88
+ return getWindowsInfo();
89
+ default:
90
+ return {
91
+ os: osKind,
92
+ 'os-version': (0, os_1.release)(),
93
+ };
94
+ }
95
+ };
96
+ exports.osInfo = osInfo;
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3MtY2hlY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL29zLWNoZWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkJBQXFDO0FBRXJDLHVDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sWUFBWSxHQUFHLEtBQUssSUFBSSxFQUFFO0lBQzlCLE1BQU0sRUFBQyxNQUFNLEVBQUMsR0FBRyxNQUFNLElBQUEscUJBQVcsRUFBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRXJELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxrQkFBMEIsRUFBRSxFQUFFO1FBQ3ZELE1BQU0sS0FBSyxHQUNULGtFQUFrRSxDQUFDO1FBQ3JFLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5QyxPQUFPO1lBQ0wsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFBLGFBQVEsR0FBRTtZQUNqQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBQSxZQUFPLEdBQUU7U0FDNUQsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLE9BQU8saUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsS0FBSyxJQUFJLEVBQUU7SUFDaEMsTUFBTSxFQUFDLE1BQU0sRUFBQyxHQUFHLE1BQU0sSUFBQSxxQkFBVyxFQUNoQyx5REFBeUQsQ0FDMUQsQ0FBQztJQUVGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxrQkFBMEIsRUFBRSxFQUFFO1FBQ3RELE1BQU0sS0FBSyxHQUNULHNFQUFzRSxDQUFDO1FBQ3pFLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5QyxPQUFPO1lBQ0wsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFBLGFBQVEsR0FBRTtZQUNqQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBQSxZQUFPLEdBQUU7U0FDNUQsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEMsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sYUFBYSxHQUFHLEtBQUssSUFBSSxFQUFFO0lBQy9CLE1BQU0sRUFBQyxNQUFNLEVBQUMsR0FBRyxNQUFNLElBQUEscUJBQVcsRUFBQyxTQUFTLENBQUMsQ0FBQztJQUU5QyxNQUFNLFlBQVksR0FBRyxDQUFDLGNBQXNCLEVBQUUsRUFBRTtRQUM5QyxNQUFNLGdCQUFnQixHQUFHLHFCQUFxQixDQUFDO1FBQy9DLE1BQU0sbUJBQW1CLEdBQUcsd0JBQXdCLENBQUM7UUFFckQsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUUvRCxPQUFPO1lBQ0wsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFBLGFBQVEsR0FBRTtZQUNoRCxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUEsWUFBTyxHQUFFO1NBQ2hFLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRixPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNJLE1BQU0sTUFBTSxHQUFHLEtBQUssSUFBSSxFQUFFO0lBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUEsYUFBUSxHQUFFLENBQUM7SUFFMUIsUUFBUSxNQUFNLEVBQUU7UUFDZCxLQUFLLFFBQVE7WUFDWCxPQUFPLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLEtBQUssT0FBTztZQUNWLE9BQU8sWUFBWSxFQUFFLENBQUM7UUFDeEIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxjQUFjLEVBQUUsQ0FBQztRQUMxQjtZQUNFLE9BQU87Z0JBQ0wsRUFBRSxFQUFFLE1BQU07Z0JBQ1YsWUFBWSxFQUFFLElBQUEsWUFBTyxHQUFFO2FBQ3hCLENBQUM7S0FDTDtBQUNILENBQUMsQ0FBQztBQWhCVyxRQUFBLE1BQU0sVUFnQmpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtyZWxlYXNlLCBwbGF0Zm9ybX0gZnJvbSAnb3MnO1xuXG5pbXBvcnQge2V4ZWNQcm9taXNlfSBmcm9tICcuL2hlbHBlcnMnO1xuXG4vKipcbiAqIEV4ZWN1dGVzIGBsc2JfcmVsZWFzZSAtYWAgY29tbWFuZCBpbiB0ZXJtaW5hbC5cbiAqXG4gKiBgYGBcbiAqIERpc3RyaWJ1dG9yIElEOiBVYnVudHVcbiAqIERlc2NyaXB0aW9uOiAgICBVYnVudHUgMjIuMDQuNCBMVFNcbiAqIFJlbGVhc2U6ICAgICAgICAyMi4wNFxuICogQ29kZW5hbWU6ICAgICAgIGphbW15XG4gKiBgYGBcbiAqXG4gKiBQYXJzZXMgb3MgYW5kIG9zLXZlcnNpb24gZnJvbSB0aGUgcmVzcG9uc2UuXG4gKi9cbmNvbnN0IGdldExpbnV4SW5mbyA9IGFzeW5jICgpID0+IHtcbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjUHJvbWlzZSgnbHNiX3JlbGVhc2UgLWEnKTtcblxuICBjb25zdCBwYXJzZUxpbnV4VmVyc2lvbiA9IChsc2JSZWxlYXNlUmVzcG9uc2U6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJlZ2V4ID1cbiAgICAgIC9EaXN0cmlidXRvciBJRDogKFteXFxuXSspXFxuRGVzY3JpcHRpb246ICsoW14gXSspICsoW14gXSspICsoLispXFxuLztcbiAgICBjb25zdCBtYXRjaCA9IGxzYlJlbGVhc2VSZXNwb25zZS5tYXRjaChyZWdleCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3M6IG1hdGNoID8gbWF0Y2hbMV0gOiBwbGF0Zm9ybSgpLFxuICAgICAgJ29zLXZlcnNpb24nOiBtYXRjaCA/IGAke21hdGNoWzNdfSAke21hdGNoWzRdfWAgOiByZWxlYXNlKCksXG4gICAgfTtcbiAgfTtcblxuICByZXR1cm4gcGFyc2VMaW51eFZlcnNpb24oc3Rkb3V0KTtcbn07XG5cbi8qKlxuICogRXhlY3V0ZXMgaW4gQ01EIGBzeXN0ZW1pbmZvIHwgZmluZHN0ciAvQiAvQzpcIk9TIE5hbWVcIiAvQiAvQzpcIk9TIFZlcnNpb25cImAgY29tbWFuZC5cbiAqXG4gKiBgYGBcbiAqIE9TIE5hbWU6ICAgICAgICAgICAgICAgICAgIE1pY3Jvc29mdCBXaW5kb3dzIDExIEVudGVycHJpc2VcbiAqIE9TIFZlcnNpb246ICAgICAgICAgICAgICAgIDEwLjAuMjI2MzEgTi9BIEJ1aWxkIDIyNjMxXG4gKiBgYGBcbiAqXG4gKiBQYXJzZXMgb3MgYW5kIG9zLXZlcnNpb24gZnJvbSB0aGUgcmVzcG9uc2UuXG4gKi9cbmNvbnN0IGdldFdpbmRvd3NJbmZvID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWNQcm9taXNlKFxuICAgICdzeXN0ZW1pbmZvIHwgZmluZHN0ciAvQiAvQzpcIk9TIE5hbWVcIiAvQiAvQzpcIk9TIFZlcnNpb25cIidcbiAgKTtcblxuICBjb25zdCBwYXJzZVdpbmRvd3NJbmZvID0gKHN5c3RlbUluZm9SZXNwb25zZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVnZXggPVxuICAgICAgL09TIE5hbWU6XFxzKyhbXlxcbl0rKVxcbk9TIFZlcnNpb246XFxzKyhbXFxkLl0rKVxccysoTlxcL0FcXHMrQnVpbGRcXHMrKFxcZCspKS87XG4gICAgY29uc3QgbWF0Y2ggPSBzeXN0ZW1JbmZvUmVzcG9uc2UubWF0Y2gocmVnZXgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9zOiBtYXRjaCA/IG1hdGNoWzFdIDogcGxhdGZvcm0oKSxcbiAgICAgICdvcy12ZXJzaW9uJzogbWF0Y2ggPyBgJHttYXRjaFsyXX0gJHttYXRjaFszXX1gIDogcmVsZWFzZSgpLFxuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIHBhcnNlV2luZG93c0luZm8oc3Rkb3V0KTtcbn07XG5cbi8qKlxuICogRXhlY3V0ZXMgYHN3X3ZlcnNgIGNvbW1hbmQgaW4gdGVybWluYWwuXG4gKlxuICogYGBgXG4gKiBQcm9kdWN0TmFtZTogICAgICBtYWNPU1xuICogUHJvZHVjdFZlcnNpb246ICAgMTQuMy4xXG4gKiBCdWlsZFZlcnNpb246ICAgICAyM0Q2MFxuICogYGBgXG4gKlxuICogUGFyc2VzIG9zIGFuZCBvcyB2ZXJzaW9uIGZyb20gdGhlIHJlc3BvbnNlLlxuICovXG5jb25zdCBnZXRNYWNWZXJzaW9uID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWNQcm9taXNlKCdzd192ZXJzJyk7XG5cbiAgY29uc3QgcGFyc2VNYWNJbmZvID0gKHN3VmVyc1Jlc3BvbnNlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBwcm9kdWN0TmFtZVJlZ2V4ID0gL1Byb2R1Y3ROYW1lOlxccyooLispLztcbiAgICBjb25zdCBwcm9kdWN0VmVyc2lvblJlZ2V4ID0gL1Byb2R1Y3RWZXJzaW9uOlxccyooLispLztcblxuICAgIGNvbnN0IG5hbWVNYXRjaCA9IHN3VmVyc1Jlc3BvbnNlLm1hdGNoKHByb2R1Y3ROYW1lUmVnZXgpO1xuICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IHN3VmVyc1Jlc3BvbnNlLm1hdGNoKHByb2R1Y3RWZXJzaW9uUmVnZXgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9zOiBuYW1lTWF0Y2ggPyBuYW1lTWF0Y2hbMV0udHJpbSgpIDogcGxhdGZvcm0oKSxcbiAgICAgICdvcy12ZXJzaW9uJzogdmVyc2lvbk1hdGNoID8gdmVyc2lvbk1hdGNoWzFdLnRyaW0oKSA6IHJlbGVhc2UoKSxcbiAgICB9O1xuICB9O1xuXG4gIHJldHVybiBwYXJzZU1hY0luZm8oc3Rkb3V0KTtcbn07XG5cbi8qKlxuICogRmluZHMgb3BlcmF0aW5nIHN5c3RlbSBpbmZvcm1hdGlvbiBsaWtlIG5hbWUgYW5kIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBvc0luZm8gPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IG9zS2luZCA9IHBsYXRmb3JtKCk7XG5cbiAgc3dpdGNoIChvc0tpbmQpIHtcbiAgICBjYXNlICdkYXJ3aW4nOlxuICAgICAgcmV0dXJuIGdldE1hY1ZlcnNpb24oKTtcbiAgICBjYXNlICdsaW51eCc6XG4gICAgICByZXR1cm4gZ2V0TGludXhJbmZvKCk7XG4gICAgY2FzZSAnd2luMzInOlxuICAgICAgcmV0dXJuIGdldFdpbmRvd3NJbmZvKCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9zOiBvc0tpbmQsXG4gICAgICAgICdvcy12ZXJzaW9uJzogcmVsZWFzZSgpLFxuICAgICAgfTtcbiAgfVxufTtcbiJdfQ==
@@ -74,8 +74,58 @@ export declare const manifestSchema: z.ZodObject<{
74
74
  }>;
75
75
  outputs?: string[] | undefined;
76
76
  }>;
77
+ execution: z.ZodObject<{
78
+ command: z.ZodString;
79
+ environment: z.ZodObject<{
80
+ 'if-version': z.ZodString;
81
+ os: z.ZodString;
82
+ 'os-version': z.ZodString;
83
+ 'node-version': z.ZodString;
84
+ 'date-time': z.ZodString;
85
+ dependencies: z.ZodArray<z.ZodString, "many">;
86
+ }, "strip", z.ZodTypeAny, {
87
+ 'if-version': string;
88
+ os: string;
89
+ 'os-version': string;
90
+ 'node-version': string;
91
+ 'date-time': string;
92
+ dependencies: string[];
93
+ }, {
94
+ 'if-version': string;
95
+ os: string;
96
+ 'os-version': string;
97
+ 'node-version': string;
98
+ 'date-time': string;
99
+ dependencies: string[];
100
+ }>;
101
+ status: z.ZodString;
102
+ error: z.ZodOptional<z.ZodString>;
103
+ }, "strip", z.ZodTypeAny, {
104
+ status: string;
105
+ command: string;
106
+ environment: {
107
+ 'if-version': string;
108
+ os: string;
109
+ 'os-version': string;
110
+ 'node-version': string;
111
+ 'date-time': string;
112
+ dependencies: string[];
113
+ };
114
+ error?: string | undefined;
115
+ }, {
116
+ status: string;
117
+ command: string;
118
+ environment: {
119
+ 'if-version': string;
120
+ os: string;
121
+ 'os-version': string;
122
+ 'node-version': string;
123
+ 'date-time': string;
124
+ dependencies: string[];
125
+ };
126
+ error?: string | undefined;
127
+ }>;
77
128
  tree: z.ZodRecord<z.ZodString, z.ZodAny>;
78
- 'if-version': z.ZodNullable<z.ZodOptional<z.ZodString>>;
79
129
  }, "strip", z.ZodTypeAny, {
80
130
  name: string;
81
131
  initialize: {
@@ -86,6 +136,19 @@ export declare const manifestSchema: z.ZodObject<{
86
136
  }>;
87
137
  outputs?: string[] | undefined;
88
138
  };
139
+ execution: {
140
+ status: string;
141
+ command: string;
142
+ environment: {
143
+ 'if-version': string;
144
+ os: string;
145
+ 'os-version': string;
146
+ 'node-version': string;
147
+ 'date-time': string;
148
+ dependencies: string[];
149
+ };
150
+ error?: string | undefined;
151
+ };
89
152
  tree: Record<string, any>;
90
153
  description?: string | null | undefined;
91
154
  tags?: {
@@ -103,7 +166,6 @@ export declare const manifestSchema: z.ZodObject<{
103
166
  aggregation: "sum" | "none" | "avg";
104
167
  unit: string;
105
168
  }[] | null | undefined;
106
- 'if-version'?: string | null | undefined;
107
169
  }, {
108
170
  name: string;
109
171
  initialize: {
@@ -114,6 +176,19 @@ export declare const manifestSchema: z.ZodObject<{
114
176
  }>;
115
177
  outputs?: string[] | undefined;
116
178
  };
179
+ execution: {
180
+ status: string;
181
+ command: string;
182
+ environment: {
183
+ 'if-version': string;
184
+ os: string;
185
+ 'os-version': string;
186
+ 'node-version': string;
187
+ 'date-time': string;
188
+ dependencies: string[];
189
+ };
190
+ error?: string | undefined;
191
+ };
117
192
  tree: Record<string, any>;
118
193
  description?: string | null | undefined;
119
194
  tags?: {
@@ -131,7 +206,6 @@ export declare const manifestSchema: z.ZodObject<{
131
206
  aggregation: "sum" | "none" | "avg";
132
207
  unit: string;
133
208
  }[] | null | undefined;
134
- 'if-version'?: string | null | undefined;
135
209
  }>;
136
210
  /**
137
211
  * Validates given `manifest` object to match pattern.
@@ -146,6 +220,19 @@ export declare const validateManifest: (manifest: any) => {
146
220
  }>;
147
221
  outputs?: string[] | undefined;
148
222
  };
223
+ execution: {
224
+ status: string;
225
+ command: string;
226
+ environment: {
227
+ 'if-version': string;
228
+ os: string;
229
+ 'os-version': string;
230
+ 'node-version': string;
231
+ 'date-time': string;
232
+ dependencies: string[];
233
+ };
234
+ error?: string | undefined;
235
+ };
149
236
  tree: Record<string, any>;
150
237
  description?: string | null | undefined;
151
238
  tags?: {
@@ -163,7 +250,6 @@ export declare const validateManifest: (manifest: any) => {
163
250
  aggregation: "sum" | "none" | "avg";
164
251
  unit: string;
165
252
  }[] | null | undefined;
166
- 'if-version'?: string | null | undefined;
167
253
  };
168
254
  /**
169
255
  * Validates given `object` with given `schema`.
@@ -44,8 +44,20 @@ exports.manifestSchema = zod_1.z.object({
44
44
  })),
45
45
  outputs: zod_1.z.array(zod_1.z.string()).optional(),
46
46
  }),
47
+ execution: zod_1.z.object({
48
+ command: zod_1.z.string(),
49
+ environment: zod_1.z.object({
50
+ 'if-version': zod_1.z.string(),
51
+ os: zod_1.z.string(),
52
+ 'os-version': zod_1.z.string(),
53
+ 'node-version': zod_1.z.string(),
54
+ 'date-time': zod_1.z.string(),
55
+ dependencies: zod_1.z.array(zod_1.z.string()),
56
+ }),
57
+ status: zod_1.z.string(),
58
+ error: zod_1.z.string().optional(),
59
+ }),
47
60
  tree: zod_1.z.record(zod_1.z.string(), zod_1.z.any()),
48
- 'if-version': zod_1.z.string().optional().nullable(),
49
61
  });
50
62
  /**
51
63
  * Validates given `manifest` object to match pattern.
@@ -78,4 +90,4 @@ const prettifyErrorMessage = (issues) => {
78
90
  return `"${fullPath}" parameter is ${message.toLowerCase()}. Error code: ${code}.`;
79
91
  });
80
92
  };
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC92YWxpZGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBMkM7QUFFM0MscUNBQWdDO0FBRWhDLHNEQUF5RDtBQUN6RCxvREFBc0Q7QUFFdEQsTUFBTSxFQUFDLHVCQUF1QixFQUFFLG9CQUFvQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRS9EOztHQUVHO0FBQ1UsUUFBQSxjQUFjLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QyxJQUFJLEVBQUUsT0FBQztTQUNKLE1BQU0sQ0FBQztRQUNOLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ3RDLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQzVDLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0tBQzNDLENBQUM7U0FDRCxRQUFRLEVBQUU7U0FDVixRQUFRLEVBQUU7SUFDYixXQUFXLEVBQUUsT0FBQztTQUNYLE1BQU0sQ0FBQztRQUNOLE9BQU8sRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1QixJQUFJLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxpQ0FBbUIsQ0FBQztLQUNsQyxDQUFDO1NBQ0QsUUFBUSxFQUFFO1NBQ1YsUUFBUSxFQUFFO0lBQ2IsTUFBTSxFQUFFLE9BQUM7U0FDTixLQUFLLENBQ0osT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNQ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QUksR0FBRyxDQUFDO0lBQ3JGLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtab2RJc3N1ZSwgWm9kU2NoZW1hLCB6fSBmcm9tICd6b2QnO1xuXG5pbXBvcnQge0VSUk9SU30gZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQge0FHR1JFR0FUSU9OX01FVEhPRFN9IGZyb20gJy4uL3R5cGVzL2FnZ3JlZ2F0aW9uJztcbmltcG9ydCB7QUdHUkVHQVRJT05fVFlQRVN9IGZyb20gJy4uL3R5cGVzL3BhcmFtZXRlcnMnO1xuXG5jb25zdCB7TWFuaWZlc3RWYWxpZGF0aW9uRXJyb3IsIElucHV0VmFsaWRhdGlvbkVycm9yfSA9IEVSUk9SUztcblxuLyoqXG4gKiBWYWxpZGF0aW9uIHNjaGVtYSBmb3IgbWFuaWZlc3RzLlxuICovXG5leHBvcnQgY29uc3QgbWFuaWZlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgdGFnczogelxuICAgIC5vYmplY3Qoe1xuICAgICAga2luZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKCksXG4gICAgICBjb21wbGV4aXR5OiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgICAgIGNhdGVnb3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgICB9KVxuICAgIC5vcHRpb25hbCgpXG4gICAgLm51bGxhYmxlKCksXG4gIGFnZ3JlZ2F0aW9uOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBtZXRyaWNzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgICAgdHlwZTogei5lbnVtKEFHR1JFR0FUSU9OX01FVEhPRFMpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKClcbiAgICAubnVsbGFibGUoKSxcbiAgcGFyYW1zOiB6XG4gICAgLmFycmF5KFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKSxcbiAgICAgICAgYWdncmVnYXRpb246IHouZW51bShBR0dSRUdBVElPTl9UWVBFUyksXG4gICAgICAgIHVuaXQ6IHouc3RyaW5nKCksXG4gICAgICB9KVxuICAgIClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5udWxsYWJsZSgpLFxuICBpbml0aWFsaXplOiB6Lm9iamVjdCh7XG4gICAgcGx1Z2luczogei5yZWNvcmQoXG4gICAgICB6LnN0cmluZygpLFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBwYXRoOiB6LnN0cmluZygpLFxuICAgICAgICBtZXRob2Q6IHouc3RyaW5nKCksXG4gICAgICAgICdnbG9iYWwtY29uZmlnJzogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIH0pXG4gICAgKSxcbiAgICBvdXRwdXRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIH0pLFxuICB0cmVlOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgJ2lmLXZlcnNpb24nOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbn0pO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBnaXZlbiBgbWFuaWZlc3RgIG9iamVjdCB0byBtYXRjaCBwYXR0ZXJuLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVNYW5pZmVzdCA9IChtYW5pZmVzdDogYW55KSA9PlxuICB2YWxpZGF0ZShtYW5pZmVzdFNjaGVtYSwgbWFuaWZlc3QsIE1hbmlmZXN0VmFsaWRhdGlvbkVycm9yKTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgZ2l2ZW4gYG9iamVjdGAgd2l0aCBnaXZlbiBgc2NoZW1hYC5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlID0gPFQ+KFxuICBzY2hlbWE6IFpvZFNjaGVtYTxUPixcbiAgb2JqZWN0OiBhbnksXG4gIGVycm9yQ29uc3RydWN0b3I6IEVycm9yQ29uc3RydWN0b3IgPSBJbnB1dFZhbGlkYXRpb25FcnJvclxuKSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBzY2hlbWEuc2FmZVBhcnNlKG9iamVjdCk7XG5cbiAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JDb25zdHJ1Y3RvcihcbiAgICAgIHByZXR0aWZ5RXJyb3JNZXNzYWdlKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZSlcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQuZGF0YTtcbn07XG5cbi8qKlxuICogQmVhdXRpZnkgZXJyb3IgbWVzc2FnZSBmcm9tIHpvZCBpc3N1ZS5cbiAqL1xuY29uc3QgcHJldHRpZnlFcnJvck1lc3NhZ2UgPSAoaXNzdWVzOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgaXNzdWVzQXJyYXkgPSBKU09OLnBhcnNlKGlzc3Vlcyk7XG5cbiAgcmV0dXJuIGlzc3Vlc0FycmF5Lm1hcCgoaXNzdWU6IFpvZElzc3VlKSA9PiB7XG4gICAgY29uc3Qge2NvZGUsIHBhdGgsIG1lc3NhZ2V9ID0gaXNzdWU7XG4gICAgY29uc3QgZmxhdHRlblBhdGggPSBwYXRoLm1hcChwYXJ0ID0+XG4gICAgICB0eXBlb2YgcGFydCA9PT0gJ251bWJlcicgPyBgWyR7cGFydH1dYCA6IHBhcnRcbiAgICApO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gZmxhdHRlblBhdGguam9pbignLicpO1xuXG4gICAgaWYgKGNvZGUgPT09ICdjdXN0b20nKSB7XG4gICAgICByZXR1cm4gYCR7bWVzc2FnZS50b0xvd2VyQ2FzZSgpfS4gRXJyb3IgY29kZTogJHtjb2RlfS5gO1xuICAgIH1cblxuICAgIHJldHVybiBgXCIke2Z1bGxQYXRofVwiIHBhcmFtZXRlciBpcyAke21lc3NhZ2UudG9Mb3dlckNhc2UoKX0uIEVycm9yIGNvZGU6ICR7Y29kZX0uYDtcbiAgfSk7XG59O1xuIl19
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC92YWxpZGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBMkM7QUFFM0MscUNBQWdDO0FBRWhDLHNEQUF5RDtBQUN6RCxvREFBc0Q7QUFFdEQsTUFBTSxFQUFDLHVCQUF1QixFQUFFLG9CQUFvQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRS9EOztHQUVHO0FBQ1UsUUFBQSxjQUFjLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QyxJQUFJLEVBQUUsT0FBQztTQUNKLE1BQU0sQ0FBQztRQUNOLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ3RDLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQzVDLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0tBQzNDLENBQUM7U0FDRCxRQUFRLEVBQUU7U0FDVixRQUFRLEVBQUU7SUFDYixXQUFXLEVBQUUsT0FBQztTQUNYLE1BQU0sQ0FBQztRQUNOLE9BQU8sRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1QixJQUFJLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxpQ0FBbUIsQ0FBQztLQUNsQyxDQUFDO1NBQ0QsUUFBUSxFQUFFO1NBQ1YsUUFBUSxFQUFFO0lBQ2IsTUFBTSxFQUFFLE9BQUM7U0FDTixLQUFLLENBQ0osT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNQLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1FBQ2hCLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1FBQ3ZCLFdBQVcsRUFBRSxPQUFDLENBQUMsSUFBSSxDQUFDLDhCQUFpQixDQUFDO1FBQ3RDLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0tBQ2pCLENBQUMsQ0FDSDtTQUNBLFFBQVEsRUFBRTtTQUNWLFFBQVEsRUFBRTtJQUNiLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDO1FBQ25CLE9BQU8sRUFBRSxPQUFDLENBQUMsTUFBTSxDQUNmLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFDVixPQUFDLENBQUMsTUFBTSxDQUFDO1lBQ1AsSUFBSSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7WUFDaEIsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7WUFDbEIsZUFBZSxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtTQUMxRCxDQUFDLENBQ0g7UUFDRCxPQUFPLEVBQUUsT0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7S0FDeEMsQ0FBQztJQUNGLFNBQVMsRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDO1FBQ2xCLE9BQU8sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1FBQ25CLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3BCLFlBQVksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1lBQ3hCLEVBQUUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1lBQ2QsWUFBWSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7WUFDeEIsY0FBYyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7WUFDMUIsV0FBVyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7WUFDdkIsWUFBWSxFQUFFLE9BQUMsQ0FBQyxLQUFLLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2xDLENBQUM7UUFDRixNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtRQUNsQixLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtLQUM3QixDQUFDO0lBQ0YsSUFBSSxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNwQyxDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNJLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUNoRCxJQUFBLGdCQUFRLEVBQUMsc0JBQWMsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztBQURqRCxRQUFBLGdCQUFnQixvQkFDaUM7QUFFOUQ7O0dBRUc7QUFDSSxNQUFNLFFBQVEsR0FBRyxDQUN0QixNQUFvQixFQUNwQixNQUFXLEVBQ1gsbUJBQXFDLG9CQUFvQixFQUN6RCxFQUFFO0lBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWxELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7UUFDN0IsTUFBTSxJQUFJLGdCQUFnQixDQUN4QixvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQ3JELENBQUM7S0FDSDtJQUVELE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQWRXLFFBQUEsUUFBUSxZQWNuQjtBQUVGOztHQUVHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFO0lBQzlDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFdkMsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBZSxFQUFFLEVBQUU7UUFDekMsTUFBTSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3BDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDbEMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzlDLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXZDLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUNyQixPQUFPLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsSUFBSSxHQUFHLENBQUM7U0FDekQ7UUFFRCxPQUFPLElBQUksUUFBUSxrQkFBa0IsT0FBTyxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsSUFBSSxHQUFHLENBQUM7SUFDckYsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1pvZElzc3VlLCBab2RTY2hlbWEsIHp9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RVJST1JTfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCB7QUdHUkVHQVRJT05fTUVUSE9EU30gZnJvbSAnLi4vdHlwZXMvYWdncmVnYXRpb24nO1xuaW1wb3J0IHtBR0dSRUdBVElPTl9UWVBFU30gZnJvbSAnLi4vdHlwZXMvcGFyYW1ldGVycyc7XG5cbmNvbnN0IHtNYW5pZmVzdFZhbGlkYXRpb25FcnJvciwgSW5wdXRWYWxpZGF0aW9uRXJyb3J9ID0gRVJST1JTO1xuXG4vKipcbiAqIFZhbGlkYXRpb24gc2NoZW1hIGZvciBtYW5pZmVzdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBtYW5pZmVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICB0YWdzOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBraW5kOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgICAgIGNvbXBsZXhpdHk6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICAgICAgY2F0ZWdvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKClcbiAgICAubnVsbGFibGUoKSxcbiAgYWdncmVnYXRpb246IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIG1ldHJpY3M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgICB0eXBlOiB6LmVudW0oQUdHUkVHQVRJT05fTUVUSE9EUyksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKVxuICAgIC5udWxsYWJsZSgpLFxuICBwYXJhbXM6IHpcbiAgICAuYXJyYXkoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLFxuICAgICAgICBhZ2dyZWdhdGlvbjogei5lbnVtKEFHR1JFR0FUSU9OX1RZUEVTKSxcbiAgICAgICAgdW5pdDogei5zdHJpbmcoKSxcbiAgICAgIH0pXG4gICAgKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLm51bGxhYmxlKCksXG4gIGluaXRpYWxpemU6IHoub2JqZWN0KHtcbiAgICBwbHVnaW5zOiB6LnJlY29yZChcbiAgICAgIHouc3RyaW5nKCksXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHBhdGg6IHouc3RyaW5nKCksXG4gICAgICAgIG1ldGhvZDogei5zdHJpbmcoKSxcbiAgICAgICAgJ2dsb2JhbC1jb25maWcnOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgfSlcbiAgICApLFxuICAgIG91dHB1dHM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgfSksXG4gIGV4ZWN1dGlvbjogei5vYmplY3Qoe1xuICAgIGNvbW1hbmQ6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHoub2JqZWN0KHtcbiAgICAgICdpZi12ZXJzaW9uJzogei5zdHJpbmcoKSxcbiAgICAgIG9zOiB6LnN0cmluZygpLFxuICAgICAgJ29zLXZlcnNpb24nOiB6LnN0cmluZygpLFxuICAgICAgJ25vZGUtdmVyc2lvbic6IHouc3RyaW5nKCksXG4gICAgICAnZGF0ZS10aW1lJzogei5zdHJpbmcoKSxcbiAgICAgIGRlcGVuZGVuY2llczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICB9KSxcbiAgICBzdGF0dXM6IHouc3RyaW5nKCksXG4gICAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG4gIHRyZWU6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxufSk7XG5cbi8qKlxuICogVmFsaWRhdGVzIGdpdmVuIGBtYW5pZmVzdGAgb2JqZWN0IHRvIG1hdGNoIHBhdHRlcm4uXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU1hbmlmZXN0ID0gKG1hbmlmZXN0OiBhbnkpID0+XG4gIHZhbGlkYXRlKG1hbmlmZXN0U2NoZW1hLCBtYW5pZmVzdCwgTWFuaWZlc3RWYWxpZGF0aW9uRXJyb3IpO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBnaXZlbiBgb2JqZWN0YCB3aXRoIGdpdmVuIGBzY2hlbWFgLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGUgPSA8VD4oXG4gIHNjaGVtYTogWm9kU2NoZW1hPFQ+LFxuICBvYmplY3Q6IGFueSxcbiAgZXJyb3JDb25zdHJ1Y3RvcjogRXJyb3JDb25zdHJ1Y3RvciA9IElucHV0VmFsaWRhdGlvbkVycm9yXG4pID0+IHtcbiAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHNjaGVtYS5zYWZlUGFyc2Uob2JqZWN0KTtcblxuICBpZiAoIXZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgIHRocm93IG5ldyBlcnJvckNvbnN0cnVjdG9yKFxuICAgICAgcHJldHRpZnlFcnJvck1lc3NhZ2UodmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdC5kYXRhO1xufTtcblxuLyoqXG4gKiBCZWF1dGlmeSBlcnJvciBtZXNzYWdlIGZyb20gem9kIGlzc3VlLlxuICovXG5jb25zdCBwcmV0dGlmeUVycm9yTWVzc2FnZSA9IChpc3N1ZXM6IHN0cmluZykgPT4ge1xuICBjb25zdCBpc3N1ZXNBcnJheSA9IEpTT04ucGFyc2UoaXNzdWVzKTtcblxuICByZXR1cm4gaXNzdWVzQXJyYXkubWFwKChpc3N1ZTogWm9kSXNzdWUpID0+IHtcbiAgICBjb25zdCB7Y29kZSwgcGF0aCwgbWVzc2FnZX0gPSBpc3N1ZTtcbiAgICBjb25zdCBmbGF0dGVuUGF0aCA9IHBhdGgubWFwKHBhcnQgPT5cbiAgICAgIHR5cGVvZiBwYXJ0ID09PSAnbnVtYmVyJyA/IGBbJHtwYXJ0fV1gIDogcGFydFxuICAgICk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBmbGF0dGVuUGF0aC5qb2luKCcuJyk7XG5cbiAgICBpZiAoY29kZSA9PT0gJ2N1c3RvbScpIHtcbiAgICAgIHJldHVybiBgJHttZXNzYWdlLnRvTG93ZXJDYXNlKCl9LiBFcnJvciBjb2RlOiAke2NvZGV9LmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBcIiR7ZnVsbFBhdGh9XCIgcGFyYW1ldGVyIGlzICR7bWVzc2FnZS50b0xvd2VyQ2FzZSgpfS4gRXJyb3IgY29kZTogJHtjb2RlfS5gO1xuICB9KTtcbn07XG4iXX0=