UNPKG

asl-validator

Version:
41 lines (40 loc) 1.81 kB
"use strict"; 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;