fix(core): Stringify all Luxon DateTimes in cleanupParameterData (#8959)

This commit is contained in:
Elias Meire 2024-03-25 09:44:10 +01:00 committed by GitHub
parent 0e4216d7af
commit 1fb0dd4f1c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 12 additions and 1 deletions

View file

@ -2112,7 +2112,7 @@ export function cleanupParameterData(inputData: NodeParameterValueType): void {
(Object.keys(inputData) as Key[]).forEach((key) => { (Object.keys(inputData) as Key[]).forEach((key) => {
const value = inputData[key]; const value = inputData[key];
if (typeof value === 'object') { if (typeof value === 'object') {
if (value instanceof DateTime) { if (DateTime.isDateTime(value)) {
// Is a special luxon date so convert to string // Is a special luxon date so convert to string
inputData[key] = value.toString(); inputData[key] = value.toString();
} else { } else {

View file

@ -30,6 +30,7 @@ import { tmpdir } from 'os';
import { join } from 'path'; import { join } from 'path';
import Container from 'typedi'; import Container from 'typedi';
import type { Agent } from 'https'; import type { Agent } from 'https';
import toPlainObject from 'lodash/toPlainObject';
const temporaryDir = mkdtempSync(join(tmpdir(), 'n8n')); const temporaryDir = mkdtempSync(join(tmpdir(), 'n8n'));
@ -425,6 +426,16 @@ describe('NodeExecuteFunctions', () => {
expect(typeof input.y).toBe('string'); expect(typeof input.y).toBe('string');
}); });
it('should stringify plain Luxon dates in-place', () => {
const input = {
x: 1,
y: toPlainObject(DateTime.now()),
};
expect(typeof input.y).toBe('object');
cleanupParameterData(input);
expect(typeof input.y).toBe('string');
});
it('should handle objects with nameless constructors', () => { it('should handle objects with nameless constructors', () => {
const input = { x: 1, y: { constructor: {} } as NodeParameterValue }; const input = { x: 1, y: { constructor: {} } as NodeParameterValue };
expect(typeof input.y).toBe('object'); expect(typeof input.y).toBe('object');