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

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 (432) hide show
  1. package/LICENSE +36 -0
  2. package/NOTICE +7 -0
  3. package/README.md +40 -0
  4. package/dist/browser/{createResourceDialog-BWJkjiOO.js → createResourceDialog-DI9pL-Yr.js} +2 -2
  5. package/dist/browser/{dialog-CUy_fwx9.js → dialog-BYJGvItc.js} +54 -19
  6. package/dist/browser/{flowChanges-CgSnSqqP.js → flowChanges-RL-H4CjD.js} +306 -48
  7. package/dist/browser/{flowWorkspace-Bf7H-r0t.js → flowWorkspace-BkDsETj0.js} +20745 -20186
  8. package/dist/browser/preview.css +73 -3
  9. package/dist/browser/preview.js +21410 -20607
  10. package/dist/browser/{typeScriptSession-B0hC-C8y.js → typeScriptSession-CSRwWmZm.js} +1 -1
  11. package/dist/browser/ui.css +72 -2
  12. package/dist/browser/workbench.css +73 -3
  13. package/dist/browser/workbench.js +14 -76
  14. package/dist/browser/{workbenchSelect-C3e4J93X.js → workbenchSelect-BcWPWGzw.js} +1 -1
  15. package/dist/command/index.js +34 -34
  16. package/dist/common/authoring.d.ts +1 -1
  17. package/dist/common/authoringFields.d.ts +1 -1
  18. package/dist/common/authoringSchema.d.ts +28 -4
  19. package/dist/common/connector-proxy.d.ts +1 -1
  20. package/dist/common/control-api-conformance.d.ts +1 -1
  21. package/dist/common/control-api-conformance.js +61 -24
  22. package/dist/common/control-api.d.ts +4 -3
  23. package/dist/common/control-api.js +59 -22
  24. package/dist/common/control-requests.d.ts +2 -1
  25. package/dist/common/control-requests.js +204 -42
  26. package/dist/common/cron-trigger.d.ts +1 -1
  27. package/dist/common/decision.d.ts +1 -1
  28. package/dist/common/draftOperations.d.ts +1 -1
  29. package/dist/common/engine-contract.d.ts +3 -2
  30. package/dist/common/event-source-definition.d.ts +1 -1
  31. package/dist/common/flow-agent.d.ts +1 -1
  32. package/dist/{browser → common}/flow-authoring-node.d.ts +3 -3
  33. package/dist/{browser → common}/flow-authoring.js +75 -23
  34. package/dist/{browser → common}/flow-change-schema.d.ts +177 -6
  35. package/dist/{browser → common}/flow-change.d.ts +35 -15
  36. package/dist/{browser → common}/flow-change.js +77 -25
  37. package/dist/common/flow-connectionUsage.d.ts +1 -1
  38. package/dist/common/flow-encoding.d.ts +1 -1
  39. package/dist/common/flow-encoding.js +34 -16
  40. package/dist/common/flow-errorHandling.d.ts +1 -1
  41. package/dist/common/flow-graph.d.ts +1 -1
  42. package/dist/common/flow-modules.d.ts +1 -1
  43. package/dist/common/flow-promptTemplate.d.ts +1 -1
  44. package/dist/common/flow-retry.d.ts +1 -1
  45. package/dist/common/flow-semantics.d.ts +1 -1
  46. package/dist/common/flow-semantics.js +151 -32
  47. package/dist/common/flow-workflowFile.d.ts +1 -1
  48. package/dist/common/flowInspection.d.ts +3 -3
  49. package/dist/common/integration-trigger.d.ts +1 -1
  50. package/dist/common/licenses.md +118 -1
  51. package/dist/common/liveDetails.d.ts +1 -1
  52. package/dist/common/mcp.d.ts +2 -1
  53. package/dist/common/mcp.js +59 -22
  54. package/dist/common/openapi.d.ts +1 -1
  55. package/dist/common/poll-trigger.d.ts +1 -1
  56. package/dist/common/run-results.d.ts +8 -1
  57. package/dist/common/runtime-contract.d.ts +8 -2
  58. package/dist/common/runtime-contract.js +22 -5
  59. package/dist/common/scheduler-checkpoint.d.ts +1 -1
  60. package/dist/common/scheduler-dependencies.d.ts +1 -1
  61. package/dist/common/scheduler-node-execution.d.ts +1 -1
  62. package/dist/common/scheduler.d.ts +2 -2
  63. package/dist/common/scheduler.js +31 -12
  64. package/dist/common/trigger-catalog.d.ts +1 -1
  65. package/dist/common/trigger-config-options.d.ts +1 -1
  66. package/dist/common/trigger-config.d.ts +1 -1
  67. package/dist/common/trigger-contract.d.ts +2 -2
  68. package/dist/common/trigger-localization.d.ts +1 -1
  69. package/dist/common/webhook-response.d.ts +1 -1
  70. package/dist/common/webhook-trigger.d.ts +1 -1
  71. package/dist/common/workflow.d.ts +17 -1
  72. package/dist/common/workflow.js +68 -22
  73. package/dist/index.d.ts +6 -3
  74. package/package.json +7 -6
  75. package/src/base/common/json.ts +90 -0
  76. package/src/canvas/common/commands.ts +15 -0
  77. package/src/connector/common/actionSchema.ts +168 -0
  78. package/src/connector/common/proxy.ts +44 -0
  79. package/src/control/common/api.ts +1505 -0
  80. package/src/control/common/authoring.ts +912 -0
  81. package/src/control/common/authoringCondition.ts +110 -0
  82. package/src/control/common/authoringDiagnosticFields.ts +136 -0
  83. package/src/control/common/authoringExamples.ts +192 -0
  84. package/src/control/common/authoringFields.ts +53 -0
  85. package/src/control/common/authoringLlm.ts +70 -0
  86. package/src/control/common/authoringOpenApi.ts +129 -0
  87. package/src/control/common/authoringSchema.ts +404 -0
  88. package/src/control/common/authoringTools.ts +123 -0
  89. package/src/control/common/authoringTriggers.ts +26 -0
  90. package/src/control/common/checkDecoders.ts +65 -0
  91. package/src/control/common/conformance.ts +1989 -0
  92. package/src/control/common/connectorDecoders.ts +370 -0
  93. package/src/control/common/connectorQueries.ts +61 -0
  94. package/src/control/common/decoding.ts +60 -0
  95. package/src/control/common/draftOperations.ts +61 -0
  96. package/src/control/common/errors.ts +114 -0
  97. package/src/control/common/eventSourceSchemas.ts +13 -0
  98. package/src/control/common/eventSources.ts +186 -0
  99. package/src/control/common/flowDecoders.ts +153 -0
  100. package/src/control/common/flowInspection.ts +181 -0
  101. package/src/control/common/flowNotifications.ts +37 -0
  102. package/src/control/common/liveDetails.ts +124 -0
  103. package/src/control/common/mcp.ts +241 -0
  104. package/src/control/common/mcpConformance.ts +142 -0
  105. package/src/control/common/providerAccess.ts +28 -0
  106. package/src/control/common/providerIconSprite.ts +42 -0
  107. package/src/control/common/publicationDecoders.ts +98 -0
  108. package/src/control/common/random.ts +16 -0
  109. package/src/control/common/requests.ts +112 -0
  110. package/src/control/common/resultQuery.ts +8 -0
  111. package/src/control/common/results.ts +176 -0
  112. package/src/control/common/revisionDecoders.ts +52 -0
  113. package/src/control/common/runDecoders.ts +240 -0
  114. package/src/control/common/triggerCatalog.ts +89 -0
  115. package/src/control/common/triggerDecoders.ts +175 -0
  116. package/src/decision/common/decision.ts +168 -0
  117. package/src/event-source/common/catalog.generated.json +65 -0
  118. package/src/event-source/common/definition.ts +66 -0
  119. package/src/event-source/common/index.ts +99 -0
  120. package/src/execution/common/checkpoint.ts +311 -0
  121. package/src/execution/common/dependencies.ts +440 -0
  122. package/src/execution/common/engineContract.ts +80 -0
  123. package/src/execution/common/events.ts +328 -0
  124. package/src/execution/common/node-execution.ts +467 -0
  125. package/src/execution/common/runLifecycle.ts +250 -0
  126. package/src/execution/common/runtime.ts +563 -0
  127. package/src/execution/common/scheduler.ts +696 -0
  128. package/src/execution/common/wait.ts +36 -0
  129. package/src/flow/common/agent.ts +305 -0
  130. package/src/flow/common/authoring.ts +30 -0
  131. package/src/flow/common/change.ts +1036 -0
  132. package/src/flow/common/changeSchema.ts +783 -0
  133. package/src/flow/common/codePermissions.ts +2 -0
  134. package/src/flow/common/condition.ts +265 -0
  135. package/src/flow/common/connectionUsage.ts +131 -0
  136. package/src/flow/common/edgeChanges.ts +35 -0
  137. package/src/flow/common/encoding.ts +437 -0
  138. package/src/flow/common/errorHandling.ts +34 -0
  139. package/src/flow/common/graph.ts +892 -0
  140. package/src/flow/common/inputValue.ts +16 -0
  141. package/src/flow/common/json.ts +8 -0
  142. package/src/flow/common/moduleChanges.ts +31 -0
  143. package/src/flow/common/modules.ts +292 -0
  144. package/src/flow/common/nodeChanges.ts +762 -0
  145. package/src/flow/common/portChanges.ts +36 -0
  146. package/src/flow/common/promptTemplate.ts +15 -0
  147. package/src/flow/common/retry.ts +20 -0
  148. package/src/flow/common/schema.ts +162 -0
  149. package/src/flow/common/schemaCompare.ts +176 -0
  150. package/src/flow/common/schemaComparer.ts +178 -0
  151. package/src/flow/common/schemaKeywords.ts +53 -0
  152. package/src/flow/common/semantics.ts +474 -0
  153. package/src/flow/common/sourceField.ts +35 -0
  154. package/src/flow/common/triggerScheduleSchema.ts +8 -0
  155. package/src/flow/common/wait.ts +30 -0
  156. package/src/flow/common/webhookMethod.ts +7 -0
  157. package/src/flow/common/webhookResponse.ts +75 -0
  158. package/src/flow/common/workflowFile.ts +97 -0
  159. package/src/json-schema-subset/checker/array.ts +142 -0
  160. package/src/json-schema-subset/checker/cache.ts +57 -0
  161. package/src/json-schema-subset/checker/checker.ts +230 -0
  162. package/src/json-schema-subset/checker/enumAndConst.ts +113 -0
  163. package/src/json-schema-subset/checker/equals.ts +93 -0
  164. package/src/json-schema-subset/checker/numeric/checker.ts +50 -0
  165. package/src/json-schema-subset/checker/numeric/float.ts +121 -0
  166. package/src/json-schema-subset/checker/numeric/index.ts +1 -0
  167. package/src/json-schema-subset/checker/numeric/integer.ts +119 -0
  168. package/src/json-schema-subset/checker/numeric/integerNormalizer.ts +72 -0
  169. package/src/json-schema-subset/checker/object.ts +354 -0
  170. package/src/json-schema-subset/checker/range.ts +91 -0
  171. package/src/json-schema-subset/checker/string.ts +60 -0
  172. package/src/json-schema-subset/checker/tools/index.ts +3 -0
  173. package/src/json-schema-subset/checker/tools/mark.ts +82 -0
  174. package/src/json-schema-subset/checker/tools/quantum.ts +106 -0
  175. package/src/json-schema-subset/checker/tools/range.ts +210 -0
  176. package/src/json-schema-subset/checker/validator.ts +23 -0
  177. package/src/json-schema-subset/compiler/array.ts +163 -0
  178. package/src/json-schema-subset/compiler/combination.ts +109 -0
  179. package/src/json-schema-subset/compiler/common.ts +99 -0
  180. package/src/json-schema-subset/compiler/compiler.ts +188 -0
  181. package/src/json-schema-subset/compiler/enumAndConst.ts +75 -0
  182. package/src/json-schema-subset/compiler/index.ts +11 -0
  183. package/src/json-schema-subset/compiler/object.ts +411 -0
  184. package/src/json-schema-subset/compiler/primitive.ts +144 -0
  185. package/src/json-schema-subset/compiler/utils.ts +24 -0
  186. package/src/json-schema-subset/compiler/wrapper.ts +192 -0
  187. package/src/json-schema-subset/error.ts +55 -0
  188. package/src/json-schema-subset/expression/calculator.ts +442 -0
  189. package/src/json-schema-subset/expression/combination.ts +49 -0
  190. package/src/json-schema-subset/expression/expression.ts +191 -0
  191. package/src/json-schema-subset/expression/index.ts +25 -0
  192. package/src/json-schema-subset/expression/result.ts +88 -0
  193. package/src/json-schema-subset/expression/types.ts +36 -0
  194. package/src/json-schema-subset/extends/extendsContext.ts +89 -0
  195. package/src/json-schema-subset/extends/index.ts +2 -0
  196. package/src/json-schema-subset/extends/types.ts +12 -0
  197. package/src/json-schema-subset/global.ts +60 -0
  198. package/src/json-schema-subset/index.ts +8 -0
  199. package/src/json-schema-subset/preprocessing.ts +74 -0
  200. package/src/json-schema-subset/types.ts +8 -0
  201. package/src/json-schema-subset/utils.ts +95 -0
  202. package/src/localization/common/languages.ts +118 -0
  203. package/src/localization/common/timeZone.ts +25 -0
  204. package/src/openapi/common/authBindings.ts +12 -0
  205. package/src/openapi/common/openapi.ts +459 -0
  206. package/src/trigger/common/config.ts +56 -0
  207. package/src/trigger/common/configOptions.ts +15 -0
  208. package/src/trigger/common/configSchema.ts +8 -0
  209. package/src/trigger/common/contract.ts +132 -0
  210. package/src/trigger/common/cron.ts +151 -0
  211. package/src/trigger/common/integration.ts +498 -0
  212. package/src/trigger/common/poll.ts +187 -0
  213. package/src/trigger/common/webhook.ts +412 -0
  214. package/src/trigger/providers/airtable/locales/fr.json +18 -0
  215. package/src/trigger/providers/airtable/locales/ja.json +18 -0
  216. package/src/trigger/providers/airtable/locales/ko.json +18 -0
  217. package/src/trigger/providers/airtable/locales/ru.json +18 -0
  218. package/src/trigger/providers/airtable/locales/zh-CN.json +18 -0
  219. package/src/trigger/providers/airtable/locales/zh-TW.json +18 -0
  220. package/src/trigger/providers/asana/locales/fr.json +15 -0
  221. package/src/trigger/providers/asana/locales/ja.json +15 -0
  222. package/src/trigger/providers/asana/locales/ko.json +15 -0
  223. package/src/trigger/providers/asana/locales/ru.json +15 -0
  224. package/src/trigger/providers/asana/locales/zh-CN.json +15 -0
  225. package/src/trigger/providers/asana/locales/zh-TW.json +15 -0
  226. package/src/trigger/providers/calendly/locales/fr.json +16 -0
  227. package/src/trigger/providers/calendly/locales/ja.json +16 -0
  228. package/src/trigger/providers/calendly/locales/ko.json +16 -0
  229. package/src/trigger/providers/calendly/locales/ru.json +16 -0
  230. package/src/trigger/providers/calendly/locales/zh-CN.json +16 -0
  231. package/src/trigger/providers/calendly/locales/zh-TW.json +16 -0
  232. package/src/trigger/providers/catalog.generated.json +4996 -0
  233. package/src/trigger/providers/clickup/locales/fr.json +16 -0
  234. package/src/trigger/providers/clickup/locales/ja.json +16 -0
  235. package/src/trigger/providers/clickup/locales/ko.json +16 -0
  236. package/src/trigger/providers/clickup/locales/ru.json +16 -0
  237. package/src/trigger/providers/clickup/locales/zh-CN.json +16 -0
  238. package/src/trigger/providers/clickup/locales/zh-TW.json +16 -0
  239. package/src/trigger/providers/definitions.ts +19 -0
  240. package/src/trigger/providers/feishu/locales/fr.json +20 -0
  241. package/src/trigger/providers/feishu/locales/ja.json +20 -0
  242. package/src/trigger/providers/feishu/locales/ko.json +20 -0
  243. package/src/trigger/providers/feishu/locales/ru.json +20 -0
  244. package/src/trigger/providers/feishu/locales/zh-CN.json +20 -0
  245. package/src/trigger/providers/feishu/locales/zh-TW.json +20 -0
  246. package/src/trigger/providers/fieldDescriptions.ts +392 -0
  247. package/src/trigger/providers/fieldLabels.ts +256 -0
  248. package/src/trigger/providers/fireflies/locales/fr.json +17 -0
  249. package/src/trigger/providers/fireflies/locales/ja.json +17 -0
  250. package/src/trigger/providers/fireflies/locales/ko.json +17 -0
  251. package/src/trigger/providers/fireflies/locales/ru.json +17 -0
  252. package/src/trigger/providers/fireflies/locales/zh-CN.json +17 -0
  253. package/src/trigger/providers/fireflies/locales/zh-TW.json +17 -0
  254. package/src/trigger/providers/github/locales/fr.json +30 -0
  255. package/src/trigger/providers/github/locales/ja.json +30 -0
  256. package/src/trigger/providers/github/locales/ko.json +30 -0
  257. package/src/trigger/providers/github/locales/ru.json +30 -0
  258. package/src/trigger/providers/github/locales/zh-CN.json +30 -0
  259. package/src/trigger/providers/github/locales/zh-TW.json +30 -0
  260. package/src/trigger/providers/gitlab/locales/fr.json +18 -0
  261. package/src/trigger/providers/gitlab/locales/ja.json +18 -0
  262. package/src/trigger/providers/gitlab/locales/ko.json +18 -0
  263. package/src/trigger/providers/gitlab/locales/ru.json +18 -0
  264. package/src/trigger/providers/gitlab/locales/zh-CN.json +18 -0
  265. package/src/trigger/providers/gitlab/locales/zh-TW.json +18 -0
  266. package/src/trigger/providers/gmail/locales/fr.json +18 -0
  267. package/src/trigger/providers/gmail/locales/ja.json +18 -0
  268. package/src/trigger/providers/gmail/locales/ko.json +18 -0
  269. package/src/trigger/providers/gmail/locales/ru.json +18 -0
  270. package/src/trigger/providers/gmail/locales/zh-CN.json +18 -0
  271. package/src/trigger/providers/gmail/locales/zh-TW.json +18 -0
  272. package/src/trigger/providers/google-calendar/locales/fr.json +15 -0
  273. package/src/trigger/providers/google-calendar/locales/ja.json +15 -0
  274. package/src/trigger/providers/google-calendar/locales/ko.json +15 -0
  275. package/src/trigger/providers/google-calendar/locales/ru.json +15 -0
  276. package/src/trigger/providers/google-calendar/locales/zh-CN.json +15 -0
  277. package/src/trigger/providers/google-calendar/locales/zh-TW.json +15 -0
  278. package/src/trigger/providers/google-drive/locales/fr.json +48 -0
  279. package/src/trigger/providers/google-drive/locales/ja.json +48 -0
  280. package/src/trigger/providers/google-drive/locales/ko.json +48 -0
  281. package/src/trigger/providers/google-drive/locales/ru.json +48 -0
  282. package/src/trigger/providers/google-drive/locales/zh-CN.json +48 -0
  283. package/src/trigger/providers/google-drive/locales/zh-TW.json +48 -0
  284. package/src/trigger/providers/google-sheets/locales/fr.json +19 -0
  285. package/src/trigger/providers/google-sheets/locales/ja.json +19 -0
  286. package/src/trigger/providers/google-sheets/locales/ko.json +19 -0
  287. package/src/trigger/providers/google-sheets/locales/ru.json +19 -0
  288. package/src/trigger/providers/google-sheets/locales/zh-CN.json +19 -0
  289. package/src/trigger/providers/google-sheets/locales/zh-TW.json +19 -0
  290. package/src/trigger/providers/intercom/locales/fr.json +17 -0
  291. package/src/trigger/providers/intercom/locales/ja.json +17 -0
  292. package/src/trigger/providers/intercom/locales/ko.json +17 -0
  293. package/src/trigger/providers/intercom/locales/ru.json +17 -0
  294. package/src/trigger/providers/intercom/locales/zh-CN.json +17 -0
  295. package/src/trigger/providers/intercom/locales/zh-TW.json +17 -0
  296. package/src/trigger/providers/jira/locales/fr.json +17 -0
  297. package/src/trigger/providers/jira/locales/ja.json +17 -0
  298. package/src/trigger/providers/jira/locales/ko.json +17 -0
  299. package/src/trigger/providers/jira/locales/ru.json +17 -0
  300. package/src/trigger/providers/jira/locales/zh-CN.json +17 -0
  301. package/src/trigger/providers/jira/locales/zh-TW.json +17 -0
  302. package/src/trigger/providers/linear/locales/fr.json +13 -0
  303. package/src/trigger/providers/linear/locales/ja.json +13 -0
  304. package/src/trigger/providers/linear/locales/ko.json +13 -0
  305. package/src/trigger/providers/linear/locales/ru.json +13 -0
  306. package/src/trigger/providers/linear/locales/zh-CN.json +13 -0
  307. package/src/trigger/providers/linear/locales/zh-TW.json +13 -0
  308. package/src/trigger/providers/locales/fr.ts +71 -0
  309. package/src/trigger/providers/locales/ja.ts +71 -0
  310. package/src/trigger/providers/locales/ko.ts +71 -0
  311. package/src/trigger/providers/locales/ru.ts +71 -0
  312. package/src/trigger/providers/locales/zh-CN.ts +71 -0
  313. package/src/trigger/providers/locales/zh-TW.ts +71 -0
  314. package/src/trigger/providers/localization.ts +59 -0
  315. package/src/trigger/providers/notion/locales/fr.json +16 -0
  316. package/src/trigger/providers/notion/locales/ja.json +16 -0
  317. package/src/trigger/providers/notion/locales/ko.json +16 -0
  318. package/src/trigger/providers/notion/locales/ru.json +16 -0
  319. package/src/trigger/providers/notion/locales/zh-CN.json +16 -0
  320. package/src/trigger/providers/notion/locales/zh-TW.json +16 -0
  321. package/src/trigger/providers/one-drive/locales/fr.json +16 -0
  322. package/src/trigger/providers/one-drive/locales/ja.json +16 -0
  323. package/src/trigger/providers/one-drive/locales/ko.json +16 -0
  324. package/src/trigger/providers/one-drive/locales/ru.json +16 -0
  325. package/src/trigger/providers/one-drive/locales/zh-CN.json +16 -0
  326. package/src/trigger/providers/one-drive/locales/zh-TW.json +16 -0
  327. package/src/trigger/providers/outlook/locales/fr.json +18 -0
  328. package/src/trigger/providers/outlook/locales/ja.json +18 -0
  329. package/src/trigger/providers/outlook/locales/ko.json +18 -0
  330. package/src/trigger/providers/outlook/locales/ru.json +18 -0
  331. package/src/trigger/providers/outlook/locales/zh-CN.json +18 -0
  332. package/src/trigger/providers/outlook/locales/zh-TW.json +18 -0
  333. package/src/trigger/providers/pandadoc/locales/fr.json +12 -0
  334. package/src/trigger/providers/pandadoc/locales/ja.json +12 -0
  335. package/src/trigger/providers/pandadoc/locales/ko.json +12 -0
  336. package/src/trigger/providers/pandadoc/locales/ru.json +12 -0
  337. package/src/trigger/providers/pandadoc/locales/zh-CN.json +12 -0
  338. package/src/trigger/providers/pandadoc/locales/zh-TW.json +12 -0
  339. package/src/trigger/providers/pipedrive/locales/fr.json +15 -0
  340. package/src/trigger/providers/pipedrive/locales/ja.json +15 -0
  341. package/src/trigger/providers/pipedrive/locales/ko.json +15 -0
  342. package/src/trigger/providers/pipedrive/locales/ru.json +15 -0
  343. package/src/trigger/providers/pipedrive/locales/zh-CN.json +15 -0
  344. package/src/trigger/providers/pipedrive/locales/zh-TW.json +15 -0
  345. package/src/trigger/providers/remote.ts +163 -0
  346. package/src/trigger/providers/resend/locales/fr.json +16 -0
  347. package/src/trigger/providers/resend/locales/ja.json +16 -0
  348. package/src/trigger/providers/resend/locales/ko.json +16 -0
  349. package/src/trigger/providers/resend/locales/ru.json +16 -0
  350. package/src/trigger/providers/resend/locales/zh-CN.json +16 -0
  351. package/src/trigger/providers/resend/locales/zh-TW.json +16 -0
  352. package/src/trigger/providers/sentry/locales/fr.json +19 -0
  353. package/src/trigger/providers/sentry/locales/ja.json +19 -0
  354. package/src/trigger/providers/sentry/locales/ko.json +19 -0
  355. package/src/trigger/providers/sentry/locales/ru.json +19 -0
  356. package/src/trigger/providers/sentry/locales/zh-CN.json +19 -0
  357. package/src/trigger/providers/sentry/locales/zh-TW.json +19 -0
  358. package/src/trigger/providers/shopify/locales/fr.json +18 -0
  359. package/src/trigger/providers/shopify/locales/ja.json +18 -0
  360. package/src/trigger/providers/shopify/locales/ko.json +18 -0
  361. package/src/trigger/providers/shopify/locales/ru.json +18 -0
  362. package/src/trigger/providers/shopify/locales/zh-CN.json +18 -0
  363. package/src/trigger/providers/shopify/locales/zh-TW.json +18 -0
  364. package/src/trigger/providers/slack/locales/fr.json +18 -0
  365. package/src/trigger/providers/slack/locales/ja.json +18 -0
  366. package/src/trigger/providers/slack/locales/ko.json +18 -0
  367. package/src/trigger/providers/slack/locales/ru.json +18 -0
  368. package/src/trigger/providers/slack/locales/zh-CN.json +18 -0
  369. package/src/trigger/providers/slack/locales/zh-TW.json +18 -0
  370. package/src/trigger/providers/slackbot/locales/fr.json +23 -0
  371. package/src/trigger/providers/slackbot/locales/ja.json +23 -0
  372. package/src/trigger/providers/slackbot/locales/ko.json +23 -0
  373. package/src/trigger/providers/slackbot/locales/ru.json +23 -0
  374. package/src/trigger/providers/slackbot/locales/zh-CN.json +23 -0
  375. package/src/trigger/providers/slackbot/locales/zh-TW.json +23 -0
  376. package/src/trigger/providers/source-events.ts +25 -0
  377. package/src/trigger/providers/stripe/locales/fr.json +17 -0
  378. package/src/trigger/providers/stripe/locales/ja.json +17 -0
  379. package/src/trigger/providers/stripe/locales/ko.json +17 -0
  380. package/src/trigger/providers/stripe/locales/ru.json +17 -0
  381. package/src/trigger/providers/stripe/locales/zh-CN.json +17 -0
  382. package/src/trigger/providers/stripe/locales/zh-TW.json +17 -0
  383. package/src/trigger/providers/tally/locales/fr.json +12 -0
  384. package/src/trigger/providers/tally/locales/ja.json +12 -0
  385. package/src/trigger/providers/tally/locales/ko.json +12 -0
  386. package/src/trigger/providers/tally/locales/ru.json +12 -0
  387. package/src/trigger/providers/tally/locales/zh-CN.json +12 -0
  388. package/src/trigger/providers/tally/locales/zh-TW.json +12 -0
  389. package/src/trigger/providers/telegram/locales/fr.json +17 -0
  390. package/src/trigger/providers/telegram/locales/ja.json +17 -0
  391. package/src/trigger/providers/telegram/locales/ko.json +17 -0
  392. package/src/trigger/providers/telegram/locales/ru.json +17 -0
  393. package/src/trigger/providers/telegram/locales/zh-CN.json +17 -0
  394. package/src/trigger/providers/telegram/locales/zh-TW.json +17 -0
  395. package/src/trigger/providers/typeform/locales/fr.json +12 -0
  396. package/src/trigger/providers/typeform/locales/ja.json +12 -0
  397. package/src/trigger/providers/typeform/locales/ko.json +12 -0
  398. package/src/trigger/providers/typeform/locales/ru.json +12 -0
  399. package/src/trigger/providers/typeform/locales/zh-CN.json +12 -0
  400. package/src/trigger/providers/typeform/locales/zh-TW.json +12 -0
  401. package/src/trigger/providers/vercel/locales/fr.json +18 -0
  402. package/src/trigger/providers/vercel/locales/ja.json +18 -0
  403. package/src/trigger/providers/vercel/locales/ko.json +18 -0
  404. package/src/trigger/providers/vercel/locales/ru.json +18 -0
  405. package/src/trigger/providers/vercel/locales/zh-CN.json +18 -0
  406. package/src/trigger/providers/vercel/locales/zh-TW.json +18 -0
  407. package/src/trigger/providers/woocommerce/locales/fr.json +19 -0
  408. package/src/trigger/providers/woocommerce/locales/ja.json +19 -0
  409. package/src/trigger/providers/woocommerce/locales/ko.json +19 -0
  410. package/src/trigger/providers/woocommerce/locales/ru.json +19 -0
  411. package/src/trigger/providers/woocommerce/locales/zh-CN.json +19 -0
  412. package/src/trigger/providers/woocommerce/locales/zh-TW.json +19 -0
  413. package/src/trigger/providers/zendesk/locales/fr.json +15 -0
  414. package/src/trigger/providers/zendesk/locales/ja.json +15 -0
  415. package/src/trigger/providers/zendesk/locales/ko.json +15 -0
  416. package/src/trigger/providers/zendesk/locales/ru.json +15 -0
  417. package/src/trigger/providers/zendesk/locales/zh-CN.json +15 -0
  418. package/src/trigger/providers/zendesk/locales/zh-TW.json +15 -0
  419. package/src/trigger/providers/zoom/locales/fr.json +17 -0
  420. package/src/trigger/providers/zoom/locales/ja.json +17 -0
  421. package/src/trigger/providers/zoom/locales/ko.json +17 -0
  422. package/src/trigger/providers/zoom/locales/ru.json +17 -0
  423. package/src/trigger/providers/zoom/locales/zh-CN.json +17 -0
  424. package/src/trigger/providers/zoom/locales/zh-TW.json +17 -0
  425. package/src/types/index.ts +112 -0
  426. package/src/workflow/common/workflow.ts +273 -0
  427. package/dist/browser/lib-DrKav3HG.js +0 -11403
  428. /package/dist/{browser → common}/flow-authoring-edge.d.ts +0 -0
  429. /package/dist/{browser → common}/flow-authoring-module.d.ts +0 -0
  430. /package/dist/{browser → common}/flow-authoring.d.ts +0 -0
  431. /package/dist/{browser → common}/flow-input-value.d.ts +0 -0
  432. /package/dist/{browser → common}/webhook-method.d.ts +0 -0
