@decaf-ts/utils 0.10.3 → 0.11.1-0.experimental.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/utils.cjs +2561 -2
- package/dist/utils.js +2602 -2
- package/lib/assets/slogans.cjs +1 -1
- package/lib/bin/build-scripts.cjs +1 -1
- package/lib/bin/tag-release.cjs +1 -1
- package/lib/cli/command.cjs +1 -1
- package/lib/cli/commands/build-scripts.cjs +74 -14
- package/lib/cli/commands/build-scripts.d.ts +62 -2
- package/lib/cli/commands/index.cjs +1 -1
- package/lib/cli/commands/tag-release.cjs +1 -1
- package/lib/cli/constants.cjs +1 -1
- package/lib/cli/index.cjs +1 -1
- package/lib/cli/types.cjs +1 -1
- package/lib/esm/assets/slogans.js +1 -1
- package/lib/esm/bin/build-scripts.js +1 -1
- package/lib/esm/bin/tag-release.js +1 -1
- package/lib/esm/cli/command.js +1 -1
- package/lib/esm/cli/commands/build-scripts.d.ts +62 -2
- package/lib/esm/cli/commands/build-scripts.js +74 -14
- package/lib/esm/cli/commands/index.js +1 -1
- package/lib/esm/cli/commands/tag-release.js +1 -1
- package/lib/esm/cli/constants.js +1 -1
- package/lib/esm/cli/index.js +1 -1
- package/lib/esm/cli/types.js +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +2 -2
- package/lib/esm/input/index.js +1 -1
- package/lib/esm/input/input.js +1 -1
- package/lib/esm/input/types.js +1 -1
- package/lib/esm/output/common.js +1 -1
- package/lib/esm/output/index.js +1 -1
- package/lib/esm/tests/Consumer.d.ts +106 -0
- package/lib/esm/tests/Consumer.js +79 -1
- package/lib/esm/tests/ProducerChildProcess.js +1 -1
- package/lib/esm/tests/TestReporter.d.ts +3 -0
- package/lib/esm/tests/TestReporter.js +20 -2
- package/lib/esm/tests/index.d.ts +3 -1
- package/lib/esm/tests/index.js +4 -2
- package/lib/esm/tests/jestPerformanceRunner.d.ts +7 -0
- package/lib/esm/tests/jestPerformanceRunner.js +15 -0
- package/lib/esm/tests/utils.d.ts +5 -0
- package/lib/esm/tests/utils.js +33 -0
- package/lib/esm/utils/constants.js +1 -1
- package/lib/esm/utils/fs.d.ts +1 -1
- package/lib/esm/utils/fs.js +76 -29
- package/lib/esm/utils/http.js +1 -1
- package/lib/esm/utils/index.d.ts +1 -0
- package/lib/esm/utils/index.js +2 -1
- package/lib/esm/utils/md.js +1 -1
- package/lib/esm/utils/performanceRunner.d.ts +126 -0
- package/lib/esm/utils/performanceRunner.js +344 -0
- package/lib/esm/utils/timeout.js +1 -1
- package/lib/esm/utils/types.js +1 -1
- package/lib/esm/utils/utils.js +1 -1
- package/lib/esm/writers/OutputWriter.js +1 -1
- package/lib/esm/writers/RegexpOutputWriter.js +1 -1
- package/lib/esm/writers/StandardOutputWriter.js +11 -4
- package/lib/esm/writers/index.js +1 -1
- package/lib/esm/writers/types.js +1 -1
- package/lib/index.cjs +2 -2
- package/lib/index.d.ts +1 -1
- package/lib/input/index.cjs +1 -1
- package/lib/input/input.cjs +1 -1
- package/lib/input/types.cjs +1 -1
- package/lib/output/common.cjs +1 -1
- package/lib/output/index.cjs +1 -1
- package/lib/tests/Consumer.cjs +79 -1
- package/lib/tests/Consumer.d.ts +106 -0
- package/lib/tests/ProducerChildProcess.cjs +1 -1
- package/lib/tests/TestReporter.cjs +20 -2
- package/lib/tests/TestReporter.d.ts +3 -0
- package/lib/tests/index.cjs +4 -2
- package/lib/tests/index.d.ts +3 -1
- package/lib/tests/jestPerformanceRunner.cjs +19 -0
- package/lib/tests/jestPerformanceRunner.d.ts +7 -0
- package/lib/tests/utils.cjs +36 -0
- package/lib/tests/utils.d.ts +5 -0
- package/lib/utils/constants.cjs +1 -1
- package/lib/utils/fs.cjs +76 -29
- package/lib/utils/fs.d.ts +1 -1
- package/lib/utils/http.cjs +1 -1
- package/lib/utils/index.cjs +2 -1
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/md.cjs +1 -1
- package/lib/utils/performanceRunner.cjs +384 -0
- package/lib/utils/performanceRunner.d.ts +126 -0
- package/lib/utils/timeout.cjs +1 -1
- package/lib/utils/types.cjs +1 -1
- package/lib/utils/utils.cjs +1 -1
- package/lib/writers/OutputWriter.cjs +1 -1
- package/lib/writers/RegexpOutputWriter.cjs +1 -1
- package/lib/writers/StandardOutputWriter.cjs +11 -4
- package/lib/writers/index.cjs +1 -1
- package/lib/writers/types.cjs +1 -1
- package/package.json +17 -10
- package/workdocs/assets/slogans.json +802 -0
- package/dist/utils.cjs.map +0 -1
- package/dist/utils.js.map +0 -1
- package/lib/assets/slogans.js.map +0 -1
- package/lib/bin/build-scripts.js.map +0 -1
- package/lib/bin/tag-release.js.map +0 -1
- package/lib/cli/command.js.map +0 -1
- package/lib/cli/commands/build-scripts.js.map +0 -1
- package/lib/cli/commands/index.js.map +0 -1
- package/lib/cli/commands/tag-release.js.map +0 -1
- package/lib/cli/constants.js.map +0 -1
- package/lib/cli/index.js.map +0 -1
- package/lib/cli/types.js.map +0 -1
- package/lib/esm/assets/slogans.js.map +0 -1
- package/lib/esm/bin/build-scripts.js.map +0 -1
- package/lib/esm/bin/tag-release.js.map +0 -1
- package/lib/esm/cli/command.js.map +0 -1
- package/lib/esm/cli/commands/build-scripts.js.map +0 -1
- package/lib/esm/cli/commands/index.js.map +0 -1
- package/lib/esm/cli/commands/tag-release.js.map +0 -1
- package/lib/esm/cli/constants.js.map +0 -1
- package/lib/esm/cli/index.js.map +0 -1
- package/lib/esm/cli/types.js.map +0 -1
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/input/index.js.map +0 -1
- package/lib/esm/input/input.js.map +0 -1
- package/lib/esm/input/types.js.map +0 -1
- package/lib/esm/output/common.js.map +0 -1
- package/lib/esm/output/index.js.map +0 -1
- package/lib/esm/tests/Consumer.js.map +0 -1
- package/lib/esm/tests/ProducerChildProcess.js.map +0 -1
- package/lib/esm/tests/TestReporter.js.map +0 -1
- package/lib/esm/tests/index.js.map +0 -1
- package/lib/esm/utils/constants.js.map +0 -1
- package/lib/esm/utils/fs.js.map +0 -1
- package/lib/esm/utils/http.js.map +0 -1
- package/lib/esm/utils/index.js.map +0 -1
- package/lib/esm/utils/md.js.map +0 -1
- package/lib/esm/utils/tests.d.ts +0 -1
- package/lib/esm/utils/tests.js +0 -2
- package/lib/esm/utils/tests.js.map +0 -1
- package/lib/esm/utils/timeout.js.map +0 -1
- package/lib/esm/utils/types.js.map +0 -1
- package/lib/esm/utils/utils.js.map +0 -1
- package/lib/esm/writers/OutputWriter.js.map +0 -1
- package/lib/esm/writers/RegexpOutputWriter.js.map +0 -1
- package/lib/esm/writers/StandardOutputWriter.js.map +0 -1
- package/lib/esm/writers/index.js.map +0 -1
- package/lib/esm/writers/types.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/input/index.js.map +0 -1
- package/lib/input/input.js.map +0 -1
- package/lib/input/types.js.map +0 -1
- package/lib/output/common.js.map +0 -1
- package/lib/output/index.js.map +0 -1
- package/lib/tests/Consumer.js.map +0 -1
- package/lib/tests/ProducerChildProcess.js.map +0 -1
- package/lib/tests/TestReporter.js.map +0 -1
- package/lib/tests/index.js.map +0 -1
- package/lib/utils/constants.js.map +0 -1
- package/lib/utils/fs.js.map +0 -1
- package/lib/utils/http.js.map +0 -1
- package/lib/utils/index.js.map +0 -1
- package/lib/utils/md.js.map +0 -1
- package/lib/utils/tests.cjs +0 -18
- package/lib/utils/tests.d.ts +0 -1
- package/lib/utils/tests.js.map +0 -1
- package/lib/utils/timeout.js.map +0 -1
- package/lib/utils/types.js.map +0 -1
- package/lib/utils/utils.js.map +0 -1
- package/lib/writers/OutputWriter.js.map +0 -1
- package/lib/writers/RegexpOutputWriter.js.map +0 -1
- package/lib/writers/StandardOutputWriter.js.map +0 -1
- package/lib/writers/index.js.map +0 -1
- package/lib/writers/types.js.map +0 -1
package/lib/esm/output/common.js
CHANGED
|
@@ -92,4 +92,4 @@ export function getSlogan(i) {
|
|
|
92
92
|
throw new Error(`Failed to retrieve slogans: ${error}`);
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
|
-
//# sourceMappingURL=
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL291dHB1dC9jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSwrQkFBMEI7QUFDNUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzlDOzs7O0dBSUc7QUFDSCxNQUFNLE1BQU0sR0FBRztJQUNiLGdCQUFnQixFQUFFLGNBQWM7SUFDaEMsZ0JBQWdCLEVBQUUsUUFBUTtJQUMxQixnQkFBZ0IsRUFBRSxPQUFPO0lBQ3pCLGdCQUFnQixFQUFFLFNBQVM7SUFDM0IsZ0JBQWdCLEVBQUUsU0FBUztJQUMzQixnQkFBZ0IsRUFBRSxjQUFjO0lBQ2hDLGdCQUFnQixFQUFFLGNBQWM7SUFDaEMsZ0JBQWdCLEVBQUUsYUFBYTtJQUMvQixnQkFBZ0IsRUFBRSxhQUFhO0NBQ2hDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUFlO0lBQ3pDLE1BQU0sT0FBTyxHQUFHLFNBQVMsRUFBRSxDQUFDO0lBQzVCLE1BQU0sTUFBTSxHQUNWOzs7Ozs7O0VBT0YsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDYixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUM3QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQzdELEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDMUMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLENBQVU7SUFDbEMsSUFBSSxDQUFDO1FBQ0gsQ0FBQztZQUNDLE9BQU8sQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNCLENBQUM7SUFBQyxPQUFPLEtBQWMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzbG9nYW5zIH0gZnJvbSBcIi4uL2Fzc2V0cy9zbG9nYW5zXCI7XG5pbXBvcnQgeyBzdHlsZSB9IGZyb20gXCJzdHlsZWQtc3RyaW5nLWJ1aWxkZXJcIjtcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcnJheSBvZiBBTlNJIGNvbG9yIGNvZGVzIGZvciBiYW5uZXIgc3R5bGluZy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBzZXQgb2YgQU5TSSBjb2xvciBjb2RlcyB1c2VkIHRvIHN0eWxlIHRoZSBiYW5uZXIgdGV4dC5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuY29uc3QgY29sb3JzID0gW1xuICBcIlxceDFiWzM4OzU7MjE1bVwiLCAvLyBzb2Z0IG9yYW5nZVxuICBcIlxceDFiWzM4OzU7MjA5bVwiLCAvLyBjb3JhbFxuICBcIlxceDFiWzM4OzU7MjA1bVwiLCAvLyBwaW5rXG4gIFwiXFx4MWJbMzg7NTsyMTBtXCIsIC8vIHBlYWNoeVxuICBcIlxceDFiWzM4OzU7MjE3bVwiLCAvLyBzYWxtb25cbiAgXCJcXHgxYlszODs1OzIxNm1cIiwgLy8gbGlnaHQgY29yYWxcbiAgXCJcXHgxYlszODs1OzIyNG1cIiwgLy8gbGlnaHQgcGVhY2hcbiAgXCJcXHgxYlszODs1OzIzMG1cIiwgLy8gc29mdCBjcmVhbVxuICBcIlxceDFiWzM4OzU7MjMwbVwiLCAvLyBzb2Z0IGNyZWFtXG5dO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQcmludHMgYSBzdHlsZWQgYmFubmVyIHRvIHRoZSBjb25zb2xlLlxuICogQHN1bW1hcnkgR2VuZXJhdGVzIGFuZCBwcmludHMgYSBjb2xvcmZ1bCBBU0NJSSBhcnQgYmFubmVyIHdpdGggYSByYW5kb20gc2xvZ2FuLlxuICogQHBhcmFtIHtMb2dnZXJ9IFtsb2dnZXJdIC0gT3B0aW9uYWwgbG9nZ2VyIGZvciB2ZXJib3NlIG91dHB1dC5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqIEBmdW5jdGlvbiBwcmludEJhbm5lclxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBwcmludEJhbm5lclxuICogICBwYXJ0aWNpcGFudCBnZXRTbG9nYW5cbiAqICAgcGFydGljaXBhbnQgcGFkRW5kXG4gKiAgIHBhcnRpY2lwYW50IGNvbnNvbGVcbiAqICAgcHJpbnRCYW5uZXItPj5nZXRTbG9nYW46IENhbGwgZ2V0U2xvZ2FuKClcbiAqICAgZ2V0U2xvZ2FuLS0+PnByaW50QmFubmVyOiBSZXR1cm4gcmFuZG9tIHNsb2dhblxuICogICBwcmludEJhbm5lci0+PnByaW50QmFubmVyOiBDcmVhdGUgYmFubmVyIEFTQ0lJIGFydFxuICogICBwcmludEJhbm5lci0+PnByaW50QmFubmVyOiBTcGxpdCBiYW5uZXIgaW50byBsaW5lc1xuICogICBwcmludEJhbm5lci0+PnByaW50QmFubmVyOiBDYWxjdWxhdGUgbWF4IGxpbmUgbGVuZ3RoXG4gKiAgIHByaW50QmFubmVyLT4+cGFkRW5kOiBDYWxsIHBhZEVuZCB3aXRoIHNsb2dhblxuICogICBwYWRFbmQtLT4+cHJpbnRCYW5uZXI6IFJldHVybiBwYWRkZWQgc2xvZ2FuIGxpbmVcbiAqICAgbG9vcCBGb3IgZWFjaCBiYW5uZXIgbGluZVxuICogICAgIHByaW50QmFubmVyLT4+c3R5bGU6IENhbGwgc3R5bGUobGluZSlcbiAqICAgICBzdHlsZS0tPj5wcmludEJhbm5lcjogUmV0dXJuIHN0eWxlZCBsaW5lXG4gKiAgICAgcHJpbnRCYW5uZXItPj5jb25zb2xlOiBMb2cgc3R5bGVkIGxpbmVcbiAqICAgZW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludEJhbm5lcihsb2dnZXI/OiBMb2dnZXIpIHtcbiAgY29uc3QgbWVzc2FnZSA9IGdldFNsb2dhbigpO1xuICBjb25zdCBiYW5uZXI6IHN0cmluZyB8IHN0cmluZ1tdID1cbiAgICBgIyAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICAgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRIFxuIyAgICAgICggKCAgICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICBcbiMgICAgICAgKSApICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgIFxuIyAgICBbPT09PT09PV0gICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgXG4jICAgICBcXGAtLS0tLcK0ICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSBcbiMgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgXG4jICAgICAgICAgICAgICAgICDilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgXG4jYC5zcGxpdChcIlxcblwiKTtcbiAgY29uc3QgbWF4TGVuZ3RoID0gYmFubmVyLnJlZHVjZSgobWF4LCBsaW5lKSA9PiBNYXRoLm1heChtYXgsIGxpbmUubGVuZ3RoKSwgMCk7XG4gIGJhbm5lci5wdXNoKGAjICAke21lc3NhZ2UucGFkU3RhcnQobWF4TGVuZ3RoIC0gMyl9YCk7XG4gIGJhbm5lci5mb3JFYWNoKChsaW5lLCBpbmRleCkgPT4ge1xuICAgIChsb2dnZXIgPyBsb2dnZXIuaW5mby5iaW5kKGxvZ2dlcikgOiBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpKShcbiAgICAgIHN0eWxlKGxpbmUgfHwgXCJcIikucmF3KGNvbG9yc1tpbmRleF0pLnRleHRcbiAgICApO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgc2xvZ2FuIGZyb20gdGhlIHByZWRlZmluZWQgbGlzdC5cbiAqIEBzdW1tYXJ5IEZldGNoZXMgYSByYW5kb20gc2xvZ2FuIG9yIGEgc3BlY2lmaWMgb25lIGJ5IGluZGV4IGZyb20gdGhlIHNsb2dhbnMgbGlzdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbaV0gLSBPcHRpb25hbCBpbmRleCB0byByZXRyaWV2ZSBhIHNwZWNpZmljIHNsb2dhbi5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHNlbGVjdGVkIHNsb2dhbi5cbiAqIEBmdW5jdGlvbiBnZXRTbG9nYW5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgZ2V0U2xvZ2FuXG4gKiAgIHBhcnRpY2lwYW50IE1hdGgucmFuZG9tXG4gKiAgIHBhcnRpY2lwYW50IHNsb2dhbnNcbiAqICAgYWx0IGkgaXMgdW5kZWZpbmVkXG4gKiAgICAgZ2V0U2xvZ2FuLT4+TWF0aC5yYW5kb206IEdlbmVyYXRlIHJhbmRvbSBpbmRleFxuICogICAgIE1hdGgucmFuZG9tLS0+PmdldFNsb2dhbjogUmV0dXJuIHJhbmRvbSBpbmRleFxuICogICBlbHNlIGkgaXMgZGVmaW5lZFxuICogICAgIE5vdGUgb3ZlciBnZXRTbG9nYW46IFVzZSBwcm92aWRlZCBpbmRleFxuICogICBlbmRcbiAqICAgZ2V0U2xvZ2FuLT4+c2xvZ2FuczogQWNjZXNzIHNsb2dhbiBhdCBpbmRleFxuICogICBzbG9nYW5zLS0+PmdldFNsb2dhbjogUmV0dXJuIHNsb2dhblxuICogICBhbHQgRXJyb3Igb2NjdXJzXG4gKiAgICAgZ2V0U2xvZ2FuLT4+Z2V0U2xvZ2FuOiBUaHJvdyBlcnJvclxuICogICBlbmRcbiAqICAgZ2V0U2xvZ2FuLS0+PkNhbGxlcjogUmV0dXJuIHNsb2dhblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2xvZ2FuKGk/OiBudW1iZXIpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGkgPVxuICAgICAgdHlwZW9mIGkgPT09IFwidW5kZWZpbmVkXCIgPyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBzbG9nYW5zLmxlbmd0aCkgOiBpO1xuICAgIHJldHVybiBzbG9nYW5zW2ldLlNsb2dhbjtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZXRyaWV2ZSBzbG9nYW5zOiAke2Vycm9yfWApO1xuICB9XG59XG4iXX0=
|
package/lib/esm/output/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from "./common.js";
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3V0cHV0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbW1vblwiO1xuIl19
|
|
@@ -1,24 +1,96 @@
|
|
|
1
1
|
import { LoggedClass } from "@decaf-ts/logging";
|
|
2
2
|
import { TestReporter } from "./TestReporter";
|
|
3
|
+
/**
|
|
4
|
+
* @description Store for logs indexed by identifier.
|
|
5
|
+
* @summary A record where keys are identifiers and values are arrays of log strings.
|
|
6
|
+
* @typedef {Record<number, string[]>} LogStore
|
|
7
|
+
* @memberOf module:utils
|
|
8
|
+
*/
|
|
3
9
|
type LogStore = Record<number, string[]>;
|
|
10
|
+
/**
|
|
11
|
+
* @description Structure of a parsed log entry.
|
|
12
|
+
* @summary Contains timestamp, child identifier, and action.
|
|
13
|
+
* @interface ParsedLog
|
|
14
|
+
* @property {number} timestamp - The timestamp of the log.
|
|
15
|
+
* @property {string} child - The child identifier.
|
|
16
|
+
* @property {string} action - The action performed.
|
|
17
|
+
* @memberOf module:utils
|
|
18
|
+
*/
|
|
4
19
|
export interface ParsedLog {
|
|
5
20
|
timestamp: number;
|
|
6
21
|
child: string;
|
|
7
22
|
action: string;
|
|
8
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* @description Result of a comparison between consumer and producer logs.
|
|
26
|
+
* @summary Contains arrays of parsed logs for both consumer and producer.
|
|
27
|
+
* @interface ComparerResult
|
|
28
|
+
* @property {ParsedLog[]} consumer - The parsed consumer logs.
|
|
29
|
+
* @property {ParsedLog[]} producer - The parsed producer logs.
|
|
30
|
+
* @memberOf module:utils
|
|
31
|
+
*/
|
|
9
32
|
export interface ComparerResult {
|
|
10
33
|
consumer: ParsedLog[];
|
|
11
34
|
producer: ParsedLog[];
|
|
12
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* @description Function type for comparing consumer and producer data.
|
|
38
|
+
* @summary Compares two LogStores and returns a Promise resolving to ComparerResult.
|
|
39
|
+
* @typedef {function(LogStore, LogStore): Promise<ComparerResult>} Comparer
|
|
40
|
+
* @memberOf module:utils
|
|
41
|
+
*/
|
|
13
42
|
type Comparer = (consumerData: LogStore, producerData: LogStore) => Promise<ComparerResult>;
|
|
43
|
+
/**
|
|
44
|
+
* @description Function type for handling consumer actions.
|
|
45
|
+
* @summary A function that takes an identifier and optional arguments, returning a result.
|
|
46
|
+
* @typedef {function(number, ...unknown[]): unknown | Promise<unknown>} ConsumerHandler
|
|
47
|
+
* @memberOf module:utils
|
|
48
|
+
*/
|
|
14
49
|
type ConsumerHandler = (identifier: number, ...args: unknown[]) => unknown | Promise<unknown>;
|
|
50
|
+
/**
|
|
51
|
+
* @description Default comparer function for consumer and producer logs.
|
|
52
|
+
* @summary Sorts and compares consumer and producer logs to ensure they match.
|
|
53
|
+
* @param {LogStore} consumerData - The consumer logs.
|
|
54
|
+
* @param {LogStore} producerData - The producer logs.
|
|
55
|
+
* @return {Promise<ComparerResult>} The comparison result.
|
|
56
|
+
* @function defaultComparer
|
|
57
|
+
* @memberOf module:utils
|
|
58
|
+
*/
|
|
15
59
|
export declare const defaultComparer: Comparer;
|
|
60
|
+
/**
|
|
61
|
+
* @description Options for the reporting comparer.
|
|
62
|
+
* @summary Configuration options for the reportingComparer function.
|
|
63
|
+
* @interface ReportingComparerOptions
|
|
64
|
+
* @property {TestReporter} [reporter] - The test reporter instance.
|
|
65
|
+
* @property {string} [testCase] - The test case name.
|
|
66
|
+
* @property {string} [referencePrefix] - The prefix for report references.
|
|
67
|
+
* @memberOf module:utils
|
|
68
|
+
*/
|
|
16
69
|
export interface ReportingComparerOptions {
|
|
17
70
|
reporter?: TestReporter;
|
|
18
71
|
testCase?: string;
|
|
19
72
|
referencePrefix?: string;
|
|
20
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* @description Comparer function that reports results using TestReporter.
|
|
76
|
+
* @summary Compares logs and generates a report with tables and messages.
|
|
77
|
+
* @param {LogStore} consumerData - The consumer logs.
|
|
78
|
+
* @param {LogStore} producerData - The producer logs.
|
|
79
|
+
* @param {ReportingComparerOptions} [options] - Options for reporting.
|
|
80
|
+
* @return {Promise<ComparerResult>} The comparison result.
|
|
81
|
+
* @function reportingComparer
|
|
82
|
+
* @memberOf module:utils
|
|
83
|
+
*/
|
|
21
84
|
export declare const reportingComparer: (consumerData: LogStore, producerData: LogStore, options?: ReportingComparerOptions) => Promise<ComparerResult>;
|
|
85
|
+
/**
|
|
86
|
+
* @class ConsumerRunner
|
|
87
|
+
* @description Runs a consumer process and manages producer child processes.
|
|
88
|
+
* @summary Orchestrates the execution of consumer and producer processes, collects logs, and compares results.
|
|
89
|
+
* @param {string} action - The action name.
|
|
90
|
+
* @param {ConsumerHandler} consumerHandler - The handler function for the consumer.
|
|
91
|
+
* @param {Comparer} [compareHandler] - Optional custom comparer function.
|
|
92
|
+
* @memberOf module:utils
|
|
93
|
+
*/
|
|
22
94
|
export declare class ConsumerRunner extends LoggedClass {
|
|
23
95
|
private readonly action;
|
|
24
96
|
private readonly handler;
|
|
@@ -40,6 +112,40 @@ export declare class ConsumerRunner extends LoggedClass {
|
|
|
40
112
|
private isProducerComplete;
|
|
41
113
|
private isConsumerComplete;
|
|
42
114
|
private terminateChildren;
|
|
115
|
+
/**
|
|
116
|
+
* @description Runs the consumer and producer processes.
|
|
117
|
+
* @summary Starts the producer child processes and the consumer handler, then waits for completion and compares results.
|
|
118
|
+
* @param {number} count - The number of producers.
|
|
119
|
+
* @param {number} [timeout] - The timeout for producers.
|
|
120
|
+
* @param {number} times - The number of times to repeat.
|
|
121
|
+
* @param {boolean} [random] - Whether to use random timeouts.
|
|
122
|
+
* @return {Promise<ComparerResult>} The comparison result.
|
|
123
|
+
* @mermaid
|
|
124
|
+
* sequenceDiagram
|
|
125
|
+
* participant Runner as ConsumerRunner
|
|
126
|
+
* participant Child as ProducerChild
|
|
127
|
+
* participant Handler as ConsumerHandler
|
|
128
|
+
* participant Comparer as Comparer
|
|
129
|
+
* Runner->>Runner: reset()
|
|
130
|
+
* loop For each count
|
|
131
|
+
* Runner->>Child: fork()
|
|
132
|
+
* Runner->>Runner: Store child process
|
|
133
|
+
* end
|
|
134
|
+
* Runner->>Child: send(start message)
|
|
135
|
+
* loop For each message from Child
|
|
136
|
+
* Child->>Runner: message(action)
|
|
137
|
+
* Runner->>Runner: store producer log
|
|
138
|
+
* Runner->>Handler: call handler
|
|
139
|
+
* Handler-->>Runner: return
|
|
140
|
+
* Runner->>Runner: record consumer log
|
|
141
|
+
* Runner->>Runner: finalizeIfComplete()
|
|
142
|
+
* end
|
|
143
|
+
* alt Complete
|
|
144
|
+
* Runner->>Comparer: compare logs
|
|
145
|
+
* Comparer-->>Runner: return result
|
|
146
|
+
* Runner-->>Caller: resolve(result)
|
|
147
|
+
* end
|
|
148
|
+
*/
|
|
43
149
|
run(count: number, timeout: number | undefined, times: number, random: boolean | undefined): Promise<ComparerResult>;
|
|
44
150
|
}
|
|
45
151
|
export {};
|
|
@@ -2,6 +2,14 @@ import { fork } from "node:child_process";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { LoggedClass } from "@decaf-ts/logging";
|
|
4
4
|
import { TestReporter } from "./TestReporter.js";
|
|
5
|
+
/**
|
|
6
|
+
* @description Parses a log string into a ParsedLog object.
|
|
7
|
+
* @summary Splits the log string by " - " and extracts timestamp, child, and action.
|
|
8
|
+
* @param {string} data - The log string to parse.
|
|
9
|
+
* @return {ParsedLog} The parsed log object.
|
|
10
|
+
* @function parseData
|
|
11
|
+
* @memberOf module:utils
|
|
12
|
+
*/
|
|
5
13
|
const parseData = (data) => {
|
|
6
14
|
const [timestamp, , child, action] = data.split(" - ");
|
|
7
15
|
return {
|
|
@@ -10,6 +18,15 @@ const parseData = (data) => {
|
|
|
10
18
|
action,
|
|
11
19
|
};
|
|
12
20
|
};
|
|
21
|
+
/**
|
|
22
|
+
* @description Default comparer function for consumer and producer logs.
|
|
23
|
+
* @summary Sorts and compares consumer and producer logs to ensure they match.
|
|
24
|
+
* @param {LogStore} consumerData - The consumer logs.
|
|
25
|
+
* @param {LogStore} producerData - The producer logs.
|
|
26
|
+
* @return {Promise<ComparerResult>} The comparison result.
|
|
27
|
+
* @function defaultComparer
|
|
28
|
+
* @memberOf module:utils
|
|
29
|
+
*/
|
|
13
30
|
export const defaultComparer = async (consumerData, producerData) => {
|
|
14
31
|
const sortedConsumerData = Object.keys(consumerData)
|
|
15
32
|
.reduce((accum, key) => {
|
|
@@ -56,7 +73,25 @@ export const defaultComparer = async (consumerData, producerData) => {
|
|
|
56
73
|
producer: sortedProducerData,
|
|
57
74
|
};
|
|
58
75
|
};
|
|
76
|
+
/**
|
|
77
|
+
* @description Formats a timestamp into an ISO string.
|
|
78
|
+
* @summary Converts a numeric timestamp to an ISO 8601 string.
|
|
79
|
+
* @param {number} value - The timestamp to format.
|
|
80
|
+
* @return {string} The formatted date string.
|
|
81
|
+
* @function formatTimestamp
|
|
82
|
+
* @memberOf module:utils
|
|
83
|
+
*/
|
|
59
84
|
const formatTimestamp = (value) => new Date(value).toISOString();
|
|
85
|
+
/**
|
|
86
|
+
* @description Comparer function that reports results using TestReporter.
|
|
87
|
+
* @summary Compares logs and generates a report with tables and messages.
|
|
88
|
+
* @param {LogStore} consumerData - The consumer logs.
|
|
89
|
+
* @param {LogStore} producerData - The producer logs.
|
|
90
|
+
* @param {ReportingComparerOptions} [options] - Options for reporting.
|
|
91
|
+
* @return {Promise<ComparerResult>} The comparison result.
|
|
92
|
+
* @function reportingComparer
|
|
93
|
+
* @memberOf module:utils
|
|
94
|
+
*/
|
|
60
95
|
export const reportingComparer = async (consumerData, producerData, options) => {
|
|
61
96
|
const reporter = options?.reporter ??
|
|
62
97
|
new TestReporter(options?.testCase ?? "consumer-producer");
|
|
@@ -104,6 +139,15 @@ export const reportingComparer = async (consumerData, producerData, options) =>
|
|
|
104
139
|
throw error;
|
|
105
140
|
}
|
|
106
141
|
};
|
|
142
|
+
/**
|
|
143
|
+
* @class ConsumerRunner
|
|
144
|
+
* @description Runs a consumer process and manages producer child processes.
|
|
145
|
+
* @summary Orchestrates the execution of consumer and producer processes, collects logs, and compares results.
|
|
146
|
+
* @param {string} action - The action name.
|
|
147
|
+
* @param {ConsumerHandler} consumerHandler - The handler function for the consumer.
|
|
148
|
+
* @param {Comparer} [compareHandler] - Optional custom comparer function.
|
|
149
|
+
* @memberOf module:utils
|
|
150
|
+
*/
|
|
107
151
|
export class ConsumerRunner extends LoggedClass {
|
|
108
152
|
constructor(action, consumerHandler, compareHandler) {
|
|
109
153
|
super();
|
|
@@ -213,6 +257,40 @@ export class ConsumerRunner extends LoggedClass {
|
|
|
213
257
|
});
|
|
214
258
|
return this.waitForChildExit();
|
|
215
259
|
}
|
|
260
|
+
/**
|
|
261
|
+
* @description Runs the consumer and producer processes.
|
|
262
|
+
* @summary Starts the producer child processes and the consumer handler, then waits for completion and compares results.
|
|
263
|
+
* @param {number} count - The number of producers.
|
|
264
|
+
* @param {number} [timeout] - The timeout for producers.
|
|
265
|
+
* @param {number} times - The number of times to repeat.
|
|
266
|
+
* @param {boolean} [random] - Whether to use random timeouts.
|
|
267
|
+
* @return {Promise<ComparerResult>} The comparison result.
|
|
268
|
+
* @mermaid
|
|
269
|
+
* sequenceDiagram
|
|
270
|
+
* participant Runner as ConsumerRunner
|
|
271
|
+
* participant Child as ProducerChild
|
|
272
|
+
* participant Handler as ConsumerHandler
|
|
273
|
+
* participant Comparer as Comparer
|
|
274
|
+
* Runner->>Runner: reset()
|
|
275
|
+
* loop For each count
|
|
276
|
+
* Runner->>Child: fork()
|
|
277
|
+
* Runner->>Runner: Store child process
|
|
278
|
+
* end
|
|
279
|
+
* Runner->>Child: send(start message)
|
|
280
|
+
* loop For each message from Child
|
|
281
|
+
* Child->>Runner: message(action)
|
|
282
|
+
* Runner->>Runner: store producer log
|
|
283
|
+
* Runner->>Handler: call handler
|
|
284
|
+
* Handler-->>Runner: return
|
|
285
|
+
* Runner->>Runner: record consumer log
|
|
286
|
+
* Runner->>Runner: finalizeIfComplete()
|
|
287
|
+
* end
|
|
288
|
+
* alt Complete
|
|
289
|
+
* Runner->>Comparer: compare logs
|
|
290
|
+
* Comparer-->>Runner: return result
|
|
291
|
+
* Runner-->>Caller: resolve(result)
|
|
292
|
+
* end
|
|
293
|
+
*/
|
|
216
294
|
async run(count, timeout, times, random) {
|
|
217
295
|
this.reset();
|
|
218
296
|
this.expectedIterations = times;
|
|
@@ -322,4 +400,4 @@ export class ConsumerRunner extends LoggedClass {
|
|
|
322
400
|
});
|
|
323
401
|
}
|
|
324
402
|
}
|
|
325
|
-
//# sourceMappingURL=Consumer.js.map
|
|
403
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3VtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdHMvQ29uc3VtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLDBCQUF1QjtBQW1GOUM7Ozs7Ozs7R0FPRztBQUNILE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBWSxFQUFhLEVBQUU7SUFDNUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxBQUFELEVBQUcsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkQsT0FBTztRQUNMLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztRQUNsQyxLQUFLO1FBQ0wsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBYSxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxFQUFFO0lBQzVFLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDakQsTUFBTSxDQUFjLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9DLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENB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Q0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUMxQyxNQUFNLENBQUMsSUFBSSxDQUFDO29CQUNWLFVBQVUsRUFBRSxLQUFLO29CQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07b0JBQ25CLE9BQU87b0JBQ1AsS0FBSztvQkFDTCxNQUFNO2lCQUNQLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGlsZFByb2Nlc3MsIGZvcmsgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgTG9nZ2VkQ2xhc3MgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcbmltcG9ydCB7IFRlc3RSZXBvcnRlciB9IGZyb20gXCIuL1Rlc3RSZXBvcnRlclwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTdG9yZSBmb3IgbG9ncyBpbmRleGVkIGJ5IGlkZW50aWZpZXIuXG4gKiBAc3VtbWFyeSBBIHJlY29yZCB3aGVyZSBrZXlzIGFyZSBpZGVudGlmaWVycyBhbmQgdmFsdWVzIGFyZSBhcnJheXMgb2YgbG9nIHN0cmluZ3MuXG4gKiBAdHlwZWRlZiB7UmVjb3JkPG51bWJlciwgc3RyaW5nW10+fSBMb2dTdG9yZVxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG50eXBlIExvZ1N0b3JlID0gUmVjb3JkPG51bWJlciwgc3RyaW5nW10+O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTdHJ1Y3R1cmUgb2YgYSBwYXJzZWQgbG9nIGVudHJ5LlxuICogQHN1bW1hcnkgQ29udGFpbnMgdGltZXN0YW1wLCBjaGlsZCBpZGVudGlmaWVyLCBhbmQgYWN0aW9uLlxuICogQGludGVyZmFjZSBQYXJzZWRMb2dcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lc3RhbXAgLSBUaGUgdGltZXN0YW1wIG9mIHRoZSBsb2cuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2hpbGQgLSBUaGUgY2hpbGQgaWRlbnRpZmllci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb24gLSBUaGUgYWN0aW9uIHBlcmZvcm1lZC5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRMb2cge1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgY2hpbGQ6IHN0cmluZztcbiAgYWN0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlc3VsdCBvZiBhIGNvbXBhcmlzb24gYmV0d2VlbiBjb25zdW1lciBhbmQgcHJvZHVjZXIgbG9ncy5cbiAqIEBzdW1tYXJ5IENvbnRhaW5zIGFycmF5cyBvZiBwYXJzZWQgbG9ncyBmb3IgYm90aCBjb25zdW1lciBhbmQgcHJvZHVjZXIuXG4gKiBAaW50ZXJmYWNlIENvbXBhcmVyUmVzdWx0XG4gKiBAcHJvcGVydHkge1BhcnNlZExvZ1tdfSBjb25zdW1lciAtIFRoZSBwYXJzZWQgY29uc3VtZXIgbG9ncy5cbiAqIEBwcm9wZXJ0eSB7UGFyc2VkTG9nW119IHByb2R1Y2VyIC0gVGhlIHBhcnNlZCBwcm9kdWNlciBsb2dzLlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBhcmVyUmVzdWx0IHtcbiAgY29uc3VtZXI6IFBhcnNlZExvZ1tdO1xuICBwcm9kdWNlcjogUGFyc2VkTG9nW107XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZ1bmN0aW9uIHR5cGUgZm9yIGNvbXBhcmluZyBjb25zdW1lciBhbmQgcHJvZHVjZXIgZGF0YS5cbiAqIEBzdW1tYXJ5IENvbXBhcmVzIHR3byBMb2dTdG9yZXMgYW5kIHJldHVybnMgYSBQcm9taXNlIHJlc29sdmluZyB0byBDb21wYXJlclJlc3VsdC5cbiAqIEB0eXBlZGVmIHtmdW5jdGlvbihMb2dTdG9yZSwgTG9nU3RvcmUpOiBQcm9taXNlPENvbXBhcmVyUmVzdWx0Pn0gQ29tcGFyZXJcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xudHlwZSBDb21wYXJlciA9IChcbiAgY29uc3VtZXJEYXRhOiBMb2dTdG9yZSxcbiAgcHJvZHVjZXJEYXRhOiBMb2dTdG9yZVxuKSA9PiBQcm9taXNlPENvbXBhcmVyUmVzdWx0PjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRnVuY3Rpb24gdHlwZSBmb3IgaGFuZGxpbmcgY29uc3VtZXIgYWN0aW9ucy5cbiAqIEBzdW1tYXJ5IEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhbiBpZGVudGlmaWVyIGFuZCBvcHRpb25hbCBhcmd1bWVudHMsIHJldHVybmluZyBhIHJlc3VsdC5cbiAqIEB0eXBlZGVmIHtmdW5jdGlvbihudW1iZXIsIC4uLnVua25vd25bXSk6IHVua25vd24gfCBQcm9taXNlPHVua25vd24+fSBDb25zdW1lckhhbmRsZXJcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xudHlwZSBDb25zdW1lckhhbmRsZXIgPSAoXG4gIGlkZW50aWZpZXI6IG51bWJlcixcbiAgLi4uYXJnczogdW5rbm93bltdXG4pID0+IHVua25vd24gfCBQcm9taXNlPHVua25vd24+O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNZXNzYWdlIHN0cnVjdHVyZSBzZW50IHRvIHRoZSBwcm9kdWNlciBjaGlsZCBwcm9jZXNzLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgcHJvcGVydGllcyBvZiBhIG1lc3NhZ2Ugc2VudCB0byBjb250cm9sIHRoZSBwcm9kdWNlci5cbiAqIEBpbnRlcmZhY2UgUHJvZHVjZXJNZXNzYWdlXG4gKiBAcHJvcGVydHkge251bWJlcn0gaWRlbnRpZmllciAtIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBwcm9kdWNlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtyZXN1bHRdIC0gT3B0aW9uYWwgcmVzdWx0IGxvZ3MuXG4gKiBAcHJvcGVydHkge3Vua25vd25bXX0gW2FyZ3NdIC0gT3B0aW9uYWwgYXJndW1lbnRzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFjdGlvbiAtIFRoZSBhY3Rpb24gdG8gcGVyZm9ybS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbdGltZW91dF0gLSBPcHRpb25hbCB0aW1lb3V0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVzIC0gTnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3JhbmRvbV0gLSBXaGV0aGVyIHRvIHVzZSByYW5kb20gdGltZW91dHMuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmludGVyZmFjZSBQcm9kdWNlck1lc3NhZ2Uge1xuICBpZGVudGlmaWVyOiBudW1iZXI7XG4gIHJlc3VsdD86IHN0cmluZ1tdO1xuICBhcmdzPzogdW5rbm93bltdO1xuICBhY3Rpb246IHN0cmluZztcbiAgdGltZW91dD86IG51bWJlcjtcbiAgdGltZXM6IG51bWJlcjtcbiAgcmFuZG9tPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUGFyc2VzIGEgbG9nIHN0cmluZyBpbnRvIGEgUGFyc2VkTG9nIG9iamVjdC5cbiAqIEBzdW1tYXJ5IFNwbGl0cyB0aGUgbG9nIHN0cmluZyBieSBcIiAtIFwiIGFuZCBleHRyYWN0cyB0aW1lc3RhbXAsIGNoaWxkLCBhbmQgYWN0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgLSBUaGUgbG9nIHN0cmluZyB0byBwYXJzZS5cbiAqIEByZXR1cm4ge1BhcnNlZExvZ30gVGhlIHBhcnNlZCBsb2cgb2JqZWN0LlxuICogQGZ1bmN0aW9uIHBhcnNlRGF0YVxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5jb25zdCBwYXJzZURhdGEgPSAoZGF0YTogc3RyaW5nKTogUGFyc2VkTG9nID0+IHtcbiAgY29uc3QgW3RpbWVzdGFtcCwgLCBjaGlsZCwgYWN0aW9uXSA9IGRhdGEuc3BsaXQoXCIgLSBcIik7XG4gIHJldHVybiB7XG4gICAgdGltZXN0YW1wOiBwYXJzZUludCh0aW1lc3RhbXAsIDEwKSxcbiAgICBjaGlsZCxcbiAgICBhY3Rpb24sXG4gIH07XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IGNvbXBhcmVyIGZ1bmN0aW9uIGZvciBjb25zdW1lciBhbmQgcHJvZHVjZXIgbG9ncy5cbiAqIEBzdW1tYXJ5IFNvcnRzIGFuZCBjb21wYXJlcyBjb25zdW1lciBhbmQgcHJvZHVjZXIgbG9ncyB0byBlbnN1cmUgdGhleSBtYXRjaC5cbiAqIEBwYXJhbSB7TG9nU3RvcmV9IGNvbnN1bWVyRGF0YSAtIFRoZSBjb25zdW1lciBsb2dzLlxuICogQHBhcmFtIHtMb2dTdG9yZX0gcHJvZHVjZXJEYXRhIC0gVGhlIHByb2R1Y2VyIGxvZ3MuXG4gKiBAcmV0dXJuIHtQcm9taXNlPENvbXBhcmVyUmVzdWx0Pn0gVGhlIGNvbXBhcmlzb24gcmVzdWx0LlxuICogQGZ1bmN0aW9uIGRlZmF1bHRDb21wYXJlclxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdENvbXBhcmVyOiBDb21wYXJlciA9IGFzeW5jIChjb25zdW1lckRhdGEsIHByb2R1Y2VyRGF0YSkgPT4ge1xuICBjb25zdCBzb3J0ZWRDb25zdW1lckRhdGEgPSBPYmplY3Qua2V5cyhjb25zdW1lckRhdGEpXG4gICAgLnJlZHVjZTxQYXJzZWRMb2dbXT4oKGFjY3VtLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBOdW1iZXIoa2V5KTtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBjb25zdW1lckRhdGFbaWRlbnRpZmllcl0gPz8gW107XG4gICAgICBhY2N1bS5wdXNoKC4uLmVudHJpZXMubWFwKChlbnRyeSkgPT4gcGFyc2VEYXRhKGVudHJ5KSkpO1xuICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH0sIFtdKVxuICAgIC5zb3J0KChhLCBiKSA9PiBhLnRpbWVzdGFtcCAtIGIudGltZXN0YW1wKTtcblxuICBjb25zdCBzb3J0ZWRQcm9kdWNlckRhdGEgPSBPYmplY3Qua2V5cyhwcm9kdWNlckRhdGEpXG4gICAgLnJlZHVjZTxQYXJzZWRMb2dbXT4oKGFjY3VtLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSBOdW1iZXIoa2V5KTtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBwcm9kdWNlckRhdGFbaWRlbnRpZmllcl0gPz8gW107XG4gICAgICBhY2N1bS5wdXNoKC4uLmVudHJpZXMubWFwKChlbnRyeSkgPT4gcGFyc2VEYXRhKGVudHJ5KSkpO1xuICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH0sIFtdKVxuICAgIC5zb3J0KChhLCBiKSA9PiBhLnRpbWVzdGFtcCAtIGIudGltZXN0YW1wKTtcblxuICBpZiAoc29ydGVkUHJvZHVjZXJEYXRhLmxlbmd0aCAhPT0gc29ydGVkQ29uc3VtZXJEYXRhLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlByb2R1Y2VyIGRhdGEgYW5kIGNvbnN1bWVyIGRhdGEgZG9lcyBub3QgbWF0Y2ggaW4gbGVuZ3RoXCIpO1xuICB9XG5cbiAgbGV0IGNvdW50ZXIgPSAtMTtcbiAgY29uc3QgaXNNYXRjaGluZyA9IHNvcnRlZFByb2R1Y2VyRGF0YS5ldmVyeSgocHJvZHVjZXIsIGluZGV4KSA9PiB7XG4gICAgY291bnRlciA9IGluZGV4O1xuICAgIGNvbnN0IGNvbnN1bWVyID0gc29ydGVkQ29uc3VtZXJEYXRhW2luZGV4XTtcbiAgICByZXR1cm4gKFxuICAgICAgcHJvZHVjZXIuY2hpbGQgPT09IGNvbnN1bWVyLmNoaWxkICYmIHByb2R1Y2VyLmFjdGlvbiA9PT0gY29uc3VtZXIuYWN0aW9uXG4gICAgKTtcbiAgfSk7XG5cbiAgaWYgKCFpc01hdGNoaW5nKSB7XG4gICAgY29uc3QgZXJyb3JMaW5lcyA9IFtcbiAgICAgIGBQcm9kdWNlciBkYXRhIGFuZCBjb25zdW1lciBkYXRhIGRvIG5vdCBzb3J0IHRoZSBzYW1lIHdheSBhcyBvZiByZWNvcmQgJHtjb3VudGVyfTpgLFxuICAgICAgXCIgICAgfCAgICAgICAgICAgICBDT05TVU1FUiAgICAgICAgICAgIHwgICAgICAgICAgICAgIFBST0RVQ0VSICAgICAgICAgICAgfFwiLFxuICAgICAgXCIgICAgfCBpZCB8IGFjdGlvbiAgICB8IHRpbWVzdGFtcCAgICAgIHwgaWQgfCBhY3Rpb24gICAgfCB0aW1lc3RhbXAgICAgICAgfFwiLFxuICAgIF07XG5cbiAgICBzb3J0ZWRQcm9kdWNlckRhdGEuZm9yRWFjaCgocHJvZHVjZXIsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXggPCBjb3VudGVyIHx8IGluZGV4ID4gY291bnRlciArIDE1KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnN1bWVyID0gc29ydGVkQ29uc3VtZXJEYXRhW2luZGV4XTtcbiAgICAgIGVycm9yTGluZXMucHVzaChcbiAgICAgICAgYCAgJHtpbmRleCA8IDEwID8gYDAke2luZGV4fWAgOiBpbmRleH18ICAke2NvbnN1bWVyLmNoaWxkfSB8ICR7Y29uc3VtZXIuYWN0aW9ufSAgICB8ICR7Y29uc3VtZXIudGltZXN0YW1wfSAgfCAke3Byb2R1Y2VyLmNoaWxkfSAgfCAke3Byb2R1Y2VyLmFjdGlvbn0gICAgfCAke3Byb2R1Y2VyLnRpbWVzdGFtcH0gICB8YFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRocm93IG5ldyBFcnJvcihlcnJvckxpbmVzLmpvaW4oXCJcXG5cIikpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjb25zdW1lcjogc29ydGVkQ29uc3VtZXJEYXRhLFxuICAgIHByb2R1Y2VyOiBzb3J0ZWRQcm9kdWNlckRhdGEsXG4gIH07XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBPcHRpb25zIGZvciB0aGUgcmVwb3J0aW5nIGNvbXBhcmVyLlxuICogQHN1bW1hcnkgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgcmVwb3J0aW5nQ29tcGFyZXIgZnVuY3Rpb24uXG4gKiBAaW50ZXJmYWNlIFJlcG9ydGluZ0NvbXBhcmVyT3B0aW9uc1xuICogQHByb3BlcnR5IHtUZXN0UmVwb3J0ZXJ9IFtyZXBvcnRlcl0gLSBUaGUgdGVzdCByZXBvcnRlciBpbnN0YW5jZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdGVzdENhc2VdIC0gVGhlIHRlc3QgY2FzZSBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyZWZlcmVuY2VQcmVmaXhdIC0gVGhlIHByZWZpeCBmb3IgcmVwb3J0IHJlZmVyZW5jZXMuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0aW5nQ29tcGFyZXJPcHRpb25zIHtcbiAgcmVwb3J0ZXI/OiBUZXN0UmVwb3J0ZXI7XG4gIHRlc3RDYXNlPzogc3RyaW5nO1xuICByZWZlcmVuY2VQcmVmaXg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZvcm1hdHMgYSB0aW1lc3RhbXAgaW50byBhbiBJU08gc3RyaW5nLlxuICogQHN1bW1hcnkgQ29udmVydHMgYSBudW1lcmljIHRpbWVzdGFtcCB0byBhbiBJU08gODYwMSBzdHJpbmcuXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgdGltZXN0YW1wIHRvIGZvcm1hdC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZy5cbiAqIEBmdW5jdGlvbiBmb3JtYXRUaW1lc3RhbXBcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuY29uc3QgZm9ybWF0VGltZXN0YW1wID0gKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcgPT5cbiAgbmV3IERhdGUodmFsdWUpLnRvSVNPU3RyaW5nKCk7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbXBhcmVyIGZ1bmN0aW9uIHRoYXQgcmVwb3J0cyByZXN1bHRzIHVzaW5nIFRlc3RSZXBvcnRlci5cbiAqIEBzdW1tYXJ5IENvbXBhcmVzIGxvZ3MgYW5kIGdlbmVyYXRlcyBhIHJlcG9ydCB3aXRoIHRhYmxlcyBhbmQgbWVzc2FnZXMuXG4gKiBAcGFyYW0ge0xvZ1N0b3JlfSBjb25zdW1lckRhdGEgLSBUaGUgY29uc3VtZXIgbG9ncy5cbiAqIEBwYXJhbSB7TG9nU3RvcmV9IHByb2R1Y2VyRGF0YSAtIFRoZSBwcm9kdWNlciBsb2dzLlxuICogQHBhcmFtIHtSZXBvcnRpbmdDb21wYXJlck9wdGlvbnN9IFtvcHRpb25zXSAtIE9wdGlvbnMgZm9yIHJlcG9ydGluZy5cbiAqIEByZXR1cm4ge1Byb21pc2U8Q29tcGFyZXJSZXN1bHQ+fSBUaGUgY29tcGFyaXNvbiByZXN1bHQuXG4gKiBAZnVuY3Rpb24gcmVwb3J0aW5nQ29tcGFyZXJcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlcG9ydGluZ0NvbXBhcmVyID0gYXN5bmMgKFxuICBjb25zdW1lckRhdGE6IExvZ1N0b3JlLFxuICBwcm9kdWNlckRhdGE6IExvZ1N0b3JlLFxuICBvcHRpb25zPzogUmVwb3J0aW5nQ29tcGFyZXJPcHRpb25zXG4pOiBQcm9taXNlPENvbXBhcmVyUmVzdWx0PiA9PiB7XG4gIGNvbnN0IHJlcG9ydGVyID1cbiAgICBvcHRpb25zPy5yZXBvcnRlciA/P1xuICAgIG5ldyBUZXN0UmVwb3J0ZXIob3B0aW9ucz8udGVzdENhc2UgPz8gXCJjb25zdW1lci1wcm9kdWNlclwiKTtcbiAgY29uc3QgcmVmZXJlbmNlUHJlZml4ID0gb3B0aW9ucz8ucmVmZXJlbmNlUHJlZml4ID8/IFwiY29uc3VtZXItcHJvZHVjZXJcIjtcblxuICB0cnkge1xuICAgIGNvbnN0IGNvbXBhcmlzb24gPSBhd2FpdCBkZWZhdWx0Q29tcGFyZXIoY29uc3VtZXJEYXRhLCBwcm9kdWNlckRhdGEpO1xuXG4gICAgY29uc3Qgcm93cyA9IGNvbXBhcmlzb24uY29uc3VtZXIubWFwKChjb25zdW1lckVudHJ5LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcHJvZHVjZXJFbnRyeSA9IGNvbXBhcmlzb24ucHJvZHVjZXJbaW5kZXhdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgSW5kZXg6IGAke2luZGV4fWAsXG4gICAgICAgIFwiQ29uc3VtZXIgQ2hpbGRcIjogY29uc3VtZXJFbnRyeS5jaGlsZCxcbiAgICAgICAgXCJDb25zdW1lciBBY3Rpb25cIjogY29uc3VtZXJFbnRyeS5hY3Rpb24sXG4gICAgICAgIFwiQ29uc3VtZXIgVGltZXN0YW1wXCI6IGZvcm1hdFRpbWVzdGFtcChjb25zdW1lckVudHJ5LnRpbWVzdGFtcCksXG4gICAgICAgIFwiUHJvZHVjZXIgQ2hpbGRcIjogcHJvZHVjZXJFbnRyeT8uY2hpbGQgPz8gXCJOL0FcIixcbiAgICAgICAgXCJQcm9kdWNlciBBY3Rpb25cIjogcHJvZHVjZXJFbnRyeT8uYWN0aW9uID8/IFwiTi9BXCIsXG4gICAgICAgIFwiUHJvZHVjZXIgVGltZXN0YW1wXCI6IHByb2R1Y2VyRW50cnlcbiAgICAgICAgICA/IGZvcm1hdFRpbWVzdGFtcChwcm9kdWNlckVudHJ5LnRpbWVzdGFtcClcbiAgICAgICAgICA6IFwiTi9BXCIsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICAgIHJlcG9ydGVyLnJlcG9ydE1lc3NhZ2UoXG4gICAgICAgIGAke3JlZmVyZW5jZVByZWZpeH0tY29tcGFyaXNvbmAsXG4gICAgICAgIGBDb25zdW1lciBhbmQgcHJvZHVjZXIgbG9ncyBtYXRjaGVkICgke2NvbXBhcmlzb24uY29uc3VtZXIubGVuZ3RofSBlbnRyaWVzKS5gXG4gICAgICApLFxuICAgICAgcmVwb3J0ZXIucmVwb3J0VGFibGUoYCR7cmVmZXJlbmNlUHJlZml4fS1sb2dzYCwge1xuICAgICAgICBoZWFkZXJzOiBbXG4gICAgICAgICAgXCJJbmRleFwiLFxuICAgICAgICAgIFwiQ29uc3VtZXIgQ2hpbGRcIixcbiAgICAgICAgICBcIkNvbnN1bWVyIEFjdGlvblwiLFxuICAgICAgICAgIFwiQ29uc3VtZXIgVGltZXN0YW1wXCIsXG4gICAgICAgICAgXCJQcm9kdWNlciBDaGlsZFwiLFxuICAgICAgICAgIFwiUHJvZHVjZXIgQWN0aW9uXCIsXG4gICAgICAgICAgXCJQcm9kdWNlciBUaW1lc3RhbXBcIixcbiAgICAgICAgXSxcbiAgICAgICAgcm93cyxcbiAgICAgIH0pLFxuICAgIF0pO1xuXG4gICAgcmV0dXJuIGNvbXBhcmlzb247XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciA/PyBcIlVua25vd24gZXJyb3JcIik7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgICAgcmVwb3J0ZXIucmVwb3J0TWVzc2FnZShgJHtyZWZlcmVuY2VQcmVmaXh9LW1pc21hdGNoYCwgbWVzc2FnZSksXG4gICAgICByZXBvcnRlci5yZXBvcnRPYmplY3QoYCR7cmVmZXJlbmNlUHJlZml4fS1jb25zdW1lcmAsIGNvbnN1bWVyRGF0YSksXG4gICAgICByZXBvcnRlci5yZXBvcnRPYmplY3QoYCR7cmVmZXJlbmNlUHJlZml4fS1wcm9kdWNlcmAsIHByb2R1Y2VyRGF0YSksXG4gICAgXSk7XG5cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuLyoqXG4gKiBAY2xhc3MgQ29uc3VtZXJSdW5uZXJcbiAqIEBkZXNjcmlwdGlvbiBSdW5zIGEgY29uc3VtZXIgcHJvY2VzcyBhbmQgbWFuYWdlcyBwcm9kdWNlciBjaGlsZCBwcm9jZXNzZXMuXG4gKiBAc3VtbWFyeSBPcmNoZXN0cmF0ZXMgdGhlIGV4ZWN1dGlvbiBvZiBjb25zdW1lciBhbmQgcHJvZHVjZXIgcHJvY2Vzc2VzLCBjb2xsZWN0cyBsb2dzLCBhbmQgY29tcGFyZXMgcmVzdWx0cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gLSBUaGUgYWN0aW9uIG5hbWUuXG4gKiBAcGFyYW0ge0NvbnN1bWVySGFuZGxlcn0gY29uc3VtZXJIYW5kbGVyIC0gVGhlIGhhbmRsZXIgZnVuY3Rpb24gZm9yIHRoZSBjb25zdW1lci5cbiAqIEBwYXJhbSB7Q29tcGFyZXJ9IFtjb21wYXJlSGFuZGxlcl0gLSBPcHRpb25hbCBjdXN0b20gY29tcGFyZXIgZnVuY3Rpb24uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25zdW1lclJ1bm5lciBleHRlbmRzIExvZ2dlZENsYXNzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3Rpb246IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVyOiBDb25zdW1lckhhbmRsZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tcGFyZXJIYW5kbGU6IENvbXBhcmVyO1xuICBwcml2YXRlIGZvcmtlZENhY2hlOiBDaGlsZFByb2Nlc3NbXSB8IHVuZGVmaW5lZCA9IFtdO1xuICBwcml2YXRlIGNvbnN1bWVyUmVzdWx0czogTG9nU3RvcmUgPSB7fTtcbiAgcHJpdmF0ZSBwcm9kdWNlclJlc3VsdHM6IExvZ1N0b3JlID0ge307XG4gIHByaXZhdGUgY2hpbGRFeGl0UHJvbWlzZXM6IEFycmF5PFByb21pc2U8dm9pZD4+ID0gW107XG4gIHByaXZhdGUgY29tcGxldGlvblRyaWdnZXJlZCA9IGZhbHNlO1xuICBwcml2YXRlIHByb2R1Y2VyQ29tcGxldGlvbiA9IDA7XG4gIHByaXZhdGUgY29uc3VtZXJDb21wbGV0aW9uID0gMDtcbiAgcHJpdmF0ZSBleHBlY3RlZEl0ZXJhdGlvbnMgPSAwO1xuICBwcml2YXRlIGFjdGl2ZUhhbmRsZXJzID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBhY3Rpb246IHN0cmluZyxcbiAgICBjb25zdW1lckhhbmRsZXI6IENvbnN1bWVySGFuZGxlcixcbiAgICBjb21wYXJlSGFuZGxlcj86IENvbXBhcmVyXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XG4gICAgdGhpcy5oYW5kbGVyID0gY29uc3VtZXJIYW5kbGVyO1xuICAgIHRoaXMuY29tcGFyZXJIYW5kbGUgPSBjb21wYXJlSGFuZGxlciA/PyBkZWZhdWx0Q29tcGFyZXI7XG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcmtlZENhY2hlID0gW107XG4gICAgdGhpcy5jb25zdW1lclJlc3VsdHMgPSB7fTtcbiAgICB0aGlzLnByb2R1Y2VyUmVzdWx0cyA9IHt9O1xuICAgIHRoaXMuY29tcGxldGlvblRyaWdnZXJlZCA9IGZhbHNlO1xuICAgIHRoaXMuY2hpbGRFeGl0UHJvbWlzZXMgPSBbXTtcbiAgICB0aGlzLmFjdGl2ZUhhbmRsZXJzID0gMDtcbiAgICB0aGlzLnByb2R1Y2VyQ29tcGxldGlvbiA9IDA7XG4gICAgdGhpcy5jb25zdW1lckNvbXBsZXRpb24gPSAwO1xuICAgIHRoaXMuZXhwZWN0ZWRJdGVyYXRpb25zID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgd2FpdEZvckNoaWxkRXhpdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2hpbGRFeGl0UHJvbWlzZXM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBjb25zdCBleGl0cyA9IFsuLi50aGlzLmNoaWxkRXhpdFByb21pc2VzXTtcbiAgICB0aGlzLmNoaWxkRXhpdFByb21pc2VzID0gW107XG4gICAgcmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChleGl0cykudGhlbigoKSA9PiB2b2lkIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9yZShcbiAgICBpZGVudGlmaWVyOiBudW1iZXIsXG4gICAgYWN0aW9uOiBzdHJpbmcsXG4gICAgdGltZW91dDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgIHRpbWVzOiBudW1iZXIsXG4gICAgY291bnQ6IG51bWJlcixcbiAgICByYW5kb20/OiBib29sZWFuXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGxvZ1BhcnRzOiBBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiA9IFtcbiAgICAgIERhdGUubm93KCksXG4gICAgICBcIlBST0RVQ0VSXCIsXG4gICAgICBpZGVudGlmaWVyLFxuICAgICAgYWN0aW9uLFxuICAgIF07XG4gICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgIGxvZ1BhcnRzLnB1c2godGltZW91dCk7XG4gICAgfVxuICAgIGlmICh0aW1lcyAmJiBjb3VudCkge1xuICAgICAgbG9nUGFydHMucHVzaChgJHtjb3VudH0vJHt0aW1lc31gLCByYW5kb20gPz8gZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZyA9IGxvZ1BhcnRzLmpvaW4oXCIgLSBcIik7XG4gICAgaWYgKCF0aGlzLnByb2R1Y2VyUmVzdWx0c1tpZGVudGlmaWVyXSkge1xuICAgICAgdGhpcy5wcm9kdWNlclJlc3VsdHNbaWRlbnRpZmllcl0gPSBbXTtcbiAgICB9XG4gICAgY29uc3QgbG9ncyA9IHRoaXMucHJvZHVjZXJSZXN1bHRzW2lkZW50aWZpZXJdO1xuICAgIGxvZ3MucHVzaChsb2cpO1xuICAgIGNvbnN0IHRvdGFsVGltZXMgPSB0aW1lcyA/PyB0aGlzLmV4cGVjdGVkSXRlcmF0aW9ucztcbiAgICBpZiAodG90YWxUaW1lcyA+IDAgJiYgbG9ncy5sZW5ndGggPT09IHRvdGFsVGltZXMpIHtcbiAgICAgIHRoaXMucHJvZHVjZXJDb21wbGV0aW9uICs9IDE7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRDb25zdW1lcihpZGVudGlmaWVyOiBudW1iZXIsIHRpbWVzPzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgbG9nUGFydHM6IEFycmF5PHN0cmluZyB8IG51bWJlcj4gPSBbXG4gICAgICBEYXRlLm5vdygpLFxuICAgICAgXCJDT05TVU1FUlwiLFxuICAgICAgaWRlbnRpZmllcixcbiAgICAgIHRoaXMuYWN0aW9uLFxuICAgIF07XG4gICAgY29uc3QgbG9nID0gbG9nUGFydHMuam9pbihcIiAtIFwiKTtcblxuICAgIGlmICghdGhpcy5jb25zdW1lclJlc3VsdHNbaWRlbnRpZmllcl0pIHtcbiAgICAgIHRoaXMuY29uc3VtZXJSZXN1bHRzW2lkZW50aWZpZXJdID0gW107XG4gICAgfVxuICAgIGNvbnN0IGxvZ3MgPSB0aGlzLmNvbnN1bWVyUmVzdWx0c1tpZGVudGlmaWVyXTtcbiAgICBsb2dzLnB1c2gobG9nKTtcbiAgICBjb25zdCB0b3RhbFRpbWVzID0gdGltZXMgPz8gdGhpcy5leHBlY3RlZEl0ZXJhdGlvbnM7XG4gICAgaWYgKHRvdGFsVGltZXMgPiAwICYmIGxvZ3MubGVuZ3RoID09PSB0b3RhbFRpbWVzKSB7XG4gICAgICB0aGlzLmNvbnN1bWVyQ29tcGxldGlvbiArPSAxO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNQcm9kdWNlckNvbXBsZXRlKGNvdW50OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9kdWNlckNvbXBsZXRpb24gPj0gY291bnQ7XG4gIH1cblxuICBwcml2YXRlIGlzQ29uc3VtZXJDb21wbGV0ZShjb3VudDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3VtZXJDb21wbGV0aW9uID49IGNvdW50O1xuICB9XG5cbiAgcHJpdmF0ZSB0ZXJtaW5hdGVDaGlsZHJlbihmb3JjZUtpbGwgPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5mb3JrZWRDYWNoZSkge1xuICAgICAgcmV0dXJuIHRoaXMud2FpdEZvckNoaWxkRXhpdCgpO1xuICAgIH1cbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmZvcmtlZENhY2hlO1xuICAgIHRoaXMuZm9ya2VkQ2FjaGUgPSB1bmRlZmluZWQ7XG4gICAgY2FjaGVkLmZvckVhY2goKGZvcmtlZCwgaW5kZXgpID0+IHtcbiAgICAgIGlmICghZm9ya2VkLmNvbm5lY3RlZCAmJiAhZm9yY2VLaWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvcmtlZC5zZW5kKHtcbiAgICAgICAgICBpZGVudGlmaWVyOiBpbmRleCxcbiAgICAgICAgICB0ZXJtaW5hdGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElQQyBjaGFubmVsIGFscmVhZHkgY2xvc2VkOyBub3RoaW5nIGVsc2UgdG8gZG8uXG4gICAgICB9XG4gICAgICBpZiAoZm9yY2VLaWxsICYmICFmb3JrZWQua2lsbGVkKSB7XG4gICAgICAgIGZvcmtlZC5raWxsKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMud2FpdEZvckNoaWxkRXhpdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSdW5zIHRoZSBjb25zdW1lciBhbmQgcHJvZHVjZXIgcHJvY2Vzc2VzLlxuICAgKiBAc3VtbWFyeSBTdGFydHMgdGhlIHByb2R1Y2VyIGNoaWxkIHByb2Nlc3NlcyBhbmQgdGhlIGNvbnN1bWVyIGhhbmRsZXIsIHRoZW4gd2FpdHMgZm9yIGNvbXBsZXRpb24gYW5kIGNvbXBhcmVzIHJlc3VsdHMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudCAtIFRoZSBudW1iZXIgb2YgcHJvZHVjZXJzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3RpbWVvdXRdIC0gVGhlIHRpbWVvdXQgZm9yIHByb2R1Y2Vycy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVzIC0gVGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JhbmRvbV0gLSBXaGV0aGVyIHRvIHVzZSByYW5kb20gdGltZW91dHMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q29tcGFyZXJSZXN1bHQ+fSBUaGUgY29tcGFyaXNvbiByZXN1bHQuXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFJ1bm5lciBhcyBDb25zdW1lclJ1bm5lclxuICAgKiAgIHBhcnRpY2lwYW50IENoaWxkIGFzIFByb2R1Y2VyQ2hpbGRcbiAgICogICBwYXJ0aWNpcGFudCBIYW5kbGVyIGFzIENvbnN1bWVySGFuZGxlclxuICAgKiAgIHBhcnRpY2lwYW50IENvbXBhcmVyIGFzIENvbXBhcmVyXG4gICAqICAgUnVubmVyLT4+UnVubmVyOiByZXNldCgpXG4gICAqICAgbG9vcCBGb3IgZWFjaCBjb3VudFxuICAgKiAgICAgUnVubmVyLT4+Q2hpbGQ6IGZvcmsoKVxuICAgKiAgICAgUnVubmVyLT4+UnVubmVyOiBTdG9yZSBjaGlsZCBwcm9jZXNzXG4gICAqICAgZW5kXG4gICAqICAgUnVubmVyLT4+Q2hpbGQ6IHNlbmQoc3RhcnQgbWVzc2FnZSlcbiAgICogICBsb29wIEZvciBlYWNoIG1lc3NhZ2UgZnJvbSBDaGlsZFxuICAgKiAgICAgQ2hpbGQtPj5SdW5uZXI6IG1lc3NhZ2UoYWN0aW9uKVxuICAgKiAgICAgUnVubmVyLT4+UnVubmVyOiBzdG9yZSBwcm9kdWNlciBsb2dcbiAgICogICAgIFJ1bm5lci0+PkhhbmRsZXI6IGNhbGwgaGFuZGxlclxuICAgKiAgICAgSGFuZGxlci0tPj5SdW5uZXI6IHJldHVyblxuICAgKiAgICAgUnVubmVyLT4+UnVubmVyOiByZWNvcmQgY29uc3VtZXIgbG9nXG4gICAqICAgICBSdW5uZXItPj5SdW5uZXI6IGZpbmFsaXplSWZDb21wbGV0ZSgpXG4gICAqICAgZW5kXG4gICAqICAgYWx0IENvbXBsZXRlXG4gICAqICAgICBSdW5uZXItPj5Db21wYXJlcjogY29tcGFyZSBsb2dzXG4gICAqICAgICBDb21wYXJlci0tPj5SdW5uZXI6IHJldHVybiByZXN1bHRcbiAgICogICAgIFJ1bm5lci0tPj5DYWxsZXI6IHJlc29sdmUocmVzdWx0KVxuICAgKiAgIGVuZFxuICAgKi9cbiAgYXN5bmMgcnVuKFxuICAgIGNvdW50OiBudW1iZXIsXG4gICAgdGltZW91dDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgIHRpbWVzOiBudW1iZXIsXG4gICAgcmFuZG9tOiBib29sZWFuIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8Q29tcGFyZXJSZXN1bHQ+IHtcbiAgICB0aGlzLnJlc2V0KCk7XG4gICAgdGhpcy5leHBlY3RlZEl0ZXJhdGlvbnMgPSB0aW1lcztcbiAgICBjb25zdCBjaGlsZFBhdGggPSBqb2luKF9fZGlybmFtZSwgXCJQcm9kdWNlckNoaWxkUHJvY2Vzcy5janNcIik7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8Q29tcGFyZXJSZXN1bHQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHNuYXBzaG90U3RhdGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1bW1hcml6ZSA9IChyZWNvcmRzOiBMb2dTdG9yZSkgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyhyZWNvcmRzKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4oKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHJlY29yZHNbTnVtYmVyKGtleSldPy5sZW5ndGggPz8gMDtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfSwge30pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByb2R1Y2Vyczogc3VtbWFyaXplKHRoaXMucHJvZHVjZXJSZXN1bHRzKSxcbiAgICAgICAgICBjb25zdW1lcnM6IHN1bW1hcml6ZSh0aGlzLmNvbnN1bWVyUmVzdWx0cyksXG4gICAgICAgICAgYWN0aXZlSGFuZGxlcnM6IHRoaXMuYWN0aXZlSGFuZGxlcnMsXG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBoYW5kbGVFcnJvciA9IChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICBpZiAodGhpcy5jb21wbGV0aW9uVHJpZ2dlcmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tcGxldGlvblRyaWdnZXJlZCA9IHRydWU7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSh0aGlzLnRlcm1pbmF0ZUNoaWxkcmVuKHRydWUpKS5maW5hbGx5KCgpID0+XG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICApO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgZmluYWxpemVJZkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jb21wbGV0aW9uVHJpZ2dlcmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5pc1Byb2R1Y2VyQ29tcGxldGUoY291bnQpIHx8XG4gICAgICAgICAgIXRoaXMuaXNDb25zdW1lckNvbXBsZXRlKGNvdW50KSB8fFxuICAgICAgICAgIHRoaXMuYWN0aXZlSGFuZGxlcnMgPiAwXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29tcGxldGlvblRyaWdnZXJlZCA9IHRydWU7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5ERUJVR19DT05TVU1FUl9SVU5ORVIgPT09IFwiMVwiKSB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhcIkNvbnN1bWVyUnVubmVyIGZpbmFsaXplIHN0YXRlXCIsIHNuYXBzaG90U3RhdGUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGNvbXBhcmlzb25Qcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgdGhpcy5jb21wYXJlckhhbmRsZSh0aGlzLmNvbnN1bWVyUmVzdWx0cywgdGhpcy5wcm9kdWNlclJlc3VsdHMpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBQcm9taXNlLmFsbChbY29tcGFyaXNvblByb21pc2UsIHRoaXMud2FpdEZvckNoaWxkRXhpdCgpXSlcbiAgICAgICAgICAgIC50aGVuKGFzeW5jIChbY29tcGFyaXNvbl0pID0+IHtcbiAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmVEZWxheSkgPT4gc2V0SW1tZWRpYXRlKHJlc29sdmVEZWxheSkpO1xuICAgICAgICAgICAgICByZXNvbHZlKGNvbXBhcmlzb24pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAobGV0IGlkZW50aWZpZXIgPSAxOyBpZGVudGlmaWVyIDwgY291bnQgKyAxOyBpZGVudGlmaWVyICs9IDEpIHtcbiAgICAgICAgY29uc3QgZm9ya2VkID0gZm9yayhjaGlsZFBhdGgpO1xuICAgICAgICB0aGlzLmZvcmtlZENhY2hlPy5wdXNoKGZvcmtlZCk7XG4gICAgICAgIHRoaXMuY2hpbGRFeGl0UHJvbWlzZXM/LnB1c2goXG4gICAgICAgICAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmVDaGlsZCkgPT4ge1xuICAgICAgICAgICAgZm9ya2VkLm9uY2UoXCJleGl0XCIsICgpID0+IHJlc29sdmVDaGlsZCgpKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGZvcmtlZC5vbihcImVycm9yXCIsIGhhbmRsZUVycm9yKTtcblxuICAgICAgICBmb3JrZWQub24oXCJtZXNzYWdlXCIsIGFzeW5jIChtZXNzYWdlOiBQcm9kdWNlck1lc3NhZ2UpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5jb21wbGV0aW9uVHJpZ2dlcmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGNoaWxkSWQsXG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgdGltZW91dDogY2hpbGRUaW1lb3V0LFxuICAgICAgICAgICAgdGltZXM6IGNoaWxkVGltZXMsXG4gICAgICAgICAgICByYW5kb206IGNoaWxkUmFuZG9tLFxuICAgICAgICAgIH0gPSBtZXNzYWdlO1xuXG4gICAgICAgICAgdGhpcy5hY3RpdmVIYW5kbGVycyArPSAxO1xuICAgICAgICAgIGxldCBoYW5kbGVyRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52LkRFQlVHX0NPTlNVTUVSX1JVTk5FUiA9PT0gXCIxXCIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJDb25zdW1lclJ1bm5lciBtZXNzYWdlOnN0YXJ0XCIsIHtcbiAgICAgICAgICAgICAgY2hpbGRJZCxcbiAgICAgICAgICAgICAgcHJvZHVjZXJDb3VudDogdGhpcy5wcm9kdWNlclJlc3VsdHNbY2hpbGRJZF0/Lmxlbmd0aCA/PyAwLFxuICAgICAgICAgICAgICBjb25zdW1lckNvdW50OiB0aGlzLmNvbnN1bWVyUmVzdWx0c1tjaGlsZElkXT8ubGVuZ3RoID8/IDAsXG4gICAgICAgICAgICAgIGFjdGl2ZUhhbmRsZXJzOiB0aGlzLmFjdGl2ZUhhbmRsZXJzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlKFxuICAgICAgICAgICAgICBjaGlsZElkLFxuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNoaWxkVGltZW91dCxcbiAgICAgICAgICAgICAgY2hpbGRUaW1lcyxcbiAgICAgICAgICAgICAgY291bnQsXG4gICAgICAgICAgICAgIGNoaWxkUmFuZG9tXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlckFyZ3MgPSBBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IFtdO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKHRoaXMuaGFuZGxlcihjaGlsZElkLCAuLi5oYW5kbGVyQXJncykpO1xuXG4gICAgICAgICAgICB0aGlzLnJlY29yZENvbnN1bWVyKGNoaWxkSWQsIGNoaWxkVGltZXMgPz8gdGltZXMpO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52LkRFQlVHX0NPTlNVTUVSX1JVTk5FUiA9PT0gXCIxXCIpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhcIkNvbnN1bWVyUnVubmVyIG1lc3NhZ2U6Y29tcGxldGVcIiwge1xuICAgICAgICAgICAgICAgIGNoaWxkSWQsXG4gICAgICAgICAgICAgICAgcHJvZHVjZXJDb3VudDogdGhpcy5wcm9kdWNlclJlc3VsdHNbY2hpbGRJZF0/Lmxlbmd0aCA/PyAwLFxuICAgICAgICAgICAgICAgIGNvbnN1bWVyQ291bnQ6IHRoaXMuY29uc3VtZXJSZXN1bHRzW2NoaWxkSWRdPy5sZW5ndGggPz8gMCxcbiAgICAgICAgICAgICAgICBhY3RpdmVIYW5kbGVyczogdGhpcy5hY3RpdmVIYW5kbGVycyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGhhbmRsZXJGYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUhhbmRsZXJzID0gTWF0aC5tYXgoMCwgdGhpcy5hY3RpdmVIYW5kbGVycyAtIDEpO1xuICAgICAgICAgICAgaWYgKCFoYW5kbGVyRmFpbGVkKSB7XG4gICAgICAgICAgICAgIGZpbmFsaXplSWZDb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZm9ya2VkQ2FjaGU/LmZvckVhY2goKGZvcmtlZCwgaW5kZXgpID0+IHtcbiAgICAgICAgZm9ya2VkLnNlbmQoe1xuICAgICAgICAgIGlkZW50aWZpZXI6IGluZGV4LFxuICAgICAgICAgIGFjdGlvbjogdGhpcy5hY3Rpb24sXG4gICAgICAgICAgdGltZW91dCxcbiAgICAgICAgICB0aW1lcyxcbiAgICAgICAgICByYW5kb20sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -63,4 +63,4 @@ process.on("message", (args) => {
|
|
|
63
63
|
};
|
|
64
64
|
iterator();
|
|
65
65
|
});
|
|
66
|
-
//# sourceMappingURL=
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvZHVjZXJDaGlsZFByb2Nlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdHMvUHJvZHVjZXJDaGlsZFByb2Nlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQWtCQSxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7QUFFekIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxVQUFtQixFQUFFLEVBQUU7SUFDOUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQixPQUFPO0lBQ1QsQ0FBQztJQUNELFlBQVksR0FBRyxJQUFJLENBQUM7SUFDcEIsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUNELFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsQ0FBQyxDQUFDO0FBRUYsT0FBTyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFtQixFQUFFLEVBQUU7SUFDNUMsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBQzVCLE1BQU0sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBQyxHQUFHLElBQUksQ0FBQztJQUVyRSxNQUFNLElBQUksR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO1FBQzdCLE1BQU0sUUFBUSxHQUFxQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hHLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLEtBQUssSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNuQixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLEtBQUssRUFBRSxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sUUFBUSxHQUFxQixFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQztRQUNoRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDNUIsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUVELE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QixJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixlQUFlLEVBQUUsQ0FBQztRQUNwQixDQUFDO2FBQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xCLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRixJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2QsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xGLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNaLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUMsQ0FBQztJQUVGLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztJQUVwQixNQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUU7UUFDcEIsTUFBTSxjQUFjLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDcEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLFdBQVcsSUFBSSxDQUFDLENBQUM7WUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xCLElBQUksV0FBVyxHQUFHLEtBQUssRUFBRSxDQUFDO2dCQUN4QixRQUFRLEVBQUUsQ0FBQztZQUNiLENBQUM7UUFDSCxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDO0lBRUYsUUFBUSxFQUFFLENBQUM7QUFDYixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbInR5cGUgUGFyZW50TWVzc2FnZSA9IHtcbiAgaWRlbnRpZmllcjogbnVtYmVyO1xuICBhY3Rpb246IHN0cmluZztcbiAgdGltZW91dD86IG51bWJlcjtcbiAgdGltZXM6IG51bWJlcjtcbiAgcmFuZG9tPzogYm9vbGVhbjtcbiAgdGVybWluYXRlPzogYm9vbGVhbjtcbn07XG5cbnR5cGUgUHJvZHVjZXJSZXNwb25zZSA9IHtcbiAgaWRlbnRpZmllcjogbnVtYmVyO1xuICBhY3Rpb246IHN0cmluZztcbiAgdGltZW91dD86IG51bWJlcjtcbiAgdGltZXM6IG51bWJlcjtcbiAgcmFuZG9tPzogYm9vbGVhbjtcbiAgcmVzdWx0Pzogc3RyaW5nW107XG59O1xuXG5sZXQgc2h1dHRpbmdEb3duID0gZmFsc2U7XG5cbmNvbnN0IGNvbXBsZXRlQW5kRXhpdCA9IChsb2dNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gIGlmIChzaHV0dGluZ0Rvd24pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgc2h1dHRpbmdEb3duID0gdHJ1ZTtcbiAgaWYgKGxvZ01lc3NhZ2UpIHtcbiAgICBjb25zb2xlLmxvZyhsb2dNZXNzYWdlKTtcbiAgfVxuICBzZXRJbW1lZGlhdGUoKCkgPT4gcHJvY2Vzcy5leGl0KDApKTtcbn07XG5cbnByb2Nlc3Mub24oXCJtZXNzYWdlXCIsIChhcmdzOiBQYXJlbnRNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qge2lkZW50aWZpZXIsIGFjdGlvbiwgdGltZW91dCwgdGltZXMsIHJhbmRvbSwgdGVybWluYXRlfSA9IGFyZ3M7XG5cbiAgY29uc3QgdGljayA9IChjb3VudDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbG9nUGFydHM6IEFycmF5PHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+ID0gW0RhdGUubm93KCksICdQUk9EVUNFUicsIGlkZW50aWZpZXIsIGFjdGlvbl07XG4gICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgIGxvZ1BhcnRzLnB1c2godGltZW91dCk7XG4gICAgfVxuICAgIGlmICh0aW1lcyAmJiBjb3VudCkge1xuICAgICAgbG9nUGFydHMucHVzaChgJHtjb3VudH0vJHt0aW1lc31gLCByYW5kb20gPz8gZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZyA9IGxvZ1BhcnRzLmpvaW4oJyAtICcpO1xuICAgIHJlc3VsdC5wdXNoKGxvZyk7XG5cbiAgICBjb25zdCByZXNwb25zZTogUHJvZHVjZXJSZXNwb25zZSA9IHtpZGVudGlmaWVyLCBhY3Rpb24sIHRpbWVvdXQsIHRpbWVzLCByYW5kb219O1xuICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSB0aW1lcykge1xuICAgICAgcmVzcG9uc2UucmVzdWx0ID0gWy4uLnJlc3VsdF07XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5zZW5kPy4ocmVzcG9uc2UpO1xuICAgIGlmIChyZXNwb25zZS5yZXN1bHQpIHtcbiAgICAgIGNvbXBsZXRlQW5kRXhpdCgpO1xuICAgIH0gZWxzZSBpZiAoIXRpbWVzKSB7XG4gICAgICBjb21wbGV0ZUFuZEV4aXQoKTtcbiAgICB9XG4gIH07XG5cbiAgaWYgKHRlcm1pbmF0ZSkge1xuICAgIGNvbnN0IGxvZyA9IFtEYXRlLm5vdygpLCBcIlBST0RVQ0VSXCIsIGlkZW50aWZpZXIsIGFjdGlvbiwgXCJRdWl0dGluZyFcIl0uam9pbihcIiAtIFwiKTtcbiAgICBjb21wbGV0ZUFuZEV4aXQobG9nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIXRpbWVvdXQpIHtcbiAgICB0aWNrKHRpbWVzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBnZXRUaW1lb3V0ID0gKCkgPT4ge1xuICAgIGlmICghcmFuZG9tKSB7XG4gICAgICByZXR1cm4gdGltZW91dDtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRpbWVvdXQpO1xuICB9O1xuXG4gIGxldCBhY3Rpb25Db3VudCA9IDA7XG5cbiAgY29uc3QgaXRlcmF0b3IgPSAoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudFRpbWVvdXQgPSBnZXRUaW1lb3V0KCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBhY3Rpb25Db3VudCArPSAxO1xuICAgICAgdGljayhhY3Rpb25Db3VudCk7XG4gICAgICBpZiAoYWN0aW9uQ291bnQgPCB0aW1lcykge1xuICAgICAgICBpdGVyYXRvcigpO1xuICAgICAgfVxuICAgIH0sIGN1cnJlbnRUaW1lb3V0KTtcbiAgfTtcblxuICBpdGVyYXRvcigpO1xufSk7XG4iXX0=
|
|
@@ -121,6 +121,9 @@ export declare class TestReporter {
|
|
|
121
121
|
* @return {Promise<void>} Promise that resolves when helpers are imported
|
|
122
122
|
*/
|
|
123
123
|
private importHelpers;
|
|
124
|
+
private getJestHtmlReportersTempDir;
|
|
125
|
+
private ensureJestHtmlReportersTempDirs;
|
|
126
|
+
private overrideJestHtmlReportersTempPaths;
|
|
124
127
|
/**
|
|
125
128
|
* @description Reports a message to the test report
|
|
126
129
|
* @summary Adds a formatted message to the test report with an optional title
|
|
@@ -101,13 +101,31 @@ export class TestReporter {
|
|
|
101
101
|
* @return {Promise<void>} Promise that resolves when helpers are imported
|
|
102
102
|
*/
|
|
103
103
|
async importHelpers() {
|
|
104
|
+
this.ensureJestHtmlReportersTempDirs();
|
|
104
105
|
this.deps = await installIfNotAvailable([dependencies[0]], this.deps);
|
|
105
106
|
// if (!process.env[JestReportersTempPathEnvKey])
|
|
106
107
|
// process.env[JestReportersTempPathEnvKey] = './workdocs/reports';
|
|
107
|
-
const
|
|
108
|
+
const helper = await normalizeImport(import(`${dependencies[0]}/helper`));
|
|
109
|
+
const { addMsg, addAttach } = helper;
|
|
110
|
+
this.overrideJestHtmlReportersTempPaths(helper);
|
|
108
111
|
TestReporter.addMsgFunction = addMsg;
|
|
109
112
|
TestReporter.addAttachFunction = addAttach;
|
|
110
113
|
}
|
|
114
|
+
getJestHtmlReportersTempDir() {
|
|
115
|
+
return (process.env[JestReportersTempPathEnvKey] ||
|
|
116
|
+
path.join(this.basePath, "jest-html-reporters-temp"));
|
|
117
|
+
}
|
|
118
|
+
ensureJestHtmlReportersTempDirs() {
|
|
119
|
+
const tempDir = this.getJestHtmlReportersTempDir();
|
|
120
|
+
fs.mkdirSync(path.join(tempDir, "data"), { recursive: true });
|
|
121
|
+
fs.mkdirSync(path.join(tempDir, "images"), { recursive: true });
|
|
122
|
+
}
|
|
123
|
+
overrideJestHtmlReportersTempPaths(helper) {
|
|
124
|
+
const tempDir = this.getJestHtmlReportersTempDir();
|
|
125
|
+
helper.tempDirPath = tempDir;
|
|
126
|
+
helper.dataDirPath = path.join(tempDir, "data");
|
|
127
|
+
helper.attachDirPath = path.join(tempDir, "images");
|
|
128
|
+
}
|
|
111
129
|
/**
|
|
112
130
|
* @description Reports a message to the test report
|
|
113
131
|
* @summary Adds a formatted message to the test report with an optional title
|
|
@@ -257,4 +275,4 @@ export class TestReporter {
|
|
|
257
275
|
return this.report(reference, buffer, "image");
|
|
258
276
|
}
|
|
259
277
|
}
|
|
260
|
-
//# sourceMappingURL=TestReporter.js.map
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVzdFJlcG9ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rlc3RzL1Rlc3RSZXBvcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSx5QkFBb0I7QUFvQ3BEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsbUNBQW1DLENBQUM7QUFFL0U7Ozs7O0dBS0c7QUFDSCxNQUFNLFlBQVksR0FBRyxDQUFDLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBRS9FOzs7Ozs7OztHQVFHO0FBQ0gsS0FBSyxVQUFVLGVBQWUsQ0FBSSxhQUF5QjtJQUN6RCxtRUFBbUU7SUFDbkUsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFNLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlERztBQUNILE1BQU0sT0FBTyxZQUFZO0lBd0J2QixZQUNZLFdBQW1CLE9BQU8sRUFDMUIsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUM1QixPQUFPLENBQUMsR0FBRyxFQUFFLEVBQ2IsVUFBVSxFQUNWLFNBQVMsRUFDVCxXQUFXLENBQ1o7UUFOUyxhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUtqQjtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFD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QUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgaW5zdGFsbElmTm90QXZhaWxhYmxlIH0gZnJvbSBcIi4uL3V0aWxzL2ZzXCI7XG5pbXBvcnQgeyBTaW1wbGVEZXBlbmRlbmN5TWFwIH0gZnJvbSBcIi4uL3V0aWxzL3R5cGVzXCI7XG5pbXBvcnQgeyBNZFRhYmxlRGVmaW5pdGlvbiB9IGZyb20gXCIuLi91dGlscy9tZFwiO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgQWRkQXR0YWNoUGFyYW1zXG4gKiBAZGVzY3JpcHRpb24gUGFyYW1ldGVycyBmb3IgYWRkaW5nIGFuIGF0dGFjaG1lbnQgdG8gYSByZXBvcnRcbiAqIEBzdW1tYXJ5IEludGVyZmFjZSBmb3IgYXR0YWNobWVudCBwYXJhbWV0ZXJzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkQXR0YWNoUGFyYW1zIHtcbiAgYXR0YWNoOiBzdHJpbmcgfCBCdWZmZXI7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBvYmplY3Q7XG4gIGNvbnRleHQ/OiBhbnk7XG4gIGJ1ZmZlckZvcm1hdD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAaW50ZXJmYWNlIEFkZE1zZ1BhcmFtc1xuICogQGRlc2NyaXB0aW9uIFBhcmFtZXRlcnMgZm9yIGFkZGluZyBhIG1lc3NhZ2UgdG8gYSByZXBvcnRcbiAqIEBzdW1tYXJ5IEludGVyZmFjZSBmb3IgbWVzc2FnZSBwYXJhbWV0ZXJzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkTXNnUGFyYW1zIHtcbiAgbWVzc2FnZTogc3RyaW5nIHwgb2JqZWN0O1xuICBjb250ZXh0PzogYW55O1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHsoXCJqc29uXCJ8XCJpbWFnZVwifFwidGV4dFwifFwibWRcIil9IFBheWxvYWRUeXBlXG4gKiBAZGVzY3JpcHRpb24gVHlwZXMgb2YgcGF5bG9hZHMgdGhhdCBjYW4gYmUgaGFuZGxlZFxuICogQHN1bW1hcnkgVW5pb24gdHlwZSBmb3IgcGF5bG9hZCB0eXBlc1xuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgdHlwZSBQYXlsb2FkVHlwZSA9IFwianNvblwiIHwgXCJpbWFnZVwiIHwgXCJ0ZXh0XCIgfCBcIm1kXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVudmlyb25tZW50IHZhcmlhYmxlIGtleSBmb3IgSmVzdCBIVE1MIHJlcG9ydGVycyB0ZW1wb3JhcnkgZGlyZWN0b3J5IHBhdGhcbiAqIEBzdW1tYXJ5IENvbnN0YW50IGRlZmluaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBrZXkgZm9yIEplc3QgSFRNTCByZXBvcnRlcnNcbiAqIEBjb25zdCBKZXN0UmVwb3J0ZXJzVGVtcFBhdGhFbnZLZXlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGNvbnN0IEplc3RSZXBvcnRlcnNUZW1wUGF0aEVudktleSA9IFwiSkVTVF9IVE1MX1JFUE9SVEVSU19URU1QX0RJUl9QQVRIXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFycmF5IG9mIGRlcGVuZGVuY2llcyByZXF1aXJlZCBieSB0aGUgdGVzdCByZXBvcnRlclxuICogQHN1bW1hcnkgTGlzdCBvZiBucG0gcGFja2FnZXMgbmVlZGVkIGZvciByZXBvcnRpbmcgZnVuY3Rpb25hbGl0eVxuICogQGNvbnN0IGRlcGVuZGVuY2llc1xuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5jb25zdCBkZXBlbmRlbmNpZXMgPSBbXCJqZXN0LWh0bWwtcmVwb3J0ZXJzXCIsIFwianNvbjJtZFwiLCBcImNoYXJ0anMtbm9kZS1jYW52YXNcIl07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE5vcm1hbGl6ZXMgaW1wb3J0cyB0byBoYW5kbGUgYm90aCBDb21tb25KUyBhbmQgRVNNb2R1bGUgZm9ybWF0c1xuICogQHN1bW1hcnkgVXRpbGl0eSBmdW5jdGlvbiB0byBoYW5kbGUgbW9kdWxlIGltcG9ydCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGZvcm1hdHNcbiAqIEB0ZW1wbGF0ZSBUIC0gVHlwZSBvZiB0aGUgaW1wb3J0ZWQgbW9kdWxlXG4gKiBAcGFyYW0ge1Byb21pc2U8VD59IGltcG9ydFByb21pc2UgLSBQcm9taXNlIHJldHVybmVkIGJ5IGR5bmFtaWMgaW1wb3J0XG4gKiBAcmV0dXJuIHtQcm9taXNlPFQ+fSBOb3JtYWxpemVkIG1vZHVsZVxuICogQGZ1bmN0aW9uIG5vcm1hbGl6ZUltcG9ydFxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5hc3luYyBmdW5jdGlvbiBub3JtYWxpemVJbXBvcnQ8VD4oaW1wb3J0UHJvbWlzZTogUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAvLyBDb21tb25KUydzIGBtb2R1bGUuZXhwb3J0c2AgaXMgd3JhcHBlZCBhcyBgZGVmYXVsdGAgaW4gRVNNb2R1bGUuXG4gIHJldHVybiBpbXBvcnRQcm9taXNlLnRoZW4oKG06IGFueSkgPT4gKG0uZGVmYXVsdCB8fCBtKSBhcyBUKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVGVzdCByZXBvcnRpbmcgdXRpbGl0eSBjbGFzcyBmb3IgbWFuYWdpbmcgdGVzdCByZXN1bHRzIGFuZCBldmlkZW5jZVxuICogQHN1bW1hcnkgQSBjb21wcmVoZW5zaXZlIHRlc3QgcmVwb3J0ZXIgdGhhdCBoYW5kbGVzIHZhcmlvdXMgdHlwZXMgb2YgdGVzdCBhcnRpZmFjdHMgaW5jbHVkaW5nIG1lc3NhZ2VzLFxuICogYXR0YWNobWVudHMsIGRhdGEsIGltYWdlcywgdGFibGVzLCBhbmQgZ3JhcGhzLiBJdCBwcm92aWRlcyBtZXRob2RzIHRvIHJlcG9ydCBhbmQgc3RvcmUgdGVzdCBldmlkZW5jZVxuICogaW4gZGlmZmVyZW50IGZvcm1hdHMgYW5kIG1hbmFnZXMgZGVwZW5kZW5jaWVzIGZvciByZXBvcnRpbmcgZnVuY3Rpb25hbGl0eS5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFR5cGUgb2YgZGF0YSBiZWluZyByZXBvcnRlZFxuICogQHBhcmFtIHtzdHJpbmd9IFt0ZXN0Q2FzZT1cInRlc3RzXCJdIC0gTmFtZSBvZiB0aGUgdGVzdCBjYXNlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2Jhc2VQYXRoXSAtIEJhc2UgcGF0aCBmb3Igc3RvcmluZyB0ZXN0IHJlcG9ydHNcbiAqIEBjbGFzc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZXBvcnRlciA9IG5ldyBUZXN0UmVwb3J0ZXIoJ2xvZ2luLXRlc3QnKTtcbiAqXG4gKiAvLyBSZXBvcnQgdGVzdCBtZXNzYWdlc1xuICogYXdhaXQgcmVwb3J0ZXIucmVwb3J0TWVzc2FnZSgnVGVzdCBTdGFydGVkJywgJ0xvZ2luIGZsb3cgaW5pdGlhdGVkJyk7XG4gKlxuICogLy8gUmVwb3J0IHRlc3QgZGF0YVxuICogYXdhaXQgcmVwb3J0ZXIucmVwb3J0RGF0YSgndXNlci1jcmVkZW50aWFscycsIHsgdXNlcm5hbWU6ICd0ZXN0JyB9LCAnanNvbicpO1xuICpcbiAqIC8vIFJlcG9ydCB0ZXN0IHJlc3VsdHMgdGFibGVcbiAqIGF3YWl0IHJlcG9ydGVyLnJlcG9ydFRhYmxlKCd0ZXN0LXJlc3VsdHMnLCB7XG4gKiAgIGhlYWRlcnM6IFsnU3RlcCcsICdTdGF0dXMnXSxcbiAqICAgcm93czogW1xuICogICAgIHsgU3RlcDogJ0xvZ2luJywgU3RhdHVzOiAnUGFzcycgfSxcbiAqICAgICB7IFN0ZXA6ICdWYWxpZGF0aW9uJywgU3RhdHVzOiAnUGFzcycgfVxuICogICBdXG4gKiB9KTtcbiAqXG4gKiAvLyBSZXBvcnQgdGVzdCBldmlkZW5jZVxuICogYXdhaXQgcmVwb3J0ZXIucmVwb3J0QXR0YWNobWVudCgnU2NyZWVuc2hvdCcsIHNjcmVlbnNob3RCdWZmZXIpO1xuICogYGBgXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgVGVzdFJlcG9ydGVyXG4gKiAgIHBhcnRpY2lwYW50IEZpbGVTeXN0ZW1cbiAqICAgcGFydGljaXBhbnQgRGVwZW5kZW5jaWVzXG4gKlxuICogICBDbGllbnQtPj5UZXN0UmVwb3J0ZXI6IG5ldyBUZXN0UmVwb3J0ZXIodGVzdENhc2UsIGJhc2VQYXRoKVxuICogICBUZXN0UmVwb3J0ZXItPj5GaWxlU3lzdGVtOiBDcmVhdGUgcmVwb3J0IGRpcmVjdG9yeVxuICpcbiAqICAgYWx0IFJlcG9ydCBNZXNzYWdlXG4gKiAgICAgQ2xpZW50LT4+VGVzdFJlcG9ydGVyOiByZXBvcnRNZXNzYWdlKHRpdGxlLCBtZXNzYWdlKVxuICogICAgIFRlc3RSZXBvcnRlci0+PkRlcGVuZGVuY2llczogSW1wb3J0IGhlbHBlcnNcbiAqICAgICBUZXN0UmVwb3J0ZXItPj5GaWxlU3lzdGVtOiBTdG9yZSBtZXNzYWdlXG4gKiAgIGVsc2UgUmVwb3J0IERhdGFcbiAqICAgICBDbGllbnQtPj5UZXN0UmVwb3J0ZXI6IHJlcG9ydERhdGEocmVmZXJlbmNlLCBkYXRhLCB0eXBlKVxuICogICAgIFRlc3RSZXBvcnRlci0+PkRlcGVuZGVuY2llczogUHJvY2VzcyBkYXRhXG4gKiAgICAgVGVzdFJlcG9ydGVyLT4+RmlsZVN5c3RlbTogU3RvcmUgZm9ybWF0dGVkIGRhdGFcbiAqICAgZWxzZSBSZXBvcnQgVGFibGVcbiAqICAgICBDbGllbnQtPj5UZXN0UmVwb3J0ZXI6IHJlcG9ydFRhYmxlKHJlZmVyZW5jZSwgdGFibGVEZWYpXG4gKiAgICAgVGVzdFJlcG9ydGVyLT4+RGVwZW5kZW5jaWVzOiBDb252ZXJ0IHRvIE1EIGZvcm1hdFxuICogICAgIFRlc3RSZXBvcnRlci0+PkZpbGVTeXN0ZW06IFN0b3JlIHRhYmxlXG4gKiAgIGVuZFxuICovXG5leHBvcnQgY2xhc3MgVGVzdFJlcG9ydGVyIHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiBmb3IgYWRkaW5nIG1lc3NhZ2VzIHRvIHRoZSB0ZXN0IHJlcG9ydFxuICAgKiBAc3VtbWFyeSBTdGF0aWMgaGFuZGxlciBmb3IgcHJvY2Vzc2luZyBhbmQgc3RvcmluZyB0ZXN0IG1lc3NhZ2VzXG4gICAqIEB0eXBlIHtmdW5jdGlvbihBZGRNc2dQYXJhbXMpOiBQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyBhZGRNc2dGdW5jdGlvbjogKHBhcmFtczogQWRkTXNnUGFyYW1zKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRnVuY3Rpb24gZm9yIGFkZGluZyBhdHRhY2htZW50cyB0byB0aGUgdGVzdCByZXBvcnRcbiAgICogQHN1bW1hcnkgU3RhdGljIGhhbmRsZXIgZm9yIHByb2Nlc3NpbmcgYW5kIHN0b3JpbmcgdGVzdCBhdHRhY2htZW50c1xuICAgKiBAdHlwZSB7ZnVuY3Rpb24oQWRkQXR0YWNoUGFyYW1zKTogUHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgYWRkQXR0YWNoRnVuY3Rpb246IChcbiAgICBwYXJhbXM6IEFkZEF0dGFjaFBhcmFtc1xuICApID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBNYXAgb2YgZGVwZW5kZW5jaWVzIHJlcXVpcmVkIGJ5IHRoZSByZXBvcnRlclxuICAgKiBAc3VtbWFyeSBTdG9yZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgZGVwZW5kZW5jaWVzXG4gICAqIEB0eXBlIHtTaW1wbGVEZXBlbmRlbmN5TWFwfVxuICAgKi9cbiAgcHJpdmF0ZSBkZXBzPzogU2ltcGxlRGVwZW5kZW5jeU1hcDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVzdENhc2U6IHN0cmluZyA9IFwidGVzdHNcIixcbiAgICBwcm90ZWN0ZWQgYmFzZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICBwcm9jZXNzLmN3ZCgpLFxuICAgICAgXCJ3b3JrZG9jc1wiLFxuICAgICAgXCJyZXBvcnRzXCIsXG4gICAgICBcImV2aWRlbmNlc1wiXG4gICAgKVxuICApIHtcbiAgICB0aGlzLmJhc2VQYXRoID0gcGF0aC5qb2luKGJhc2VQYXRoLCB0aGlzLnRlc3RDYXNlKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5iYXNlUGF0aCkpIHtcbiAgICAgIGZzLm1rZGlyU3luYyhiYXNlUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbXBvcnRzIHJlcXVpcmVkIGhlbHBlciBmdW5jdGlvbnNcbiAgICogQHN1bW1hcnkgRW5zdXJlcyBhbGwgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBhcmUgYXZhaWxhYmxlIGFuZCBpbXBvcnRzIGhlbHBlciBmdW5jdGlvbnNcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gaGVscGVycyBhcmUgaW1wb3J0ZWRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW1wb3J0SGVscGVycygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmVuc3VyZUplc3RIdG1sUmVwb3J0ZXJzVGVtcERpcnMoKTtcbiAgICB0aGlzLmRlcHMgPSBhd2FpdCBpbnN0YWxsSWZOb3RBdmFpbGFibGUoW2RlcGVuZGVuY2llc1swXV0sIHRoaXMuZGVwcyk7XG4gICAgLy8gaWYgKCFwcm9jZXNzLmVudltKZXN0UmVwb3J0ZXJzVGVtcFBhdGhFbnZLZXldKVxuICAgIC8vICAgcHJvY2Vzcy5lbnZbSmVzdFJlcG9ydGVyc1RlbXBQYXRoRW52S2V5XSA9ICcuL3dvcmtkb2NzL3JlcG9ydHMnO1xuICAgIGNvbnN0IGhlbHBlciA9IGF3YWl0IG5vcm1hbGl6ZUltcG9ydChpbXBvcnQoYCR7ZGVwZW5kZW5jaWVzWzBdfS9oZWxwZXJgKSk7XG4gICAgY29uc3QgeyBhZGRNc2csIGFkZEF0dGFjaCB9ID0gaGVscGVyIGFzIHtcbiAgICAgIGFkZE1zZzogdHlwZW9mIFRlc3RSZXBvcnRlci5hZGRNc2dGdW5jdGlvbjtcbiAgICAgIGFkZEF0dGFjaDogdHlwZW9mIFRlc3RSZXBvcnRlci5hZGRBdHRhY2hGdW5jdGlvbjtcbiAgICAgIHRlbXBEaXJQYXRoPzogc3RyaW5nO1xuICAgICAgZGF0YURpclBhdGg/OiBzdHJpbmc7XG4gICAgICBhdHRhY2hEaXJQYXRoPzogc3RyaW5nO1xuICAgIH07XG4gICAgdGhpcy5vdmVycmlkZUplc3RIdG1sUmVwb3J0ZXJzVGVtcFBhdGhzKGhlbHBlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgVGVzdFJlcG9ydGVyLmFkZE1zZ0Z1bmN0aW9uID0gYWRkTXNnO1xuICAgIFRlc3RSZXBvcnRlci5hZGRBdHRhY2hGdW5jdGlvbiA9IGFkZEF0dGFjaDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SmVzdEh0bWxSZXBvcnRlcnNUZW1wRGlyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIHByb2Nlc3MuZW52W0plc3RSZXBvcnRlcnNUZW1wUGF0aEVudktleV0gfHxcbiAgICAgIHBhdGguam9pbih0aGlzLmJhc2VQYXRoLCBcImplc3QtaHRtbC1yZXBvcnRlcnMtdGVtcFwiKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZUplc3RIdG1sUmVwb3J0ZXJzVGVtcERpcnMoKSB7XG4gICAgY29uc3QgdGVtcERpciA9IHRoaXMuZ2V0SmVzdEh0bWxSZXBvcnRlcnNUZW1wRGlyKCk7XG4gICAgZnMubWtkaXJTeW5jKHBhdGguam9pbih0ZW1wRGlyLCBcImRhdGFcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLm1rZGlyU3luYyhwYXRoLmpvaW4odGVtcERpciwgXCJpbWFnZXNcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvdmVycmlkZUplc3RIdG1sUmVwb3J0ZXJzVGVtcFBhdGhzKGhlbHBlcjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgICBjb25zdCB0ZW1wRGlyID0gdGhpcy5nZXRKZXN0SHRtbFJlcG9ydGVyc1RlbXBEaXIoKTtcbiAgICBoZWxwZXIudGVtcERpclBhdGggPSB0ZW1wRGlyO1xuICAgIGhlbHBlci5kYXRhRGlyUGF0aCA9IHBhdGguam9pbih0ZW1wRGlyLCBcImRhdGFcIik7XG4gICAgaGVscGVyLmF0dGFjaERpclBhdGggPSBwYXRoLmpvaW4odGVtcERpciwgXCJpbWFnZXNcIik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcG9ydHMgYSBtZXNzYWdlIHRvIHRoZSB0ZXN0IHJlcG9ydFxuICAgKiBAc3VtbWFyeSBBZGRzIGEgZm9ybWF0dGVkIG1lc3NhZ2UgdG8gdGhlIHRlc3QgcmVwb3J0IHdpdGggYW4gb3B0aW9uYWwgdGl0bGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gVGl0bGUgb2YgdGhlIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBvYmplY3R9IG1lc3NhZ2UgLSBDb250ZW50IG9mIHRoZSBtZXNzYWdlXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBtZXNzYWdlIGlzIHJlcG9ydGVkXG4gICAqL1xuICBhc3luYyByZXBvcnRNZXNzYWdlKHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB8IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghVGVzdFJlcG9ydGVyLmFkZE1zZ0Z1bmN0aW9uKSBhd2FpdCB0aGlzLmltcG9ydEhlbHBlcnMoKTtcbiAgICBjb25zdCBtc2cgPSBgJHt0aXRsZX0ke21lc3NhZ2UgPyBgXFxuJHttZXNzYWdlfWAgOiBcIlwifWA7XG4gICAgYXdhaXQgVGVzdFJlcG9ydGVyLmFkZE1zZ0Z1bmN0aW9uKHsgbWVzc2FnZTogbXNnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBvcnRzIGFuIGF0dGFjaG1lbnQgdG8gdGhlIHRlc3QgcmVwb3J0XG4gICAqIEBzdW1tYXJ5IEFkZHMgYSBmb3JtYXR0ZWQgbWVzc2FnZSB0byB0aGUgdGVzdCByZXBvcnQgd2l0aCBhbiBvcHRpb25hbCB0aXRsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSBUaXRsZSBvZiB0aGUgbWVzc2FnZVxuICAgKiBAcGFyYW0ge3N0cmluZyB8IEJ1ZmZlcn0gYXR0YWNobWVudCAtIENvbnRlbnQgb2YgdGhlIG1lc3NhZ2VcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG1lc3NhZ2UgaXMgcmVwb3J0ZWRcbiAgICovXG4gIGFzeW5jIHJlcG9ydEF0dGFjaG1lbnQoXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICBhdHRhY2htZW50OiBzdHJpbmcgfCBCdWZmZXJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFUZXN0UmVwb3J0ZXIuYWRkQXR0YWNoRnVuY3Rpb24pIGF3YWl0IHRoaXMuaW1wb3J0SGVscGVycygpO1xuICAgIGF3YWl0IFRlc3RSZXBvcnRlci5hZGRBdHRhY2hGdW5jdGlvbih7XG4gICAgICBhdHRhY2g6IGF0dGFjaG1lbnQsXG4gICAgICBkZXNjcmlwdGlvbjogdGl0bGUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcG9ydHMgZGF0YSB3aXRoIHNwZWNpZmllZCB0eXBlXG4gICAqIEBzdW1tYXJ5IFByb2Nlc3NlcyBhbmQgc3RvcmVzIGRhdGEgaW4gdGhlIHRlc3QgcmVwb3J0IHdpdGggZm9ybWF0dGluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmZXJlbmNlIC0gUmVmZXJlbmNlIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgb2JqZWN0fSBkYXRhIC0gRGF0YSB0byBiZSByZXBvcnRlZFxuICAgKiBAcGFyYW0ge1BheWxvYWRUeXBlfSB0eXBlIC0gVHlwZSBvZiB0aGUgcGF5bG9hZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0cmltPWZhbHNlXSAtIFdoZXRoZXIgdG8gdHJpbSB0aGUgZGF0YVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBkYXRhIGlzIHJlcG9ydGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgcmVwb3J0KFxuICAgIHJlZmVyZW5jZTogc3RyaW5nLFxuICAgIGRhdGE6IHN0cmluZyB8IG51bWJlciB8IG9iamVjdCB8IEJ1ZmZlcixcbiAgICB0eXBlOiBQYXlsb2FkVHlwZSxcbiAgICB0cmltOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBhdHRhY2hGdW5jdGlvbjpcbiAgICAgICAgfCB0eXBlb2YgdGhpcy5yZXBvcnRNZXNzYWdlXG4gICAgICAgIHwgdHlwZW9mIHRoaXMucmVwb3J0QXR0YWNobWVudCA9IHRoaXMucmVwb3J0TWVzc2FnZS5iaW5kKHRoaXMpO1xuICAgICAgbGV0IGV4dGVuc2lvbjogXCIucG5nXCIgfCBcIi50eHRcIiB8IFwiLm1kXCIgfCBcIi5qc29uXCIgPSBcIi50eHRcIjtcblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJpbWFnZVwiOlxuICAgICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhIGFzIEJ1ZmZlcik7XG4gICAgICAgICAgZXh0ZW5zaW9uID0gXCIucG5nXCI7XG4gICAgICAgICAgYXR0YWNoRnVuY3Rpb24gPSB0aGlzLnJlcG9ydEF0dGFjaG1lbnQuYmluZCh0aGlzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImpzb25cIjpcbiAgICAgICAgICBpZiAodHJpbSkge1xuICAgICAgICAgICAgaWYgKChkYXRhIGFzIHsgcmVxdWVzdD86IHVua25vd24gfSkucmVxdWVzdClcbiAgICAgICAgICAgICAgZGVsZXRlIChkYXRhIGFzIHsgcmVxdWVzdD86IHVua25vd24gfSlbXCJyZXF1ZXN0XCJdO1xuICAgICAgICAgICAgaWYgKChkYXRhIGFzIHsgY29uZmlnPzogdW5rbm93biB9KS5jb25maWcpXG4gICAgICAgICAgICAgIGRlbGV0ZSAoZGF0YSBhcyB7IGNvbmZpZz86IHVua25vd24gfSlbXCJjb25maWdcIl07XG4gICAgICAgICAgfVxuICAgICAgICAgIGRhdGEgPSBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKTtcbiAgICAgICAgICBleHRlbnNpb24gPSBcIi5qc29uXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJtZFwiOlxuICAgICAgICAgIGV4dGVuc2lvbiA9IFwiLm1kXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgICAgZXh0ZW5zaW9uID0gXCIudHh0XCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS5sb2coYFVuc3VwcG9ydGVkIHR5cGUgJHt0eXBlfS4gYXNzdW1pbmcgdGV4dGApO1xuICAgICAgfVxuICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlLmluY2x1ZGVzKFwiXFxuXCIpXG4gICAgICAgID8gcmVmZXJlbmNlXG4gICAgICAgIDogYCR7cmVmZXJlbmNlfSR7ZXh0ZW5zaW9ufWA7XG4gICAgICBhd2FpdCBhdHRhY2hGdW5jdGlvbihyZWZlcmVuY2UsIGRhdGEgYXMgQnVmZmVyIHwgc3RyaW5nKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3Qgc3RvcmUgYXR0YWNoIGFydGlmYWN0ICR7cmVmZXJlbmNlfSB1bmRlciB0byB0ZXN0IHJlcG9ydCAke3RoaXMudGVzdENhc2V9IC0gJHtlfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBvcnRzIGRhdGEgd2l0aCBhIHNwZWNpZmllZCB0eXBlXG4gICAqIEBzdW1tYXJ5IFdyYXBwZXIgbWV0aG9kIGZvciByZXBvcnRpbmcgdmFyaW91cyB0eXBlcyBvZiBkYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZlcmVuY2UgLSBSZWZlcmVuY2UgaWRlbnRpZmllciBmb3IgdGhlIGRhdGFcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBvYmplY3R9IGRhdGEgLSBEYXRhIHRvIGJlIHJlcG9ydGVkXG4gICAqIEBwYXJhbSB7UGF5bG9hZFR5cGV9IFt0eXBlPVwianNvblwiXSAtIFR5cGUgb2YgdGhlIHBheWxvYWRcbiAgICogQHBhcmFtIHtib29sZWFufSBbdHJpbT1mYWxzZV0gLSBXaGV0aGVyIHRvIHRyaW0gdGhlIGRhdGFcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gZGF0YSBpcyByZXBvcnRlZFxuICAgKi9cbiAgYXN5bmMgcmVwb3J0RGF0YShcbiAgICByZWZlcmVuY2U6IHN0cmluZyxcbiAgICBkYXRhOiBzdHJpbmcgfCBudW1iZXIgfCBvYmplY3QsXG4gICAgdHlwZTogUGF5bG9hZFR5cGUgPSBcImpzb25cIixcbiAgICB0cmltID0gZmFsc2VcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMucmVwb3J0KHJlZmVyZW5jZSwgZGF0YSwgdHlwZSwgdHJpbSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcG9ydHMgYSBKU09OIG9iamVjdFxuICAgKiBAc3VtbWFyeSBDb252ZW5pZW5jZSBtZXRob2QgZm9yIHJlcG9ydGluZyBKU09OIG9iamVjdHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZmVyZW5jZSAtIFJlZmVyZW5jZSBpZGVudGlmaWVyIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBqc29uIC0gSlNPTiBvYmplY3QgdG8gYmUgcmVwb3J0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBbdHJpbT1mYWxzZV0gLSBXaGV0aGVyIHRvIHRyaW0gdGhlIG9iamVjdFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBvYmplY3QgaXMgcmVwb3J0ZWRcbiAgICovXG4gIGFzeW5jIHJlcG9ydE9iamVjdChyZWZlcmVuY2U6IHN0cmluZywganNvbjogb2JqZWN0LCB0cmltID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5yZXBvcnQocmVmZXJlbmNlLCBqc29uLCBcImpzb25cIiwgdHJpbSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcG9ydHMgYSB0YWJsZSBpbiBtYXJrZG93biBmb3JtYXRcbiAgICogQHN1bW1hcnkgQ29udmVydHMgYW5kIHN0b3JlcyBhIHRhYmxlIGRlZmluaXRpb24gaW4gbWFya2Rvd24gZm9ybWF0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZlcmVuY2UgLSBSZWZlcmVuY2UgaWRlbnRpZmllciBmb3IgdGhlIHRhYmxlXG4gICAqIEBwYXJhbSB7TWRUYWJsZURlZmluaXRpb259IHRhYmxlRGVmIC0gVGFibGUgZGVmaW5pdGlvbiBvYmplY3RcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGFibGUgaXMgcmVwb3J0ZWRcbiAgICovXG4gIGFzeW5jIHJlcG9ydFRhYmxlKHJlZmVyZW5jZTogc3RyaW5nLCB0YWJsZURlZjogTWRUYWJsZURlZmluaXRpb24pIHtcbiAgICB0aGlzLmRlcHMgPSBhd2FpdCBpbnN0YWxsSWZOb3RBdmFpbGFibGUoW2RlcGVuZGVuY2llc1sxXV0sIHRoaXMuZGVwcyk7XG4gICAgbGV0IHR4dDogc3RyaW5nO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBqc29uMm1kID0gYXdhaXQgbm9ybWFsaXplSW1wb3J0KGltcG9ydChgJHtkZXBlbmRlbmNpZXNbMV19YCkpO1xuICAgICAgdHh0ID0ganNvbjJtZCh0YWJsZURlZik7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgY29udmVydCBKU09OIHRvIE1hcmtkb3duIC0gJHtlfWApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcG9ydChyZWZlcmVuY2UsIHR4dCwgXCJtZFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwb3J0cyBhIGdyYXBoIHVzaW5nIENoYXJ0LmpzXG4gICAqIEBzdW1tYXJ5IEdlbmVyYXRlcyBhbmQgc3RvcmVzIGEgZ3JhcGggdmlzdWFsaXphdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmZXJlbmNlIC0gUmVmZXJlbmNlIGlkZW50aWZpZXIgZm9yIHRoZSBncmFwaFxuICAgKiBAcGFyYW0ge2FueX0gY29uZmlnIC0gQ2hhcnQuanMgY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gZ3JhcGggaXMgcmVwb3J0ZWRcbiAgICovXG4gIGFzeW5jIHJlcG9ydEdyYXBoKHJlZmVyZW5jZTogc3RyaW5nLCBjb25maWc6IGFueSkge1xuICAgIHRoaXMuZGVwcyA9IGF3YWl0IGluc3RhbGxJZk5vdEF2YWlsYWJsZShbZGVwZW5kZW5jaWVzWzJdXSwgdGhpcy5kZXBzKTtcbiAgICBjb25zdCB7IENoYXJ0SlNOb2RlQ2FudmFzIH0gPSBhd2FpdCBub3JtYWxpemVJbXBvcnQoXG4gICAgICBpbXBvcnQoZGVwZW5kZW5jaWVzWzJdKVxuICAgICk7XG5cbiAgICBjb25zdCB3aWR0aCA9IDYwMDsgLy9weFxuICAgIGNvbnN0IGhlaWdodCA9IDgwMDsgLy9weFxuICAgIGNvbnN0IGJhY2tncm91bmRDb2xvdXIgPSBcIndoaXRlXCI7IC8vIFVzZXMgaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS90YWdzL2NhbnZhc19maWxsc3R5bGUuYXNwXG4gICAgY29uc3QgY2hhcnRKU05vZGVDYW52YXMgPSBuZXcgQ2hhcnRKU05vZGVDYW52YXMoe1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3VyLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaW1hZ2UgPSBhd2FpdCBjaGFydEpTTm9kZUNhbnZhcy5yZW5kZXJUb0J1ZmZlcihjb25maWcpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnJlcG9ydEltYWdlKHJlZmVyZW5jZSwgaW1hZ2UpO1xuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwb3J0cyBhbiBpbWFnZSB0byB0aGUgdGVzdCByZXBvcnRcbiAgICogQHN1bW1hcnkgU3RvcmVzIGFuIGltYWdlIGJ1ZmZlciBpbiB0aGUgdGVzdCByZXBvcnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZmVyZW5jZSAtIFJlZmVyZW5jZSBpZGVudGlmaWVyIGZvciB0aGUgaW1hZ2VcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciAtIEltYWdlIGRhdGEgYnVmZmVyXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGltYWdlIGlzIHJlcG9ydGVkXG4gICAqL1xuICBhc3luYyByZXBvcnRJbWFnZShyZWZlcmVuY2U6IHN0cmluZywgYnVmZmVyOiBCdWZmZXIpIHtcbiAgICByZXR1cm4gdGhpcy5yZXBvcnQocmVmZXJlbmNlLCBidWZmZXIsIFwiaW1hZ2VcIik7XG4gIH1cbn1cbiJdfQ==
|
package/lib/esm/tests/index.d.ts
CHANGED
package/lib/esm/tests/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
export * from "./TestReporter.js";
|
|
2
1
|
export * from "./Consumer.js";
|
|
3
|
-
|
|
2
|
+
export * from "./TestReporter.js";
|
|
3
|
+
export * from "./utils.js";
|
|
4
|
+
export * from "./jestPerformanceRunner.js";
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOEJBQTJCO0FBQzNCLGtDQUErQjtBQUMvQiwyQkFBd0I7QUFDeEIsMkNBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vQ29uc3VtZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1Rlc3RSZXBvcnRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2plc3RQZXJmb3JtYW5jZVJ1bm5lclwiO1xuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { PerformanceScenario, PerformanceRunner } from "../utils/performanceRunner";
|
|
2
|
+
export type JestPerformanceScenario<TContext = Record<string, unknown>> = PerformanceScenario<TContext>;
|
|
3
|
+
export declare class JestPerformanceRunner<TContext = Record<string, unknown>> extends PerformanceRunner<TContext> {
|
|
4
|
+
protected scenario: JestPerformanceScenario<TContext>;
|
|
5
|
+
constructor(scenario: JestPerformanceScenario<TContext>);
|
|
6
|
+
describeSuite(): void;
|
|
7
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PerformanceRunner } from "./../utils/performanceRunner.js";
|
|
2
|
+
export class JestPerformanceRunner extends PerformanceRunner {
|
|
3
|
+
constructor(scenario) {
|
|
4
|
+
super(scenario);
|
|
5
|
+
this.scenario = scenario;
|
|
6
|
+
}
|
|
7
|
+
describeSuite() {
|
|
8
|
+
describe(this.scenario.name, () => {
|
|
9
|
+
it("executes the performance scenario", async () => {
|
|
10
|
+
await this.run();
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamVzdFBlcmZvcm1hbmNlUnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rlc3RzL2plc3RQZXJmb3JtYW5jZVJ1bm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLGlCQUFpQixFQUFFLHdDQUFtQztBQUtwRixNQUFNLE9BQU8scUJBRVgsU0FBUSxpQkFBMkI7SUFHbkMsWUFBWSxRQUEyQztRQUNyRCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVNLGFBQWE7UUFDbEIsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtZQUNoQyxFQUFFLENBQUMsbUNBQW1DLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ2pELE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ25CLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQZXJmb3JtYW5jZVNjZW5hcmlvLCBQZXJmb3JtYW5jZVJ1bm5lciB9IGZyb20gXCIuLi91dGlscy9wZXJmb3JtYW5jZVJ1bm5lclwiO1xuXG5leHBvcnQgdHlwZSBKZXN0UGVyZm9ybWFuY2VTY2VuYXJpbzxUQ29udGV4dCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9XG4gIFBlcmZvcm1hbmNlU2NlbmFyaW88VENvbnRleHQ+O1xuXG5leHBvcnQgY2xhc3MgSmVzdFBlcmZvcm1hbmNlUnVubmVyPFxuICBUQ29udGV4dCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuPiBleHRlbmRzIFBlcmZvcm1hbmNlUnVubmVyPFRDb250ZXh0PiB7XG4gIHByb3RlY3RlZCBvdmVycmlkZSBzY2VuYXJpbzogSmVzdFBlcmZvcm1hbmNlU2NlbmFyaW88VENvbnRleHQ+O1xuXG4gIGNvbnN0cnVjdG9yKHNjZW5hcmlvOiBKZXN0UGVyZm9ybWFuY2VTY2VuYXJpbzxUQ29udGV4dD4pIHtcbiAgICBzdXBlcihzY2VuYXJpbyk7XG4gICAgdGhpcy5zY2VuYXJpbyA9IHNjZW5hcmlvO1xuICB9XG5cbiAgcHVibGljIGRlc2NyaWJlU3VpdGUoKTogdm9pZCB7XG4gICAgZGVzY3JpYmUodGhpcy5zY2VuYXJpby5uYW1lLCAoKSA9PiB7XG4gICAgICBpdChcImV4ZWN1dGVzIHRoZSBwZXJmb3JtYW5jZSBzY2VuYXJpb1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { SpawnOptionsWithoutStdio } from "child_process";
|
|
2
|
+
import { OutputWriterConstructor, StandardOutputWriter } from "../writers";
|
|
3
|
+
import { CommandResult } from "../utils/types";
|
|
4
|
+
import { TestReporter } from "./TestReporter";
|
|
5
|
+
export declare function runAndReport<R = string>(command: string, opts: SpawnOptionsWithoutStdio | undefined, outputConstructor: OutputWriterConstructor<R, StandardOutputWriter<R>, Error> | undefined, reporter: TestReporter, commandPrefix?: string, ...args: unknown[]): CommandResult<R>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { StandardOutputWriter } from "./../writers/index.js";
|
|
2
|
+
import { runCommand } from "./../utils/utils.js";
|
|
3
|
+
import { sf } from "@decaf-ts/logging";
|
|
4
|
+
import { style } from "styled-string-builder";
|
|
5
|
+
export function runAndReport(command, opts = {}, outputConstructor = (StandardOutputWriter), reporter, commandPrefix = "{cwd} $ ", ...args) {
|
|
6
|
+
try {
|
|
7
|
+
const cmd = runCommand(command, opts, outputConstructor, ...args);
|
|
8
|
+
const p = cmd.promise;
|
|
9
|
+
const resolution = async (resolve, result) => {
|
|
10
|
+
await reporter.reportData(`${expect.getState().currentTestName || "no test name"} - ${command}`, `${sf(commandPrefix, { cwd: opts.cwd || process.cwd() })}${command}\n${style("SUCCESS").green.bold}\n${result}`, "text", true);
|
|
11
|
+
resolve(result);
|
|
12
|
+
};
|
|
13
|
+
const rejection = async (reject, error) => {
|
|
14
|
+
try {
|
|
15
|
+
await reporter.reportData(`${expect.getState().currentTestName || "no test name"} - ${command}`, `${sf(commandPrefix, { cwd: opts.cwd || process.cwd() })}${command}\n${style("FAIL").red.bold}\n${error}`, "text", true);
|
|
16
|
+
}
|
|
17
|
+
catch (e) {
|
|
18
|
+
console.error(e);
|
|
19
|
+
}
|
|
20
|
+
reject(error);
|
|
21
|
+
};
|
|
22
|
+
cmd.promise = new Promise((resolve, reject) => {
|
|
23
|
+
return p
|
|
24
|
+
.then(async (r) => await resolution(resolve, r))
|
|
25
|
+
.catch(async (e) => await rejection(reject, e));
|
|
26
|
+
});
|
|
27
|
+
return cmd;
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
throw new Error(`Unable to create reportable command runner for ${commandPrefix}: ${e}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdHMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUEyQixvQkFBb0IsRUFBRSw4QkFBbUI7QUFHM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSw0QkFBdUI7QUFDNUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU5QyxNQUFNLFVBQVUsWUFBWSxDQUMxQixPQUFlLEVBQ2YsT0FBaUMsRUFBRSxFQUNuQyxvQkFJSSxDQUFBLG9CQUF1QixDQUFBLEVBQzNCLFFBQXNCLEVBQ3RCLGdCQUF3QixVQUFVLEVBQ2xDLEdBQUcsSUFBZTtJQUVsQixJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFFdEIsTUFBTSxVQUFVLEdBQUcsS0FBSyxFQUFFLE9BQVksRUFBRSxNQUFXLEVBQUUsRUFBRTtZQUNyRCxNQUFNLFFBQVEsQ0FBQyxVQUFVLENBQ3ZCLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLGVBQWUsSUFBSSxjQUFjLE1BQU0sT0FBTyxFQUFFLEVBQ3JFLEdBQUcsRUFBRSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxLQUFLLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxFQUMvRyxNQUFNLEVBQ04sSUFBSSxDQUNMLENBQUM7WUFDRixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDO1FBRUYsTUFBTSxTQUFTLEdBQUcsS0FBSyxFQUFFLE1BQVcsRUFBRSxLQUFVLEVBQUUsRUFBRTtZQUNsRCxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxRQUFRLENBQUMsVUFBVSxDQUN2QixHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxlQUFlLElBQUksY0FBYyxNQUFNLE9BQU8sRUFBRSxFQUNyRSxHQUFHLEVBQUUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUUsRUFDekcsTUFBTSxFQUNOLElBQUksQ0FDTCxDQUFDO1lBQ0osQ0FBQztZQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsQ0FBQztZQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUM7UUFFRixHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzVDLE9BQU8sQ0FBQztpQkFDTCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUMvQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0RBQWtELGFBQWEsS0FBSyxDQUFDLEVBQUUsQ0FDeEUsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3Bhd25PcHRpb25zV2l0aG91dFN0ZGlvIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IE91dHB1dFdyaXRlckNvbnN0cnVjdG9yLCBTdGFuZGFyZE91dHB1dFdyaXRlciB9IGZyb20gXCIuLi93cml0ZXJzXCI7XG5pbXBvcnQgeyBDb21tYW5kUmVzdWx0IH0gZnJvbSBcIi4uL3V0aWxzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZXN0UmVwb3J0ZXIgfSBmcm9tIFwiLi9UZXN0UmVwb3J0ZXJcIjtcbmltcG9ydCB7IHJ1bkNvbW1hbmQgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IHNmIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQgeyBzdHlsZSB9IGZyb20gXCJzdHlsZWQtc3RyaW5nLWJ1aWxkZXJcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkFuZFJlcG9ydDxSID0gc3RyaW5nPihcbiAgY29tbWFuZDogc3RyaW5nLFxuICBvcHRzOiBTcGF3bk9wdGlvbnNXaXRob3V0U3RkaW8gPSB7fSxcbiAgb3V0cHV0Q29uc3RydWN0b3I6IE91dHB1dFdyaXRlckNvbnN0cnVjdG9yPFxuICAgIFIsXG4gICAgU3RhbmRhcmRPdXRwdXRXcml0ZXI8Uj4sXG4gICAgRXJyb3JcbiAgPiA9IFN0YW5kYXJkT3V0cHV0V3JpdGVyPFI+LFxuICByZXBvcnRlcjogVGVzdFJlcG9ydGVyLFxuICBjb21tYW5kUHJlZml4OiBzdHJpbmcgPSBcIntjd2R9ICQgXCIsXG4gIC4uLmFyZ3M6IHVua25vd25bXVxuKTogQ29tbWFuZFJlc3VsdDxSPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgY21kID0gcnVuQ29tbWFuZChjb21tYW5kLCBvcHRzLCBvdXRwdXRDb25zdHJ1Y3RvciwgLi4uYXJncyk7XG4gICAgY29uc3QgcCA9IGNtZC5wcm9taXNlO1xuXG4gICAgY29uc3QgcmVzb2x1dGlvbiA9IGFzeW5jIChyZXNvbHZlOiBhbnksIHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBhd2FpdCByZXBvcnRlci5yZXBvcnREYXRhKFxuICAgICAgICBgJHtleHBlY3QuZ2V0U3RhdGUoKS5jdXJyZW50VGVzdE5hbWUgfHwgXCJubyB0ZXN0IG5hbWVcIn0gLSAke2NvbW1hbmR9YCxcbiAgICAgICAgYCR7c2YoY29tbWFuZFByZWZpeCwgeyBjd2Q6IG9wdHMuY3dkIHx8IHByb2Nlc3MuY3dkKCkgfSl9JHtjb21tYW5kfVxcbiR7c3R5bGUoXCJTVUNDRVNTXCIpLmdyZWVuLmJvbGR9XFxuJHtyZXN1bHR9YCxcbiAgICAgICAgXCJ0ZXh0XCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlamVjdGlvbiA9IGFzeW5jIChyZWplY3Q6IGFueSwgZXJyb3I6IGFueSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgcmVwb3J0ZXIucmVwb3J0RGF0YShcbiAgICAgICAgICBgJHtleHBlY3QuZ2V0U3RhdGUoKS5jdXJyZW50VGVzdE5hbWUgfHwgXCJubyB0ZXN0IG5hbWVcIn0gLSAke2NvbW1hbmR9YCxcbiAgICAgICAgICBgJHtzZihjb21tYW5kUHJlZml4LCB7IGN3ZDogb3B0cy5jd2QgfHwgcHJvY2Vzcy5jd2QoKSB9KX0ke2NvbW1hbmR9XFxuJHtzdHlsZShcIkZBSUxcIikucmVkLmJvbGR9XFxuJHtlcnJvcn1gLFxuICAgICAgICAgIFwidGV4dFwiLFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICB9O1xuXG4gICAgY21kLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXR1cm4gcFxuICAgICAgICAudGhlbihhc3luYyAocikgPT4gYXdhaXQgcmVzb2x1dGlvbihyZXNvbHZlLCByKSlcbiAgICAgICAgLmNhdGNoKGFzeW5jIChlKSA9PiBhd2FpdCByZWplY3Rpb24ocmVqZWN0LCBlKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNtZDtcbiAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBVbmFibGUgdG8gY3JlYXRlIHJlcG9ydGFibGUgY29tbWFuZCBydW5uZXIgZm9yICR7Y29tbWFuZFByZWZpeH06ICR7ZX1gXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -65,4 +65,4 @@ export var Tokens;
|
|
|
65
65
|
* @memberOf module:utils
|
|
66
66
|
*/
|
|
67
67
|
export const AbortCode = "Aborted";
|
|
68
|
-
//# sourceMappingURL=
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUM7QUFFaEM7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQzFCLDREQUE0RCxDQUFDO0FBRS9EOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFOLElBQVksVUFPWDtBQVBELFdBQVksVUFBVTtJQUNwQix3REFBd0Q7SUFDeEQsNkJBQWUsQ0FBQTtJQUNmLDJEQUEyRDtJQUMzRCw2QkFBZSxDQUFBO0lBQ2Ysb0VBQW9FO0lBQ3BFLDZCQUFlLENBQUE7QUFDakIsQ0FBQyxFQVBXLFVBQVUsS0FBVixVQUFVLFFBT3JCO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBRWpDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQztBQUU1Qzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBTixJQUFZLE1BU1g7QUFURCxXQUFZLE1BQU07SUFDaEIsMENBQTBDO0lBQzFDLHdCQUFjLENBQUE7SUFDZCwwQ0FBMEM7SUFDMUMsMkJBQWlCLENBQUE7SUFDakIsNkNBQTZDO0lBQzdDLGlDQUF1QixDQUFBO0lBQ3ZCLGlEQUFpRDtJQUNqRCwwQ0FBZ0MsQ0FBQTtBQUNsQyxDQUFDLEVBVFcsTUFBTSxLQUFOLE1BQU0sUUFTakI7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IGVuY29kaW5nIGZvciB0ZXh0IG9wZXJhdGlvbnMuXG4gKiBAc3VtbWFyeSBUaGUgc3RhbmRhcmQgVVRGLTggZW5jb2RpbmcgdXNlZCBmb3IgdGV4dCBwcm9jZXNzaW5nLlxuICogQGNvbnN0IHtzdHJpbmd9IEVuY29kaW5nXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBFbmNvZGluZyA9IFwidXRmLThcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVndWxhciBleHByZXNzaW9uIGZvciBzZW1hbnRpYyB2ZXJzaW9uaW5nLlxuICogQHN1bW1hcnkgQSByZWdleCBwYXR0ZXJuIHRvIG1hdGNoIGFuZCBwYXJzZSBzZW1hbnRpYyB2ZXJzaW9uIHN0cmluZ3MuXG4gKiBAY29uc3Qge1JlZ0V4cH0gU2VtVmVyc2lvblJlZ2V4XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBTZW1WZXJzaW9uUmVnZXggPVxuICAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSg/Oi0oWzAtOUEtWmEtei1dKyg/OlxcLlswLTlBLVphLXpdKSkpL2c7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVudW0gZm9yIHNlbWFudGljIHZlcnNpb24gY29tcG9uZW50cy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHRocmVlIGxldmVscyBvZiBzZW1hbnRpYyB2ZXJzaW9uaW5nOiBQQVRDSCwgTUlOT1IsIGFuZCBNQUpPUi5cbiAqIEBlbnVtIHtzdHJpbmd9XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBlbnVtIFNlbVZlcnNpb24ge1xuICAvKiogUGF0Y2ggdmVyc2lvbiBmb3IgYmFja3dhcmRzLWNvbXBhdGlibGUgYnVnIGZpeGVzLiAqL1xuICBQQVRDSCA9IFwicGF0Y2hcIixcbiAgLyoqIE1pbm9yIHZlcnNpb24gZm9yIGJhY2t3YXJkcy1jb21wYXRpYmxlIG5ldyBmZWF0dXJlcy4gKi9cbiAgTUlOT1IgPSBcIm1pbm9yXCIsXG4gIC8qKiBNYWpvciB2ZXJzaW9uIGZvciBjaGFuZ2VzIHRoYXQgYnJlYWsgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICovXG4gIE1BSk9SID0gXCJtYWpvclwiLFxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBGbGFnIHRvIGluZGljYXRlIG5vbi1DSSBlbnZpcm9ubWVudC5cbiAqIEBzdW1tYXJ5IFVzZWQgdG8gc3BlY2lmeSB0aGF0IGEgY29tbWFuZCBzaG91bGQgcnVuIG91dHNpZGUgb2YgYSBDb250aW51b3VzIEludGVncmF0aW9uIGVudmlyb25tZW50LlxuICogQGNvbnN0IHtzdHJpbmd9IE5vQ0lGTGFnXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBOb0NJRkxhZyA9IFwiLW5vLWNpXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEtleSBmb3IgdGhlIHNldHVwIHNjcmlwdCBpbiBwYWNrYWdlLmpzb24uXG4gKiBAc3VtbWFyeSBJZGVudGlmaWVzIHRoZSBzY3JpcHQgdGhhdCBydW5zIGFmdGVyIHBhY2thZ2UgaW5zdGFsbGF0aW9uLlxuICogQGNvbnN0IHtzdHJpbmd9IFNldHVwU2NyaXB0S2V5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBTZXR1cFNjcmlwdEtleSA9IFwicG9zdGluc3RhbGxcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRW51bSBmb3IgdmFyaW91cyBhdXRoZW50aWNhdGlvbiB0b2tlbnMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBmaWxlIG5hbWVzIGZvciBzdG9yaW5nIGRpZmZlcmVudCB0eXBlcyBvZiBhdXRoZW50aWNhdGlvbiB0b2tlbnMuXG4gKiBAZW51bSB7c3RyaW5nfVxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZW51bSBUb2tlbnMge1xuICAvKiogR2l0IGF1dGhlbnRpY2F0aW9uIHRva2VuIGZpbGUgbmFtZS4gKi9cbiAgR0lUID0gXCIudG9rZW5cIixcbiAgLyoqIE5QTSBhdXRoZW50aWNhdGlvbiB0b2tlbiBmaWxlIG5hbWUuICovXG4gIE5QTSA9IFwiLm5wbXRva2VuXCIsXG4gIC8qKiBEb2NrZXIgYXV0aGVudGljYXRpb24gdG9rZW4gZmlsZSBuYW1lLiAqL1xuICBET0NLRVIgPSBcIi5kb2NrZXJ0b2tlblwiLFxuICAvKiogQ29uZmx1ZW5jZSBhdXRoZW50aWNhdGlvbiB0b2tlbiBmaWxlIG5hbWUuICovXG4gIENPTkZMVUVOQ0UgPSBcIi5jb25mbHVlbmNlLXRva2VuXCIsXG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvZGUgdXNlZCB0byBpbmRpY2F0ZSBhbiBvcGVyYXRpb24gd2FzIGFib3J0ZWQuXG4gKiBAc3VtbWFyeSBTdGFuZGFyZCBtZXNzYWdlIHVzZWQgd2hlbiBhIHByb2Nlc3MgaXMgbWFudWFsbHkgdGVybWluYXRlZC5cbiAqIEBjb25zdCB7c3RyaW5nfSBBYm9ydENvZGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGNvbnN0IEFib3J0Q29kZSA9IFwiQWJvcnRlZFwiO1xuIl19
|