n8n-nodes-base 1.95.1 → 1.96.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/dist/credentials/PerplexityApi.credentials.js +1 -1
  2. package/dist/credentials/PerplexityApi.credentials.js.map +1 -1
  3. package/dist/nodes/Adalo/__schema__/v1.0.0/collection/getAll.json +21 -0
  4. package/dist/nodes/Airtable/test/v2/node/helpers.js +12 -2
  5. package/dist/nodes/Airtable/test/v2/node/helpers.js.map +1 -1
  6. package/dist/nodes/Airtop/__schema__/v1.0.0/extraction/query.json +7 -1
  7. package/dist/nodes/Airtop/__schema__/v1.0.0/session/create.json +9 -0
  8. package/dist/nodes/Airtop/__schema__/v1.0.0/window/create.json +40 -0
  9. package/dist/nodes/Airtop/test/node/helpers.js +12 -2
  10. package/dist/nodes/Airtop/test/node/helpers.js.map +1 -1
  11. package/dist/nodes/Asana/__schema__/v1.0.0/subtask/getAll.json +4 -1
  12. package/dist/nodes/Aws/S3/__schema__/v2.0.0/file/getAll.json +7 -1
  13. package/dist/nodes/Aws/S3/__schema__/v2.0.0/folder/getAll.json +7 -1
  14. package/dist/nodes/BambooHr/__schema__/v1.0.0/employee/getAll.json +1 -4
  15. package/dist/nodes/ClickUp/__schema__/v1.0.0/list/customFields.json +23 -1
  16. package/dist/nodes/Code/Pyodide.js +24 -0
  17. package/dist/nodes/Code/Pyodide.js.map +1 -1
  18. package/dist/nodes/CompareDatasets/GenericFunctions.js +5 -5
  19. package/dist/nodes/CompareDatasets/GenericFunctions.js.map +1 -1
  20. package/dist/nodes/Discord/__schema__/v2.0.0/message/sendAndWait.json +14 -0
  21. package/dist/nodes/Discord/v2/helpers/utils.js +2 -2
  22. package/dist/nodes/Discord/v2/helpers/utils.js.map +1 -1
  23. package/dist/nodes/Dropbox/__schema__/v1.0.0/file/download.json +31 -1
  24. package/dist/nodes/Dropcontact/__schema__/v1.0.0/contact/enrich.json +15 -1
  25. package/dist/nodes/Dropcontact/__schema__/v1.0.0/contact/fetchRequest.json +50 -0
  26. package/dist/nodes/EmailReadImap/v2/utils.js +16 -3
  27. package/dist/nodes/EmailReadImap/v2/utils.js.map +1 -1
  28. package/dist/nodes/EmailSend/__schema__/v2.1.0/email/send.json +1 -7
  29. package/dist/nodes/Evaluation/EvaluationTrigger/EvaluationTrigger.node.ee.js +1 -1
  30. package/dist/nodes/Evaluation/EvaluationTrigger/EvaluationTrigger.node.ee.js.map +1 -1
  31. package/dist/nodes/ExecuteWorkflow/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js +2 -2
  32. package/dist/nodes/ExecuteWorkflow/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js.map +1 -1
  33. package/dist/nodes/Form/Form.node.js +3 -3
  34. package/dist/nodes/Form/Form.node.js.map +1 -1
  35. package/dist/nodes/Form/utils/formCompletionUtils.js.map +1 -0
  36. package/dist/nodes/Form/utils/formNodeUtils.js.map +1 -0
  37. package/dist/nodes/Form/{utils.js → utils/utils.js} +21 -7
  38. package/dist/nodes/Form/utils/utils.js.map +1 -0
  39. package/dist/nodes/Form/v1/FormTriggerV1.node.js +1 -1
  40. package/dist/nodes/Form/v1/FormTriggerV1.node.js.map +1 -1
  41. package/dist/nodes/Form/v2/FormTriggerV2.node.js +1 -1
  42. package/dist/nodes/Form/v2/FormTriggerV2.node.js.map +1 -1
  43. package/dist/nodes/Freshservice/GenericFunctions.js +12 -2
  44. package/dist/nodes/Freshservice/GenericFunctions.js.map +1 -1
  45. package/dist/nodes/Google/Ads/__schema__/v1.0.0/campaign/getAll.json +13 -1
  46. package/dist/nodes/Google/Analytics/__schema__/v2.0.0/report/get.json +1 -4
  47. package/dist/nodes/Google/Calendar/__schema__/v1.3.0/event/getAll.json +1 -4
  48. package/dist/nodes/Google/Chat/__schema__/v1.0.0/message/create.json +30 -1
  49. package/dist/nodes/Google/Drive/__schema__/v3.0.0/file/upload.json +4 -1
  50. package/dist/nodes/Google/Drive/test/v2/node/helpers.js +12 -2
  51. package/dist/nodes/Google/Drive/test/v2/node/helpers.js.map +1 -1
  52. package/dist/nodes/Google/Firebase/CloudFirestore/__schema__/v1.1.0/document/query.json +1 -7
  53. package/dist/nodes/Google/Gmail/__schema__/v2.1.0/message/addLabels.json +13 -1
  54. package/dist/nodes/Google/Gmail/__schema__/v2.1.0/message/get.json +1 -7
  55. package/dist/nodes/Google/Gmail/__schema__/v2.1.0/message/markAsRead.json +13 -1
  56. package/dist/nodes/Google/Gmail/__schema__/v2.1.0/thread/addLabels.json +16 -1
  57. package/dist/nodes/Google/Sheet/v2/actions/sheet/update.operation.js +10 -4
  58. package/dist/nodes/Google/Sheet/v2/actions/sheet/update.operation.js.map +1 -1
  59. package/dist/nodes/HaloPSA/__schema__/v1.0.0/ticket/getAll.json +1 -268
  60. package/dist/nodes/HttpRequest/shared/optimizeResponse.js +5 -3
  61. package/dist/nodes/HttpRequest/shared/optimizeResponse.js.map +1 -1
  62. package/dist/nodes/Hubspot/__schema__/v2.1.0/company/getAll.json +1 -4
  63. package/dist/nodes/Hubspot/__schema__/v2.1.0/deal/getAll.json +64 -1
  64. package/dist/nodes/Hubspot/__schema__/v2.1.0/deal/search.json +1 -4
  65. package/dist/nodes/Hubspot/__schema__/v2.1.0/ticket/get.json +1 -61
  66. package/dist/nodes/JinaAI/__schema__/v1.0.0/reader/read.json +26 -0
  67. package/dist/nodes/Jira/__schema__/v1.0.0/issue/get.json +604 -7
  68. package/dist/nodes/Jira/__schema__/v1.0.0/issue/getAll.json +1 -110
  69. package/dist/nodes/Lemlist/__schema__/v2.0.0/lead/create.json +1 -4
  70. package/dist/nodes/Lemlist/__schema__/v2.0.0/lead/get.json +30 -0
  71. package/dist/nodes/Line/__schema__/v1.0.0/notification/send.json +4 -7
  72. package/dist/nodes/Linear/__schema__/v1.0.0/issue/getAll.json +12 -1
  73. package/dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js +23 -3
  74. package/dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js.map +1 -1
  75. package/dist/nodes/Microsoft/Entra/__schema__/v1.0.0/user/getAll.json +1 -7
  76. package/dist/nodes/Microsoft/Entra/descriptions/GroupDescription.js +12 -2
  77. package/dist/nodes/Microsoft/Entra/descriptions/GroupDescription.js.map +1 -1
  78. package/dist/nodes/Microsoft/Entra/descriptions/UserDescription.js +13 -3
  79. package/dist/nodes/Microsoft/Entra/descriptions/UserDescription.js.map +1 -1
  80. package/dist/nodes/Microsoft/OneDrive/__schema__/v1.0.0/file/download.json +23 -10
  81. package/dist/nodes/Microsoft/OneDrive/__schema__/v1.0.0/folder/create.json +1 -15
  82. package/dist/nodes/Microsoft/Outlook/__schema__/v2.0.0/event/getAll.json +1 -4
  83. package/dist/nodes/Microsoft/Outlook/__schema__/v2.0.0/folderMessage/getAll.json +124 -1
  84. package/dist/nodes/Microsoft/Outlook/__schema__/v2.0.0/message/getAll.json +1 -56
  85. package/dist/nodes/Microsoft/Sql/MicrosoftSql.node.js +12 -2
  86. package/dist/nodes/Microsoft/Sql/MicrosoftSql.node.js.map +1 -1
  87. package/dist/nodes/Microsoft/Storage/__schema__/v1.0.0/blob/create.json +39 -0
  88. package/dist/nodes/Microsoft/Storage/__schema__/v1.0.0/blob/get.json +44 -0
  89. package/dist/nodes/Microsoft/ToDo/__schema__/v1.0.0/task/getAll.json +5 -21
  90. package/dist/nodes/N8n/WorkflowDescription.js +40 -0
  91. package/dist/nodes/N8n/WorkflowDescription.js.map +1 -1
  92. package/dist/nodes/Nasa/__schema__/v1.0.0/donkiSolarFlare/get.json +1 -4
  93. package/dist/nodes/Notion/__schema__/v2.2.0/database/get.json +2 -149
  94. package/dist/nodes/Odoo/__schema__/v1.0.0/contact/get.json +1 -4
  95. package/dist/nodes/Odoo/__schema__/v1.0.0/contact/getAll.json +1 -10
  96. package/dist/nodes/Odoo/__schema__/v1.0.0/opportunity/getAll.json +1 -40
  97. package/dist/nodes/OpenAi/__schema__/v1.1.0/chat/complete.json +29 -1
  98. package/dist/nodes/Pipedrive/__schema__/v1.0.0/person/search.json +7 -1
  99. package/dist/nodes/QuickBase/__schema__/v1.0.0/record/getAll.json +9 -0
  100. package/dist/nodes/QuickBooks/__schema__/v1.0.0/transaction/getReport.json +4 -1
  101. package/dist/nodes/RssFeedRead/RssFeedRead.node.js +9 -3
  102. package/dist/nodes/RssFeedRead/RssFeedRead.node.js.map +1 -1
  103. package/dist/nodes/S3/__schema__/v1.0.0/file/download.json +21 -0
  104. package/dist/nodes/Salesforce/__schema__/v1.0.0/customObject/getAll.json +1 -4
  105. package/dist/nodes/Salesforce/__schema__/v1.0.0/lead/getAll.json +1 -4
  106. package/dist/nodes/Salesforce/__schema__/v1.0.0/opportunity/getAll.json +1 -4
  107. package/dist/nodes/Salesforce/__schema__/v1.0.0/search/query.json +1 -4
  108. package/dist/nodes/Shopify/__schema__/v1.0.0/order/getAll.json +250 -3
  109. package/dist/nodes/Slack/__schema__/v2.3.0/channel/history.json +1 -50
  110. package/dist/nodes/Slack/__schema__/v2.3.0/channel/member.json +168 -2
  111. package/dist/nodes/Slack/__schema__/v2.3.0/message/post.json +1 -4
  112. package/dist/nodes/Sms77/__schema__/v1.0.0/sms/send.json +1 -10
  113. package/dist/nodes/Strapi/__schema__/v1.0.0/entry/getAll.json +10 -1
  114. package/dist/nodes/Telegram/__schema__/v1.2.0/chat/member.json +1 -4
  115. package/dist/nodes/Telegram/__schema__/v1.2.0/message/editMessageText.json +4 -1
  116. package/dist/nodes/Telegram/__schema__/v1.2.0/message/sendAndWait.json +14 -0
  117. package/dist/nodes/Telegram/__schema__/v1.2.0/message/sendMessage.json +4 -21
  118. package/dist/nodes/Telegram/__schema__/v1.2.0/message/sendPhoto.json +1 -7
  119. package/dist/nodes/Telegram/tests/Helpers.js +12 -2
  120. package/dist/nodes/Telegram/tests/Helpers.js.map +1 -1
  121. package/dist/nodes/Transform/RemoveDuplicates/utils.js +8 -6
  122. package/dist/nodes/Transform/RemoveDuplicates/utils.js.map +1 -1
  123. package/dist/nodes/Trello/__schema__/v1.0.0/list/getAll.json +1 -4
  124. package/dist/nodes/Trello/__schema__/v1.0.0/list/getCards.json +1 -4
  125. package/dist/nodes/Twitter/__schema__/v2.0.0/tweet/search.json +7 -1
  126. package/dist/nodes/Wait/Wait.node.js +1 -1
  127. package/dist/nodes/Wait/Wait.node.js.map +1 -1
  128. package/dist/nodes/Wordpress/__schema__/v1.0.0/post/get.json +1 -7
  129. package/dist/nodes/Zoho/__schema__/v1.0.0/contact/getAll.json +1 -4
  130. package/dist/nodes/Zoho/__schema__/v1.0.0/lead/getAll.json +99 -1
  131. package/dist/test/nodes/Helpers.js +12 -2
  132. package/dist/test/nodes/Helpers.js.map +1 -1
  133. package/dist/types/credentials.json +1 -1
  134. package/dist/types/nodes.json +13 -13
  135. package/dist/utils/binary.js +12 -9
  136. package/dist/utils/binary.js.map +1 -1
  137. package/dist/utils/sendAndWait/utils.js +21 -6
  138. package/dist/utils/sendAndWait/utils.js.map +1 -1
  139. package/dist/utils/utilities.js +31 -16
  140. package/dist/utils/utilities.js.map +1 -1
  141. package/dist/utils/workflowInputsResourceMapping/GenericFunctions.js +2 -2
  142. package/dist/utils/workflowInputsResourceMapping/GenericFunctions.js.map +1 -1
  143. package/package.json +9 -9
  144. package/dist/nodes/Form/formCompletionUtils.js.map +0 -1
  145. package/dist/nodes/Form/formNodeUtils.js.map +0 -1
  146. package/dist/nodes/Form/utils.js.map +0 -1
  147. /package/dist/nodes/Form/{formCompletionUtils.js → utils/formCompletionUtils.js} +0 -0
  148. /package/dist/nodes/Form/{formNodeUtils.js → utils/formNodeUtils.js} +0 -0
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "type": "object",
3
3
  "properties": {
4
+ "historyId": {
5
+ "type": "string"
6
+ },
4
7
  "id": {
5
8
  "type": "string"
6
9
  },
@@ -9,15 +12,27 @@
9
12
  "items": {
10
13
  "type": "object",
11
14
  "properties": {
15
+ "historyId": {
16
+ "type": "string"
17
+ },
12
18
  "id": {
13
19
  "type": "string"
14
20
  },
21
+ "internalDate": {
22
+ "type": "string"
23
+ },
15
24
  "labelIds": {
16
25
  "type": "array",
17
26
  "items": {
18
27
  "type": "string"
19
28
  }
20
29
  },
30
+ "sizeEstimate": {
31
+ "type": "integer"
32
+ },
33
+ "snippet": {
34
+ "type": "string"
35
+ },
21
36
  "threadId": {
22
37
  "type": "string"
23
38
  }
@@ -25,5 +40,5 @@
25
40
  }
26
41
  }
27
42
  },
