specmatic 2.0.38 → 2.0.41

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.
@@ -10,7 +10,7 @@ var _fastXmlParser = require("fast-xml-parser");
10
10
  var _fs = _interopRequireDefault(require("fs"));
11
11
  var _logger = _interopRequireDefault(require("../common/logger"));
12
12
  var _runner = require("../common/runner");
13
- var _expressListEndpoints = _interopRequireDefault(require("express-list-endpoints"));
13
+ var _expressListEndpoints = _interopRequireDefault(require("../lib/express-list-endpoints"));
14
14
  var _http = _interopRequireDefault(require("http"));
15
15
  var _shutdownUtils = require("./shutdownUtils");
16
16
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
@@ -306,4 +306,4 @@ var convertEndpointToSpringSyntax = function convertEndpointToSpringSyntax(path)
306
306
  var removeRegexFromPath = function removeRegexFromPath(path) {
307
307
  return path.replace(/\([^()]*\)/g, '');
308
308
  };
309
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXhpb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wYXRoIiwiX2Zhc3RYbWxQYXJzZXIiLCJfZnMiLCJfbG9nZ2VyIiwiX3J1bm5lciIsIl9leHByZXNzTGlzdEVuZHBvaW50cyIsIl9odHRwIiwiX3NodXRkb3duVXRpbHMiLCJlIiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJ0IiwiciIsIk9iamVjdCIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiYSIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIlN0dWIiLCJleHBvcnRzIiwiaG9zdCIsInBvcnQiLCJ1cmwiLCJwcm9jZXNzIiwic3RhcnRTdHViIiwiYXJncyIsImNtZCIsImNvbmNhdCIsImpvaW4iLCJsb2dnZXIiLCJpbmZvIiwiZGVidWciLCJyZWplY3QiLCJqYXZhUHJvY2VzcyIsImNhbGxDb3JlIiwiZXJyIiwiZXJyb3IiLCJtZXNzYWdlIiwiaW5kZXhPZiIsInN0dWJJbmZvIiwic3BsaXQiLCJfdXJsSW5mbyRsZW5ndGgiLCJ0cmltIiwidXJsSW5mbyIsImV4ZWMiLCJwYXJzZUludCIsInN0b3BTdHViIiwiX3JlZiIsIl9jYWxsZWUiLCJzdHViIiwiX2phdmFQcm9jZXNzJHN0ZG91dCIsIl9qYXZhUHJvY2VzcyRzdGRlcnIiLCJfY2FsbGVlJCIsIl9jb250ZXh0Iiwic3Rkb3V0IiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RkZXJyIiwiZ3JhY2VmdWxTaHV0ZG93biIsIl94IiwidGVzdFdpdGhBcGlDb3ZlcmFnZSIsIl9yZWYyIiwiX2NhbGxlZTMiLCJleHByZXNzQXBwIiwiY29udHJhY3RQYXRoIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiX3JlZjMiLCJfY2FsbGVlMiIsIl9yZWplY3QiLCJhcGlDb3ZlcmFnZVNlcnZlciIsInJlc3VsdHMiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJzdGFydEFwaUNvdmVyYWdlU2VydmVyIiwidGVzdCIsImNsb3NlIiwiX3g3IiwiX3g4IiwiX3gyIiwiX3gzIiwiX3g0IiwiX3g1IiwiX3g2Iiwic3BlY3NQYXRoIiwicGF0aCIsInJlcG9ydERpciIsImZzIiwicm1TeW5jIiwicmVjdXJzaXZlIiwiZm9yY2UiLCJ0ZXN0Q2FzZXMiLCJwYXJzZUp1bml0WE1MIiwidG90YWwiLCJmYWlsdXJlIiwiZmlsdGVyIiwidGVzdGNhc2UiLCJzdWNjZXNzIiwicmVzdWx0IiwiY29uc29sZSIsImxvZyIsInNob3dUZXN0UmVzdWx0cyIsInRlc3RGbiIsIm1hcCIsIm5hbWVUZW1wQXJyIiwicmVwbGFjZSIsInNraXBwZWQiLCJzZXRFeHBlY3RhdGlvbnMiLCJzdHViUGF0aCIsInN0dWJTZXJ2ZXJCYXNlVXJsIiwic3R1YlJlc3BvbnNlIiwic2V0RXhwZWN0YXRpb25Kc29uIiwiYXhpb3MiLCJwb3N0IiwicmVzcG9uc2UiLCJkYXRhIiwiX2VyciRyZXNwb25zZSIsInNldEV4cGVjdGF0aW9uc0Vycm9yTWVzc2FnZSIsImhlYWRlcnMiLCJlcnJvclRleHQiLCJwcmludEphclZlcnNpb24iLCJhcHAiLCJodHRwIiwiY3JlYXRlU2VydmVyIiwiX3JlcSIsInJlcyIsIndyaXRlSGVhZCIsImVuZFBvaW50cyIsIkpTT04iLCJzdHJpbmdpZnkiLCJleHRyYWN0RW5kUG9pbnRzIiwiZW5kIiwib24iLCJsaXN0ZW4iLCJhZGRyZXNzIiwiZW52IiwicmVwb3J0UGF0aCIsInJlYWRGaWxlU3luYyIsInBhcnNlciIsIlhNTFBhcnNlciIsInJlc3VsdFhtbCIsInBhcnNlIiwidGVzdHN1aXRlIiwiQXJyYXkiLCJpc0FycmF5IiwibGlzdEVuZFBvaW50cyIsImRldGFpbHMiLCJsaXN0RXhwcmVzc0VuZHBvaW50cyIsImFwaURldGFpbCIsIm1ldGhvZHMiLCJzcHJpbmdBY3R1YXRvclBheWxvYWQiLCJjb250ZXh0cyIsImFwcGxpY2F0aW9uIiwibWFwcGluZ3MiLCJkaXNwYXRjaGVyU2VydmxldHMiLCJkaXNwYXRjaGVyU2VydmxldCIsInNvcnQiLCJyZXF1ZXN0TWFwcGluZ0NvbmRpdGlvbnMiLCJwYXR0ZXJucyIsImNvbnZlcnRFbmRwb2ludFRvU3ByaW5nU3ludGF4IiwicmVtb3ZlUmVnZXhGcm9tUGF0aCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tICdheGlvcydcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBDaGlsZFByb2Nlc3MgfSBmcm9tICdjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHsgWE1MUGFyc2VyIH0gZnJvbSAnZmFzdC14bWwtcGFyc2VyJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9jb21tb24vbG9nZ2VyJ1xuaW1wb3J0IHsgY2FsbENvcmUgfSBmcm9tICcuLi9jb21tb24vcnVubmVyJ1xuaW1wb3J0IGxpc3RFeHByZXNzRW5kcG9pbnRzIGZyb20gJ2V4cHJlc3MtbGlzdC1lbmRwb2ludHMnXG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJ1xuaW1wb3J0IHsgQWRkcmVzc0luZm8gfSBmcm9tICduZXQnXG5pbXBvcnQgeyBncmFjZWZ1bFNodXRkb3duIH0gZnJvbSAnLi9zaHV0ZG93blV0aWxzJ1xuXG5leHBvcnQgY2xhc3MgU3R1YiB7XG4gICAgaG9zdDogc3RyaW5nXG4gICAgcG9ydDogbnVtYmVyXG4gICAgdXJsOiBzdHJpbmdcbiAgICBwcm9jZXNzOiBDaGlsZFByb2Nlc3NcbiAgICBjb25zdHJ1Y3Rvcihob3N0OiBzdHJpbmcsIHBvcnQ6IG51bWJlciwgdXJsOiBzdHJpbmcsIHByb2Nlc3M6IENoaWxkUHJvY2Vzcykge1xuICAgICAgICB0aGlzLmhvc3QgPSBob3N0XG4gICAgICAgIHRoaXMucG9ydCA9IHBvcnRcbiAgICAgICAgdGhpcy51cmwgPSB1cmxcbiAgICAgICAgdGhpcy5wcm9jZXNzID0gcHJvY2Vzc1xuICAgIH1cbn1cblxuY29uc3Qgc3RhcnRTdHViID0gKGhvc3Q/OiBzdHJpbmcsIHBvcnQ/OiBudW1iZXIsIGFyZ3M/OiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogUHJvbWlzZTxTdHViPiA9PiB7XG4gICAgdmFyIGNtZCA9IGBzdHViYFxuICAgIGlmIChob3N0KSBjbWQgKz0gYCAtLWhvc3Q9JHtob3N0fWBcbiAgICBpZiAocG9ydCkgY21kICs9IGAgLS1wb3J0PSR7cG9ydH1gXG4gICAgaWYgKGFyZ3MpIGNtZCArPSAnICcgKyBhcmdzLmpvaW4oJyAnKVxuXG4gICAgbG9nZ2VyLmluZm8oJ1N0dWI6IFN0YXJ0aW5nIHNlcnZlcicpXG4gICAgbG9nZ2VyLmRlYnVnKGBTdHViOiBFeGVjdXRpbmcgXCIke2NtZH1cImApXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBqYXZhUHJvY2VzcyA9IGNhbGxDb3JlKFxuICAgICAgICAgICAgY21kLFxuICAgICAgICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFN0dWI6IEV4aXRlZCB3aXRoIGVycm9yICR7ZXJyfWApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChtZXNzYWdlLCBlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5kZXhPZignU3R1YiBzZXJ2ZXIgaXMgcnVubmluZycpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBTdHViOiAke21lc3NhZ2V9YClcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0dWJJbmZvID0gbWVzc2FnZS5zcGxpdCgnb24nKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmxlbmd0aCA8IDIpIHJlamVjdCgnQ2Fubm90IGRldGVybWluZSB1cmwgZnJvbSBzdHViIG91dHB1dCcpXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBzdHViSW5mb1sxXS50cmltKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxJbmZvID0gLyguKj8pOlxcL1xcLyguKj8pOihbMC05XSspLy5leGVjKHVybClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHVybEluZm8/Lmxlbmd0aCA/PyAwKSA8IDQpIHJlamVjdCgnQ2Fubm90IGRldGVybWluZSBob3N0IGFuZCBwb3J0IGZyb20gc3R1YiBvdXRwdXQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgcmVzb2x2ZShuZXcgU3R1Yih1cmxJbmZvIVsyXSwgcGFyc2VJbnQodXJsSW5mbyFbM10pLCB1cmxJbmZvIVswXSwgamF2YVByb2Nlc3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaW5kZXhPZignQWRkcmVzcyBhbHJlYWR5IGluIHVzZScpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgU3R1YjogJHttZXNzYWdlfWApXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoJ0FkZHJlc3MgYWxyZWFkeSBpbiB1c2UnKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBTdHViOiAke21lc3NhZ2V9YClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgU3R1YjogJHttZXNzYWdlfWApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgfSlcbn1cblxuY29uc3Qgc3RvcFN0dWIgPSBhc3luYyAoc3R1YjogU3R1YikgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgU3R1YjogU3RvcHBpbmcgc2VydmVyIGF0ICR7c3R1Yi51cmx9YClcbiAgICBjb25zdCBqYXZhUHJvY2VzcyA9IHN0dWIucHJvY2Vzc1xuICAgIGphdmFQcm9jZXNzLnN0ZG91dD8ucmVtb3ZlQWxsTGlzdGVuZXJzKClcbiAgICBqYXZhUHJvY2Vzcy5zdGRlcnI/LnJlbW92ZUFsbExpc3RlbmVycygpXG4gICAgamF2YVByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzKCdjbG9zZScpXG4gICAgbG9nZ2VyLmRlYnVnKCdUcnlpbmcgdG8gc3RvcCBzdHViIHByb2Nlc3MgZ3JhY2VmdWxseSAuLi4nKVxuICAgIGF3YWl0IGdyYWNlZnVsU2h1dGRvd24oamF2YVByb2Nlc3MpXG4gICAgbG9nZ2VyLmRlYnVnKCdDb21wbGV0ZWQgZ3JhY2VmdWwgdGVybWluYXRpb24gb2YgdGhlIHN0dWIgcHJvY2VzcycpXG4gICAgbG9nZ2VyLmluZm8oYFN0dWI6IFN0b3BwZWQgc2VydmVyIGF0ICR7c3R1Yi51cmx9YClcbn1cblxuY29uc3QgdGVzdFdpdGhBcGlDb3ZlcmFnZSA9IGFzeW5jIChcbiAgICBleHByZXNzQXBwOiBhbnksXG4gICAgaG9zdD86IHN0cmluZyxcbiAgICBwb3J0PzogbnVtYmVyLFxuICAgIGNvbnRyYWN0UGF0aD86IHN0cmluZyxcbiAgICBhcmdzPzogKHN0cmluZyB8IG51bWJlcilbXVxuKTogUHJvbWlzZTx7IFtrOiBzdHJpbmddOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuICAgICAgICBsZXQgYXBpQ292ZXJhZ2VTZXJ2ZXIgPSBhd2FpdCBzdGFydEFwaUNvdmVyYWdlU2VydmVyKGV4cHJlc3NBcHApXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0ZXN0KGhvc3QsIHBvcnQsIGNvbnRyYWN0UGF0aCwgYXJncylcbiAgICAgICAgYXBpQ292ZXJhZ2VTZXJ2ZXIuY2xvc2UoKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHRzKVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmNvbnN0IHRlc3QgPSAoaG9zdD86IHN0cmluZywgcG9ydD86IG51bWJlciwgY29udHJhY3RQYXRoPzogc3RyaW5nLCBhcmdzPzogKHN0cmluZyB8IG51bWJlcilbXSk6IFByb21pc2U8eyBbazogc3RyaW5nXTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+ID0+IHtcbiAgICBjb25zdCBzcGVjc1BhdGggPSBwYXRoLnJlc29sdmUoY29udHJhY3RQYXRoICsgJycpXG5cbiAgICB2YXIgY21kID0gYHRlc3RgXG4gICAgaWYgKGNvbnRyYWN0UGF0aCkgY21kICs9IGAgJHtzcGVjc1BhdGh9YFxuICAgIGNtZCArPSAnIC0tanVuaXRSZXBvcnREaXI9ZGlzdC90ZXN0LXJlcG9ydCdcbiAgICBpZiAoaG9zdCkgY21kICs9IGAgLS1ob3N0PSR7aG9zdH1gXG4gICAgaWYgKHBvcnQpIGNtZCArPSBgIC0tcG9ydD0ke3BvcnR9YFxuICAgIGlmIChhcmdzKSBjbWQgKz0gJyAnICsgYXJncy5qb2luKCcgJylcblxuICAgIGxvZ2dlci5pbmZvKCdUZXN0OiBSdW5uaW5nJylcbiAgICBsb2dnZXIuZGVidWcoYFRlc3Q6IEV4ZWN1dGluZyBcIiR7Y21kfVwiYClcblxuICAgIGNvbnN0IHJlcG9ydERpciA9IHBhdGgucmVzb2x2ZSgnZGlzdC90ZXN0LXJlcG9ydCcpXG4gICAgZnMucm1TeW5jKHJlcG9ydERpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICAgICAgY2FsbENvcmUoXG4gICAgICAgICAgICBjbWQsXG4gICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSBsb2dnZXIuZXJyb3IoYFRlc3Q6IEZhaWxlZCB3aXRoIGVycm9yICR7ZXJyfWApXG4gICAgICAgICAgICAgICAgdmFyIHRlc3RDYXNlcyA9IHBhcnNlSnVuaXRYTUwoKVxuICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gdGVzdENhc2VzLmxlbmd0aFxuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWx1cmUgPSB0ZXN0Q2FzZXMuZmlsdGVyKCh0ZXN0Y2FzZTogeyBbaWQ6IHN0cmluZ106IGFueSB9KSA9PiB0ZXN0Y2FzZVsnZmFpbHVyZSddIHx8IHRlc3RjYXNlWydza2lwcGVkJ10pLmxlbmd0aFxuICAgICAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0b3RhbCAtIGZhaWx1cmVcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0geyB0b3RhbCwgc3VjY2VzcywgZmFpbHVyZSB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKG1lc3NhZ2UsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5kZXhPZignQVBJIENPVkVSQUdFIFNVTU1BUlknKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpIC8vTG9nIGFsd2F5cyBmb3IgYWxsIGxvZyBsZXZlbHNcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXJbZXJyb3IgPyAnZXJyb3InIDogJ2RlYnVnJ10oYFRlc3Q6ICR7bWVzc2FnZX1gKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgIH0pXG59XG5cbmNvbnN0IHNob3dUZXN0UmVzdWx0cyA9ICh0ZXN0Rm46IChuYW1lOiBzdHJpbmcsIGNiOiAoKSA9PiB2b2lkKSA9PiB2b2lkKSA9PiB7XG4gICAgdmFyIHRlc3RDYXNlcyA9IHBhcnNlSnVuaXRYTUwoKVxuICAgIHRlc3RDYXNlcy5tYXAoZnVuY3Rpb24gKHRlc3RjYXNlOiB7IFtpZDogc3RyaW5nXTogYW55IH0pIHtcbiAgICAgICAgdmFyIG5hbWUgPSAnTm8gTmFtZSdcbiAgICAgICAgaWYgKHRlc3RjYXNlWydzeXN0ZW0tb3V0J10pIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVUZW1wQXJyID0gdGVzdGNhc2VbJ3N5c3RlbS1vdXQnXVxuICAgICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxuL2csICcnKVxuICAgICAgICAgICAgICAgIC5zcGxpdCgvZGlzcGxheS1uYW1lOi4qU2NlbmFyaW86IC8pXG4gICAgICAgICAgICBpZiAobmFtZVRlbXBBcnIubGVuZ3RoID4gMSkgbmFtZSA9IG5hbWVUZW1wQXJyWzFdLnRyaW0oKVxuICAgICAgICB9XG4gICAgICAgIHRlc3RGbihuYW1lLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGVzdGNhc2UuZmFpbHVyZSB8fCB0ZXN0Y2FzZS5za2lwcGVkKSB0aHJvdyBuZXcgRXJyb3IoJ0RpZCBub3QgcGFzcycpXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuY29uc3Qgc2V0RXhwZWN0YXRpb25zID0gKHN0dWJQYXRoOiBzdHJpbmcsIHN0dWJTZXJ2ZXJCYXNlVXJsPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3Qgc3R1YlJlc3BvbnNlID0gcmVxdWlyZShwYXRoLnJlc29sdmUoc3R1YlBhdGgpKVxuICAgIHJldHVybiBzZXRFeHBlY3RhdGlvbkpzb24oc3R1YlJlc3BvbnNlLCBzdHViU2VydmVyQmFzZVVybClcbn1cblxuY29uc3Qgc2V0RXhwZWN0YXRpb25Kc29uID0gKHN0dWJSZXNwb25zZTogYW55LCBzdHViU2VydmVyQmFzZVVybD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHN0dWJTZXJ2ZXJCYXNlVXJsID0gc3R1YlNlcnZlckJhc2VVcmwgfHwgJ2h0dHA6Ly9sb2NhbGhvc3Q6OTAwMCdcbiAgICBcbiAgICBsb2dnZXIuaW5mbyhgU2V0IEV4cGVjdGF0aW9uczogU3R1YiB1cmwgaXMgJHtzdHViU2VydmVyQmFzZVVybH1gKVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3NcbiAgICAgICAgICAgIC5wb3N0KGAke3N0dWJTZXJ2ZXJCYXNlVXJsfS9fc3BlY21hdGljL2V4cGVjdGF0aW9uc2AsIHN0dWJSZXNwb25zZSlcbiAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoYFNldCBFeHBlY3RhdGlvbnM6ICR7cmVzcG9uc2UuZGF0YX1gKVxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdTZXQgRXhwZWN0YXRpb25zOiBGaW5pc2hlZCcpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIHNldEV4cGVjdGF0aW9uc0Vycm9yTWVzc2FnZSA9IGBTZXQgRXhwZWN0YXRpb25zOiBGYWlsZWQgd2l0aCBlcnJvciAke2Vycn1gXG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIGRhdGEgaXMgaW4gdGV4dCBmb3JtYXRcbiAgICAgICAgICAgICAgICBpZiAoZXJyICYmIGVyci5yZXNwb25zZT8uaGVhZGVyc1snY29udGVudC10eXBlJ10gPT09ICd0ZXh0L3BsYWluJykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGEgY2hlY2sgdG8gaGFuZGxlIHRleHQgY29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JUZXh0ID0gdHlwZW9mIGVyci5yZXNwb25zZS5kYXRhID09PSAnc3RyaW5nJyA/IGVyci5yZXNwb25zZS5kYXRhIDogXCJFcnJvciB0ZXh0IG5vdCBhdmFpbGFibGVcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEV4cGVjdGF0aW9uc0Vycm9yTWVzc2FnZSArPSBgIC0gJHtlcnJvclRleHR9YDtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiRmFpbGVkIHRvIHJldHJpZXZlIHRleHQgZXJyb3IgbWVzc2FnZS5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNldEV4cGVjdGF0aW9uc0Vycm9yTWVzc2FnZSlcbiAgICAgICAgICAgICAgICByZWplY3Qoc2V0RXhwZWN0YXRpb25zRXJyb3JNZXNzYWdlKVxuICAgICAgICAgICAgfSlcbiAgICB9KVxufVxuXG5jb25zdCBwcmludEphclZlcnNpb24gPSAoKSA9PiB7XG4gICAgY29uc3QgY21kID0gYC0tdmVyc2lvbmBcbiAgICBsb2dnZXIuaW5mbygnUHJpbnQgSmFyIFZlcnNpb246IFJ1bm5pbmcnKVxuICAgIGxvZ2dlci5kZWJ1ZyhgUHJpbnQgSmFyIFZlcnNpb246IEV4ZWN1dGluZyBcIiR7Y21kfVwiYClcblxuICAgIGNhbGxDb3JlKFxuICAgICAgICBjbWQsXG4gICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgbG9nZ2VyLmVycm9yKGBQcmludCBKYXIgVmVyc2lvbjogRmFpbGVkIHdpdGggZXJyb3IgJHtlcnJ9YClcbiAgICAgICAgfSxcbiAgICAgICAgKG1lc3NhZ2UsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIGxvZ2dlci5lcnJvcihgUHJpbnQgSmFyIFZlcnNpb246ICR7bWVzc2FnZX1gKVxuICAgICAgICAgICAgZWxzZSBjb25zb2xlLmxvZyhgJHttZXNzYWdlfWApXG4gICAgICAgIH1cbiAgICApXG59XG5cbmNvbnN0IHN0YXJ0QXBpQ292ZXJhZ2VTZXJ2ZXIgPSAoZXhwcmVzc0FwcDogYW55KTogUHJvbWlzZTxodHRwLlNlcnZlcj4gPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgUmVnaXN0ZXJpbmcgQVBJIGVuZHBvaW50IGZvciBjb3ZlcmFnZWApXG4gICAgbGV0IGFwcCA9IGh0dHAuY3JlYXRlU2VydmVyKChfcmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLndyaXRlSGVhZCgyMDAsIHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9KVxuICAgICAgICBjb25zdCBlbmRQb2ludHMgPSBKU09OLnN0cmluZ2lmeShleHRyYWN0RW5kUG9pbnRzKGV4cHJlc3NBcHApKVxuICAgICAgICBsb2dnZXIuZGVidWcoYEVuZHBvaW50czogJHtlbmRQb2ludHN9YClcbiAgICAgICAgcmVzLmVuZChlbmRQb2ludHMpXG4gICAgfSlcbiAgICByZXR1cm4gbmV3IFByb21pc2U8aHR0cC5TZXJ2ZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXBwLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHN0YXJ0aW5nIGVuZCBwb2ludHMgc2VydmVyIGZvciBhcGkgY292ZXJhZ2UnLCBlcnIpXG4gICAgICAgICAgICByZWplY3QoJ0Vycm9yIHdoaWxlIHN0YXJ0aW5nIGVuZCBwb2ludHMgc2VydmVyIGZvciBhcGkgY292ZXJhZ2UnKVxuICAgICAgICB9KVxuICAgICAgICBhcHAubGlzdGVuKHsgaG9zdDogJzEyNy4wLjAuMScsIHBvcnQ6IDAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWRkcmVzcyA9IGFwcC5hZGRyZXNzKCkgYXMgQWRkcmVzc0luZm8gfCBudWxsXG4gICAgICAgICAgICBwcm9jZXNzLmVudlsnZW5kcG9pbnRzQVBJJ10gPSBgaHR0cDovLyR7YWRkcmVzcz8uYWRkcmVzc306JHthZGRyZXNzPy5wb3J0fWBcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBFbmRwb2ludHMgQVBJIHJlZ2lzdGVyZWQgYXQgJHtwcm9jZXNzLmVudlsnZW5kcG9pbnRzQVBJJ119YClcbiAgICAgICAgICAgIHJlc29sdmUoYXBwKVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmNvbnN0IHBhcnNlSnVuaXRYTUwgPSAoKSA9PiB7XG4gICAgY29uc3QgcmVwb3J0UGF0aCA9IHBhdGgucmVzb2x2ZSgnZGlzdC90ZXN0LXJlcG9ydC9URVNULWp1bml0LWp1cGl0ZXIueG1sJylcbiAgICB2YXIgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhyZXBvcnRQYXRoKVxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBYTUxQYXJzZXIoKVxuICAgIHZhciByZXN1bHRYbWwgPSBwYXJzZXIucGFyc2UoZGF0YSlcbiAgICByZXN1bHRYbWwudGVzdHN1aXRlLnRlc3RjYXNlID0gQXJyYXkuaXNBcnJheShyZXN1bHRYbWwudGVzdHN1aXRlLnRlc3RjYXNlKSA/IHJlc3VsdFhtbC50ZXN0c3VpdGUudGVzdGNhc2UgOiBbcmVzdWx0WG1sLnRlc3RzdWl0ZS50ZXN0Y2FzZV1cbiAgICByZXR1cm4gcmVzdWx0WG1sLnRlc3RzdWl0ZS50ZXN0Y2FzZVxufVxuXG5jb25zdCBsaXN0RW5kUG9pbnRzID0gKGV4cHJlc3NBcHA6IGFueSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSA9PiB7XG4gICAgY29uc3QgZGV0YWlscyA9IGxpc3RFeHByZXNzRW5kcG9pbnRzKGV4cHJlc3NBcHApXG4gICAgbGV0IGVuZFBvaW50czogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge31cbiAgICBkZXRhaWxzLm1hcChhcGlEZXRhaWwgPT4ge1xuICAgICAgICBlbmRQb2ludHNbYXBpRGV0YWlsLnBhdGhdID0gYXBpRGV0YWlsLm1ldGhvZHNcbiAgICB9KVxuICAgIGRlbGV0ZSBlbmRQb2ludHNbJyonXVxuICAgIHJldHVybiBlbmRQb2ludHNcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEVuZFBvaW50cyhleHByZXNzQXBwOiBhbnkpIHtcbiAgICBsZXQgZW5kUG9pbnRzID0gbGlzdEVuZFBvaW50cyhleHByZXNzQXBwKVxuICAgIGxldCBzcHJpbmdBY3R1YXRvclBheWxvYWQgPSB7XG4gICAgICAgIGNvbnRleHRzOiB7XG4gICAgICAgICAgICBhcHBsaWNhdGlvbjoge1xuICAgICAgICAgICAgICAgIG1hcHBpbmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJTZXJ2bGV0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlclNlcnZsZXQ6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH1cbiAgICBPYmplY3Qua2V5cyhlbmRQb2ludHMpXG4gICAgICAgIC5zb3J0KClcbiAgICAgICAgLm1hcChwYXRoID0+IHtcbiAgICAgICAgICAgIHNwcmluZ0FjdHVhdG9yUGF5bG9hZC5jb250ZXh0cy5hcHBsaWNhdGlvbi5tYXBwaW5ncy5kaXNwYXRjaGVyU2VydmxldHMuZGlzcGF0Y2hlclNlcnZsZXQucHVzaCh7XG4gICAgICAgICAgICAgICAgZGV0YWlsczoge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ0NvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHM6IGVuZFBvaW50c1twYXRoXS5zb3J0KCksXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuczogW2NvbnZlcnRFbmRwb2ludFRvU3ByaW5nU3ludGF4KHBhdGgpXS5tYXAocmVtb3ZlUmVnZXhGcm9tUGF0aClcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSBhcyBuZXZlcilcbiAgICAgICAgfSlcbiAgICByZXR1cm4gc3ByaW5nQWN0dWF0b3JQYXlsb2FkXG59XG5cbmNvbnN0IGNvbnZlcnRFbmRwb2ludFRvU3ByaW5nU3ludGF4ID0gKHBhdGg6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoLzooW14vXSspL2csICd7JDF9JykucmVwbGFjZSgvXFxcXC9nLCAnJylcbn1cblxuY29uc3QgcmVtb3ZlUmVnZXhGcm9tUGF0aCA9IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXChbXigpXSpcXCkvZywgJycpXG59XG5cbmV4cG9ydCB7IHN0YXJ0U3R1Yiwgc3RvcFN0dWIsIHRlc3QsIHRlc3RXaXRoQXBpQ292ZXJhZ2UsIHNldEV4cGVjdGF0aW9ucywgc2V0RXhwZWN0YXRpb25Kc29uLCBwcmludEphclZlcnNpb24sIHNob3dUZXN0UmVzdWx0cyB9XG5leHBvcnQgeyBzdGFydEFwaUNvdmVyYWdlU2VydmVyIH1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUUsY0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsR0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFB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
309
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXhpb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wYXRoIiwiX2Zhc3RYbWxQYXJzZXIiLCJfZnMiLCJfbG9nZ2VyIiwiX3J1bm5lciIsIl9leHByZXNzTGlzdEVuZHBvaW50cyIsIl9odHRwIiwiX3NodXRkb3duVXRpbHMiLCJlIiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJ0IiwiciIsIk9iamVjdCIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiYSIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIlN0dWIiLCJleHBvcnRzIiwiaG9zdCIsInBvcnQiLCJ1cmwiLCJwcm9jZXNzIiwic3RhcnRTdHViIiwiYXJncyIsImNtZCIsImNvbmNhdCIsImpvaW4iLCJsb2dnZXIiLCJpbmZvIiwiZGVidWciLCJyZWplY3QiLCJqYXZhUHJvY2VzcyIsImNhbGxDb3JlIiwiZXJyIiwiZXJyb3IiLCJtZXNzYWdlIiwiaW5kZXhPZiIsInN0dWJJbmZvIiwic3BsaXQiLCJfdXJsSW5mbyRsZW5ndGgiLCJ0cmltIiwidXJsSW5mbyIsImV4ZWMiLCJwYXJzZUludCIsInN0b3BTdHViIiwiX3JlZiIsIl9jYWxsZWUiLCJzdHViIiwiX2phdmFQcm9jZXNzJHN0ZG91dCIsIl9qYXZhUHJvY2VzcyRzdGRlcnIiLCJfY2FsbGVlJCIsIl9jb250ZXh0Iiwic3Rkb3V0IiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RkZXJyIiwiZ3JhY2VmdWxTaHV0ZG93biIsIl94IiwidGVzdFdpdGhBcGlDb3ZlcmFnZSIsIl9yZWYyIiwiX2NhbGxlZTMiLCJleHByZXNzQXBwIiwiY29udHJhY3RQYXRoIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiX3JlZjMiLCJfY2FsbGVlMiIsIl9yZWplY3QiLCJhcGlDb3ZlcmFnZVNlcnZlciIsInJlc3VsdHMiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJzdGFydEFwaUNvdmVyYWdlU2VydmVyIiwidGVzdCIsImNsb3NlIiwiX3g3IiwiX3g4IiwiX3gyIiwiX3gzIiwiX3g0IiwiX3g1IiwiX3g2Iiwic3BlY3NQYXRoIiwicGF0aCIsInJlcG9ydERpciIsImZzIiwicm1TeW5jIiwicmVjdXJzaXZlIiwiZm9yY2UiLCJ0ZXN0Q2FzZXMiLCJwYXJzZUp1bml0WE1MIiwidG90YWwiLCJmYWlsdXJlIiwiZmlsdGVyIiwidGVzdGNhc2UiLCJzdWNjZXNzIiwicmVzdWx0IiwiY29uc29sZSIsImxvZyIsInNob3dUZXN0UmVzdWx0cyIsInRlc3RGbiIsIm1hcCIsIm5hbWVUZW1wQXJyIiwicmVwbGFjZSIsInNraXBwZWQiLCJzZXRFeHBlY3RhdGlvbnMiLCJzdHViUGF0aCIsInN0dWJTZXJ2ZXJCYXNlVXJsIiwic3R1YlJlc3BvbnNlIiwic2V0RXhwZWN0YXRpb25Kc29uIiwiYXhpb3MiLCJwb3N0IiwicmVzcG9uc2UiLCJkYXRhIiwiX2VyciRyZXNwb25zZSIsInNldEV4cGVjdGF0aW9uc0Vycm9yTWVzc2FnZSIsImhlYWRlcnMiLCJlcnJvclRleHQiLCJwcmludEphclZlcnNpb24iLCJhcHAiLCJodHRwIiwiY3JlYXRlU2VydmVyIiwiX3JlcSIsInJlcyIsIndyaXRlSGVhZCIsImVuZFBvaW50cyIsIkpTT04iLCJzdHJpbmdpZnkiLCJleHRyYWN0RW5kUG9pbnRzIiwiZW5kIiwib24iLCJsaXN0ZW4iLCJhZGRyZXNzIiwiZW52IiwicmVwb3J0UGF0aCIsInJlYWRGaWxlU3luYyIsInBhcnNlciIsIlhNTFBhcnNlciIsInJlc3VsdFhtbCIsInBhcnNlIiwidGVzdHN1aXRlIiwiQXJyYXkiLCJpc0FycmF5IiwibGlzdEVuZFBvaW50cyIsImRldGFpbHMiLCJsaXN0RXhwcmVzc0VuZHBvaW50cyIsImFwaURldGFpbCIsIm1ldGhvZHMiLCJzcHJpbmdBY3R1YXRvclBheWxvYWQiLCJjb250ZXh0cyIsImFwcGxpY2F0aW9uIiwibWFwcGluZ3MiLCJkaXNwYXRjaGVyU2VydmxldHMiLCJkaXNwYXRjaGVyU2VydmxldCIsInNvcnQiLCJyZXF1ZXN0TWFwcGluZ0NvbmRpdGlvbnMiLCJwYXR0ZXJucyIsImNvbnZlcnRFbmRwb2ludFRvU3ByaW5nU3ludGF4IiwicmVtb3ZlUmVnZXhGcm9tUGF0aCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tICdheGlvcydcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBDaGlsZFByb2Nlc3MgfSBmcm9tICdjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHsgWE1MUGFyc2VyIH0gZnJvbSAnZmFzdC14bWwtcGFyc2VyJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9jb21tb24vbG9nZ2VyJ1xuaW1wb3J0IHsgY2FsbENvcmUgfSBmcm9tICcuLi9jb21tb24vcnVubmVyJ1xuaW1wb3J0IGxpc3RFeHByZXNzRW5kcG9pbnRzIGZyb20gJy4uL2xpYi9leHByZXNzLWxpc3QtZW5kcG9pbnRzJztcbmltcG9ydCBodHRwIGZyb20gJ2h0dHAnXG5pbXBvcnQgeyBBZGRyZXNzSW5mbyB9IGZyb20gJ25ldCdcbmltcG9ydCB7IGdyYWNlZnVsU2h1dGRvd24gfSBmcm9tICcuL3NodXRkb3duVXRpbHMnXG5cbmV4cG9ydCBjbGFzcyBTdHViIHtcbiAgICBob3N0OiBzdHJpbmdcbiAgICBwb3J0OiBudW1iZXJcbiAgICB1cmw6IHN0cmluZ1xuICAgIHByb2Nlc3M6IENoaWxkUHJvY2Vzc1xuICAgIGNvbnN0cnVjdG9yKGhvc3Q6IHN0cmluZywgcG9ydDogbnVtYmVyLCB1cmw6IHN0cmluZywgcHJvY2VzczogQ2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIHRoaXMuaG9zdCA9IGhvc3RcbiAgICAgICAgdGhpcy5wb3J0ID0gcG9ydFxuICAgICAgICB0aGlzLnVybCA9IHVybFxuICAgICAgICB0aGlzLnByb2Nlc3MgPSBwcm9jZXNzXG4gICAgfVxufVxuXG5jb25zdCBzdGFydFN0dWIgPSAoaG9zdD86IHN0cmluZywgcG9ydD86IG51bWJlciwgYXJncz86IChzdHJpbmcgfCBudW1iZXIpW10pOiBQcm9taXNlPFN0dWI+ID0+IHtcbiAgICB2YXIgY21kID0gYHN0dWJgXG4gICAgaWYgKGhvc3QpIGNtZCArPSBgIC0taG9zdD0ke2hvc3R9YFxuICAgIGlmIChwb3J0KSBjbWQgKz0gYCAtLXBvcnQ9JHtwb3J0fWBcbiAgICBpZiAoYXJncykgY21kICs9ICcgJyArIGFyZ3Muam9pbignICcpXG5cbiAgICBsb2dnZXIuaW5mbygnU3R1YjogU3RhcnRpbmcgc2VydmVyJylcbiAgICBsb2dnZXIuZGVidWcoYFN0dWI6IEV4ZWN1dGluZyBcIiR7Y21kfVwiYClcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGphdmFQcm9jZXNzID0gY2FsbENvcmUoXG4gICAgICAgICAgICBjbWQsXG4gICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgU3R1YjogRXhpdGVkIHdpdGggZXJyb3IgJHtlcnJ9YClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKG1lc3NhZ2UsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmRleE9mKCdTdHViIHNlcnZlciBpcyBydW5uaW5nJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFN0dWI6ICR7bWVzc2FnZX1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R1YkluZm8gPSBtZXNzYWdlLnNwbGl0KCdvbicpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8ubGVuZ3RoIDwgMikgcmVqZWN0KCdDYW5ub3QgZGV0ZXJtaW5lIHVybCBmcm9tIHN0dWIgb3V0cHV0JylcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHN0dWJJbmZvWzFdLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEluZm8gPSAvKC4qPyk6XFwvXFwvKC4qPyk6KFswLTldKykvLmV4ZWModXJsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodXJsSW5mbz8ubGVuZ3RoID8/IDApIDwgNCkgcmVqZWN0KCdDYW5ub3QgZGV0ZXJtaW5lIGhvc3QgYW5kIHBvcnQgZnJvbSBzdHViIG91dHB1dCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSByZXNvbHZlKG5ldyBTdHViKHVybEluZm8hWzJdLCBwYXJzZUludCh1cmxJbmZvIVszXSksIHVybEluZm8hWzBdLCBqYXZhUHJvY2VzcykpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pbmRleE9mKCdBZGRyZXNzIGFscmVhZHkgaW4gdXNlJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBTdHViOiAke21lc3NhZ2V9YClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgnQWRkcmVzcyBhbHJlYWR5IGluIHVzZScpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoYFN0dWI6ICR7bWVzc2FnZX1gKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBTdHViOiAke21lc3NhZ2V9YClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICB9KVxufVxuXG5jb25zdCBzdG9wU3R1YiA9IGFzeW5jIChzdHViOiBTdHViKSA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBTdHViOiBTdG9wcGluZyBzZXJ2ZXIgYXQgJHtzdHViLnVybH1gKVxuICAgIGNvbnN0IGphdmFQcm9jZXNzID0gc3R1Yi5wcm9jZXNzXG4gICAgamF2YVByb2Nlc3Muc3Rkb3V0Py5yZW1vdmVBbGxMaXN0ZW5lcnMoKVxuICAgIGphdmFQcm9jZXNzLnN0ZGVycj8ucmVtb3ZlQWxsTGlzdGVuZXJzKClcbiAgICBqYXZhUHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2Nsb3NlJylcbiAgICBsb2dnZXIuZGVidWcoJ1RyeWluZyB0byBzdG9wIHN0dWIgcHJvY2VzcyBncmFjZWZ1bGx5IC4uLicpXG4gICAgYXdhaXQgZ3JhY2VmdWxTaHV0ZG93bihqYXZhUHJvY2VzcylcbiAgICBsb2dnZXIuZGVidWcoJ0NvbXBsZXRlZCBncmFjZWZ1bCB0ZXJtaW5hdGlvbiBvZiB0aGUgc3R1YiBwcm9jZXNzJylcbiAgICBsb2dnZXIuaW5mbyhgU3R1YjogU3RvcHBlZCBzZXJ2ZXIgYXQgJHtzdHViLnVybH1gKVxufVxuXG5jb25zdCB0ZXN0V2l0aEFwaUNvdmVyYWdlID0gYXN5bmMgKFxuICAgIGV4cHJlc3NBcHA6IGFueSxcbiAgICBob3N0Pzogc3RyaW5nLFxuICAgIHBvcnQ/OiBudW1iZXIsXG4gICAgY29udHJhY3RQYXRoPzogc3RyaW5nLFxuICAgIGFyZ3M/OiAoc3RyaW5nIHwgbnVtYmVyKVtdXG4pOiBQcm9taXNlPHsgW2s6IHN0cmluZ106IG51bWJlciB9IHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBhcGlDb3ZlcmFnZVNlcnZlciA9IGF3YWl0IHN0YXJ0QXBpQ292ZXJhZ2VTZXJ2ZXIoZXhwcmVzc0FwcClcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRlc3QoaG9zdCwgcG9ydCwgY29udHJhY3RQYXRoLCBhcmdzKVxuICAgICAgICBhcGlDb3ZlcmFnZVNlcnZlci5jbG9zZSgoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdHMpXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuY29uc3QgdGVzdCA9IChob3N0Pzogc3RyaW5nLCBwb3J0PzogbnVtYmVyLCBjb250cmFjdFBhdGg/OiBzdHJpbmcsIGFyZ3M/OiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogUHJvbWlzZTx7IFtrOiBzdHJpbmddOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIGNvbnN0IHNwZWNzUGF0aCA9IHBhdGgucmVzb2x2ZShjb250cmFjdFBhdGggKyAnJylcblxuICAgIHZhciBjbWQgPSBgdGVzdGBcbiAgICBpZiAoY29udHJhY3RQYXRoKSBjbWQgKz0gYCAke3NwZWNzUGF0aH1gXG4gICAgY21kICs9ICcgLS1qdW5pdFJlcG9ydERpcj1kaXN0L3Rlc3QtcmVwb3J0J1xuICAgIGlmIChob3N0KSBjbWQgKz0gYCAtLWhvc3Q9JHtob3N0fWBcbiAgICBpZiAocG9ydCkgY21kICs9IGAgLS1wb3J0PSR7cG9ydH1gXG4gICAgaWYgKGFyZ3MpIGNtZCArPSAnICcgKyBhcmdzLmpvaW4oJyAnKVxuXG4gICAgbG9nZ2VyLmluZm8oJ1Rlc3Q6IFJ1bm5pbmcnKVxuICAgIGxvZ2dlci5kZWJ1ZyhgVGVzdDogRXhlY3V0aW5nIFwiJHtjbWR9XCJgKVxuXG4gICAgY29uc3QgcmVwb3J0RGlyID0gcGF0aC5yZXNvbHZlKCdkaXN0L3Rlc3QtcmVwb3J0JylcbiAgICBmcy5ybVN5bmMocmVwb3J0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuICAgICAgICBjYWxsQ29yZShcbiAgICAgICAgICAgIGNtZCxcbiAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIGxvZ2dlci5lcnJvcihgVGVzdDogRmFpbGVkIHdpdGggZXJyb3IgJHtlcnJ9YClcbiAgICAgICAgICAgICAgICB2YXIgdGVzdENhc2VzID0gcGFyc2VKdW5pdFhNTCgpXG4gICAgICAgICAgICAgICAgY29uc3QgdG90YWwgPSB0ZXN0Q2FzZXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbHVyZSA9IHRlc3RDYXNlcy5maWx0ZXIoKHRlc3RjYXNlOiB7IFtpZDogc3RyaW5nXTogYW55IH0pID0+IHRlc3RjYXNlWydmYWlsdXJlJ10gfHwgdGVzdGNhc2VbJ3NraXBwZWQnXSkubGVuZ3RoXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IHRvdGFsIC0gZmFpbHVyZVxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB7IHRvdGFsLCBzdWNjZXNzLCBmYWlsdXJlIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAobWVzc2FnZSwgZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmRleE9mKCdBUEkgQ09WRVJBR0UgU1VNTUFSWScpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobWVzc2FnZSkgLy9Mb2cgYWx3YXlzIGZvciBhbGwgbG9nIGxldmVsc1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlcltlcnJvciA/ICdlcnJvcicgOiAnZGVidWcnXShgVGVzdDogJHttZXNzYWdlfWApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgfSlcbn1cblxuY29uc3Qgc2hvd1Rlc3RSZXN1bHRzID0gKHRlc3RGbjogKG5hbWU6IHN0cmluZywgY2I6ICgpID0+IHZvaWQpID0+IHZvaWQpID0+IHtcbiAgICB2YXIgdGVzdENhc2VzID0gcGFyc2VKdW5pdFhNTCgpXG4gICAgdGVzdENhc2VzLm1hcChmdW5jdGlvbiAodGVzdGNhc2U6IHsgW2lkOiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICB2YXIgbmFtZSA9ICdObyBOYW1lJ1xuICAgICAgICBpZiAodGVzdGNhc2VbJ3N5c3RlbS1vdXQnXSkge1xuICAgICAgICAgICAgY29uc3QgbmFtZVRlbXBBcnIgPSB0ZXN0Y2FzZVsnc3lzdGVtLW91dCddXG4gICAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJycpXG4gICAgICAgICAgICAgICAgLnNwbGl0KC9kaXNwbGF5LW5hbWU6LipTY2VuYXJpbzogLylcbiAgICAgICAgICAgIGlmIChuYW1lVGVtcEFyci5sZW5ndGggPiAxKSBuYW1lID0gbmFtZVRlbXBBcnJbMV0udHJpbSgpXG4gICAgICAgIH1cbiAgICAgICAgdGVzdEZuKG5hbWUsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0ZXN0Y2FzZS5mYWlsdXJlIHx8IHRlc3RjYXNlLnNraXBwZWQpIHRocm93IG5ldyBFcnJvcignRGlkIG5vdCBwYXNzJylcbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5jb25zdCBzZXRFeHBlY3RhdGlvbnMgPSAoc3R1YlBhdGg6IHN0cmluZywgc3R1YlNlcnZlckJhc2VVcmw/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBzdHViUmVzcG9uc2UgPSByZXF1aXJlKHBhdGgucmVzb2x2ZShzdHViUGF0aCkpXG4gICAgcmV0dXJuIHNldEV4cGVjdGF0aW9uSnNvbihzdHViUmVzcG9uc2UsIHN0dWJTZXJ2ZXJCYXNlVXJsKVxufVxuXG5jb25zdCBzZXRFeHBlY3RhdGlvbkpzb24gPSAoc3R1YlJlc3BvbnNlOiBhbnksIHN0dWJTZXJ2ZXJCYXNlVXJsPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgc3R1YlNlcnZlckJhc2VVcmwgPSBzdHViU2VydmVyQmFzZVVybCB8fCAnaHR0cDovL2xvY2FsaG9zdDo5MDAwJ1xuICAgIFxuICAgIGxvZ2dlci5pbmZvKGBTZXQgRXhwZWN0YXRpb25zOiBTdHViIHVybCBpcyAke3N0dWJTZXJ2ZXJCYXNlVXJsfWApXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvc1xuICAgICAgICAgICAgLnBvc3QoYCR7c3R1YlNlcnZlckJhc2VVcmx9L19zcGVjbWF0aWMvZXhwZWN0YXRpb25zYCwgc3R1YlJlc3BvbnNlKVxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgU2V0IEV4cGVjdGF0aW9uczogJHtyZXNwb25zZS5kYXRhfWApXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1NldCBFeHBlY3RhdGlvbnM6IEZpbmlzaGVkJylcbiAgICAgICAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgc2V0RXhwZWN0YXRpb25zRXJyb3JNZXNzYWdlID0gYFNldCBFeHBlY3RhdGlvbnM6IEZhaWxlZCB3aXRoIGVycm9yICR7ZXJyfWBcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVzcG9uc2UgZGF0YSBpcyBpbiB0ZXh0IGZvcm1hdFxuICAgICAgICAgICAgICAgIGlmIChlcnIgJiYgZXJyLnJlc3BvbnNlPy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ3RleHQvcGxhaW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgYSBjaGVjayB0byBoYW5kbGUgdGV4dCBjb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSB0eXBlb2YgZXJyLnJlc3BvbnNlLmRhdGEgPT09ICdzdHJpbmcnID8gZXJyLnJlc3BvbnNlLmRhdGEgOiBcIkVycm9yIHRleHQgbm90IGF2YWlsYWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXhwZWN0YXRpb25zRXJyb3JNZXNzYWdlICs9IGAgLSAke2Vycm9yVGV4dH1gO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJGYWlsZWQgdG8gcmV0cmlldmUgdGV4dCBlcnJvciBtZXNzYWdlLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2V0RXhwZWN0YXRpb25zRXJyb3JNZXNzYWdlKVxuICAgICAgICAgICAgICAgIHJlamVjdChzZXRFeHBlY3RhdGlvbnNFcnJvck1lc3NhZ2UpXG4gICAgICAgICAgICB9KVxuICAgIH0pXG59XG5cbmNvbnN0IHByaW50SmFyVmVyc2lvbiA9ICgpID0+IHtcbiAgICBjb25zdCBjbWQgPSBgLS12ZXJzaW9uYFxuICAgIGxvZ2dlci5pbmZvKCdQcmludCBKYXIgVmVyc2lvbjogUnVubmluZycpXG4gICAgbG9nZ2VyLmRlYnVnKGBQcmludCBKYXIgVmVyc2lvbjogRXhlY3V0aW5nIFwiJHtjbWR9XCJgKVxuXG4gICAgY2FsbENvcmUoXG4gICAgICAgIGNtZCxcbiAgICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSBsb2dnZXIuZXJyb3IoYFByaW50IEphciBWZXJzaW9uOiBGYWlsZWQgd2l0aCBlcnJvciAke2Vycn1gKVxuICAgICAgICB9LFxuICAgICAgICAobWVzc2FnZSwgZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcikgbG9nZ2VyLmVycm9yKGBQcmludCBKYXIgVmVyc2lvbjogJHttZXNzYWdlfWApXG4gICAgICAgICAgICBlbHNlIGNvbnNvbGUubG9nKGAke21lc3NhZ2V9YClcbiAgICAgICAgfVxuICAgIClcbn1cblxuY29uc3Qgc3RhcnRBcGlDb3ZlcmFnZVNlcnZlciA9IChleHByZXNzQXBwOiBhbnkpOiBQcm9taXNlPGh0dHAuU2VydmVyPiA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBSZWdpc3RlcmluZyBBUEkgZW5kcG9pbnQgZm9yIGNvdmVyYWdlYClcbiAgICBsZXQgYXBwID0gaHR0cC5jcmVhdGVTZXJ2ZXIoKF9yZXEsIHJlcykgPT4ge1xuICAgICAgICByZXMud3JpdGVIZWFkKDIwMCwgeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0pXG4gICAgICAgIGNvbnN0IGVuZFBvaW50cyA9IEpTT04uc3RyaW5naWZ5KGV4dHJhY3RFbmRQb2ludHMoZXhwcmVzc0FwcCkpXG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRW5kcG9pbnRzOiAke2VuZFBvaW50c31gKVxuICAgICAgICByZXMuZW5kKGVuZFBvaW50cylcbiAgICB9KVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxodHRwLlNlcnZlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBhcHAub24oJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc3RhcnRpbmcgZW5kIHBvaW50cyBzZXJ2ZXIgZm9yIGFwaSBjb3ZlcmFnZScsIGVycilcbiAgICAgICAgICAgIHJlamVjdCgnRXJyb3Igd2hpbGUgc3RhcnRpbmcgZW5kIHBvaW50cyBzZXJ2ZXIgZm9yIGFwaSBjb3ZlcmFnZScpXG4gICAgICAgIH0pXG4gICAgICAgIGFwcC5saXN0ZW4oeyBob3N0OiAnMTI3LjAuMC4xJywgcG9ydDogMCB9LCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gYXBwLmFkZHJlc3MoKSBhcyBBZGRyZXNzSW5mbyB8IG51bGxcbiAgICAgICAgICAgIHByb2Nlc3MuZW52WydlbmRwb2ludHNBUEknXSA9IGBodHRwOi8vJHthZGRyZXNzPy5hZGRyZXNzfToke2FkZHJlc3M/LnBvcnR9YFxuICAgICAgICAgICAgbG9nZ2VyLmluZm8oYEVuZHBvaW50cyBBUEkgcmVnaXN0ZXJlZCBhdCAke3Byb2Nlc3MuZW52WydlbmRwb2ludHNBUEknXX1gKVxuICAgICAgICAgICAgcmVzb2x2ZShhcHApXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuY29uc3QgcGFyc2VKdW5pdFhNTCA9ICgpID0+IHtcbiAgICBjb25zdCByZXBvcnRQYXRoID0gcGF0aC5yZXNvbHZlKCdkaXN0L3Rlc3QtcmVwb3J0L1RFU1QtanVuaXQtanVwaXRlci54bWwnKVxuICAgIHZhciBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHJlcG9ydFBhdGgpXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFhNTFBhcnNlcigpXG4gICAgdmFyIHJlc3VsdFhtbCA9IHBhcnNlci5wYXJzZShkYXRhKVxuICAgIHJlc3VsdFhtbC50ZXN0c3VpdGUudGVzdGNhc2UgPSBBcnJheS5pc0FycmF5KHJlc3VsdFhtbC50ZXN0c3VpdGUudGVzdGNhc2UpID8gcmVzdWx0WG1sLnRlc3RzdWl0ZS50ZXN0Y2FzZSA6IFtyZXN1bHRYbWwudGVzdHN1aXRlLnRlc3RjYXNlXVxuICAgIHJldHVybiByZXN1bHRYbWwudGVzdHN1aXRlLnRlc3RjYXNlXG59XG5cbmNvbnN0IGxpc3RFbmRQb2ludHMgPSAoZXhwcmVzc0FwcDogYW55KTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0+IHtcbiAgICBjb25zdCBkZXRhaWxzID0gbGlzdEV4cHJlc3NFbmRwb2ludHMoZXhwcmVzc0FwcClcbiAgICBsZXQgZW5kUG9pbnRzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fVxuICAgIGRldGFpbHMubWFwKGFwaURldGFpbCA9PiB7XG4gICAgICAgIGVuZFBvaW50c1thcGlEZXRhaWwucGF0aF0gPSBhcGlEZXRhaWwubWV0aG9kc1xuICAgIH0pXG4gICAgZGVsZXRlIGVuZFBvaW50c1snKiddXG4gICAgcmV0dXJuIGVuZFBvaW50c1xufVxuXG5mdW5jdGlvbiBleHRyYWN0RW5kUG9pbnRzKGV4cHJlc3NBcHA6IGFueSkge1xuICAgIGxldCBlbmRQb2ludHMgPSBsaXN0RW5kUG9pbnRzKGV4cHJlc3NBcHApXG4gICAgbGV0IHNwcmluZ0FjdHVhdG9yUGF5bG9hZCA9IHtcbiAgICAgICAgY29udGV4dHM6IHtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlclNlcnZsZXRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyU2VydmxldDogW10sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfVxuICAgIE9iamVjdC5rZXlzKGVuZFBvaW50cylcbiAgICAgICAgLnNvcnQoKVxuICAgICAgICAubWFwKHBhdGggPT4ge1xuICAgICAgICAgICAgc3ByaW5nQWN0dWF0b3JQYXlsb2FkLmNvbnRleHRzLmFwcGxpY2F0aW9uLm1hcHBpbmdzLmRpc3BhdGNoZXJTZXJ2bGV0cy5kaXNwYXRjaGVyU2VydmxldC5wdXNoKHtcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nQ29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kczogZW5kUG9pbnRzW3BhdGhdLnNvcnQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5zOiBbY29udmVydEVuZHBvaW50VG9TcHJpbmdTeW50YXgocGF0aCldLm1hcChyZW1vdmVSZWdleEZyb21QYXRoKVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9IGFzIG5ldmVyKVxuICAgICAgICB9KVxuICAgIHJldHVybiBzcHJpbmdBY3R1YXRvclBheWxvYWRcbn1cblxuY29uc3QgY29udmVydEVuZHBvaW50VG9TcHJpbmdTeW50YXggPSAocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvOihbXi9dKykvZywgJ3skMX0nKS5yZXBsYWNlKC9cXFxcL2csICcnKVxufVxuXG5jb25zdCByZW1vdmVSZWdleEZyb21QYXRoID0gKHBhdGg6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcKFteKCldKlxcKS9nLCAnJylcbn1cblxuZXhwb3J0IHsgc3RhcnRTdHViLCBzdG9wU3R1YiwgdGVzdCwgdGVzdFdpdGhBcGlDb3ZlcmFnZSwgc2V0RXhwZWN0YXRpb25zLCBzZXRFeHBlY3RhdGlvbkpzb24sIHByaW50SmFyVmVyc2lvbiwgc2hvd1Rlc3RSZXN1bHRzIH1cbmV4cG9ydCB7IHN0YXJ0QXBpQ292ZXJhZ2VTZXJ2ZXIgfVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBRSxjQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxHQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFMLHNCQUFBLENB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
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ var axios = require('axios');
4
+ var fs = require('fs');
5
+ var path = require('path');
6
+ var packageJson = require('../package.json'); // Import the package.json file
7
+
8
+ var specmaticVersion = packageJson.specmaticVersion;
9
+ var jarUrl = "https://repo1.maven.org/maven2/io/specmatic/specmatic-executable/".concat(specmaticVersion, "/specmatic-executable-").concat(specmaticVersion, "-all.jar");
10
+ var jarFilename = 'specmatic.jar'; // Specify the desired filename for the JAR
11
+
12
+ var downloadPath = path.resolve(__dirname, '..', jarFilename);
13
+ if (fs.existsSync(downloadPath)) {
14
+ console.log("Deleting existing jar ...");
15
+ fs.unlinkSync(downloadPath);
16
+ }
17
+ console.log("Downloading Specmatic jar version: " + specmaticVersion + " ...");
18
+ axios({
19
+ method: 'get',
20
+ url: jarUrl,
21
+ responseType: 'stream'
22
+ }).then(function (response) {
23
+ response.data.pipe(fs.createWriteStream(downloadPath));
24
+ console.log("Finished downloading Specmatic jar");
25
+ })["catch"](function (error) {
26
+ console.error('Error downloading Specmatic Core JAR file version: ' + specmaticVersion, error);
27
+ process.exit(1);
28
+ });
29
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJheGlvcyIsInJlcXVpcmUiLCJmcyIsInBhdGgiLCJwYWNrYWdlSnNvbiIsInNwZWNtYXRpY1ZlcnNpb24iLCJqYXJVcmwiLCJjb25jYXQiLCJqYXJGaWxlbmFtZSIsImRvd25sb2FkUGF0aCIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJleGlzdHNTeW5jIiwiY29uc29sZSIsImxvZyIsInVubGlua1N5bmMiLCJtZXRob2QiLCJ1cmwiLCJyZXNwb25zZVR5cGUiLCJ0aGVuIiwicmVzcG9uc2UiLCJkYXRhIiwicGlwZSIsImNyZWF0ZVdyaXRlU3RyZWFtIiwiZXJyb3IiLCJwcm9jZXNzIiwiZXhpdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kb3dubG9hZFNwZWNtYXRpY0phci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBheGlvcyA9IHJlcXVpcmUoJ2F4aW9zJyk7XG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgcGFja2FnZUpzb24gPSByZXF1aXJlKCcuLi9wYWNrYWdlLmpzb24nKTsgLy8gSW1wb3J0IHRoZSBwYWNrYWdlLmpzb24gZmlsZVxuXG5jb25zdCBzcGVjbWF0aWNWZXJzaW9uID0gcGFja2FnZUpzb24uc3BlY21hdGljVmVyc2lvbjtcbmNvbnN0IGphclVybCA9IGBodHRwczovL3JlcG8xLm1hdmVuLm9yZy9tYXZlbjIvaW8vc3BlY21hdGljL3NwZWNtYXRpYy1leGVjdXRhYmxlLyR7c3BlY21hdGljVmVyc2lvbn0vc3BlY21hdGljLWV4ZWN1dGFibGUtJHtzcGVjbWF0aWNWZXJzaW9ufS1hbGwuamFyYDtcbmNvbnN0IGphckZpbGVuYW1lID0gJ3NwZWNtYXRpYy5qYXInOyAvLyBTcGVjaWZ5IHRoZSBkZXNpcmVkIGZpbGVuYW1lIGZvciB0aGUgSkFSXG5cbmNvbnN0IGRvd25sb2FkUGF0aCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsIGphckZpbGVuYW1lKTtcblxuaWYgKGZzLmV4aXN0c1N5bmMoZG93bmxvYWRQYXRoKSkge1xuICBjb25zb2xlLmxvZyhgRGVsZXRpbmcgZXhpc3RpbmcgamFyIC4uLmApO1xuICBmcy51bmxpbmtTeW5jKGRvd25sb2FkUGF0aCk7XG59XG5cbmNvbnNvbGUubG9nKFwiRG93bmxvYWRpbmcgU3BlY21hdGljIGphciB2ZXJzaW9uOiBcIiArIHNwZWNtYXRpY1ZlcnNpb24gKyBcIiAuLi5cIik7XG5heGlvcyh7XG4gIG1ldGhvZDogJ2dldCcsXG4gIHVybDogamFyVXJsLFxuICByZXNwb25zZVR5cGU6ICdzdHJlYW0nLFxufSlcbiAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgcmVzcG9uc2UuZGF0YS5waXBlKGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGRvd25sb2FkUGF0aCkpO1xuICAgIGNvbnNvbGUubG9nKFwiRmluaXNoZWQgZG93bmxvYWRpbmcgU3BlY21hdGljIGphclwiKTtcbiAgfSlcbiAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRvd25sb2FkaW5nIFNwZWNtYXRpYyBDb3JlIEpBUiBmaWxlIHZlcnNpb246ICcgKyBzcGVjbWF0aWNWZXJzaW9uLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9KTsiXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBTUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQzlCLElBQU1DLEVBQUUsR0FBR0QsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixJQUFNRSxJQUFJLEdBQUdGLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDNUIsSUFBTUcsV0FBVyxHQUFHSCxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDOztBQUVoRCxJQUFNSSxnQkFBZ0IsR0FBR0QsV0FBVyxDQUFDQyxnQkFBZ0I7QUFDckQsSUFBTUMsTUFBTSx1RUFBQUMsTUFBQSxDQUF1RUYsZ0JBQWdCLDRCQUFBRSxNQUFBLENBQXlCRixnQkFBZ0IsYUFBVTtBQUN0SixJQUFNRyxXQUFXLEdBQUcsZUFBZSxDQUFDLENBQUM7O0FBRXJDLElBQU1DLFlBQVksR0FBR04sSUFBSSxDQUFDTyxPQUFPLENBQUNDLFNBQVMsRUFBRSxJQUFJLEVBQUVILFdBQVcsQ0FBQztBQUUvRCxJQUFJTixFQUFFLENBQUNVLFVBQVUsQ0FBQ0gsWUFBWSxDQUFDLEVBQUU7RUFDL0JJLE9BQU8sQ0FBQ0MsR0FBRyw0QkFBNEIsQ0FBQztFQUN4Q1osRUFBRSxDQUFDYSxVQUFVLENBQUNOLFlBQVksQ0FBQztBQUM3QjtBQUVBSSxPQUFPLENBQUNDLEdBQUcsQ0FBQyxxQ0FBcUMsR0FBR1QsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO0FBQzlFTCxLQUFLLENBQUM7RUFDSmdCLE1BQU0sRUFBRSxLQUFLO0VBQ2JDLEdBQUcsRUFBRVgsTUFBTTtFQUNYWSxZQUFZLEVBQUU7QUFDaEIsQ0FBQyxDQUFDLENBQ0NDLElBQUksQ0FBQyxVQUFDQyxRQUFRLEVBQUs7RUFDbEJBLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDQyxJQUFJLENBQUNwQixFQUFFLENBQUNxQixpQkFBaUIsQ0FBQ2QsWUFBWSxDQUFDLENBQUM7RUFDdERJLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLG9DQUFvQyxDQUFDO0FBQ25ELENBQUMsQ0FBQyxTQUNJLENBQUMsVUFBQ1UsS0FBSyxFQUFLO0VBQ2hCWCxPQUFPLENBQUNXLEtBQUssQ0FBQyxxREFBcUQsR0FBR25CLGdCQUFnQixFQUFFbUIsS0FBSyxDQUFDO0VBQzlGQyxPQUFPLENBQUNDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakIsQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ module.exports = expressListEndpoints;
4
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHByZXNzTGlzdEVuZHBvaW50cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvZXhwcmVzcy1saXN0LWVuZHBvaW50cy9pbmRleC5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCA9IGV4cHJlc3NMaXN0RW5kcG9pbnRzO1xuZGVjbGFyZSBmdW5jdGlvbiBleHByZXNzTGlzdEVuZHBvaW50cyhhcHA6IGltcG9ydCgnZXhwcmVzcycpLkV4cHJlc3MgfCBpbXBvcnQoJ2V4cHJlc3MnKS5Sb3V0ZXIgfCBhbnkpOiBFbmRwb2ludFtdO1xuZGVjbGFyZSBuYW1lc3BhY2UgZXhwcmVzc0xpc3RFbmRwb2ludHMge1xuICAgIGV4cG9ydCB7IFJvdXRlLCBFbmRwb2ludCB9O1xufVxudHlwZSBFbmRwb2ludCA9IHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgbWV0aG9kczogc3RyaW5nW107XG4gICAgbWlkZGxld2FyZXM6IHN0cmluZ1tdO1xufTtcbnR5cGUgUm91dGUgPSB7XG4gICAgbWV0aG9kczogT2JqZWN0O1xuICAgIHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIHN0YWNrOiBhbnlbXTtcbn07XG4iXSwibWFwcGluZ3MiOiI7O2lCQUFTQSxvQkFBb0IiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+
3
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
4
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
6
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
7
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
8
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
9
+ Object.defineProperty(exports, "__esModule", {
10
+ value: true
11
+ });
12
+ var regExpToParseExpressPathRegExp = /^\/\^\\?\/?(?:(:?[\w\\.-]*(?:\\\/:?[\w\\.-]*)*)|(\(\?:\\?\/?\([^)]+\)\)))\\\/.*/;
13
+ var regExpToReplaceExpressPathRegExpParams = /\(\?:\\?\/?\([^)]+\)\)/;
14
+ var regexpExpressParamRegexp = /\(\?:\\?\\?\/?\([^)]+\)\)/g;
15
+ var regexpExpressPathParamRegexp = /(:[^)]+)\([^)]+\)/g;
16
+ var EXPRESS_ROOT_PATH_REGEXP_VALUE = '/^\\/?(?=\\/|$)/i';
17
+ var STACK_ITEM_VALID_NAMES = ['router', 'bound dispatch', 'mounted_app'];
18
+ var getRouteMethods = function getRouteMethods(route) {
19
+ var methods = Object.keys(route.methods);
20
+ methods = methods.filter(function (method) {
21
+ return method !== '_all';
22
+ });
23
+ methods = methods.map(function (method) {
24
+ return method.toUpperCase();
25
+ });
26
+ return methods;
27
+ };
28
+ var getRouteMiddlewares = function getRouteMiddlewares(route) {
29
+ return route.stack.map(function (item) {
30
+ return item.handle.name || 'anonymous';
31
+ });
32
+ };
33
+ var hasParams = function hasParams(expressPathRegExp) {
34
+ return regexpExpressParamRegexp.test(expressPathRegExp);
35
+ };
36
+ function combinePaths(base, path) {
37
+ return (base + path).replace(/\/+/g, "/").replace(/\/$/, "") || "/";
38
+ }
39
+ var parseExpressRoute = function parseExpressRoute(route, basePath) {
40
+ var paths = [];
41
+ if (Array.isArray(route.path)) {
42
+ paths.push.apply(paths, _toConsumableArray(route.path));
43
+ } else {
44
+ paths.push(route.path);
45
+ }
46
+ var endpoints = paths.map(function (path) {
47
+ var completePath = combinePaths(basePath, path);
48
+ var endpoint = {
49
+ path: completePath.replace(regexpExpressPathParamRegexp, '$1'),
50
+ methods: getRouteMethods(route),
51
+ middlewares: getRouteMiddlewares(route)
52
+ };
53
+ return endpoint;
54
+ });
55
+ return endpoints;
56
+ };
57
+ var parseExpressPath = function parseExpressPath(expressPathRegExp, params) {
58
+ var parsedRegExp = expressPathRegExp.toString();
59
+ var expressPathRegExpExec = regExpToParseExpressPathRegExp.exec(parsedRegExp);
60
+ var paramIndex = 0;
61
+ var _loop = function _loop() {
62
+ var paramName = params[paramIndex].name;
63
+ var paramId = ":".concat(paramName);
64
+ parsedRegExp = parsedRegExp.replace(regExpToReplaceExpressPathRegExpParams, function (str) {
65
+ if (str.startsWith('(?:\\/')) {
66
+ return "\\/".concat(paramId);
67
+ }
68
+ return paramId;
69
+ });
70
+ paramIndex++;
71
+ };
72
+ while (hasParams(parsedRegExp)) {
73
+ _loop();
74
+ }
75
+ if (parsedRegExp !== expressPathRegExp.toString()) {
76
+ expressPathRegExpExec = regExpToParseExpressPathRegExp.exec(parsedRegExp);
77
+ }
78
+ var parsedPath = expressPathRegExpExec[1].replace(/\\\//g, '/');
79
+ return parsedPath;
80
+ };
81
+ var parseEndpoints = function parseEndpoints(app, basePath, endpoints) {
82
+ var stack = app.stack || app._router && app._router.stack;
83
+ endpoints = endpoints || [];
84
+ basePath = basePath || '';
85
+ if (!stack) {
86
+ if (endpoints.length) {
87
+ endpoints = addEndpoints(endpoints, [{
88
+ path: basePath,
89
+ methods: [],
90
+ middlewares: []
91
+ }]);
92
+ }
93
+ } else {
94
+ endpoints = parseStack(stack, basePath, endpoints);
95
+ }
96
+ return endpoints;
97
+ };
98
+ var addEndpoints = function addEndpoints(currentEndpoints, endpointsToAdd) {
99
+ endpointsToAdd.forEach(function (newEndpoint) {
100
+ var existingEndpoint = currentEndpoints.find(function (endpoint) {
101
+ return endpoint.path === newEndpoint.path;
102
+ });
103
+ if (existingEndpoint !== undefined) {
104
+ var newMethods = newEndpoint.methods.filter(function (method) {
105
+ return !existingEndpoint.methods.includes(method);
106
+ });
107
+ existingEndpoint.methods = existingEndpoint.methods.concat(newMethods);
108
+ } else {
109
+ currentEndpoints.push(newEndpoint);
110
+ }
111
+ });
112
+ return currentEndpoints;
113
+ };
114
+ var parseStack = function parseStack(stack, basePath, endpoints) {
115
+ stack.forEach(function (stackItem) {
116
+ if (stackItem.route) {
117
+ var newEndpoints = parseExpressRoute(stackItem.route, basePath);
118
+ endpoints = addEndpoints(endpoints, newEndpoints);
119
+ } else if (STACK_ITEM_VALID_NAMES.includes(stackItem.name)) {
120
+ var isExpressPathRegexp = regExpToParseExpressPathRegExp.test(stackItem.regexp);
121
+ var newBasePath = basePath;
122
+ if (isExpressPathRegexp) {
123
+ var parsedPath = parseExpressPath(stackItem.regexp, stackItem.keys);
124
+ newBasePath += "/".concat(parsedPath);
125
+ } else if (!stackItem.path && stackItem.regexp && stackItem.regexp.toString() !== EXPRESS_ROOT_PATH_REGEXP_VALUE) {
126
+ var regExpPath = " RegExp(".concat(stackItem.regexp, ") ");
127
+ newBasePath += "/".concat(regExpPath);
128
+ }
129
+ endpoints = parseEndpoints(stackItem.handle, newBasePath, endpoints);
130
+ }
131
+ });
132
+ return endpoints;
133
+ };
134
+ var expressListEndpoints = function expressListEndpoints(app) {
135
+ var endpoints = parseEndpoints(app);
136
+ return endpoints;
137
+ };
138
+ module.exports = expressListEndpoints;
139
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdG9Db25zdW1hYmxlQXJyYXkiLCJyIiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsIlR5cGVFcnJvciIsImEiLCJfYXJyYXlMaWtlVG9BcnJheSIsInQiLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJTeW1ib2wiLCJpdGVyYXRvciIsImlzQXJyYXkiLCJsZW5ndGgiLCJlIiwibiIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwicmVnRXhwVG9QYXJzZUV4cHJlc3NQYXRoUmVnRXhwIiwicmVnRXhwVG9SZXBsYWNlRXhwcmVzc1BhdGhSZWdFeHBQYXJhbXMiLCJyZWdleHBFeHByZXNzUGFyYW1SZWdleHAiLCJyZWdleHBFeHByZXNzUGF0aFBhcmFtUmVnZXhwIiwiRVhQUkVTU19ST09UX1BBVEhfUkVHRVhQX1ZBTFVFIiwiU1RBQ0tfSVRFTV9WQUxJRF9OQU1FUyIsImdldFJvdXRlTWV0aG9kcyIsInJvdXRlIiwibWV0aG9kcyIsImtleXMiLCJmaWx0ZXIiLCJtZXRob2QiLCJtYXAiLCJ0b1VwcGVyQ2FzZSIsImdldFJvdXRlTWlkZGxld2FyZXMiLCJzdGFjayIsIml0ZW0iLCJoYW5kbGUiLCJoYXNQYXJhbXMiLCJleHByZXNzUGF0aFJlZ0V4cCIsImNvbWJpbmVQYXRocyIsImJhc2UiLCJwYXRoIiwicmVwbGFjZSIsInBhcnNlRXhwcmVzc1JvdXRlIiwiYmFzZVBhdGgiLCJwYXRocyIsInB1c2giLCJhcHBseSIsImVuZHBvaW50cyIsImNvbXBsZXRlUGF0aCIsImVuZHBvaW50IiwibWlkZGxld2FyZXMiLCJwYXJzZUV4cHJlc3NQYXRoIiwicGFyYW1zIiwicGFyc2VkUmVnRXhwIiwiZXhwcmVzc1BhdGhSZWdFeHBFeGVjIiwiZXhlYyIsInBhcmFtSW5kZXgiLCJfbG9vcCIsInBhcmFtTmFtZSIsInBhcmFtSWQiLCJjb25jYXQiLCJzdHIiLCJzdGFydHNXaXRoIiwicGFyc2VkUGF0aCIsInBhcnNlRW5kcG9pbnRzIiwiYXBwIiwiX3JvdXRlciIsImFkZEVuZHBvaW50cyIsInBhcnNlU3RhY2siLCJjdXJyZW50RW5kcG9pbnRzIiwiZW5kcG9pbnRzVG9BZGQiLCJmb3JFYWNoIiwibmV3RW5kcG9pbnQiLCJleGlzdGluZ0VuZHBvaW50IiwiZmluZCIsInVuZGVmaW5lZCIsIm5ld01ldGhvZHMiLCJpbmNsdWRlcyIsInN0YWNrSXRlbSIsIm5ld0VuZHBvaW50cyIsImlzRXhwcmVzc1BhdGhSZWdleHAiLCJyZWdleHAiLCJuZXdCYXNlUGF0aCIsInJlZ0V4cFBhdGgiLCJleHByZXNzTGlzdEVuZHBvaW50cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvZXhwcmVzcy1saXN0LWVuZHBvaW50cy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHJlZ0V4cFRvUGFyc2VFeHByZXNzUGF0aFJlZ0V4cCA9IC9eXFwvXFxeXFxcXD9cXC8/KD86KDo/W1xcd1xcXFwuLV0qKD86XFxcXFxcLzo/W1xcd1xcXFwuLV0qKSopfChcXChcXD86XFxcXD9cXC8/XFwoW14pXStcXClcXCkpKVxcXFxcXC8uKi87XG5jb25zdCByZWdFeHBUb1JlcGxhY2VFeHByZXNzUGF0aFJlZ0V4cFBhcmFtcyA9IC9cXChcXD86XFxcXD9cXC8/XFwoW14pXStcXClcXCkvO1xuY29uc3QgcmVnZXhwRXhwcmVzc1BhcmFtUmVnZXhwID0gL1xcKFxcPzpcXFxcP1xcXFw/XFwvP1xcKFteKV0rXFwpXFwpL2c7XG5jb25zdCByZWdleHBFeHByZXNzUGF0aFBhcmFtUmVnZXhwID0gLyg6W14pXSspXFwoW14pXStcXCkvZztcbmNvbnN0IEVYUFJFU1NfUk9PVF9QQVRIX1JFR0VYUF9WQUxVRSA9ICcvXlxcXFwvPyg/PVxcXFwvfCQpL2knO1xuY29uc3QgU1RBQ0tfSVRFTV9WQUxJRF9OQU1FUyA9IFtcbiAgICAncm91dGVyJyxcbiAgICAnYm91bmQgZGlzcGF0Y2gnLFxuICAgICdtb3VudGVkX2FwcCdcbl07XG5jb25zdCBnZXRSb3V0ZU1ldGhvZHMgPSBmdW5jdGlvbiAocm91dGUpIHtcbiAgICBsZXQgbWV0aG9kcyA9IE9iamVjdC5rZXlzKHJvdXRlLm1ldGhvZHMpO1xuICAgIG1ldGhvZHMgPSBtZXRob2RzLmZpbHRlcigobWV0aG9kKSA9PiBtZXRob2QgIT09ICdfYWxsJyk7XG4gICAgbWV0aG9kcyA9IG1ldGhvZHMubWFwKChtZXRob2QpID0+IG1ldGhvZC50b1VwcGVyQ2FzZSgpKTtcbiAgICByZXR1cm4gbWV0aG9kcztcbn07XG5jb25zdCBnZXRSb3V0ZU1pZGRsZXdhcmVzID0gZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgcmV0dXJuIHJvdXRlLnN0YWNrLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS5oYW5kbGUubmFtZSB8fCAnYW5vbnltb3VzJztcbiAgICB9KTtcbn07XG5jb25zdCBoYXNQYXJhbXMgPSBmdW5jdGlvbiAoZXhwcmVzc1BhdGhSZWdFeHApIHtcbiAgICByZXR1cm4gcmVnZXhwRXhwcmVzc1BhcmFtUmVnZXhwLnRlc3QoZXhwcmVzc1BhdGhSZWdFeHApO1xufTtcbmZ1bmN0aW9uIGNvbWJpbmVQYXRocyhiYXNlLCBwYXRoKSB7XG4gICAgcmV0dXJuIChiYXNlICsgcGF0aCkucmVwbGFjZSgvXFwvKy9nLCBcIi9cIikucmVwbGFjZSgvXFwvJC8sIFwiXCIpIHx8IFwiL1wiO1xufVxuY29uc3QgcGFyc2VFeHByZXNzUm91dGUgPSBmdW5jdGlvbiAocm91dGUsIGJhc2VQYXRoKSB7XG4gICAgY29uc3QgcGF0aHMgPSBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyb3V0ZS5wYXRoKSkge1xuICAgICAgICBwYXRocy5wdXNoKC4uLnJvdXRlLnBhdGgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcGF0aHMucHVzaChyb3V0ZS5wYXRoKTtcbiAgICB9XG4gICAgY29uc3QgZW5kcG9pbnRzID0gcGF0aHMubWFwKChwYXRoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBsZXRlUGF0aCA9IGNvbWJpbmVQYXRocyhiYXNlUGF0aCwgcGF0aCk7XG4gICAgICAgIGNvbnN0IGVuZHBvaW50ID0ge1xuICAgICAgICAgICAgcGF0aDogY29tcGxldGVQYXRoLnJlcGxhY2UocmVnZXhwRXhwcmVzc1BhdGhQYXJhbVJlZ2V4cCwgJyQxJyksXG4gICAgICAgICAgICBtZXRob2RzOiBnZXRSb3V0ZU1ldGhvZHMocm91dGUpLFxuICAgICAgICAgICAgbWlkZGxld2FyZXM6IGdldFJvdXRlTWlkZGxld2FyZXMocm91dGUpXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBlbmRwb2ludDtcbiAgICB9KTtcbiAgICByZXR1cm4gZW5kcG9pbnRzO1xufTtcbmNvbnN0IHBhcnNlRXhwcmVzc1BhdGggPSBmdW5jdGlvbiAoZXhwcmVzc1BhdGhSZWdFeHAsIHBhcmFtcykge1xuICAgIGxldCBwYXJzZWRSZWdFeHAgPSBleHByZXNzUGF0aFJlZ0V4cC50b1N0cmluZygpO1xuICAgIGxldCBleHByZXNzUGF0aFJlZ0V4cEV4ZWMgPSByZWdFeHBUb1BhcnNlRXhwcmVzc1BhdGhSZWdFeHAuZXhlYyhwYXJzZWRSZWdFeHApO1xuICAgIGxldCBwYXJhbUluZGV4ID0gMDtcbiAgICB3aGlsZSAoaGFzUGFyYW1zKHBhcnNlZFJlZ0V4cCkpIHtcbiAgICAgICAgY29uc3QgcGFyYW1OYW1lID0gcGFyYW1zW3BhcmFtSW5kZXhdLm5hbWU7XG4gICAgICAgIGNvbnN0IHBhcmFtSWQgPSBgOiR7cGFyYW1OYW1lfWA7XG4gICAgICAgIHBhcnNlZFJlZ0V4cCA9IHBhcnNlZFJlZ0V4cFxuICAgICAgICAgICAgLnJlcGxhY2UocmVnRXhwVG9SZXBsYWNlRXhwcmVzc1BhdGhSZWdFeHBQYXJhbXMsIChzdHIpID0+IHtcbiAgICAgICAgICAgIGlmIChzdHIuc3RhcnRzV2l0aCgnKD86XFxcXC8nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBgXFxcXC8ke3BhcmFtSWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJhbUlkO1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyYW1JbmRleCsrO1xuICAgIH1cbiAgICBpZiAocGFyc2VkUmVnRXhwICE9PSBleHByZXNzUGF0aFJlZ0V4cC50b1N0cmluZygpKSB7XG4gICAgICAgIGV4cHJlc3NQYXRoUmVnRXhwRXhlYyA9IHJlZ0V4cFRvUGFyc2VFeHByZXNzUGF0aFJlZ0V4cC5leGVjKHBhcnNlZFJlZ0V4cCk7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZFBhdGggPSBleHByZXNzUGF0aFJlZ0V4cEV4ZWNbMV0ucmVwbGFjZSgvXFxcXFxcLy9nLCAnLycpO1xuICAgIHJldHVybiBwYXJzZWRQYXRoO1xufTtcbmNvbnN0IHBhcnNlRW5kcG9pbnRzID0gZnVuY3Rpb24gKGFwcCwgYmFzZVBhdGgsIGVuZHBvaW50cykge1xuICAgIGNvbnN0IHN0YWNrID0gYXBwLnN0YWNrIHx8IChhcHAuX3JvdXRlciAmJiBhcHAuX3JvdXRlci5zdGFjayk7XG4gICAgZW5kcG9pbnRzID0gZW5kcG9pbnRzIHx8IFtdO1xuICAgIGJhc2VQYXRoID0gYmFzZVBhdGggfHwgJyc7XG4gICAgaWYgKCFzdGFjaykge1xuICAgICAgICBpZiAoZW5kcG9pbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgZW5kcG9pbnRzID0gYWRkRW5kcG9pbnRzKGVuZHBvaW50cywgW3tcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogYmFzZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZHM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBtaWRkbGV3YXJlczogW11cbiAgICAgICAgICAgICAgICB9XSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGVuZHBvaW50cyA9IHBhcnNlU3RhY2soc3RhY2ssIGJhc2VQYXRoLCBlbmRwb2ludHMpO1xuICAgIH1cbiAgICByZXR1cm4gZW5kcG9pbnRzO1xufTtcbmNvbnN0IGFkZEVuZHBvaW50cyA9IGZ1bmN0aW9uIChjdXJyZW50RW5kcG9pbnRzLCBlbmRwb2ludHNUb0FkZCkge1xuICAgIGVuZHBvaW50c1RvQWRkLmZvckVhY2goKG5ld0VuZHBvaW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nRW5kcG9pbnQgPSBjdXJyZW50RW5kcG9pbnRzLmZpbmQoKGVuZHBvaW50KSA9PiBlbmRwb2ludC5wYXRoID09PSBuZXdFbmRwb2ludC5wYXRoKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nRW5kcG9pbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgbmV3TWV0aG9kcyA9IG5ld0VuZHBvaW50Lm1ldGhvZHMuZmlsdGVyKChtZXRob2QpID0+ICFleGlzdGluZ0VuZHBvaW50Lm1ldGhvZHMuaW5jbHVkZXMobWV0aG9kKSk7XG4gICAgICAgICAgICBleGlzdGluZ0VuZHBvaW50Lm1ldGhvZHMgPSBleGlzdGluZ0VuZHBvaW50Lm1ldGhvZHMuY29uY2F0KG5ld01ldGhvZHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudEVuZHBvaW50cy5wdXNoKG5ld0VuZHBvaW50KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjdXJyZW50RW5kcG9pbnRzO1xufTtcbmNvbnN0IHBhcnNlU3RhY2sgPSBmdW5jdGlvbiAoc3RhY2ssIGJhc2VQYXRoLCBlbmRwb2ludHMpIHtcbiAgICBzdGFjay5mb3JFYWNoKChzdGFja0l0ZW0pID0+IHtcbiAgICAgICAgaWYgKHN0YWNrSXRlbS5yb3V0ZSkge1xuICAgICAgICAgICAgY29uc3QgbmV3RW5kcG9pbnRzID0gcGFyc2VFeHByZXNzUm91dGUoc3RhY2tJdGVtLnJvdXRlLCBiYXNlUGF0aCk7XG4gICAgICAgICAgICBlbmRwb2ludHMgPSBhZGRFbmRwb2ludHMoZW5kcG9pbnRzLCBuZXdFbmRwb2ludHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFNUQUNLX0lURU1fVkFMSURfTkFNRVMuaW5jbHVkZXMoc3RhY2tJdGVtLm5hbWUpKSB7XG4gICAgICAgICAgICBjb25zdCBpc0V4cHJlc3NQYXRoUmVnZXhwID0gcmVnRXhwVG9QYXJzZUV4cHJlc3NQYXRoUmVnRXhwLnRlc3Qoc3RhY2tJdGVtLnJlZ2V4cCk7XG4gICAgICAgICAgICBsZXQgbmV3QmFzZVBhdGggPSBiYXNlUGF0aDtcbiAgICAgICAgICAgIGlmIChpc0V4cHJlc3NQYXRoUmVnZXhwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUGF0aCA9IHBhcnNlRXhwcmVzc1BhdGgoc3RhY2tJdGVtLnJlZ2V4cCwgc3RhY2tJdGVtLmtleXMpO1xuICAgICAgICAgICAgICAgIG5ld0Jhc2VQYXRoICs9IGAvJHtwYXJzZWRQYXRofWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghc3RhY2tJdGVtLnBhdGggJiYgc3RhY2tJdGVtLnJlZ2V4cCAmJiBzdGFja0l0ZW0ucmVnZXhwLnRvU3RyaW5nKCkgIT09IEVYUFJFU1NfUk9PVF9QQVRIX1JFR0VYUF9WQUxVRSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ0V4cFBhdGggPSBgIFJlZ0V4cCgke3N0YWNrSXRlbS5yZWdleHB9KSBgO1xuICAgICAgICAgICAgICAgIG5ld0Jhc2VQYXRoICs9IGAvJHtyZWdFeHBQYXRofWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbmRwb2ludHMgPSBwYXJzZUVuZHBvaW50cyhzdGFja0l0ZW0uaGFuZGxlLCBuZXdCYXNlUGF0aCwgZW5kcG9pbnRzKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBlbmRwb2ludHM7XG59O1xuY29uc3QgZXhwcmVzc0xpc3RFbmRwb2ludHMgPSBmdW5jdGlvbiAoYXBwKSB7XG4gICAgY29uc3QgZW5kcG9pbnRzID0gcGFyc2VFbmRwb2ludHMoYXBwKTtcbiAgICByZXR1cm4gZW5kcG9pbnRzO1xufTtcbm1vZHVsZS5leHBvcnRzID0gZXhwcmVzc0xpc3RFbmRwb2ludHM7XG4iXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7O0FBQUMsU0FBQUEsbUJBQUFDLENBQUEsV0FBQUMsa0JBQUEsQ0FBQUQsQ0FBQSxLQUFBRSxnQkFBQSxDQUFBRixDQUFBLEtBQUFHLDJCQUFBLENBQUFILENBQUEsS0FBQUksa0JBQUE7QUFBQSxTQUFBQSxtQkFBQSxjQUFBQyxTQUFBO0FBQUEsU0FBQUYsNEJBQUFILENBQUEsRUFBQU0sQ0FBQSxRQUFBTixDQUFBLDJCQUFBQSxDQUFBLFNBQUFPLGlCQUFBLENBQUFQLENBQUEsRUFBQU0sQ0FBQSxPQUFBRSxDQUFBLE1BQUFDLFFBQUEsQ0FBQUMsSUFBQSxDQUFBVixDQUFBLEVBQUFXLEtBQUEsNkJBQUFILENBQUEsSUFBQVIsQ0FBQSxDQUFBWSxXQUFBLEtBQUFKLENBQUEsR0FBQVIsQ0FBQSxDQUFBWSxXQUFBLENBQUFDLElBQUEsYUFBQUwsQ0FBQSxjQUFBQSxDQUFBLEdBQUFNLEtBQUEsQ0FBQUMsSUFBQSxDQUFBZixDQUFBLG9CQUFBUSxDQUFBLCtDQUFBUSxJQUFBLENBQUFSLENBQUEsSUFBQUQsaUJBQUEsQ0FBQVAsQ0FBQSxFQUFBTSxDQUFBO0FBQUEsU0FBQUosaUJBQUFGLENBQUEsOEJBQUFpQixNQUFBLFlBQUFqQixDQUFBLENBQUFpQixNQUFBLENBQUFDLFFBQUEsYUFBQWxCLENBQUEsdUJBQUFjLEtBQUEsQ0FBQUMsSUFBQSxDQUFBZixDQUFBO0FBQUEsU0FBQUMsbUJBQUFELENBQUEsUUFBQWMsS0FBQSxDQUFBSyxPQUFBLENBQUFuQixDQUFBLFVBQUFPLGlCQUFBLENBQUFQLENBQUE7QUFBQSxTQUFBTyxrQkFBQVAsQ0FBQSxFQUFBTSxDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBTixDQUFBLENBQUFvQixNQUFBLE1BQUFkLENBQUEsR0FBQU4sQ0FBQSxDQUFBb0IsTUFBQSxZQUFBQyxDQUFBLE1BQUFDLENBQUEsR0FBQVIsS0FBQSxDQUFBUixDQUFBLEdBQUFlLENBQUEsR0FBQWYsQ0FBQSxFQUFBZSxDQUFBLElBQUFDLENBQUEsQ0FBQUQsQ0FBQSxJQUFBckIsQ0FBQSxDQUFBcUIsQ0FBQSxVQUFBQyxDQUFBO0FBQ2JDLE1BQU0sQ0FBQ0MsY0FBYyxDQUFDQyxPQUFPLEVBQUUsWUFBWSxFQUFFO0VBQUVDLEtBQUssRUFBRTtBQUFLLENBQUMsQ0FBQztBQUM3RCxJQUFNQyw4QkFBOEIsR0FBRyxpRkFBaUY7QUFDeEgsSUFBTUMsc0NBQXNDLEdBQUcsd0JBQXdCO0FBQ3ZFLElBQU1DLHdCQUF3QixHQUFHLDRCQUE0QjtBQUM3RCxJQUFNQyw0QkFBNEIsR0FBRyxvQkFBb0I7QUFDekQsSUFBTUMsOEJBQThCLEdBQUcsbUJBQW1CO0FBQzFELElBQU1DLHNCQUFzQixHQUFHLENBQzNCLFFBQVEsRUFDUixnQkFBZ0IsRUFDaEIsYUFBYSxDQUNoQjtBQUNELElBQU1DLGVBQWUsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBYUMsS0FBSyxFQUFFO0VBQ3JDLElBQUlDLE9BQU8sR0FBR1osTUFBTSxDQUFDYSxJQUFJLENBQUNGLEtBQUssQ0FBQ0MsT0FBTyxDQUFDO0VBQ3hDQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQ0UsTUFBTSxDQUFDLFVBQUNDLE1BQU07SUFBQSxPQUFLQSxNQUFNLEtBQUssTUFBTTtFQUFBLEVBQUM7RUFDdkRILE9BQU8sR0FBR0EsT0FBTyxDQUFDSSxHQUFHLENBQUMsVUFBQ0QsTUFBTTtJQUFBLE9BQUtBLE1BQU0sQ0FBQ0UsV0FBVyxDQUFDLENBQUM7RUFBQSxFQUFDO0VBQ3ZELE9BQU9MLE9BQU87QUFDbEIsQ0FBQztBQUNELElBQU1NLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQWFQLEtBQUssRUFBRTtFQUN6QyxPQUFPQSxLQUFLLENBQUNRLEtBQUssQ0FBQ0gsR0FBRyxDQUFDLFVBQUNJLElBQUksRUFBSztJQUM3QixPQUFPQSxJQUFJLENBQUNDLE1BQU0sQ0FBQy9CLElBQUksSUFBSSxXQUFXO0VBQzFDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFDRCxJQUFNZ0MsU0FBUyxHQUFHLFNBQVpBLFNBQVNBLENBQWFDLGlCQUFpQixFQUFFO0VBQzNDLE9BQU9qQix3QkFBd0IsQ0FBQ2IsSUFBSSxDQUFDOEIsaUJBQWlCLENBQUM7QUFDM0QsQ0FBQztBQUNELFNBQVNDLFlBQVlBLENBQUNDLElBQUksRUFBRUMsSUFBSSxFQUFFO0VBQzlCLE9BQU8sQ0FBQ0QsSUFBSSxHQUFHQyxJQUFJLEVBQUVDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUNBLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRztBQUN2RTtBQUNBLElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQWFqQixLQUFLLEVBQUVrQixRQUFRLEVBQUU7RUFDakQsSUFBTUMsS0FBSyxHQUFHLEVBQUU7RUFDaEIsSUFBSXZDLEtBQUssQ0FBQ0ssT0FBTyxDQUFDZSxLQUFLLENBQUNlLElBQUksQ0FBQyxFQUFFO0lBQzNCSSxLQUFLLENBQUNDLElBQUksQ0FBQUMsS0FBQSxDQUFWRixLQUFLLEVBQUF0RCxrQkFBQSxDQUFTbUMsS0FBSyxDQUFDZSxJQUFJLEVBQUM7RUFDN0IsQ0FBQyxNQUNJO0lBQ0RJLEtBQUssQ0FBQ0MsSUFBSSxDQUFDcEIsS0FBSyxDQUFDZSxJQUFJLENBQUM7RUFDMUI7RUFDQSxJQUFNTyxTQUFTLEdBQUdILEtBQUssQ0FBQ2QsR0FBRyxDQUFDLFVBQUNVLElBQUksRUFBSztJQUNsQyxJQUFNUSxZQUFZLEdBQUdWLFlBQVksQ0FBQ0ssUUFBUSxFQUFFSCxJQUFJLENBQUM7SUFDakQsSUFBTVMsUUFBUSxHQUFHO01BQ2JULElBQUksRUFBRVEsWUFBWSxDQUFDUCxPQUFPLENBQUNwQiw0QkFBNEIsRUFBRSxJQUFJLENBQUM7TUFDOURLLE9BQU8sRUFBRUYsZUFBZSxDQUFDQyxLQUFLLENBQUM7TUFDL0J5QixXQUFXLEVBQUVsQixtQkFBbUIsQ0FBQ1AsS0FBSztJQUMxQyxDQUFDO0lBQ0QsT0FBT3dCLFFBQVE7RUFDbkIsQ0FBQyxDQUFDO0VBQ0YsT0FBT0YsU0FBUztBQUNwQixDQUFDO0FBQ0QsSUFBTUksZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBYWQsaUJBQWlCLEVBQUVlLE1BQU0sRUFBRTtFQUMxRCxJQUFJQyxZQUFZLEdBQUdoQixpQkFBaUIsQ0FBQ3JDLFFBQVEsQ0FBQyxDQUFDO0VBQy9DLElBQUlzRCxxQkFBcUIsR0FBR3BDLDhCQUE4QixDQUFDcUMsSUFBSSxDQUFDRixZQUFZLENBQUM7RUFDN0UsSUFBSUcsVUFBVSxHQUFHLENBQUM7RUFBQyxJQUFBQyxLQUFBLFlBQUFBLE1BQUEsRUFDYTtJQUM1QixJQUFNQyxTQUFTLEdBQUdOLE1BQU0sQ0FBQ0ksVUFBVSxDQUFDLENBQUNwRCxJQUFJO0lBQ3pDLElBQU11RCxPQUFPLE9BQUFDLE1BQUEsQ0FBT0YsU0FBUyxDQUFFO0lBQy9CTCxZQUFZLEdBQUdBLFlBQVksQ0FDdEJaLE9BQU8sQ0FBQ3RCLHNDQUFzQyxFQUFFLFVBQUMwQyxHQUFHLEVBQUs7TUFDMUQsSUFBSUEsR0FBRyxDQUFDQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDMUIsYUFBQUYsTUFBQSxDQUFhRCxPQUFPO01BQ3hCO01BQ0EsT0FBT0EsT0FBTztJQUNsQixDQUFDLENBQUM7SUFDRkgsVUFBVSxFQUFFO0VBQ2hCLENBQUM7RUFYRCxPQUFPcEIsU0FBUyxDQUFDaUIsWUFBWSxDQUFDO0lBQUFJLEtBQUE7RUFBQTtFQVk5QixJQUFJSixZQUFZLEtBQUtoQixpQkFBaUIsQ0FBQ3JDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7SUFDL0NzRCxxQkFBcUIsR0FBR3BDLDhCQUE4QixDQUFDcUMsSUFBSSxDQUFDRixZQUFZLENBQUM7RUFDN0U7RUFDQSxJQUFNVSxVQUFVLEdBQUdULHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDYixPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQztFQUNqRSxPQUFPc0IsVUFBVTtBQUNyQixDQUFDO0FBQ0QsSUFBTUMsY0FBYyxHQUFHLFNBQWpCQSxjQUFjQSxDQUFhQyxHQUFHLEVBQUV0QixRQUFRLEVBQUVJLFNBQVMsRUFBRTtFQUN2RCxJQUFNZCxLQUFLLEdBQUdnQyxHQUFHLENBQUNoQyxLQUFLLElBQUtnQyxHQUFHLENBQUNDLE9BQU8sSUFBSUQsR0FBRyxDQUFDQyxPQUFPLENBQUNqQyxLQUFNO0VBQzdEYyxTQUFTLEdBQUdBLFNBQVMsSUFBSSxFQUFFO0VBQzNCSixRQUFRLEdBQUdBLFFBQVEsSUFBSSxFQUFFO0VBQ3pCLElBQUksQ0FBQ1YsS0FBSyxFQUFFO0lBQ1IsSUFBSWMsU0FBUyxDQUFDcEMsTUFBTSxFQUFFO01BQ2xCb0MsU0FBUyxHQUFHb0IsWUFBWSxDQUFDcEIsU0FBUyxFQUFFLENBQUM7UUFDN0JQLElBQUksRUFBRUcsUUFBUTtRQUNkakIsT0FBTyxFQUFFLEVBQUU7UUFDWHdCLFdBQVcsRUFBRTtNQUNqQixDQUFDLENBQUMsQ0FBQztJQUNYO0VBQ0osQ0FBQyxNQUNJO0lBQ0RILFNBQVMsR0FBR3FCLFVBQVUsQ0FBQ25DLEtBQUssRUFBRVUsUUFBUSxFQUFFSSxTQUFTLENBQUM7RUFDdEQ7RUFDQSxPQUFPQSxTQUFTO0FBQ3BCLENBQUM7QUFDRCxJQUFNb0IsWUFBWSxHQUFHLFNBQWZBLFlBQVlBLENBQWFFLGdCQUFnQixFQUFFQyxjQUFjLEVBQUU7RUFDN0RBLGNBQWMsQ0FBQ0MsT0FBTyxDQUFDLFVBQUNDLFdBQVcsRUFBSztJQUNwQyxJQUFNQyxnQkFBZ0IsR0FBR0osZ0JBQWdCLENBQUNLLElBQUksQ0FBQyxVQUFDekIsUUFBUTtNQUFBLE9BQUtBLFFBQVEsQ0FBQ1QsSUFBSSxLQUFLZ0MsV0FBVyxDQUFDaEMsSUFBSTtJQUFBLEVBQUM7SUFDaEcsSUFBSWlDLGdCQUFnQixLQUFLRSxTQUFTLEVBQUU7TUFDaEMsSUFBTUMsVUFBVSxHQUFHSixXQUFXLENBQUM5QyxPQUFPLENBQUNFLE1BQU0sQ0FBQyxVQUFDQyxNQUFNO1FBQUEsT0FBSyxDQUFDNEMsZ0JBQWdCLENBQUMvQyxPQUFPLENBQUNtRCxRQUFRLENBQUNoRCxNQUFNLENBQUM7TUFBQSxFQUFDO01BQ3JHNEMsZ0JBQWdCLENBQUMvQyxPQUFPLEdBQUcrQyxnQkFBZ0IsQ0FBQy9DLE9BQU8sQ0FBQ2tDLE1BQU0sQ0FBQ2dCLFVBQVUsQ0FBQztJQUMxRSxDQUFDLE1BQ0k7TUFDRFAsZ0JBQWdCLENBQUN4QixJQUFJLENBQUMyQixXQUFXLENBQUM7SUFDdEM7RUFDSixDQUFDLENBQUM7RUFDRixPQUFPSCxnQkFBZ0I7QUFDM0IsQ0FBQztBQUNELElBQU1ELFVBQVUsR0FBRyxTQUFiQSxVQUFVQSxDQUFhbkMsS0FBSyxFQUFFVSxRQUFRLEVBQUVJLFNBQVMsRUFBRTtFQUNyRGQsS0FBSyxDQUFDc0MsT0FBTyxDQUFDLFVBQUNPLFNBQVMsRUFBSztJQUN6QixJQUFJQSxTQUFTLENBQUNyRCxLQUFLLEVBQUU7TUFDakIsSUFBTXNELFlBQVksR0FBR3JDLGlCQUFpQixDQUFDb0MsU0FBUyxDQUFDckQsS0FBSyxFQUFFa0IsUUFBUSxDQUFDO01BQ2pFSSxTQUFTLEdBQUdvQixZQUFZLENBQUNwQixTQUFTLEVBQUVnQyxZQUFZLENBQUM7SUFDckQsQ0FBQyxNQUNJLElBQUl4RCxzQkFBc0IsQ0FBQ3NELFFBQVEsQ0FBQ0MsU0FBUyxDQUFDMUUsSUFBSSxDQUFDLEVBQUU7TUFDdEQsSUFBTTRFLG1CQUFtQixHQUFHOUQsOEJBQThCLENBQUNYLElBQUksQ0FBQ3VFLFNBQVMsQ0FBQ0csTUFBTSxDQUFDO01BQ2pGLElBQUlDLFdBQVcsR0FBR3ZDLFFBQVE7TUFDMUIsSUFBSXFDLG1CQUFtQixFQUFFO1FBQ3JCLElBQU1qQixVQUFVLEdBQUdaLGdCQUFnQixDQUFDMkIsU0FBUyxDQUFDRyxNQUFNLEVBQUVILFNBQVMsQ0FBQ25ELElBQUksQ0FBQztRQUNyRXVELFdBQVcsUUFBQXRCLE1BQUEsQ0FBUUcsVUFBVSxDQUFFO01BQ25DLENBQUMsTUFDSSxJQUFJLENBQUNlLFNBQVMsQ0FBQ3RDLElBQUksSUFBSXNDLFNBQVMsQ0FBQ0csTUFBTSxJQUFJSCxTQUFTLENBQUNHLE1BQU0sQ0FBQ2pGLFFBQVEsQ0FBQyxDQUFDLEtBQUtzQiw4QkFBOEIsRUFBRTtRQUM1RyxJQUFNNkQsVUFBVSxjQUFBdkIsTUFBQSxDQUFja0IsU0FBUyxDQUFDRyxNQUFNLE9BQUk7UUFDbERDLFdBQVcsUUFBQXRCLE1BQUEsQ0FBUXVCLFVBQVUsQ0FBRTtNQUNuQztNQUNBcEMsU0FBUyxHQUFHaUIsY0FBYyxDQUFDYyxTQUFTLENBQUMzQyxNQUFNLEVBQUUrQyxXQUFXLEVBQUVuQyxTQUFTLENBQUM7SUFDeEU7RUFDSixDQUFDLENBQUM7RUFDRixPQUFPQSxTQUFTO0FBQ3BCLENBQUM7QUFDRCxJQUFNcUMsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FBYW5CLEdBQUcsRUFBRTtFQUN4QyxJQUFNbEIsU0FBUyxHQUFHaUIsY0FBYyxDQUFDQyxHQUFHLENBQUM7RUFDckMsT0FBT2xCLFNBQVM7QUFDcEIsQ0FBQztBQUNEc0MsTUFBTSxDQUFDckUsT0FBTyxHQUFHb0Usb0JBQW9CIiwiaWdub3JlTGlzdCI6W119
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "specmatic",
3
- "version": "2.0.38",
4
- "specmaticVersion": "2.0.38",
3
+ "version": "2.0.41",
4
+ "specmaticVersion": "2.0.41",
5
5
  "description": "Node wrapper for Specmatic",
6
6
  "main": "dist/index.js",
7
7
  "scripts": {
@@ -9,7 +9,7 @@
9
9
  "type-check:watch": "npm run type-check -- --watch",
10
10
  "build": "npm test && rimraf dist && npm run build:types && npm run build:js",
11
11
  "build:types": "tsc --emitDeclarationOnly",
12
- "build:js": "babel src --out-dir dist --ignore 'src/**/__tests__/**/*.ts' --extensions \".ts,.tsx\" --source-maps inline",
12
+ "build:js": "babel src --out-dir dist --ignore 'src/**/__tests__/**/*.ts' --extensions \".ts,.js,.tsx\" --source-maps inline",
13
13
  "test": "rimraf coverage && jest --coverage",
14
14
  "prepack": "node src/downloadSpecmaticJar.js",
15
15
  "prepare": "npm run prepack && npm run build:types && npm run build:js"
@@ -48,7 +48,6 @@
48
48
  },
49
49
  "dependencies": {
50
50
  "axios": "^1.7.7",
51
- "express-list-endpoints": "github:znsio/express-list-endpoints#21c92d15159abffd772acb27027ab84fcec1a6ac",
52
51
  "fast-xml-parser": "^4.5.0",
53
52
  "terminate": "^2.8.0",
54
53
  "tree-kill": "^1.2.2",
@@ -61,7 +60,6 @@
61
60
  "@babel/preset-env": "^7.25.4",
62
61
  "@babel/preset-typescript": "^7.24.7",
63
62
  "@types/express": "^5.0.0",
64
- "@types/express-list-endpoints": "github:znsio/express-list-endpoints#21c92d15159abffd772acb27027ab84fcec1a6ac",
65
63
  "@types/jest": "^29.5.13",
66
64
  "@types/jest-when": "^3.5.5",
67
65
  "@types/node": "^22.7.2",
package/specmatic.jar CHANGED
Binary file
package/src/core/index.ts CHANGED
@@ -5,7 +5,7 @@ import { XMLParser } from 'fast-xml-parser'
5
5
  import fs from 'fs'
6
6
  import logger from '../common/logger'
7
7
  import { callCore } from '../common/runner'
8
- import listExpressEndpoints from 'express-list-endpoints'
8
+ import listExpressEndpoints from '../lib/express-list-endpoints';
9
9
  import http from 'http'
10
10
  import { AddressInfo } from 'net'
11
11
  import { gracefulShutdown } from './shutdownUtils'
@@ -0,0 +1,15 @@
1
+ export = expressListEndpoints;
2
+ declare function expressListEndpoints(app: import('express').Express | import('express').Router | any): Endpoint[];
3
+ declare namespace expressListEndpoints {
4
+ export { Route, Endpoint };
5
+ }
6
+ type Endpoint = {
7
+ path: string;
8
+ methods: string[];
9
+ middlewares: string[];
10
+ };
11
+ type Route = {
12
+ methods: Object;
13
+ path: string | string[];
14
+ stack: any[];
15
+ };
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const regExpToParseExpressPathRegExp = /^\/\^\\?\/?(?:(:?[\w\\.-]*(?:\\\/:?[\w\\.-]*)*)|(\(\?:\\?\/?\([^)]+\)\)))\\\/.*/;
4
+ const regExpToReplaceExpressPathRegExpParams = /\(\?:\\?\/?\([^)]+\)\)/;
5
+ const regexpExpressParamRegexp = /\(\?:\\?\\?\/?\([^)]+\)\)/g;
6
+ const regexpExpressPathParamRegexp = /(:[^)]+)\([^)]+\)/g;
7
+ const EXPRESS_ROOT_PATH_REGEXP_VALUE = '/^\\/?(?=\\/|$)/i';
8
+ const STACK_ITEM_VALID_NAMES = [
9
+ 'router',
10
+ 'bound dispatch',
11
+ 'mounted_app'
12
+ ];
13
+ const getRouteMethods = function (route) {
14
+ let methods = Object.keys(route.methods);
15
+ methods = methods.filter((method) => method !== '_all');
16
+ methods = methods.map((method) => method.toUpperCase());
17
+ return methods;
18
+ };
19
+ const getRouteMiddlewares = function (route) {
20
+ return route.stack.map((item) => {
21
+ return item.handle.name || 'anonymous';
22
+ });
23
+ };
24
+ const hasParams = function (expressPathRegExp) {
25
+ return regexpExpressParamRegexp.test(expressPathRegExp);
26
+ };
27
+ function combinePaths(base, path) {
28
+ return (base + path).replace(/\/+/g, "/").replace(/\/$/, "") || "/";
29
+ }
30
+ const parseExpressRoute = function (route, basePath) {
31
+ const paths = [];
32
+ if (Array.isArray(route.path)) {
33
+ paths.push(...route.path);
34
+ }
35
+ else {
36
+ paths.push(route.path);
37
+ }
38
+ const endpoints = paths.map((path) => {
39
+ const completePath = combinePaths(basePath, path);
40
+ const endpoint = {
41
+ path: completePath.replace(regexpExpressPathParamRegexp, '$1'),
42
+ methods: getRouteMethods(route),
43
+ middlewares: getRouteMiddlewares(route)
44
+ };
45
+ return endpoint;
46
+ });
47
+ return endpoints;
48
+ };
49
+ const parseExpressPath = function (expressPathRegExp, params) {
50
+ let parsedRegExp = expressPathRegExp.toString();
51
+ let expressPathRegExpExec = regExpToParseExpressPathRegExp.exec(parsedRegExp);
52
+ let paramIndex = 0;
53
+ while (hasParams(parsedRegExp)) {
54
+ const paramName = params[paramIndex].name;
55
+ const paramId = `:${paramName}`;
56
+ parsedRegExp = parsedRegExp
57
+ .replace(regExpToReplaceExpressPathRegExpParams, (str) => {
58
+ if (str.startsWith('(?:\\/')) {
59
+ return `\\/${paramId}`;
60
+ }
61
+ return paramId;
62
+ });
63
+ paramIndex++;
64
+ }
65
+ if (parsedRegExp !== expressPathRegExp.toString()) {
66
+ expressPathRegExpExec = regExpToParseExpressPathRegExp.exec(parsedRegExp);
67
+ }
68
+ const parsedPath = expressPathRegExpExec[1].replace(/\\\//g, '/');
69
+ return parsedPath;
70
+ };
71
+ const parseEndpoints = function (app, basePath, endpoints) {
72
+ const stack = app.stack || (app._router && app._router.stack);
73
+ endpoints = endpoints || [];
74
+ basePath = basePath || '';
75
+ if (!stack) {
76
+ if (endpoints.length) {
77
+ endpoints = addEndpoints(endpoints, [{
78
+ path: basePath,
79
+ methods: [],
80
+ middlewares: []
81
+ }]);
82
+ }
83
+ }
84
+ else {
85
+ endpoints = parseStack(stack, basePath, endpoints);
86
+ }
87
+ return endpoints;
88
+ };
89
+ const addEndpoints = function (currentEndpoints, endpointsToAdd) {
90
+ endpointsToAdd.forEach((newEndpoint) => {
91
+ const existingEndpoint = currentEndpoints.find((endpoint) => endpoint.path === newEndpoint.path);
92
+ if (existingEndpoint !== undefined) {
93
+ const newMethods = newEndpoint.methods.filter((method) => !existingEndpoint.methods.includes(method));
94
+ existingEndpoint.methods = existingEndpoint.methods.concat(newMethods);
95
+ }
96
+ else {
97
+ currentEndpoints.push(newEndpoint);
98
+ }
99
+ });
100
+ return currentEndpoints;
101
+ };
102
+ const parseStack = function (stack, basePath, endpoints) {
103
+ stack.forEach((stackItem) => {
104
+ if (stackItem.route) {
105
+ const newEndpoints = parseExpressRoute(stackItem.route, basePath);
106
+ endpoints = addEndpoints(endpoints, newEndpoints);
107
+ }
108
+ else if (STACK_ITEM_VALID_NAMES.includes(stackItem.name)) {
109
+ const isExpressPathRegexp = regExpToParseExpressPathRegExp.test(stackItem.regexp);
110
+ let newBasePath = basePath;
111
+ if (isExpressPathRegexp) {
112
+ const parsedPath = parseExpressPath(stackItem.regexp, stackItem.keys);
113
+ newBasePath += `/${parsedPath}`;
114
+ }
115
+ else if (!stackItem.path && stackItem.regexp && stackItem.regexp.toString() !== EXPRESS_ROOT_PATH_REGEXP_VALUE) {
116
+ const regExpPath = ` RegExp(${stackItem.regexp}) `;
117
+ newBasePath += `/${regExpPath}`;
118
+ }
119
+ endpoints = parseEndpoints(stackItem.handle, newBasePath, endpoints);
120
+ }
121
+ });
122
+ return endpoints;
123
+ };
124
+ const expressListEndpoints = function (app) {
125
+ const endpoints = parseEndpoints(app);
126
+ return endpoints;
127
+ };
128
+ module.exports = expressListEndpoints;