forked from dienianindya/gsi_ess_mobile
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
4.7 KiB
127 lines
4.7 KiB
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.isEndpointFiltered = exports.isCodebaseFiltered = exports.groupEndpointsByCodebase = exports.targetCodebases = exports.getFunctionLabel = exports.getEndpointFilters = exports.parseFunctionSelector = exports.endpointMatchesFilter = exports.endpointMatchesAnyFilter = void 0;
|
|
const backend = require("./backend");
|
|
const projectConfig_1 = require("../../functions/projectConfig");
|
|
function endpointMatchesAnyFilter(endpoint, filters) {
|
|
if (!filters) {
|
|
return true;
|
|
}
|
|
return filters.some((filter) => endpointMatchesFilter(endpoint, filter));
|
|
}
|
|
exports.endpointMatchesAnyFilter = endpointMatchesAnyFilter;
|
|
function endpointMatchesFilter(endpoint, filter) {
|
|
if (endpoint.codebase && filter.codebase) {
|
|
if (endpoint.codebase !== filter.codebase) {
|
|
return false;
|
|
}
|
|
}
|
|
if (!filter.idChunks) {
|
|
return true;
|
|
}
|
|
const idChunks = endpoint.id.split("-");
|
|
if (idChunks.length < filter.idChunks.length) {
|
|
return false;
|
|
}
|
|
for (let i = 0; i < filter.idChunks.length; i += 1) {
|
|
if (idChunks[i] !== filter.idChunks[i]) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
exports.endpointMatchesFilter = endpointMatchesFilter;
|
|
function parseFunctionSelector(selector) {
|
|
const fragments = selector.split(":");
|
|
if (fragments.length < 2) {
|
|
return [
|
|
{ codebase: fragments[0] },
|
|
{ codebase: projectConfig_1.DEFAULT_CODEBASE, idChunks: fragments[0].split(/[-.]/) },
|
|
];
|
|
}
|
|
return [
|
|
{
|
|
codebase: fragments[0],
|
|
idChunks: fragments[1].split(/[-.]/),
|
|
},
|
|
];
|
|
}
|
|
exports.parseFunctionSelector = parseFunctionSelector;
|
|
function getEndpointFilters(options) {
|
|
if (!options.only) {
|
|
return undefined;
|
|
}
|
|
const selectors = options.only.split(",");
|
|
const filters = [];
|
|
for (let selector of selectors) {
|
|
if (selector.startsWith("functions:")) {
|
|
selector = selector.replace("functions:", "");
|
|
if (selector.length > 0) {
|
|
filters.push(...parseFunctionSelector(selector));
|
|
}
|
|
}
|
|
}
|
|
if (filters.length === 0) {
|
|
return undefined;
|
|
}
|
|
return filters;
|
|
}
|
|
exports.getEndpointFilters = getEndpointFilters;
|
|
function getFunctionLabel(fn) {
|
|
let id = `${fn.id}(${fn.region})`;
|
|
if (fn.codebase && fn.codebase !== projectConfig_1.DEFAULT_CODEBASE) {
|
|
id = `${fn.codebase}:${id}`;
|
|
}
|
|
return id;
|
|
}
|
|
exports.getFunctionLabel = getFunctionLabel;
|
|
function targetCodebases(config, filters) {
|
|
const codebasesFromConfig = [...new Set(Object.values(config).map((c) => c.codebase))];
|
|
if (!filters) {
|
|
return [...codebasesFromConfig];
|
|
}
|
|
const codebasesFromFilters = [
|
|
...new Set(filters.map((f) => f.codebase).filter((c) => c !== undefined)),
|
|
];
|
|
if (codebasesFromFilters.length === 0) {
|
|
return [...codebasesFromConfig];
|
|
}
|
|
const intersections = [];
|
|
for (const codebase of codebasesFromConfig) {
|
|
if (codebasesFromFilters.includes(codebase)) {
|
|
intersections.push(codebase);
|
|
}
|
|
}
|
|
return intersections;
|
|
}
|
|
exports.targetCodebases = targetCodebases;
|
|
function groupEndpointsByCodebase(wantBackends, haveEndpoints) {
|
|
const grouped = {};
|
|
let endpointsToAssign = haveEndpoints;
|
|
for (const codebase of Object.keys(wantBackends)) {
|
|
const names = backend.allEndpoints(wantBackends[codebase]).map((e) => backend.functionName(e));
|
|
grouped[codebase] = backend.of(...endpointsToAssign.filter((e) => names.includes(backend.functionName(e))));
|
|
endpointsToAssign = endpointsToAssign.filter((e) => !names.includes(backend.functionName(e)));
|
|
}
|
|
for (const codebase of Object.keys(wantBackends)) {
|
|
const matchedEndpoints = endpointsToAssign.filter((e) => e.codebase === codebase);
|
|
grouped[codebase] = backend.merge(grouped[codebase], backend.of(...matchedEndpoints));
|
|
const matchedNames = matchedEndpoints.map((e) => backend.functionName(e));
|
|
endpointsToAssign = endpointsToAssign.filter((e) => {
|
|
return !matchedNames.includes(backend.functionName(e));
|
|
});
|
|
}
|
|
return grouped;
|
|
}
|
|
exports.groupEndpointsByCodebase = groupEndpointsByCodebase;
|
|
function isCodebaseFiltered(codebase, filters) {
|
|
return filters.some((filter) => {
|
|
const noIdChunks = (filter.idChunks || []).length === 0;
|
|
return noIdChunks && filter.codebase === codebase;
|
|
});
|
|
}
|
|
exports.isCodebaseFiltered = isCodebaseFiltered;
|
|
function isEndpointFiltered(endpoint, filters) {
|
|
return filters.some((filter) => endpointMatchesFilter(endpoint, filter));
|
|
}
|
|
exports.isEndpointFiltered = isEndpointFiltered;
|