@n8n/workflow-sdk 0.13.0 → 0.14.0

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 (81) hide show
  1. package/dist/build.tsbuildinfo +1 -1
  2. package/dist/expression/index.js +0 -11
  3. package/dist/expression/index.js.map +1 -1
  4. package/dist/generate-types/generate-types.d.ts +1 -1
  5. package/dist/generate-types/generate-types.js +50 -21
  6. package/dist/generate-types/generate-types.js.map +1 -1
  7. package/dist/generate-types/generate-zod-schemas.d.ts +1 -5
  8. package/dist/generate-types/generate-zod-schemas.js +154 -207
  9. package/dist/generate-types/generate-zod-schemas.js.map +1 -1
  10. package/dist/index.d.ts +2 -3
  11. package/dist/index.js +2 -3
  12. package/dist/index.js.map +1 -1
  13. package/dist/prompts/best-practices/guides/chatbot.js +2 -2
  14. package/dist/prompts/node-guidance/index.d.ts +0 -1
  15. package/dist/prompts/node-guidance/index.js +0 -1
  16. package/dist/prompts/node-guidance/index.js.map +1 -1
  17. package/dist/prompts/node-guidance/parameter-guides/set-node.js +14 -15
  18. package/dist/prompts/node-guidance/parameter-guides/set-node.js.map +1 -1
  19. package/dist/prompts/node-selection/ai-nodes.d.ts +2 -2
  20. package/dist/prompts/node-selection/ai-nodes.js +10 -10
  21. package/dist/prompts/node-selection/ai-nodes.js.map +1 -1
  22. package/dist/prompts/node-selection/connection-parameters.d.ts +1 -1
  23. package/dist/prompts/node-selection/connection-parameters.js +2 -2
  24. package/dist/prompts/sdk-reference/additional-functions.d.ts +1 -1
  25. package/dist/prompts/sdk-reference/additional-functions.js +2 -2
  26. package/dist/prompts/sdk-reference/expressions.d.ts +1 -1
  27. package/dist/prompts/sdk-reference/expressions.js +1 -1
  28. package/dist/prompts/sdk-reference/workflow-patterns-detailed.d.ts +1 -1
  29. package/dist/prompts/sdk-reference/workflow-patterns-detailed.js +9 -7
  30. package/dist/prompts/sdk-reference/workflow-patterns-detailed.js.map +1 -1
  31. package/dist/prompts/sdk-reference/workflow-patterns.d.ts +1 -1
  32. package/dist/prompts/sdk-reference/workflow-patterns.js +13 -11
  33. package/dist/prompts/sdk-reference/workflow-patterns.js.map +1 -1
  34. package/dist/prompts/sdk-reference/workflow-rules.d.ts +1 -1
  35. package/dist/prompts/sdk-reference/workflow-rules.js +11 -1
  36. package/dist/prompts/sdk-reference/workflow-rules.js.map +1 -1
  37. package/dist/types/base.d.ts +6 -8
  38. package/dist/types/base.js.map +1 -1
  39. package/dist/validation/index.d.ts +1 -1
  40. package/dist/validation/index.js +24 -1
  41. package/dist/validation/index.js.map +1 -1
  42. package/dist/validation/schema-helpers.d.ts +87 -9
  43. package/dist/validation/schema-helpers.js +18 -4
  44. package/dist/validation/schema-helpers.js.map +1 -1
  45. package/dist/validation.d.ts +1 -0
  46. package/dist/validation.js +3 -1
  47. package/dist/validation.js.map +1 -1
  48. package/dist/workflow-builder/layout-utils.d.ts +1 -2
  49. package/dist/workflow-builder/layout-utils.js +21 -58
  50. package/dist/workflow-builder/layout-utils.js.map +1 -1
  51. package/dist/workflow-builder/node-builders/node-builder.d.ts +2 -2
  52. package/dist/workflow-builder/node-builders/node-builder.js +34 -16
  53. package/dist/workflow-builder/node-builders/node-builder.js.map +1 -1
  54. package/dist/workflow-builder/pin-data-utils.js +2 -3
  55. package/dist/workflow-builder/pin-data-utils.js.map +1 -1
  56. package/dist/workflow-builder/plugins/composite-handlers/branch-handler-utils.js +23 -2
  57. package/dist/workflow-builder/plugins/composite-handlers/branch-handler-utils.js.map +1 -1
  58. package/dist/workflow-builder/plugins/serializers/json-serializer.js +7 -1
  59. package/dist/workflow-builder/plugins/serializers/json-serializer.js.map +1 -1
  60. package/dist/workflow-builder/plugins/validators/merge-node-validator.js +1 -1
  61. package/dist/workflow-builder/plugins/validators/merge-node-validator.js.map +1 -1
  62. package/dist/workflow-builder/string-utils.d.ts +2 -0
  63. package/dist/workflow-builder/string-utils.js +12 -0
  64. package/dist/workflow-builder/string-utils.js.map +1 -1
  65. package/dist/workflow-builder/validation-helpers.js +5 -6
  66. package/dist/workflow-builder/validation-helpers.js.map +1 -1
  67. package/dist/workflow-builder.js +14 -0
  68. package/dist/workflow-builder.js.map +1 -1
  69. package/package.json +6 -12
  70. package/dist/prompts/node-guidance/node-tips/index.d.ts +0 -3
  71. package/dist/prompts/node-guidance/node-tips/index.js +0 -8
  72. package/dist/prompts/node-guidance/node-tips/index.js.map +0 -1
  73. package/dist/prompts/node-guidance/node-tips/structured-output-parser.d.ts +0 -2
  74. package/dist/prompts/node-guidance/node-tips/structured-output-parser.js +0 -35
  75. package/dist/prompts/node-guidance/node-tips/structured-output-parser.js.map +0 -1
  76. package/dist/prompts/node-guidance/node-tips/types.d.ts +0 -7
  77. package/dist/prompts/node-guidance/node-tips/types.js +0 -3
  78. package/dist/prompts/node-guidance/node-tips/types.js.map +0 -1
  79. package/dist/prompts/node-guidance/node-tips/webhook.d.ts +0 -2
  80. package/dist/prompts/node-guidance/node-tips/webhook.js +0 -38
  81. package/dist/prompts/node-guidance/node-tips/webhook.js.map +0 -1
@@ -56,15 +56,16 @@ startTrigger.to(sourceA.to(sourceB.to(processResults)));
56
56
  // Pairs items by index, merging fields from both inputs into one item.
57
57
  // @example input0: [{ a: 1 }, { a: 2 }] input1: [{ b: 10, c: 'x' }, { b: 20 }]
58
58
  // output: [{ a: 1, b: 10, c: 'x' }, { a: 2, b: 20, c: undefined }]
59
+ // .input(n) is 0-based: .input(0) = first input, .input(1) = second input.
59
60
  const combineResults = merge({
60
61
  version: 3.2,
61
62
  config: { name: 'Combine Results', parameters: { mode: 'combine', combineBy: 'combineByPosition' } }
62
63
  });
63
64
  export default workflow('id', 'name')
64
65
  .add(startTrigger)
65
- .to(sourceA.to(combineResults.input(0)))
66
+ .to(sourceA.to(combineResults.input(0))) // first input (index 0)
66
67
  .add(startTrigger)
67
- .to(sourceB.to(combineResults.input(1)))
68
+ .to(sourceB.to(combineResults.input(1))) // second input (index 1)
68
69
  .add(combineResults)
69
70
  .to(processResults);
70
71
 
@@ -78,9 +79,9 @@ const allResults = merge({
78
79
  });
79
80
  export default workflow('id', 'name')
80
81
  .add(startTrigger)
81
- .to(sourceA.to(allResults.input(0)))
82
+ .to(sourceA.to(allResults.input(0))) // first input (index 0)
82
83
  .add(startTrigger)
83
- .to(sourceB.to(allResults.input(1)))
84
+ .to(sourceB.to(allResults.input(1))) // second input (index 1)
84
85
  .add(allResults)
85
86
  .to(processResults);
