Feature/paired item support (#3869)

* Add paired item helper and implement it in some nodes
This commit is contained in:
Omar Ajoue
2022-08-30 17:55:33 +02:00
committed by GitHub
parent 087d3f99f1
commit b2c674591c
150 changed files with 4027 additions and 1625 deletions

View File

@@ -693,7 +693,7 @@ export class Dropbox implements INodeType {
async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {
const items = this.getInputData();
const returnData: IDataObject[] = [];
const returnData: INodeExecutionData[] = [];
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
@@ -849,11 +849,11 @@ export class Dropbox implements INodeType {
filters.file_extensions = (filters.file_extensions as string).split(',');
}
Object.assign(body.options, filters);
Object.assign(body.options!, filters);
if (returnAll === false) {
const limit = this.getNodeParameter('limit', i) as number;
Object.assign(body.options, { max_results: limit });
Object.assign(body.options!, { max_results: limit });
}
endpoint = 'https://api.dropboxapi.com/2/files/search_v2';
@@ -932,20 +932,24 @@ export class Dropbox implements INodeType {
}
if (resource === 'file' && operation === 'upload') {
responseData = JSON.parse(responseData);
}
if (resource === 'file' && operation === 'download') {
const data = JSON.parse(responseData);
const executionData = this.helpers.constructExecutionMetaData(
this.helpers.returnJsonArray(data),
{ itemData: { item: i } },
);
returnData.push(...executionData);
} else if (resource === 'file' && operation === 'download') {
const newItem: INodeExecutionData = {
json: items[i].json,
binary: {},
pairedItem: {item: i},
};
if (items[i].binary !== undefined) {
// Create a shallow copy of the binary data so that the old
// data references which do not get changed still stay behind
// but the incoming data does not get changed.
Object.assign(newItem.binary, items[i].binary);
Object.assign(newItem.binary!, items[i].binary);
}
items[i] = newItem;
@@ -987,29 +991,39 @@ export class Dropbox implements INodeType {
}
}
returnData.push(newItem as IDataObject);
const executionData = this.helpers.constructExecutionMetaData(
this.helpers.returnJsonArray(newItem),
{ itemData: { item: i } },
);
returnData.push(...executionData);
}
} else if (resource === 'search' && operation === 'query') {
let data = responseData;
if (returnAll === true) {
returnData.push.apply(
returnData,
simple === true ? simplify(responseData) : responseData,
);
data = (simple === true) ? simplify(responseData) : responseData;
} else {
returnData.push.apply(
returnData,
simple === true ? simplify(responseData[property]) : responseData[property],
);
data = (simple === true) ? simplify(responseData[property]) : responseData[property];
}
const executionData = this.helpers.constructExecutionMetaData(
this.helpers.returnJsonArray(data),
{ itemData: { item: i } },
);
returnData.push(...executionData);
} else {
returnData.push(responseData);
const executionData = this.helpers.constructExecutionMetaData(
this.helpers.returnJsonArray(responseData),
{ itemData: { item: i } },
);
returnData.push(...executionData);
}
} catch (error) {
if (this.continueOnFail()) {
if (resource === 'file' && operation === 'download') {
items[i].json = { error: error.message };
} else {
returnData.push({ error: error.message });
returnData.push({json: { error: error.message }});
}
continue;
}
@@ -1022,7 +1036,7 @@ export class Dropbox implements INodeType {
return this.prepareOutputData(items);
} else {
// For all other ones does the output items get replaced
return [this.helpers.returnJsonArray(returnData)];
return this.prepareOutputData(returnData);
}
}
}