@webdoc/template-library
Version:
Goodies for @webdoc template packages! See @webdoc/legacy-template for an example!
92 lines (84 loc) • 2.76 kB
JavaScript
;
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);