UNPKG

@webdoc/template-library

Version:

Goodies for @webdoc template packages! See @webdoc/legacy-template for an example!

92 lines (84 loc) 2.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RepositoryIntegration = void 0; exports.autoDetectRepository = autoDetectRepository; exports.installRepository = installRepository; var _gitBranch = _interopRequireDefault(require("@fork-of/git-branch")); var _parseGithubUrl = _interopRequireDefault(require("parse-github-url")); var _path = _interopRequireDefault(require("path")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } class RepositoryIntegration { constructor(url) { _defineProperty(this, "url", void 0); this.url = url; if (!this.url.endsWith("/")) { this.url += "/"; } } linkTo(doc, linkText) { const fakeCondition = false; if (fakeCondition) { return ""; } throw new Error("NotImplementedError"); } static test(url) { const fakeCondition = false; if (fakeCondition) { return false; } throw new Error("NotImplementedError"); } } exports.RepositoryIntegration = RepositoryIntegration; const repositoryIntegrations = []; function autoDetectRepository(url) { for (const Integration of repositoryIntegrations) { if (Integration.test(url)) { return new Integration(url); } } return null; } function installRepository(integration) { repositoryIntegrations.unshift(integration); } class GitHubIntegration extends RepositoryIntegration { constructor(url) { super(url); const urlInfo = (0, _parseGithubUrl.default)(this.url); const currentBranch = _gitBranch.default.sync(); if (currentBranch) { if (typeof urlInfo.blob === "undefined") { this.url += `blob/${currentBranch}/`; } else if (urlInfo.branch) { this.url = this.url.replace(urlInfo.branch, currentBranch); } } else if (!urlInfo.branch) { console.error("GitHubIntegration unable to resolve branch in " + this.url); } } linkTo(doc, linkText) { if (!doc.loc) { return; } let fileName = doc.loc.fileName; if (fileName.startsWith("./")) { fileName = fileName.replace("./", ""); } let sourceFile = `${this.url}${fileName}`; let defaultText = `${_path.default.basename(fileName)}`; if (doc.loc && doc.loc.start) { sourceFile += `#L${doc.loc.start.line}`; defaultText += `:${doc.loc.start.line}`; } return `<a href=${sourceFile}>${linkText || defaultText}</a>`; } static test(url) { return url.includes("github.com"); } } installRepository(GitHubIntegration);