28
- "version": 1
43
+ "version": 2
29
44
  }
@@ -334,10 +334,16 @@ async function execute(sheet, sheetName) {
334
334
  );
335
335
  }
336
336
  Object.keys(mappingValues).forEach((key) => {
337
- if (key === "row_number" && (mappingValues[key] === null || mappingValues[key] === void 0)) {
338
- throw new import_n8n_workflow.UserError(
339
- "Column to match on (row_number) is not defined. Since the field is used to determine the row to update, it needs to have a value set."
340
- );
337
+ if (key === "row_number" && mappingValues[key] === void 0 && nodeVersion >= 4.6) {
338
+ throw new import_n8n_workflow.UserError("row_number is null or undefined", {
339
+ description: "Since it's being used to determine the row to update, it cannot be null or undefined"
340
+ });
341
+ }
342
+ if (mappingValues[key] === void 0) {
343
+ this.addExecutionHints({
344
+ message: "Warning: The value of column to match is null or undefined",
345
+ location: "outputPane"
346
+ });
341
347
  }
342
348
  if (mappingValues[key] === void 0 || mappingValues[key] === null) {
343
349
  mappingValues[key] = "";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../nodes/Google/Sheet/v2/actions/sheet/update.operation.ts"],"sourcesContent":["import type { IExecuteFunctions, IDataObject, INodeExecutionData } from 'n8n-workflow';\nimport { NodeOperationError, UserError } from 'n8n-workflow';\n\nimport { cellFormat, handlingExtraData, locationDefine } from './commonDescription';\nimport type { GoogleSheet } from '../../helpers/GoogleSheet';\nimport {\n\tROW_NUMBER,\n\ttype ISheetUpdateData,\n\ttype SheetProperties,\n\ttype ValueInputOption,\n\ttype ValueRenderOption,\n} from '../../helpers/GoogleSheets.types';\nimport { cellFormatDefault, untilSheetSelected } from '../../helpers/GoogleSheets.utils';\n\nexport const description: SheetProperties = [\n\t{\n\t\tdisplayName: 'Data Mode',\n\t\tname: 'dataMode',\n\t\ttype: 'options',\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: 'Auto-Map Input Data to Columns',\n\t\t\t\tvalue: 'autoMapInputData',\n\t\t\t\tdescription: 'Use when node input properties match destination column names',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Map Each Column Below',\n\t\t\t\tvalue: 'defineBelow',\n\t\t\t\tdescription: 'Set the value for each destination column',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Nothing',\n\t\t\t\tvalue: 'nothing',\n\t\t\t\tdescription: 'Do not send anything',\n\t\t\t},\n\t\t],\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['sheet'],\n\t\t\t\toperation: ['update'],\n\t\t\t\t'@version': [3],\n\t\t\t},\n\t\t\thide: {\n\t\t\t\t...untilSheetSelected,\n\t\t\t},\n\t\t},\n\t\tdefault: 'defineBelow',\n\t\tdescription: 'Whether to insert the input data this node receives in the new row',\n\t},\n\t{\n\t\t// eslint-disable-next-line n8n-nodes-base/node-param-display-name-miscased, n8n-nodes-base/node-param-display-name-wrong-for-dynamic-options\n\t\tdisplayName: 'Column to match on',\n\t\tname: 'columnToMatchOn',\n\t\ttype: 'options',\n\t\tdescription:\n\t\t\t'Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>',\n\t\ttypeOptions: {\n\t\t\tloadOptionsDependsOn: ['sheetName.value'],\n\t\t\tloadOptionsMethod: 'getSheetHeaderRowAndSkipEmpty',\n\t\t},\n\t\tdefault: '',\n\t\thint: \"Used to find the correct row to update. Doesn't get changed.\",\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['sheet'],\n\t\t\t\toperation: ['update'],\n\t\t\t\t'@version': [3],\n\t\t\t},\n\t\t\thide: {\n\t\t\t\t...untilSheetSelected,\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Value of Column to Match On',\n\t\tname: 'valueToMatchOn',\n\t\ttype: 'string',\n\t\tdefault: '',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['sheet'],\n\t\t\t\toperation: ['update'],\n\t\t\t\tdataMode: ['defineBelow'],\n\t\t\t\t'@version': [3],\n\t\t\t},\n\t\t\thide: {\n\t\t\t\t...untilSheetSelected,\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Values to Send',\n\t\tname: 'fieldsUi',\n\t\tplaceholder: 'Add Field',\n\t\ttype: 'fixedCollection',\n\t\ttypeOptions: {\n\t\t\tmultipleValues: true,\n\t\t},\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['sheet'],\n\t\t\t\toperation: ['update'],\n\t\t\t\tdataMode: ['defineBelow'],\n\t\t\t\t'@version': [3],\n\t\t\t},\n\t\t\thide: {\n\t\t\t\t...untilSheetSelected,\n\t\t\t},\n\t\t},\n\t\tdefault: {},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Field',\n\t\t\t\tname: 'values',\n\t\t\t\tvalues: [\n\t\t\t\t\t{\n\t\t\t\t\t\t// eslint-disable-next-line n8n-nodes-base/node-param-display-name-wrong-for-dynamic-options\n\t\t\t\t\t\tdisplayName: 'Column',\n\t\t\t\t\t\tname: 'column',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tloadOptionsDependsOn: ['sheetName.value', 'columnToMatchOn'],\n\t\t\t\t\t\t\tloadOptionsMethod: 'getSheetHeaderRowAndAddColumn',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Column Name',\n\t\t\t\t\t\tname: 'columnName',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdisplayOptions: {\n\t\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t\tcolumn: ['newColumn'],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Value',\n\t\t\t\t\t\tname: 'fieldValue',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tdisplayName: 'Columns',\n\t\tname: 'columns',\n\t\ttype: 'resourceMapper',\n\t\tnoDataExpression: true,\n\t\tdefault: {\n\t\t\tmappingMode: 'defineBelow',\n\t\t\tvalue: null,\n\t\t},\n\t\trequired: true,\n\t\ttypeOptions: {\n\t\t\tloadOptionsDependsOn: ['sheetName.value'],\n\t\t\tresourceMapper: {\n\t\t\t\tresourceMapperMethod: 'getMappingColumns',\n\t\t\t\tmode: 'update',\n\t\t\t\tfieldWords: {\n\t\t\t\t\tsingular: 'column',\n\t\t\t\t\tplural: 'columns',\n\t\t\t\t},\n\t\t\t\taddAllFields: true,\n\t\t\t\tmultiKeyMatch: false,\n\t\t\t},\n\t\t},\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['sheet'],\n\t\t\t\toperation: ['update'],\n\t\t\t\t'@version': [{ _cnd: { gte: 4 } }],\n\t\t\t},\n\t\t\thide: {\n\t\t\t\t...untilSheetSelected,\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Options',\n\t\tname: 'options',\n\t\ttype: 'collection',\n\t\tplaceholder: 'Add option',\n\t\tdefault: {},\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['sheet'],\n\t\t\t\toperation: ['update'],\n\t\t\t},\n\t\t\thide: {\n\t\t\t\t...untilSheetSelected,\n\t\t\t},\n\t\t},\n\t\toptions: [\n\t\t\tcellFormat,\n\t\t\tlocationDefine,\n\t\t\thandlingExtraData,\n\t\t\t{\n\t\t\t\t...handlingExtraData,\n\t\t\t\tdisplayOptions: { show: { '/columns.mappingMode': ['autoMapInputData'] } },\n\t\t\t},\n\t\t],\n\t},\n];\n\nexport async function execute(\n\tthis: IExecuteFunctions,\n\tsheet: GoogleSheet,\n\tsheetName: string,\n): Promise<INodeExecutionData[]> {\n\tconst items = this.getInputData();\n\tconst nodeVersion = this.getNode().typeVersion;\n\n\tconst range = `${sheetName}!A:Z`;\n\n\tconst valueInputMode = this.getNodeParameter(\n\t\t'options.cellFormat',\n\t\t0,\n\t\tcellFormatDefault(nodeVersion),\n\t) as ValueInputOption;\n\n\tconst options = this.getNodeParameter('options', 0, {});\n\n\tconst valueRenderMode = (options.valueRenderMode || 'UNFORMATTED_VALUE') as ValueRenderOption;\n\n\tconst locationDefineOptions = (options.locationDefine as IDataObject)?.values as IDataObject;\n\n\tlet keyRowIndex = 0;\n\tlet dataStartRowIndex = 1;\n\n\tif (locationDefineOptions) {\n\t\tif (locationDefineOptions.headerRow) {\n\t\t\tkeyRowIndex = parseInt(locationDefineOptions.headerRow as string, 10) - 1;\n\t\t}\n\t\tif (locationDefineOptions.firstDataRow) {\n\t\t\tdataStartRowIndex = parseInt(locationDefineOptions.firstDataRow as string, 10) - 1;\n\t\t}\n\t}\n\n\tlet columnNames: string[] = [];\n\n\tconst sheetData = await sheet.getData(sheetName, 'FORMATTED_VALUE');\n\n\tif (sheetData?.[keyRowIndex] === undefined) {\n\t\tthrow new NodeOperationError(\n\t\t\tthis.getNode(),\n\t\t\t`Could not retrieve the column names from row ${keyRowIndex + 1}`,\n\t\t);\n\t}\n\n\tcolumnNames = sheetData[keyRowIndex];\n\n\tconst newColumns = new Set<string>();\n\n\tconst columnsToMatchOn: string[] =\n\t\tnodeVersion < 4\n\t\t\t? [this.getNodeParameter('columnToMatchOn', 0) as string]\n\t\t\t: (this.getNodeParameter('columns.matchingColumns', 0) as string[]);\n\n\tconst dataMode =\n\t\tnodeVersion < 4\n\t\t\t? (this.getNodeParameter('dataMode', 0) as string)\n\t\t\t: (this.getNodeParameter('columns.mappingMode', 0) as string);\n\n\t// TODO: Add support for multiple columns to match on in the next overhaul\n\tconst keyIndex = columnNames.indexOf(columnsToMatchOn[0]);\n\n\t//not used when updating row\n\tconst columnValuesList = await sheet.getColumnValues({\n\t\trange,\n\t\tkeyIndex,\n\t\tdataStartRowIndex,\n\t\tvalueRenderMode,\n\t\tsheetData,\n\t});\n\n\tconst updateData: ISheetUpdateData[] = [];\n\n\tconst mappedValues: IDataObject[] = [];\n\n\tconst errorOnUnexpectedColumn = (key: string, i: number) => {\n\t\tif (!columnNames.includes(key)) {\n\t\t\tthrow new NodeOperationError(this.getNode(), 'Unexpected fields in node input', {\n\t\t\t\titemIndex: i,\n\t\t\t\tdescription: `The input field '${key}' doesn't match any column in the Sheet. You can ignore this by changing the 'Handling extra data' field, which you can find under 'Options'.`,\n\t\t\t});\n\t\t}\n\t};\n\n\tconst addNewColumn = (key: string) => {\n\t\tif (!columnNames.includes(key) && key !== ROW_NUMBER) {\n\t\t\tnewColumns.add(key);\n\t\t}\n\t};\n\n\tfor (let i = 0; i < items.length; i++) {\n\t\tif (dataMode === 'nothing') continue;\n\n\t\tconst inputData: IDataObject[] = [];\n\n\t\tif (dataMode === 'autoMapInputData') {\n\t\t\tconst handlingExtraDataOption = (options.handlingExtraData as string) || 'insertInNewColumn';\n\t\t\tif (handlingExtraDataOption === 'ignoreIt') {\n\t\t\t\tinputData.push(items[i].json);\n\t\t\t}\n\t\t\tif (handlingExtraDataOption === 'error') {\n\t\t\t\tObject.keys(items[i].json).forEach((key) => errorOnUnexpectedColumn(key, i));\n\t\t\t\tinputData.push(items[i].json);\n\t\t\t}\n\t\t\tif (handlingExtraDataOption === 'insertInNewColumn') {\n\t\t\t\tObject.keys(items[i].json).forEach(addNewColumn);\n\t\t\t\tinputData.push(items[i].json);\n\t\t\t}\n\t\t} else {\n\t\t\tconst valueToMatchOn =\n\t\t\t\tnodeVersion < 4\n\t\t\t\t\t? (this.getNodeParameter('valueToMatchOn', i, '') as string)\n\t\t\t\t\t: (this.getNodeParameter(`columns.value[\"${columnsToMatchOn[0]}\"]`, i, '') as string);\n\n\t\t\tif (valueToMatchOn === '') {\n\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\tthis.getNode(),\n\t\t\t\t\t\"The 'Column to Match On' parameter is required\",\n\t\t\t\t\t{\n\t\t\t\t\t\titemIndex: i,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (nodeVersion < 4) {\n\t\t\t\tconst valuesToSend = this.getNodeParameter('fieldsUi.values', i, []) as IDataObject[];\n\t\t\t\tif (!valuesToSend?.length) {\n\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\tthis.getNode(),\n\t\t\t\t\t\t\"At least one value has to be added under 'Values to Send'\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-loop-func\n\t\t\t\tconst fields = valuesToSend.reduce((acc, entry) => {\n\t\t\t\t\tif (entry.column === 'newColumn') {\n\t\t\t\t\t\tconst columnName = entry.columnName as string;\n\n\t\t\t\t\t\tif (!columnNames.includes(columnName)) {\n\t\t\t\t\t\t\tnewColumns.add(columnName);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tacc[columnName] = entry.fieldValue as string;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tacc[entry.column as string] = entry.fieldValue as string;\n\t\t\t\t\t}\n\t\t\t\t\treturn acc;\n\t\t\t\t}, {} as IDataObject);\n\n\t\t\t\tfields[columnsToMatchOn[0]] = valueToMatchOn;\n\n\t\t\t\tinputData.push(fields);\n\t\t\t} else {\n\t\t\t\tconst mappingValues = this.getNodeParameter('columns.value', i) as IDataObject;\n\t\t\t\tif (Object.keys(mappingValues).length === 0) {\n\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\tthis.getNode(),\n\t\t\t\t\t\t\"At least one value has to be added under 'Values to Send'\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// Setting empty values to empty string so that they are not ignored by the API\n\t\t\t\tObject.keys(mappingValues).forEach((key) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tkey === 'row_number' &&\n\t\t\t\t\t\t(mappingValues[key] === null || mappingValues[key] === undefined)\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new UserError(\n\t\t\t\t\t\t\t'Column to match on (row_number) is not defined. Since the field is used to determine the row to update, it needs to have a value set.',\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (mappingValues[key] === undefined || mappingValues[key] === null) {\n\t\t\t\t\t\tmappingValues[key] = '';\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tinputData.push(mappingValues);\n\t\t\t\tmappedValues.push(mappingValues);\n\t\t\t}\n\t\t}\n\n\t\tif (newColumns.size) {\n\t\t\tconst newColumnNames = columnNames.concat([...newColumns]);\n\t\t\tawait sheet.updateRows(\n\t\t\t\tsheetName,\n\t\t\t\t[newColumnNames],\n\t\t\t\t(options.cellFormat as ValueInputOption) || cellFormatDefault(nodeVersion),\n\t\t\t\tkeyRowIndex + 1,\n\t\t\t);\n\t\t\tcolumnNames = newColumnNames;\n\t\t\tnewColumns.clear();\n\t\t}\n\n\t\tlet preparedData;\n\t\tconst columnNamesList = [columnNames.concat([...newColumns])];\n\n\t\tif (columnsToMatchOn[0] === 'row_number') {\n\t\t\tpreparedData = sheet.prepareDataForUpdatingByRowNumber(inputData, range, columnNamesList);\n\t\t} else {\n\t\t\tconst indexKey = columnsToMatchOn[0];\n\n\t\t\tpreparedData = await sheet.prepareDataForUpdateOrUpsert({\n\t\t\t\tinputData,\n\t\t\t\tindexKey,\n\t\t\t\trange,\n\t\t\t\tkeyRowIndex,\n\t\t\t\tdataStartRowIndex,\n\t\t\t\tvalueRenderMode,\n\t\t\t\tcolumnNamesList,\n\t\t\t\tcolumnValuesList,\n\t\t\t});\n\t\t}\n\n\t\tupdateData.push(...preparedData.updateData);\n\t}\n\n\tif (updateData.length) {\n\t\tawait sheet.batchUpdate(updateData, valueInputMode);\n\t}\n\n\tif (nodeVersion < 4 || dataMode === 'autoMapInputData') {\n\t\treturn items.map((item, index) => {\n\t\t\titem.pairedItem = { item: index };\n\t\t\treturn item;\n\t\t});\n\t} else {\n\t\tif (!updateData.length) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst returnData: INodeExecutionData[] = [];\n\t\tfor (const [index, entry] of mappedValues.entries()) {\n\t\t\treturnData.push({\n\t\t\t\tjson: entry,\n\t\t\t\tpairedItem: { item: index },\n\t\t\t});\n\t\t}\n\t\treturn returnData;\n\t}\n}\n"],"mappings":"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","names":["import_GoogleSheets"]}
1
+ {"version":3,"sources":["../../../../../../../nodes/Google/Sheet/v2/actions/sheet/update.operation.ts"],"sourcesContent":["import type { IExecuteFunctions, IDataObject, INodeExecutionData } from 'n8n-workflow';\nimport { NodeOperationError, UserError } from 'n8n-workflow';\n\nimport { cellFormat, handlingExtraData, locationDefine } from './commonDescription';\nimport type { GoogleSheet } from '../../helpers/GoogleSheet';\nimport {\n\tROW_NUMBER,\n\ttype ISheetUpdateData,\n\ttype SheetProperties,\n\ttype ValueInputOption,\n\ttype ValueRenderOption,\n} from '../../helpers/GoogleSheets.types';\nimport { cellFormatDefault, untilSheetSelected } from '../../helpers/GoogleSheets.utils';\n\nexport const description: SheetProperties = [\n\t{\n\t\tdisplayName: 'Data Mode',\n\t\tname: 'dataMode',\n\t\ttype: 'options',\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: 'Auto-Map Input Data to Columns',\n\t\t\t\tvalue: 'autoMapInputData',\n\t\t\t\tdescription: 'Use when node input properties match destination column names',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Map Each Column Below',\n\t\t\t\tvalue: 'defineBelow',\n\t\t\t\tdescription: 'Set the value for each destination column',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Nothing',\n\t\t\t\tvalue: 'nothing',\n\t\t\t\tdescription: 'Do not send anything',\n\t\t\t},\n\t\t],\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['sheet'],\n\t\t\t\toperation: ['update'],\n\t\t\t\t'@version': [3],\n\t\t\t},\n\t\t\thide: {\n\t\t\t\t...untilSheetSelected,\n\t\t\t},\n\t\t},\n\t\tdefault: 'defineBelow',\n\t\tdescription: 'Whether to insert the input data this node receives in the new row',\n\t},\n\t{\n\t\t// eslint-disable-next-line n8n-nodes-base/node-param-display-name-miscased, n8n-nodes-base/node-param-display-name-wrong-for-dynamic-options\n\t\tdisplayName: 'Column to match on',\n\t\tname: 'columnToMatchOn',\n\t\ttype: 'options',\n\t\tdescription:\n\t\t\t'Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>',\n\t\ttypeOptions: {\n\t\t\tloadOptionsDependsOn: ['sheetName.value'],\n\t\t\tloadOptionsMethod: 'getSheetHeaderRowAndSkipEmpty',\n\t\t},\n\t\tdefault: '',\n\t\thint: \"Used to find the correct row to update. Doesn't get changed.\",\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['sheet'],\n\t\t\t\toperation: ['update'],\n\t\t\t\t'@version': [3],\n\t\t\t},\n\t\t\thide: {\n\t\t\t\t...untilSheetSelected,\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Value of Column to Match On',\n\t\tname: 'valueToMatchOn',\n\t\ttype: 'string',\n\t\tdefault: '',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['sheet'],\n\t\t\t\toperation: ['update'],\n\t\t\t\tdataMode: ['defineBelow'],\n\t\t\t\t'@version': [3],\n\t\t\t},\n\t\t\thide: {\n\t\t\t\t...untilSheetSelected,\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Values to Send',\n\t\tname: 'fieldsUi',\n\t\tplaceholder: 'Add Field',\n\t\ttype: 'fixedCollection',\n\t\ttypeOptions: {\n\t\t\tmultipleValues: true,\n\t\t},\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['sheet'],\n\t\t\t\toperation: ['update'],\n\t\t\t\tdataMode: ['defineBelow'],\n\t\t\t\t'@version': [3],\n\t\t\t},\n\t\t\thide: {\n\t\t\t\t...untilSheetSelected,\n\t\t\t},\n\t\t},\n\t\tdefault: {},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Field',\n\t\t\t\tname: 'values',\n\t\t\t\tvalues: [\n\t\t\t\t\t{\n\t\t\t\t\t\t// eslint-disable-next-line n8n-nodes-base/node-param-display-name-wrong-for-dynamic-options\n\t\t\t\t\t\tdisplayName: 'Column',\n\t\t\t\t\t\tname: 'column',\n\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t'Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tloadOptionsDependsOn: ['sheetName.value', 'columnToMatchOn'],\n\t\t\t\t\t\t\tloadOptionsMethod: 'getSheetHeaderRowAndAddColumn',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Column Name',\n\t\t\t\t\t\tname: 'columnName',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\tdisplayOptions: {\n\t\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t\tcolumn: ['newColumn'],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'Value',\n\t\t\t\t\t\tname: 'fieldValue',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tdisplayName: 'Columns',\n\t\tname: 'columns',\n\t\ttype: 'resourceMapper',\n\t\tnoDataExpression: true,\n\t\tdefault: {\n\t\t\tmappingMode: 'defineBelow',\n\t\t\tvalue: null,\n\t\t},\n\t\trequired: true,\n\t\ttypeOptions: {\n\t\t\tloadOptionsDependsOn: ['sheetName.value'],\n\t\t\tresourceMapper: {\n\t\t\t\tresourceMapperMethod: 'getMappingColumns',\n\t\t\t\tmode: 'update',\n\t\t\t\tfieldWords: {\n\t\t\t\t\tsingular: 'column',\n\t\t\t\t\tplural: 'columns',\n\t\t\t\t},\n\t\t\t\taddAllFields: true,\n\t\t\t\tmultiKeyMatch: false,\n\t\t\t},\n\t\t},\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['sheet'],\n\t\t\t\toperation: ['update'],\n\t\t\t\t'@version': [{ _cnd: { gte: 4 } }],\n\t\t\t},\n\t\t\thide: {\n\t\t\t\t...untilSheetSelected,\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Options',\n\t\tname: 'options',\n\t\ttype: 'collection',\n\t\tplaceholder: 'Add option',\n\t\tdefault: {},\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresource: ['sheet'],\n\t\t\t\toperation: ['update'],\n\t\t\t},\n\t\t\thide: {\n\t\t\t\t...untilSheetSelected,\n\t\t\t},\n\t\t},\n\t\toptions: [\n\t\t\tcellFormat,\n\t\t\tlocationDefine,\n\t\t\thandlingExtraData,\n\t\t\t{\n\t\t\t\t...handlingExtraData,\n\t\t\t\tdisplayOptions: { show: { '/columns.mappingMode': ['autoMapInputData'] } },\n\t\t\t},\n\t\t],\n\t},\n];\n\nexport async function execute(\n\tthis: IExecuteFunctions,\n\tsheet: GoogleSheet,\n\tsheetName: string,\n): Promise<INodeExecutionData[]> {\n\tconst items = this.getInputData();\n\tconst nodeVersion = this.getNode().typeVersion;\n\n\tconst range = `${sheetName}!A:Z`;\n\n\tconst valueInputMode = this.getNodeParameter(\n\t\t'options.cellFormat',\n\t\t0,\n\t\tcellFormatDefault(nodeVersion),\n\t) as ValueInputOption;\n\n\tconst options = this.getNodeParameter('options', 0, {});\n\n\tconst valueRenderMode = (options.valueRenderMode || 'UNFORMATTED_VALUE') as ValueRenderOption;\n\n\tconst locationDefineOptions = (options.locationDefine as IDataObject)?.values as IDataObject;\n\n\tlet keyRowIndex = 0;\n\tlet dataStartRowIndex = 1;\n\n\tif (locationDefineOptions) {\n\t\tif (locationDefineOptions.headerRow) {\n\t\t\tkeyRowIndex = parseInt(locationDefineOptions.headerRow as string, 10) - 1;\n\t\t}\n\t\tif (locationDefineOptions.firstDataRow) {\n\t\t\tdataStartRowIndex = parseInt(locationDefineOptions.firstDataRow as string, 10) - 1;\n\t\t}\n\t}\n\n\tlet columnNames: string[] = [];\n\n\tconst sheetData = await sheet.getData(sheetName, 'FORMATTED_VALUE');\n\n\tif (sheetData?.[keyRowIndex] === undefined) {\n\t\tthrow new NodeOperationError(\n\t\t\tthis.getNode(),\n\t\t\t`Could not retrieve the column names from row ${keyRowIndex + 1}`,\n\t\t);\n\t}\n\n\tcolumnNames = sheetData[keyRowIndex];\n\n\tconst newColumns = new Set<string>();\n\n\tconst columnsToMatchOn: string[] =\n\t\tnodeVersion < 4\n\t\t\t? [this.getNodeParameter('columnToMatchOn', 0) as string]\n\t\t\t: (this.getNodeParameter('columns.matchingColumns', 0) as string[]);\n\n\tconst dataMode =\n\t\tnodeVersion < 4\n\t\t\t? (this.getNodeParameter('dataMode', 0) as string)\n\t\t\t: (this.getNodeParameter('columns.mappingMode', 0) as string);\n\n\t// TODO: Add support for multiple columns to match on in the next overhaul\n\tconst keyIndex = columnNames.indexOf(columnsToMatchOn[0]);\n\n\t//not used when updating row\n\tconst columnValuesList = await sheet.getColumnValues({\n\t\trange,\n\t\tkeyIndex,\n\t\tdataStartRowIndex,\n\t\tvalueRenderMode,\n\t\tsheetData,\n\t});\n\n\tconst updateData: ISheetUpdateData[] = [];\n\n\tconst mappedValues: IDataObject[] = [];\n\n\tconst errorOnUnexpectedColumn = (key: string, i: number) => {\n\t\tif (!columnNames.includes(key)) {\n\t\t\tthrow new NodeOperationError(this.getNode(), 'Unexpected fields in node input', {\n\t\t\t\titemIndex: i,\n\t\t\t\tdescription: `The input field '${key}' doesn't match any column in the Sheet. You can ignore this by changing the 'Handling extra data' field, which you can find under 'Options'.`,\n\t\t\t});\n\t\t}\n\t};\n\n\tconst addNewColumn = (key: string) => {\n\t\tif (!columnNames.includes(key) && key !== ROW_NUMBER) {\n\t\t\tnewColumns.add(key);\n\t\t}\n\t};\n\n\tfor (let i = 0; i < items.length; i++) {\n\t\tif (dataMode === 'nothing') continue;\n\n\t\tconst inputData: IDataObject[] = [];\n\n\t\tif (dataMode === 'autoMapInputData') {\n\t\t\tconst handlingExtraDataOption = (options.handlingExtraData as string) || 'insertInNewColumn';\n\t\t\tif (handlingExtraDataOption === 'ignoreIt') {\n\t\t\t\tinputData.push(items[i].json);\n\t\t\t}\n\t\t\tif (handlingExtraDataOption === 'error') {\n\t\t\t\tObject.keys(items[i].json).forEach((key) => errorOnUnexpectedColumn(key, i));\n\t\t\t\tinputData.push(items[i].json);\n\t\t\t}\n\t\t\tif (handlingExtraDataOption === 'insertInNewColumn') {\n\t\t\t\tObject.keys(items[i].json).forEach(addNewColumn);\n\t\t\t\tinputData.push(items[i].json);\n\t\t\t}\n\t\t} else {\n\t\t\tconst valueToMatchOn =\n\t\t\t\tnodeVersion < 4\n\t\t\t\t\t? (this.getNodeParameter('valueToMatchOn', i, '') as string)\n\t\t\t\t\t: (this.getNodeParameter(`columns.value[\"${columnsToMatchOn[0]}\"]`, i, '') as string);\n\n\t\t\tif (valueToMatchOn === '') {\n\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\tthis.getNode(),\n\t\t\t\t\t\"The 'Column to Match On' parameter is required\",\n\t\t\t\t\t{\n\t\t\t\t\t\titemIndex: i,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (nodeVersion < 4) {\n\t\t\t\tconst valuesToSend = this.getNodeParameter('fieldsUi.values', i, []) as IDataObject[];\n\t\t\t\tif (!valuesToSend?.length) {\n\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\tthis.getNode(),\n\t\t\t\t\t\t\"At least one value has to be added under 'Values to Send'\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-loop-func\n\t\t\t\tconst fields = valuesToSend.reduce((acc, entry) => {\n\t\t\t\t\tif (entry.column === 'newColumn') {\n\t\t\t\t\t\tconst columnName = entry.columnName as string;\n\n\t\t\t\t\t\tif (!columnNames.includes(columnName)) {\n\t\t\t\t\t\t\tnewColumns.add(columnName);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tacc[columnName] = entry.fieldValue as string;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tacc[entry.column as string] = entry.fieldValue as string;\n\t\t\t\t\t}\n\t\t\t\t\treturn acc;\n\t\t\t\t}, {} as IDataObject);\n\n\t\t\t\tfields[columnsToMatchOn[0]] = valueToMatchOn;\n\n\t\t\t\tinputData.push(fields);\n\t\t\t} else {\n\t\t\t\tconst mappingValues = this.getNodeParameter('columns.value', i) as IDataObject;\n\t\t\t\tif (Object.keys(mappingValues).length === 0) {\n\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\tthis.getNode(),\n\t\t\t\t\t\t\"At least one value has to be added under 'Values to Send'\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// Setting empty values to empty string so that they are not ignored by the API\n\t\t\t\tObject.keys(mappingValues).forEach((key) => {\n\t\t\t\t\t// null and undefined values are mapped to undefined\n\t\t\t\t\tif (key === 'row_number' && mappingValues[key] === undefined && nodeVersion >= 4.6) {\n\t\t\t\t\t\tthrow new UserError('row_number is null or undefined', {\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\"Since it's being used to determine the row to update, it cannot be null or undefined\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// null and undefined values are mapped to undefined\n\t\t\t\t\tif (mappingValues[key] === undefined) {\n\t\t\t\t\t\tthis.addExecutionHints({\n\t\t\t\t\t\t\tmessage: 'Warning: The value of column to match is null or undefined',\n\t\t\t\t\t\t\tlocation: 'outputPane',\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (mappingValues[key] === undefined || mappingValues[key] === null) {\n\t\t\t\t\t\tmappingValues[key] = '';\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tinputData.push(mappingValues);\n\t\t\t\tmappedValues.push(mappingValues);\n\t\t\t}\n\t\t}\n\n\t\tif (newColumns.size) {\n\t\t\tconst newColumnNames = columnNames.concat([...newColumns]);\n\t\t\tawait sheet.updateRows(\n\t\t\t\tsheetName,\n\t\t\t\t[newColumnNames],\n\t\t\t\t(options.cellFormat as ValueInputOption) || cellFormatDefault(nodeVersion),\n\t\t\t\tkeyRowIndex + 1,\n\t\t\t);\n\t\t\tcolumnNames = newColumnNames;\n\t\t\tnewColumns.clear();\n\t\t}\n\n\t\tlet preparedData;\n\t\tconst columnNamesList = [columnNames.concat([...newColumns])];\n\n\t\tif (columnsToMatchOn[0] === 'row_number') {\n\t\t\tpreparedData = sheet.prepareDataForUpdatingByRowNumber(inputData, range, columnNamesList);\n\t\t} else {\n\t\t\tconst indexKey = columnsToMatchOn[0];\n\n\t\t\tpreparedData = await sheet.prepareDataForUpdateOrUpsert({\n\t\t\t\tinputData,\n\t\t\t\tindexKey,\n\t\t\t\trange,\n\t\t\t\tkeyRowIndex,\n\t\t\t\tdataStartRowIndex,\n\t\t\t\tvalueRenderMode,\n\t\t\t\tcolumnNamesList,\n\t\t\t\tcolumnValuesList,\n\t\t\t});\n\t\t}\n\n\t\tupdateData.push(...preparedData.updateData);\n\t}\n\n\tif (updateData.length) {\n\t\tawait sheet.batchUpdate(updateData, valueInputMode);\n\t}\n\n\tif (nodeVersion < 4 || dataMode === 'autoMapInputData') {\n\t\treturn items.map((item, index) => {\n\t\t\titem.pairedItem = { item: index };\n\t\t\treturn item;\n\t\t});\n\t} else {\n\t\tif (!updateData.length) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst returnData: INodeExecutionData[] = [];\n\t\tfor (const [index, entry] of mappedValues.entries()) {\n\t\t\treturnData.push({\n\t\t\t\tjson: entry,\n\t\t\t\tpairedItem: { item: index },\n\t\t\t});\n\t\t}\n\t\treturn returnData;\n\t}\n}\n"],"mappings":"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","names":["import_GoogleSheets"]}
@@ -4,285 +4,18 @@
4
4
  "agent_id": {
5
5
  "type": "integer"
6
6
  },
7
- "appointment_type": {
8
- "type": "integer"
9
- },
10
- "attachment_count": {
11
- "type": "integer"
12
- },
13
- "category_1": {
14
- "type": "string"
15
- },
16
- "category_2": {
17
- "type": "string"
18
- },
19
- "category_3": {
20
- "type": "string"
21
- },
22
- "category_4": {
23
- "type": "string"
24
- },
25
- "child_count": {
26
- "type": "integer"
27
- },
28
- "client_id": {
29
- "type": "integer"
30
- },
31
- "client_name": {
32
- "type": "string"
33
- },
34
- "cost": {
35
- "type": "integer"
36
- },
37
- "dateoccurred": {
38
- "type": "string"
39
- },
40
- "deadlinedate": {
41
- "type": "string"
42
- },
43
- "department_id": {
44
- "type": "integer"
45
- },
46
7
  "details": {
47
8
  "type": "string"
48
9
  },
49
- "emailcclist": {
50
- "type": "string"
51
- },
52
- "emailtolist": {
53
- "type": "string"
54
- },
55
- "enduserstatus": {
56
- "type": "integer"
57
- },
58
- "estimatedays": {
59
- "type": "integer"
60
- },
61
- "excludefromsla": {
62
- "type": "boolean"
63
- },
64
- "fixbydate": {
65
- "type": "string"
66
- },
67
- "flagged": {
68
- "type": "boolean"
69
- },
70
- "guid": {
71
- "type": "string"
72
- },
73
10
  "id": {
74
11
  "type": "integer"
75
12
  },
76
- "idsummary": {
77
- "type": "string"
78
- },
79
- "impact": {
80
- "type": "integer"
81
- },
82
- "impactlevel": {
83
- "type": "integer"
84
- },
85
- "inactive": {
86
- "type": "boolean"
87
- },
88
- "invoiceseperatelyoverride": {
89
- "type": "boolean"
90
- },
91
- "is_vip": {
92
- "type": "boolean"
93
- },
94
- "isimportantcontact": {
95
- "type": "boolean"
96
- },
97
- "itil_requesttype_id": {
98
- "type": "integer"
99
- },
100
- "last_update": {
101
- "type": "string"
102
- },
103
- "lastactiondate": {
104
- "type": "string"
105
- },
106
- "lastincomingemail": {
107
- "type": "string"
108
- },
109
- "matched_kb_id": {
110
- "type": "integer"
111
- },
112
- "maximumRestrictedPriority": {
113
- "type": "integer"
114
- },
115
- "merged_into_id": {
116
- "type": "integer"
117
- },
118
- "notuseful_count": {
119
- "type": "integer"
120
- },
121
- "onhold": {
122
- "type": "boolean"
123
- },
124
- "oppcompanyname": {
125
- "type": "string"
126
- },
127
- "oppvalueadjusted": {
128
- "type": "integer"
129
- },
130
- "organisation_id": {
131
- "type": "integer"
132
- },
133
- "pipeline_stage_id": {
134
- "type": "integer"
135
- },
136
- "priority_id": {
137
- "type": "integer"
138
- },
139
- "product_id": {
140
- "type": "integer"
141
- },
142
- "projectinternaltask": {
143
- "type": "boolean"
144
- },
145
- "purchaseordernumber": {
146
- "type": "string"
147
- },
148
- "quantity": {
149
- "type": "integer"
150
- },
151
- "read": {
152
- "type": "boolean"
153
- },
154
- "release_id": {
155
- "type": "integer"
156
- },
157
- "release_important": {
158
- "type": "boolean"
159
- },
160
- "release2_id": {
161
- "type": "integer"
162
- },
163
- "release3_id": {
164
- "type": "integer"
165
- },
166
- "releasenotegroup_id": {
167
- "type": "integer"
168
- },
169
- "reportedby": {
170
- "type": "string"
171
- },
172
- "respondbydate": {
173
- "type": "string"
174
- },
175
- "responsedate": {
176
- "type": "string"
177
- },
178
- "reviewed": {
179
- "type": "boolean"
180
- },
181
- "section_timezone": {
182
- "type": "string"
183
- },
184
- "servicestatusnote": {
185
- "type": "string"
186
- },
187
- "site_id": {
188
- "type": "integer"
189
- },
190
- "site_name": {
191
- "type": "string"
192
- },
193
- "site_timezone": {
194
- "type": "string"
195
- },
196
- "sla_id": {
197
- "type": "integer"
198
- },
199
- "slaresponsestate": {
200
- "type": "string"
201
- },
202
- "source": {
203
- "type": "integer"
204
- },
205
- "starttime": {
206
- "type": "string"
207
- },
208
- "starttimeslot": {
209
- "type": "integer"
210
- },
211
- "status_id": {
212
- "type": "integer"
213
- },
214
13
  "summary": {
215
14
  "type": "string"
216
15
  },
217
- "supplier_status": {
218
- "type": "integer"
219
- },
220
- "table": {
221
- "type": "integer"
222
- },
223
16
  "targetdate": {
224
17
  "type": "string"
225
- },
226
- "targettime": {
227
- "type": "string"
228
- },
229
- "targettimeslot": {
230
- "type": "integer"
231
- },
232
- "team": {
233
- "type": "string"
234
- },
235
- "ticket_tags": {
236
- "type": "string"
237
- },
238
- "ticketage": {
239
- "type": "number"
240
- },
241
- "tickettype_id": {
242
- "type": "integer"
243
- },
244
- "updateservicestatus": {
245
- "type": "boolean"
246
- },
247
- "urgency": {
248
- "type": "integer"
249
- },
250
- "use": {
251
- "type": "string"
252
- },
253
- "useful_count": {
254
- "type": "integer"
255
- },
256
- "user_email": {
257
- "type": "string"
258
- },
259
- "user_id": {
260
- "type": "integer"
261
- },
262
- "user_name": {
263
- "type": "string"
264
- },
265
- "userdef1": {
266
- "type": "string"
267
- },
268
- "userdef2": {
269
- "type": "string"
270
- },
271
- "userdef3": {
272
- "type": "string"
273
- },
274
- "userdef4": {
275
- "type": "string"
276
- },
277
- "userdef5": {
278
- "type": "string"
279
- },
280
- "workflow_id": {
281
- "type": "integer"
282
- },
283
- "workflow_step": {
284
- "type": "integer"
285
18
  }
286
19
  },
287
- "version": 1
20
+ "version": 2
288
21
  }
