JezK
Edit File: git-resolver.js
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; function _regenerator() { var data = _interopRequireDefault(require("@babel/runtime/regenerator")); _regenerator = function _regenerator() { return data; }; return data; } function _asyncToGenerator2() { var data = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); _asyncToGenerator2 = function _asyncToGenerator2() { return data; }; return data; } function _classCallCheck2() { var data = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); _classCallCheck2 = function _classCallCheck2() { return data; }; return data; } function _createClass2() { var data = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); _createClass2 = function _createClass2() { return data; }; return data; } function _assertThisInitialized2() { var data = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); _assertThisInitialized2 = function _assertThisInitialized2() { return data; }; return data; } function _inherits2() { var data = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); _inherits2 = function _inherits2() { return data; }; return data; } function _possibleConstructorReturn2() { var data = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); _possibleConstructorReturn2 = function _possibleConstructorReturn2() { return data; }; return data; } function _getPrototypeOf2() { var data = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); _getPrototypeOf2 = function _getPrototypeOf2() { return data; }; return data; } function _defineProperty2() { var data = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); _defineProperty2 = function _defineProperty2() { return data; }; return data; } function _index() { var data = require("../index.js"); _index = function _index() { return data; }; return data; } function util() { var data = _interopRequireWildcard(require("../../util/misc.js")); util = function util() { return data; }; return data; } function versionUtil() { var data = _interopRequireWildcard(require("../../util/version.js")); versionUtil = function versionUtil() { return data; }; return data; } function _guessName() { var data = _interopRequireDefault(require("../../util/guess-name.js")); _guessName = function _guessName() { return data; }; return data; } function _index2() { var data = require("../../registries/index.js"); _index2 = function _index2() { return data; }; return data; } function _exoticResolver() { var data = _interopRequireDefault(require("./exotic-resolver.js")); _exoticResolver = function _exoticResolver() { return data; }; return data; } function _git() { var data = _interopRequireDefault(require("../../util/git.js")); _git = function _git() { return data; }; return data; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2()["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2()["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2()["default"])(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var urlParse = require('url').parse; var GIT_HOSTS = ['github.com', 'gitlab.com', 'bitbucket.com', 'bitbucket.org']; var GIT_PATTERN_MATCHERS = [/^git:/, /^git\+.+:/, /^ssh:/, /^https?:.+\.git$/, /^https?:.+\.git#.+/]; var GitResolver = /*#__PURE__*/function (_ExoticResolver) { (0, _inherits2()["default"])(GitResolver, _ExoticResolver); var _super = _createSuper(GitResolver); function GitResolver(request, fragment) { var _this; (0, _classCallCheck2()["default"])(this, GitResolver); _this = _super.call(this, request, fragment); (0, _defineProperty2()["default"])((0, _assertThisInitialized2()["default"])(_this), "url", void 0); (0, _defineProperty2()["default"])((0, _assertThisInitialized2()["default"])(_this), "hash", void 0); var _versionUtil$explodeH = versionUtil().explodeHashedUrl(fragment), url = _versionUtil$explodeH.url, hash = _versionUtil$explodeH.hash; _this.url = url; _this.hash = hash; return _this; } (0, _createClass2()["default"])(GitResolver, [{ key: "resolve", value: function () { var _resolve = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee2(forked) { var url, parts, name, Resolver, pathname, _url, shrunk, config, gitUrl, client, commit, tryRegistry, _tryRegistry, file, registry, _file; return _regenerator()["default"].wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: _tryRegistry = function _tryRegistry3() { _tryRegistry = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee(registry) { var filename, file, json; return _regenerator()["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: filename = _index2().registries[registry].filename; _context.next = 3; return client.getFile(filename); case 3: file = _context.sent; if (file) { _context.next = 6; break; } return _context.abrupt("return", null); case 6: _context.next = 8; return config.readJson("".concat(url, "/").concat(filename), function () { return JSON.parse(file); }); case 8: json = _context.sent; json._uid = commit; json._remote = { resolved: "".concat(url, "#").concat(commit), type: 'git', reference: url, hash: commit, registry: registry }; return _context.abrupt("return", json); case 12: case "end": return _context.stop(); } }, _callee); })); return _tryRegistry.apply(this, arguments); }; tryRegistry = function _tryRegistry2(_x2) { return _tryRegistry.apply(this, arguments); }; url = this.url; // shortcut for hosted git. we will fallback to a GitResolver if the hosted git // optimisations fail which the `forked` flag indicates so we don't get into an // infinite loop parts = urlParse(url); if (!(false && !forked && !parts.auth && parts.pathname)) { _context2.next = 18; break; } _context2.t0 = _regenerator()["default"].keys(_index().hostedGit); case 6: if ((_context2.t1 = _context2.t0()).done) { _context2.next = 18; break; } name = _context2.t1.value; Resolver = _index().hostedGit[name]; if (!(Resolver.hostname !== parts.hostname)) { _context2.next = 11; break; } return _context2.abrupt("continue", 6); case 11: // we have a match! clean up the pathname of url artifacts pathname = parts.pathname; pathname = util().removePrefix(pathname, '/'); // remove prefixed slash pathname = util().removeSuffix(pathname, '.git'); // remove .git suffix if present _url = "".concat(pathname).concat(this.hash ? '#' + decodeURIComponent(this.hash) : ''); return _context2.abrupt("return", this.fork(Resolver, false, _url)); case 18: // get from lockfile shrunk = this.request.getLocked('git'); if (!shrunk) { _context2.next = 21; break; } return _context2.abrupt("return", shrunk); case 21: config = this.config; gitUrl = _git()["default"].npmUrlToGitUrl(url); client = new (_git()["default"])(config, gitUrl, this.hash); _context2.next = 26; return client.init(); case 26: commit = _context2.sent; _context2.next = 29; return tryRegistry(this.registry); case 29: file = _context2.sent; if (!file) { _context2.next = 32; break; } return _context2.abrupt("return", file); case 32: _context2.t2 = _regenerator()["default"].keys(_index2().registries); case 33: if ((_context2.t3 = _context2.t2()).done) { _context2.next = 44; break; } registry = _context2.t3.value; if (!(registry === this.registry)) { _context2.next = 37; break; } return _context2.abrupt("continue", 33); case 37: _context2.next = 39; return tryRegistry(registry); case 39: _file = _context2.sent; if (!_file) { _context2.next = 42; break; } return _context2.abrupt("return", _file); case 42: _context2.next = 33; break; case 44: return _context2.abrupt("return", { // This is just the default, it can be overridden with key of dependencies name: (0, _guessName()["default"])(url), version: '0.0.0', _uid: commit, _remote: { resolved: "".concat(url, "#").concat(commit), type: 'git', reference: url, hash: commit, registry: 'npm' } }); case 45: case "end": return _context2.stop(); } }, _callee2, this); })); function resolve(_x) { return _resolve.apply(this, arguments); } return resolve; }() }], [{ key: "isVersion", value: function isVersion(pattern) { for (var _i = 0, _GIT_PATTERN_MATCHERS = GIT_PATTERN_MATCHERS; _i < _GIT_PATTERN_MATCHERS.length; _i++) { var matcher = _GIT_PATTERN_MATCHERS[_i]; if (matcher.test(pattern)) { return true; } } var _urlParse = urlParse(pattern), hostname = _urlParse.hostname, path = _urlParse.path; if (hostname && path && GIT_HOSTS.indexOf(hostname) >= 0) { // only if dependency is pointing to a git repo, // e.g. facebook/flow and not file in a git repo facebook/flow/archive/v1.0.0.tar.gz return path.split('/').filter(function (p) { return !!p; }).length === 2; } return false; } }]); return GitResolver; }(_exoticResolver()["default"]); exports["default"] = GitResolver; //# sourceMappingURL=git-resolver.js.map