@oomol-lab/open-flow 0.1.0-beta.73 → 0.1.0-beta.75

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 (444) hide show
  1. package/LICENSE +36 -0
  2. package/NOTICE +7 -0
  3. package/README.md +41 -0
  4. package/dist/browser/{ContentIcon-CUQHjQIw.js → ContentIcon-FCpKiwjp.js} +2 -1
  5. package/dist/browser/{FlowCanvas-Dtf8_cQp.js → FlowCanvas-dzRBnlUT.js} +1 -1
  6. package/dist/browser/{createResourceDialog-BWJkjiOO.js → createResourceDialog-BeYDdUl-.js} +2 -2
  7. package/dist/browser/{dialog-CUy_fwx9.js → dialog-ZtpsFbl4.js} +337 -31
  8. package/dist/browser/{exportSvg-BOoy7-Db.js → exportSvg-DqXw1yf-.js} +2 -2
  9. package/dist/browser/{flowChanges-CgSnSqqP.js → flowChanges-b_5UobFj.js} +586 -87
  10. package/dist/browser/{flowWorkspace-Bf7H-r0t.js → flowWorkspace-ItojZbO4.js} +21162 -20242
  11. package/dist/browser/preview.css +254 -179
  12. package/dist/browser/preview.js +22201 -20625
  13. package/dist/browser/{typeScriptSession-B0hC-C8y.js → typeScriptSession-CSRwWmZm.js} +1 -1
  14. package/dist/browser/ui.css +72 -2
  15. package/dist/browser/workbench.css +254 -179
  16. package/dist/browser/workbench.js +22 -78
  17. package/dist/browser/{workbenchSelect-C3e4J93X.js → workbenchSelect-M441Lz0d.js} +1 -1
  18. package/dist/command/index.js +42 -42
  19. package/dist/common/authoring.d.ts +5 -5
  20. package/dist/common/authoringExamples.d.ts +3 -2
  21. package/dist/common/authoringFields.d.ts +1 -1
  22. package/dist/common/authoringSchema.d.ts +95 -8
  23. package/dist/common/connector-proxy.d.ts +1 -1
  24. package/dist/common/control-api-conformance.d.ts +1 -1
  25. package/dist/common/control-api-conformance.js +119 -31
  26. package/dist/common/control-api.d.ts +4 -3
  27. package/dist/common/control-api.js +117 -29
  28. package/dist/common/control-requests.d.ts +5 -4
  29. package/dist/common/control-requests.js +437 -103
  30. package/dist/common/cron-trigger.d.ts +1 -1
  31. package/dist/common/decision.d.ts +1 -1
  32. package/dist/common/draftOperations.d.ts +1 -1
  33. package/dist/common/engine-contract.d.ts +4 -2
  34. package/dist/common/event-source-definition.d.ts +1 -1
  35. package/dist/common/flow-agent.d.ts +1 -1
  36. package/dist/{browser → common}/flow-authoring-node.d.ts +3 -3
  37. package/dist/{browser → common}/flow-authoring.js +131 -30
  38. package/dist/{browser → common}/flow-change-schema.d.ts +177 -6
  39. package/dist/{browser → common}/flow-change.d.ts +35 -15
  40. package/dist/{browser → common}/flow-change.js +133 -32
  41. package/dist/common/flow-connectionUsage.d.ts +1 -1
  42. package/dist/common/flow-encoding.d.ts +1 -1
  43. package/dist/common/flow-encoding.js +89 -23
  44. package/dist/common/flow-errorHandling.d.ts +1 -1
  45. package/dist/common/flow-graph.d.ts +3 -2
  46. package/dist/common/flow-modules.d.ts +1 -1
  47. package/dist/common/flow-promptTemplate.d.ts +1 -1
  48. package/dist/common/flow-retry.d.ts +2 -2
  49. package/dist/common/flow-semantics.d.ts +1 -1
  50. package/dist/common/flow-semantics.js +966 -614
  51. package/dist/common/flow-workflowFile.d.ts +1 -1
  52. package/dist/common/flowInspection.d.ts +3 -3
  53. package/dist/common/http-request.d.ts +156 -0
  54. package/dist/common/http-request.js +5254 -0
  55. package/dist/common/integration-trigger.d.ts +1 -1
  56. package/dist/common/licenses.md +118 -1
  57. package/dist/common/liveDetails.d.ts +1 -1
  58. package/dist/common/mcp.d.ts +5 -4
  59. package/dist/common/mcp.js +117 -29
  60. package/dist/common/openapi.d.ts +1 -1
  61. package/dist/common/poll-trigger.d.ts +1 -1
  62. package/dist/common/run-events.js +11 -9
  63. package/dist/common/run-results.d.ts +8 -1
  64. package/dist/common/runtime-contract.d.ts +8 -2
  65. package/dist/common/runtime-contract.js +25 -5
  66. package/dist/common/scheduler-checkpoint.d.ts +1 -1
  67. package/dist/common/scheduler-dependencies.d.ts +1 -1
  68. package/dist/common/scheduler-node-execution.d.ts +1 -1
  69. package/dist/common/scheduler.d.ts +3 -3
  70. package/dist/common/scheduler.js +101 -33
  71. package/dist/common/trigger-catalog.d.ts +1 -1
  72. package/dist/common/trigger-config-options.d.ts +1 -1
  73. package/dist/common/trigger-config.d.ts +1 -1
  74. package/dist/common/trigger-contract.d.ts +2 -2
  75. package/dist/common/trigger-localization.d.ts +1 -1
  76. package/dist/common/webhook-response.d.ts +1 -3
  77. package/dist/common/webhook-trigger.d.ts +1 -1
  78. package/dist/common/webhook-trigger.js +12 -11
  79. package/dist/common/workflow.d.ts +17 -1
  80. package/dist/common/workflow.js +68 -22
  81. package/dist/index.d.ts +6 -3
  82. package/package.json +11 -6
  83. package/skills/open-flow/references/flow-authoring.md +1 -0
  84. package/skills/open-flow/references/flow-n8n-conversion.md +19 -15
  85. package/src/base/common/json.ts +90 -0
  86. package/src/canvas/common/commands.ts +15 -0
  87. package/src/connector/common/actionSchema.ts +168 -0
  88. package/src/connector/common/proxy.ts +44 -0
  89. package/src/control/common/api.ts +1506 -0
  90. package/src/control/common/authoring.ts +923 -0
  91. package/src/control/common/authoringCondition.ts +110 -0
  92. package/src/control/common/authoringDiagnosticFields.ts +136 -0
  93. package/src/control/common/authoringExamples.ts +200 -0
  94. package/src/control/common/authoringFields.ts +53 -0
  95. package/src/control/common/authoringLlm.ts +70 -0
  96. package/src/control/common/authoringOpenApi.ts +129 -0
  97. package/src/control/common/authoringSchema.ts +410 -0
  98. package/src/control/common/authoringTools.ts +123 -0
  99. package/src/control/common/authoringTriggers.ts +26 -0
  100. package/src/control/common/checkDecoders.ts +65 -0
  101. package/src/control/common/conformance.ts +1989 -0
  102. package/src/control/common/connectorDecoders.ts +370 -0
  103. package/src/control/common/connectorQueries.ts +61 -0
  104. package/src/control/common/decoding.ts +60 -0
  105. package/src/control/common/draftOperations.ts +61 -0
  106. package/src/control/common/errors.ts +114 -0
  107. package/src/control/common/eventSourceSchemas.ts +13 -0
  108. package/src/control/common/eventSources.ts +186 -0
  109. package/src/control/common/flowDecoders.ts +153 -0
  110. package/src/control/common/flowInspection.ts +181 -0
  111. package/src/control/common/flowNotifications.ts +37 -0
  112. package/src/control/common/liveDetails.ts +124 -0
  113. package/src/control/common/mcp.ts +241 -0
  114. package/src/control/common/mcpConformance.ts +142 -0
  115. package/src/control/common/providerAccess.ts +28 -0
  116. package/src/control/common/providerIconSprite.ts +42 -0
  117. package/src/control/common/publicationDecoders.ts +98 -0
  118. package/src/control/common/random.ts +16 -0
  119. package/src/control/common/requests.ts +112 -0
  120. package/src/control/common/resultQuery.ts +8 -0
  121. package/src/control/common/results.ts +176 -0
  122. package/src/control/common/revisionDecoders.ts +52 -0
  123. package/src/control/common/runDecoders.ts +240 -0
  124. package/src/control/common/triggerCatalog.ts +89 -0
  125. package/src/control/common/triggerDecoders.ts +175 -0
  126. package/src/decision/common/decision.ts +168 -0
  127. package/src/event-source/common/catalog.generated.json +65 -0
  128. package/src/event-source/common/definition.ts +66 -0
  129. package/src/event-source/common/index.ts +99 -0
  130. package/src/execution/common/checkpoint.ts +311 -0
  131. package/src/execution/common/dependencies.ts +440 -0
  132. package/src/execution/common/engineContract.ts +84 -0
  133. package/src/execution/common/events.ts +331 -0
  134. package/src/execution/common/node-execution.ts +469 -0
  135. package/src/execution/common/runLifecycle.ts +250 -0
  136. package/src/execution/common/runtime.ts +563 -0
  137. package/src/execution/common/scheduler.ts +697 -0
  138. package/src/execution/common/wait.ts +36 -0
  139. package/src/flow/common/agent.ts +305 -0
  140. package/src/flow/common/authoring.ts +30 -0
  141. package/src/flow/common/change.ts +1037 -0
  142. package/src/flow/common/changeSchema.ts +792 -0
  143. package/src/flow/common/codePermissions.ts +2 -0
  144. package/src/flow/common/condition.ts +265 -0
  145. package/src/flow/common/connectionUsage.ts +131 -0
  146. package/src/flow/common/edgeChanges.ts +35 -0
  147. package/src/flow/common/encoding.ts +437 -0
  148. package/src/flow/common/errorHandling.ts +34 -0
  149. package/src/flow/common/graph.ts +898 -0
  150. package/src/flow/common/inputValue.ts +16 -0
  151. package/src/flow/common/json.ts +8 -0
  152. package/src/flow/common/moduleChanges.ts +31 -0
  153. package/src/flow/common/modules.ts +292 -0
  154. package/src/flow/common/nodeChanges.ts +762 -0
  155. package/src/flow/common/portChanges.ts +36 -0
  156. package/src/flow/common/promptTemplate.ts +15 -0
  157. package/src/flow/common/retry.ts +20 -0
  158. package/src/flow/common/schema.ts +162 -0
  159. package/src/flow/common/schemaCompare.ts +176 -0
  160. package/src/flow/common/schemaComparer.ts +178 -0
  161. package/src/flow/common/schemaKeywords.ts +53 -0
  162. package/src/flow/common/semantics.ts +531 -0
  163. package/src/flow/common/sourceField.ts +35 -0
  164. package/src/flow/common/triggerScheduleSchema.ts +8 -0
  165. package/src/flow/common/wait.ts +30 -0
  166. package/src/flow/common/webhookMethod.ts +7 -0
  167. package/src/flow/common/webhookResponse.ts +71 -0
  168. package/src/flow/common/workflowFile.ts +97 -0
  169. package/src/http/common/authBindings.ts +12 -0
  170. package/src/http/common/headers.ts +5 -0
  171. package/src/http/common/httpRequest.ts +251 -0
  172. package/src/json-schema-subset/checker/array.ts +142 -0
  173. package/src/json-schema-subset/checker/cache.ts +57 -0
  174. package/src/json-schema-subset/checker/checker.ts +230 -0
  175. package/src/json-schema-subset/checker/enumAndConst.ts +113 -0
  176. package/src/json-schema-subset/checker/equals.ts +93 -0
  177. package/src/json-schema-subset/checker/numeric/checker.ts +50 -0
  178. package/src/json-schema-subset/checker/numeric/float.ts +121 -0
  179. package/src/json-schema-subset/checker/numeric/index.ts +1 -0
  180. package/src/json-schema-subset/checker/numeric/integer.ts +119 -0
  181. package/src/json-schema-subset/checker/numeric/integerNormalizer.ts +72 -0
  182. package/src/json-schema-subset/checker/object.ts +354 -0
  183. package/src/json-schema-subset/checker/range.ts +91 -0
  184. package/src/json-schema-subset/checker/string.ts +60 -0
  185. package/src/json-schema-subset/checker/tools/index.ts +3 -0
  186. package/src/json-schema-subset/checker/tools/mark.ts +82 -0
  187. package/src/json-schema-subset/checker/tools/quantum.ts +106 -0
  188. package/src/json-schema-subset/checker/tools/range.ts +210 -0
  189. package/src/json-schema-subset/checker/validator.ts +23 -0
  190. package/src/json-schema-subset/compiler/array.ts +163 -0
  191. package/src/json-schema-subset/compiler/combination.ts +109 -0
  192. package/src/json-schema-subset/compiler/common.ts +99 -0
  193. package/src/json-schema-subset/compiler/compiler.ts +188 -0
  194. package/src/json-schema-subset/compiler/enumAndConst.ts +75 -0
  195. package/src/json-schema-subset/compiler/index.ts +11 -0
  196. package/src/json-schema-subset/compiler/object.ts +411 -0
  197. package/src/json-schema-subset/compiler/primitive.ts +144 -0
  198. package/src/json-schema-subset/compiler/utils.ts +24 -0
  199. package/src/json-schema-subset/compiler/wrapper.ts +192 -0
  200. package/src/json-schema-subset/error.ts +55 -0
  201. package/src/json-schema-subset/expression/calculator.ts +442 -0
  202. package/src/json-schema-subset/expression/combination.ts +49 -0
  203. package/src/json-schema-subset/expression/expression.ts +191 -0
  204. package/src/json-schema-subset/expression/index.ts +25 -0
  205. package/src/json-schema-subset/expression/result.ts +88 -0
  206. package/src/json-schema-subset/expression/types.ts +36 -0
  207. package/src/json-schema-subset/extends/extendsContext.ts +89 -0
  208. package/src/json-schema-subset/extends/index.ts +2 -0
  209. package/src/json-schema-subset/extends/types.ts +12 -0
  210. package/src/json-schema-subset/global.ts +60 -0
  211. package/src/json-schema-subset/index.ts +8 -0
  212. package/src/json-schema-subset/preprocessing.ts +74 -0
  213. package/src/json-schema-subset/types.ts +8 -0
  214. package/src/json-schema-subset/utils.ts +95 -0
  215. package/src/localization/common/languages.ts +118 -0
  216. package/src/localization/common/timeZone.ts +25 -0
  217. package/src/openapi/common/openapi.ts +459 -0
  218. package/src/trigger/common/config.ts +56 -0
  219. package/src/trigger/common/configOptions.ts +15 -0
  220. package/src/trigger/common/configSchema.ts +8 -0
  221. package/src/trigger/common/contract.ts +132 -0
  222. package/src/trigger/common/cron.ts +151 -0
  223. package/src/trigger/common/integration.ts +498 -0
  224. package/src/trigger/common/poll.ts +187 -0
  225. package/src/trigger/common/webhook.ts +413 -0
  226. package/src/trigger/providers/airtable/locales/fr.json +18 -0
  227. package/src/trigger/providers/airtable/locales/ja.json +18 -0
  228. package/src/trigger/providers/airtable/locales/ko.json +18 -0
  229. package/src/trigger/providers/airtable/locales/ru.json +18 -0
  230. package/src/trigger/providers/airtable/locales/zh-CN.json +18 -0
  231. package/src/trigger/providers/airtable/locales/zh-TW.json +18 -0
  232. package/src/trigger/providers/asana/locales/fr.json +15 -0
  233. package/src/trigger/providers/asana/locales/ja.json +15 -0
  234. package/src/trigger/providers/asana/locales/ko.json +15 -0
  235. package/src/trigger/providers/asana/locales/ru.json +15 -0
  236. package/src/trigger/providers/asana/locales/zh-CN.json +15 -0
  237. package/src/trigger/providers/asana/locales/zh-TW.json +15 -0
  238. package/src/trigger/providers/calendly/locales/fr.json +16 -0
  239. package/src/trigger/providers/calendly/locales/ja.json +16 -0
  240. package/src/trigger/providers/calendly/locales/ko.json +16 -0
  241. package/src/trigger/providers/calendly/locales/ru.json +16 -0
  242. package/src/trigger/providers/calendly/locales/zh-CN.json +16 -0
  243. package/src/trigger/providers/calendly/locales/zh-TW.json +16 -0
  244. package/src/trigger/providers/catalog.generated.json +4996 -0
  245. package/src/trigger/providers/clickup/locales/fr.json +16 -0
  246. package/src/trigger/providers/clickup/locales/ja.json +16 -0
  247. package/src/trigger/providers/clickup/locales/ko.json +16 -0
  248. package/src/trigger/providers/clickup/locales/ru.json +16 -0
  249. package/src/trigger/providers/clickup/locales/zh-CN.json +16 -0
  250. package/src/trigger/providers/clickup/locales/zh-TW.json +16 -0
  251. package/src/trigger/providers/definitions.ts +19 -0
  252. package/src/trigger/providers/feishu/locales/fr.json +20 -0
  253. package/src/trigger/providers/feishu/locales/ja.json +20 -0
  254. package/src/trigger/providers/feishu/locales/ko.json +20 -0
  255. package/src/trigger/providers/feishu/locales/ru.json +20 -0
  256. package/src/trigger/providers/feishu/locales/zh-CN.json +20 -0
  257. package/src/trigger/providers/feishu/locales/zh-TW.json +20 -0
  258. package/src/trigger/providers/fieldDescriptions.ts +392 -0
  259. package/src/trigger/providers/fieldLabels.ts +256 -0
  260. package/src/trigger/providers/fireflies/locales/fr.json +17 -0
  261. package/src/trigger/providers/fireflies/locales/ja.json +17 -0
  262. package/src/trigger/providers/fireflies/locales/ko.json +17 -0
  263. package/src/trigger/providers/fireflies/locales/ru.json +17 -0
  264. package/src/trigger/providers/fireflies/locales/zh-CN.json +17 -0
  265. package/src/trigger/providers/fireflies/locales/zh-TW.json +17 -0
  266. package/src/trigger/providers/github/locales/fr.json +30 -0
  267. package/src/trigger/providers/github/locales/ja.json +30 -0
  268. package/src/trigger/providers/github/locales/ko.json +30 -0
  269. package/src/trigger/providers/github/locales/ru.json +30 -0
  270. package/src/trigger/providers/github/locales/zh-CN.json +30 -0
  271. package/src/trigger/providers/github/locales/zh-TW.json +30 -0
  272. package/src/trigger/providers/gitlab/locales/fr.json +18 -0
  273. package/src/trigger/providers/gitlab/locales/ja.json +18 -0
  274. package/src/trigger/providers/gitlab/locales/ko.json +18 -0
  275. package/src/trigger/providers/gitlab/locales/ru.json +18 -0
  276. package/src/trigger/providers/gitlab/locales/zh-CN.json +18 -0
  277. package/src/trigger/providers/gitlab/locales/zh-TW.json +18 -0
  278. package/src/trigger/providers/gmail/locales/fr.json +18 -0
  279. package/src/trigger/providers/gmail/locales/ja.json +18 -0
  280. package/src/trigger/providers/gmail/locales/ko.json +18 -0
  281. package/src/trigger/providers/gmail/locales/ru.json +18 -0
  282. package/src/trigger/providers/gmail/locales/zh-CN.json +18 -0
  283. package/src/trigger/providers/gmail/locales/zh-TW.json +18 -0
  284. package/src/trigger/providers/google-calendar/locales/fr.json +15 -0
  285. package/src/trigger/providers/google-calendar/locales/ja.json +15 -0
  286. package/src/trigger/providers/google-calendar/locales/ko.json +15 -0
  287. package/src/trigger/providers/google-calendar/locales/ru.json +15 -0
  288. package/src/trigger/providers/google-calendar/locales/zh-CN.json +15 -0
  289. package/src/trigger/providers/google-calendar/locales/zh-TW.json +15 -0
  290. package/src/trigger/providers/google-drive/locales/fr.json +48 -0
  291. package/src/trigger/providers/google-drive/locales/ja.json +48 -0
  292. package/src/trigger/providers/google-drive/locales/ko.json +48 -0
  293. package/src/trigger/providers/google-drive/locales/ru.json +48 -0
  294. package/src/trigger/providers/google-drive/locales/zh-CN.json +48 -0
  295. package/src/trigger/providers/google-drive/locales/zh-TW.json +48 -0
  296. package/src/trigger/providers/google-sheets/locales/fr.json +19 -0
  297. package/src/trigger/providers/google-sheets/locales/ja.json +19 -0
  298. package/src/trigger/providers/google-sheets/locales/ko.json +19 -0
  299. package/src/trigger/providers/google-sheets/locales/ru.json +19 -0
  300. package/src/trigger/providers/google-sheets/locales/zh-CN.json +19 -0
  301. package/src/trigger/providers/google-sheets/locales/zh-TW.json +19 -0
  302. package/src/trigger/providers/intercom/locales/fr.json +17 -0
  303. package/src/trigger/providers/intercom/locales/ja.json +17 -0
  304. package/src/trigger/providers/intercom/locales/ko.json +17 -0
  305. package/src/trigger/providers/intercom/locales/ru.json +17 -0
  306. package/src/trigger/providers/intercom/locales/zh-CN.json +17 -0
  307. package/src/trigger/providers/intercom/locales/zh-TW.json +17 -0
  308. package/src/trigger/providers/jira/locales/fr.json +17 -0
  309. package/src/trigger/providers/jira/locales/ja.json +17 -0
  310. package/src/trigger/providers/jira/locales/ko.json +17 -0
  311. package/src/trigger/providers/jira/locales/ru.json +17 -0
  312. package/src/trigger/providers/jira/locales/zh-CN.json +17 -0
  313. package/src/trigger/providers/jira/locales/zh-TW.json +17 -0
  314. package/src/trigger/providers/linear/locales/fr.json +13 -0
  315. package/src/trigger/providers/linear/locales/ja.json +13 -0
  316. package/src/trigger/providers/linear/locales/ko.json +13 -0
  317. package/src/trigger/providers/linear/locales/ru.json +13 -0
  318. package/src/trigger/providers/linear/locales/zh-CN.json +13 -0
  319. package/src/trigger/providers/linear/locales/zh-TW.json +13 -0
  320. package/src/trigger/providers/locales/fr.ts +71 -0
  321. package/src/trigger/providers/locales/ja.ts +71 -0
  322. package/src/trigger/providers/locales/ko.ts +71 -0
  323. package/src/trigger/providers/locales/ru.ts +71 -0
  324. package/src/trigger/providers/locales/zh-CN.ts +71 -0
  325. package/src/trigger/providers/locales/zh-TW.ts +71 -0
  326. package/src/trigger/providers/localization.ts +59 -0
  327. package/src/trigger/providers/notion/locales/fr.json +16 -0
  328. package/src/trigger/providers/notion/locales/ja.json +16 -0
  329. package/src/trigger/providers/notion/locales/ko.json +16 -0
  330. package/src/trigger/providers/notion/locales/ru.json +16 -0
  331. package/src/trigger/providers/notion/locales/zh-CN.json +16 -0
  332. package/src/trigger/providers/notion/locales/zh-TW.json +16 -0
  333. package/src/trigger/providers/one-drive/locales/fr.json +16 -0
  334. package/src/trigger/providers/one-drive/locales/ja.json +16 -0
  335. package/src/trigger/providers/one-drive/locales/ko.json +16 -0
  336. package/src/trigger/providers/one-drive/locales/ru.json +16 -0
  337. package/src/trigger/providers/one-drive/locales/zh-CN.json +16 -0
  338. package/src/trigger/providers/one-drive/locales/zh-TW.json +16 -0
  339. package/src/trigger/providers/outlook/locales/fr.json +18 -0
  340. package/src/trigger/providers/outlook/locales/ja.json +18 -0
  341. package/src/trigger/providers/outlook/locales/ko.json +18 -0
  342. package/src/trigger/providers/outlook/locales/ru.json +18 -0
  343. package/src/trigger/providers/outlook/locales/zh-CN.json +18 -0
  344. package/src/trigger/providers/outlook/locales/zh-TW.json +18 -0
  345. package/src/trigger/providers/pandadoc/locales/fr.json +12 -0
  346. package/src/trigger/providers/pandadoc/locales/ja.json +12 -0
  347. package/src/trigger/providers/pandadoc/locales/ko.json +12 -0
  348. package/src/trigger/providers/pandadoc/locales/ru.json +12 -0
  349. package/src/trigger/providers/pandadoc/locales/zh-CN.json +12 -0
  350. package/src/trigger/providers/pandadoc/locales/zh-TW.json +12 -0
  351. package/src/trigger/providers/pipedrive/locales/fr.json +15 -0
  352. package/src/trigger/providers/pipedrive/locales/ja.json +15 -0
  353. package/src/trigger/providers/pipedrive/locales/ko.json +15 -0
  354. package/src/trigger/providers/pipedrive/locales/ru.json +15 -0
  355. package/src/trigger/providers/pipedrive/locales/zh-CN.json +15 -0
  356. package/src/trigger/providers/pipedrive/locales/zh-TW.json +15 -0
  357. package/src/trigger/providers/remote.ts +163 -0
  358. package/src/trigger/providers/resend/locales/fr.json +16 -0
  359. package/src/trigger/providers/resend/locales/ja.json +16 -0
  360. package/src/trigger/providers/resend/locales/ko.json +16 -0
  361. package/src/trigger/providers/resend/locales/ru.json +16 -0
  362. package/src/trigger/providers/resend/locales/zh-CN.json +16 -0
  363. package/src/trigger/providers/resend/locales/zh-TW.json +16 -0
  364. package/src/trigger/providers/sentry/locales/fr.json +19 -0
  365. package/src/trigger/providers/sentry/locales/ja.json +19 -0
  366. package/src/trigger/providers/sentry/locales/ko.json +19 -0
  367. package/src/trigger/providers/sentry/locales/ru.json +19 -0
  368. package/src/trigger/providers/sentry/locales/zh-CN.json +19 -0
  369. package/src/trigger/providers/sentry/locales/zh-TW.json +19 -0
  370. package/src/trigger/providers/shopify/locales/fr.json +18 -0
  371. package/src/trigger/providers/shopify/locales/ja.json +18 -0
  372. package/src/trigger/providers/shopify/locales/ko.json +18 -0
  373. package/src/trigger/providers/shopify/locales/ru.json +18 -0
  374. package/src/trigger/providers/shopify/locales/zh-CN.json +18 -0
  375. package/src/trigger/providers/shopify/locales/zh-TW.json +18 -0
  376. package/src/trigger/providers/slack/locales/fr.json +18 -0
  377. package/src/trigger/providers/slack/locales/ja.json +18 -0
  378. package/src/trigger/providers/slack/locales/ko.json +18 -0
  379. package/src/trigger/providers/slack/locales/ru.json +18 -0
  380. package/src/trigger/providers/slack/locales/zh-CN.json +18 -0
  381. package/src/trigger/providers/slack/locales/zh-TW.json +18 -0
  382. package/src/trigger/providers/slackbot/locales/fr.json +23 -0
  383. package/src/trigger/providers/slackbot/locales/ja.json +23 -0
  384. package/src/trigger/providers/slackbot/locales/ko.json +23 -0
  385. package/src/trigger/providers/slackbot/locales/ru.json +23 -0
  386. package/src/trigger/providers/slackbot/locales/zh-CN.json +23 -0
  387. package/src/trigger/providers/slackbot/locales/zh-TW.json +23 -0
  388. package/src/trigger/providers/source-events.ts +25 -0
  389. package/src/trigger/providers/stripe/locales/fr.json +17 -0
  390. package/src/trigger/providers/stripe/locales/ja.json +17 -0
  391. package/src/trigger/providers/stripe/locales/ko.json +17 -0
  392. package/src/trigger/providers/stripe/locales/ru.json +17 -0
  393. package/src/trigger/providers/stripe/locales/zh-CN.json +17 -0
  394. package/src/trigger/providers/stripe/locales/zh-TW.json +17 -0
  395. package/src/trigger/providers/tally/locales/fr.json +12 -0
  396. package/src/trigger/providers/tally/locales/ja.json +12 -0
  397. package/src/trigger/providers/tally/locales/ko.json +12 -0
  398. package/src/trigger/providers/tally/locales/ru.json +12 -0
  399. package/src/trigger/providers/tally/locales/zh-CN.json +12 -0
  400. package/src/trigger/providers/tally/locales/zh-TW.json +12 -0
  401. package/src/trigger/providers/telegram/locales/fr.json +17 -0
  402. package/src/trigger/providers/telegram/locales/ja.json +17 -0
  403. package/src/trigger/providers/telegram/locales/ko.json +17 -0
  404. package/src/trigger/providers/telegram/locales/ru.json +17 -0
  405. package/src/trigger/providers/telegram/locales/zh-CN.json +17 -0
  406. package/src/trigger/providers/telegram/locales/zh-TW.json +17 -0
  407. package/src/trigger/providers/typeform/locales/fr.json +12 -0
  408. package/src/trigger/providers/typeform/locales/ja.json +12 -0
  409. package/src/trigger/providers/typeform/locales/ko.json +12 -0
  410. package/src/trigger/providers/typeform/locales/ru.json +12 -0
  411. package/src/trigger/providers/typeform/locales/zh-CN.json +12 -0
  412. package/src/trigger/providers/typeform/locales/zh-TW.json +12 -0
  413. package/src/trigger/providers/vercel/locales/fr.json +18 -0
  414. package/src/trigger/providers/vercel/locales/ja.json +18 -0
  415. package/src/trigger/providers/vercel/locales/ko.json +18 -0
  416. package/src/trigger/providers/vercel/locales/ru.json +18 -0
  417. package/src/trigger/providers/vercel/locales/zh-CN.json +18 -0
  418. package/src/trigger/providers/vercel/locales/zh-TW.json +18 -0
  419. package/src/trigger/providers/woocommerce/locales/fr.json +19 -0
  420. package/src/trigger/providers/woocommerce/locales/ja.json +19 -0
  421. package/src/trigger/providers/woocommerce/locales/ko.json +19 -0
  422. package/src/trigger/providers/woocommerce/locales/ru.json +19 -0
  423. package/src/trigger/providers/woocommerce/locales/zh-CN.json +19 -0
  424. package/src/trigger/providers/woocommerce/locales/zh-TW.json +19 -0
  425. package/src/trigger/providers/zendesk/locales/fr.json +15 -0
  426. package/src/trigger/providers/zendesk/locales/ja.json +15 -0
  427. package/src/trigger/providers/zendesk/locales/ko.json +15 -0
  428. package/src/trigger/providers/zendesk/locales/ru.json +15 -0
  429. package/src/trigger/providers/zendesk/locales/zh-CN.json +15 -0
  430. package/src/trigger/providers/zendesk/locales/zh-TW.json +15 -0
  431. package/src/trigger/providers/zoom/locales/fr.json +17 -0
  432. package/src/trigger/providers/zoom/locales/ja.json +17 -0
  433. package/src/trigger/providers/zoom/locales/ko.json +17 -0
  434. package/src/trigger/providers/zoom/locales/ru.json +17 -0
  435. package/src/trigger/providers/zoom/locales/zh-CN.json +17 -0
  436. package/src/trigger/providers/zoom/locales/zh-TW.json +17 -0
  437. package/src/types/index.ts +112 -0
  438. package/src/workflow/common/workflow.ts +273 -0
  439. package/dist/browser/lib-DrKav3HG.js +0 -11403
  440. /package/dist/{browser → common}/flow-authoring-edge.d.ts +0 -0
  441. /package/dist/{browser → common}/flow-authoring-module.d.ts +0 -0
  442. /package/dist/{browser → common}/flow-authoring.d.ts +0 -0
  443. /package/dist/{browser → common}/flow-input-value.d.ts +0 -0
  444. /package/dist/{browser → common}/webhook-method.d.ts +0 -0
