badge-urls
Version:
Helper functions to generate URLs for all badges / shields from shields.io
47 lines (46 loc) • 1.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var replaceAll_1 = tslib_1.__importDefault(require("../../utils/replaceAll"));
var firstAvailableSafeName_1 = tslib_1.__importDefault(require("../../utils/firstAvailableSafeName"));
var case_1 = require("../../utils/case");
var OPTIONS_IMPORT_PREFIX = 'import { ShieldsIOOptions, urlWithOptions } from "../../options";\n';
function generateShieldFunction(url) {
var pathVariables = [];
var _a = url.split("?"), urlPath = _a[0], urlQuery = _a[1];
var urlPathTemplate = urlPath
.split("/")
.map(function (part) {
if (part.startsWith(":")) {
var pathVariable = firstAvailableSafeName_1.default(case_1.camelCase(part.substring(1)), pathVariables);
return "${" + pathVariable + "}";
}
else {
return part;
}
})
.join("/");
var urlTemplate = urlQuery
? urlPathTemplate + "?" + urlQuery
: urlPathTemplate;
var code = "(" + pathVariables
.map(function (pathVariable) { return pathVariable + ": string"; })
.concat(["options?: ShieldsIOOptions"])
.join(", ") + ") => urlWithOptions(`" + urlTemplate + "`, options)";
return code;
}
function generateShieldModule(label, url) {
var escapedLabel = replaceAll_1.default(label, "`", "`");
var labelDocstring = "/** Label for " + label + " (" + url + ") */";
var labelLine = "export const label = `" + escapedLabel + "`;";
var urlDocstring = "/** URL for " + label + " (" + url + ") */";
var functionLine = "export const url = " + generateShieldFunction(url) + ";";
return [
OPTIONS_IMPORT_PREFIX,
labelDocstring,
labelLine,
urlDocstring,
functionLine,
].join("\n");
}
exports.default = generateShieldModule;