86
87
  \`\`\`
@@ -135,12 +136,13 @@ const branch1 = node({ type: 'n8n-nodes-base.httpRequest', ... });
135
136
  const branch2 = node({ type: 'n8n-nodes-base.httpRequest', ... });
136
137
  const processResults = node({ type: 'n8n-nodes-base.set', ... });
137
138
 
138
- // Connect branches to specific merge inputs using .input(n)
139
+ // Connect branches to specific merge inputs using .input(n).
140
+ // Indices are 0-based: .input(0) is the FIRST input, .input(1) is the SECOND.
139
141
  export default workflow('id', 'name')
140
142
  .add(trigger({ ... }))
141
- .to(branch1.to(combineResults.input(0)))
143
+ .to(branch1.to(combineResults.input(0))) // first input (index 0)
142
144
  .add(trigger({ ... }))
143
- .to(branch2.to(combineResults.input(1)))
145
+ .to(branch2.to(combineResults.input(1))) // second input (index 1)
144
146
  .add(combineResults)
145
147
  .to(processResults);
146
148
  \`\`\`
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-patterns-detailed.js","sourceRoot":"","sources":["../../../src/prompts/sdk-reference/workflow-patterns-detailed.ts"],"names":[],"mappings":";;;AASA,MAAM,UAAU,GACf,wSAAwS,CAAC;AAE7R,QAAA,0BAA0B,GAAG;;EAExC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAsYuB,CAAC"}
1
+ {"version":3,"file":"workflow-patterns-detailed.js","sourceRoot":"","sources":["../../../src/prompts/sdk-reference/workflow-patterns-detailed.ts"],"names":[],"mappings":";;;AASA,MAAM,UAAU,GACf,wSAAwS,CAAC;AAE7R,QAAA,0BAA0B,GAAG;;EAExC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAwYuB,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const WORKFLOW_SDK_PATTERNS = "<linear_chain>\n```javascript\nimport { workflow, node, trigger, sticky, placeholder, newCredential, ifElse, switchCase, merge, splitInBatches, nextBatch, languageModel, memory, tool, outputParser, embedding, embeddings, vectorStore, retriever, documentLoader, textSplitter, fromAi, expr } from '@n8n/workflow-sdk';\n\n// 1. Define all nodes first\nconst startTrigger = trigger({\n type: 'n8n-nodes-base.manualTrigger',\n version: 1,\n config: { name: 'Start' }\n});\n\nconst fetchData = node({\n type: 'n8n-nodes-base.httpRequest',\n version: 4.3,\n config: { name: 'Fetch Data', parameters: { method: 'GET', url: '...' } }\n});\n\nconst processData = node({\n type: 'n8n-nodes-base.set',\n version: 3.4,\n config: {\n name: 'Process Data',\n parameters: {\n mode: 'manual',\n includeOtherFields: true,\n assignments: {\n assignments: [\n { id: 'processed-title', name: 'processedTitle', value: expr('{{ $json.title }}'), type: 'string' }\n ]\n }\n }\n }\n});\n\n// 2. Compose workflow\nexport default workflow('id', 'name')\n .add(startTrigger)\n .to(fetchData)\n .to(processData);\n```\n\n</linear_chain>\n\n<independent_sources>\nWhen nodes return more than 1 item, chaining causes item multiplication: if Source A returns N items, a chained Source B runs N times instead of once.\n\n**When to use `executeOnce: true`:**\n- A node fetches data independently but is chained after another data source (prevents N\u00D7M multiplication)\n- A node should summarize/aggregate all upstream items in a single call (e.g., AI summary, send one notification)\n- A node calls an API that doesn't vary per input item\n\nFix with `executeOnce: true` (simplest) or parallel branches + Merge (when combining results):\n\n```javascript\n// sourceA outputs 10 items. sourceB outputs 10 items.\n// WRONG - processResults runs 100 times\n// startTrigger.to(sourceA.to(sourceB.to(processResults)))\n\n// FIX 1 - executeOnce: sourceB runs once regardless of input items\nconst sourceB = node({ ..., config: { ..., executeOnce: true } });\nstartTrigger.to(sourceA.to(sourceB.to(processResults)));\n\n// FIX 2 - parallel branches + Merge (combine by position)\nconst combineResults = merge({\n version: 3.2,\n config: { name: 'Combine Results', parameters: { mode: 'combine', combineBy: 'combineByPosition' } }\n});\nexport default workflow('id', 'name')\n .add(startTrigger)\n .to(sourceA.to(combineResults.input(0)))\n .add(startTrigger)\n .to(sourceB.to(combineResults.input(1)))\n .add(combineResults)\n .to(processResults);\n\n// FIX 3 - parallel branches + Merge (append)\nconst allResults = merge({\n version: 3.2,\n config: { name: 'All Results', parameters: { mode: 'append' } }\n});\nexport default workflow('id', 'name')\n .add(startTrigger)\n .to(sourceA.to(allResults.input(0)))\n .add(startTrigger)\n .to(sourceB.to(allResults.input(1)))\n .add(allResults)\n .to(processResults);\n```\n\n</independent_sources>\n\n<zero_item_safety>\nWhen a node returns 0 items, downstream nodes are skipped for that execution. **This is usually the correct behavior** \u2014 the scheduler / trigger fires again later, and when there is data, the chain runs normally. Don't paper over an empty result with `alwaysOutputData: true` by default.\n\n**`alwaysOutputData: true` forces a synthetic `{json: {}}` item downstream.** This is a footgun: downstream nodes will try to read fields that don't exist, HTTP requests will hit `GET undefined`, and loops will run once on a fake item. Use it *only* when the empty case has its own dedicated branch that you want to execute.\n\n**Correct pattern \u2014 no `alwaysOutputData`:**\n```javascript\n// Scheduler that processes pending work\nworkflow('ingest', 'Ingest Worker')\n .add(scheduleTrigger) // fires every 5 min\n .to(getPending) // returns 0..N rows; no alwaysOutputData\n .to(splitInBatches({version: 3, config: {parameters: {batchSize: 1}}})\n .onEachBatch(fetchUrl.to(embed).to(saveChunk))\n );\n// On runs where getPending returns 0 items, the loop simply doesn't execute.\n// On runs where it returns rows, the loop iterates. No gate, no filter needed.\n```\n\n**Correct pattern \u2014 empty case needs its own branch:**\n```javascript\n// \"No matches found\" deserves a notification\nconst search = node({\n type: 'n8n-nodes-base.httpRequest',\n version: 4.4,\n config: {\n name: 'Search',\n alwaysOutputData: true, // empty-case branch below needs to execute\n parameters: { /* ... */ }\n }\n});\nconst hasResults = ifElse({\n version: 2.2,\n config: {\n name: 'Has Results?',\n parameters: {\n conditions: {\n options: { caseSensitive: true, typeValidation: 'loose' },\n conditions: [{ leftValue: '={{ $json.results }}', operator: { type: 'array', operation: 'notEmpty' } }],\n combinator: 'and'\n }\n }\n }\n});\nworkflow('search', 'Search').add(trigger).to(search).to(\n hasResults.onTrue(processResults).onFalse(notifyNoMatches)\n);\n```\n\n**When to use `alwaysOutputData: true`:** only when you've paired it with an explicit empty-case branch, AND the downstream branch doesn't blindly read item fields.\n\n**When NOT to use it:**\n- Scheduled/polling triggers where the \"no work\" case should silently skip\n- Before a `splitInBatches` loop \u2014 loops already no-op on empty input\n- Before a `filter` \u2014 the filter already no-ops on empty input\n- When all you'd do on the empty case is \"nothing\"\n\n**Don't gate loops with an `IF`.** `ifElse.onTrue(splitInBatches)` to check \"are there items?\" is redundant \u2014 the loop already does the right thing with 0 items. Drop the IF.\n\n</zero_item_safety>\n\n<conditional_branching>\n\n**CRITICAL:** Each branch defines a COMPLETE processing path. Chain multiple steps INSIDE the branch using .to().\n\nEvery IF/Filter `conditions` parameter MUST include `options`, `conditions`, and `combinator`:\n```javascript\nconst checkValid = ifElse({\n version: 2.2,\n config: {\n name: 'Check Valid',\n parameters: {\n conditions: {\n options: { caseSensitive: true, leftValue: '', typeValidation: 'strict' },\n conditions: [{ leftValue: '={{ $json.status }}', operator: { type: 'string', operation: 'equals' }, rightValue: 'active' }],\n combinator: 'and'\n }\n }\n }\n});\n\nexport default workflow('id', 'name')\n .add(startTrigger)\n .to(checkValid\n .onTrue(formatData.to(enrichData.to(saveToDb))) // Chain 3 nodes on true branch\n .onFalse(logError));\n```\n\n</conditional_branching>\n\n<multi_way_routing>\n\nSwitch rules use `rules.values` (NOT `rules.rules`). Each rule needs `outputKey` and a complete `conditions` object:\n```javascript\nconst routeByPriority = switchCase({\n version: 3.2,\n config: {\n name: 'Route by Priority',\n parameters: {\n rules: {\n values: [\n { outputKey: 'urgent', conditions: { options: { caseSensitive: true, leftValue: '', typeValidation: 'strict' }, conditions: [{ leftValue: '={{ $json.priority }}', operator: { type: 'string', operation: 'equals' }, rightValue: 'urgent' }], combinator: 'and' } },\n { outputKey: 'normal', conditions: { options: { caseSensitive: true, leftValue: '', typeValidation: 'strict' }, conditions: [{ leftValue: '={{ $json.priority }}', operator: { type: 'string', operation: 'equals' }, rightValue: 'normal' }], combinator: 'and' } },\n ]\n }\n }\n }\n});\n\nexport default workflow('id', 'name')\n .add(startTrigger)\n .to(routeByPriority\n .onCase('urgent', processUrgent.to(notifyTeam.to(escalate)))\n .onCase('normal', processNormal)\n .onDefault(archive));\n```\n\n</multi_way_routing>\n\n<parallel_execution>\n```javascript\n// First declare the Merge node using merge()\nconst combineResults = merge({\n version: 3.2,\n config: { name: 'Combine Results', parameters: { mode: 'combine' } }\n});\n\n// Declare branch nodes\nconst branch1 = node({ type: 'n8n-nodes-base.httpRequest', ... });\nconst branch2 = node({ type: 'n8n-nodes-base.httpRequest', ... });\nconst processResults = node({ type: 'n8n-nodes-base.set', ... });\n\n// Connect branches to specific merge inputs using .input(n)\nexport default workflow('id', 'name')\n .add(trigger({ ... }))\n .to(branch1.to(combineResults.input(0))) // Connect to input 0\n .add(trigger({ ... }))\n .to(branch2.to(combineResults.input(1))) // Connect to input 1\n .add(combineResults)\n .to(processResults); // Process merged results\n```\n\n</parallel_execution>\n\n<batch_processing>\n```javascript\nconst startTrigger = trigger({\n type: 'n8n-nodes-base.manualTrigger',\n version: 1,\n config: { name: 'Start' }\n});\n\nconst fetchRecords = node({\n type: 'n8n-nodes-base.httpRequest',\n version: 4.3,\n config: { name: 'Fetch Records', parameters: { method: 'GET', url: '...' } }\n});\n\nconst finalizeResults = node({\n type: 'n8n-nodes-base.set',\n version: 3.4,\n config: {\n name: 'Finalize',\n parameters: {\n mode: 'manual',\n includeOtherFields: true,\n assignments: {\n assignments: [\n { id: 'processed-at', name: 'processedAt', value: expr('{{ $now.toISO() }}'), type: 'string' }\n ]\n }\n }\n }\n});\n\nconst processRecord = node({\n type: 'n8n-nodes-base.httpRequest',\n version: 4.3,\n config: { name: 'Process Record', parameters: { method: 'POST', url: '...' } }\n});\n\nconst sibNode = splitInBatches({ version: 3, config: { name: 'Batch Process', parameters: { batchSize: 10 } } });\n\nexport default workflow('id', 'name')\n .add(startTrigger)\n .to(fetchRecords)\n .to(sibNode\n .onDone(finalizeResults)\n .onEachBatch(processRecord.to(nextBatch(sibNode)))\n );\n```\n\n</batch_processing>\n\n<multiple_triggers>\n```javascript\nconst webhookTrigger = trigger({\n type: 'n8n-nodes-base.webhook',\n version: 2.1,\n config: { name: 'Webhook' }\n});\n\nconst processWebhook = node({\n type: 'n8n-nodes-base.set',\n version: 3.4,\n config: {\n name: 'Process Webhook',\n parameters: {\n mode: 'manual',\n includeOtherFields: true,\n assignments: {\n assignments: [\n { id: 'source', name: 'source', value: 'webhook', type: 'string' }\n ]\n }\n }\n }\n});\n\nconst scheduleTrigger = trigger({\n type: 'n8n-nodes-base.scheduleTrigger',\n version: 1.3,\n config: { name: 'Daily Schedule', parameters: {} }\n});\n\nconst processSchedule = node({\n type: 'n8n-nodes-base.set',\n version: 3.4,\n config: {\n name: 'Process Schedule',\n parameters: {\n mode: 'manual',\n includeOtherFields: true,\n assignments: {\n assignments: [\n { id: 'source', name: 'source', value: 'schedule', type: 'string' }\n ]\n }\n }\n }\n});\n\nexport default workflow('id', 'name')\n .add(webhookTrigger)\n .to(processWebhook)\n .add(scheduleTrigger)\n .to(processSchedule);\n```\n\n</multiple_triggers>\n\n<fan_in>\n```javascript\n// Each trigger's execution runs in COMPLETE ISOLATION.\n// Different branches have no effect on each other.\n// Never duplicate chains for \"isolation\" - it's already guaranteed.\n\nconst webhookTrigger = trigger({\n type: 'n8n-nodes-base.webhook',\n version: 2.1,\n config: { name: 'Webhook Trigger' }\n});\n\nconst scheduleTrigger = trigger({\n type: 'n8n-nodes-base.scheduleTrigger',\n version: 1.3,\n config: { name: 'Daily Schedule' }\n});\n\nconst processData = node({\n type: 'n8n-nodes-base.set',\n version: 3.4,\n config: {\n name: 'Process Data',\n parameters: {\n mode: 'manual',\n includeOtherFields: true,\n assignments: {\n assignments: [\n { id: 'received-at', name: 'receivedAt', value: expr('{{ $now.toISO() }}'), type: 'string' }\n ]\n }\n }\n }\n});\n\nconst sendNotification = node({\n type: 'n8n-nodes-base.slack',\n version: 2.3,\n config: { name: 'Notify Slack', parameters: {} }\n});\n\nexport default workflow('id', 'name')\n .add(webhookTrigger)\n .to(processData)\n .to(sendNotification)\n .add(scheduleTrigger)\n .to(processData);\n```\n\n</fan_in>\n\n<ai_agent_basic>\n```javascript\nconst openAiModel = languageModel({\n type: '@n8n/n8n-nodes-langchain.lmChatOpenAi',\n version: 1.3,\n config: { name: 'OpenAI Model', parameters: {} }\n});\n\nconst startTrigger = trigger({\n type: 'n8n-nodes-base.manualTrigger',\n version: 1,\n config: { name: 'Start' }\n});\n\nconst aiAgent = node({\n type: '@n8n/n8n-nodes-langchain.agent',\n version: 3.1,\n config: {\n name: 'AI Assistant',\n parameters: { promptType: 'define', text: 'You are a helpful assistant' },\n subnodes: { model: openAiModel }\n }\n});\n\nexport default workflow('ai-assistant', 'AI Assistant')\n .add(startTrigger)\n .to(aiAgent);\n```\n\n</ai_agent_basic>\n\n<ai_agent_with_tools>\n```javascript\nconst openAiModel = languageModel({\n type: '@n8n/n8n-nodes-langchain.lmChatOpenAi',\n version: 1.3,\n config: {\n name: 'OpenAI Model',\n parameters: {},\n credentials: { openAiApi: newCredential('OpenAI') }\n }\n});\n\nconst calculatorTool = tool({\n type: '@n8n/n8n-nodes-langchain.toolCalculator',\n version: 1,\n config: { name: 'Calculator', parameters: {} }\n});\n\nconst startTrigger = trigger({\n type: 'n8n-nodes-base.manualTrigger',\n version: 1,\n config: { name: 'Start' }\n});\n\nconst aiAgent = node({\n type: '@n8n/n8n-nodes-langchain.agent',\n version: 3.1,\n config: {\n name: 'Math Agent',\n parameters: { promptType: 'define', text: 'You can use tools to help users' },\n subnodes: { model: openAiModel, tools: [calculatorTool] }\n }\n});\n\nexport default workflow('ai-calculator', 'AI Calculator')\n .add(startTrigger)\n .to(aiAgent);\n```\n\n</ai_agent_with_tools>\n\n<ai_agent_with_from_ai>\n```javascript\nconst openAiModel = languageModel({\n type: '@n8n/n8n-nodes-langchain.lmChatOpenAi',\n version: 1.3,\n config: {\n name: 'OpenAI Model',\n parameters: {},\n credentials: { openAiApi: newCredential('OpenAI') }\n }\n});\n\nconst gmailTool = tool({\n type: 'n8n-nodes-base.gmailTool',\n version: 1,\n config: {\n name: 'Gmail Tool',\n parameters: {\n sendTo: fromAi('recipient', 'Email address'),\n subject: fromAi('subject', 'Email subject'),\n message: fromAi('body', 'Email content')\n },\n credentials: { gmailOAuth2: newCredential('Gmail') }\n }\n});\n\nconst startTrigger = trigger({\n type: 'n8n-nodes-base.manualTrigger',\n version: 1,\n config: { name: 'Start' }\n});\n\nconst aiAgent = node({\n type: '@n8n/n8n-nodes-langchain.agent',\n version: 3.1,\n config: {\n name: 'Email Agent',\n parameters: { promptType: 'define', text: 'You can send emails' },\n subnodes: { model: openAiModel, tools: [gmailTool] }\n }\n});\n\nexport default workflow('ai-email', 'AI Email Sender')\n .add(startTrigger)\n .to(aiAgent);\n```\n</ai_agent_with_from_ai>\n\n<ai_agent_with_structured_output>\n```javascript\nconst structuredParser = outputParser({\n type: '@n8n/n8n-nodes-langchain.outputParserStructured',\n version: 1.3,\n config: {\n name: 'Structured Output Parser',\n parameters: {\n schemaType: 'fromJson',\n jsonSchemaExample: '{ \"sentiment\": \"positive\", \"confidence\": 0.95, \"summary\": \"brief summary\" }'\n }\n }\n});\n\nconst aiAgent = node({\n type: '@n8n/n8n-nodes-langchain.agent',\n version: 3.1,\n config: {\n name: 'Sentiment Analyzer',\n parameters: { promptType: 'define', text: 'Analyze the sentiment of the input text', hasOutputParser: true },\n subnodes: { model: openAiModel, outputParser: structuredParser }\n }\n});\n\nexport default workflow('ai-sentiment', 'AI Sentiment Analyzer')\n .add(startTrigger)\n .to(aiAgent);\n```\n</ai_agent_with_structured_output>";
1
+ export declare const WORKFLOW_SDK_PATTERNS = "<linear_chain>\n```javascript\nimport { workflow, node, trigger, sticky, placeholder, newCredential, ifElse, switchCase, merge, splitInBatches, nextBatch, languageModel, memory, tool, outputParser, embedding, embeddings, vectorStore, retriever, documentLoader, textSplitter, fromAi, expr } from '@n8n/workflow-sdk';\n\n// 1. Define all nodes first\nconst startTrigger = trigger({\n type: 'n8n-nodes-base.manualTrigger',\n version: 1,\n config: { name: 'Start' }\n});\n\nconst fetchData = node({\n type: 'n8n-nodes-base.httpRequest',\n version: 4.3,\n config: { name: 'Fetch Data', parameters: { method: 'GET', url: '...' } }\n});\n\nconst processData = node({\n type: 'n8n-nodes-base.set',\n version: 3.4,\n config: {\n name: 'Process Data',\n parameters: {\n mode: 'manual',\n includeOtherFields: true,\n assignments: {\n assignments: [\n { id: 'processed-title', name: 'processedTitle', value: expr('{{ $json.title }}'), type: 'string' }\n ]\n }\n }\n }\n});\n\n// 2. Compose workflow\nexport default workflow('id', 'name')\n .add(startTrigger)\n .to(fetchData)\n .to(processData);\n```\n\n</linear_chain>\n\n<independent_sources>\nWhen nodes return more than 1 item, chaining causes item multiplication: if Source A returns N items, a chained Source B runs N times instead of once.\n\n**When to use `executeOnce: true`:**\n- A node fetches data independently but is chained after another data source (prevents N\u00D7M multiplication)\n- A node should summarize/aggregate all upstream items in a single call (e.g., AI summary, send one notification)\n- A node calls an API that doesn't vary per input item\n\nFix with `executeOnce: true` (simplest) or parallel branches + Merge (when combining results):\n\n```javascript\n// sourceA outputs 10 items. sourceB outputs 10 items.\n// WRONG - processResults runs 100 times\n// startTrigger.to(sourceA.to(sourceB.to(processResults)))\n\n// FIX 1 - executeOnce: sourceB runs once regardless of input items\nconst sourceB = node({ ..., config: { ..., executeOnce: true } });\nstartTrigger.to(sourceA.to(sourceB.to(processResults)));\n\n// FIX 2 - parallel branches + Merge (combine by position)\n// .input(n) is 0-based: .input(0) = first input, .input(1) = second input.\nconst combineResults = merge({\n version: 3.2,\n config: { name: 'Combine Results', parameters: { mode: 'combine', combineBy: 'combineByPosition' } }\n});\nexport default workflow('id', 'name')\n .add(startTrigger)\n .to(sourceA.to(combineResults.input(0))) // first input (index 0)\n .add(startTrigger)\n .to(sourceB.to(combineResults.input(1))) // second input (index 1)\n .add(combineResults)\n .to(processResults);\n\n// FIX 3 - parallel branches + Merge (append)\nconst allResults = merge({\n version: 3.2,\n config: { name: 'All Results', parameters: { mode: 'append' } }\n});\nexport default workflow('id', 'name')\n .add(startTrigger)\n .to(sourceA.to(allResults.input(0))) // first input (index 0)\n .add(startTrigger)\n .to(sourceB.to(allResults.input(1))) // second input (index 1)\n .add(allResults)\n .to(processResults);\n```\n\n</independent_sources>\n\n<zero_item_safety>\nWhen a node returns 0 items, downstream nodes are skipped for that execution. **This is usually the correct behavior** \u2014 the scheduler / trigger fires again later, and when there is data, the chain runs normally. Don't paper over an empty result with `alwaysOutputData: true` by default.\n\n**`alwaysOutputData: true` forces a synthetic `{json: {}}` item downstream.** This is a footgun: downstream nodes will try to read fields that don't exist, HTTP requests will hit `GET undefined`, and loops will run once on a fake item. Use it *only* when the empty case has its own dedicated branch that you want to execute.\n\n**Correct pattern \u2014 no `alwaysOutputData`:**\n```javascript\n// Scheduler that processes pending work\nworkflow('ingest', 'Ingest Worker')\n .add(scheduleTrigger) // fires every 5 min\n .to(getPending) // returns 0..N rows; no alwaysOutputData\n .to(splitInBatches({version: 3, config: {parameters: {batchSize: 1}}})\n .onEachBatch(fetchUrl.to(embed).to(saveChunk))\n );\n// On runs where getPending returns 0 items, the loop simply doesn't execute.\n// On runs where it returns rows, the loop iterates. No gate, no filter needed.\n```\n\n**Correct pattern \u2014 empty case needs its own branch:**\n```javascript\n// \"No matches found\" deserves a notification\nconst search = node({\n type: 'n8n-nodes-base.httpRequest',\n version: 4.4,\n config: {\n name: 'Search',\n alwaysOutputData: true, // empty-case branch below needs to execute\n parameters: { /* ... */ }\n }\n});\nconst hasResults = ifElse({\n version: 2.2,\n config: {\n name: 'Has Results?',\n parameters: {\n conditions: {\n options: { caseSensitive: true, typeValidation: 'loose' },\n conditions: [{ leftValue: expr('{{ $json.results }}'), operator: { type: 'array', operation: 'notEmpty' } }],\n combinator: 'and'\n }\n }\n }\n});\nworkflow('search', 'Search').add(trigger).to(search).to(\n hasResults.onTrue(processResults).onFalse(notifyNoMatches)\n);\n```\n\n**When to use `alwaysOutputData: true`:** only when you've paired it with an explicit empty-case branch, AND the downstream branch doesn't blindly read item fields.\n\n**When NOT to use it:**\n- Scheduled/polling triggers where the \"no work\" case should silently skip\n- Before a `splitInBatches` loop \u2014 loops already no-op on empty input\n- Before a `filter` \u2014 the filter already no-ops on empty input\n- When all you'd do on the empty case is \"nothing\"\n\n**Don't gate loops with an `IF`.** `ifElse.onTrue(splitInBatches)` to check \"are there items?\" is redundant \u2014 the loop already does the right thing with 0 items. Drop the IF.\n\n</zero_item_safety>\n\n<conditional_branching>\n\n**CRITICAL:** Each branch defines a COMPLETE processing path. Chain multiple steps INSIDE the branch using .to().\n\nEvery IF/Filter `conditions` parameter MUST include `options`, `conditions`, and `combinator`:\n```javascript\nconst checkValid = ifElse({\n version: 2.2,\n config: {\n name: 'Check Valid',\n parameters: {\n conditions: {\n options: { caseSensitive: true, leftValue: '', typeValidation: 'strict' },\n conditions: [{ leftValue: expr('{{ $json.status }}'), operator: { type: 'string', operation: 'equals' }, rightValue: 'active' }],\n combinator: 'and'\n }\n }\n }\n});\n\nexport default workflow('id', 'name')\n .add(startTrigger)\n .to(checkValid\n .onTrue(formatData.to(enrichData.to(saveToDb))) // Chain 3 nodes on true branch\n .onFalse(logError));\n```\n\n</conditional_branching>\n\n<multi_way_routing>\n\nSwitch rules use `rules.values` (NOT `rules.rules`). Each rule needs `outputKey` and a complete `conditions` object:\n```javascript\nconst routeByPriority = switchCase({\n version: 3.2,\n config: {\n name: 'Route by Priority',\n parameters: {\n rules: {\n values: [\n { outputKey: 'urgent', conditions: { options: { caseSensitive: true, leftValue: '', typeValidation: 'strict' }, conditions: [{ leftValue: expr('{{ $json.priority }}'), operator: { type: 'string', operation: 'equals' }, rightValue: 'urgent' }], combinator: 'and' } },\n { outputKey: 'normal', conditions: { options: { caseSensitive: true, leftValue: '', typeValidation: 'strict' }, conditions: [{ leftValue: expr('{{ $json.priority }}'), operator: { type: 'string', operation: 'equals' }, rightValue: 'normal' }], combinator: 'and' } },\n ]\n }\n }\n }\n});\n\nexport default workflow('id', 'name')\n .add(startTrigger)\n .to(routeByPriority\n .onCase('urgent', processUrgent.to(notifyTeam.to(escalate)))\n .onCase('normal', processNormal)\n .onDefault(archive));\n```\n\n</multi_way_routing>\n\n<parallel_execution>\n```javascript\n// First declare the Merge node using merge()\nconst combineResults = merge({\n version: 3.2,\n config: { name: 'Combine Results', parameters: { mode: 'combine' } }\n});\n\n// Declare branch nodes\nconst branch1 = node({ type: 'n8n-nodes-base.httpRequest', ... });\nconst branch2 = node({ type: 'n8n-nodes-base.httpRequest', ... });\nconst processResults = node({ type: 'n8n-nodes-base.set', ... });\n\n// Connect branches to specific merge inputs using .input(n).\n// Indices are 0-based: .input(0) is the FIRST input, .input(1) is the SECOND.\nexport default workflow('id', 'name')\n .add(trigger({ ... }))\n .to(branch1.to(combineResults.input(0))) // first input (index 0)\n .add(trigger({ ... }))\n .to(branch2.to(combineResults.input(1))) // second input (index 1)\n .add(combineResults)\n .to(processResults); // Process merged results\n```\n\n</parallel_execution>\n\n<batch_processing>\n```javascript\nconst startTrigger = trigger({\n type: 'n8n-nodes-base.manualTrigger',\n version: 1,\n config: { name: 'Start' }\n});\n\nconst fetchRecords = node({\n type: 'n8n-nodes-base.httpRequest',\n version: 4.3,\n config: { name: 'Fetch Records', parameters: { method: 'GET', url: '...' } }\n});\n\nconst finalizeResults = node({\n type: 'n8n-nodes-base.set',\n version: 3.4,\n config: {\n name: 'Finalize',\n parameters: {\n mode: 'manual',\n includeOtherFields: true,\n assignments: {\n assignments: [\n { id: 'processed-at', name: 'processedAt', value: expr('{{ $now.toISO() }}'), type: 'string' }\n ]\n }\n }\n }\n});\n\nconst processRecord = node({\n type: 'n8n-nodes-base.httpRequest',\n version: 4.3,\n config: { name: 'Process Record', parameters: { method: 'POST', url: '...' } }\n});\n\nconst sibNode = splitInBatches({ version: 3, config: { name: 'Batch Process', parameters: { batchSize: 10 } } });\n\nexport default workflow('id', 'name')\n .add(startTrigger)\n .to(fetchRecords)\n .to(sibNode\n .onDone(finalizeResults)\n .onEachBatch(processRecord.to(nextBatch(sibNode)))\n );\n```\n\n</batch_processing>\n\n<multiple_triggers>\n```javascript\nconst webhookTrigger = trigger({\n type: 'n8n-nodes-base.webhook',\n version: 2.1,\n config: { name: 'Webhook' }\n});\n\nconst processWebhook = node({\n type: 'n8n-nodes-base.set',\n version: 3.4,\n config: {\n name: 'Process Webhook',\n parameters: {\n mode: 'manual',\n includeOtherFields: true,\n assignments: {\n assignments: [\n { id: 'source', name: 'source', value: 'webhook', type: 'string' }\n ]\n }\n }\n }\n});\n\nconst scheduleTrigger = trigger({\n type: 'n8n-nodes-base.scheduleTrigger',\n version: 1.3,\n config: { name: 'Daily Schedule', parameters: {} }\n});\n\nconst processSchedule = node({\n type: 'n8n-nodes-base.set',\n version: 3.4,\n config: {\n name: 'Process Schedule',\n parameters: {\n mode: 'manual',\n includeOtherFields: true,\n assignments: {\n assignments: [\n { id: 'source', name: 'source', value: 'schedule', type: 'string' }\n ]\n }\n }\n }\n});\n\nexport default workflow('id', 'name')\n .add(webhookTrigger)\n .to(processWebhook)\n .add(scheduleTrigger)\n .to(processSchedule);\n```\n\n</multiple_triggers>\n\n<fan_in>\n```javascript\n// Each trigger's execution runs in COMPLETE ISOLATION.\n// Different branches have no effect on each other.\n// Never duplicate chains for \"isolation\" - it's already guaranteed.\n\nconst webhookTrigger = trigger({\n type: 'n8n-nodes-base.webhook',\n version: 2.1,\n config: { name: 'Webhook Trigger' }\n});\n\nconst scheduleTrigger = trigger({\n type: 'n8n-nodes-base.scheduleTrigger',\n version: 1.3,\n config: { name: 'Daily Schedule' }\n});\n\nconst processData = node({\n type: 'n8n-nodes-base.set',\n version: 3.4,\n config: {\n name: 'Process Data',\n parameters: {\n mode: 'manual',\n includeOtherFields: true,\n assignments: {\n assignments: [\n { id: 'received-at', name: 'receivedAt', value: expr('{{ $now.toISO() }}'), type: 'string' }\n ]\n }\n }\n }\n});\n\nconst sendNotification = node({\n type: 'n8n-nodes-base.slack',\n version: 2.3,\n config: { name: 'Notify Slack', parameters: {} }\n});\n\nexport default workflow('id', 'name')\n .add(webhookTrigger)\n .to(processData)\n .to(sendNotification)\n .add(scheduleTrigger)\n .to(processData);\n```\n\n</fan_in>\n\n<ai_agent_basic>\n```javascript\nconst openAiModel = languageModel({\n type: '@n8n/n8n-nodes-langchain.lmChatOpenAi',\n version: 1.3,\n config: { name: 'OpenAI Model', parameters: {} }\n});\n\nconst startTrigger = trigger({\n type: 'n8n-nodes-base.manualTrigger',\n version: 1,\n config: { name: 'Start' }\n});\n\nconst aiAgent = node({\n type: '@n8n/n8n-nodes-langchain.agent',\n version: 3.1,\n config: {\n name: 'AI Assistant',\n parameters: { promptType: 'define', text: 'You are a helpful assistant' },\n subnodes: { model: openAiModel }\n }\n});\n\nexport default workflow('ai-assistant', 'AI Assistant')\n .add(startTrigger)\n .to(aiAgent);\n```\n\n</ai_agent_basic>\n\n<ai_agent_with_tools>\n```javascript\nconst openAiModel = languageModel({\n type: '@n8n/n8n-nodes-langchain.lmChatOpenAi',\n version: 1.3,\n config: {\n name: 'OpenAI Model',\n parameters: {},\n credentials: { openAiApi: newCredential('OpenAI') }\n }\n});\n\nconst calculatorTool = tool({\n type: '@n8n/n8n-nodes-langchain.toolCalculator',\n version: 1,\n config: { name: 'Calculator', parameters: {} }\n});\n\nconst startTrigger = trigger({\n type: 'n8n-nodes-base.manualTrigger',\n version: 1,\n config: { name: 'Start' }\n});\n\nconst aiAgent = node({\n type: '@n8n/n8n-nodes-langchain.agent',\n version: 3.1,\n config: {\n name: 'Math Agent',\n parameters: { promptType: 'define', text: 'You can use tools to help users' },\n subnodes: { model: openAiModel, tools: [calculatorTool] }\n }\n});\n\nexport default workflow('ai-calculator', 'AI Calculator')\n .add(startTrigger)\n .to(aiAgent);\n```\n\n</ai_agent_with_tools>\n\n<ai_agent_with_from_ai>\n```javascript\nconst openAiModel = languageModel({\n type: '@n8n/n8n-nodes-langchain.lmChatOpenAi',\n version: 1.3,\n config: {\n name: 'OpenAI Model',\n parameters: {},\n credentials: { openAiApi: newCredential('OpenAI') }\n }\n});\n\nconst gmailTool = tool({\n type: 'n8n-nodes-base.gmailTool',\n version: 1,\n config: {\n name: 'Gmail Tool',\n parameters: {\n sendTo: fromAi('recipient', 'Email address'),\n subject: fromAi('subject', 'Email subject'),\n message: fromAi('body', 'Email content')\n },\n credentials: { gmailOAuth2: newCredential('Gmail') }\n }\n});\n\nconst startTrigger = trigger({\n type: 'n8n-nodes-base.manualTrigger',\n version: 1,\n config: { name: 'Start' }\n});\n\nconst aiAgent = node({\n type: '@n8n/n8n-nodes-langchain.agent',\n version: 3.1,\n config: {\n name: 'Email Agent',\n parameters: { promptType: 'define', text: 'You can send emails' },\n subnodes: { model: openAiModel, tools: [gmailTool] }\n }\n});\n\nexport default workflow('ai-email', 'AI Email Sender')\n .add(startTrigger)\n .to(aiAgent);\n```\n</ai_agent_with_from_ai>\n\n<ai_agent_with_structured_output>\n```javascript\nconst structuredParser = outputParser({\n type: '@n8n/n8n-nodes-langchain.outputParserStructured',\n version: 1.3,\n config: {\n name: 'Structured Output Parser',\n parameters: {\n schemaType: 'fromJson',\n jsonSchemaExample: '{ \"sentiment\": \"positive\", \"confidence\": 0.95, \"summary\": \"brief summary\" }'\n }\n }\n});\n\nconst aiAgent = node({\n type: '@n8n/n8n-nodes-langchain.agent',\n version: 3.1,\n config: {\n name: 'Sentiment Analyzer',\n parameters: { promptType: 'define', text: 'Analyze the sentiment of the input text', hasOutputParser: true },\n subnodes: { model: openAiModel, outputParser: structuredParser }\n }\n});\n\nexport default workflow('ai-sentiment', 'AI Sentiment Analyzer')\n .add(startTrigger)\n .to(aiAgent);\n```\n</ai_agent_with_structured_output>";
2
2
  export { WORKFLOW_SDK_PATTERNS as WORKFLOW_PATTERNS_CONCISE };