@@ -0,0 +1,82 @@
1
+ export type VariableBundle<K extends string> = {
2
+ [P in K]: boolean
3
+ } & {
4
+ toInt32(): number
5
+ toString(): string
6
+ }
7
+
8
+ export class VariableBundleDescription<K extends string> {
9
+ public readonly keys: readonly K[]
10
+ private readonly clazz: { new (int32: number): VariableBundleImpls<K> }
11
+
12
+ public constructor(_keys: readonly K[]) {
13
+ const keys = Object.freeze(_keys.toSorted())
14
+ if (keys.length > 32) {
15
+ throw new Error(`cannot define ${keys.length} keys which is greater than 32`)
16
+ }
17
+ this.keys = keys
18
+ this.clazz = class extends VariableBundleImpls<K> {
19
+ public constructor(int32: number) {
20
+ super(keys, int32)
21
+ }
22
+ }
23
+ for (const [i, key] of this.keys.entries()) {
24
+ const mask = 1 << i
25
+
26
+ Object.defineProperty(this.clazz.prototype, key, {
27
+ enumerable: true,
28
+ get: function get(this: VariableBundleImpls<K>): boolean {
29
+ return !!(this.int32 & mask)
30
+ },
31
+ set: function set(this: VariableBundleImpls<K>, value: boolean): void {
32
+ if (value) {
33
+ this.int32 |= mask
34
+ } else {
35
+ this.int32 &= ~mask
36
+ }
37
+ },
38
+ })
39
+ }
40
+ }
41
+
42
+ public toBundle(): VariableBundle<K>
43
+ public toBundle(int32: number): VariableBundle<K>
44
+ public toBundle(variable: Partial<Record<K, boolean>>): VariableBundle<K>
45
+
46
+ public toBundle(variable?: number | Partial<Record<K, boolean>>): VariableBundle<K> {
47
+ let int32 = 0
48
+
49
+ if (typeof variable === 'number') {
50
+ int32 = variable
51
+ } else if (variable) {
52
+ for (const [i, key] of this.keys.entries()) {
53
+ if (variable[key]) {
54
+ int32 |= 1 << i
55
+ }
56
+ }
57
+ }
58
+ return new this.clazz(int32) as VariableBundle<K>
59
+ }
60
+ }
61
+
62
+ class VariableBundleImpls<K extends string> {
63
+ private readonly keys: readonly K[]
64
+ protected int32: number
65
+
66
+ public constructor(keys: readonly K[], int32: number) {
67
+ this.keys = keys
68
+ this.int32 = int32
69
+ }
70
+
71
+ public toInt32(): number {
72
+ return this.int32
73
+ }
74
+
75
+ public toString(): string {
76
+ const object: Record<string, boolean> = {}
77
+ for (const key of this.keys) {
78
+ object[key] = (this as unknown as Record<string, boolean>)[key]
79
+ }
80
+ return JSON.stringify(object)
81
+ }
82
+ }
@@ -0,0 +1,106 @@
1
+ import type { ExpressionResult, ExpressionSingleResult } from '../../expression/index.ts'
2
+ import type { VariableBundle } from './mark.ts'
3
+
4
+ import { ExpressionMaskList } from '../../expression/index.ts'
5
+ import { VariableBundleDescription } from './mark.ts'
6
+
7
+ export interface Quantum<K extends string> {
8
+ readonly keys: readonly K[]
9
+ variable(variable?: Partial<Record<K, boolean>>): QuantumVariable<K>
10
+ }
11
+
12
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ export type QuantumVariableType<Q extends Quantum<any>> = VariableBundle<Q['keys'][0]>
14
+
15
+ export interface QuantumVariable<K extends string> extends Iterable<VariableBundle<K>> {
16
+ assign(other: QuantumVariable<K>): this
17
+ push(expression: ExpressionResult, calculate: QuantumCalculator<K>): void
18
+ update(invoker: (variable: VariableBundle<K>) => void): void
19
+ }
20
+
21
+ export type QuantumCalculator<K extends string> = (singleExpression: ExpressionSingleResult, variable: VariableBundle<K>) => void
22
+
23
+ export function makeQuantum<K extends string>(keys: readonly K[]): Quantum<K> {
24
+ return new QuantumImpls(keys)
25
+ }
26
+
27
+ class QuantumImpls<K extends string> {
28
+ private readonly description: VariableBundleDescription<K>
29
+
30
+ public constructor(keys: readonly K[]) {
31
+ this.description = new VariableBundleDescription(keys)
32
+ }
33
+
34
+ public get keys(): readonly K[] {
35
+ return this.description.keys
36
+ }
37
+
38
+ public variable(variable?: Partial<Record<K, boolean>>): QuantumVariable<K> {
39
+ let int32: number | undefined
40
+ if (variable) {
41
+ int32 = this.description.toBundle(variable).toInt32()
42
+ }
43
+ return new QuantumVariableImpls(this.description, int32)
44
+ }
45
+ }
46
+
47
+ class QuantumVariableImpls<K extends string> implements QuantumVariable<K> {
48
+ private readonly description: VariableBundleDescription<K>
49
+ private values: Set<number> = new Set()
50
+
51
+ public constructor(description: VariableBundleDescription<K>, int32?: number) {
52
+ this.description = description
53
+ if (int32 !== undefined) {
54
+ this.values.add(int32)
55
+ }
56
+ }
57
+
58
+ public [Symbol.iterator](): Iterator<VariableBundle<K>> {
59
+ const iterator = this.values[Symbol.iterator]()
60
+ return {
61
+ next: (): IteratorResult<VariableBundle<K>> => {
62
+ const result = iterator.next()
63
+ if (result.done) {
64
+ return result
65
+ } else {
66
+ return {
67
+ done: false,
68
+ value: this.description.toBundle(result.value),
69
+ }
70
+ }
71
+ },
72
+ }
73
+ }
74
+
75
+ public assign(other: QuantumVariable<K>): this {
76
+ const { values } = other as QuantumVariableImpls<K>
77
+ for (const int32 of values) {
78
+ this.values.add(int32)
79
+ }
80
+ return this
81
+ }
82
+
83
+ public push(expression: ExpressionResult, calculate: QuantumCalculator<K>): void {
84
+ const nextValues = new Set<number>()
85
+ for (const int32 of this.values) {
86
+ for (const [singleExpression, mask] of ExpressionMaskList) {
87
+ if (expression & mask) {
88
+ const variable = this.description.toBundle(int32)
89
+ calculate(singleExpression, variable)
90
+ nextValues.add(variable.toInt32())
91
+ }
92
+ }
93
+ }
94
+ this.values = nextValues
95
+ }
96
+
97
+ public update(invoker: (variable: VariableBundle<K>) => void): void {
98
+ const nextValues = new Set<number>()
99
+ for (const int32 of this.values) {
100
+ const variable = this.description.toBundle(int32)
101
+ invoker(variable)
102
+ nextValues.add(variable.toInt32())
103
+ }
104
+ this.values = nextValues
105
+ }
106
+ }
@@ -0,0 +1,210 @@
1
+ export type Range = readonly [Point, Point]
2
+ export type Point = {
3
+ readonly num: number
4
+ readonly exclusive: boolean
5
+ }
6
+
7
+ export type Splitter = {
8
+ readonly left?: SplitterSide
9
+ readonly right?: SplitterSide
10
+ readonly center?: Range
11
+ }
12
+
13
+ export type SplitterSide = {
14
+ readonly fromLeft: boolean
15
+ readonly range: Range
16
+ }
17
+
18
+ export function splitRange(range1: Range, range2: Range): Splitter {
19
+ const [min1] = range1
20
+ const [min2] = range2
21
+
22
+ if (min1.num < min2.num) {
23
+ return splitRangeLessBranch(range1, range2)
24
+ } else if (min1.num > min2.num) {
25
+ return splitRangeGreaterBranch(range1, range2)
26
+ } else {
27
+ return splitRangeEqualsBranch(range1, range2)
28
+ }
29
+ }
30
+
31
+ function splitRangeLessBranch(range1: Range, range2: Range): Splitter {
32
+ const [min1, max1] = range1
33
+ const [min2, max2] = range2
34
+
35
+ if (max1.num <= min2.num) {
36
+ const exclusive1 = max1.exclusive
37
+ const exclusive2 = min2.exclusive
38
+ if (max1.num < min2.num || exclusive1 || exclusive2) {
39
+ return {
40
+ left: { fromLeft: true, range: range1 },
41
+ right: { fromLeft: false, range: range2 },
42
+ }
43
+ }
44
+ }
45
+ if (max1.num <= max2.num) {
46
+ let hasRight = true
47
+ let isLeftRangeOverride = false
48
+
49
+ if (max1.num === max2.num) {
50
+ const exclusive1 = max1.exclusive
51
+ const exclusive2 = max2.exclusive
52
+ hasRight = exclusive1 !== exclusive2
53
+ isLeftRangeOverride = !exclusive1 && exclusive2
54
+ }
55
+ if (!isLeftRangeOverride) {
56
+ let right: SplitterSide | undefined
57
+ if (hasRight) {
58
+ right = {
59
+ fromLeft: false,
60
+ range: [reversalExclusive(max1), max2],
61
+ }
62
+ }
63
+ return {
64
+ left: {
65
+ fromLeft: true,
66
+ range: [min1, reversalExclusive(min2)],
67
+ },
68
+ center: [min2, max1],
69
+ right,
70
+ }
71
+ }
72
+ }
73
+ // if (max1.num > max2.num || (max1.num === max2.num && max1.exclusive === false && max2.exclusive === true))
74
+ {
75
+ return {
76
+ left: {
77
+ fromLeft: true,
78
+ range: [min1, reversalExclusive(min2)],
79
+ },
80
+ center: [min2, max2],
81
+ right: {
82
+ fromLeft: true,
83
+ range: [reversalExclusive(max2), max1],
84
+ },
85
+ }
86
+ }
87
+ }
88
+
89
+ function splitRangeGreaterBranch(range1: Range, range2: Range): Splitter {
90
+ const [min1, max1] = range1
91
+ const [min2, max2] = range2
92
+
93
+ if (min1.num >= max2.num) {
94
+ const exclusive1 = max2.exclusive
95
+ const exclusive2 = min1.exclusive
96
+ if (min1.num > max2.num || exclusive1 || exclusive2) {
97
+ return {
98
+ left: { fromLeft: false, range: range2 },
99
+ right: { fromLeft: true, range: range1 },
100
+ }
101
+ }
102
+ }
103
+ if (max2.num <= max1.num) {
104
+ let hasRight = true
105
+ let isRightRangeOverride = false
106
+
107
+ if (max1.num === max2.num) {
108
+ const exclusive1 = max2.exclusive
109
+ const exclusive2 = max1.exclusive
110
+ hasRight = exclusive1 !== exclusive2
111
+ isRightRangeOverride = !exclusive1 && exclusive2
112
+ }
113
+ if (!isRightRangeOverride) {
114
+ let right: SplitterSide | undefined
115
+ if (hasRight) {
116
+ right = {
117
+ fromLeft: true,
118
+ range: [reversalExclusive(max2), max1],
119
+ }
120
+ }
121
+ return {
122
+ left: {
123
+ fromLeft: false,
124
+ range: [min2, reversalExclusive(min1)],
125
+ },
126
+ center: [min1, max2],
127
+ right,
128
+ }
129
+ }
130
+ }
131
+ // if (max2.num > max1.num || (max2.num === max1.num && max2.exclusive === false && max1.exclusive === true))
132
+ {
133
+ return {
134
+ left: {
135
+ fromLeft: false,
136
+ range: [min2, reversalExclusive(min1)],
137
+ },
138
+ center: [min1, max1],
139
+ right: {
140
+ fromLeft: false,
141
+ range: [reversalExclusive(max1), max2],
142
+ },
143
+ }
144
+ }
145
+ }
146
+
147
+ function splitRangeEqualsBranch(range1: Range, range2: Range): Splitter {
148
+ const [min1, max1] = range1
149
+ const [min2, max2] = range2
150
+ const exclusive1 = min1.exclusive
151
+ const exclusive2 = min2.exclusive
152
+
153
+ let left: SplitterSide | undefined
154
+ let centerBegin = min1
155
+
156
+ if (!exclusive1 && exclusive2) {
157
+ centerBegin = min2
158
+ left = {
159
+ fromLeft: true,
160
+ range: [min1, reversalExclusive(min2)],
161
+ }
162
+ } else if (exclusive1 && !exclusive2) {
163
+ left = {
164
+ fromLeft: false,
165
+ range: [min2, reversalExclusive(min1)],
166
+ }
167
+ }
168
+ if (max1.num <= max2.num) {
169
+ let hasRight = true
170
+ let isLeftRangeOverride = false
171
+ if (max1.num === max2.num) {
172
+ const maxExclusive1 = max1.exclusive
173
+ const maxExclusive2 = max2.exclusive
174
+ hasRight = maxExclusive1 !== maxExclusive2
175
+ isLeftRangeOverride = !maxExclusive1 && maxExclusive2
176
+ }
177
+ if (!isLeftRangeOverride) {
178
+ let right: SplitterSide | undefined
179
+ if (hasRight) {
180
+ right = {
181
+ fromLeft: false,
182
+ range: [reversalExclusive(max1), max2],
183
+ }
184
+ }
185
+ return {
186
+ left,
187
+ center: [centerBegin, max1],
188
+ right,
189
+ }
190
+ }
191
+ }
192
+ // if (max1.num > max2.num || (max1.num === max2.num && max1.exclusive === false && max2.exclusive === true))
193
+ {
194
+ return {
195
+ left,
196
+ center: [centerBegin, max2],
197
+ right: {
198
+ fromLeft: true,
199
+ range: [reversalExclusive(max2), max1],
200
+ },
201
+ }
202
+ }
203
+ }
204
+
205
+ function reversalExclusive(point: Point): Point {
206
+ return {
207
+ num: point.num,
208
+ exclusive: !point.exclusive,
209
+ }
210
+ }
@@ -0,0 +1,23 @@
1
+ import type { CompiledSchema } from '../compiler/index.ts'
2
+
3
+ export const ValidResult = Object.freeze({
4
+ Valid: 0,
5
+ Invalid: 1,
6
+ Unknown: 2,
7
+ })
8
+
9
+ export type ValidResult = (typeof ValidResult)[keyof typeof ValidResult]
10
+
11
+ export function valid<E>(compiledSchema: CompiledSchema<E>, value: unknown): ValidResult {
12
+ const isValid = compiledSchema.isValid
13
+ if (isValid) {
14
+ const result = isValid(value)
15
+ if (result === true) {
16
+ return ValidResult.Valid
17
+ } else {
18
+ return ValidResult.Invalid
19
+ }
20
+ } else {
21
+ return ValidResult.Unknown
22
+ }
23
+ }
@@ -0,0 +1,163 @@
1
+ import type { JSONSchema7, JSONSchema7Definition } from 'json-schema'
2
+ import type { JSONDelegate } from '../types.ts'
3
+ import type { Schema } from '../types.ts'
4
+ import type { Context } from './common.ts'
5
+ import type { InputSchema } from './compiler.ts'
6
+ import type { CompiledSchema } from './wrapper.ts'
7
+
8
+ import { joinPath, recordWarn, unwrapJSONSchema7Definition } from './common.ts'
9
+ import { compileSchema } from './compiler.ts'
10
+ import { cleanEmptyValues } from './utils.ts'
11
+ import { wrapCompiledSchema, CompiledKind, getKind, toNever, isCompiledSchema } from './wrapper.ts'
12
+
13
+ export function compileArraySchema<E>(context: Context<E>, schema: InputSchema): CompiledSchema<E> | null {
14
+ let items = compileItems(context, schema)
15
+ let maxItems = getItemsLimit(context, 'maxItems', schema)
16
+ const minItems = getItemsLimit(context, 'minItems', schema)
17
+ const contains = compileContains(context, schema)
18
+ const uniqueItems = schema.uniqueItems
19
+
20
+ // Undefined means no value is required, while null represents a compilation error.
21
+ let additionalItems: Schema<E> | false | null | undefined
22
+
23
+ if (Array.isArray(items)) {
24
+ additionalItems = compileAdditionalItems(context, schema)
25
+ } else if (schema.additionalItems) {
26
+ // Additional items are ignored when items is not an array.
27
+ // See https://datatracker.ietf.org/doc/html/draft-handrews-json-schema-validation-01#section-6.4.2.
28
+ recordWarn(context, 'it is needless when items is not array', 'additionalItems')
29
+ }
30
+ if (!items || !contains || additionalItems === null) {
31
+ return null
32
+ }
33
+ let isNever = false
34
+ let updateMaxItems = false
35
+
36
+ if (Array.isArray(items)) {
37
+ if (maxItems !== undefined && maxItems <= items.length) {
38
+ items = items.splice(maxItems)
39
+ additionalItems = variableToNever(additionalItems, context.delegate)
40
+ }
41
+ const firstNeverItemIndex = items.findIndex((item) => getKind(item) === CompiledKind.Never)
42
+
43
+ if (firstNeverItemIndex !== -1) {
44
+ items = items.splice(firstNeverItemIndex)
45
+ additionalItems = variableToNever(additionalItems, context.delegate)
46
+ if (maxItems === undefined) {
47
+ maxItems = items.length
48
+ updateMaxItems = true
49
+ }
50
+ }
51
+ if (minItems !== undefined && items.length < minItems) {
52
+ recordWarn(context, `length(${items.length}) of items if less than minItems(${minItems})`)
53
+ isNever = true
54
+ }
55
+ if (items.length === 0 && additionalItems && getKind(additionalItems) === CompiledKind.Never) {
56
+ isNever = true
57
+ }
58
+ } else if (getKind(items) === CompiledKind.Never) {
59
+ isNever = true
60
+ }
61
+ if (maxItems !== undefined && minItems !== undefined && maxItems < minItems) {
62
+ if (!updateMaxItems) {
63
+ recordWarn(context, `maxItems(${maxItems}) is less than minItems(${minItems})`)
64
+ }
65
+ isNever = true
66
+ }
67
+ const kind = isNever ? CompiledKind.Never : CompiledKind.Array
68
+ const mergedSchema = cleanEmptyValues({
69
+ type: 'array',
70
+ items,
71
+ contains,
72
+ uniqueItems,
73
+ maxItems,
74
+ minItems,
75
+ additionalItems: additionalItems!,
76
+ })
77
+ return wrapCompiledSchema(kind, mergedSchema as JSONSchema7, context.delegate, context.path)
78
+ }
79
+
80
+ function compileItems<E>(context: Context<E>, { items }: InputSchema): Schema<E> | Schema<E>[] | null {
81
+ if (!items) {
82
+ return wrapCompiledSchema(CompiledKind.Any, {}, context.delegate, context.path)
83
+ }
84
+ if (Array.isArray(items)) {
85
+ const schemas: Schema<E>[] = []
86
+ let hasAnyError = false
87
+ for (const [i, item] of items.entries()) {
88
+ const subContext = joinPath(context, 'items', i)
89
+ const schema = compileSchema(subContext, unwrapJSONSchema7Definition(item))
90
+ if (!schema) {
91
+ hasAnyError = true
92
+ continue
93
+ }
94
+ schemas.push(schema)
95
+ }
96
+ if (hasAnyError) {
97
+ return null
98
+ }
99
+ return schemas
100
+ } else {
101
+ const subContext = joinPath(context, 'items')
102
+ const itemsSchema = unwrapJSONSchema7Definition(items as JSONSchema7Definition)
103
+ const schema = compileSchema(subContext, itemsSchema)
104
+
105
+ return schema
106
+ }
107
+ }
108
+
109
+ function getItemsLimit<E>(context: Context<E>, name: 'maxItems' | 'minItems', schema: InputSchema): number | undefined {
110
+ const propertiesLimit = schema[name]
111
+ if (propertiesLimit === undefined) {
112
+ return undefined
113
+ }
114
+ if (Number.isNaN(propertiesLimit)) {
115
+ recordWarn(context, 'find NaN', name)
116
+ return undefined
117
+ }
118
+ if (propertiesLimit < 0) {
119
+ recordWarn(context, `find invalid number ${propertiesLimit}`, name)
120
+ return undefined
121
+ }
122
+ return propertiesLimit
123
+ }
124
+
125
+ function compileContains<E>(context: Context<E>, { contains }: InputSchema): Schema<E> | null {
126
+ if (!contains) {
127
+ return wrapCompiledSchema(CompiledKind.Any, {}, context.delegate, context.path)
128
+ }
129
+ const subContext = joinPath(context, 'contains')
130
+ const containsSchema = unwrapJSONSchema7Definition(contains)
131
+
132
+ return compileSchema(subContext, containsSchema)
133
+ }
134
+
135
+ function compileAdditionalItems<E>(context: Context<E>, { additionalItems }: InputSchema): Schema<E> | false | null {
136
+ switch (typeof additionalItems) {
137
+ case 'boolean': {
138
+ if (additionalItems) {
139
+ return wrapCompiledSchema(CompiledKind.Any, {}, context.delegate, context.path)
140
+ } else {
141
+ return false
142
+ }
143
+ }
144
+ case 'object': {
145
+ const subContext = joinPath(context, 'additionalItems')
146
+ const compiledSchema = compileSchema(subContext, additionalItems)
147
+ return compiledSchema
148
+ }
149
+ default: {
150
+ return wrapCompiledSchema(CompiledKind.Any, {}, context.delegate, context.path)
151
+ }
152
+ }
153
+ }
154
+
155
+ function variableToNever<T, E>(schema: Schema<E> | T | undefined, delegate?: JSONDelegate<E>): Schema<E> | T {
156
+ if (schema === undefined) {
157
+ return wrapCompiledSchema(CompiledKind.Never, { type: 'string', maxLength: 0, minLength: 1 }, delegate)
158
+ } else if (isCompiledSchema(schema)) {
159
+ return getKind(schema) === CompiledKind.Never ? schema : toNever(schema as CompiledSchema<E>)
160
+ } else {
161
+ return schema
162
+ }
163
+ }
@@ -0,0 +1,109 @@
1
+ import type { JSONSchema7Definition } from 'json-schema'
2
+ import type { Schema } from '../types.ts'
3
+ import type { JSONDelegate } from '../types.ts'
4
+ import type { DeepReadonly } from '../utils.ts'
5
+ import type { Context } from './common.ts'
6
+ import type { CompiledSchema } from './wrapper.ts'
7
+
8
+ import { joinPath, unwrapJSONSchema7Definition, recordError } from './common.ts'
9
+ import { compileSchema } from './compiler.ts'
10
+ import { getKind, CompiledKind, wrapCompiledSchema } from './wrapper.ts'
11
+
12
+ export type CombinationKeys = 'allOf' | 'anyOf' | 'oneOf'
13
+ export const COMBINATION_KEYS: readonly CombinationKeys[] = Object.freeze(['allOf', 'anyOf', 'oneOf'])
14
+
15
+ export function compileCombinationSchema<E>(
16
+ context: Context<E>,
17
+ key: CombinationKeys,
18
+ combinationList: DeepReadonly<JSONSchema7Definition[]>,
19
+ delegate?: JSONDelegate<E>,
20
+ ): CompiledSchema<E> | null {
21
+ if (combinationList.length === 0) {
22
+ recordError(context, 'disable empty list', key)
23
+ return null
24
+ }
25
+ const compiledCombinationList: Schema<E>[] = []
26
+
27
+ for (const [i, element] of combinationList.entries()) {
28
+ const subContext = joinPath(context, key, i)
29
+ const schema = unwrapJSONSchema7Definition(element)
30
+ const compiledSchema = compileSchema(subContext, schema)
31
+ if (compiledSchema) {
32
+ compiledCombinationList.push(compiledSchema)
33
+ }
34
+ }
35
+ if (compiledCombinationList.length < combinationList.length) {
36
+ return null
37
+ }
38
+ let anyCount = 0
39
+ let neverCount = 0
40
+
41
+ for (const compiledSchema of compiledCombinationList) {
42
+ switch (getKind(compiledSchema)) {
43
+ case CompiledKind.Any: {
44
+ anyCount += 1
45
+ break
46
+ }
47
+ case CompiledKind.Never: {
48
+ neverCount += 1
49
+ break
50
+ }
51
+ }
52
+ }
53
+ let kind: CompiledKind = CompiledKind.Combination
54
+
55
+ switch (key) {
56
+ case 'allOf': {
57
+ if (neverCount > 0) {
58
+ kind = CompiledKind.Never
59
+ } else if (anyCount === compiledCombinationList.length) {
60
+ kind = CompiledKind.Any
61
+ } else if (!areAllTypesTheSame(compiledCombinationList)) {
62
+ kind = CompiledKind.Never
63
+ }
64
+ break
65
+ }
66
+ case 'anyOf': {
67
+ if (anyCount > 0) {
68
+ kind = CompiledKind.Any
69
+ } else if (neverCount === compiledCombinationList.length) {
70
+ kind = CompiledKind.Never
71
+ }
72
+ break
73
+ }
74
+ case 'oneOf': {
75
+ if (anyCount > 1) {
76
+ // More than one unconstrained branch violates oneOf because at least two branches will match.
77
+ kind = CompiledKind.Never
78
+ } else if (neverCount === compiledCombinationList.length) {
79
+ kind = CompiledKind.Never
80
+ } else if (anyCount === 1 && neverCount === compiledCombinationList.length - 1) {
81
+ kind = CompiledKind.Any
82
+ }
83
+ break
84
+ }
85
+ }
86
+ return wrapCompiledSchema(kind, { [key]: compiledCombinationList }, delegate, context.path)
87
+ }
88
+
89
+ function areAllTypesTheSame<E>(combinationList: Schema<E>[]): boolean {
90
+ let lastKind: CompiledKind | null = null
91
+ for (const schema of combinationList) {
92
+ const kind = getKind(schema)
93
+ switch (kind) {
94
+ case CompiledKind.Any:
95
+ case CompiledKind.Never: {
96
+ break
97
+ }
98
+ default: {
99
+ if (lastKind === null) {
100
+ lastKind = kind
101
+ } else if (lastKind !== kind) {
102
+ return false
103
+ }
104
+ break
105
+ }
106
+ }
107
+ }
108
+ return true
109
+ }