Skip to content

Commit

Permalink
fix(Variables): Fix unresolved sources resolver
Browse files Browse the repository at this point in the history
  • Loading branch information
medikoo committed Apr 23, 2021
1 parent 6425e4a commit 53a7872
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 30 deletions.
28 changes: 18 additions & 10 deletions lib/configuration/variables/resolve-unresolved-source-types.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,29 @@
'use strict';

const processVariables = (propertyPath, variablesMeta, resultMap) => {
if (!variablesMeta.variables) return;
let hasUnresolvedSources = false;
if (!variablesMeta.variables) return hasUnresolvedSources;
for (const variableMeta of variablesMeta.variables) {
if (!variableMeta.sources) continue;
for (const sourceData of variableMeta.sources) {
if (!sourceData.type) continue;
if (!resultMap.has(sourceData.type)) resultMap.set(sourceData.type, new Set());
resultMap.get(sourceData.type).add(propertyPath);
if (sourceData.params) {
for (const paramData of sourceData.params) {
processVariables(propertyPath, paramData, resultMap);
}
const sourceData = variableMeta.sources[0];
if (!sourceData.type) continue;
if (sourceData.params) {
for (const paramData of sourceData.params) {
if (processVariables(propertyPath, paramData, resultMap)) hasUnresolvedSources = true;
}
if (sourceData.address) processVariables(propertyPath, sourceData.address, resultMap);
if (hasUnresolvedSources) continue;
}
if (sourceData.address) {
if (processVariables(propertyPath, sourceData.address, resultMap)) {
hasUnresolvedSources = true;
continue;
}
}
hasUnresolvedSources = true;
if (!resultMap.has(sourceData.type)) resultMap.set(sourceData.type, new Set());
resultMap.get(sourceData.type).add(propertyPath);
}
return hasUnresolvedSources;
};

module.exports = (propertiesVariablesMeta) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,44 +3,79 @@
const { expect } = require('chai');

const resolveMeta = require('../../../../../lib/configuration/variables/resolve-meta');
const resolve = require('../../../../../lib/configuration/variables/resolve');
const resolveUnresolvedSourceTypes = require('../../../../../lib/configuration/variables/resolve-unresolved-source-types');

describe('test/unit/lib/configuration/variables/resolve-unresolved-source-types.test.js', () => {
const configuration = {
foo: {
params: '${sourceParam(param1, param2)}',
varParam: '${sourceParam(${sourceDirect:})}',
resolved: 'foo${recognized:}',
unrecognized: 'foo${unrecognized:}',
unrecognizedInParens: 'foo${recognized(${unrecognized:}, ${unrecognized2:})}',
unrecognizedInAddress: 'foo${recognized:${unrecognized:}}',
unrecognizedInParensAndAddress:
'foo${recognized(${unrecognized:}, ${unrecognized2:}):${unrecognized3:}}',
unrecognizedFallback: 'foo${recognized:, unrecognized:}',
otherUnrecognizedFallback: 'foo${unrecognized:, unrecognized4:}',
deep: {
resolved: 'foo${recognized:}',
unrecognized: 'foo${unrecognized:}',
unrecognizedInParens: 'foo${recognized(${unrecognized:}, ${unrecognized2:})}',
unrecognizedInAddress: 'foo${recognized:${unrecognized:}}',
unrecognizedInParensAndAddress:
'foo${recognized(${unrecognized:}, ${unrecognized2:}):${unrecognized3:}}',
unrecognizedFallback: 'foo${recognized:, unrecognized:}',
otherUnrecognizedFallback: 'foo${unrecognized:, unrecognized4:}',
},
static: true,
address: 'foo${sourceAddress:address-result}',
varAddress: 'foo${sourceAddress:${sourceDirect:}}',
};

nonStringStringPart: 'elo${sourceMissing:, null}',
notExistingProperty: "${sourceProperty(not, existing), 'notExistingFallback'}",
nestUnrecognized: {
unrecognized:
'${sourceDirect:}|${sourceUnrecognized:}|${sourceDirect(${sourceUnrecognized:})}' +
'${sourceDirect:${sourceUnrecognized:}}',
const sources = {
recognized: {
resolve: () => ({ value: 234 }),
},
};
let resultMap;

before(async () => {
resultMap = resolveUnresolvedSourceTypes(resolveMeta(configuration));
const variablesMeta = resolveMeta(configuration);
await resolve({
serviceDir: process.cwd(),
configuration,
variablesMeta,
sources,
options: {},
fulfilledSources: new Set('recognized'),
});

resultMap = resolveUnresolvedSourceTypes(variablesMeta);
});

it('should resolve all not resolved sources', () => {
expect(resultMap).to.deep.equal(
new Map([
['sourceParam', new Set(['foo\0params', 'foo\0varParam'])],
[
'sourceDirect',
new Set(['foo\0varParam', 'varAddress', 'nestUnrecognized\0unrecognized']),
'unrecognized',
new Set([
'unrecognized',
'unrecognizedInParens',
'unrecognizedInAddress',
'unrecognizedInParensAndAddress',
'otherUnrecognizedFallback',
'deep\0unrecognized',
'deep\0unrecognizedInParens',
'deep\0unrecognizedInAddress',
'deep\0unrecognizedInParensAndAddress',
'deep\0otherUnrecognizedFallback',
]),
],
[
'unrecognized2',
new Set([
'unrecognizedInParens',
'unrecognizedInParensAndAddress',
'deep\0unrecognizedInParens',
'deep\0unrecognizedInParensAndAddress',
]),
],
['sourceAddress', new Set(['address', 'varAddress'])],
['sourceMissing', new Set(['nonStringStringPart'])],
['sourceProperty', new Set(['notExistingProperty'])],
['sourceUnrecognized', new Set(['nestUnrecognized\0unrecognized'])],
])
);
});
Expand Down

0 comments on commit 53a7872

Please sign in to comment.