asl-validator
Version:
Amazon States Language validator
41 lines (40 loc) • 1.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.mustNotHaveDuplicateFieldNamesAfterEvaluation = void 0;
var jsonpath_plus_1 = require("jsonpath-plus");
var types_1 = require("../types");
// From the ASL spec:
// > A JSON object MUST NOT have duplicate field names after fields
// > ending with the characters ".$" are renamed to strip the ".$" suffix.
var mustNotHaveDuplicateFieldNamesAfterEvaluation = function (definition) {
// find each `Parameters` or `ResultSelector` field
// for each one, examine each node's children for field names
// that will be in conflict after evaluation.
var errorMessages = [];
var valuesToInspect = (0, jsonpath_plus_1.JSONPath)({
json: definition,
path: "$..[Parameters,ResultSelector]",
});
var inspectKeys = function (parent) {
var keys = {};
Object.keys(parent).forEach(function (key) {
var keyPostEval = key.endsWith(".$")
? key.substring(0, key.length - 2)
: key;
var current = keys[keyPostEval];
if (current) {
errorMessages.push({
"Error code": types_1.StateMachineErrorCode.DuplicateFieldName,
Message: "A duplicate field will exist after renaming to strip the \".$\" suffix from: ".concat(key, ".$"),
});
}
keys[keyPostEval] = current ? current + 1 : 1;
if (!!parent[key] && typeof parent[key] === "object") {
inspectKeys(parent[key]);
}
});
};
valuesToInspect.forEach(function (parent) { return inspectKeys(parent); });
return errorMessages;
};
exports.mustNotHaveDuplicateFieldNamesAfterEvaluation = mustNotHaveDuplicateFieldNamesAfterEvaluation;