firebase-tools
Version:
Command-Line Interface for Firebase
92 lines (91 loc) • 3.35 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.isLocalHost = exports.compareVersionStrings = exports.parseVersionString = exports.parseRuntimeVersion = exports.removePathSegments = exports.trimSlashes = exports.isValidWildcardMatch = exports.extractParamsFromPath = void 0;
const wildcardRegex = new RegExp("{[^/{}]*}");
const wildcardKeyRegex = new RegExp("^{(.+)}$");
function extractParamsFromPath(wildcardPath, snapshotPath) {
if (!isValidWildcardMatch(wildcardPath, snapshotPath)) {
return {};
}
const wildcardChunks = trimSlashes(wildcardPath).split("/");
const snapshotChunks = trimSlashes(snapshotPath).split("/");
return wildcardChunks
.slice(-snapshotChunks.length)
.reduce((params, chunk, index) => {
const match = wildcardKeyRegex.exec(chunk);
if (match) {
const wildcardKey = match[1];
const potentialWildcardValue = snapshotChunks[index];
if (!wildcardKeyRegex.exec(potentialWildcardValue)) {
params[wildcardKey] = potentialWildcardValue;
}
}
return params;
}, {});
}
exports.extractParamsFromPath = extractParamsFromPath;
function isValidWildcardMatch(wildcardPath, snapshotPath) {
const wildcardChunks = trimSlashes(wildcardPath).split("/");
const snapshotChunks = trimSlashes(snapshotPath).split("/");
if (snapshotChunks.length > wildcardChunks.length) {
return false;
}
const mismatchedChunks = wildcardChunks.slice(-snapshotChunks.length).filter((chunk, index) => {
return !(wildcardRegex.exec(chunk) || chunk === snapshotChunks[index]);
});
return mismatchedChunks.length === 0;
}
exports.isValidWildcardMatch = isValidWildcardMatch;
function trimSlashes(str) {
return str
.split("/")
.filter((c) => c)
.join("/");
}
exports.trimSlashes = trimSlashes;
function removePathSegments(path, count) {
return trimSlashes(path).split("/").slice(count).join("/");
}
exports.removePathSegments = removePathSegments;
function parseRuntimeVersion(runtime) {
if (!runtime) {
return undefined;
}
const runtimeRe = /(nodejs)?([0-9]+)/;
const match = runtimeRe.exec(runtime);
if (match) {
return Number.parseInt(match[2]);
}
return undefined;
}
exports.parseRuntimeVersion = parseRuntimeVersion;
function parseVersionString(version) {
const parts = (version || "0").split(".");
parts.push("0");
parts.push("0");
return {
major: parseInt(parts[0], 10),
minor: parseInt(parts[1], 10),
patch: parseInt(parts[2], 10),
};
}
exports.parseVersionString = parseVersionString;
function compareVersionStrings(a, b) {
const versionA = parseVersionString(a);
const versionB = parseVersionString(b);
if (versionA.major !== versionB.major) {
return versionA.major - versionB.major;
}
if (versionA.minor !== versionB.minor) {
return versionA.minor - versionB.minor;
}
if (versionA.patch !== versionB.patch) {
return versionA.patch - versionB.patch;
}
return 0;
}
exports.compareVersionStrings = compareVersionStrings;
function isLocalHost(href) {
return !!href.match(/^(http(s)?:\/\/)?(localhost|127.0.0.1|\[::1])/);
}
exports.isLocalHost = isLocalHost;
;