@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,188 @@
1
+ import type { JSONSchema7 } from 'json-schema'
2
+ import type { ExternalSchemaErrorItem, SchemaErrorItem } from '../error.ts'
3
+ import type { ExtendsContext } from '../extends/index.ts'
4
+ import type { JSONDelegate } from '../types.ts'
5
+ import type { Schema } from '../types.ts'
6
+ import type { DeepReadonly } from '../utils.ts'
7
+ import type { Context } from './common.ts'
8
+ import type { PrimitiveInputSchema } from './primitive.ts'
9
+ import type { CompiledSchema } from './wrapper.ts'
10
+
11
+ import { SchemaErrorItemKind } from '../error.ts'
12
+ import { compileArraySchema } from './array.ts'
13
+ import { COMBINATION_KEYS, compileCombinationSchema } from './combination.ts'
14
+ import { joinPath } from './common.ts'
15
+ import { isJSONSchemaKey, isLogicEmptyObject, unwrapJSONSchema7Definition, recordError, recordWarn } from './common.ts'
16
+ import { compileEnumAndConst } from './enumAndConst.ts'
17
+ import { compileObjectSchema } from './object.ts'
18
+ import { compilePrimitiveSchema } from './primitive.ts'
19
+ import { isCompiledSchema, wrapCompiledSchema, CompiledKind, getKind } from './wrapper.ts'
20
+
21
+ // Keep the input readonly so compilation cannot mutate the user's source schema.
22
+ export type InputSchema = DeepReadonly<JSONSchema7>
23
+ export type CompilableSchema<E = unknown> = InputSchema | Schema<E>
24
+
25
+ export type CompileResult<E> = {
26
+ readonly schema: Schema<E>
27
+ readonly warns: readonly SchemaErrorItem[]
28
+ }
29
+
30
+ const emptyList = Object.freeze([])
31
+
32
+ export function compile<E>(
33
+ schema: CompilableSchema<E>,
34
+ extendsContext: ExtendsContext,
35
+ payload?: unknown,
36
+ delegate?: JSONDelegate<E>,
37
+ ): CompileResult<E> | readonly SchemaErrorItem<E>[] {
38
+ if (isCompiledSchema<E>(schema)) {
39
+ return { schema, warns: emptyList }
40
+ }
41
+ if (extendsContext.isExtendsSchema(schema)) {
42
+ return { schema, warns: emptyList }
43
+ }
44
+ if (delegate) {
45
+ const isSchemaResult = delegate.isSchema(schema)
46
+ if (typeof isSchemaResult === 'object') {
47
+ const items: ExternalSchemaErrorItem<E>[] = []
48
+ for (const error of isSchemaResult) {
49
+ items.push({ kind: SchemaErrorItemKind.External, error })
50
+ }
51
+ if (items.length > 0) {
52
+ return items
53
+ }
54
+ } else if (isSchemaResult === false) {
55
+ throw new Error('it is not a JSON Schema 7')
56
+ }
57
+ }
58
+ const context: Context<E> = { delegate, payload, extends: extendsContext, path: [], errors: [], warns: [] }
59
+ const compiledSchema = compileSchema(context, schema)
60
+
61
+ if (compiledSchema) {
62
+ assertCondition(context.errors.length === 0, 'found errors (it should be empty)')
63
+ } else {
64
+ assertCondition(context.errors.length > 0, 'cannot found any errors')
65
+ return context.errors
66
+ }
67
+ return {
68
+ schema: compiledSchema,
69
+ warns: context.warns,
70
+ }
71
+ }
72
+
73
+ function assertCondition(condition: unknown, message: string): asserts condition {
74
+ if (!condition) {
75
+ throw new Error(message)
76
+ }
77
+ }
78
+
79
+ export function compileSchema<E>(context: Context<E>, schema: InputSchema): Schema<E> | null {
80
+ if (context.extends.isExtendsSchema(schema)) {
81
+ return schema
82
+ }
83
+ if (isCompiledSchema<E>(schema)) {
84
+ return schema as CompiledSchema<E>
85
+ }
86
+ const extendsSchema = context.extends.tryCompiledExtendsSchema(schema, context.payload)
87
+
88
+ if (extendsSchema) {
89
+ return extendsSchema
90
+ }
91
+ let targetSchema: InputSchema = schema
92
+ let shouldHandleEnumAndConst = false
93
+ const { enum: enumList, const: constValue } = schema
94
+
95
+ if (enumList || constValue !== undefined) {
96
+ const { enum: _0, const: _1, ...rest } = schema
97
+ targetSchema = rest
98
+ shouldHandleEnumAndConst = true
99
+ }
100
+ let compiledSchema = checkAndCompileSchema(context, targetSchema)
101
+
102
+ if (compiledSchema && shouldHandleEnumAndConst) {
103
+ compiledSchema = compileEnumAndConst(context, enumList, constValue, compiledSchema)
104
+ }
105
+ if (!compiledSchema) {
106
+ return null
107
+ }
108
+ return compiledSchema
109
+ }
110
+
111
+ function checkAndCompileSchema<E>(context: Context<E>, schema: InputSchema): CompiledSchema<E> | null {
112
+ // check composition
113
+ for (const key of COMBINATION_KEYS) {
114
+ const combinationList = schema[key]
115
+ if (combinationList) {
116
+ const rejectKeys = Object.keys(schema).filter((k) => isJSONSchemaKey(k) && k !== key)
117
+ if (rejectKeys.length > 0) {
118
+ recordWarn(context, `composition key ${JSON.stringify(key)} will exclude other keys: ${rejectKeys.toSorted().join(', ')}`)
119
+ }
120
+ const compiledSchema = compileCombinationSchema(context, key, combinationList)
121
+ if (!compiledSchema) {
122
+ return null
123
+ }
124
+ return compiledSchema
125
+ }
126
+ }
127
+ // check not
128
+ {
129
+ const notSchema = unwrapJSONSchema7Definition(schema.not)
130
+ if (notSchema) {
131
+ const rejectKeys = Object.keys(schema).filter((k) => isJSONSchemaKey(k) && k !== 'not')
132
+ if (rejectKeys.length > 0) {
133
+ recordWarn(context, `key "not" will exclude other keys: ${rejectKeys.toSorted().join(', ')}`)
134
+ }
135
+ const subContext = joinPath(context, 'not')
136
+ const subSchema = compileSchema(subContext, notSchema)
137
+
138
+ if (!subSchema) {
139
+ return null
140
+ }
141
+ let kind: CompiledKind = CompiledKind.Not
142
+
143
+ switch (getKind(subSchema)) {
144
+ case CompiledKind.Never: {
145
+ kind = CompiledKind.Any
146
+ break
147
+ }
148
+ case CompiledKind.Any: {
149
+ kind = CompiledKind.Never
150
+ break
151
+ }
152
+ }
153
+ return wrapCompiledSchema(kind, { not: subSchema } as JSONSchema7, context.delegate, context.path)
154
+ }
155
+ }
156
+ // check about type field
157
+ if (schema.type) {
158
+ const { type } = schema
159
+ if (Array.isArray(type)) {
160
+ const { type: _type, ...rest } = schema
161
+ return compileCombinationSchema(
162
+ context,
163
+ 'anyOf',
164
+ type.map((item) => ({ ...rest, type: item })),
165
+ )
166
+ }
167
+ switch (type) {
168
+ case 'object': {
169
+ return compileObjectSchema(context, schema)
170
+ }
171
+ case 'array': {
172
+ return compileArraySchema(context, schema)
173
+ }
174
+ default: {
175
+ return compilePrimitiveSchema(context, schema as PrimitiveInputSchema)
176
+ }
177
+ }
178
+ }
179
+ // check any
180
+ if (isLogicEmptyObject(schema)) {
181
+ return wrapCompiledSchema(CompiledKind.Any, {}, context.delegate, context.path)
182
+ }
183
+ // unrecognized
184
+ {
185
+ recordError(context, 'unrecognized')
186
+ return null
187
+ }
188
+ }
@@ -0,0 +1,75 @@
1
+ import type { JSONSchema7 } from 'json-schema'
2
+ import type { Context } from './common.ts'
3
+ import type { InputSchema } from './compiler.ts'
4
+ import type { CompiledValue, CompiledSchema } from './wrapper.ts'
5
+
6
+ import { ValidResult, valid } from '../checker/validator.ts'
7
+ import { isDeepEquals, deepCopy } from '../utils.ts'
8
+ import { recordError, recordWarn } from './common.ts'
9
+ import { wrapCompiledSchema, wrapCompiledValue, CompiledKind } from './wrapper.ts'
10
+
11
+ export function compileEnumAndConst<E>(
12
+ context: Context<E>,
13
+ enumList: InputSchema['enum'],
14
+ constValue: InputSchema['const'],
15
+ schema: CompiledSchema<E>,
16
+ ): CompiledSchema<E> | null {
17
+ let compiledEnum: CompiledValue[] | undefined
18
+ let isNever = false
19
+
20
+ if (enumList) {
21
+ if (enumList.length === 0) {
22
+ recordError(context, 'disable empty list', 'enum')
23
+ return null
24
+ }
25
+ compiledEnum = []
26
+
27
+ for (const [i, enumValue] of enumList.entries()) {
28
+ switch (valid(schema, enumValue)) {
29
+ case ValidResult.Valid: {
30
+ compiledEnum.push(wrapCompiledValue(enumValue))
31
+ break
32
+ }
33
+ case ValidResult.Invalid: {
34
+ recordWarn(context, 'cannot pass JSON schema of currently schema object', 'enum', i)
35
+ break
36
+ }
37
+ }
38
+ }
39
+ if (compiledEnum.length === 0) {
40
+ recordWarn(context, 'all of elements from list is rejected by currently schema object', 'enum')
41
+ }
42
+ }
43
+ if (constValue !== undefined && valid(schema, constValue) === ValidResult.Invalid) {
44
+ isNever = true
45
+ }
46
+ if (compiledEnum) {
47
+ if (compiledEnum.length === 0) {
48
+ isNever = true
49
+ } else if (constValue !== undefined) {
50
+ let foundEquals = false
51
+ for (const enumValue of compiledEnum) {
52
+ if (isDeepEquals(enumValue, constValue)) {
53
+ foundEquals = true
54
+ break
55
+ }
56
+ }
57
+ if (!foundEquals) {
58
+ isNever = true
59
+ }
60
+ }
61
+ }
62
+ const kind = isNever ? CompiledKind.Never : CompiledKind.EnumOrConst
63
+ const compiledSchema: JSONSchema7 = {}
64
+
65
+ if (schema.type) {
66
+ compiledSchema.type = schema.type
67
+ }
68
+ if (compiledEnum) {
69
+ compiledSchema.enum = compiledEnum
70
+ }
71
+ if (constValue !== undefined) {
72
+ compiledSchema.const = wrapCompiledValue(deepCopy(constValue))
73
+ }
74
+ return wrapCompiledSchema(kind, compiledSchema, context.delegate, context.path)
75
+ }
@@ -0,0 +1,11 @@
1
+ import type { DeepReadonly } from '../utils.ts'
2
+ import type { CompiledValue as InnerCompiledValue, CompiledObject as InnerCompiledObject, CompiledSchema as InnerCompiledSchema } from './wrapper.ts'
3
+
4
+ export type { CompilableSchema, InputSchema, CompileResult } from './compiler.ts'
5
+ export type CompiledValue = DeepReadonly<InnerCompiledValue>
6
+ export type CompiledObject = DeepReadonly<InnerCompiledObject>
7
+ export type CompiledSchema<E> = DeepReadonly<InnerCompiledSchema<E>>
8
+
9
+ export { compile } from './compiler.ts'
10
+ export { isCompiledSchema, isCompiledObject, getId, getKind, getPath, assertCompiledValue, CompiledKind, ANY, NEVER } from './wrapper.ts'
11
+ export type { SchemaPath } from './wrapper.ts'
@@ -0,0 +1,411 @@
1
+ import type { JSONSchema7 } from 'json-schema'
2
+ import type { Schema } from '../types.ts'
3
+ import type { Context } from './common.ts'
4
+ import type { InputSchema } from './compiler.ts'
5
+ import type { CompiledSchema } from './wrapper.ts'
6
+
7
+ import { ValidResult, valid } from '../checker/validator.ts'
8
+ import { recordWarn, isJSONSchemaKey, joinPath, unwrapJSONSchema7Definition } from './common.ts'
9
+ import { compileSchema } from './compiler.ts'
10
+ import { cleanEmptyValues } from './utils.ts'
11
+ import { NEVER, wrapCompiledSchema, toNever, CompiledKind, getKind } from './wrapper.ts'
12
+
13
+ type ObjectKeys =
14
+ | 'type'
15
+ | 'maxProperties'
16
+ | 'minProperties'
17
+ | 'required'
18
+ | 'properties'
19
+ | 'patternProperties'
20
+ | 'additionalProperties'
21
+ | 'dependencies'
22
+ | 'propertyNames'
23
+
24
+ const OBJECT_KEYS = new Set<ObjectKeys>([
25
+ 'type',
26
+ 'maxProperties',
27
+ 'minProperties',
28
+ 'required',
29
+ 'properties',
30
+ 'patternProperties',
31
+ 'additionalProperties',
32
+ 'dependencies',
33
+ 'propertyNames',
34
+ ])
35
+
36
+ type PatternProperties<E> = {
37
+ [key: string]: [Schema<E>, RegExp]
38
+ }
39
+
40
+ type CompiledSchemaMap<E> = {
41
+ [key: string]: Schema<E>
42
+ }
43
+
44
+ // This internal shape simplifies dependency handling without exposing unsupported schema keywords.
45
+ type DependentRequired = {
46
+ [key: string]: string[]
47
+ }
48
+
49
+ type DependentTuple<E> = [DependentRequired, CompiledSchemaMap<E>]
50
+ type BanChecker = (key: string) => boolean
51
+
52
+ export function compileObjectSchema<E>(context: Context<E>, schema: InputSchema): CompiledSchema<E> | null {
53
+ const rejectKeys = Object.keys(schema).filter((k) => !OBJECT_KEYS.has(k as ObjectKeys) && isJSONSchemaKey(k))
54
+ if (rejectKeys.length > 0) {
55
+ recordWarn(context, `type="object" will exclude other keys: ${rejectKeys.toSorted().join(', ')}`)
56
+ }
57
+ const maxProperties = getPropertiesLimit(context, 'maxProperties', schema)
58
+ const minProperties = getPropertiesLimit(context, 'minProperties', schema)
59
+ const additionalPropertiesSchema = compileAdditionalProperties(context, schema)
60
+ const patternProperties = compilePatternProperties(context, schema)
61
+ const propertyNames = compilePropertyNames(context, schema)
62
+ const dependentTuple = compileDependencies(context, schema)
63
+
64
+ if (!additionalPropertiesSchema || !patternProperties || !propertyNames || !dependentTuple) {
65
+ return null
66
+ }
67
+ const properties = compileProperties(context, patternProperties, propertyNames, schema)
68
+
69
+ if (!properties) {
70
+ return null
71
+ }
72
+ const isBanKey = createBanKeyChecker(additionalPropertiesSchema, patternProperties, propertyNames, properties)
73
+ const required = compileRequired(context, isBanKey, dependentTuple, schema)
74
+ const kind = checkSchemaIsNever(context, additionalPropertiesSchema, properties, required, maxProperties, minProperties)
75
+ ? CompiledKind.Never
76
+ : CompiledKind.Object
77
+
78
+ const mergedSchema = cleanEmptyValues({
79
+ type: 'object',
80
+ required,
81
+ properties,
82
+ minProperties,
83
+ maxProperties,
84
+ additionalProperties: additionalPropertiesSchema,
85
+ patternProperties: unwrapPatternProperties(patternProperties),
86
+ dependencies: mergeDependentTuple(dependentTuple, schema),
87
+ propertyNames: propertyNames,
88
+ })
89
+ return wrapCompiledSchema(kind, mergedSchema as JSONSchema7, context.delegate, context.path)
90
+ }
91
+
92
+ function getPropertiesLimit<E>(context: Context<E>, name: 'maxProperties' | 'minProperties', schema: InputSchema): number | undefined {
93
+ const propertiesLimit = schema[name]
94
+ if (propertiesLimit === undefined) {
95
+ return undefined
96
+ }
97
+ if (Number.isNaN(propertiesLimit)) {
98
+ recordWarn(context, 'find NaN', name)
99
+ return undefined
100
+ }
101
+ if (propertiesLimit < 0) {
102
+ recordWarn(context, `find invalid number ${propertiesLimit}`, name)
103
+ return undefined
104
+ }
105
+ return propertiesLimit
106
+ }
107
+
108
+ function compileAdditionalProperties<E>(context: Context<E>, { additionalProperties }: InputSchema): Schema<E> | null {
109
+ if (additionalProperties === false) {
110
+ return wrapCompiledSchema(CompiledKind.Never, { type: 'string', maxLength: 0, minLength: 1 }, context.delegate, context.path)
111
+ }
112
+ if (typeof additionalProperties !== 'object') {
113
+ return wrapCompiledSchema(CompiledKind.Any, {}, context.delegate, context.path)
114
+ }
115
+ const subContext = joinPath(context, 'additionalProperties')
116
+ const schema = unwrapJSONSchema7Definition(additionalProperties)
117
+
118
+ return compileSchema(subContext, schema)
119
+ }
120
+
121
+ function compilePatternProperties<E>(context: Context<E>, { patternProperties }: InputSchema): PatternProperties<E> | null {
122
+ let foundSubError = false
123
+ const target: PatternProperties<E> = {}
124
+
125
+ for (const key in patternProperties) {
126
+ const regExp = wrapRegExp(key)
127
+ if (regExp instanceof Error) {
128
+ recordWarn(context, `property name invalid. ${key}`, 'patternProperties', key)
129
+ continue
130
+ }
131
+ const schema = unwrapJSONSchema7Definition(patternProperties[key])
132
+ const subContext = joinPath(context, 'patternProperties', key)
133
+ const compiledSchema = compileSchema(subContext, schema)
134
+ if (!compiledSchema) {
135
+ foundSubError = true
136
+ continue
137
+ }
138
+ target[key] = [compiledSchema, regExp]
139
+ }
140
+ if (foundSubError) {
141
+ return null
142
+ }
143
+ return target
144
+ }
145
+
146
+ function compilePropertyNames<E>(context: Context<E>, { propertyNames }: InputSchema): CompiledSchema<E> | null {
147
+ if (!propertyNames) {
148
+ return wrapCompiledSchema(CompiledKind.Any, {}, context.delegate, context.path)
149
+ }
150
+ propertyNames = unwrapJSONSchema7Definition(propertyNames)
151
+
152
+ const subContext = joinPath(context, 'propertyNames')
153
+ const schema = compileSchema(subContext, propertyNames)
154
+
155
+ if (!schema) {
156
+ return null
157
+ }
158
+ const kind = getKind(schema)
159
+ if (kind !== CompiledKind.String && kind !== CompiledKind.Any) {
160
+ // JSON property names can only be strings, so other types cannot match any property.
161
+ return toNever(schema as CompiledSchema<E>)
162
+ }
163
+ return schema as CompiledSchema<E>
164
+ }
165
+
166
+ function compileProperties<E>(
167
+ context: Context<E>,
168
+ patternProperties: PatternProperties<E>,
169
+ propertyNamesSchema: CompiledSchema<E>,
170
+ { properties }: InputSchema,
171
+ ): CompiledSchemaMap<E> | null {
172
+ let foundSubError = false
173
+ if (!properties) {
174
+ return {}
175
+ }
176
+ const target: CompiledSchemaMap<E> = {}
177
+
178
+ for (const key in properties) {
179
+ if (valid(propertyNamesSchema, key) === ValidResult.Invalid) {
180
+ recordWarn(context, `key ${JSON.stringify(key)} cannot pass JSON schema from propertyNames`, 'properties')
181
+ continue
182
+ }
183
+ const patternSchema = findPatternSchema(patternProperties, key)
184
+
185
+ if (patternSchema && getKind(patternSchema) === CompiledKind.Never) {
186
+ recordWarn(context, `key ${JSON.stringify(key)} matches a pattern that has a impossible(never) schema`, 'properties')
187
+ continue
188
+ }
189
+ const schema = unwrapJSONSchema7Definition(properties[key])
190
+ const subContext = joinPath(context, 'properties', key)
191
+ const compiledSchema = compileSchema(subContext, schema)
192
+
193
+ if (!compiledSchema) {
194
+ foundSubError = true
195
+ continue
196
+ }
197
+ target[key] = compiledSchema
198
+ }
199
+ if (foundSubError) {
200
+ return null
201
+ }
202
+ return target
203
+ }
204
+
205
+ function compileDependencies<E>(context: Context<E>, { dependencies }: InputSchema): DependentTuple<E> | null {
206
+ if (!dependencies) {
207
+ return [{}, {}]
208
+ }
209
+ const dependentRequired: DependentRequired = {}
210
+ const dependentSchemas: CompiledSchemaMap<E> = {}
211
+
212
+ for (const key in dependencies) {
213
+ const dependency = unwrapJSONSchema7Definition(dependencies[key])
214
+
215
+ if (Array.isArray(dependency)) {
216
+ const { keys, duplicated } = checkUniqueKeys(dependency)
217
+ if (duplicated) {
218
+ recordWarn(context, `found duplicated property names: ${duplicated.join(', ')}`, 'dependencies', key)
219
+ }
220
+ dependentRequired[key] = keys
221
+ } else {
222
+ const subContext = joinPath(context, 'dependencies', key)
223
+ const compiledSchema = compileSchema(subContext, dependency as InputSchema)
224
+ if (compiledSchema) {
225
+ const kind = getKind(compiledSchema)
226
+ if (kind === CompiledKind.Object || kind === CompiledKind.Any) {
227
+ dependentSchemas[key] = compiledSchema
228
+ } else if (kind === CompiledKind.Extends) {
229
+ dependentSchemas[key] = NEVER
230
+ } else {
231
+ dependentSchemas[key] = toNever(compiledSchema as CompiledSchema<E>)
232
+ }
233
+ }
234
+ }
235
+ }
236
+ return [dependentRequired, dependentSchemas]
237
+ }
238
+
239
+ function createBanKeyChecker<E>(
240
+ additionalPropertiesSchema: Schema<E>,
241
+ patternProperties: PatternProperties<E>,
242
+ propertyNamesSchema: CompiledSchema<E>,
243
+ properties: CompiledSchemaMap<E>,
244
+ ): BanChecker {
245
+ return (key: string): boolean => {
246
+ if (valid(propertyNamesSchema, key) === ValidResult.Invalid) {
247
+ return true
248
+ }
249
+ const patternSchema = findPatternSchema(patternProperties, key)
250
+ if (patternSchema && getKind(patternSchema) === CompiledKind.Never) {
251
+ return true
252
+ }
253
+ const propertySchema = properties[key] ?? additionalPropertiesSchema
254
+ if (getKind(propertySchema) === CompiledKind.Never) {
255
+ return true
256
+ }
257
+ return false
258
+ }
259
+ }
260
+
261
+ function compileRequired<E>(context: Context<E>, isBan: BanChecker, dependentTuple: DependentTuple<E>, { required }: InputSchema): string[] {
262
+ if (!required) {
263
+ return []
264
+ }
265
+ const uniqueCheckedResult = checkUniqueKeys(required)
266
+ if (uniqueCheckedResult.duplicated) {
267
+ recordWarn(context, `found duplicated required keys: ${uniqueCheckedResult.duplicated.join(', ')}`, 'required')
268
+ }
269
+ const requiredKeys: string[] = []
270
+ const banKeys: string[] = []
271
+
272
+ for (const requiredKey of uniqueCheckedResult.keys) {
273
+ const dependentKeys = collectDependencies(dependentTuple, requiredKey)
274
+ if (dependentKeys.some((key) => isBan(key))) {
275
+ banKeys.push(requiredKey)
276
+ } else {
277
+ requiredKeys.push(requiredKey)
278
+ }
279
+ }
280
+ if (banKeys.length > 0) {
281
+ recordWarn(context, `key ${banKeys.map((k) => JSON.stringify(k)).join(', ')} will ban by another condition`, 'required')
282
+ }
283
+ return requiredKeys
284
+ }
285
+
286
+ function checkSchemaIsNever<E>(
287
+ context: Context<E>,
288
+ additionalPropertiesSchema: Schema<E>,
289
+ properties: CompiledSchemaMap<E>,
290
+ required: string[],
291
+ maxProperties?: number,
292
+ minProperties?: number,
293
+ ): boolean {
294
+ if (maxProperties !== undefined && minProperties !== undefined && maxProperties < minProperties) {
295
+ recordWarn(context, `maxProperties(${maxProperties}) is less than minProperties(${minProperties})`)
296
+ return true
297
+ }
298
+ if (maxProperties !== undefined && required.length > maxProperties) {
299
+ recordWarn(context, `length(${required.length}) of required is greater than maxProperties(${maxProperties})`)
300
+ return true
301
+ }
302
+ if (minProperties !== undefined && required.length < minProperties) {
303
+ recordWarn(context, `length(${required.length}) of required is less than minProperties(${minProperties})`)
304
+ return true
305
+ }
306
+ if (getKind(additionalPropertiesSchema) !== CompiledKind.Never) {
307
+ return false
308
+ }
309
+ for (const key in properties) {
310
+ const compiledSchema = properties[key]
311
+ if (getKind(compiledSchema) !== CompiledKind.Never) {
312
+ return false
313
+ }
314
+ }
315
+ return true
316
+ }
317
+
318
+ function collectDependencies<E>([dependentRequired, dependentSchemas]: DependentTuple<E>, seedKey: string): string[] {
319
+ const queue: string[] = [seedKey]
320
+ const collection = new Set<string>(queue)
321
+
322
+ while (queue.length > 0) {
323
+ const key = queue.pop()!
324
+ const schema = dependentSchemas[key]
325
+ const requiredKeys = dependentRequired[key]
326
+
327
+ if (schema) {
328
+ if (getKind(schema) === CompiledKind.Object) {
329
+ collectKeys((schema as CompiledSchema<E>).required)
330
+ }
331
+ }
332
+ if (requiredKeys) {
333
+ collectKeys(requiredKeys)
334
+ }
335
+ }
336
+ function collectKeys(keys: string[] | undefined): void {
337
+ if (keys) {
338
+ for (const key of keys) {
339
+ if (!collection.has(key)) {
340
+ collection.add(key)
341
+ queue.push(key)
342
+ }
343
+ }
344
+ }
345
+ }
346
+ return [...collection]
347
+ }
348
+
349
+ function checkUniqueKeys(keys: readonly string[]): { keys: string[]; duplicated: string[] | null } {
350
+ const checking = new Set<string>()
351
+ const duplicated = new Set<string>()
352
+
353
+ for (const e of keys) {
354
+ if (checking.has(e)) {
355
+ duplicated.add(e)
356
+ } else {
357
+ checking.add(e)
358
+ }
359
+ }
360
+ if (duplicated.size === 0) {
361
+ return {
362
+ keys: [...keys],
363
+ duplicated: null,
364
+ }
365
+ } else {
366
+ return {
367
+ keys: [...checking],
368
+ duplicated: [...duplicated],
369
+ }
370
+ }
371
+ }
372
+
373
+ function findPatternSchema<E>(patternProperties: PatternProperties<E>, checkedKey: string): Schema<E> | null {
374
+ for (const key in patternProperties) {
375
+ const [schema, regExp] = patternProperties[key]
376
+ if (regExp.test(checkedKey)) {
377
+ return schema
378
+ }
379
+ }
380
+ return null
381
+ }
382
+
383
+ function wrapRegExp(pattern: string): RegExp | Error {
384
+ try {
385
+ return new RegExp(pattern, 'i')
386
+ } catch (error) {
387
+ if (error instanceof SyntaxError) {
388
+ return error
389
+ } else {
390
+ throw error
391
+ }
392
+ }
393
+ }
394
+
395
+ function unwrapPatternProperties<E>(patternProperties: PatternProperties<E>): JSONSchema7['patternProperties'] {
396
+ const target: JSONSchema7['patternProperties'] = {}
397
+ for (const key in patternProperties) {
398
+ target[key] = patternProperties[key][0] as JSONSchema7
399
+ }
400
+ return target
401
+ }
402
+
403
+ function mergeDependentTuple<E>([dependentRequired, dependentSchemas]: DependentTuple<E>, { dependencies }: InputSchema): JSONSchema7['dependencies'] {
404
+ const target: JSONSchema7['dependencies'] = {}
405
+ for (const key in dependencies) {
406
+ const required = dependentRequired[key]
407
+ const schema = dependentSchemas[key]
408
+ target[key] = required || schema
409
+ }
410
+ return target
411
+ }