@@ -36,7 +36,9 @@ var import_readability = require("@mozilla/readability");
36
36
  var cheerio = __toESM(require("cheerio"));
37
37
  var import_html_to_text = require("html-to-text");
38
38
  var import_jsdom = require("jsdom");
39
- var import_lodash = require("lodash");
39
+ var import_get = __toESM(require("lodash/get"));
40
+ var import_set = __toESM(require("lodash/set"));
41
+ var import_unset = __toESM(require("lodash/unset"));
40
42
  var import_n8n_workflow = require("n8n-workflow");
41
43
  function htmlOptimizer(ctx, itemIndex, maxLength) {
42
44
  const cssSelector = ctx.getNodeParameter("cssSelector", itemIndex, "");
@@ -172,7 +174,7 @@ const jsonOptimizer = (ctx, itemIndex) => {
172
174
  for (const item of responseData) {
173
175
  const newItem = {};
174
176
  for (const field of fields) {
175
- (0, import_lodash.set)(newItem, field, (0, import_lodash.get)(item, field));
177
+ (0, import_set.default)(newItem, field, (0, import_get.default)(item, field));
176
178
  }
177
179
  returnData.push(newItem);
178
180
  }
@@ -180,7 +182,7 @@ const jsonOptimizer = (ctx, itemIndex) => {
180
182
  if (fieldsToInclude === "except") {
181
183
  for (const item of responseData) {
182
184
  for (const field of fields) {
183
- (0, import_lodash.unset)(item, field);
185
+ (0, import_unset.default)(item, field);
184
186
  }
185
187
  returnData.push(item);
186
188
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../nodes/HttpRequest/shared/optimizeResponse.ts"],"sourcesContent":["import { Readability } from '@mozilla/readability';\nimport * as cheerio from 'cheerio';\nimport { convert } from 'html-to-text';\nimport { JSDOM } from 'jsdom';\nimport { get, set, unset } from 'lodash';\nimport {\n\ttype INodeProperties,\n\tjsonParse,\n\tNodeOperationError,\n\ttype IDataObject,\n\ttype IExecuteFunctions,\n} from 'n8n-workflow';\n\ntype ResponseOptimizerFn = (\n\tx: IDataObject | IDataObject[] | string,\n) => IDataObject | IDataObject[] | string;\n\nfunction htmlOptimizer(\n\tctx: IExecuteFunctions,\n\titemIndex: number,\n\tmaxLength: number,\n): ResponseOptimizerFn {\n\tconst cssSelector = ctx.getNodeParameter('cssSelector', itemIndex, '') as string;\n\tconst onlyContent = ctx.getNodeParameter('onlyContent', itemIndex, false) as boolean;\n\tlet elementsToOmit: string[] = [];\n\n\tif (onlyContent) {\n\t\tconst elementsToOmitUi = ctx.getNodeParameter('elementsToOmit', itemIndex, '') as\n\t\t\t| string\n\t\t\t| string[];\n\n\t\tif (typeof elementsToOmitUi === 'string') {\n\t\t\telementsToOmit = elementsToOmitUi\n\t\t\t\t.split(',')\n\t\t\t\t.filter((s) => s)\n\t\t\t\t.map((s) => s.trim());\n\t\t}\n\t}\n\n\treturn (response) => {\n\t\tif (typeof response !== 'string') {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tctx.getNode(),\n\t\t\t\t`The response type must be a string. Received: ${typeof response}`,\n\t\t\t\t{ itemIndex },\n\t\t\t);\n\t\t}\n\t\tconst returnData: string[] = [];\n\n\t\tconst html = cheerio.load(response);\n\t\tconst htmlElements = html(cssSelector);\n\n\t\thtmlElements.each((_, el) => {\n\t\t\tlet value = html(el).html() || '';\n\n\t\t\tif (onlyContent) {\n\t\t\t\tlet htmlToTextOptions;\n\n\t\t\t\tif (elementsToOmit?.length) {\n\t\t\t\t\thtmlToTextOptions = {\n\t\t\t\t\t\tselectors: elementsToOmit.map((selector) => ({\n\t\t\t\t\t\t\tselector,\n\t\t\t\t\t\t\tformat: 'skip',\n\t\t\t\t\t\t})),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tvalue = convert(value, htmlToTextOptions);\n\t\t\t}\n\n\t\t\tvalue = value\n\t\t\t\t.trim()\n\t\t\t\t.replace(/^\\s+|\\s+$/g, '')\n\t\t\t\t.replace(/(\\r\\n|\\n|\\r)/gm, '')\n\t\t\t\t.replace(/\\s+/g, ' ');\n\n\t\t\treturnData.push(value);\n\t\t});\n\n\t\tconst text = JSON.stringify(returnData, null, 2);\n\n\t\tif (maxLength > 0 && text.length > maxLength) {\n\t\t\treturn text.substring(0, maxLength);\n\t\t}\n\n\t\treturn text;\n\t};\n}\n\nconst textOptimizer = (\n\tctx: IExecuteFunctions,\n\titemIndex: number,\n\tmaxLength: number,\n): ResponseOptimizerFn => {\n\treturn (response) => {\n\t\tif (typeof response === 'object') {\n\t\t\ttry {\n\t\t\t\tresponse = JSON.stringify(response, null, 2);\n\t\t\t} catch (error) {}\n\t\t}\n\n\t\tif (typeof response !== 'string') {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tctx.getNode(),\n\t\t\t\t`The response type must be a string. Received: ${typeof response}`,\n\t\t\t\t{ itemIndex },\n\t\t\t);\n\t\t}\n\n\t\tconst dom = new JSDOM(response);\n\t\tconst article = new Readability(dom.window.document, {\n\t\t\tkeepClasses: true,\n\t\t}).parse();\n\n\t\tconst text = article?.textContent || '';\n\n\t\tif (maxLength > 0 && text.length > maxLength) {\n\t\t\treturn text.substring(0, maxLength);\n\t\t}\n\n\t\treturn text;\n\t};\n};\n\nconst jsonOptimizer = (ctx: IExecuteFunctions, itemIndex: number): ResponseOptimizerFn => {\n\treturn (response) => {\n\t\tlet responseData: IDataObject | IDataObject[] | string | null = response;\n\n\t\tif (typeof response === 'string') {\n\t\t\ttry {\n\t\t\t\tresponseData = jsonParse(response, { errorMessage: 'Invalid JSON response' });\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\tctx.getNode(),\n\t\t\t\t\t`Received invalid JSON from response '${response}'`,\n\t\t\t\t\t{ itemIndex },\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof responseData !== 'object' || !responseData) {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tctx.getNode(),\n\t\t\t\t'The response type must be an object or an array of objects',\n\t\t\t\t{ itemIndex },\n\t\t\t);\n\t\t}\n\n\t\tconst dataField = ctx.getNodeParameter('dataField', itemIndex, '') as string;\n\t\tlet returnData: IDataObject[] = [];\n\n\t\tif (!Array.isArray(responseData)) {\n\t\t\tif (dataField) {\n\t\t\t\tif (!Object.prototype.hasOwnProperty.call(responseData, dataField)) {\n\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\tctx.getNode(),\n\t\t\t\t\t\t`Target field \"${dataField}\" not found in response.`,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\titemIndex,\n\t\t\t\t\t\t\tdescription: `The response contained these fields: [${Object.keys(responseData).join(', ')}]`,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst data = responseData[dataField] as IDataObject | IDataObject[];\n\n\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\tresponseData = data;\n\t\t\t\t} else {\n\t\t\t\t\tresponseData = [data];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresponseData = [responseData];\n\t\t\t}\n\t\t} else {\n\t\t\tif (dataField) {\n\t\t\t\tresponseData = responseData.map((data) => data[dataField]) as IDataObject[];\n\t\t\t}\n\t\t}\n\n\t\tconst fieldsToInclude = ctx.getNodeParameter('fieldsToInclude', itemIndex, 'all') as\n\t\t\t| 'all'\n\t\t\t| 'selected'\n\t\t\t| 'except';\n\n\t\tlet fields: string | string[] = [];\n\n\t\tif (fieldsToInclude !== 'all') {\n\t\t\tfields = ctx.getNodeParameter('fields', itemIndex, []) as string[] | string;\n\n\t\t\tif (typeof fields === 'string') {\n\t\t\t\tfields = fields.split(',').map((field) => field.trim());\n\t\t\t}\n\t\t} else {\n\t\t\treturnData = responseData;\n\t\t}\n\n\t\tif (fieldsToInclude === 'selected') {\n\t\t\tfor (const item of responseData) {\n\t\t\t\tconst newItem: IDataObject = {};\n\n\t\t\t\tfor (const field of fields) {\n\t\t\t\t\tset(newItem, field, get(item, field));\n\t\t\t\t}\n\n\t\t\t\treturnData.push(newItem);\n\t\t\t}\n\t\t}\n\n\t\tif (fieldsToInclude === 'except') {\n\t\t\tfor (const item of responseData) {\n\t\t\t\tfor (const field of fields) {\n\t\t\t\t\tunset(item, field);\n\t\t\t\t}\n\n\t\t\t\treturnData.push(item);\n\t\t\t}\n\t\t}\n\n\t\treturn returnData;\n\t};\n};\n\nexport const configureResponseOptimizer = (\n\tctx: IExecuteFunctions,\n\titemIndex: number,\n): ResponseOptimizerFn => {\n\tconst optimizeResponse = ctx.getNodeParameter('optimizeResponse', itemIndex, false) as boolean;\n\n\tif (optimizeResponse) {\n\t\tconst responseType = ctx.getNodeParameter('responseType', itemIndex) as\n\t\t\t| 'json'\n\t\t\t| 'text'\n\t\t\t| 'html';\n\n\t\tlet maxLength = 0;\n\t\tconst truncateResponse = ctx.getNodeParameter('truncateResponse', itemIndex, false) as boolean;\n\n\t\tif (truncateResponse) {\n\t\t\tmaxLength = ctx.getNodeParameter('maxLength', itemIndex, 0) as number;\n\t\t}\n\n\t\tswitch (responseType) {\n\t\t\tcase 'html':\n\t\t\t\treturn htmlOptimizer(ctx, itemIndex, maxLength);\n\t\t\tcase 'text':\n\t\t\t\treturn textOptimizer(ctx, itemIndex, maxLength);\n\t\t\tcase 'json':\n\t\t\t\treturn jsonOptimizer(ctx, itemIndex);\n\t\t}\n\t}\n\n\treturn (x) => x;\n};\n\nexport const optimizeResponseProperties: INodeProperties[] = [\n\t{\n\t\tdisplayName: 'Optimize Response',\n\t\tname: 'optimizeResponse',\n\t\ttype: 'boolean',\n\t\tdefault: false,\n\t\tnoDataExpression: true,\n\t\tdescription:\n\t\t\t'Whether the optimize the tool response to reduce amount of data passed to the LLM that could lead to better result and reduce cost',\n\t},\n\t{\n\t\tdisplayName: 'Expected Response Type',\n\t\tname: 'responseType',\n\t\ttype: 'options',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toptimizeResponse: [true],\n\t\t\t},\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: 'JSON',\n\t\t\t\tvalue: 'json',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'HTML',\n\t\t\t\tvalue: 'html',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Text',\n\t\t\t\tvalue: 'text',\n\t\t\t},\n\t\t],\n\t\tdefault: 'json',\n\t},\n\t{\n\t\tdisplayName: 'Field Containing Data',\n\t\tname: 'dataField',\n\t\ttype: 'string',\n\t\tdefault: '',\n\t\tplaceholder: 'e.g. records',\n\t\tdescription: 'Specify the name of the field in the response containing the data',\n\t\thint: 'leave blank to use whole response',\n\t\trequiresDataPath: 'single',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toptimizeResponse: [true],\n\t\t\t\tresponseType: ['json'],\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Include Fields',\n\t\tname: 'fieldsToInclude',\n\t\ttype: 'options',\n\t\tdescription: 'What fields response object should include',\n\t\tdefault: 'all',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toptimizeResponse: [true],\n\t\t\t\tresponseType: ['json'],\n\t\t\t},\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: 'All',\n\t\t\t\tvalue: 'all',\n\t\t\t\tdescription: 'Include all fields',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Selected',\n\t\t\t\tvalue: 'selected',\n\t\t\t\tdescription: 'Include only fields specified below',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Except',\n\t\t\t\tvalue: 'except',\n\t\t\t\tdescription: 'Exclude fields specified below',\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tdisplayName: 'Fields',\n\t\tname: 'fields',\n\t\ttype: 'string',\n\t\tdefault: '',\n\t\tplaceholder: 'e.g. field1,field2',\n\t\tdescription:\n\t\t\t'Comma-separated list of the field names. Supports dot notation. You can drag the selected fields from the input panel.',\n\t\trequiresDataPath: 'multiple',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toptimizeResponse: [true],\n\t\t\t\tresponseType: ['json'],\n\t\t\t},\n\t\t\thide: {\n\t\t\t\tfieldsToInclude: ['all'],\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Selector (CSS)',\n\t\tname: 'cssSelector',\n\t\ttype: 'string',\n\t\tdescription:\n\t\t\t'Select specific element(e.g. body) or multiple elements(e.g. div) of chosen type in the response HTML.',\n\t\tplaceholder: 'e.g. body',\n\t\tdefault: 'body',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toptimizeResponse: [true],\n\t\t\t\tresponseType: ['html'],\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Return Only Content',\n\t\tname: 'onlyContent',\n\t\ttype: 'boolean',\n\t\tdefault: false,\n\t\tdescription:\n\t\t\t'Whether to return only content of html elements, stripping html tags and attributes',\n\t\thint: 'Uses less tokens and may be easier for model to understand',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toptimizeResponse: [true],\n\t\t\t\tresponseType: ['html'],\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Elements To Omit',\n\t\tname: 'elementsToOmit',\n\t\ttype: 'string',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toptimizeResponse: [true],\n\t\t\t\tresponseType: ['html'],\n\t\t\t\tonlyContent: [true],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tplaceholder: 'e.g. img, .className, #ItemId',\n\t\tdescription: 'Comma-separated list of selectors that would be excluded when extracting content',\n\t},\n\t{\n\t\tdisplayName: 'Truncate Response',\n\t\tname: 'truncateResponse',\n\t\ttype: 'boolean',\n\t\tdefault: false,\n\t\thint: 'Helps save tokens',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toptimizeResponse: [true],\n\t\t\t\tresponseType: ['text', 'html'],\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Max Response Characters',\n\t\tname: 'maxLength',\n\t\ttype: 'number',\n\t\tdefault: 1000,\n\t\ttypeOptions: {\n\t\t\tminValue: 1,\n\t\t},\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toptimizeResponse: [true],\n\t\t\t\tresponseType: ['text', 'html'],\n\t\t\t\ttruncateResponse: [true],\n\t\t\t},\n\t\t},\n\t},\n];\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../nodes/HttpRequest/shared/optimizeResponse.ts"],"sourcesContent":["import { Readability } from '@mozilla/readability';\nimport * as cheerio from 'cheerio';\nimport { convert } from 'html-to-text';\nimport { JSDOM } from 'jsdom';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\nimport unset from 'lodash/unset';\nimport {\n\ttype INodeProperties,\n\tjsonParse,\n\tNodeOperationError,\n\ttype IDataObject,\n\ttype IExecuteFunctions,\n} from 'n8n-workflow';\n\ntype ResponseOptimizerFn = (\n\tx: IDataObject | IDataObject[] | string,\n) => IDataObject | IDataObject[] | string;\n\nfunction htmlOptimizer(\n\tctx: IExecuteFunctions,\n\titemIndex: number,\n\tmaxLength: number,\n): ResponseOptimizerFn {\n\tconst cssSelector = ctx.getNodeParameter('cssSelector', itemIndex, '') as string;\n\tconst onlyContent = ctx.getNodeParameter('onlyContent', itemIndex, false) as boolean;\n\tlet elementsToOmit: string[] = [];\n\n\tif (onlyContent) {\n\t\tconst elementsToOmitUi = ctx.getNodeParameter('elementsToOmit', itemIndex, '') as\n\t\t\t| string\n\t\t\t| string[];\n\n\t\tif (typeof elementsToOmitUi === 'string') {\n\t\t\telementsToOmit = elementsToOmitUi\n\t\t\t\t.split(',')\n\t\t\t\t.filter((s) => s)\n\t\t\t\t.map((s) => s.trim());\n\t\t}\n\t}\n\n\treturn (response) => {\n\t\tif (typeof response !== 'string') {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tctx.getNode(),\n\t\t\t\t`The response type must be a string. Received: ${typeof response}`,\n\t\t\t\t{ itemIndex },\n\t\t\t);\n\t\t}\n\t\tconst returnData: string[] = [];\n\n\t\tconst html = cheerio.load(response);\n\t\tconst htmlElements = html(cssSelector);\n\n\t\thtmlElements.each((_, el) => {\n\t\t\tlet value = html(el).html() || '';\n\n\t\t\tif (onlyContent) {\n\t\t\t\tlet htmlToTextOptions;\n\n\t\t\t\tif (elementsToOmit?.length) {\n\t\t\t\t\thtmlToTextOptions = {\n\t\t\t\t\t\tselectors: elementsToOmit.map((selector) => ({\n\t\t\t\t\t\t\tselector,\n\t\t\t\t\t\t\tformat: 'skip',\n\t\t\t\t\t\t})),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tvalue = convert(value, htmlToTextOptions);\n\t\t\t}\n\n\t\t\tvalue = value\n\t\t\t\t.trim()\n\t\t\t\t.replace(/^\\s+|\\s+$/g, '')\n\t\t\t\t.replace(/(\\r\\n|\\n|\\r)/gm, '')\n\t\t\t\t.replace(/\\s+/g, ' ');\n\n\t\t\treturnData.push(value);\n\t\t});\n\n\t\tconst text = JSON.stringify(returnData, null, 2);\n\n\t\tif (maxLength > 0 && text.length > maxLength) {\n\t\t\treturn text.substring(0, maxLength);\n\t\t}\n\n\t\treturn text;\n\t};\n}\n\nconst textOptimizer = (\n\tctx: IExecuteFunctions,\n\titemIndex: number,\n\tmaxLength: number,\n): ResponseOptimizerFn => {\n\treturn (response) => {\n\t\tif (typeof response === 'object') {\n\t\t\ttry {\n\t\t\t\tresponse = JSON.stringify(response, null, 2);\n\t\t\t} catch (error) {}\n\t\t}\n\n\t\tif (typeof response !== 'string') {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tctx.getNode(),\n\t\t\t\t`The response type must be a string. Received: ${typeof response}`,\n\t\t\t\t{ itemIndex },\n\t\t\t);\n\t\t}\n\n\t\tconst dom = new JSDOM(response);\n\t\tconst article = new Readability(dom.window.document, {\n\t\t\tkeepClasses: true,\n\t\t}).parse();\n\n\t\tconst text = article?.textContent || '';\n\n\t\tif (maxLength > 0 && text.length > maxLength) {\n\t\t\treturn text.substring(0, maxLength);\n\t\t}\n\n\t\treturn text;\n\t};\n};\n\nconst jsonOptimizer = (ctx: IExecuteFunctions, itemIndex: number): ResponseOptimizerFn => {\n\treturn (response) => {\n\t\tlet responseData: IDataObject | IDataObject[] | string | null = response;\n\n\t\tif (typeof response === 'string') {\n\t\t\ttry {\n\t\t\t\tresponseData = jsonParse(response, { errorMessage: 'Invalid JSON response' });\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\tctx.getNode(),\n\t\t\t\t\t`Received invalid JSON from response '${response}'`,\n\t\t\t\t\t{ itemIndex },\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof responseData !== 'object' || !responseData) {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tctx.getNode(),\n\t\t\t\t'The response type must be an object or an array of objects',\n\t\t\t\t{ itemIndex },\n\t\t\t);\n\t\t}\n\n\t\tconst dataField = ctx.getNodeParameter('dataField', itemIndex, '') as string;\n\t\tlet returnData: IDataObject[] = [];\n\n\t\tif (!Array.isArray(responseData)) {\n\t\t\tif (dataField) {\n\t\t\t\tif (!Object.prototype.hasOwnProperty.call(responseData, dataField)) {\n\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\tctx.getNode(),\n\t\t\t\t\t\t`Target field \"${dataField}\" not found in response.`,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\titemIndex,\n\t\t\t\t\t\t\tdescription: `The response contained these fields: [${Object.keys(responseData).join(', ')}]`,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst data = responseData[dataField] as IDataObject | IDataObject[];\n\n\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\tresponseData = data;\n\t\t\t\t} else {\n\t\t\t\t\tresponseData = [data];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresponseData = [responseData];\n\t\t\t}\n\t\t} else {\n\t\t\tif (dataField) {\n\t\t\t\tresponseData = responseData.map((data) => data[dataField]) as IDataObject[];\n\t\t\t}\n\t\t}\n\n\t\tconst fieldsToInclude = ctx.getNodeParameter('fieldsToInclude', itemIndex, 'all') as\n\t\t\t| 'all'\n\t\t\t| 'selected'\n\t\t\t| 'except';\n\n\t\tlet fields: string | string[] = [];\n\n\t\tif (fieldsToInclude !== 'all') {\n\t\t\tfields = ctx.getNodeParameter('fields', itemIndex, []) as string[] | string;\n\n\t\t\tif (typeof fields === 'string') {\n\t\t\t\tfields = fields.split(',').map((field) => field.trim());\n\t\t\t}\n\t\t} else {\n\t\t\treturnData = responseData;\n\t\t}\n\n\t\tif (fieldsToInclude === 'selected') {\n\t\t\tfor (const item of responseData) {\n\t\t\t\tconst newItem: IDataObject = {};\n\n\t\t\t\tfor (const field of fields) {\n\t\t\t\t\tset(newItem, field, get(item, field));\n\t\t\t\t}\n\n\t\t\t\treturnData.push(newItem);\n\t\t\t}\n\t\t}\n\n\t\tif (fieldsToInclude === 'except') {\n\t\t\tfor (const item of responseData) {\n\t\t\t\tfor (const field of fields) {\n\t\t\t\t\tunset(item, field);\n\t\t\t\t}\n\n\t\t\t\treturnData.push(item);\n\t\t\t}\n\t\t}\n\n\t\treturn returnData;\n\t};\n};\n\nexport const configureResponseOptimizer = (\n\tctx: IExecuteFunctions,\n\titemIndex: number,\n): ResponseOptimizerFn => {\n\tconst optimizeResponse = ctx.getNodeParameter('optimizeResponse', itemIndex, false) as boolean;\n\n\tif (optimizeResponse) {\n\t\tconst responseType = ctx.getNodeParameter('responseType', itemIndex) as\n\t\t\t| 'json'\n\t\t\t| 'text'\n\t\t\t| 'html';\n\n\t\tlet maxLength = 0;\n\t\tconst truncateResponse = ctx.getNodeParameter('truncateResponse', itemIndex, false) as boolean;\n\n\t\tif (truncateResponse) {\n\t\t\tmaxLength = ctx.getNodeParameter('maxLength', itemIndex, 0) as number;\n\t\t}\n\n\t\tswitch (responseType) {\n\t\t\tcase 'html':\n\t\t\t\treturn htmlOptimizer(ctx, itemIndex, maxLength);\n\t\t\tcase 'text':\n\t\t\t\treturn textOptimizer(ctx, itemIndex, maxLength);\n\t\t\tcase 'json':\n\t\t\t\treturn jsonOptimizer(ctx, itemIndex);\n\t\t}\n\t}\n\n\treturn (x) => x;\n};\n\nexport const optimizeResponseProperties: INodeProperties[] = [\n\t{\n\t\tdisplayName: 'Optimize Response',\n\t\tname: 'optimizeResponse',\n\t\ttype: 'boolean',\n\t\tdefault: false,\n\t\tnoDataExpression: true,\n\t\tdescription:\n\t\t\t'Whether the optimize the tool response to reduce amount of data passed to the LLM that could lead to better result and reduce cost',\n\t},\n\t{\n\t\tdisplayName: 'Expected Response Type',\n\t\tname: 'responseType',\n\t\ttype: 'options',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toptimizeResponse: [true],\n\t\t\t},\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: 'JSON',\n\t\t\t\tvalue: 'json',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'HTML',\n\t\t\t\tvalue: 'html',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Text',\n\t\t\t\tvalue: 'text',\n\t\t\t},\n\t\t],\n\t\tdefault: 'json',\n\t},\n\t{\n\t\tdisplayName: 'Field Containing Data',\n\t\tname: 'dataField',\n\t\ttype: 'string',\n\t\tdefault: '',\n\t\tplaceholder: 'e.g. records',\n\t\tdescription: 'Specify the name of the field in the response containing the data',\n\t\thint: 'leave blank to use whole response',\n\t\trequiresDataPath: 'single',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toptimizeResponse: [true],\n\t\t\t\tresponseType: ['json'],\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Include Fields',\n\t\tname: 'fieldsToInclude',\n\t\ttype: 'options',\n\t\tdescription: 'What fields response object should include',\n\t\tdefault: 'all',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toptimizeResponse: [true],\n\t\t\t\tresponseType: ['json'],\n\t\t\t},\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: 'All',\n\t\t\t\tvalue: 'all',\n\t\t\t\tdescription: 'Include all fields',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Selected',\n\t\t\t\tvalue: 'selected',\n\t\t\t\tdescription: 'Include only fields specified below',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Except',\n\t\t\t\tvalue: 'except',\n\t\t\t\tdescription: 'Exclude fields specified below',\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tdisplayName: 'Fields',\n\t\tname: 'fields',\n\t\ttype: 'string',\n\t\tdefault: '',\n\t\tplaceholder: 'e.g. field1,field2',\n\t\tdescription:\n\t\t\t'Comma-separated list of the field names. Supports dot notation. You can drag the selected fields from the input panel.',\n\t\trequiresDataPath: 'multiple',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toptimizeResponse: [true],\n\t\t\t\tresponseType: ['json'],\n\t\t\t},\n\t\t\thide: {\n\t\t\t\tfieldsToInclude: ['all'],\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Selector (CSS)',\n\t\tname: 'cssSelector',\n\t\ttype: 'string',\n\t\tdescription:\n\t\t\t'Select specific element(e.g. body) or multiple elements(e.g. div) of chosen type in the response HTML.',\n\t\tplaceholder: 'e.g. body',\n\t\tdefault: 'body',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toptimizeResponse: [true],\n\t\t\t\tresponseType: ['html'],\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Return Only Content',\n\t\tname: 'onlyContent',\n\t\ttype: 'boolean',\n\t\tdefault: false,\n\t\tdescription:\n\t\t\t'Whether to return only content of html elements, stripping html tags and attributes',\n\t\thint: 'Uses less tokens and may be easier for model to understand',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toptimizeResponse: [true],\n\t\t\t\tresponseType: ['html'],\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Elements To Omit',\n\t\tname: 'elementsToOmit',\n\t\ttype: 'string',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toptimizeResponse: [true],\n\t\t\t\tresponseType: ['html'],\n\t\t\t\tonlyContent: [true],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tplaceholder: 'e.g. img, .className, #ItemId',\n\t\tdescription: 'Comma-separated list of selectors that would be excluded when extracting content',\n\t},\n\t{\n\t\tdisplayName: 'Truncate Response',\n\t\tname: 'truncateResponse',\n\t\ttype: 'boolean',\n\t\tdefault: false,\n\t\thint: 'Helps save tokens',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toptimizeResponse: [true],\n\t\t\t\tresponseType: ['text', 'html'],\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Max Response Characters',\n\t\tname: 'maxLength',\n\t\ttype: 'number',\n\t\tdefault: 1000,\n\t\ttypeOptions: {\n\t\t\tminValue: 1,\n\t\t},\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\toptimizeResponse: [true],\n\t\t\t\tresponseType: ['text', 'html'],\n\t\t\t\ttruncateResponse: [true],\n\t\t\t},\n\t\t},\n\t},\n];\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAA4B;AAC5B,cAAyB;AACzB,0BAAwB;AACxB,mBAAsB;AACtB,iBAAgB;AAChB,iBAAgB;AAChB,mBAAkB;AAClB,0BAMO;AAMP,SAAS,cACR,KACA,WACA,WACsB;AACtB,QAAM,cAAc,IAAI,iBAAiB,eAAe,WAAW,EAAE;AACrE,QAAM,cAAc,IAAI,iBAAiB,eAAe,WAAW,KAAK;AACxE,MAAI,iBAA2B,CAAC;AAEhC,MAAI,aAAa;AAChB,UAAM,mBAAmB,IAAI,iBAAiB,kBAAkB,WAAW,EAAE;AAI7E,QAAI,OAAO,qBAAqB,UAAU;AACzC,uBAAiB,iBACf,MAAM,GAAG,EACT,OAAO,CAAC,MAAM,CAAC,EACf,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AAAA,IACtB;AAAA,EACD;AAEA,SAAO,CAAC,aAAa;AACpB,QAAI,OAAO,aAAa,UAAU;AACjC,YAAM,IAAI;AAAA,QACT,IAAI,QAAQ;AAAA,QACZ,iDAAiD,OAAO,QAAQ;AAAA,QAChE,EAAE,UAAU;AAAA,MACb;AAAA,IACD;AACA,UAAM,aAAuB,CAAC;AAE9B,UAAM,OAAO,QAAQ,KAAK,QAAQ;AAClC,UAAM,eAAe,KAAK,WAAW;AAErC,iBAAa,KAAK,CAAC,GAAG,OAAO;AAC5B,UAAI,QAAQ,KAAK,EAAE,EAAE,KAAK,KAAK;AAE/B,UAAI,aAAa;AAChB,YAAI;AAEJ,YAAI,gBAAgB,QAAQ;AAC3B,8BAAoB;AAAA,YACnB,WAAW,eAAe,IAAI,CAAC,cAAc;AAAA,cAC5C;AAAA,cACA,QAAQ;AAAA,YACT,EAAE;AAAA,UACH;AAAA,QACD;AAEA,oBAAQ,6BAAQ,OAAO,iBAAiB;AAAA,MACzC;AAEA,cAAQ,MACN,KAAK,EACL,QAAQ,cAAc,EAAE,EACxB,QAAQ,kBAAkB,EAAE,EAC5B,QAAQ,QAAQ,GAAG;AAErB,iBAAW,KAAK,KAAK;AAAA,IACtB,CAAC;AAED,UAAM,OAAO,KAAK,UAAU,YAAY,MAAM,CAAC;AAE/C,QAAI,YAAY,KAAK,KAAK,SAAS,WAAW;AAC7C,aAAO,KAAK,UAAU,GAAG,SAAS;AAAA,IACnC;AAEA,WAAO;AAAA,EACR;AACD;AAEA,MAAM,gBAAgB,CACrB,KACA,WACA,cACyB;AACzB,SAAO,CAAC,aAAa;AACpB,QAAI,OAAO,aAAa,UAAU;AACjC,UAAI;AACH,mBAAW,KAAK,UAAU,UAAU,MAAM,CAAC;AAAA,MAC5C,SAAS,OAAO;AAAA,MAAC;AAAA,IAClB;AAEA,QAAI,OAAO,aAAa,UAAU;AACjC,YAAM,IAAI;AAAA,QACT,IAAI,QAAQ;AAAA,QACZ,iDAAiD,OAAO,QAAQ;AAAA,QAChE,EAAE,UAAU;AAAA,MACb;AAAA,IACD;AAEA,UAAM,MAAM,IAAI,mBAAM,QAAQ;AAC9B,UAAM,UAAU,IAAI,+BAAY,IAAI,OAAO,UAAU;AAAA,MACpD,aAAa;AAAA,IACd,CAAC,EAAE,MAAM;AAET,UAAM,OAAO,SAAS,eAAe;AAErC,QAAI,YAAY,KAAK,KAAK,SAAS,WAAW;AAC7C,aAAO,KAAK,UAAU,GAAG,SAAS;AAAA,IACnC;AAEA,WAAO;AAAA,EACR;AACD;AAEA,MAAM,gBAAgB,CAAC,KAAwB,cAA2C;AACzF,SAAO,CAAC,aAAa;AACpB,QAAI,eAA4D;AAEhE,QAAI,OAAO,aAAa,UAAU;AACjC,UAAI;AACH,2BAAe,+BAAU,UAAU,EAAE,cAAc,wBAAwB,CAAC;AAAA,MAC7E,SAAS,OAAO;AACf,cAAM,IAAI;AAAA,UACT,IAAI,QAAQ;AAAA,UACZ,wCAAwC,QAAQ;AAAA,UAChD,EAAE,UAAU;AAAA,QACb;AAAA,MACD;AAAA,IACD;AAEA,QAAI,OAAO,iBAAiB,YAAY,CAAC,cAAc;AACtD,YAAM,IAAI;AAAA,QACT,IAAI,QAAQ;AAAA,QACZ;AAAA,QACA,EAAE,UAAU;AAAA,MACb;AAAA,IACD;AAEA,UAAM,YAAY,IAAI,iBAAiB,aAAa,WAAW,EAAE;AACjE,QAAI,aAA4B,CAAC;AAEjC,QAAI,CAAC,MAAM,QAAQ,YAAY,GAAG;AACjC,UAAI,WAAW;AACd,YAAI,CAAC,OAAO,UAAU,eAAe,KAAK,cAAc,SAAS,GAAG;AACnE,gBAAM,IAAI;AAAA,YACT,IAAI,QAAQ;AAAA,YACZ,iBAAiB,SAAS;AAAA,YAC1B;AAAA,cACC;AAAA,cACA,aAAa,yCAAyC,OAAO,KAAK,YAAY,EAAE,KAAK,IAAI,CAAC;AAAA,YAC3F;AAAA,UACD;AAAA,QACD;AAEA,cAAM,OAAO,aAAa,SAAS;AAEnC,YAAI,MAAM,QAAQ,IAAI,GAAG;AACxB,yBAAe;AAAA,QAChB,OAAO;AACN,yBAAe,CAAC,IAAI;AAAA,QACrB;AAAA,MACD,OAAO;AACN,uBAAe,CAAC,YAAY;AAAA,MAC7B;AAAA,IACD,OAAO;AACN,UAAI,WAAW;AACd,uBAAe,aAAa,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC;AAAA,MAC1D;AAAA,IACD;AAEA,UAAM,kBAAkB,IAAI,iBAAiB,mBAAmB,WAAW,KAAK;AAKhF,QAAI,SAA4B,CAAC;AAEjC,QAAI,oBAAoB,OAAO;AAC9B,eAAS,IAAI,iBAAiB,UAAU,WAAW,CAAC,CAAC;AAErD,UAAI,OAAO,WAAW,UAAU;AAC/B,iBAAS,OAAO,MAAM,GAAG,EAAE,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC;AAAA,MACvD;AAAA,IACD,OAAO;AACN,mBAAa;AAAA,IACd;AAEA,QAAI,oBAAoB,YAAY;AACnC,iBAAW,QAAQ,cAAc;AAChC,cAAM,UAAuB,CAAC;AAE9B,mBAAW,SAAS,QAAQ;AAC3B,yBAAAA,SAAI,SAAS,WAAO,WAAAC,SAAI,MAAM,KAAK,CAAC;AAAA,QACrC;AAEA,mBAAW,KAAK,OAAO;AAAA,MACxB;AAAA,IACD;AAEA,QAAI,oBAAoB,UAAU;AACjC,iBAAW,QAAQ,cAAc;AAChC,mBAAW,SAAS,QAAQ;AAC3B,2BAAAC,SAAM,MAAM,KAAK;AAAA,QAClB;AAEA,mBAAW,KAAK,IAAI;AAAA,MACrB;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AACD;AAEO,MAAM,6BAA6B,CACzC,KACA,cACyB;AACzB,QAAM,mBAAmB,IAAI,iBAAiB,oBAAoB,WAAW,KAAK;AAElF,MAAI,kBAAkB;AACrB,UAAM,eAAe,IAAI,iBAAiB,gBAAgB,SAAS;AAKnE,QAAI,YAAY;AAChB,UAAM,mBAAmB,IAAI,iBAAiB,oBAAoB,WAAW,KAAK;AAElF,QAAI,kBAAkB;AACrB,kBAAY,IAAI,iBAAiB,aAAa,WAAW,CAAC;AAAA,IAC3D;AAEA,YAAQ,cAAc;AAAA,MACrB,KAAK;AACJ,eAAO,cAAc,KAAK,WAAW,SAAS;AAAA,MAC/C,KAAK;AACJ,eAAO,cAAc,KAAK,WAAW,SAAS;AAAA,MAC/C,KAAK;AACJ,eAAO,cAAc,KAAK,SAAS;AAAA,IACrC;AAAA,EACD;AAEA,SAAO,CAAC,MAAM;AACf;AAEO,MAAM,6BAAgD;AAAA,EAC5D;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,kBAAkB;AAAA,IAClB,aACC;AAAA,EACF;AAAA,EACA;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,kBAAkB,CAAC,IAAI;AAAA,MACxB;AAAA,IACD;AAAA,IACA,SAAS;AAAA,MACR;AAAA,QACC,MAAM;AAAA,QACN,OAAO;AAAA,MACR;AAAA,MACA;AAAA,QACC,MAAM;AAAA,QACN,OAAO;AAAA,MACR;AAAA,MACA;AAAA,QACC,MAAM;AAAA,QACN,OAAO;AAAA,MACR;AAAA,IACD;AAAA,IACA,SAAS;AAAA,EACV;AAAA,EACA;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,kBAAkB,CAAC,IAAI;AAAA,QACvB,cAAc,CAAC,MAAM;AAAA,MACtB;AAAA,IACD;AAAA,EACD;AAAA,EACA;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,IACT,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,kBAAkB,CAAC,IAAI;AAAA,QACvB,cAAc,CAAC,MAAM;AAAA,MACtB;AAAA,IACD;AAAA,IACA,SAAS;AAAA,MACR;AAAA,QACC,MAAM;AAAA,QACN,OAAO;AAAA,QACP,aAAa;AAAA,MACd;AAAA,MACA;AAAA,QACC,MAAM;AAAA,QACN,OAAO;AAAA,QACP,aAAa;AAAA,MACd;AAAA,MACA;AAAA,QACC,MAAM;AAAA,QACN,OAAO;AAAA,QACP,aAAa;AAAA,MACd;AAAA,IACD;AAAA,EACD;AAAA,EACA;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,aACC;AAAA,IACD,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,kBAAkB,CAAC,IAAI;AAAA,QACvB,cAAc,CAAC,MAAM;AAAA,MACtB;AAAA,MACA,MAAM;AAAA,QACL,iBAAiB,CAAC,KAAK;AAAA,MACxB;AAAA,IACD;AAAA,EACD;AAAA,EACA;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aACC;AAAA,IACD,aAAa;AAAA,IACb,SAAS;AAAA,IACT,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,kBAAkB,CAAC,IAAI;AAAA,QACvB,cAAc,CAAC,MAAM;AAAA,MACtB;AAAA,IACD;AAAA,EACD;AAAA,EACA;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACC;AAAA,IACD,MAAM;AAAA,IACN,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,kBAAkB,CAAC,IAAI;AAAA,QACvB,cAAc,CAAC,MAAM;AAAA,MACtB;AAAA,IACD;AAAA,EACD;AAAA,EACA;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,kBAAkB,CAAC,IAAI;AAAA,QACvB,cAAc,CAAC,MAAM;AAAA,QACrB,aAAa,CAAC,IAAI;AAAA,MACnB;AAAA,IACD;AAAA,IACA,SAAS;AAAA,IACT,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,IACN,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,kBAAkB,CAAC,IAAI;AAAA,QACvB,cAAc,CAAC,QAAQ,MAAM;AAAA,MAC9B;AAAA,IACD;AAAA,EACD;AAAA,EACA;AAAA,IACC,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,MACZ,UAAU;AAAA,IACX;AAAA,IACA,gBAAgB;AAAA,MACf,MAAM;AAAA,QACL,kBAAkB,CAAC,IAAI;AAAA,QACvB,cAAc,CAAC,QAAQ,MAAM;AAAA,QAC7B,kBAAkB,CAAC,IAAI;AAAA,MACxB;AAAA,IACD;AAAA,EACD;AACD;","names":["set","get","unset"]}
@@ -45,9 +45,6 @@
45
45
  "timestamp": {
46
46
  "type": "integer"
47
47
  },
48
- "updatedByUserId": {
49
- "type": "integer"
50
- },
51
48
  "useTimestampAsPersistenceTimestamp": {
52
49
  "type": "boolean"
53
50
  },
@@ -76,5 +73,5 @@
76
73
  }
77
74
  }
78
75
  },
79
- "version": 3
76
+ "version": 4
80
77
  }