n8n/packages/nodes-base/nodes/TheHiveProject/helpers/utils.ts
2023-09-04 18:15:52 +03:00

101 lines
1.8 KiB
TypeScript

import type { IDataObject } from 'n8n-workflow';
import get from 'lodash/get';
import set from 'lodash/set';
export function splitAndTrim(str: string | string[]) {
if (typeof str === 'string') {
return str
.split(',')
.map((tag) => tag.trim())
.filter((tag) => tag);
}
return str;
}
export function fixFieldType(fields: IDataObject) {
const returnData: IDataObject = {};
for (const key of Object.keys(fields)) {
if (
[
'date',
'lastSyncDate',
'startDate',
'endDate',
'dueDate',
'includeInTimeline',
'sightedAt',
].includes(key)
) {
returnData[key] = Date.parse(fields[key] as string);
continue;
}
if (['tags', 'addTags', 'removeTags'].includes(key)) {
returnData[key] = splitAndTrim(fields[key] as string);
continue;
}
returnData[key] = fields[key];
}
return returnData;
}
export function prepareInputItem(item: IDataObject, schema: IDataObject[], i: number) {
const returnData: IDataObject = {};
for (const entry of schema) {
const id = entry.id as string;
const value = get(item, id);
if (value !== undefined) {
set(returnData, id, value);
} else {
if (entry.required) {
throw new Error(`Required field "${id}" is missing in item ${i}`);
}
}
}
return returnData;
}
export function constructFilter(entry: IDataObject) {
const { field, value } = entry;
let { operator } = entry;
if (operator === undefined) {
operator = '_eq';
}
if (operator === '_between') {
const { from, to } = entry;
return {
_between: {
_field: field,
_from: from,
_to: to,
},
};
}
if (operator === '_in') {
const { values } = entry;
return {
_in: {
_field: field,
_values: typeof values === 'string' ? splitAndTrim(values) : values,
},
};
}
return {
[operator as string]: {
_field: field,
_value: value,
},
};
}