@@ -65,15 +65,16 @@ const sourceB = node({ ..., config: { ..., executeOnce: true } });
65
65
  startTrigger.to(sourceA.to(sourceB.to(processResults)));
66
66
 
67
67
  // FIX 2 - parallel branches + Merge (combine by position)
68
+ // .input(n) is 0-based: .input(0) = first input, .input(1) = second input.
68
69
  const combineResults = merge({
69
70
  version: 3.2,
70
71
  config: { name: 'Combine Results', parameters: { mode: 'combine', combineBy: 'combineByPosition' } }
71
72
  });
72
73
  export default workflow('id', 'name')
73
74
  .add(startTrigger)
74
- .to(sourceA.to(combineResults.input(0)))
75
+ .to(sourceA.to(combineResults.input(0))) // first input (index 0)
75
76
  .add(startTrigger)
76
- .to(sourceB.to(combineResults.input(1)))
77
+ .to(sourceB.to(combineResults.input(1))) // second input (index 1)
77
78
  .add(combineResults)
78
79
  .to(processResults);
79
80
 
@@ -84,9 +85,9 @@ const allResults = merge({
84
85
  });
85
86
  export default workflow('id', 'name')
86
87
  .add(startTrigger)
87
- .to(sourceA.to(allResults.input(0)))
88
+ .to(sourceA.to(allResults.input(0))) // first input (index 0)
88
89
  .add(startTrigger)
