GSI - Employe Self Service 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

"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;