@@ -0,0 +1,442 @@
1
+ import type { Combination } from './combination.ts'
2
+ import type { ExpressionResult } from './result.ts'
3
+
4
+ import { makeCombination } from './combination.ts'
5
+ import {
6
+ ExpressionNone,
7
+ ExpressionSingleResult,
8
+ ExpressionEquals,
9
+ ExpressionContaining,
10
+ ExpressionContainedBy,
11
+ ExpressionRejection,
12
+ ExpressionIntersection,
13
+ ExpressionMaskList,
14
+ } from './result.ts'
15
+
16
+ export const CalculatorOperator = Object.freeze({
17
+ Save: 0,
18
+ OneOf: 1,
19
+ AllOf: 2,
20
+ AnyOf: 3,
21
+ Not: 4,
22
+ Swap: 5,
23
+ })
24
+
25
+ export type CalculatorOperator = (typeof CalculatorOperator)[keyof typeof CalculatorOperator]
26
+
27
+ export function calculate(operator: CalculatorOperator, expressions: readonly ExpressionResult[]): ExpressionResult {
28
+ switch (operator) {
29
+ case CalculatorOperator.Save: {
30
+ return expressions[0]
31
+ }
32
+ case CalculatorOperator.OneOf: {
33
+ return calculateOneOf(expressions)
34
+ }
35
+ case CalculatorOperator.AllOf:
36
+ case CalculatorOperator.AnyOf: {
37
+ return calculateCombination(operator, expressions)
38
+ }
39
+ case CalculatorOperator.Not:
40
+ case CalculatorOperator.Swap: {
41
+ return calculateUnary(operator, expressions[0])
42
+ }
43
+ }
44
+ }
45
+
46
+ export function swap(expression: ExpressionResult): ExpressionResult {
47
+ return calculateUnary(CalculatorOperator.Swap, expression)
48
+ }
49
+
50
+ /**
51
+ * The oneOf operator is indivisible, so `a + b + c` must be evaluated as one expression.
52
+ * ![](../../doc/images/all_of_expression.png)
53
+ */
54
+ function calculateOneOf(expressions: readonly ExpressionResult[]): ExpressionResult {
55
+ // A single remaining branch makes oneOf equivalent to that branch.
56
+ if (expressions.length === 1) {
57
+ return expressions[0]
58
+ }
59
+ const unionSet = calculateCombination(CalculatorOperator.AnyOf, expressions)
60
+ const intersectionList: ExpressionResult[] = []
61
+
62
+ for (let i = 0; i < expressions.length; ++i) {
63
+ for (let j = i + 1; j < expressions.length; ++j) {
64
+ const left = expressions[i]
65
+ const right = expressions[j]
66
+ const intersection = calculateCombination(CalculatorOperator.AllOf, [left, right])
67
+ intersectionList.push(intersection)
68
+ }
69
+ }
70
+ const banZone = calculateCombination(CalculatorOperator.AnyOf, intersectionList)
71
+ const enableZone = calculateUnary(CalculatorOperator.Not, banZone)
72
+
73
+ return calculateCombination(CalculatorOperator.AllOf, [unionSet, enableZone])
74
+ }
75
+
76
+ function calculateCombination(operator: CalculatorOperator, expressions: readonly ExpressionResult[]): ExpressionResult {
77
+ if (expressions.length < 0) {
78
+ throw new Error('invalid expressions: empty array')
79
+ }
80
+ let combination: Combination
81
+
82
+ switch (operator) {
83
+ case CalculatorOperator.AllOf: {
84
+ combination = makeCombination(calculateAllOf)
85
+ break
86
+ }
87
+ case CalculatorOperator.AnyOf: {
88
+ combination = makeCombination(calculateAnyOf)
89
+ break
90
+ }
91
+ default: {
92
+ throw new Error(`invalid operator ${operator}`)
93
+ }
94
+ }
95
+ for (const expression of expressions) {
96
+ combination.push(expression)
97
+ }
98
+ return combination.result
99
+ }
100
+
101
+ function calculateUnary(operator: CalculatorOperator, expression: ExpressionResult): ExpressionResult {
102
+ let calculator: (expression: ExpressionSingleResult) => ExpressionResult
103
+ let result: ExpressionResult = ExpressionNone
104
+
105
+ switch (operator) {
106
+ case CalculatorOperator.Not: {
107
+ calculator = calculateNot
108
+ break
109
+ }
110
+ case CalculatorOperator.Swap: {
111
+ calculator = calculateSwap
112
+ break
113
+ }
114
+ default: {
115
+ throw new Error(`invalid operator ${operator}`)
116
+ }
117
+ }
118
+ for (const [singleExpression, maskExpression] of ExpressionMaskList) {
119
+ if (maskExpression & expression) {
120
+ result |= calculator(singleExpression)
121
+ }
122
+ }
123
+ return result
124
+ }
125
+
126
+ function calculateAllOf(e1: ExpressionSingleResult, e2: ExpressionSingleResult): ExpressionResult {
127
+ let result: ExpressionResult = ExpressionNone
128
+ switch (e1) {
129
+ case ExpressionSingleResult.Equals: {
130
+ switch (e2) {
131
+ case ExpressionSingleResult.Equals: {
132
+ result = ExpressionEquals
133
+ break
134
+ }
135
+ case ExpressionSingleResult.Containing: {
136
+ result = ExpressionEquals
137
+ break
138
+ }
139
+ case ExpressionSingleResult.ContainedBy: {
140
+ result = ExpressionContainedBy
141
+ break
142
+ }
143
+ case ExpressionSingleResult.Rejection: {
144
+ result = ExpressionNone
145
+ break
146
+ }
147
+ case ExpressionSingleResult.Intersection: {
148
+ result = ExpressionContainedBy
149
+ break
150
+ }
151
+ }
152
+ break
153
+ }
154
+ case ExpressionSingleResult.Containing: {
155
+ switch (e2) {
156
+ case ExpressionSingleResult.Equals: {
157
+ result = ExpressionEquals
158
+ break
159
+ }
160
+ case ExpressionSingleResult.Containing: {
161
+ result = ExpressionEquals | ExpressionContaining
162
+ break
163
+ }
164
+ case ExpressionSingleResult.ContainedBy: {
165
+ result = ExpressionContainedBy
166
+ break
167
+ }
168
+ case ExpressionSingleResult.Rejection: {
169
+ result = ExpressionRejection
170
+ break
171
+ }
172
+ case ExpressionSingleResult.Intersection: {
173
+ result = ExpressionIntersection | ExpressionContainedBy
174
+ break
175
+ }
176
+ }
177
+ break
178
+ }
179
+ case ExpressionSingleResult.ContainedBy: {
180
+ switch (e2) {
181
+ case ExpressionSingleResult.Equals: {
182
+ result = ExpressionContainedBy
183
+ break
184
+ }
185
+ case ExpressionSingleResult.Containing: {
186
+ result = ExpressionContainedBy
187
+ break
188
+ }
189
+ case ExpressionSingleResult.ContainedBy: {
190
+ result = ExpressionContainedBy
191
+ break
192
+ }
193
+ case ExpressionSingleResult.Rejection: {
194
+ result = ExpressionNone
195
+ break
196
+ }
197
+ case ExpressionSingleResult.Intersection: {
198
+ result = ExpressionContainedBy
199
+ break
200
+ }
201
+ }
202
+ break
203
+ }
204
+ case ExpressionSingleResult.Rejection: {
205
+ switch (e2) {
206
+ case ExpressionSingleResult.Equals: {
207
+ result = ExpressionNone
208
+ break
209
+ }
210
+ case ExpressionSingleResult.Containing: {
211
+ result = ExpressionRejection
212
+ break
213
+ }
214
+ case ExpressionSingleResult.ContainedBy: {
215
+ result = ExpressionNone
216
+ break
217
+ }
218
+ case ExpressionSingleResult.Rejection: {
219
+ result = ExpressionRejection
220
+ break
221
+ }
222
+ case ExpressionSingleResult.Intersection: {
223
+ result = ExpressionRejection
224
+ break
225
+ }
226
+ }
227
+ break
228
+ }
229
+ case ExpressionSingleResult.Intersection: {
230
+ switch (e2) {
231
+ case ExpressionSingleResult.Equals: {
232
+ result = ExpressionContainedBy
233
+ break
234
+ }
235
+ case ExpressionSingleResult.Containing: {
236
+ result = ExpressionIntersection | ExpressionContainedBy
237
+ break
238
+ }
239
+ case ExpressionSingleResult.ContainedBy: {
240
+ result = ExpressionContainedBy
241
+ break
242
+ }
243
+ case ExpressionSingleResult.Rejection: {
244
+ result = ExpressionRejection
245
+ break
246
+ }
247
+ case ExpressionSingleResult.Intersection: {
248
+ result = ExpressionContainedBy | ExpressionRejection | ExpressionIntersection
249
+ break
250
+ }
251
+ }
252
+ break
253
+ }
254
+ }
255
+ return result
256
+ }
257
+
258
+ function calculateAnyOf(e1: ExpressionSingleResult, e2: ExpressionSingleResult): ExpressionResult {
259
+ let result: ExpressionResult = ExpressionNone
260
+ switch (e1) {
261
+ case ExpressionSingleResult.Equals: {
262
+ switch (e2) {
263
+ case ExpressionSingleResult.Equals: {
264
+ result = ExpressionEquals
265
+ break
266
+ }
267
+ case ExpressionSingleResult.Containing: {
268
+ result = ExpressionContaining
269
+ break
270
+ }
271
+ case ExpressionSingleResult.ContainedBy: {
272
+ result = ExpressionEquals
273
+ break
274
+ }
275
+ case ExpressionSingleResult.Rejection: {
276
+ result = ExpressionContaining
277
+ break
278
+ }
279
+ case ExpressionSingleResult.Intersection: {
280
+ result = ExpressionContaining
281
+ break
282
+ }
283
+ }
284
+ break
285
+ }
286
+ case ExpressionSingleResult.Containing: {
287
+ switch (e2) {
288
+ case ExpressionSingleResult.Equals: {
289
+ result = ExpressionContaining
290
+ break
291
+ }
292
+ case ExpressionSingleResult.Containing: {
293
+ result = ExpressionContaining
294
+ break
295
+ }
296
+ case ExpressionSingleResult.ContainedBy: {
297
+ result = ExpressionContaining
298
+ break
299
+ }
300
+ case ExpressionSingleResult.Rejection: {
301
+ result = ExpressionContaining
302
+ break
303
+ }
304
+ case ExpressionSingleResult.Intersection: {
305
+ result = ExpressionContaining
306
+ break
307
+ }
308
+ }
309
+ break
310
+ }
311
+ case ExpressionSingleResult.ContainedBy: {
312
+ switch (e2) {
313
+ case ExpressionSingleResult.Equals: {
314
+ result = ExpressionEquals
315
+ break
316
+ }
317
+ case ExpressionSingleResult.Containing: {
318
+ result = ExpressionContaining
319
+ break
320
+ }
321
+ case ExpressionSingleResult.ContainedBy: {
322
+ result = ExpressionEquals | ExpressionContainedBy
323
+ break
324
+ }
325
+ case ExpressionSingleResult.Rejection: {
326
+ result = ExpressionIntersection
327
+ break
328
+ }
329
+ case ExpressionSingleResult.Intersection: {
330
+ result = ExpressionContaining | ExpressionIntersection
331
+ break
332
+ }
333
+ }
334
+ break
335
+ }
336
+ case ExpressionSingleResult.Rejection: {
337
+ switch (e2) {
338
+ case ExpressionSingleResult.Equals: {
339
+ result = ExpressionContaining
340
+ break
341
+ }
342
+ case ExpressionSingleResult.Containing: {
343
+ result = ExpressionContaining
344
+ break
345
+ }
346
+ case ExpressionSingleResult.ContainedBy: {
347
+ result = ExpressionIntersection
348
+ break
349
+ }
350
+ case ExpressionSingleResult.Rejection: {
351
+ result = ExpressionRejection
352
+ break
353
+ }
354
+ case ExpressionSingleResult.Intersection: {
355
+ result = ExpressionIntersection
356
+ break
357
+ }
358
+ }
359
+ break
360
+ }
361
+ case ExpressionSingleResult.Intersection: {
362
+ switch (e2) {
363
+ case ExpressionSingleResult.Equals: {
364
+ result = ExpressionContaining
365
+ break
366
+ }
367
+ case ExpressionSingleResult.Containing: {
368
+ result = ExpressionContaining
369
+ break
370
+ }
371
+ case ExpressionSingleResult.ContainedBy: {
372
+ result = ExpressionContaining | ExpressionIntersection
373
+ break
374
+ }
375
+ case ExpressionSingleResult.Rejection: {
376
+ result = ExpressionIntersection
377
+ break
378
+ }
379
+ case ExpressionSingleResult.Intersection: {
380
+ result = ExpressionContaining | ExpressionIntersection
381
+ break
382
+ }
383
+ }
384
+ break
385
+ }
386
+ }
387
+ return result
388
+ }
389
+
390
+ function calculateNot(expression: ExpressionSingleResult): ExpressionResult {
391
+ let result: ExpressionResult = ExpressionNone
392
+ switch (expression) {
393
+ case ExpressionSingleResult.Equals: {
394
+ result = ExpressionRejection
395
+ break
396
+ }
397
+ case ExpressionSingleResult.Containing: {
398
+ result = ExpressionRejection
399
+ break
400
+ }
401
+ case ExpressionSingleResult.ContainedBy: {
402
+ result = ExpressionIntersection
403
+ break
404
+ }
405
+ case ExpressionSingleResult.Rejection: {
406
+ result = ExpressionEquals | ExpressionContaining
407
+ break
408
+ }
409
+ case ExpressionSingleResult.Intersection: {
410
+ result = ExpressionContainedBy | ExpressionIntersection
411
+ break
412
+ }
413
+ }
414
+ return result
415
+ }
416
+
417
+ function calculateSwap(expression: ExpressionResult): ExpressionResult {
418
+ let result: ExpressionResult = ExpressionNone
419
+ switch (expression) {
420
+ case ExpressionSingleResult.Equals: {
421
+ result = ExpressionEquals
422
+ break
423
+ }
424
+ case ExpressionSingleResult.Containing: {
425
+ result = ExpressionContainedBy
426
+ break
427
+ }
428
+ case ExpressionSingleResult.ContainedBy: {
429
+ result = ExpressionContaining
430
+ break
431
+ }
432
+ case ExpressionSingleResult.Rejection: {
433
+ result = ExpressionRejection
434
+ break
435
+ }
436
+ case ExpressionSingleResult.Intersection: {
437
+ result = ExpressionIntersection
438
+ break
439
+ }
440
+ }
441
+ return result
442
+ }
@@ -0,0 +1,49 @@
1
+ import type { ExpressionResult, ExpressionSingleResult } from './result.ts'
2
+
3
+ import { ExpressionAny, ExpressionMaskList, ExpressionNone } from './result.ts'
4
+
5
+ export type SingleCalculator = (e1: ExpressionSingleResult, e2: ExpressionSingleResult) => ExpressionResult
6
+ export interface Combination {
7
+ readonly result: ExpressionResult
8
+ readonly count: number
9
+ push(expression: ExpressionResult): ExpressionResult
10
+ }
11
+
12
+ export function makeCombination(calculator: SingleCalculator): Combination {
13
+ let expression: ExpressionResult = ExpressionNone
14
+ let count = 0
15
+
16
+ const quantum = {
17
+ push: (newExpression: ExpressionResult): ExpressionResult => {
18
+ if (count === 0) {
19
+ expression = newExpression
20
+ } else {
21
+ expression = forEach(expression, newExpression, calculator)
22
+ }
23
+ count += 1
24
+ return expression
25
+ },
26
+ }
27
+ Object.defineProperties(quantum, {
28
+ result: { get: () => expression },
29
+ count: { get: () => count },
30
+ })
31
+ return quantum as Combination
32
+ }
33
+
34
+ function forEach(e1: ExpressionResult, e2: ExpressionResult, calculator: SingleCalculator): ExpressionResult {
35
+ let expression: ExpressionResult = ExpressionNone
36
+ for (const [singleResult1, mask1] of ExpressionMaskList) {
37
+ if (mask1 & e1) {
38
+ for (const [singleResult2, mask2] of ExpressionMaskList) {
39
+ if (mask2 & e2) {
40
+ expression |= calculator(singleResult1, singleResult2)
41
+ if (expression === ExpressionAny) {
42
+ return expression
43
+ }
44
+ }
45
+ }
46
+ }
47
+ }
48
+ return expression
49
+ }
@@ -0,0 +1,191 @@
1
+ import type { ExpressionResult } from './result.ts'
2
+ import type { Calculator, ExpressionDelegate, ExpressionDescription } from './types.ts'
3
+
4
+ import { calculate, swap, CalculatorOperator } from './calculator.ts'
5
+ import { ExpressionContainedBy, ExpressionEquals, ExpressionNone } from './result.ts'
6
+ import { ExpressionKind } from './types.ts'
7
+
8
+ type Parent<E extends object> = {
9
+ readonly node: Node<E>
10
+ readonly index: number
11
+ }
12
+
13
+ type Node<E extends object> = {
14
+ readonly parent: Parent<E> | null
15
+ readonly swapped: boolean
16
+ expressions: [E, E] | null
17
+ calculation: Calculation | null
18
+ }
19
+
20
+ type Calculation = {
21
+ readonly operator: CalculatorOperator
22
+ readonly results: ExpressionResult[]
23
+ readonly willSwap: boolean
24
+ count: number
25
+ }
26
+
27
+ export const expression =
28
+ <E extends object>(delegate: ExpressionDelegate<E>): Calculator<E> =>
29
+ (e1, e2) => {
30
+ const rootNode: Node<E> = {
31
+ parent: null,
32
+ swapped: false,
33
+ expressions: null,
34
+ calculation: {
35
+ operator: CalculatorOperator.Save,
36
+ results: [ExpressionNone],
37
+ willSwap: false,
38
+ count: 0,
39
+ },
40
+ }
41
+ // Nodes awaiting expansion.
42
+ const extendQueue: Node<E>[] = [
43
+ {
44
+ parent: { node: rootNode, index: 0 },
45
+ swapped: false,
46
+ expressions: [e1, e2],
47
+ calculation: null,
48
+ },
49
+ ]
50
+ // Nodes whose leaf results are ready to calculate.
51
+ const calculateQueue: Node<E>[] = []
52
+
53
+ while (extendQueue.length > 0 || calculateQueue.length > 0) {
54
+ while (extendQueue.length > 0) {
55
+ const node = extendQueue.pop()!
56
+ extendNode(node)
57
+ }
58
+ while (calculateQueue.length > 0) {
59
+ const node = calculateQueue.pop()!
60
+ calculateNode(node)
61
+ }
62
+ }
63
+
64
+ function extendNode(node: Node<E>): void {
65
+ let result: ExpressionResult = ExpressionEquals
66
+ const [leftExpression, rightExpression] = node.expressions!
67
+
68
+ if (!delegate.equals(leftExpression, rightExpression)) {
69
+ const expression1 = delegate.describe(leftExpression)
70
+
71
+ if (expression1.kind !== ExpressionKind.Leaf) {
72
+ const willSwap = false
73
+ const [calculation, expressions] = expendExpression(expression1, willSwap)
74
+ node.expressions = null
75
+ node.calculation = calculation
76
+
77
+ for (const [index, childExpression] of expressions.entries()) {
78
+ extendQueue.push({
79
+ parent: { node, index },
80
+ swapped: node.swapped,
81
+ expressions: [childExpression, rightExpression],
82
+ calculation: null,
83
+ })
84
+ }
85
+ return
86
+ }
87
+ const expression2 = delegate.describe(rightExpression)
88
+
89
+ if (expression2.kind !== ExpressionKind.Leaf) {
90
+ const willSwap = true
91
+ const [calculation, expressions] = expendExpression(expression2, willSwap)
92
+ node.expressions = null
93
+ node.calculation = calculation
94
+
95
+ for (const [index, childExpression] of expressions.entries()) {
96
+ extendQueue.push({
97
+ parent: { node, index },
98
+ swapped: !node.swapped,
99
+ expressions: [childExpression, leftExpression],
100
+ calculation: null,
101
+ })
102
+ }
103
+ return
104
+ }
105
+ result = delegate.calculate(leftExpression, rightExpression)
106
+ delegate.observeCalculation?.(leftExpression, rightExpression, result, node.swapped)
107
+
108
+ if (result === ExpressionNone) {
109
+ throw new Error('cannot response expression as none')
110
+ }
111
+ }
112
+ node.expressions = null
113
+ node.calculation = {
114
+ operator: CalculatorOperator.Save,
115
+ results: [result],
116
+ willSwap: false,
117
+ count: 0,
118
+ }
119
+ calculateQueue.push(node)
120
+ }
121
+
122
+ function expendExpression(description: ExpressionDescription<E>, willSwap: boolean): [Calculation, E[]] {
123
+ let operator: CalculatorOperator = CalculatorOperator.Save
124
+ let expressions: E[]
125
+
126
+ switch (description.kind) {
127
+ case ExpressionKind.Not: {
128
+ operator = CalculatorOperator.Not
129
+ expressions = [description.expression]
130
+ break
131
+ }
132
+ case ExpressionKind.AllOf: {
133
+ operator = CalculatorOperator.AllOf
134
+ expressions = [...description.expressions]
135
+ break
136
+ }
137
+ case ExpressionKind.AnyOf: {
138
+ operator = CalculatorOperator.AnyOf
139
+ expressions = [...description.expressions]
140
+ break
141
+ }
142
+ case ExpressionKind.OneOf: {
143
+ operator = CalculatorOperator.OneOf
144
+ expressions = [...description.expressions]
145
+ break
146
+ }
147
+ default: {
148
+ throw new Error(`invalid kind ${description.kind}`)
149
+ }
150
+ }
151
+ const calculation: Calculation = {
152
+ operator,
153
+ willSwap,
154
+ count: 0,
155
+ results: Array(expressions.length).fill(-1),
156
+ }
157
+ return [calculation, expressions]
158
+ }
159
+
160
+ function calculateNode(node: Node<E>): void {
161
+ const calculation = node.calculation!
162
+ const parent = node.parent
163
+ let result = calculate(calculation.operator, calculation.results)
164
+
165
+ if (result === ExpressionNone) {
166
+ // AllOf assumes the left intersection is not empty, but this defensive fallback still handles an empty result.
167
+ // A forced None result therefore makes the left side equivalent to never.
168
+ result = ExpressionContainedBy
169
+ }
170
+ if (calculation.willSwap) {
171
+ result = swap(result)
172
+ }
173
+ if (parent) {
174
+ const parentCalculation = parent.node.calculation!
175
+ const parentResults = parentCalculation.results
176
+
177
+ parentResults[parent.index] = result
178
+ parentCalculation.count += 1
179
+
180
+ if (parentCalculation.count >= parentResults.length) {
181
+ calculateQueue.push(parent.node)
182
+ }
183
+ }
184
+ }
185
+
186
+ const result = rootNode.calculation!.results[0]
187
+ if (result === 0) {
188
+ throw new Error('cannot find result of root')
189
+ }
190
+ return result
191
+ }
@@ -0,0 +1,25 @@
1
+ export type { ExpressionResult } from './result.ts'
2
+ export type { Calculator, Describer, Equaler, ExpressionDelegate, ExpressionDescription } from './types.ts'
3
+
4
+ export { expression } from './expression.ts'
5
+ export { ExpressionKind } from './types.ts'
6
+ export { swap } from './calculator.ts'
7
+ export {
8
+ toString,
9
+ hasEquals,
10
+ hasContaining,
11
+ hasContainedBy,
12
+ hasIntersection,
13
+ hasRejection,
14
+ toExpression,
15
+ toSingleExpression,
16
+ ExpressionNone,
17
+ ExpressionAny,
18
+ ExpressionEquals,
19
+ ExpressionContaining,
20
+ ExpressionContainedBy,
21
+ ExpressionIntersection,
22
+ ExpressionRejection,
23
+ ExpressionMaskList,
24
+ ExpressionSingleResult,
25
+ } from './result.ts'