osls
Version:
Open-source alternative to Serverless Framework
57 lines (46 loc) • 1.71 kB
JavaScript
// Resolves all non instance dependent variables in a provided configuration
// This util is not used in Serverless process flow, but is handy for side resolution of variables
;
const ensureString = require('type/string/ensure');
const ensurePlainObject = require('type/plain-object/ensure');
const ServerlessError = require('../../serverless-error');
const resolveMeta = require('./resolve-meta');
const resolve = require('./resolve');
const defaultSources = {
env: require('./sources/env'),
file: require('./sources/file'),
opt: require('./sources/opt'),
self: require('./sources/self'),
strToBool: require('./sources/str-to-bool'),
sls: require('./sources/instance-dependent/get-sls')(),
};
const reportEventualErrors = (variablesMeta) => {
const resolutionErrors = new Set(
Array.from(variablesMeta.values(), ({ error }) => error).filter(Boolean)
);
if (!resolutionErrors.size) return;
throw new ServerlessError(
`Variables resolution errored with:${Array.from(
resolutionErrors,
(error) => `\n - ${error.message}`
)}`,
'VARIABLES_RESOLUTION_ERROR'
);
};
module.exports = async ({ serviceDir, servicePath, configuration, options, sources = null }) => {
serviceDir = ensureString(serviceDir || servicePath);
ensurePlainObject(configuration);
options = ensurePlainObject(options, { default: {} });
const variablesMeta = resolveMeta(configuration);
reportEventualErrors(variablesMeta);
if (!sources) sources = defaultSources;
await resolve({
serviceDir,
configuration,
variablesMeta,
sources,
options,
fulfilledSources: new Set(Object.keys(sources)),
});
reportEventualErrors(variablesMeta);
};