n8n-nodes-base
Version:
Base nodes of n8n
47 lines • 2.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.addPostExecutionWarning = void 0;
exports.isObject = isObject;
exports.standardizeOutput = standardizeOutput;
function isObject(maybe) {
return (typeof maybe === 'object' && maybe !== null && !Array.isArray(maybe) && !(maybe instanceof Date));
}
function isTraversable(maybe) {
return isObject(maybe) && typeof maybe.toJSON !== 'function' && Object.keys(maybe).length > 0;
}
/**
* Stringify any non-standard JS objects (e.g. `Date`, `RegExp`) inside output items at any depth.
*/
function standardizeOutput(output) {
function standardizeOutputRecursive(obj, knownObjects = new WeakSet()) {
for (const [key, value] of Object.entries(obj)) {
if (!isTraversable(value))
continue;
if (typeof value === 'object' && value !== null) {
if (knownObjects.has(value)) {
// Found circular reference
continue;
}
knownObjects.add(value);
}
obj[key] =
value.constructor.name !== 'Object'
? JSON.stringify(value) // Date, RegExp, etc.
: standardizeOutputRecursive(value, knownObjects);
}
return obj;
}
standardizeOutputRecursive(output);
return output;
}
const addPostExecutionWarning = (context, returnData, inputItemsLength) => {
if (returnData.length !== inputItemsLength ||
returnData.some((item) => item.pairedItem === undefined)) {
context.addExecutionHints({
message: 'To make sure expressions after this node work, return the input items that produced each output item. <a target="_blank" href="https://docs.n8n.io/data/data-mapping/data-item-linking/item-linking-code-node/">More info</a>',
location: 'outputPane',
});
}
};
exports.addPostExecutionWarning = addPostExecutionWarning;
//# sourceMappingURL=utils.js.map