89
- .to(sourceB.to(allResults.input(1)))
90
+ .to(sourceB.to(allResults.input(1))) // second input (index 1)
90
91
  .add(allResults)
91
92
  .to(processResults);
92
93
  \`\`\`
@@ -130,7 +131,7 @@ const hasResults = ifElse({
130
131
  parameters: {
131
132
  conditions: {
132
133
  options: { caseSensitive: true, typeValidation: 'loose' },
133
- conditions: [{ leftValue: '={{ $json.results }}', operator: { type: 'array', operation: 'notEmpty' } }],
134
+ conditions: [{ leftValue: expr('{{ $json.results }}'), operator: { type: 'array', operation: 'notEmpty' } }],
134
135
  combinator: 'and'
135
136
  }
136
137
  }
@@ -166,7 +167,7 @@ const checkValid = ifElse({
166
167
  parameters: {
167
168
  conditions: {
168
169
  options: { caseSensitive: true, leftValue: '', typeValidation: 'strict' },
169
- conditions: [{ leftValue: '={{ $json.status }}', operator: { type: 'string', operation: 'equals' }, rightValue: 'active' }],
170
+ conditions: [{ leftValue: expr('{{ $json.status }}'), operator: { type: 'string', operation: 'equals' }, rightValue: 'active' }],
170
171
  combinator: 'and'
171
172
  }
172
173
  }
@@ -193,8 +194,8 @@ const routeByPriority = switchCase({
193
194
  parameters: {
194
195
  rules: {
195
196
  values: [
196
- { outputKey: 'urgent', conditions: { options: { caseSensitive: true, leftValue: '', typeValidation: 'strict' }, conditions: [{ leftValue: '={{ $json.priority }}', operator: { type: 'string', operation: 'equals' }, rightValue: 'urgent' }], combinator: 'and' } },
197
- { outputKey: 'normal', conditions: { options: { caseSensitive: true, leftValue: '', typeValidation: 'strict' }, conditions: [{ leftValue: '={{ $json.priority }}', operator: { type: 'string', operation: 'equals' }, rightValue: 'normal' }], combinator: 'and' } },
197
+ { outputKey: 'urgent', conditions: { options: { caseSensitive: true, leftValue: '', typeValidation: 'strict' }, conditions: [{ leftValue: expr('{{ $json.priority }}'), operator: { type: 'string', operation: 'equals' }, rightValue: 'urgent' }], combinator: 'and' } },
198
+ { outputKey: 'normal', conditions: { options: { caseSensitive: true, leftValue: '', typeValidation: 'strict' }, conditions: [{ leftValue: expr('{{ $json.priority }}'), operator: { type: 'string', operation: 'equals' }, rightValue: 'normal' }], combinator: 'and' } },
198
199
  ]
199
200
  }
200
201
  }
@@ -224,12 +225,13 @@ const branch1 = node({ type: 'n8n-nodes-base.httpRequest', ... });
224
225
  const branch2 = node({ type: 'n8n-nodes-base.httpRequest', ... });
225
226
  const processResults = node({ type: 'n8n-nodes-base.set', ... });
226
227
 
227
- // Connect branches to specific merge inputs using .input(n)
228
+ // Connect branches to specific merge inputs using .input(n).
229
+ // Indices are 0-based: .input(0) is the FIRST input, .input(1) is the SECOND.
228
230
  export default workflow('id', 'name')
229
231
  .add(trigger({ ... }))
230
- .to(branch1.to(combineResults.input(0))) // Connect to input 0
232
+ .to(branch1.to(combineResults.input(0))) // first input (index 0)
231
233
  .add(trigger({ ... }))
232
- .to(branch2.to(combineResults.input(1))) // Connect to input 1
234
+ .to(branch2.to(combineResults.input(1))) // second input (index 1)
233
235
  .add(combineResults)
234
236
  .to(processResults); // Process merged results
235
237
  \`\`\`
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-patterns.js","sourceRoot":"","sources":["../../../src/prompts/sdk-reference/workflow-patterns.ts"],"names":[],"mappings":";;;AAUA,MAAM,UAAU,GACf,8RAA8R,CAAC;AAMnR,QAAA,qBAAqB,GAAG;;EAEnC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCA0hBuB,CAAC;AAEF,oCA9hBrB,6BAAqB,CA8hByB"}
1
+ {"version":3,"file":"workflow-patterns.js","sourceRoot":"","sources":["../../../src/prompts/sdk-reference/workflow-patterns.ts"],"names":[],"mappings":";;;AAUA,MAAM,UAAU,GACf,8RAA8R,CAAC;AAMnR,QAAA,qBAAqB,GAAG;;EAEnC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCA4hBuB,CAAC;AAEF,oCAhiBrB,6BAAqB,CAgiByB"}
@@ -1 +1 @@
1
- export declare const WORKFLOW_RULES = "Follow these rules strictly when generating workflows:\n\n1. **Always use newCredential() for authentication**\n - When a node needs credentials, always use `newCredential('Name')` in the credentials config\n - NEVER use placeholder strings, fake API keys, or hardcoded auth values\n - Example: `credentials: { slackApi: newCredential('Slack Bot') }`\n - The credential type must match what the node expects\n\n2. **Trust empty item lists \u2014 don't synthesize fake items**\n - When a query returns 0 items, downstream nodes simply don't run for that execution. For scheduled or polling triggers this is the correct \"nothing to do this round\" signal \u2014 the next run will execute normally when data appears.\n - DO NOT add `alwaysOutputData: true` just to \"keep the chain alive.\" Forcing an empty `{}` item downstream is what causes `undefined` reads, failed HTTP calls to `GET undefined`, and Code-node crashes on missing fields.\n - DO NOT add an IF gate before a loop to check \"has items?\" \u2014 loops (`splitInBatches`, per-item nodes, `filter`) already no-op on empty input. The gate is redundant and adds a failure surface.\n - `alwaysOutputData: true` is only correct when you specifically need a downstream branch to run on the \"empty\" case \u2014 e.g. a dedicated \"no matches found\" notification path. In that case, pair it with an `IF` that explicitly checks for the empty case and routes accordingly. Never use it as a default.\n - To drop invalid items mid-pipeline, use a `filter` node. A `filter` that rejects everything emits 0 items and the chain correctly stops \u2014 no `IF` + `splitInBatches` composition needed.\n\n3. **Use `executeOnce: true` for single-execution nodes**\n - When a node receives N items but should only execute once (not N times), set `executeOnce: true`\n - Common cases: sending a summary notification, generating a report, calling an API that doesn't need per-item execution\n - Example: `config: { ..., executeOnce: true }`\n\n4. **Pick the right control-flow primitive**\n - **Per-item loop with side effects (fetch, embed, write)** \u2192 `splitInBatches` with `batchSize: 1` feeding the per-item work, loop back via `nextBatch`. No `IF` gate before it.\n - **Drop items that don't match a predicate** \u2192 `filter`. It emits 0 items when nothing matches, and the chain stops cleanly.\n - **Two mutually exclusive paths that both do real work** \u2192 `IF` (`onTrue` / `onFalse`).\n - **Many mutually exclusive paths keyed off a value** \u2192 `switch` (`onCase`).\n - Nested control flow is supported: `ifNode.onTrue(loopBuilder)`, `switchNode.onCase(0, loopBuilder)`, and `splitInBatches(sib).onEachBatch(ifElseBuilder)` all compile and wire correctly. Use them when the semantics genuinely call for it, not as a workaround for empty-list handling.";
1
+ export declare const WORKFLOW_RULES = "Follow these rules strictly when generating workflows:\n\n1. **Always use newCredential() for authentication**\n - When a node needs credentials, always use `newCredential('Name')` in the credentials config\n - NEVER use placeholder strings, fake API keys, or hardcoded auth values\n - Never synthesize credential IDs. Do not invent raw IDs such as `WHATSAPP_CREDENTIAL_ID`, `mock-gmail-oauth2`, or any `mock-*` value\n - If `availableCredentials` is provided, treat it as an allow-list: copy an existing credential ID exactly or use `newCredential('Name')` without an ID\n - Example: `credentials: { slackApi: newCredential('Slack Bot') }`\n - The credential type must match what the node expects\n\n2. **Trust empty item lists \u2014 don't synthesize fake items**\n - When a query returns 0 items, downstream nodes simply don't run for that execution. For scheduled or polling triggers this is the correct \"nothing to do this round\" signal \u2014 the next run will execute normally when data appears.\n - DO NOT add `alwaysOutputData: true` just to \"keep the chain alive.\" Forcing an empty `{}` item downstream is what causes `undefined` reads, failed HTTP calls to `GET undefined`, and Code-node crashes on missing fields.\n - DO NOT add an IF gate before a loop to check \"has items?\" \u2014 loops (`splitInBatches`, per-item nodes, `filter`) already no-op on empty input. The gate is redundant and adds a failure surface.\n - `alwaysOutputData: true` is only correct when you specifically need a downstream branch to run on the \"empty\" case \u2014 e.g. a dedicated \"no matches found\" notification path. In that case, pair it with an `IF` that explicitly checks for the empty case and routes accordingly. Never use it as a default.\n - To drop invalid items mid-pipeline, use a `filter` node. A `filter` that rejects everything emits 0 items and the chain correctly stops \u2014 no `IF` + `splitInBatches` composition needed.\n\n3. **Use `executeOnce: true` for single-execution nodes**\n - When a node receives N items but should only execute once (not N times), set `executeOnce: true`\n - Common cases: sending a summary notification, generating a report, calling an API that doesn't need per-item execution\n - Example: `config: { ..., executeOnce: true }`\n\n4. **Pick the right control-flow primitive**\n - **Per-item loop with side effects (fetch, embed, write)** \u2192 `splitInBatches` with `batchSize: 1` feeding the per-item work, loop back via `nextBatch`. No `IF` gate before it.\n - **Drop items that don't match a predicate** \u2192 `filter`. It emits 0 items when nothing matches, and the chain stops cleanly.\n - **Two mutually exclusive paths that both do real work** \u2192 `IF` (`onTrue` / `onFalse`).\n - **Many mutually exclusive paths keyed off a value** \u2192 `switch` (`onCase`).\n - Nested control flow is supported: `ifNode.onTrue(loopBuilder)`, `switchNode.onCase(0, loopBuilder)`, and `splitInBatches(sib).onEachBatch(ifElseBuilder)` all compile and wire correctly. Use them when the semantics genuinely call for it, not as a workaround for empty-list handling.\n\n5. **Input and output indices are 0-based \u2014 `.input(0)` is the FIRST input**\n - `.input(0)` and `.output(0)` refer to the **first** input/output. `.input(1)` and `.output(1)` refer to the **second**. `.input(1)` is NOT the first input \u2014 it is the second one.\n - This applies everywhere indices are passed: `.input(n)`, `.output(n)`, `.onCase(n, ...)` for switch outputs, and any `outputIndex` argument.\n - When wiring N branches to a Merge node, the indices are `0, 1, ..., N-1` \u2014 never `1, 2, ..., N`.\n - Counter-examples to AVOID:\n - WRONG: `sourceA.to(merge.input(1))` followed by `sourceB.to(merge.input(2))` \u2014 this skips input 0 entirely; the first branch is silently dropped.\n - CORRECT: `sourceA.to(merge.input(0))` followed by `sourceB.to(merge.input(1))`.";
@@ -6,6 +6,8 @@ exports.WORKFLOW_RULES = `Follow these rules strictly when generating workflows:
6
6
  1. **Always use newCredential() for authentication**
