@verdaccio/canary 6.3.2-canary.404363f
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/LICENSE +21 -0
- package/README.md +38 -0
- package/bin/verdaccio +3 -0
- package/bin/verdaccio-canary +3 -0
- package/build/api/debug/index.js +28 -0
- package/build/api/endpoint/api/dist-tags.js +77 -0
- package/build/api/endpoint/api/package.js +103 -0
- package/build/api/endpoint/api/ping.js +13 -0
- package/build/api/endpoint/api/publish.js +359 -0
- package/build/api/endpoint/api/search.js +107 -0
- package/build/api/endpoint/api/star.js +73 -0
- package/build/api/endpoint/api/stars.js +42 -0
- package/build/api/endpoint/api/user.js +84 -0
- package/build/api/endpoint/api/v1/profile.js +69 -0
- package/build/api/endpoint/api/v1/search.js +181 -0
- package/build/api/endpoint/api/v1/token.js +140 -0
- package/build/api/endpoint/api/whoami.js +15 -0
- package/build/api/endpoint/index.js +58 -0
- package/build/api/index.js +105 -0
- package/build/api/middleware.js +56 -0
- package/build/api/web/api/index.js +31 -0
- package/build/api/web/api/package.js +165 -0
- package/build/api/web/api/search.js +53 -0
- package/build/api/web/api/user.js +70 -0
- package/build/api/web/api/utils.js +14 -0
- package/build/api/web/html/favicon.ico +0 -0
- package/build/api/web/index.js +96 -0
- package/build/index.js +76 -0
- package/build/lib/auth-utils.js +16 -0
- package/build/lib/bootstrap.js +167 -0
- package/build/lib/cli/cli.js +26 -0
- package/build/lib/cli/commands/info.js +26 -0
- package/build/lib/cli/commands/init.js +78 -0
- package/build/lib/cli/commands/version.js +17 -0
- package/build/lib/cli/utils.js +14 -0
- package/build/lib/cli.js +16 -0
- package/build/lib/config.js +22 -0
- package/build/lib/constants.js +121 -0
- package/build/lib/experiments.js +29 -0
- package/build/lib/local-storage.js +760 -0
- package/build/lib/logger/index.js +21 -0
- package/build/lib/metadata-utils.js +39 -0
- package/build/lib/run-server.js +122 -0
- package/build/lib/storage-utils.js +282 -0
- package/build/lib/storage.js +676 -0
- package/build/lib/up-storage.js +605 -0
- package/build/lib/uplink-util.js +36 -0
- package/build/lib/utils.js +265 -0
- package/conf/.gitkeep +0 -0
- package/index.js +1 -0
- package/package.json +156 -0
- package/security.txt +5 -0
- package/systemd/verdaccio.service +11 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.logger = void 0;
|
|
7
|
+
exports.setup = setup;
|
|
8
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
9
|
+
var _logger = require("@verdaccio/logger");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
let logger = exports.logger = void 0;
|
|
12
|
+
const debug = (0, _debug.default)('verdaccio:logger');
|
|
13
|
+
function setup(options) {
|
|
14
|
+
debug('setup logger with options %o', options);
|
|
15
|
+
if (!logger) {
|
|
16
|
+
debug('logger not initialized, setting up');
|
|
17
|
+
exports.logger = logger = (0, _logger.setup)(options);
|
|
18
|
+
debug('logger initialized');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVidWciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2dnZXIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJsb2dnZXIiLCJleHBvcnRzIiwiZGVidWciLCJjcmVhdGVEZWJ1ZyIsInNldHVwIiwib3B0aW9ucyIsInNldHVwTW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9sb2dnZXIvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZURlYnVnIGZyb20gJ2RlYnVnJztcblxuaW1wb3J0IHsgc2V0dXAgYXMgc2V0dXBNb2R1bGUgfSBmcm9tICdAdmVyZGFjY2lvL2xvZ2dlcic7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcblxubGV0IGxvZ2dlcjogTG9nZ2VyO1xuXG5jb25zdCBkZWJ1ZyA9IGNyZWF0ZURlYnVnKCd2ZXJkYWNjaW86bG9nZ2VyJyk7XG5cbnR5cGUgU2V0dXBNb2R1bGVPcHRpb25zID0gUGFyYW1ldGVyczx0eXBlb2Ygc2V0dXBNb2R1bGU+WzBdO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXAob3B0aW9uczogU2V0dXBNb2R1bGVPcHRpb25zKTogdm9pZCB7XG4gIGRlYnVnKCdzZXR1cCBsb2dnZXIgd2l0aCBvcHRpb25zICVvJywgb3B0aW9ucyk7XG4gIGlmICghbG9nZ2VyKSB7XG4gICAgZGVidWcoJ2xvZ2dlciBub3QgaW5pdGlhbGl6ZWQsIHNldHRpbmcgdXAnKTtcbiAgICBsb2dnZXIgPSBzZXR1cE1vZHVsZShvcHRpb25zKTtcbiAgICBkZWJ1ZygnbG9nZ2VyIGluaXRpYWxpemVkJyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgbG9nZ2VyIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFBeUQsU0FBQUQsdUJBQUFHLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFHekQsSUFBSUcsTUFBYyxHQUFBQyxPQUFBLENBQUFELE1BQUE7QUFFbEIsTUFBTUUsS0FBSyxHQUFHLElBQUFDLGNBQVcsRUFBQyxrQkFBa0IsQ0FBQztBQUl0QyxTQUFTQyxLQUFLQSxDQUFDQyxPQUEyQixFQUFRO0VBQ3ZESCxLQUFLLENBQUMsOEJBQThCLEVBQUVHLE9BQU8sQ0FBQztFQUM5QyxJQUFJLENBQUNMLE1BQU0sRUFBRTtJQUNYRSxLQUFLLENBQUMsb0NBQW9DLENBQUM7SUFDM0NELE9BQUEsQ0FBQUQsTUFBQSxHQUFBQSxNQUFNLEdBQUcsSUFBQU0sYUFBVyxFQUFDRCxPQUFPLENBQUM7SUFDN0JILEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztFQUM3QjtBQUNGIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.mergeVersions = mergeVersions;
|
|
7
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
8
|
+
var _semver = _interopRequireDefault(require("semver"));
|
|
9
|
+
var _constants = require("./constants");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
/**
|
|
12
|
+
* Function gets a local info and an info from uplinks and tries to merge it
|
|
13
|
+
exported for unit tests only.
|
|
14
|
+
* @param {*} local
|
|
15
|
+
* @param {*} up
|
|
16
|
+
* @param {*} config
|
|
17
|
+
* @static
|
|
18
|
+
*/
|
|
19
|
+
function mergeVersions(local, up) {
|
|
20
|
+
// copy new versions to a cache
|
|
21
|
+
// NOTE: if a certain version was updated, we can't refresh it reliably
|
|
22
|
+
for (const i in up.versions) {
|
|
23
|
+
if (_lodash.default.isNil(local.versions[i])) {
|
|
24
|
+
local.versions[i] = up.versions[i];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
for (const i in up[_constants.DIST_TAGS]) {
|
|
28
|
+
if (local[_constants.DIST_TAGS][i] !== up[_constants.DIST_TAGS][i]) {
|
|
29
|
+
if (!local[_constants.DIST_TAGS][i] || _semver.default.lte(local[_constants.DIST_TAGS][i], up[_constants.DIST_TAGS][i])) {
|
|
30
|
+
local[_constants.DIST_TAGS][i] = up[_constants.DIST_TAGS][i];
|
|
31
|
+
}
|
|
32
|
+
if (i === 'latest' && local[_constants.DIST_TAGS][i] === up[_constants.DIST_TAGS][i]) {
|
|
33
|
+
// if remote has more fresh package, we should borrow its readme
|
|
34
|
+
local.readme = up.readme;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc2VtdmVyIiwiX2NvbnN0YW50cyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIm1lcmdlVmVyc2lvbnMiLCJsb2NhbCIsInVwIiwiaSIsInZlcnNpb25zIiwiXyIsImlzTmlsIiwiRElTVF9UQUdTIiwic2VtdmVyIiwibHRlIiwicmVhZG1lIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9tZXRhZGF0YS11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuXG5pbXBvcnQgeyBQYWNrYWdlIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5cbmltcG9ydCB7IERJU1RfVEFHUyB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBGdW5jdGlvbiBnZXRzIGEgbG9jYWwgaW5mbyBhbmQgYW4gaW5mbyBmcm9tIHVwbGlua3MgYW5kIHRyaWVzIHRvIG1lcmdlIGl0XG4gZXhwb3J0ZWQgZm9yIHVuaXQgdGVzdHMgb25seS5cbiAgKiBAcGFyYW0geyp9IGxvY2FsXG4gICogQHBhcmFtIHsqfSB1cFxuICAqIEBwYXJhbSB7Kn0gY29uZmlnXG4gICogQHN0YXRpY1xuICAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlVmVyc2lvbnMobG9jYWw6IFBhY2thZ2UsIHVwOiBQYWNrYWdlKSB7XG4gIC8vIGNvcHkgbmV3IHZlcnNpb25zIHRvIGEgY2FjaGVcbiAgLy8gTk9URTogaWYgYSBjZXJ0YWluIHZlcnNpb24gd2FzIHVwZGF0ZWQsIHdlIGNhbid0IHJlZnJlc2ggaXQgcmVsaWFibHlcbiAgZm9yIChjb25zdCBpIGluIHVwLnZlcnNpb25zKSB7XG4gICAgaWYgKF8uaXNOaWwobG9jYWwudmVyc2lvbnNbaV0pKSB7XG4gICAgICBsb2NhbC52ZXJzaW9uc1tpXSA9IHVwLnZlcnNpb25zW2ldO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgaSBpbiB1cFtESVNUX1RBR1NdKSB7XG4gICAgaWYgKGxvY2FsW0RJU1RfVEFHU11baV0gIT09IHVwW0RJU1RfVEFHU11baV0pIHtcbiAgICAgIGlmICghbG9jYWxbRElTVF9UQUdTXVtpXSB8fCBzZW12ZXIubHRlKGxvY2FsW0RJU1RfVEFHU11baV0sIHVwW0RJU1RfVEFHU11baV0pKSB7XG4gICAgICAgIGxvY2FsW0RJU1RfVEFHU11baV0gPSB1cFtESVNUX1RBR1NdW2ldO1xuICAgICAgfVxuICAgICAgaWYgKGkgPT09ICdsYXRlc3QnICYmIGxvY2FsW0RJU1RfVEFHU11baV0gPT09IHVwW0RJU1RfVEFHU11baV0pIHtcbiAgICAgICAgLy8gaWYgcmVtb3RlIGhhcyBtb3JlIGZyZXNoIHBhY2thZ2UsIHdlIHNob3VsZCBib3Jyb3cgaXRzIHJlYWRtZVxuICAgICAgICBsb2NhbC5yZWFkbWUgPSB1cC5yZWFkbWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUlBLElBQUFFLFVBQUEsR0FBQUYsT0FBQTtBQUF3QyxTQUFBRCx1QkFBQUksQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUV4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0csYUFBYUEsQ0FBQ0MsS0FBYyxFQUFFQyxFQUFXLEVBQUU7RUFDekQ7RUFDQTtFQUNBLEtBQUssTUFBTUMsQ0FBQyxJQUFJRCxFQUFFLENBQUNFLFFBQVEsRUFBRTtJQUMzQixJQUFJQyxlQUFDLENBQUNDLEtBQUssQ0FBQ0wsS0FBSyxDQUFDRyxRQUFRLENBQUNELENBQUMsQ0FBQyxDQUFDLEVBQUU7TUFDOUJGLEtBQUssQ0FBQ0csUUFBUSxDQUFDRCxDQUFDLENBQUMsR0FBR0QsRUFBRSxDQUFDRSxRQUFRLENBQUNELENBQUMsQ0FBQztJQUNwQztFQUNGO0VBRUEsS0FBSyxNQUFNQSxDQUFDLElBQUlELEVBQUUsQ0FBQ0ssb0JBQVMsQ0FBQyxFQUFFO0lBQzdCLElBQUlOLEtBQUssQ0FBQ00sb0JBQVMsQ0FBQyxDQUFDSixDQUFDLENBQUMsS0FBS0QsRUFBRSxDQUFDSyxvQkFBUyxDQUFDLENBQUNKLENBQUMsQ0FBQyxFQUFFO01BQzVDLElBQUksQ0FBQ0YsS0FBSyxDQUFDTSxvQkFBUyxDQUFDLENBQUNKLENBQUMsQ0FBQyxJQUFJSyxlQUFNLENBQUNDLEdBQUcsQ0FBQ1IsS0FBSyxDQUFDTSxvQkFBUyxDQUFDLENBQUNKLENBQUMsQ0FBQyxFQUFFRCxFQUFFLENBQUNLLG9CQUFTLENBQUMsQ0FBQ0osQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM3RUYsS0FBSyxDQUFDTSxvQkFBUyxDQUFDLENBQUNKLENBQUMsQ0FBQyxHQUFHRCxFQUFFLENBQUNLLG9CQUFTLENBQUMsQ0FBQ0osQ0FBQyxDQUFDO01BQ3hDO01BQ0EsSUFBSUEsQ0FBQyxLQUFLLFFBQVEsSUFBSUYsS0FBSyxDQUFDTSxvQkFBUyxDQUFDLENBQUNKLENBQUMsQ0FBQyxLQUFLRCxFQUFFLENBQUNLLG9CQUFTLENBQUMsQ0FBQ0osQ0FBQyxDQUFDLEVBQUU7UUFDOUQ7UUFDQUYsS0FBSyxDQUFDUyxNQUFNLEdBQUdSLEVBQUUsQ0FBQ1EsTUFBTTtNQUMxQjtJQUNGO0VBQ0Y7QUFDRiIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createServerFactory = createServerFactory;
|
|
7
|
+
exports.runServer = runServer;
|
|
8
|
+
var _constants = _interopRequireDefault(require("constants"));
|
|
9
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
10
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
11
|
+
var _http = _interopRequireDefault(require("http"));
|
|
12
|
+
var _https = _interopRequireDefault(require("https"));
|
|
13
|
+
var _lodash = require("lodash");
|
|
14
|
+
var _config = require("@verdaccio/config");
|
|
15
|
+
var _index = _interopRequireDefault(require("../api/index"));
|
|
16
|
+
var _experiments = require("./experiments");
|
|
17
|
+
var _logger = require("./logger");
|
|
18
|
+
var _utils = require("./utils");
|
|
19
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
20
|
+
const debug = (0, _debug.default)('verdaccio:run-server');
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Exposes a server factory to be instantiated programmatically.
|
|
24
|
+
*
|
|
25
|
+
const app = await runServer(); // default configuration
|
|
26
|
+
const app = await runServer('./config/config.yaml');
|
|
27
|
+
const app = await runServer({ configuration });
|
|
28
|
+
app.listen(4000, (event) => {
|
|
29
|
+
// do something
|
|
30
|
+
});
|
|
31
|
+
* @param config
|
|
32
|
+
*/
|
|
33
|
+
async function runServer(config, options) {
|
|
34
|
+
const configurationParsed = (0, _config.getConfigParsed)(config);
|
|
35
|
+
(0, _utils.initLogger)(configurationParsed);
|
|
36
|
+
// merge flags and experiments for backward compatibility
|
|
37
|
+
const flags = {
|
|
38
|
+
...(configurationParsed?.flags || {}),
|
|
39
|
+
...(configurationParsed?.experiments || {})
|
|
40
|
+
};
|
|
41
|
+
(0, _experiments.displayExperimentsInfoBox)(flags);
|
|
42
|
+
const listen = options?.listenArg ?? configurationParsed?.listen;
|
|
43
|
+
const address = (0, _config.getListenAddress)(listen, _logger.logger);
|
|
44
|
+
const app = await (0, _index.default)(configurationParsed);
|
|
45
|
+
return createServerFactory(configurationParsed, address, app);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Return a native HTTP/HTTPS server instance
|
|
50
|
+
* @param config
|
|
51
|
+
* @param addr
|
|
52
|
+
* @param app
|
|
53
|
+
*/
|
|
54
|
+
function createServerFactory(config, addr, app) {
|
|
55
|
+
let serverFactory;
|
|
56
|
+
if (addr.proto === 'https') {
|
|
57
|
+
debug('https enabled');
|
|
58
|
+
try {
|
|
59
|
+
let httpsOptions = {
|
|
60
|
+
// disable insecure SSLv2 and SSLv3
|
|
61
|
+
secureOptions: _constants.default.SSL_OP_NO_SSLv2 | _constants.default.SSL_OP_NO_SSLv3
|
|
62
|
+
};
|
|
63
|
+
const keyCertConfig = config.https;
|
|
64
|
+
const pfxConfig = config.https;
|
|
65
|
+
|
|
66
|
+
// https must either have key and cert or a pfx and (optionally) a passphrase
|
|
67
|
+
if (!(keyCertConfig.key && keyCertConfig.cert || pfxConfig.pfx)) {
|
|
68
|
+
throw Error('bad format https configuration');
|
|
69
|
+
}
|
|
70
|
+
if (pfxConfig.pfx) {
|
|
71
|
+
const {
|
|
72
|
+
pfx,
|
|
73
|
+
passphrase
|
|
74
|
+
} = pfxConfig;
|
|
75
|
+
httpsOptions = (0, _lodash.assign)(httpsOptions, {
|
|
76
|
+
pfx: _fs.default.readFileSync(pfx),
|
|
77
|
+
passphrase: passphrase || ''
|
|
78
|
+
});
|
|
79
|
+
} else {
|
|
80
|
+
const {
|
|
81
|
+
key,
|
|
82
|
+
cert,
|
|
83
|
+
ca
|
|
84
|
+
} = keyCertConfig;
|
|
85
|
+
httpsOptions = (0, _lodash.assign)(httpsOptions, {
|
|
86
|
+
key: _fs.default.readFileSync(key),
|
|
87
|
+
cert: _fs.default.readFileSync(cert),
|
|
88
|
+
...(ca && {
|
|
89
|
+
ca: _fs.default.readFileSync(ca)
|
|
90
|
+
})
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
// TODO: enable http2 as feature
|
|
94
|
+
// if (config.server.http2) <-- check if force http2
|
|
95
|
+
serverFactory = _https.default.createServer(httpsOptions, app);
|
|
96
|
+
} catch (err) {
|
|
97
|
+
_logger.logger.fatal({
|
|
98
|
+
err: err
|
|
99
|
+
}, 'cannot create server: @{err.message}');
|
|
100
|
+
process.exit(2);
|
|
101
|
+
}
|
|
102
|
+
} else {
|
|
103
|
+
// http
|
|
104
|
+
debug('http enabled');
|
|
105
|
+
serverFactory = _http.default.createServer(app);
|
|
106
|
+
}
|
|
107
|
+
if (config.server && typeof config.server.keepAliveTimeout !== 'undefined' &&
|
|
108
|
+
// @ts-ignore
|
|
109
|
+
config.server.keepAliveTimeout !== 'null') {
|
|
110
|
+
// library definition for node is not up to date (doesn't contain recent 8.0 changes)
|
|
111
|
+
serverFactory.keepAliveTimeout = config.server.keepAliveTimeout * 1000;
|
|
112
|
+
}
|
|
113
|
+
// FIXE: I could not find the reason of this code.
|
|
114
|
+
unlinkAddressPath(addr);
|
|
115
|
+
return serverFactory;
|
|
116
|
+
}
|
|
117
|
+
function unlinkAddressPath(addr) {
|
|
118
|
+
if (addr.path && _fs.default.existsSync(addr.path)) {
|
|
119
|
+
_fs.default.unlinkSync(addr.path);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZGVidWciLCJfZnMiLCJfaHR0cCIsIl9odHRwcyIsIl9sb2Rhc2giLCJfY29uZmlnIiwiX2luZGV4IiwiX2V4cGVyaW1lbnRzIiwiX2xvZ2dlciIsIl91dGlscyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImRlYnVnIiwiYnVpbGREZWJ1ZyIsInJ1blNlcnZlciIsImNvbmZpZyIsIm9wdGlvbnMiLCJjb25maWd1cmF0aW9uUGFyc2VkIiwiZ2V0Q29uZmlnUGFyc2VkIiwiaW5pdExvZ2dlciIsImZsYWdzIiwiZXhwZXJpbWVudHMiLCJkaXNwbGF5RXhwZXJpbWVudHNJbmZvQm94IiwibGlzdGVuIiwibGlzdGVuQXJnIiwiYWRkcmVzcyIsImdldExpc3RlbkFkZHJlc3MiLCJsb2dnZXIiLCJhcHAiLCJlbmRQb2ludEFQSSIsImNyZWF0ZVNlcnZlckZhY3RvcnkiLCJhZGRyIiwic2VydmVyRmFjdG9yeSIsInByb3RvIiwiaHR0cHNPcHRpb25zIiwic2VjdXJlT3B0aW9ucyIsImNvbnN0YW50cyIsIlNTTF9PUF9OT19TU0x2MiIsIlNTTF9PUF9OT19TU0x2MyIsImtleUNlcnRDb25maWciLCJodHRwcyIsInBmeENvbmZpZyIsImtleSIsImNlcnQiLCJwZngiLCJFcnJvciIsInBhc3NwaHJhc2UiLCJhc3NpZ24iLCJmcyIsInJlYWRGaWxlU3luYyIsImNhIiwiY3JlYXRlU2VydmVyIiwiZXJyIiwiZmF0YWwiLCJwcm9jZXNzIiwiZXhpdCIsImh0dHAiLCJzZXJ2ZXIiLCJrZWVwQWxpdmVUaW1lb3V0IiwidW5saW5rQWRkcmVzc1BhdGgiLCJwYXRoIiwiZXhpc3RzU3luYyIsInVubGlua1N5bmMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3J1bi1zZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbnN0YW50cyBmcm9tICdjb25zdGFudHMnO1xuaW1wb3J0IGJ1aWxkRGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBodHRwIGZyb20gJ2h0dHAnO1xuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJztcbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IGdldENvbmZpZ1BhcnNlZCwgZ2V0TGlzdGVuQWRkcmVzcyB9IGZyb20gJ0B2ZXJkYWNjaW8vY29uZmlnJztcbmltcG9ydCB7IENvbmZpZ1lhbWwsIEh0dHBzQ29uZktleUNlcnQsIEh0dHBzQ29uZlBmeCB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuXG5pbXBvcnQgZW5kUG9pbnRBUEkgZnJvbSAnLi4vYXBpL2luZGV4JztcbmltcG9ydCB7IGRpc3BsYXlFeHBlcmltZW50c0luZm9Cb3ggfSBmcm9tICcuL2V4cGVyaW1lbnRzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGluaXRMb2dnZXIgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgZGVidWcgPSBidWlsZERlYnVnKCd2ZXJkYWNjaW86cnVuLXNlcnZlcicpO1xuXG4vKipcbiAqIEV4cG9zZXMgYSBzZXJ2ZXIgZmFjdG9yeSB0byBiZSBpbnN0YW50aWF0ZWQgcHJvZ3JhbW1hdGljYWxseS5cbiAqXG4gICAgY29uc3QgYXBwID0gYXdhaXQgcnVuU2VydmVyKCk7IC8vIGRlZmF1bHQgY29uZmlndXJhdGlvblxuICAgIGNvbnN0IGFwcCA9IGF3YWl0IHJ1blNlcnZlcignLi9jb25maWcvY29uZmlnLnlhbWwnKTtcbiAgICBjb25zdCBhcHAgPSBhd2FpdCBydW5TZXJ2ZXIoeyBjb25maWd1cmF0aW9uIH0pO1xuICAgIGFwcC5saXN0ZW4oNDAwMCwgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBkbyBzb21ldGhpbmdcbiAgICB9KTtcbiAqIEBwYXJhbSBjb25maWdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blNlcnZlcihcbiAgY29uZmlnPzogc3RyaW5nIHwgQ29uZmlnWWFtbCxcbiAgb3B0aW9ucz86IHsgbGlzdGVuQXJnPzogc3RyaW5nIH1cbik6IFByb21pc2U8YW55PiB7XG4gIGNvbnN0IGNvbmZpZ3VyYXRpb25QYXJzZWQgPSBnZXRDb25maWdQYXJzZWQoY29uZmlnKTtcblxuICBpbml0TG9nZ2VyKGNvbmZpZ3VyYXRpb25QYXJzZWQpO1xuICAvLyBtZXJnZSBmbGFncyBhbmQgZXhwZXJpbWVudHMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgY29uc3QgZmxhZ3MgPSB7XG4gICAgLi4uKGNvbmZpZ3VyYXRpb25QYXJzZWQ/LmZsYWdzIHx8IHt9KSxcbiAgICAuLi4oY29uZmlndXJhdGlvblBhcnNlZD8uZXhwZXJpbWVudHMgfHwge30pLFxuICB9O1xuICBkaXNwbGF5RXhwZXJpbWVudHNJbmZvQm94KGZsYWdzKTtcblxuICBjb25zdCBsaXN0ZW4gPSBvcHRpb25zPy5saXN0ZW5BcmcgPz8gY29uZmlndXJhdGlvblBhcnNlZD8ubGlzdGVuO1xuICBjb25zdCBhZGRyZXNzID0gZ2V0TGlzdGVuQWRkcmVzcyhsaXN0ZW4sIGxvZ2dlcik7XG5cbiAgY29uc3QgYXBwID0gYXdhaXQgZW5kUG9pbnRBUEkoY29uZmlndXJhdGlvblBhcnNlZCk7XG4gIHJldHVybiBjcmVhdGVTZXJ2ZXJGYWN0b3J5KGNvbmZpZ3VyYXRpb25QYXJzZWQsIGFkZHJlc3MsIGFwcCk7XG59XG5cbi8qKlxuICogUmV0dXJuIGEgbmF0aXZlIEhUVFAvSFRUUFMgc2VydmVyIGluc3RhbmNlXG4gKiBAcGFyYW0gY29uZmlnXG4gKiBAcGFyYW0gYWRkclxuICogQHBhcmFtIGFwcFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VydmVyRmFjdG9yeShjb25maWc6IENvbmZpZ1lhbWwsIGFkZHIsIGFwcCkge1xuICBsZXQgc2VydmVyRmFjdG9yeTtcbiAgaWYgKGFkZHIucHJvdG8gPT09ICdodHRwcycpIHtcbiAgICBkZWJ1ZygnaHR0cHMgZW5hYmxlZCcpO1xuICAgIHRyeSB7XG4gICAgICBsZXQgaHR0cHNPcHRpb25zID0ge1xuICAgICAgICAvLyBkaXNhYmxlIGluc2VjdXJlIFNTTHYyIGFuZCBTU0x2M1xuICAgICAgICBzZWN1cmVPcHRpb25zOiBjb25zdGFudHMuU1NMX09QX05PX1NTTHYyIHwgY29uc3RhbnRzLlNTTF9PUF9OT19TU0x2MyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGtleUNlcnRDb25maWcgPSBjb25maWcuaHR0cHMgYXMgSHR0cHNDb25mS2V5Q2VydDtcbiAgICAgIGNvbnN0IHBmeENvbmZpZyA9IGNvbmZpZy5odHRwcyBhcyBIdHRwc0NvbmZQZng7XG5cbiAgICAgIC8vIGh0dHBzIG11c3QgZWl0aGVyIGhhdmUga2V5IGFuZCBjZXJ0IG9yIGEgcGZ4IGFuZCAob3B0aW9uYWxseSkgYSBwYXNzcGhyYXNlXG4gICAgICBpZiAoISgoa2V5Q2VydENvbmZpZy5rZXkgJiYga2V5Q2VydENvbmZpZy5jZXJ0KSB8fCBwZnhDb25maWcucGZ4KSkge1xuICAgICAgICB0aHJvdyBFcnJvcignYmFkIGZvcm1hdCBodHRwcyBjb25maWd1cmF0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwZnhDb25maWcucGZ4KSB7XG4gICAgICAgIGNvbnN0IHsgcGZ4LCBwYXNzcGhyYXNlIH0gPSBwZnhDb25maWc7XG4gICAgICAgIGh0dHBzT3B0aW9ucyA9IGFzc2lnbihodHRwc09wdGlvbnMsIHtcbiAgICAgICAgICBwZng6IGZzLnJlYWRGaWxlU3luYyhwZngpLFxuICAgICAgICAgIHBhc3NwaHJhc2U6IHBhc3NwaHJhc2UgfHwgJycsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyBrZXksIGNlcnQsIGNhIH0gPSBrZXlDZXJ0Q29uZmlnO1xuICAgICAgICBodHRwc09wdGlvbnMgPSBhc3NpZ24oaHR0cHNPcHRpb25zLCB7XG4gICAgICAgICAga2V5OiBmcy5yZWFkRmlsZVN5bmMoa2V5KSxcbiAgICAgICAgICBjZXJ0OiBmcy5yZWFkRmlsZVN5bmMoY2VydCksXG4gICAgICAgICAgLi4uKGNhICYmIHtcbiAgICAgICAgICAgIGNhOiBmcy5yZWFkRmlsZVN5bmMoY2EpLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIFRPRE86IGVuYWJsZSBodHRwMiBhcyBmZWF0dXJlXG4gICAgICAvLyBpZiAoY29uZmlnLnNlcnZlci5odHRwMikgPC0tIGNoZWNrIGlmIGZvcmNlIGh0dHAyXG4gICAgICBzZXJ2ZXJGYWN0b3J5ID0gaHR0cHMuY3JlYXRlU2VydmVyKGh0dHBzT3B0aW9ucywgYXBwKTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgbG9nZ2VyLmZhdGFsKHsgZXJyOiBlcnIgfSwgJ2Nhbm5vdCBjcmVhdGUgc2VydmVyOiBAe2Vyci5tZXNzYWdlfScpO1xuICAgICAgcHJvY2Vzcy5leGl0KDIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBodHRwXG4gICAgZGVidWcoJ2h0dHAgZW5hYmxlZCcpO1xuICAgIHNlcnZlckZhY3RvcnkgPSBodHRwLmNyZWF0ZVNlcnZlcihhcHApO1xuICB9XG5cbiAgaWYgKFxuICAgIGNvbmZpZy5zZXJ2ZXIgJiZcbiAgICB0eXBlb2YgY29uZmlnLnNlcnZlci5rZWVwQWxpdmVUaW1lb3V0ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25maWcuc2VydmVyLmtlZXBBbGl2ZVRpbWVvdXQgIT09ICdudWxsJ1xuICApIHtcbiAgICAvLyBsaWJyYXJ5IGRlZmluaXRpb24gZm9yIG5vZGUgaXMgbm90IHVwIHRvIGRhdGUgKGRvZXNuJ3QgY29udGFpbiByZWNlbnQgOC4wIGNoYW5nZXMpXG4gICAgc2VydmVyRmFjdG9yeS5rZWVwQWxpdmVUaW1lb3V0ID0gY29uZmlnLnNlcnZlci5rZWVwQWxpdmVUaW1lb3V0ICogMTAwMDtcbiAgfVxuICAvLyBGSVhFOiBJIGNvdWxkIG5vdCBmaW5kIHRoZSByZWFzb24gb2YgdGhpcyBjb2RlLlxuICB1bmxpbmtBZGRyZXNzUGF0aChhZGRyKTtcblxuICByZXR1cm4gc2VydmVyRmFjdG9yeTtcbn1cblxuZnVuY3Rpb24gdW5saW5rQWRkcmVzc1BhdGgoYWRkcikge1xuICBpZiAoYWRkci5wYXRoICYmIGZzLmV4aXN0c1N5bmMoYWRkci5wYXRoKSkge1xuICAgIGZzLnVubGlua1N5bmMoYWRkci5wYXRoKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsVUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsR0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBTCxPQUFBO0FBRUEsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBR0EsSUFBQU8sTUFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsWUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsT0FBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsTUFBQSxHQUFBVixPQUFBO0FBQXFDLFNBQUFELHVCQUFBWSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRXJDLE1BQU1HLEtBQUssR0FBRyxJQUFBQyxjQUFVLEVBQUMsc0JBQXNCLENBQUM7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxlQUFlQyxTQUFTQSxDQUM3QkMsTUFBNEIsRUFDNUJDLE9BQWdDLEVBQ2xCO0VBQ2QsTUFBTUMsbUJBQW1CLEdBQUcsSUFBQUMsdUJBQWUsRUFBQ0gsTUFBTSxDQUFD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
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.WHITELIST = void 0;
|
|
7
|
+
exports.checkPackageLocal = checkPackageLocal;
|
|
8
|
+
exports.checkPackageRemote = checkPackageRemote;
|
|
9
|
+
exports.cleanUpLinksRef = cleanUpLinksRef;
|
|
10
|
+
exports.cleanUpReadme = cleanUpReadme;
|
|
11
|
+
exports.convertAbbreviatedManifest = convertAbbreviatedManifest;
|
|
12
|
+
exports.generatePackageTemplate = generatePackageTemplate;
|
|
13
|
+
exports.generateRevision = generateRevision;
|
|
14
|
+
exports.getLatestReadme = getLatestReadme;
|
|
15
|
+
exports.hasInstallScript = hasInstallScript;
|
|
16
|
+
exports.isPublishablePackage = isPublishablePackage;
|
|
17
|
+
exports.mergeUplinkTimeIntoLocal = mergeUplinkTimeIntoLocal;
|
|
18
|
+
exports.normalizePackage = normalizePackage;
|
|
19
|
+
exports.prepareSearchPackage = prepareSearchPackage;
|
|
20
|
+
exports.publishPackage = publishPackage;
|
|
21
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
22
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
23
|
+
var _core = require("@verdaccio/core");
|
|
24
|
+
var _searchIndexer = require("@verdaccio/search-indexer");
|
|
25
|
+
var _utils = require("@verdaccio/utils");
|
|
26
|
+
var _constants = require("./constants");
|
|
27
|
+
var _logger = require("./logger");
|
|
28
|
+
var _utils2 = require("./utils");
|
|
29
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
30
|
+
const debug = (0, _debug.default)('verdaccio:storage-utils');
|
|
31
|
+
function generatePackageTemplate(name) {
|
|
32
|
+
return {
|
|
33
|
+
// standard things
|
|
34
|
+
name,
|
|
35
|
+
versions: {},
|
|
36
|
+
time: {},
|
|
37
|
+
[_constants.USERS]: {},
|
|
38
|
+
[_constants.DIST_TAGS]: {},
|
|
39
|
+
_uplinks: {},
|
|
40
|
+
_distfiles: {},
|
|
41
|
+
_attachments: {},
|
|
42
|
+
_rev: ''
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Normalize package properties, tags, revision id.
|
|
48
|
+
* @param {Object} pkg package reference.
|
|
49
|
+
*/
|
|
50
|
+
function normalizePackage(pkg) {
|
|
51
|
+
const pkgProperties = ['versions', 'dist-tags', '_distfiles', '_attachments', '_uplinks', 'time'];
|
|
52
|
+
pkgProperties.forEach(key => {
|
|
53
|
+
const pkgProp = pkg[key];
|
|
54
|
+
if (_lodash.default.isNil(pkgProp) || (0, _utils2.isObject)(pkgProp) === false) {
|
|
55
|
+
pkg[key] = {};
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
if (_lodash.default.isString(pkg._rev) === false) {
|
|
59
|
+
pkg._rev = _constants.STORAGE.DEFAULT_REVISION;
|
|
60
|
+
}
|
|
61
|
+
if (_lodash.default.isString(pkg._id) === false) {
|
|
62
|
+
pkg._id = pkg.name;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// normalize dist-tags
|
|
66
|
+
(0, _utils2.normalizeDistTags)(pkg);
|
|
67
|
+
return pkg;
|
|
68
|
+
}
|
|
69
|
+
function generateRevision(rev) {
|
|
70
|
+
const _rev = rev.split('-');
|
|
71
|
+
return (+_rev[0] || 0) + 1 + '-' + (0, _utils.generateRandomHexString)();
|
|
72
|
+
}
|
|
73
|
+
function getLatestReadme(pkg) {
|
|
74
|
+
const versions = pkg['versions'] || {};
|
|
75
|
+
const distTags = pkg[_constants.DIST_TAGS] || {};
|
|
76
|
+
// FIXME: here is a bit tricky add the types
|
|
77
|
+
const latestVersion = distTags['latest'] ? versions[distTags['latest']] || {} : {};
|
|
78
|
+
let readme = _lodash.default.trim(pkg.readme || latestVersion.readme || '');
|
|
79
|
+
if (readme) {
|
|
80
|
+
return readme;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// In case of empty readme - trying to get ANY readme in the following order: 'next','beta','alpha','test','dev','canary'
|
|
84
|
+
const readmeDistTagsPriority = ['next', 'beta', 'alpha', 'test', 'dev', 'canary'];
|
|
85
|
+
readmeDistTagsPriority.map(function (tag) {
|
|
86
|
+
if (readme) {
|
|
87
|
+
return readme;
|
|
88
|
+
}
|
|
89
|
+
const version = distTags[tag] ? versions[distTags[tag]] || {} : {};
|
|
90
|
+
readme = _lodash.default.trim(version.readme || readme);
|
|
91
|
+
});
|
|
92
|
+
return readme;
|
|
93
|
+
}
|
|
94
|
+
function cleanUpReadme(version) {
|
|
95
|
+
if (_lodash.default.isNil(version) === false) {
|
|
96
|
+
// @ts-ignore
|
|
97
|
+
delete version.readme;
|
|
98
|
+
}
|
|
99
|
+
return version;
|
|
100
|
+
}
|
|
101
|
+
const WHITELIST = exports.WHITELIST = ['_rev', 'name', 'versions', 'dist-tags', 'readme', 'time', '_id', 'users'];
|
|
102
|
+
function cleanUpLinksRef(keepUpLinkData, result) {
|
|
103
|
+
const propertyToKeep = [...WHITELIST];
|
|
104
|
+
if (keepUpLinkData === true) {
|
|
105
|
+
propertyToKeep.push('_uplinks');
|
|
106
|
+
}
|
|
107
|
+
for (const i in result) {
|
|
108
|
+
if (propertyToKeep.indexOf(i) === -1) {
|
|
109
|
+
// Remove sections like '_uplinks' from response
|
|
110
|
+
delete result[i];
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Check whether a package it is already a local package
|
|
118
|
+
* @param {*} name
|
|
119
|
+
* @param {*} localStorage
|
|
120
|
+
*/
|
|
121
|
+
async function checkPackageLocal(name, localStorage) {
|
|
122
|
+
try {
|
|
123
|
+
const results = await localStorage.getPackageMetadataAsync(name);
|
|
124
|
+
if (results) {
|
|
125
|
+
throw _utils2.ErrorCode.getConflict(_constants.API_ERROR.PACKAGE_EXIST);
|
|
126
|
+
}
|
|
127
|
+
} catch (err) {
|
|
128
|
+
if (err.status === _constants.HTTP_STATUS.NOT_FOUND) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
throw err;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function publishPackage(name, metadata, localStorage) {
|
|
135
|
+
return new Promise((resolve, reject) => {
|
|
136
|
+
localStorage.addPackage(name, metadata, (err, latest) => {
|
|
137
|
+
if (!_lodash.default.isNull(err)) {
|
|
138
|
+
return reject(err);
|
|
139
|
+
} else if (!_lodash.default.isUndefined(latest)) {
|
|
140
|
+
_searchIndexer.SearchMemoryIndexer.add(latest).catch(reason => {
|
|
141
|
+
debug('indexer has failed on add item %o', reason);
|
|
142
|
+
_logger.logger.error('indexer has failed on add item');
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
return resolve();
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
function checkPackageRemote(name, isAllowPublishOffline, syncMetadata) {
|
|
150
|
+
return new Promise((resolve, reject) => {
|
|
151
|
+
syncMetadata(name, null, {}, (err, packageJsonLocal, upLinksErrors) => {
|
|
152
|
+
// something weird
|
|
153
|
+
if (err && err.status !== _constants.HTTP_STATUS.NOT_FOUND) {
|
|
154
|
+
return reject(err);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// checking package exist already
|
|
158
|
+
if (_lodash.default.isNil(packageJsonLocal) === false) {
|
|
159
|
+
return reject(_utils2.ErrorCode.getConflict(_constants.API_ERROR.PACKAGE_EXIST));
|
|
160
|
+
}
|
|
161
|
+
for (let errorItem = 0; errorItem < upLinksErrors.length; errorItem++) {
|
|
162
|
+
// checking error
|
|
163
|
+
// if uplink fails with a status other than 404, we report failure
|
|
164
|
+
if (_lodash.default.isNil(upLinksErrors[errorItem][0]) === false) {
|
|
165
|
+
if (upLinksErrors[errorItem][0].status !== _constants.HTTP_STATUS.NOT_FOUND) {
|
|
166
|
+
if (isAllowPublishOffline) {
|
|
167
|
+
return resolve();
|
|
168
|
+
}
|
|
169
|
+
return reject(_utils2.ErrorCode.getServiceUnavailable(_constants.API_ERROR.UPLINK_OFFLINE_PUBLISH));
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return resolve();
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// tested on v6
|
|
179
|
+
function mergeUplinkTimeIntoLocal(cacheManifest, remoteManifest) {
|
|
180
|
+
if ('time' in remoteManifest) {
|
|
181
|
+
// remote override cache time conflicts
|
|
182
|
+
return {
|
|
183
|
+
...cacheManifest,
|
|
184
|
+
time: {
|
|
185
|
+
...cacheManifest.time,
|
|
186
|
+
...remoteManifest.time
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
return cacheManifest;
|
|
191
|
+
}
|
|
192
|
+
function prepareSearchPackage(data, time) {
|
|
193
|
+
const latest = _core.pkgUtils.getLatest(data);
|
|
194
|
+
if (latest && data.versions[latest]) {
|
|
195
|
+
const version = data.versions[latest];
|
|
196
|
+
const versions = {
|
|
197
|
+
[latest]: 'latest'
|
|
198
|
+
};
|
|
199
|
+
const pkg = {
|
|
200
|
+
name: version.name,
|
|
201
|
+
description: version.description,
|
|
202
|
+
[_constants.DIST_TAGS]: {
|
|
203
|
+
latest
|
|
204
|
+
},
|
|
205
|
+
maintainers: version.maintainers || [version.author].filter(Boolean),
|
|
206
|
+
author: version.author,
|
|
207
|
+
repository: version.repository,
|
|
208
|
+
readmeFilename: version.readmeFilename || '',
|
|
209
|
+
homepage: version.homepage,
|
|
210
|
+
keywords: version.keywords,
|
|
211
|
+
time: {
|
|
212
|
+
modified: time
|
|
213
|
+
},
|
|
214
|
+
bugs: version.bugs,
|
|
215
|
+
license: version.license,
|
|
216
|
+
versions
|
|
217
|
+
};
|
|
218
|
+
return pkg;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Check whether the package metadta has enough data to be published
|
|
224
|
+
* @param pkg metadata
|
|
225
|
+
*/
|
|
226
|
+
function isPublishablePackage(pkg) {
|
|
227
|
+
const keys = Object.keys(pkg);
|
|
228
|
+
return keys.includes('versions');
|
|
229
|
+
}
|
|
230
|
+
function hasInstallScript(version) {
|
|
231
|
+
if (version?.scripts) {
|
|
232
|
+
const scripts = Object.keys(version.scripts);
|
|
233
|
+
return scripts.find(item => {
|
|
234
|
+
return ['install', 'preinstall', 'postinstall'].includes(item);
|
|
235
|
+
}) !== undefined;
|
|
236
|
+
}
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
function convertAbbreviatedManifest(manifest) {
|
|
240
|
+
const abbreviatedVersions = Object.keys(manifest.versions).reduce((acc, version) => {
|
|
241
|
+
const _version = manifest.versions[version];
|
|
242
|
+
// This should be align with this document
|
|
243
|
+
// https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md#abbreviated-version-object
|
|
244
|
+
const _version_abbreviated = {
|
|
245
|
+
name: _version.name,
|
|
246
|
+
version: _version.version,
|
|
247
|
+
description: _version.description,
|
|
248
|
+
deprecated: _version.deprecated,
|
|
249
|
+
bin: _version.bin,
|
|
250
|
+
dist: _version.dist,
|
|
251
|
+
engines: _version.engines,
|
|
252
|
+
cpu: _version.cpu,
|
|
253
|
+
os: _version.os,
|
|
254
|
+
funding: _version.funding,
|
|
255
|
+
directories: _version.directories,
|
|
256
|
+
dependencies: _version.dependencies,
|
|
257
|
+
devDependencies: _version.devDependencies,
|
|
258
|
+
peerDependencies: _version.peerDependencies,
|
|
259
|
+
peerDependenciesMeta: _version.peerDependenciesMeta,
|
|
260
|
+
optionalDependencies: _version.optionalDependencies,
|
|
261
|
+
bundleDependencies: _version.bundleDependencies,
|
|
262
|
+
// npm cli specifics
|
|
263
|
+
_hasShrinkwrap: _version._hasShrinkwrap,
|
|
264
|
+
hasInstallScript: hasInstallScript(_version)
|
|
265
|
+
};
|
|
266
|
+
acc[version] = _version_abbreviated;
|
|
267
|
+
return acc;
|
|
268
|
+
}, {});
|
|
269
|
+
const convertedManifest = {
|
|
270
|
+
name: manifest['name'],
|
|
271
|
+
[_constants.DIST_TAGS]: manifest[_constants.DIST_TAGS],
|
|
272
|
+
versions: abbreviatedVersions,
|
|
273
|
+
// @ts-ignore
|
|
274
|
+
modified: manifest?.time?.modified,
|
|
275
|
+
// NOTE: special case for pnpm https://github.com/pnpm/rfcs/pull/2
|
|
276
|
+
time: manifest?.time
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
// @ts-ignore
|
|
280
|
+
return convertedManifest;
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVidWciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfY29yZSIsIl9zZWFyY2hJbmRleGVyIiwiX3V0aWxzIiwiX2NvbnN0YW50cyIsIl9sb2dnZXIiLCJfdXRpbHMyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiZGVidWciLCJjcmVhdGVEZWJ1ZyIsImdlbmVyYXRlUGFja2FnZVRlbXBsYXRlIiwibmFtZSIsInZlcnNpb25zIiwidGltZSIsIlVTRVJTIiwiRElTVF9UQUdTIiwiX3VwbGlua3MiLCJfZGlzdGZpbGVzIiwiX2F0dGFjaG1lbnRzIiwiX3JldiIsIm5vcm1hbGl6ZVBhY2thZ2UiLCJwa2ciLCJwa2dQcm9wZXJ0aWVzIiwiZm9yRWFjaCIsImtleSIsInBrZ1Byb3AiLCJfIiwiaXNOaWwiLCJpc09iamVjdCIsImlzU3RyaW5nIiwiU1RPUkFHRSIsIkRFRkFVTFRfUkVWSVNJT04iLCJfaWQiLCJub3JtYWxpemVEaXN0VGFncyIsImdlbmVyYXRlUmV2aXNpb24iLCJyZXYiLCJzcGxpdCIsImdlbmVyYXRlUmFuZG9tSGV4U3RyaW5nIiwiZ2V0TGF0ZXN0UmVhZG1lIiwiZGlzdFRhZ3MiLCJsYXRlc3RWZXJzaW9uIiwicmVhZG1lIiwidHJpbSIsInJlYWRtZURpc3RUYWdzUHJpb3JpdHkiLCJtYXAiLCJ0YWciLCJ2ZXJzaW9uIiwiY2xlYW5VcFJlYWRtZSIsIldISVRFTElTVCIsImV4cG9ydHMiLCJjbGVhblVwTGlua3NSZWYiLCJrZWVwVXBMaW5rRGF0YSIsInJlc3VsdCIsInByb3BlcnR5VG9LZWVwIiwicHVzaCIsImkiLCJpbmRleE9mIiwiY2hlY2tQYWNrYWdlTG9jYWwiLCJsb2NhbFN0b3JhZ2UiLCJyZXN1bHRzIiwiZ2V0UGFja2FnZU1ldGFkYXRhQXN5bmMiLCJFcnJvckNvZGUiLCJnZXRDb25mbGljdCIsIkFQSV9FUlJPUiIsIlBBQ0tBR0VfRVhJU1QiLCJlcnIiLCJzdGF0dXMiLCJIVFRQX1NUQVRVUyIsIk5PVF9GT1VORCIsInB1Ymxpc2hQYWNrYWdlIiwibWV0YWRhdGEiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImFkZFBhY2thZ2UiLCJsYXRlc3QiLCJpc051bGwiLCJpc1VuZGVmaW5lZCIsIlNlYXJjaE1lbW9yeUluZGV4ZXIiLCJhZGQiLCJjYXRjaCIsInJlYXNvbiIsImxvZ2dlciIsImVycm9yIiwiY2hlY2tQYWNrYWdlUmVtb3RlIiwiaXNBbGxvd1B1Ymxpc2hPZmZsaW5lIiwic3luY01ldGFkYXRhIiwicGFja2FnZUpzb25Mb2NhbCIsInVwTGlua3NFcnJvcnMiLCJlcnJvckl0ZW0iLCJsZW5ndGgiLCJnZXRTZXJ2aWNlVW5hdmFpbGFibGUiLCJVUExJTktfT0ZGTElORV9QVUJMSVNIIiwibWVyZ2VVcGxpbmtUaW1lSW50b0xvY2FsIiwiY2FjaGVNYW5pZmVzdCIsInJlbW90ZU1hbmlmZXN0IiwicHJlcGFyZVNlYXJjaFBhY2thZ2UiLCJkYXRhIiwicGtnVXRpbHMiLCJnZXRMYXRlc3QiLCJkZXNjcmlwdGlvbiIsIm1haW50YWluZXJzIiwiYXV0aG9yIiwiZmlsdGVyIiwiQm9vbGVhbiIsInJlcG9zaXRvcnkiLCJyZWFkbWVGaWxlbmFtZSIsImhvbWVwYWdlIiwia2V5d29yZHMiLCJtb2RpZmllZCIsImJ1Z3MiLCJsaWNlbnNlIiwiaXNQdWJsaXNoYWJsZVBhY2thZ2UiLCJrZXlzIiwiT2JqZWN0IiwiaW5jbHVkZXMiLCJoYXNJbnN0YWxsU2NyaXB0Iiwic2NyaXB0cyIsImZpbmQiLCJpdGVtIiwidW5kZWZpbmVkIiwiY29udmVydEFiYnJldmlhdGVkTWFuaWZlc3QiLCJtYW5pZmVzdCIsImFiYnJldmlhdGVkVmVyc2lvbnMiLCJyZWR1Y2UiLCJhY2MiLCJfdmVyc2lvbiIsIl92ZXJzaW9uX2FiYnJldmlhdGVkIiwiZGVwcmVjYXRlZCIsImJpbiIsImRpc3QiLCJlbmdpbmVzIiwiY3B1Iiwib3MiLCJmdW5kaW5nIiwiZGlyZWN0b3JpZXMiLCJkZXBlbmRlbmNpZXMiLCJkZXZEZXBlbmRlbmNpZXMiLCJwZWVyRGVwZW5kZW5jaWVzIiwicGVlckRlcGVuZGVuY2llc01ldGEiLCJvcHRpb25hbERlcGVuZGVuY2llcyIsImJ1bmRsZURlcGVuZGVuY2llcyIsIl9oYXNTaHJpbmt3cmFwIiwiY29udmVydGVkTWFuaWZlc3QiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3N0b3JhZ2UtdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZURlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IHBrZ1V0aWxzIH0gZnJvbSAnQHZlcmRhY2Npby9jb3JlJztcbmltcG9ydCB7IFNlYXJjaE1lbW9yeUluZGV4ZXIgfSBmcm9tICdAdmVyZGFjY2lvL3NlYXJjaC1pbmRleGVyJztcbmltcG9ydCB7IEFiYnJldmlhdGVkTWFuaWZlc3QsIEFiYnJldmlhdGVkVmVyc2lvbnMsIE1hbmlmZXN0LCBWZXJzaW9uIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVJhbmRvbUhleFN0cmluZyB9IGZyb20gJ0B2ZXJkYWNjaW8vdXRpbHMnO1xuXG5pbXBvcnQgeyBBUElfRVJST1IsIERJU1RfVEFHUywgSFRUUF9TVEFUVVMsIFNUT1JBR0UsIFVTRVJTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IExvY2FsU3RvcmFnZSBmcm9tICcuL2xvY2FsLXN0b3JhZ2UnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgRXJyb3JDb2RlLCBpc09iamVjdCwgbm9ybWFsaXplRGlzdFRhZ3MgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgZGVidWcgPSBjcmVhdGVEZWJ1ZygndmVyZGFjY2lvOnN0b3JhZ2UtdXRpbHMnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUGFja2FnZVRlbXBsYXRlKG5hbWU6IHN0cmluZyk6IE1hbmlmZXN0IHtcbiAgcmV0dXJuIHtcbiAgICAvLyBzdGFuZGFyZCB0aGluZ3NcbiAgICBuYW1lLFxuICAgIHZlcnNpb25zOiB7fSxcbiAgICB0aW1lOiB7fSxcbiAgICBbVVNFUlNdOiB7fSxcbiAgICBbRElTVF9UQUdTXToge30sXG4gICAgX3VwbGlua3M6IHt9LFxuICAgIF9kaXN0ZmlsZXM6IHt9LFxuICAgIF9hdHRhY2htZW50czoge30sXG4gICAgX3JldjogJycsXG4gIH07XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHBhY2thZ2UgcHJvcGVydGllcywgdGFncywgcmV2aXNpb24gaWQuXG4gKiBAcGFyYW0ge09iamVjdH0gcGtnIHBhY2thZ2UgcmVmZXJlbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUGFja2FnZShwa2c6IE1hbmlmZXN0KTogTWFuaWZlc3Qge1xuICBjb25zdCBwa2dQcm9wZXJ0aWVzID0gWyd2ZXJzaW9ucycsICdkaXN0LXRhZ3MnLCAnX2Rpc3RmaWxlcycsICdfYXR0YWNobWVudHMnLCAnX3VwbGlua3MnLCAndGltZSddO1xuXG4gIHBrZ1Byb3BlcnRpZXMuZm9yRWFjaCgoa2V5KTogdm9pZCA9PiB7XG4gICAgY29uc3QgcGtnUHJvcCA9IHBrZ1trZXldO1xuXG4gICAgaWYgKF8uaXNOaWwocGtnUHJvcCkgfHwgaXNPYmplY3QocGtnUHJvcCkgPT09IGZhbHNlKSB7XG4gICAgICBwa2dba2V5XSA9IHt9O1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKF8uaXNTdHJpbmcocGtnLl9yZXYpID09PSBmYWxzZSkge1xuICAgIHBrZy5fcmV2ID0gU1RPUkFHRS5ERUZBVUxUX1JFVklTSU9OO1xuICB9XG5cbiAgaWYgKF8uaXNTdHJpbmcocGtnLl9pZCkgPT09IGZhbHNlKSB7XG4gICAgcGtnLl9pZCA9IHBrZy5uYW1lO1xuICB9XG5cbiAgLy8gbm9ybWFsaXplIGRpc3QtdGFnc1xuICBub3JtYWxpemVEaXN0VGFncyhwa2cpO1xuXG4gIHJldHVybiBwa2c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJldmlzaW9uKHJldjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgX3JldiA9IHJldi5zcGxpdCgnLScpO1xuXG4gIHJldHVybiAoK19yZXZbMF0gfHwgMCkgKyAxICsgJy0nICsgZ2VuZXJhdGVSYW5kb21IZXhTdHJpbmcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhdGVzdFJlYWRtZShwa2c6IE1hbmlmZXN0KTogc3RyaW5nIHtcbiAgY29uc3QgdmVyc2lvbnMgPSBwa2dbJ3ZlcnNpb25zJ10gfHwge307XG4gIGNvbnN0IGRpc3RUYWdzID0gcGtnW0RJU1RfVEFHU10gfHwge307XG4gIC8vIEZJWE1FOiBoZXJlIGlzIGEgYml0IHRyaWNreSBhZGQgdGhlIHR5cGVzXG4gIGNvbnN0IGxhdGVzdFZlcnNpb246IFZlcnNpb24gfCBhbnkgPSBkaXN0VGFnc1snbGF0ZXN0J10gPyB2ZXJzaW9uc1tkaXN0VGFnc1snbGF0ZXN0J11dIHx8IHt9IDoge307XG4gIGxldCByZWFkbWUgPSBfLnRyaW0ocGtnLnJlYWRtZSB8fCBsYXRlc3RWZXJzaW9uLnJlYWRtZSB8fCAnJyk7XG4gIGlmIChyZWFkbWUpIHtcbiAgICByZXR1cm4gcmVhZG1lO1xuICB9XG5cbiAgLy8gSW4gY2FzZSBvZiBlbXB0eSByZWFkbWUgLSB0cnlpbmcgdG8gZ2V0IEFOWSByZWFkbWUgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjogJ25leHQnLCdiZXRhJywnYWxwaGEnLCd0ZXN0JywnZGV2JywnY2FuYXJ5J1xuICBjb25zdCByZWFkbWVEaXN0VGFnc1ByaW9yaXR5ID0gWyduZXh0JywgJ2JldGEnLCAnYWxwaGEnLCAndGVzdCcsICdkZXYnLCAnY2FuYXJ5J107XG4gIHJlYWRtZURpc3RUYWdzUHJpb3JpdHkubWFwKGZ1bmN0aW9uICh0YWcpOiBzdHJpbmcgfCB2b2lkIHtcbiAgICBpZiAocmVhZG1lKSB7XG4gICAgICByZXR1cm4gcmVhZG1lO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uOiBWZXJzaW9uIHwgYW55ID0gZGlzdFRhZ3NbdGFnXSA/IHZlcnNpb25zW2Rpc3RUYWdzW3RhZ11dIHx8IHt9IDoge307XG4gICAgcmVhZG1lID0gXy50cmltKHZlcnNpb24ucmVhZG1lIHx8IHJlYWRtZSk7XG4gIH0pO1xuICByZXR1cm4gcmVhZG1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5VcFJlYWRtZSh2ZXJzaW9uOiBWZXJzaW9uKTogVmVyc2lvbiB7XG4gIGlmIChfLmlzTmlsKHZlcnNpb24pID09PSBmYWxzZSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBkZWxldGUgdmVyc2lvbi5yZWFkbWU7XG4gIH1cblxuICByZXR1cm4gdmVyc2lvbjtcbn1cblxuZXhwb3J0IGNvbnN0IFdISVRFTElTVCA9IFtcbiAgJ19yZXYnLFxuICAnbmFtZScsXG4gICd2ZXJzaW9ucycsXG4gICdkaXN0LXRhZ3MnLFxuICAncmVhZG1lJyxcbiAgJ3RpbWUnLFxuICAnX2lkJyxcbiAgJ3VzZXJzJyxcbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhblVwTGlua3NSZWYoa2VlcFVwTGlua0RhdGE6IGJvb2xlYW4sIHJlc3VsdDogTWFuaWZlc3QpOiBNYW5pZmVzdCB7XG4gIGNvbnN0IHByb3BlcnR5VG9LZWVwID0gWy4uLldISVRFTElTVF07XG4gIGlmIChrZWVwVXBMaW5rRGF0YSA9PT0gdHJ1ZSkge1xuICAgIHByb3BlcnR5VG9LZWVwLnB1c2goJ191cGxpbmtzJyk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGkgaW4gcmVzdWx0KSB7XG4gICAgaWYgKHByb3BlcnR5VG9LZWVwLmluZGV4T2YoaSkgPT09IC0xKSB7XG4gICAgICAvLyBSZW1vdmUgc2VjdGlvbnMgbGlrZSAnX3VwbGlua3MnIGZyb20gcmVzcG9uc2VcbiAgICAgIGRlbGV0ZSByZXN1bHRbaV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgcGFja2FnZSBpdCBpcyBhbHJlYWR5IGEgbG9jYWwgcGFja2FnZVxuICogQHBhcmFtIHsqfSBuYW1lXG4gKiBAcGFyYW0geyp9IGxvY2FsU3RvcmFnZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tQYWNrYWdlTG9jYWwobmFtZTogc3RyaW5nLCBsb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZSk6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBsb2NhbFN0b3JhZ2UuZ2V0UGFja2FnZU1ldGFkYXRhQXN5bmMobmFtZSk7XG4gICAgaWYgKHJlc3VsdHMpIHtcbiAgICAgIHRocm93IEVycm9yQ29kZS5nZXRDb25mbGljdChBUElfRVJST1IuUEFDS0FHRV9FWElTVCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGlmIChlcnIuc3RhdHVzID09PSBIVFRQX1NUQVRVUy5OT1RfRk9VTkQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwdWJsaXNoUGFja2FnZShcbiAgbmFtZTogc3RyaW5nLFxuICBtZXRhZGF0YTogYW55LFxuICBsb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KTogdm9pZCA9PiB7XG4gICAgbG9jYWxTdG9yYWdlLmFkZFBhY2thZ2UobmFtZSwgbWV0YWRhdGEsIChlcnIsIGxhdGVzdCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCFfLmlzTnVsbChlcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH0gZWxzZSBpZiAoIV8uaXNVbmRlZmluZWQobGF0ZXN0KSkge1xuICAgICAgICBTZWFyY2hNZW1vcnlJbmRleGVyLmFkZChsYXRlc3QpLmNhdGNoKChyZWFzb24pID0+IHtcbiAgICAgICAgICBkZWJ1ZygnaW5kZXhlciBoYXMgZmFpbGVkIG9uIGFkZCBpdGVtICVvJywgcmVhc29uKTtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ2luZGV4ZXIgaGFzIGZhaWxlZCBvbiBhZGQgaXRlbScpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQYWNrYWdlUmVtb3RlKFxuICBuYW1lOiBzdHJpbmcsXG4gIGlzQWxsb3dQdWJsaXNoT2ZmbGluZTogYm9vbGVhbixcbiAgc3luY01ldGFkYXRhOiBhbnlcbik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk6IHZvaWQgPT4ge1xuICAgIHN5bmNNZXRhZGF0YShuYW1lLCBudWxsLCB7fSwgKGVyciwgcGFja2FnZUpzb25Mb2NhbCwgdXBMaW5rc0Vycm9ycyk6IHZvaWQgPT4ge1xuICAgICAgLy8gc29tZXRoaW5nIHdlaXJkXG4gICAgICBpZiAoZXJyICYmIGVyci5zdGF0dXMgIT09IEhUVFBfU1RBVFVTLk5PVF9GT1VORCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNraW5nIHBhY2thZ2UgZXhpc3QgYWxyZWFkeVxuICAgICAgaWYgKF8uaXNOaWwocGFja2FnZUpzb25Mb2NhbCkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoRXJyb3JDb2RlLmdldENvbmZsaWN0KEFQSV9FUlJPUi5QQUNLQUdFX0VYSVNUKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGVycm9ySXRlbSA9IDA7IGVycm9ySXRlbSA8IHVwTGlua3NFcnJvcnMubGVuZ3RoOyBlcnJvckl0ZW0rKykge1xuICAgICAgICAvLyBjaGVja2luZyBlcnJvclxuICAgICAgICAvLyBpZiB1cGxpbmsgZmFpbHMgd2l0aCBhIHN0YXR1cyBvdGhlciB0aGFuIDQwNCwgd2UgcmVwb3J0IGZhaWx1cmVcbiAgICAgICAgaWYgKF8uaXNOaWwodXBMaW5rc0Vycm9yc1tlcnJvckl0ZW1dWzBdKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAodXBMaW5rc0Vycm9yc1tlcnJvckl0ZW1dWzBdLnN0YXR1cyAhPT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgICBpZiAoaXNBbGxvd1B1Ymxpc2hPZmZsaW5lKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZWplY3QoRXJyb3JDb2RlLmdldFNlcnZpY2VVbmF2YWlsYWJsZShBUElfRVJST1IuVVBMSU5LX09GRkxJTkVfUFVCTElTSCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLy8gdGVzdGVkIG9uIHY2XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VVcGxpbmtUaW1lSW50b0xvY2FsKGNhY2hlTWFuaWZlc3Q6IE1hbmlmZXN0LCByZW1vdGVNYW5pZmVzdDogTWFuaWZlc3QpOiBhbnkge1xuICBpZiAoJ3RpbWUnIGluIHJlbW90ZU1hbmlmZXN0KSB7XG4gICAgLy8gcmVtb3RlIG92ZXJyaWRlIGNhY2hlIHRpbWUgY29uZmxpY3RzXG4gICAgcmV0dXJuIHsgLi4uY2FjaGVNYW5pZmVzdCwgdGltZTogeyAuLi5jYWNoZU1hbmlmZXN0LnRpbWUsIC4uLnJlbW90ZU1hbmlmZXN0LnRpbWUgfSB9O1xuICB9XG5cbiAgcmV0dXJuIGNhY2hlTWFuaWZlc3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlU2VhcmNoUGFja2FnZShkYXRhOiBNYW5pZmVzdCwgdGltZTogdW5rbm93bik6IGFueSB7XG4gIGNvbnN0IGxhdGVzdCA9IHBrZ1V0aWxzLmdldExhdGVzdChkYXRhKTtcblxuICBpZiAobGF0ZXN0ICYmIGRhdGEudmVyc2lvbnNbbGF0ZXN0XSkge1xuICAgIGNvbnN0IHZlcnNpb246IFZlcnNpb24gPSBkYXRhLnZlcnNpb25zW2xhdGVzdF07XG4gICAgY29uc3QgdmVyc2lvbnM6IGFueSA9IHsgW2xhdGVzdF06ICdsYXRlc3QnIH07XG4gICAgY29uc3QgcGtnOiBhbnkgPSB7XG4gICAgICBuYW1lOiB2ZXJzaW9uLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogdmVyc2lvbi5kZXNjcmlwdGlvbixcbiAgICAgIFtESVNUX1RBR1NdOiB7IGxhdGVzdCB9LFxuICAgICAgbWFpbnRhaW5lcnM6IHZlcnNpb24ubWFpbnRhaW5lcnMgfHwgW3ZlcnNpb24uYXV0aG9yXS5maWx0ZXIoQm9vbGVhbiksXG4gICAgICBhdXRob3I6IHZlcnNpb24uYXV0aG9yLFxuICAgICAgcmVwb3NpdG9yeTogdmVyc2lvbi5yZXBvc2l0b3J5LFxuICAgICAgcmVhZG1lRmlsZW5hbWU6IHZlcnNpb24ucmVhZG1lRmlsZW5hbWUgfHwgJycsXG4gICAgICBob21lcGFnZTogdmVyc2lvbi5ob21lcGFnZSxcbiAgICAgIGtleXdvcmRzOiB2ZXJzaW9uLmtleXdvcmRzLFxuICAgICAgdGltZToge1xuICAgICAgICBtb2RpZmllZDogdGltZSxcbiAgICAgIH0sXG4gICAgICBidWdzOiB2ZXJzaW9uLmJ1Z3MsXG4gICAgICBsaWNlbnNlOiB2ZXJzaW9uLmxpY2Vuc2UsXG4gICAgICB2ZXJzaW9ucyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHBrZztcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHBhY2thZ2UgbWV0YWR0YSBoYXMgZW5vdWdoIGRhdGEgdG8gYmUgcHVibGlzaGVkXG4gKiBAcGFyYW0gcGtnIG1ldGFkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1B1Ymxpc2hhYmxlUGFja2FnZShwa2c6IE1hbmlmZXN0KTogYm9vbGVhbiB7XG4gIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocGtnKTtcblxuICByZXR1cm4ga2V5cy5pbmNsdWRlcygndmVyc2lvbnMnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0luc3RhbGxTY3JpcHQodmVyc2lvbjogVmVyc2lvbikge1xuICBpZiAodmVyc2lvbj8uc2NyaXB0cykge1xuICAgIGNvbnN0IHNjcmlwdHMgPSBPYmplY3Qua2V5cyh2ZXJzaW9uLnNjcmlwdHMpO1xuICAgIHJldHVybiAoXG4gICAgICBzY3JpcHRzLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIFsnaW5zdGFsbCcsICdwcmVpbnN0YWxsJywgJ3Bvc3RpbnN0YWxsJ10uaW5jbHVkZXMoaXRlbSk7XG4gICAgICB9KSAhPT0gdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QWJicmV2aWF0ZWRNYW5pZmVzdChtYW5pZmVzdDogTWFuaWZlc3QpOiBBYmJyZXZpYXRlZE1hbmlmZXN0IHtcbiAgY29uc3QgYWJicmV2aWF0ZWRWZXJzaW9ucyA9IE9iamVjdC5rZXlzKG1hbmlmZXN0LnZlcnNpb25zKS5yZWR1Y2UoXG4gICAgKGFjYzogQWJicmV2aWF0ZWRWZXJzaW9ucywgdmVyc2lvbjogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBfdmVyc2lvbiA9IG1hbmlmZXN0LnZlcnNpb25zW3ZlcnNpb25dO1xuICAgICAgLy8gVGhpcyBzaG91bGQgYmUgYWxpZ24gd2l0aCB0aGlzIGRvY3VtZW50XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbnBtL3JlZ2lzdHJ5L2Jsb2IvbWFzdGVyL2RvY3MvcmVzcG9uc2VzL3BhY2thZ2UtbWV0YWRhdGEubWQjYWJicmV2aWF0ZWQtdmVyc2lvbi1vYmplY3RcbiAgICAgIGNvbnN0IF92ZXJzaW9uX2FiYnJldmlhdGVkID0ge1xuICAgICAgICBuYW1lOiBfdmVyc2lvbi5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBfdmVyc2lvbi52ZXJzaW9uLFxuICAgICAgICBkZXNjcmlwdGlvbjogX3ZlcnNpb24uZGVzY3JpcHRpb24sXG4gICAgICAgIGRlcHJlY2F0ZWQ6IF92ZXJzaW9uLmRlcHJlY2F0ZWQsXG4gICAgICAgIGJpbjogX3ZlcnNpb24uYmluLFxuICAgICAgICBkaXN0OiBfdmVyc2lvbi5kaXN0LFxuICAgICAgICBlbmdpbmVzOiBfdmVyc2lvbi5lbmdpbmVzLFxuICAgICAgICBjcHU6IF92ZXJzaW9uLmNwdSxcbiAgICAgICAgb3M6IF92ZXJzaW9uLm9zLFxuICAgICAgICBmdW5kaW5nOiBfdmVyc2lvbi5mdW5kaW5nLFxuICAgICAgICBkaXJlY3RvcmllczogX3ZlcnNpb24uZGlyZWN0b3JpZXMsXG4gICAgICAgIGRlcGVuZGVuY2llczogX3ZlcnNpb24uZGVwZW5kZW5jaWVzLFxuICAgICAgICBkZXZEZXBlbmRlbmNpZXM6IF92ZXJzaW9uLmRldkRlcGVuZGVuY2llcyxcbiAgICAgICAgcGVlckRlcGVuZGVuY2llczogX3ZlcnNpb24ucGVlckRlcGVuZGVuY2llcyxcbiAgICAgICAgcGVlckRlcGVuZGVuY2llc01ldGE6IF92ZXJzaW9uLnBlZXJEZXBlbmRlbmNpZXNNZXRhLFxuICAgICAgICBvcHRpb25hbERlcGVuZGVuY2llczogX3ZlcnNpb24ub3B0aW9uYWxEZXBlbmRlbmNpZXMsXG4gICAgICAgIGJ1bmRsZURlcGVuZGVuY2llczogX3ZlcnNpb24uYnVuZGxlRGVwZW5kZW5jaWVzLFxuICAgICAgICAvLyBucG0gY2xpIHNwZWNpZmljc1xuICAgICAgICBfaGFzU2hyaW5rd3JhcDogX3ZlcnNpb24uX2hhc1Nocmlua3dyYXAsXG4gICAgICAgIGhhc0luc3RhbGxTY3JpcHQ6IGhhc0luc3RhbGxTY3JpcHQoX3ZlcnNpb24pLFxuICAgICAgfTtcbiAgICAgIGFjY1t2ZXJzaW9uXSA9IF92ZXJzaW9uX2FiYnJldmlhdGVkO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LFxuICAgIHt9XG4gICk7XG5cbiAgY29uc3QgY29udmVydGVkTWFuaWZlc3QgPSB7XG4gICAgbmFtZTogbWFuaWZlc3RbJ25hbWUnXSxcbiAgICBbRElTVF9UQUdTXTogbWFuaWZlc3RbRElTVF9UQUdTXSxcbiAgICB2ZXJzaW9uczogYWJicmV2aWF0ZWRWZXJzaW9ucyxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbW9kaWZpZWQ6IG1hbmlmZXN0Py50aW1lPy5tb2RpZmllZCxcbiAgICAvLyBOT1RFOiBzcGVjaWFsIGNhc2UgZm9yIHBucG0gaHR0cHM6Ly9naXRodWIuY29tL3BucG0vcmZjcy9wdWxsLzJcbiAgICB0aW1lOiBtYW5pZmVzdD8udGltZSxcbiAgfTtcblxuICAvLyBAdHMtaWdub3JlXG4gIHJldHVybiBjb252ZXJ0ZWRNYW5pZmVzdDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBRSxLQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxjQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFFQSxJQUFBSyxVQUFBLEdBQUFMLE9BQUE7QUFFQSxJQUFBTSxPQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFQLE9BQUE7QUFBaUUsU0FBQUQsdUJBQUFTLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFakUsTUFBTUcsS0FBSyxHQUFHLElBQUFDLGNBQVcsRUFBQyx5QkFBeUIsQ0FBQztBQUU3QyxTQUFTQyx1QkFBdUJBLENBQUNDLElBQVksRUFBWTtFQUM5RCxPQUFPO0lBQ0w7SUFDQUEsSUFBSTtJQUNKQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ1pDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDUixDQUFDQyxnQkFBSyxHQUFHLENBQUMsQ0FBQztJQUNYLENBQUNDLG9CQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2ZDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDWkMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNkQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCQyxJQUFJLEVBQUU7RUFDUixDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxnQkFBZ0JBLENBQUNDLEdBQWEsRUFBWTtFQUN4RCxNQUFNQyxhQUFhLEdBQUcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQztFQUVqR0EsYUFBYSxDQUFDQyxPQUFPLENBQUVDLEdBQUcsSUFBVztJQUNuQyxNQUFNQyxPQUFPLEdBQUdKLEdBQUcsQ0FBQ0csR0FBRyxDQUFDO0lBRXhCLElBQUlFLGVBQUMsQ0FBQ0MsS0FBSyxDQUFDRixPQUFPLENBQUMsSUFBSSxJQUFBRyxnQkFBUSxFQUFDSCxPQUFPLENBQUMsS0FBSyxLQUFLLEVBQUU7TUFDbkRKLEdBQUcsQ0FBQ0csR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2Y7RUFDRixDQUFDLENBQUM7RUFFRixJQUFJRSxlQUFDLENBQUNHLFFBQVEsQ0FBQ1IsR0FBRyxDQUFDRixJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUU7SUFDbENFLEdBQUcsQ0FBQ0YsSUFBSSxHQUFHVyxrQkFBTyxDQUFDQyxnQkFBZ0I7RUFDckM7RUFFQSxJQUFJTCxlQUFDLENBQUNHLFFBQVEsQ0FBQ1IsR0FBRyxDQUFDVyxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUU7SUFDakNYLEdBQUcsQ0FBQ1csR0FBRyxHQUFHWCxHQUFHLENBQUNWLElBQUk7RUFDcEI7O0VBRUE7RUFDQSxJQUFBc0IseUJBQWlCLEVBQUNaLEdBQUcsQ0FBQztFQUV0QixPQUFPQSxHQUFHO0FBQ1o7QUFFTyxTQUFTYSxnQkFBZ0JBLENBQUNDLEdBQVcsRUFBVTtFQUNwRCxNQUFNaEIsSUFBSSxHQUFHZ0IsR0FBRyxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDO0VBRTNCLE9BQU8sQ0FBQyxDQUFDakIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUFrQiw4QkFBdUIsRUFBQyxDQUFDO0FBQzlEO0FBRU8sU0FBU0MsZUFBZUEsQ0FBQ2pCLEdBQWEsRUFBVTtFQUNyRCxNQUFNVCxRQUFRLEdBQUdTLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdEMsTUFBTWtCLFFBQVEsR0FBR2xCLEdBQUcsQ0FBQ04sb0JBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNyQztFQUNBLE1BQU15QixhQUE0QixHQUFHRCxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUczQixRQUFRLENBQUMyQixRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDakcsSUFBSUUsTUFBTSxHQUFHZixlQUFDLENBQUNnQixJQUFJLENBQUNyQixHQUFHLENBQUNvQixNQUFNLElBQUlELGFBQWEsQ0FBQ0MsTUFBTSxJQUFJLEVBQUUsQ0FBQztFQUM3RCxJQUFJQSxNQUFNLEVBQUU7SUFDVixPQUFPQSxNQUFNO0VBQ2Y7O0VBRUE7RUFDQSxNQUFNRSxzQkFBc0IsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDO0VBQ2pGQSxzQkFBc0IsQ0FBQ0MsR0FBRyxDQUFDLFVBQVVDLEdBQUcsRUFBaUI7SUFDdkQsSUFBSUosTUFBTSxFQUFFO01BQ1YsT0FBT0EsTUFBTTtJQUNmO0lBQ0EsTUFBTUssT0FBc0IsR0FBR1AsUUFBUSxDQUFDTSxHQUFHLENBQUMsR0FBR2pDLFFBQVEsQ0FBQzJCLFFBQVEsQ0FBQ00sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakZKLE1BQU0sR0FBR2YsZUFBQyxDQUFDZ0IsSUFBSSxDQUFDSSxPQUFPLENBQUNMLE1BQU0sSUFBSUEsTUFBTSxDQUFDO0VBQzNDLENBQUMsQ0FBQztFQUNGLE9BQU9BLE1BQU07QUFDZjtBQUVPLFNBQVNNLGFBQWFBLENBQUNELE9BQWdCLEVBQVc7RUFDdkQsSUFBSXBCLGVBQUMsQ0FBQ0MsS0FBSyxDQUFDbUIsT0FBTyxDQUFDLEtBQUssS0FBSyxFQUFFO0lBQzlCO0lBQ0EsT0FBT0EsT0FBTyxDQUFDTCxNQUFNO0VBQ3ZCO0VBRUEsT0FBT0ssT0FBTztBQUNoQjtBQUVPLE1BQU1FLFNBQVMsR0FBQUMsT0FBQSxDQUFBRCxTQUFBLEdBQUcsQ0FDdkIsTUFBTSxFQUNOLE1BQU0sRUFDTixVQUFVLEVBQ1YsV0FBVyxFQUNYLFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE9BQU8sQ0FDUjtBQUVNLFNBQVNFLGVBQWVBLENBQUNDLGNBQXVCLEVBQUVDLE1BQWdCLEVBQVk7RUFDbkYsTUFBTUMsY0FBYyxHQUFHLENBQUMsR0FBR0wsU0FBUyxDQUFDO0VBQ3JDLElBQUlHLGNBQWMsS0FBSyxJQUFJLEVBQUU7SUFDM0JFLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDLFVBQVUsQ0FBQztFQUNqQztFQUVBLEtBQUssTUFBTUMsQ0FBQyxJQUFJSCxNQUFNLEVBQUU7SUFDdEIsSUFBSUMsY0FBYyxDQUFDRyxPQUFPLENBQUNELENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO01BQ3BDO01BQ0EsT0FBT0gsTUFBTSxDQUFDRyxDQUFDLENBQUM7SUFDbEI7RUFDRjtFQUVBLE9BQU9ILE1BQU07QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sZUFBZUssaUJBQWlCQSxDQUFDOUMsSUFBWSxFQUFFK0MsWUFBMEIsRUFBaUI7RUFDL0YsSUFBSTtJQUNGLE1BQU1DLE9BQU8sR0FBRyxNQUFNRCxZQUFZLENBQUNFLHVCQUF1QixDQUFDakQsSUFBSSxDQUFDO0lBQ2hFLElBQUlnRCxPQUFPLEVBQUU7TUFDWCxNQUFNRSxpQkFBUyxDQUFDQyxXQUFXLENBQUNDLG9CQUFTLENBQUNDLGFBQWEsQ0FBQztJQUN0RDtFQUNGLENBQUMsQ0FBQyxPQUFPQyxHQUFRLEVBQUU7SUFDakIsSUFBSUEsR0FBRyxDQUFDQyxNQUFNLEtBQUtDLHNCQUFXLENBQUNDLFNBQVMsRUFBRTtNQUN4QztJQUNGO0lBQ0EsTUFBTUgsR0FBRztFQUNYO0FBQ0Y7QUFFTyxTQUFTSSxjQUFjQSxDQUM1QjFELElBQVksRUFDWjJELFFBQWEsRUFDYlosWUFBMEIsRUFDWDtFQUNmLE9BQU8sSUFBSWEsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFXO0lBQzVDZixZQUFZLENBQUNnQixVQUFVLENBQUMvRCxJQUFJLEVBQUUyRCxRQUFRLEVBQUUsQ0FBQ0wsR0FBRyxFQUFFVSxNQUFNLEtBQVc7TUFDN0QsSUFBSSxDQUFDakQsZUFBQyxDQUFDa0QsTUFBTSxDQUFDWCxHQUFHLENBQUMsRUFBRTtRQUNsQixPQUFPUSxNQUFNLENBQUNSLEdBQUcsQ0FBQztNQUNwQixDQUFDLE1BQU0sSUFBSSxDQUFDdkMsZUFBQyxDQUFDbUQsV0FBVyxDQUFDRixNQUFNLENBQUMsRUFBRTtRQUNqQ0csa0NBQW1CLENBQUNDLEdBQUcsQ0FBQ0osTUFBTSxDQUFDLENBQUNLLEtBQUssQ0FBRUMsTUFBTSxJQUFLO1VBQ2hEekUsS0FBSyxDQUFDLG1DQUFtQyxFQUFFeUUsTUFBTSxDQUFDO1VBQ2xEQyxjQUFNLENBQUNDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQztRQUNoRCxDQUFDLENBQUM7TUFDSjtNQUNBLE9BQU9YLE9BQU8sQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztBQUNKO0FBRU8sU0FBU1ksa0JBQWtCQSxDQUNoQ3pFLElBQVksRUFDWjBFLHFCQUE4QixFQUM5QkMsWUFBaUIsRUFDRjtFQUNmLE9BQU8sSUFBSWYsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFXO0lBQzVDYSxZQUFZLENBQUMzRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUNzRCxHQUFHLEVBQUVzQixnQkFBZ0IsRUFBRUMsYUFBYSxLQUFXO01BQzNFO01BQ0EsSUFBSXZCLEdBQUcsSUFBSUEsR0FBRyxDQUFDQyxNQUFNLEtBQUtDLHNCQUFXLENBQUNDLFNBQVMsRUFBRTtRQUMvQyxPQUFPSyxNQUFNLENBQUNSLEdBQUcsQ0FBQztNQUNwQjs7TUFFQTtNQUNBLElBQUl2QyxlQUFDLENBQUNDLEtBQUssQ0FBQzRELGdCQUFnQixDQUFDLEtBQUssS0FBSyxFQUFFO1FBQ3ZDLE9BQU9kLE1BQU0sQ0FBQ1osaUJBQVMsQ0FBQ0MsV0FBVyxDQUFDQyxvQkFBUyxDQUFDQyxhQUFhLENBQUMsQ0FBQztNQUMvRDtNQUVBLEtBQUssSUFBSXlCLFNBQVMsR0FBRyxDQUFDLEVBQUVBLFNBQVMsR0FBR0QsYUFBYSxDQUFDRSxNQUFNLEVBQUVELFNBQVMsRUFBRSxFQUFFO1FBQ3JFO1FBQ0E7UUFDQSxJQUFJL0QsZUFBQyxDQUFDQyxLQUFLLENBQUM2RCxhQUFhLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO1VBQ2xELElBQUlELGFBQWEsQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN2QixNQUFNLEtBQUtDLHNCQUFXLENBQUNDLFNBQVMsRUFBRTtZQUNoRSxJQUFJaUIscUJBQXFCLEVBQUU7Y0FDekIsT0FBT2IsT0FBTyxDQUFDLENBQUM7WUFDbEI7WUFFQSxPQUFPQyxNQUFNLENBQUNaLGlCQUFTLENBQUM4QixxQkFBcUIsQ0FBQzVCLG9CQUFTLENBQUM2QixzQkFBc0IsQ0FBQyxDQUFDO1VBQ2xGO1FBQ0Y7TUFDRjtNQUVBLE9BQU9wQixPQUFPLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7QUFDSjs7QUFFQTtBQUNPLFNBQVNxQix3QkFBd0JBLENBQUNDLGFBQXVCLEVBQUVDLGNBQXdCLEVBQU87RUFDL0YsSUFBSSxNQUFNLElBQUlBLGNBQWMsRUFBRTtJQUM1QjtJQUNBLE9BQU87TUFBRSxHQUFHRCxhQUFhO01BQUVqRixJQUFJLEVBQUU7UUFBRSxHQUFHaUYsYUFBYSxDQUFDakYsSUFBSTtRQUFFLEdBQUdrRixjQUFjLENBQUNsRjtNQUFLO0lBQUUsQ0FBQztFQUN0RjtFQUVBLE9BQU9pRixhQUFhO0FBQ3RCO0FBRU8sU0FBU0Usb0JBQW9CQSxDQUFDQyxJQUFjLEVBQUVwRixJQUFhLEVBQU87RUFDdkUsTUFBTThELE1BQU0sR0FBR3VCLGNBQVEsQ0FBQ0MsU0FBUyxDQUFDRixJQUFJLENBQUM7RUFFdkMsSUFBSXRCLE1BQU0sSUFBSXNCLElBQUksQ0FBQ3JGLFFBQVEsQ0FBQytELE1BQU0sQ0FBQyxFQUFFO0lBQ25DLE1BQU03QixPQUFnQixHQUFHbUQsSUFBSSxDQUFDckYsUUFBUSxDQUFDK0QsTUFBTSxDQUFDO0lBQzlDLE1BQU0vRCxRQUFhLEdBQUc7TUFBRSxDQUFDK0QsTUFBTSxHQUFHO0lBQVMsQ0FBQztJQUM1QyxNQUFNdEQsR0FBUSxHQUFHO01BQ2ZWLElBQUksRUFBRW1DLE9BQU8sQ0FBQ25DLElBQUk7TUFDbEJ5RixXQUFXLEVBQUV0RCxPQUFPLENBQUNzRCxXQUFXO01BQ2hDLENBQUNyRixvQkFBUyxHQUFHO1FBQUU0RDtNQUFPLENBQUM7TUFDdkIwQixXQUFXLEVBQUV2RCxPQUFPLENBQUN1RCxXQUFXLElBQUksQ0FBQ3ZELE9BQU8sQ0FBQ3dELE1BQU0sQ0FBQyxDQUFDQyxNQUFNLENBQUNDLE9BQU8sQ0FBQztNQUNwRUYsTUFBTSxFQUFFeEQsT0FBTyxDQUFDd0QsTUFBTTtNQUN0QkcsVUFBVSxFQUFFM0QsT0FBTyxDQUFDMkQsVUFBVTtNQUM5QkMsY0FBYyxFQUFFNUQsT0FBTyxDQUFDNEQsY0FBYyxJQUFJLEVBQUU7TUFDNUNDLFFBQVEsRUFBRTdELE9BQU8sQ0FBQzZELFFBQVE7TUFDMUJDLFFBQVEsRUFBRTlELE9BQU8sQ0FBQzhELFFBQVE7TUFDMUIvRixJQUFJLEVBQUU7UUFDSmdHLFFBQVEsRUFBRWhHO01BQ1osQ0FBQztNQUNEaUcsSUFBSSxFQUFFaEUsT0FBTyxDQUFDZ0UsSUFBSTtNQUNsQkMsT0FBTyxFQUFFakUsT0FBTyxDQUFDaUUsT0FBTztNQUN4Qm5HO0lBQ0YsQ0FBQztJQUVELE9BQU9TLEdBQUc7RUFDWjtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzJGLG9CQUFvQkEsQ0FBQzNGLEdBQWEsRUFBVztFQUMzRCxNQUFNNEYsSUFBYyxHQUFHQyxNQUFNLENBQUNELElBQUksQ0FBQzVGLEdBQUcsQ0FBQztFQUV2QyxPQUFPNEYsSUFBSSxDQUFDRSxRQUFRLENBQUMsVUFBVSxDQUFDO0FBQ2xDO0FBRU8sU0FBU0MsZ0JBQWdCQSxDQUFDdEUsT0FBZ0IsRUFBRTtFQUNqRCxJQUFJQSxPQUFPLEVBQUV1RSxPQUFPLEVBQUU7SUFDcEIsTUFBTUEsT0FBTyxHQUFHSCxNQUFNLENBQUNELElBQUksQ0FBQ25FLE9BQU8sQ0FBQ3VFLE9BQU8sQ0FBQztJQUM1QyxPQUNFQSxPQUFPLENBQUNDLElBQUksQ0FBRUMsSUFBSSxJQUFLO01BQ3JCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDSixRQUFRLENBQUNJLElBQUksQ0FBQztJQUNoRSxDQUFDLENBQUMsS0FBS0MsU0FBUztFQUVwQjtFQUNBLE9BQU8sS0FBSztBQUNkO0FBRU8sU0FBU0MsMEJBQTBCQSxDQUFDQyxRQUFrQixFQUF1QjtFQUNsRixNQUFNQyxtQkFBbUIsR0FBR1QsTUFBTSxDQUFDRCxJQUFJLENBQUNTLFFBQVEsQ0FBQzlHLFFBQVEsQ0FBQyxDQUFDZ0gsTUFBTSxDQUMvRCxDQUFDQyxHQUF3QixFQUFFL0UsT0FBZSxLQUFLO0lBQzdDLE1BQU1nRixRQUFRLEdBQUdKLFFBQVEsQ0FBQzlHLFFBQVEsQ0FBQ2tDLE9BQU8sQ0FBQztJQUMzQztJQUNBO0lBQ0EsTUFBTWlGLG9CQUFvQixHQUFHO01BQzNCcEgsSUFBSSxFQUFFbUgsUUFBUSxDQUFDbkgsSUFBSTtNQUNuQm1DLE9BQU8sRUFBRWdGLFFBQVEsQ0FBQ2hGLE9BQU87TUFDekJzRCxXQUFXLEVBQUUwQixRQUFRLENBQUMxQixXQUFXO01BQ2pDNEIsVUFBVSxFQUFFRixRQUFRLENBQUNFLFVBQVU7TUFDL0JDLEdBQUcsRUFBRUgsUUFBUSxDQUFDRyxHQUFHO01BQ2pCQyxJQUFJLEVBQUVKLFFBQVEsQ0FBQ0ksSUFBSTtNQUNuQkMsT0FBTyxFQUFFTCxRQUFRLENBQUNLLE9BQU87TUFDekJDLEdBQUcsRUFBRU4sUUFBUSxDQUFDTSxHQUFHO01BQ2pCQyxFQUFFLEVBQUVQLFFBQVEsQ0FBQ08sRUFBRTtNQUNmQyxPQUFPLEVBQUVSLFFBQVEsQ0FBQ1EsT0FBTztNQUN6QkMsV0FBVyxFQUFFVCxRQUFRLENBQUNTLFdBQVc7TUFDakNDLFlBQVksRUFBRVYsUUFBUSxDQUFDVSxZQUFZO01BQ25DQyxlQUFlLEVBQUVYLFFBQVEsQ0FBQ1csZUFBZTtNQUN6Q0MsZ0JBQWdCLEVBQUVaLFFBQVEsQ0FBQ1ksZ0JBQWdCO01BQzNDQyxvQkFBb0IsRUFBRWIsUUFBUSxDQUFDYSxvQkFBb0I7TUFDbkRDLG9CQUFvQixFQUFFZCxRQUFRLENBQUNjLG9CQUFvQjtNQUNuREMsa0JBQWtCLEVBQUVmLFFBQVEsQ0FBQ2Usa0JBQWtCO01BQy9DO01BQ0FDLGNBQWMsRUFBRWhCLFFBQVEsQ0FBQ2dCLGNBQWM7TUFDdkMxQixnQkFBZ0IsRUFBRUEsZ0JBQWdCLENBQUNVLFFBQVE7SUFDN0MsQ0FBQztJQUNERCxHQUFHLENBQUMvRSxPQUFPLENBQUMsR0FBR2lGLG9CQUFvQjtJQUNuQyxPQUFPRixHQUFHO0VBQ1osQ0FBQyxFQUNELENBQUMsQ0FDSCxDQUFDO0VBRUQsTUFBTWtCLGlCQUFpQixHQUFHO0lBQ3hCcEksSUFBSSxFQUFFK0csUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUN0QixDQUFDM0csb0JBQVMsR0FBRzJHLFFBQVEsQ0FBQzNHLG9CQUFTLENBQUM7SUFDaENILFFBQVEsRUFBRStHLG1CQUFtQjtJQUM3QjtJQUNBZCxRQUFRLEVBQUVhLFFBQVEsRUFBRTdHLElBQUksRUFBRWdHLFFBQVE7SUFDbEM7SUFDQWhHLElBQUksRUFBRTZHLFFBQVEsRUFBRTdHO0VBQ2xCLENBQUM7O0VBRUQ7RUFDQSxPQUFPa0ksaUJBQWlCO0FBQzFCIiwiaWdub3JlTGlzdCI6W119
|