7
7
  - When a node needs credentials, always use \`newCredential('Name')\` in the credentials config
8
8
  - NEVER use placeholder strings, fake API keys, or hardcoded auth values
9
+ - Never synthesize credential IDs. Do not invent raw IDs such as \`WHATSAPP_CREDENTIAL_ID\`, \`mock-gmail-oauth2\`, or any \`mock-*\` value
10
+ - If \`availableCredentials\` is provided, treat it as an allow-list: copy an existing credential ID exactly or use \`newCredential('Name')\` without an ID
9
11
  - Example: \`credentials: { slackApi: newCredential('Slack Bot') }\`
10
12
  - The credential type must match what the node expects
11
13
 
@@ -26,5 +28,13 @@ exports.WORKFLOW_RULES = `Follow these rules strictly when generating workflows:
26
28
  - **Drop items that don't match a predicate** → \`filter\`. It emits 0 items when nothing matches, and the chain stops cleanly.
27
29
  - **Two mutually exclusive paths that both do real work** → \`IF\` (\`onTrue\` / \`onFalse\`).
28
30
  - **Many mutually exclusive paths keyed off a value** → \`switch\` (\`onCase\`).
29
- - Nested control flow is supported: \`ifNode.onTrue(loopBuilder)\`, \`switchNode.onCase(0, loopBuilder)\`, and \`splitInBatches(sib).onEachBatch(ifElseBuilder)\` all compile and wire correctly. Use them when the semantics genuinely call for it, not as a workaround for empty-list handling.`;
31
+ - Nested control flow is supported: \`ifNode.onTrue(loopBuilder)\`, \`switchNode.onCase(0, loopBuilder)\`, and \`splitInBatches(sib).onEachBatch(ifElseBuilder)\` all compile and wire correctly. Use them when the semantics genuinely call for it, not as a workaround for empty-list handling.
32
+
33
+ 5. **Input and output indices are 0-based — \`.input(0)\` is the FIRST input**
34
+ - \`.input(0)\` and \`.output(0)\` refer to the **first** input/output. \`.input(1)\` and \`.output(1)\` refer to the **second**. \`.input(1)\` is NOT the first input — it is the second one.
35
+ - This applies everywhere indices are passed: \`.input(n)\`, \`.output(n)\`, \`.onCase(n, ...)\` for switch outputs, and any \`outputIndex\` argument.
36
+ - When wiring N branches to a Merge node, the indices are \`0, 1, ..., N-1\` — never \`1, 2, ..., N\`.
37
+ - Counter-examples to AVOID:
38
+ - WRONG: \`sourceA.to(merge.input(1))\` followed by \`sourceB.to(merge.input(2))\` — this skips input 0 entirely; the first branch is silently dropped.
39
+ - CORRECT: \`sourceA.to(merge.input(0))\` followed by \`sourceB.to(merge.input(1))\`.`;
30
40
  //# sourceMappingURL=workflow-rules.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-rules.js","sourceRoot":"","sources":["../../../src/prompts/sdk-reference/workflow-rules.ts"],"names":[],"mappings":";;;AAQa,QAAA,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;qSAyBuQ,CAAC"}
1
+ {"version":3,"file":"workflow-rules.js","sourceRoot":"","sources":["../../../src/prompts/sdk-reference/workflow-rules.ts"],"names":[],"mappings":";;;AAQa,QAAA,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2FAmC6D,CAAC"}
@@ -26,10 +26,6 @@ export interface NewCredentialValue {
26
26
  readonly name: string;
27
27
  readonly id?: string;
28
28
  }
29
- export interface PlaceholderValue {
30
- readonly __placeholder: true;
31
- readonly hint: string;
32
- }
33
29
  export type OnError = 'stopWorkflow' | 'continueRegularOutput' | 'continueErrorOutput';
34
30
  export interface WorkflowSettings {
35
31
  timezone?: string;
@@ -136,7 +132,9 @@ export interface WorkflowContext {
136
132
  }
137
133
  export interface NodeConfig<TParams = IDataObject> {
138
134
  parameters?: TParams;
139
- credentials?: Record<string, CredentialReference | NewCredentialValue | PlaceholderValue>;
135
+ credentials?: Record<string, string | CredentialReference | NewCredentialValue | {
136
+ value: string;
137
+ }>;
140
138
  name?: string;
141
139
  position?: [number, number];
142
140
  webhookId?: string;
@@ -236,8 +234,8 @@ export interface SwitchCaseComposite {
236
234
  readonly switchNode: NodeInstance<'n8n-nodes-base.switch', string, unknown>;
237
235
  readonly cases: Array<NodeInstance<string, string, unknown> | Array<NodeInstance<string, string, unknown>> | null>;
238
236
  }
239
- export type IfElseTarget = null | NodeInstance<string, string, unknown> | NodeChain<NodeInstance<string, string, unknown>, NodeInstance<string, string, unknown>> | Array<NodeInstance<string, string, unknown> | NodeChain<NodeInstance<string, string, unknown>, NodeInstance<string, string, unknown>>> | IfElseBuilder<unknown> | SwitchCaseBuilder<unknown> | SplitInBatchesBuilder<unknown>;
240
- export type SwitchCaseTarget = null | NodeInstance<string, string, unknown> | NodeChain<NodeInstance<string, string, unknown>, NodeInstance<string, string, unknown>> | Array<NodeInstance<string, string, unknown> | NodeChain<NodeInstance<string, string, unknown>, NodeInstance<string, string, unknown>>> | IfElseBuilder<unknown> | SwitchCaseBuilder<unknown> | SplitInBatchesBuilder<unknown>;
237
+ export type IfElseTarget = null | NodeInstance<string, string, unknown> | NodeChain<NodeInstance<string, string, unknown>, NodeInstance<string, string, unknown>> | Array<NodeInstance<string, string, unknown> | NodeChain<NodeInstance<string, string, unknown>, NodeInstance<string, string, unknown>>> | IfElseBuilder<unknown> | SwitchCaseBuilder<unknown> | SplitInBatchesBuilder<unknown> | InputTarget;
238
+ export type SwitchCaseTarget = null | NodeInstance<string, string, unknown> | NodeChain<NodeInstance<string, string, unknown>, NodeInstance<string, string, unknown>> | Array<NodeInstance<string, string, unknown> | NodeChain<NodeInstance<string, string, unknown>, NodeInstance<string, string, unknown>>> | IfElseBuilder<unknown> | SwitchCaseBuilder<unknown> | SplitInBatchesBuilder<unknown> | InputTarget;
241
239
  export type SplitInBatchesTarget = null | NodeInstance<string, string, unknown> | NodeChain<NodeInstance<string, string, unknown>, NodeInstance<string, string, unknown>> | Array<NodeInstance<string, string, unknown> | NodeChain<NodeInstance<string, string, unknown>, NodeInstance<string, string, unknown>>> | IfElseBuilder<unknown> | SwitchCaseBuilder<unknown> | SplitInBatchesBuilder<unknown>;
242
240
  export interface IfElseBuilder<TOutput = unknown> {
243
241
  readonly _isIfElseBuilder: true;
@@ -322,7 +320,7 @@ export type WorkflowFn = WorkflowBuilderStatic;
322
320
  export type NodeFn = <TNode extends NodeInput>(input: TNode) => NodeInstance<TNode['type'], `${TNode['version']}`, unknown>;
323
321
  export type TriggerFn = <TTrigger extends TriggerInput>(input: TTrigger) => TriggerInstance<TTrigger['type'], `${TTrigger['version']}`, unknown>;
324
322
  export type StickyFn = (content: string, nodes?: Array<NodeInstance<string, string, unknown>>, config?: StickyNoteConfig) => NodeInstance<'n8n-nodes-base.stickyNote', 'v1', void>;
325
- export type PlaceholderFn = (hint: string) => PlaceholderValue;
323
+ export type PlaceholderFn = (hint: string) => string;
326
324
  export type NewCredentialFn = (name: string, id?: string) => NewCredentialValue;
327
325
  export type IfElseFn = (branches: [
328
326
  NodeInstance<string, string, unknown> | null,
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/types/base.ts"],"names":[],"mappings":";;AA+KA,0DAWC;AAoBD,gEA+BC;AAQD,oDAqCC;AAUD,gDAQC;AAoUD,kCAWC;AAKD,wCAQC;AAzdD,SAAgB,uBAAuB,CAAC,IAAY,EAAE,UAAwB;IAC7E,IAAI,IAAI,KAAK,mBAAmB;QAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,IAAI,KAAK,uBAAuB,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,UAAU,EAAE,KAA8D,CAAC;QACzF,MAAM,UAAU,GAAG,KAAK,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,CAAC;QACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,OAAO,QAAQ,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,IAAI,KAAK,+BAA+B;QAAE,OAAO,CAAC,CAAC;IACvD,IAAI,IAAI,KAAK,sBAAsB;QAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,CAAC,CAAC;AACV,CAAC;AAoBD,SAAgB,0BAA0B,CACzC,WAAyB,EACzB,KAAqC;IAErC,MAAM,UAAU,GAAG,IAAI,GAAG,EAA8B,CAAC;IACzD,IAAI,KAAK,EAAE,CAAC;QACX,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,CAAC,IAAI;gBAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;IACF,CAAC;IAED,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACjE,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAExE,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,SAAS,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAExE,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnF,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAIjE,OAAO,IAAI,CAAC,MAAM,GAAG,WAAW;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,YAAY,CAAC,CAAC;QACnD,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;IACvB,CAAC;AACF,CAAC;AAQD,SAAgB,oBAAoB,CAAC,WAAyB;IAC7D,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QACpD,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;gBAAE,SAAS;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAY,CAAC;gBACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAEnC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACxE,OAAO,CAAC,CAAC,CAAC,GAAG;wBACZ;4BACC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;4BACb,IAAI,EAAG,IAAI,CAAC,CAAC,CAAY,IAAI,MAAM;4BACnC,KAAK,EAAG,IAAI,CAAC,CAAC,CAAY,IAAI,CAAC;yBAC/B;qBACD,CAAC;gBACH,CAAC;YACF,CAAC;YACD,SAAS,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;QAC/B,CAAC;IACF,CAAC;IAID,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QACpD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;gBAAE,SAAS;YACtC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACnC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;oBACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;wBAC3E,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;oBAChB,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;AACF,CAAC;AAUD,SAAgB,kBAAkB,CAAC,QAAgB,EAAE,MAAiC;IACrF,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,UAAU,GAAG,GAAG,QAAQ,IAAI,OAAO,EAAE,CAAC;IAC1C,OAAO,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;QACV,UAAU,GAAG,GAAG,QAAQ,IAAI,OAAO,EAAE,CAAC;IACvC,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAoUD,SAAgB,WAAW,CAC1B,KAAc;IAKd,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEzC,MAAM,YAAY,GAAI,KAAiC,CAAC,QAAQ,CAAC;IACjE,OAAO,YAAY,KAAK,IAAI,CAAC;AAC9B,CAAC;AAKD,SAAgB,cAAc,CAAC,KAAc;IAC5C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACpF,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAI,KAAiC,CAAC,EAAE,CAAC;IACrD,OAAO,OAAO,MAAM,KAAK,UAAU,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/types/base.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { INodeTypes } from 'n8n-workflow';
2
2
  import type { WorkflowBuilder, WorkflowJSON } from '../types/base';
3
- export { setSchemaBaseDirs } from './schema-validator';
3
+ export { setSchemaBaseDirs, validateNodeConfig, type SchemaValidationResult, } from './schema-validator';
4
4
  export type ValidationErrorCode = 'NO_NODES' | 'MISSING_TRIGGER' | 'DISCONNECTED_NODE' | 'MISSING_PARAMETER' | 'INVALID_CONNECTION' | 'CIRCULAR_REFERENCE' | 'INVALID_EXPRESSION' | 'AGENT_STATIC_PROMPT' | 'AGENT_NO_SYSTEM_MESSAGE' | 'HARDCODED_CREDENTIALS' | 'SET_CREDENTIAL_FIELD' | 'MERGE_SINGLE_INPUT' | 'TOOL_NO_PARAMETERS' | 'FROM_AI_IN_NON_TOOL' | 'MISSING_EXPRESSION_PREFIX' | 'INVALID_PARAMETER' | 'INVALID_INPUT_INDEX' | 'SUBNODE_NOT_CONNECTED' | 'SUBNODE_PARAMETER_MISMATCH' | 'UNSUPPORTED_SUBNODE_INPUT' | 'MISSING_REQUIRED_INPUT' | 'INVALID_OUTPUT_FOR_MODE' | 'MAX_NODES_EXCEEDED' | 'INVALID_EXPRESSION_PATH' | 'PARTIAL_EXPRESSION_PATH' | 'INVALID_DATE_METHOD';
5
5
  export declare class ValidationError {
6
6
  readonly code: ValidationErrorCode;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ValidationWarning = exports.ValidationError = exports.setSchemaBaseDirs = void 0;
6
+ exports.ValidationWarning = exports.ValidationError = exports.validateNodeConfig = exports.setSchemaBaseDirs = void 0;
7
7
  exports.validateWorkflow = validateWorkflow;
8
8
  const get_1 = __importDefault(require("lodash/get"));
9
9
  const n8n_workflow_1 = require("n8n-workflow");
@@ -11,8 +11,10 @@ const display_options_1 = require("./display-options");
11
11
  const input_resolver_1 = require("./input-resolver");
12
12
  const schema_validator_1 = require("./schema-validator");
13
13
  const node_types_1 = require("../constants/node-types");
14
+ const string_utils_1 = require("../workflow-builder/string-utils");
14
15
  var schema_validator_2 = require("./schema-validator");
15
16
  Object.defineProperty(exports, "setSchemaBaseDirs", { enumerable: true, get: function () { return schema_validator_2.setSchemaBaseDirs; } });
17
+ Object.defineProperty(exports, "validateNodeConfig", { enumerable: true, get: function () { return schema_validator_2.validateNodeConfig; } });
16
18
  class ValidationError {
17
19
  constructor(code, message, nodeName, parameterName, violationLevel) {
18
20
  this.code = code;
@@ -250,6 +252,7 @@ function validateWorkflow(workflowOrJson, options = {}) {
250
252
  validateParentSupportsInputs(json, options.nodeTypesProvider, warnings);
251
253
  validateRequiredInputsConnected(json, options.nodeTypesProvider, errors);
252
254
  validateOutputUsage(json, options.nodeTypesProvider, warnings);
255
+ validatePlaceholderSlots(json, options.nodeTypesProvider, errors);
253
256
  }
254
257
  checkMergeNodeInputCount(json, warnings);
255
258
  return {
@@ -535,6 +538,26 @@ function validateOutputUsage(json, nodeTypesProvider, warnings) {
535
538
  }
536
539
  }
537
540
  }
541
+ function validatePlaceholderSlots(json, nodeTypesProvider, errors) {
542
+ for (const node of json.nodes) {
543
+ if (!node.name || !node.parameters)
544
+ continue;
545
+ const version = typeof node.typeVersion === 'string' ? parseFloat(node.typeVersion) : (node.typeVersion ?? 1);
546
+ const nodeType = nodeTypesProvider.getByNameAndVersion(node.type, version);
547
+ const properties = nodeType?.description?.properties;
548
+ if (!properties)
549
+ continue;
550
+ const params = node.parameters;
551
+ for (const prop of properties) {
552
+ if (prop.builderHint?.placeholderSupported !== false)
553
+ continue;
554
+ const value = params[prop.name];
555
+ if (!(0, string_utils_1.containsPlaceholderMarker)(value))
556
+ continue;
557
+ errors.push(new ValidationError('INVALID_PARAMETER', `Node "${node.name}": placeholder() is not supported for parameter '${prop.name}'. Use a literal value or expr() instead.`, node.name, prop.name));
558
+ }
559
+ }
560
+ }
538
561
  function checkNodeInputIndices(json, nodeTypesProvider, warnings) {
539
562
  const nodesByName = new Map();
540
563
  for (const node of json.nodes) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":";;;;;;AAwWA,4CAsJC;AA9fD,qDAA6B;AAE7B,+CAA2D;AAE3D,uDAA0D;AAE1D,qDAAyD;AACzD,yDAAwD;AACxD,wDAA8E;AAG9E,uDAAuD;AAA9C,qHAAA,iBAAiB,OAAA;AAoC1B,MAAa,eAAe;IAQ3B,YACC,IAAyB,EACzB,OAAe,EACf,QAAiB,EACjB,aAAsB,EACtB,cAA+C;QAE/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACtC,CAAC;CACD;AArBD,0CAqBC;AAKD,MAAa,iBAAiB;IAS7B,YACC,IAAyB,EACzB,OAAe,EACf,QAAiB,EACjB,aAAsB,EACtB,YAAqB,EACrB,cAA+C;QAE/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACtC,CAAC;CACD;AAxBD,8CAwBC;AAiCD,SAAS,aAAa,CAAC,IAAY;IAClC,OAAO,CACN,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CACrB,CAAC;AACH,CAAC;AAKD,MAAM,mBAAmB,GAAG;IAC3B,kBAAkB;IAClB,WAAW;IACX,SAAS;IACT,iBAAiB;IACjB,cAAc;IACd,gBAAgB;IAChB,cAAc;IACd,aAAa;IACb,iBAAiB;IACjB,aAAa;CACb,CAAC;AAKF,MAAM,8BAA8B,GAA2B;IAC9D,gBAAgB,EAAE,OAAO;IACzB,SAAS,EAAE,QAAQ;IACnB,OAAO,EAAE,OAAO;IAChB,eAAe,EAAE,cAAc;IAC/B,YAAY,EAAE,WAAW;IACzB,cAAc,EAAE,aAAa;IAC7B,YAAY,EAAE,WAAW;IACzB,WAAW,EAAE,gBAAgB;IAC7B,eAAe,EAAE,cAAc;IAC/B,WAAW,EAAE,UAAU;CACvB,CAAC;AAKF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAgB5C,SAAS,kCAAkC,CAC1C,cAAsB,EACtB,IAAkB;IAElB,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;IAGhD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;IACF,CAAC;IAGD,KAAK,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAClF,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE,CAAC;YAC5C,MAAM,OAAO,GAAG,eAAe,CAAC,QAAwC,CAAC,CAAC;YAC1E,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;gBAAE,SAAS;YAElD,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;gBAC/B,IAAI,CAAC,OAAO;oBAAE,SAAS;gBACvB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;oBAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;wBAElC,MAAM,YAAY,GAAG,8BAA8B,CAAC,QAAQ,CAAC,CAAC;wBAC9D,IAAI,CAAC,YAAY;4BAAE,SAAS;wBAE5B,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;wBACnD,IAAI,CAAC,UAAU;4BAAE,SAAS;wBAG1B,MAAM,aAAa,GAAG;4BACrB,IAAI,EAAE,UAAU,CAAC,IAAI;4BACrB,OAAO,EAAE,UAAU,CAAC,WAAW;4BAC/B,UAAU,EAAE,UAAU,CAAC,UAAU,IAAI,EAAE;yBACvC,CAAC;wBAGF,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;4BAClC,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;4BACxC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gCAC7B,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;4BAC9B,CAAC;iCAAM,CAAC;gCACP,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;4BAC1C,CAAC;wBACF,CAAC;6BAAM,CAAC;4BAEP,QAAQ,CAAC,YAAY,CAAC,GAAG,aAAa,CAAC;wBACxC,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAGD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAChE,CAAC;AAKD,SAAS,uBAAuB,CAAC,QAAgB,EAAE,IAAkB;IACpE,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,CAAC,eAAe;QAAE,OAAO,KAAK,CAAC;IAEnC,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,eAAe,CAAC,QAAwC,CAAC,CAAC;QAC1E,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;gBAC/B,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnC,OAAO,IAAI,CAAC;gBACb,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAKD,SAAS,aAAa,CAAC,QAAgB,EAAE,IAAkB;IAC1D,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,CAAC,eAAe;QAAE,OAAO,KAAK,CAAC;IAEnC,MAAM,SAAS,GAAG,eAAe,CAAC,OAAoD,CAAC;IACvF,IAAI,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3C,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC;YACb,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAKD,SAAS,qBAAqB,CAAC,IAAkB;IAChD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IAGtC,KAAK,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/E,IAAI,eAAe,CAAC,IAAI,EAAE,CAAC;YAC1B,KAAK,MAAM,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,OAAO,EAAE,CAAC;oBACb,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE,CAAC;wBAClC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAClC,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAGD,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAE/B,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,SAAS;QAGzB,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAGzC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAGvC,IAAI,IAAA,6BAAgB,EAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAG1C,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;YAAE,SAAS;QAEvD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,YAAY,CAAC;AACrB,CAAC;AA2BD,SAAgB,gBAAgB,CAC/B,cAA8C,EAC9C,UAA6B,EAAE;IAG/B,MAAM,IAAI,GAAiB,QAAQ,IAAI,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;IAEjG,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAwB,EAAE,CAAC;IAGzC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,QAAQ,CAAC,IAAI,CACZ,IAAI,iBAAiB,CACpB,iBAAiB,EACjB,oEAAoE,CACpE,CACD,CAAC;QACH,CAAC;IACF,CAAC;IAGD,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;QACrC,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACjD,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;YACrC,QAAQ,CAAC,IAAI,CACZ,IAAI,iBAAiB,CACpB,mBAAmB,EACnB,SAAS,QAAQ,4DAA4D,EAC7E,QAAQ,CACR,CACD,CAAC;QACH,CAAC;IACF,CAAC;IAGD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QAExB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAE/B,IAAI,IAAA,8BAAiB,EAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC;oBAC3D,QAAQ,CAAC,IAAI,CACZ,IAAI,iBAAiB,CACpB,mBAAmB,EACnB,sBAAsB,IAAI,CAAC,IAAI,gCAAgC,EAC/D,IAAI,CAAC,IAAI,CACT,CACD,CAAC;gBACH,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAGD,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAE/B,MAAM,OAAO,GACZ,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;gBACnC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;gBAC9B,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;YAG5B,MAAM,MAAM,GAAiD,EAAE,CAAC;YAChE,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACnC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACrC,CAAC;YAED,MAAM,gBAAgB,GAAG,IAA4C,CAAC;YACtE,IAAI,gBAAgB,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC7C,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC;YAC7C,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAGtB,MAAM,aAAa,GAAG,kCAAkC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC1E,IAAI,aAAa,EAAE,CAAC;oBACnB,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC;gBACjC,CAAC;YACF,CAAC;YAID,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAEtE,MAAM,YAAY,GAAG,IAAA,qCAAkB,EAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpF,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;gBACzB,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;oBACzC,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;oBAG5B,IACC,KAAK,CAAC,IAAI,KAAK,UAAU;wBACzB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;wBACjC,OAAO,CAAC,iBAAiB,EACxB,CAAC;wBACF,MAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;wBACnF,MAAM,WAAW,GAAG,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC;wBAC/D,IAAI,WAAW,EAAE,CAAC;4BACjB,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;iCAC5C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC;iCAC7C,MAAM,CAAC,OAAO,CAAC,CAAC;4BAClB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCAG9B,OAAO,GAAG,OAAO,CAAC,OAAO,CACxB,0CAA0C,EAC1C,kDAAkD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC7E,CAAC;4BACH,CAAC;wBACF,CAAC;oBACF,CAAC;oBAGD,QAAQ,CAAC,IAAI,CACZ,IAAI,iBAAiB,CACpB,mBAAmB,EACnB,SAAS,IAAI,CAAC,IAAI,MAAM,OAAO,EAAE,EACjC,IAAI,CAAC,IAAI,CACT,CACD,CAAC;gBACH,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAGD,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC/B,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAEjE,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAErE,4BAA4B,CAAC,IAAI,EAAE,OAAO,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAExE,+BAA+B,CAAC,IAAI,EAAE,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAEzE,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC;IAGD,wBAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEzC,OAAO;QACN,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;QACN,QAAQ;KACR,CAAC;AACH,CAAC;AAYD,SAAS,wBAAwB,CAAC,IAAkB,EAAE,QAA6B;IAClF,MAAM,iBAAiB,GAAG,IAAA,0CAA2B,EACpD,IAAI,CAAC,WAAyC,CAC9C,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,SAAS;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAsB;YAAE,SAAS;QAEnD,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC;QACxD,MAAM,cAAc,GAAG,OAAO,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QAErF,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;QACxD,IAAI,CAAC,YAAY;YAAE,SAAS;QAE5B,IAAI,iBAAiB,GAAG,CAAC,CAAC,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,iBAAiB,GAAG,CAAC,CAAC;YACvB,CAAC;QACF,CAAC;QAED,IAAI,iBAAiB,IAAI,cAAc,EAAE,CAAC;YACzC,QAAQ,CAAC,IAAI,CACZ,IAAI,iBAAiB,CACpB,qBAAqB,EACrB,eAAe,IAAI,CAAC,IAAI,qCAAqC,iBAAiB,0BAA0B,cAAc,2BAA2B,iBAAiB,GAAG,CAAC,+BAA+B,EACrM,IAAI,CAAC,IAAI,EACT,cAAc,EACd,SAAS,EACT,OAAO,CACP,CACD,CAAC;QACH,CAAC;IACF,CAAC;AACF,CAAC;AAKD,MAAM,6BAA6B,GAA2B;IAC7D,gBAAgB,EAAE,iBAAiB;IACnC,SAAS,EAAE,UAAU;IACrB,OAAO,EAAE,QAAQ;IACjB,eAAe,EAAE,gBAAgB;IACjC,YAAY,EAAE,cAAc;IAC5B,cAAc,EAAE,eAAe;IAC/B,YAAY,EAAE,aAAa;IAC3B,WAAW,EAAE,kBAAkB;IAC/B,eAAe,EAAE,gBAAgB;IACjC,WAAW,EAAE,YAAY;CACzB,CAAC;AAKF,SAAS,wBAAwB,CAChC,aAAsC,EACtC,cAA+B;IAK/B,MAAM,UAAU,GAAmE,EAAE,CAAC;IAEtF,IAAI,CAAC,cAAc,CAAC,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAE/D,KAAK,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/E,IAAI,CAAC,cAAc;YAAE,SAAS;QAC9B,MAAM,WAAW,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAoB,CAAC,EAAE,CAAC;YACpD,UAAU,CAAC,IAAI,CAAC;gBACf,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,cAA2B;gBACrC,MAAM,EAAE,WAAW;aACnB,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;AACzD,CAAC;AASD,SAAS,yBAAyB,CACjC,IAAkB,EAClB,iBAA6B,EAC7B,QAA6B;IAG7B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;IACF,CAAC;IAID,MAAM,iBAAiB,GAAG,IAAA,0CAA2B,EACpD,IAAI,CAAC,WAAyC,CAC9C,CAAC;IAGF,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,IAAI;YAAE,SAAS;QAG/B,MAAM,cAAc,GAAG,iBAAiB,CAAC,mBAAmB,CAC3D,UAAU,CAAC,IAAI,EACf,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ;YACzC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC;YACpC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC,CAChC,CAAC;QACF,MAAM,iBAAiB,GAAG,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC;QAC3E,IAAI,CAAC,iBAAiB;YAAE,SAAS;QAGjC,KAAK,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC/E,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC;gBAAE,SAAS;YAChD,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,IAAI;gBAAE,SAAS;YAGjD,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;YACjF,IAAI,CAAC,mBAAmB;gBAAE,SAAS;YAEnC,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE,CAAC;gBAC5C,IAAI,CAAC,QAAQ;oBAAE,SAAS;gBACxB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;oBAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;oBAC9B,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBAC7C,IAAI,CAAC,OAAO,EAAE,UAAU;wBAAE,SAAS;oBAGnC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,wBAAwB,CACvD,OAAO,CAAC,UAAU,EAClB,WAAW,CAAC,cAAc,CAC1B,CAAC;oBAEF,IAAI,CAAC,OAAO,EAAE,CAAC;wBAQd,MAAM,mBAAmB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;wBAC3E,IAAI,CAAC,mBAAmB;4BAAE,SAAS;wBAEnC,MAAM,KAAK,GAAG,6BAA6B,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC;wBAG9E,MAAM,eAAe,GAAG,UAAU;6BAChC,GAAG,CACH,CAAC,CAAC,EAAE,EAAE,CACL,GAAG,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CACvG;6BACA,IAAI,CAAC,IAAI,CAAC,CAAC;wBAEb,QAAQ,CAAC,IAAI,CACZ,IAAI,iBAAiB,CACpB,4BAA4B,EAC5B,IAAI,WAAW,sBAAsB,UAAU,CAAC,IAAI,WAAW,KAAK,YAAY,eAAe,qDAAqD,EACpJ,WAAW,EACX,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CACpB,CACD,CAAC;oBACH,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;AACF,CAAC;AAKD,SAAS,qBAAqB,CAC7B,cAA+B,EAC/B,YAAqC;IAErC,IAAI,CAAC,cAAc,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/E,IAAI,CAAC,cAAc;YAAE,SAAS;QAI9B,MAAM,MAAM,GAAG,IAAA,aAAG,EAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAI,cAA4B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5F,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,cAAc,WAAW,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrF,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACjE,CAAC;AASD,SAAS,+BAA+B,CACvC,cAA+B,EAC/B,YAAqC;IAErC,IAAI,CAAC,cAAc,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAChF,MAAM,MAAM,GAAG,IAAA,aAAG,EAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AASD,SAAS,4BAA4B,CACpC,IAAkB,EAClB,iBAA6B,EAC7B,QAA6B;IAE7B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;IACF,CAAC;IAED,MAAM,iBAAiB,GAAG,IAAA,0CAA2B,EACpD,IAAI,CAAC,WAAyC,CAC9C,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,IAAI;YAAE,SAAS;QAE/B,MAAM,OAAO,GACZ,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ;YACzC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC;YACpC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;QAElC,MAAM,cAAc,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvF,MAAM,iBAAiB,GAAG,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC;QAC3E,IAAI,CAAC,iBAAiB;YAAE,SAAS;QAEjC,MAAM,aAAa,GAA0B;YAC5C,UAAU,EAAE,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAA4B;YACpE,WAAW,EAAE,OAAO;YACpB,cAAc,EAAE,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAA4B;SACxE,CAAC;QAEF,KAAK,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC/E,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC;gBAAE,SAAS;YAChD,IAAI,CAAC,WAAW,EAAE,cAAc;gBAAE,SAAS;YAE3C,MAAM,mBAAmB,GAAG,IAAA,uCAAqB,EAChD,aAAa,EACb,WAAW,CAAC,cAAgC,CAC5C,CAAC;YAEF,IAAI,mBAAmB;gBAAE,SAAS;YAElC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;YACjF,IAAI,CAAC,mBAAmB;gBAAE,SAAS;YAEnC,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE,CAAC;gBAC5C,IAAI,CAAC,QAAQ;oBAAE,SAAS;gBACxB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;oBAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;oBAC9B,MAAM,YAAY,GAAG,8BAA8B,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC;oBACtF,MAAM,gBAAgB,GAAG,qBAAqB,CAC7C,WAAW,CAAC,cAAc,EAC1B,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAA4B,CACxD,CAAC;oBAEF,QAAQ,CAAC,IAAI,CACZ,IAAI,iBAAiB,CACpB,2BAA2B,EAC3B,IAAI,UAAU,CAAC,IAAI,WAAW,YAAY,cAAc,WAAW,oEAAoE,gBAAgB,qCAAqC,UAAU,CAAC,IAAI,wBAAwB,YAAY,uCAAuC,YAAY,8CAA8C,EAChV,UAAU,CAAC,IAAI,EACf,SAAS,EACT,SAAS,EACT,OAAO,CACP,CACD,CAAC;gBACH,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;AACF,CAAC;AAaD,SAAS,+BAA+B,CACvC,IAAkB,EAClB,iBAA6B,EAC7B,MAAyB;IAEzB,MAAM,iBAAiB,GAAG,IAAA,0CAA2B,EACpD,IAAI,CAAC,WAAyC,CAC9C,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,IAAI;YAAE,SAAS;QAE/B,MAAM,OAAO,GACZ,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ;YACzC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC;YACpC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;QAElC,MAAM,cAAc,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvF,MAAM,iBAAiB,GAAG,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC;QAC3E,IAAI,CAAC,iBAAiB;YAAE,SAAS;QAEjC,MAAM,aAAa,GAA0B;YAC5C,UAAU,EAAE,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAA4B;YACpE,WAAW,EAAE,OAAO;YACpB,cAAc,EAAE,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAA4B;SACxE,CAAC;QAEF,KAAK,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC/E,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC;gBAAE,SAAS;YAChD,IAAI,CAAC,WAAW,EAAE,QAAQ;gBAAE,SAAS;YAErC,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM,aAAa,GAAG,IAAA,uCAAqB,EAC1C,aAAa,EACb,WAAW,CAAC,cAAgC,CAC5C,CAAC;gBACF,IAAI,CAAC,aAAa;oBAAE,SAAS;YAC9B,CAAC;YAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;YACtE,MAAM,aAAa,GAClB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC5F,IAAI,aAAa;gBAAE,SAAS;YAE5B,MAAM,YAAY,GAAG,8BAA8B,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC;YACtF,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc;gBAChD,CAAC,CAAC,kBAAkB,+BAA+B,CACjD,WAAW,CAAC,cAAc,EAC1B,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAA4B,CACxD,GAAG;gBACL,CAAC,CAAC,EAAE,CAAC;YACN,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc;gBAC7C,CAAC,CAAC,qBAAqB,YAAY,iEAAiE;gBACpG,CAAC,CAAC,EAAE,CAAC;YAEN,MAAM,CAAC,IAAI,CACV,IAAI,eAAe,CAClB,wBAAwB,EACxB,IAAI,UAAU,CAAC,IAAI,gBAAgB,YAAY,6BAA6B,cAAc,SAAS,cAAc,2BAA2B,WAAW,EAAE,EACzJ,UAAU,CAAC,IAAI,EACf,SAAS,EACT,OAAO,CACP,CACD,CAAC;QACH,CAAC;IACF,CAAC;AACF,CAAC;AAUD,SAAS,oBAAoB,CAAC,cAAsB,EAAE,MAAM,GAAG,KAAK;IACnE,IAAI,cAAc,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAC/E,MAAM,KAAK,GAAG,8BAA8B,CAAC,cAAc,CAAC,CAAC;IAC7D,IAAI,KAAK;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,wBAAwB,KAAK,EAAE,CAAC;IACjF,OAAO,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,iBAAiB,cAAc,EAAE,CAAC;AACpE,CAAC;AAOD,SAAS,4BAA4B,CACpC,WAA6E,EAC7E,GAA0B,EAC1B,WAAmB;IAEnB,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACvD,IAAI,IAAI,KAAK,WAAW;YAAE,SAAS;QACnC,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,GAAG,CAAC,cAAc,IAAI,CAAC,IAAA,uCAAqB,EAAC,GAAG,EAAE,GAAG,CAAC,cAAgC,CAAC,EAAE,CAAC;YAC7F,SAAS;QACV,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAUD,SAAS,mBAAmB,CAC3B,IAAkB,EAClB,iBAA6B,EAC7B,QAA6B;IAE7B,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,IAAI;YAAE,SAAS;QAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ;YAAE,SAAS;QAExB,MAAM,OAAO,GACZ,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ;YACzC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC;YACpC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;QAElC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjF,MAAM,WAAW,GAAG,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC;QAChE,IAAI,CAAC,WAAW;YAAE,SAAS;QAE3B,MAAM,GAAG,GAA0B;YAClC,UAAU,EAAE,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAA4B;YACpE,WAAW,EAAE,OAAO;YACpB,cAAc,EAAE,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAA4B;SACxE,CAAC;QAEF,KAAK,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAEjE,IAAI,CAAC,GAAG,EAAE,cAAc;gBAAE,SAAS;YAEnC,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9E,IAAI,CAAC,QAAQ;gBAAE,SAAS;YAExB,MAAM,OAAO,GAAG,IAAA,uCAAqB,EAAC,GAAG,EAAE,GAAG,CAAC,cAAgC,CAAC,CAAC;YACjF,IAAI,OAAO;gBAAE,SAAS;YAEtB,MAAM,gBAAgB,GAAG,qBAAqB,CAC7C,GAAG,CAAC,cAAc,EAClB,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAA4B,CACxD,CAAC;YACF,MAAM,UAAU,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;YACxD,MAAM,UAAU,GAAG,4BAA4B,CAAC,WAAW,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;YAClF,MAAM,aAAa,GAAG,UAAU;gBAC/B,CAAC,CAAC,yCAAyC,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,4BAA4B,UAAU,0BAA0B;gBACjJ,CAAC,CAAC,EAAE,CAAC;YAEN,QAAQ,CAAC,IAAI,CACZ,IAAI,iBAAiB,CACpB,yBAAyB,EACzB,IAAI,UAAU,CAAC,IAAI,QAAQ,UAAU,oDAAoD,gBAAgB,GAAG,aAAa,EAAE,EAC3H,UAAU,CAAC,IAAI,EACf,SAAS,EACT,SAAS,EACT,OAAO,CACP,CACD,CAAC;QACH,CAAC;IACF,CAAC;AACF,CAAC;AAMD,SAAS,qBAAqB,CAC7B,IAAkB,EAClB,iBAA6B,EAC7B,QAA6B;IAG7B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;IACF,CAAC;IAID,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAGvC,KAAK,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAE/E,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC;QAC7C,IAAI,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;YAAE,SAAS;QAElE,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC;gBACjC,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC;gBAEpC,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBACnD,IAAI,CAAC,UAAU;oBAAE,SAAS;gBAG1B,MAAM,OAAO,GACZ,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ;oBACzC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC;oBACpC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;gBAGlC,MAAM,cAAc,GAAG,IAAA,sCAAqB,EAAC,iBAAiB,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAG1F,IAAI,cAAc,KAAK,SAAS;oBAAE,SAAS;gBAG3C,IAAI,gBAAgB,IAAI,cAAc,EAAE,CAAC;oBACxC,MAAM,OAAO,GAAG,GAAG,cAAc,IAAI,gBAAgB,EAAE,CAAC;oBACxD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;wBAChC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;wBAC1B,QAAQ,CAAC,IAAI,CACZ,IAAI,iBAAiB,CACpB,qBAAqB,EACrB,kBAAkB,cAAc,sBAAsB,gBAAgB,uBAAuB,cAAc,wBAAwB,cAAc,GAAG,CAAC,GAAG,EACxJ,cAAc,CACd,CACD,CAAC;oBACH,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"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"}